コード例 #1
0
ファイル: ass_mp.c プロジェクト: ronin13/MplayerMt
/**
 * \brief Convert subdata to ASS_Track
 * \param subdata subtitles struct from subreader
 * \param fps video framerate
 * \return newly allocated ASS_Track, filled with subtitles from subdata
 */
ASS_Track *mp_ass_read_subdata(ASS_Library *library, sub_data *subdata,
                               double fps)
{
    ASS_Track *track;
    int i;

    track = mp_ass_default_track(library);
    track->name = subdata->filename ? strdup(subdata->filename) : 0;

    for (i = 0; i < subdata->sub_num; ++i) {
        int eid = ass_process_subtitle(track, subdata->subtitles + i);
        if (eid < 0)
            continue;
        if (!subdata->sub_uses_time) {
            track->events[eid].Start *= 100. / fps;
            track->events[eid].Duration *= 100. / fps;
        }
    }
    return track;
}
コード例 #2
0
ファイル: sd_ass.c プロジェクト: Kovensky/mplayer-kovensky
static void init(struct sh_sub *sh, struct osd_state *osd)
{
    struct sd_ass_priv *ctx;

    if (sh->initialized) {
        ctx = sh->context;
    } else {
        ctx = talloc_zero(NULL, struct sd_ass_priv);
        sh->context = ctx;
        if (sh->type == 'a') {
            ctx->ass_track = ass_new_track(osd->ass_library);
            if (sh->extradata)
                ass_process_codec_private(ctx->ass_track, sh->extradata,
                                          sh->extradata_len);
        } else
            ctx->ass_track = mp_ass_default_track(osd->ass_library, sh->opts);
    }

    assert(osd->ass_track == NULL);
    osd->ass_track = ctx->ass_track;
    osd->vsfilter_aspect = sh->type == 'a';
    osd->ass_track_changed = true;
}