diff options
author | Marton Balint <cus@passwd.hu> | 2020-03-03 23:13:07 +0100 |
---|---|---|
committer | Marton Balint <cus@passwd.hu> | 2020-03-14 22:25:25 +0100 |
commit | 331b96acb595631418322c78131bda358596a308 (patch) | |
tree | b6eee5bca3a901188f45957419ebaf5c73a51ef5 /libavformat/mxfenc.c | |
parent | ae4d00b97f78e06599e79e89b41edf2d97908b66 (diff) | |
download | ffmpeg-331b96acb595631418322c78131bda358596a308.tar.gz |
avformat/mxfenc: factorize timecode checking and setting
Signed-off-by: Marton Balint <cus@passwd.hu>
Diffstat (limited to 'libavformat/mxfenc.c')
-rw-r--r-- | libavformat/mxfenc.c | 32 |
1 files changed, 13 insertions, 19 deletions
diff --git a/libavformat/mxfenc.c b/libavformat/mxfenc.c index cf63e64c09..3616d47ce8 100644 --- a/libavformat/mxfenc.c +++ b/libavformat/mxfenc.c @@ -2407,17 +2407,24 @@ static void mxf_gen_umid(AVFormatContext *s) mxf->instance_number = seed & 0xFFFFFF; } -static int mxf_init_timecode(AVFormatContext *s, AVStream *st, AVRational rate) +static int mxf_init_timecode(AVFormatContext *s, AVStream *st, AVRational tbc) { MXFContext *mxf = s->priv_data; AVDictionaryEntry *tcr = av_dict_get(s->metadata, "timecode", NULL, 0); + + if (!ff_mxf_get_content_package_rate(tbc)) { + av_log(s, AV_LOG_ERROR, "Unsupported frame rate %d/%d\n", tbc.den, tbc.num); + return AVERROR(EINVAL); + } + + mxf->timecode_base = (tbc.den + tbc.num/2) / tbc.num; if (!tcr) tcr = av_dict_get(st->metadata, "timecode", NULL, 0); if (tcr) - return av_timecode_init_from_string(&mxf->tc, rate, tcr->value, s); + return av_timecode_init_from_string(&mxf->tc, av_inv_q(tbc), tcr->value, s); else - return av_timecode_init(&mxf->tc, rate, 0, 0, s); + return av_timecode_init(&mxf->tc, av_inv_q(tbc), 0, 0, s); } static int mxf_write_header(AVFormatContext *s) @@ -2454,7 +2461,7 @@ static int mxf_write_header(AVFormatContext *s) if (st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO) { const AVPixFmtDescriptor *pix_desc = av_pix_fmt_desc_get(st->codecpar->format); // TODO: should be avg_frame_rate - AVRational rate, tbc = st->time_base; + AVRational tbc = st->time_base; // Default component depth to 8 sc->component_depth = 8; sc->h_chroma_sub_sample = 2; @@ -2479,16 +2486,9 @@ static int mxf_write_header(AVFormatContext *s) } mxf->content_package_rate = ff_mxf_get_content_package_rate(tbc); - if (!mxf->content_package_rate) { - av_log(s, AV_LOG_ERROR, "Unsupported video frame rate %d/%d\n", - tbc.den, tbc.num); - return AVERROR(EINVAL); - } - mxf->timecode_base = (tbc.den + tbc.num/2) / tbc.num; mxf->time_base = tbc; - rate = av_inv_q(mxf->time_base); avpriv_set_pts_info(st, 64, mxf->time_base.num, mxf->time_base.den); - if((ret = mxf_init_timecode(s, st, rate)) < 0) + if((ret = mxf_init_timecode(s, st, tbc)) < 0) return ret; if (st->codecpar->codec_id == AV_CODEC_ID_MPEG2VIDEO) { @@ -2564,16 +2564,10 @@ static int mxf_write_header(AVFormatContext *s) return AVERROR(EINVAL); } - if (!ff_mxf_get_content_package_rate(tbc)) { - av_log(s, AV_LOG_ERROR, "Unsupported timecode frame rate %d/%d\n", tbc.den, tbc.num); - return AVERROR(EINVAL); - } - mxf->time_base = st->time_base; - if((ret = mxf_init_timecode(s, st, av_inv_q(tbc))) < 0) + if((ret = mxf_init_timecode(s, st, tbc)) < 0) return ret; - mxf->timecode_base = (tbc.den + tbc.num/2) / tbc.num; mxf->edit_unit_byte_count = (av_get_bits_per_sample(st->codecpar->codec_id) * st->codecpar->channels) >> 3; sc->index = INDEX_WAV; } else { |