From patchwork Thu Mar 5 21:56:26 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marton Balint X-Patchwork-Id: 18060 Return-Path: X-Original-To: patchwork@ffaux-bg.ffmpeg.org Delivered-To: patchwork@ffaux-bg.ffmpeg.org Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by ffaux.localdomain (Postfix) with ESMTP id 2768D44AB1F for ; Thu, 5 Mar 2020 23:56:50 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 0E97D68AD32; Thu, 5 Mar 2020 23:56:50 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from iq.passwd.hu (iq.passwd.hu [217.27.212.140]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 3E20168AC2D for ; Thu, 5 Mar 2020 23:56:43 +0200 (EET) Received: from localhost (localhost [127.0.0.1]) by iq.passwd.hu (Postfix) with ESMTP id 28A97E3953; Thu, 5 Mar 2020 22:56:43 +0100 (CET) X-Virus-Scanned: amavisd-new at passwd.hu Received: from iq.passwd.hu ([127.0.0.1]) by localhost (iq.passwd.hu [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id Z3RuXd5APV6K; Thu, 5 Mar 2020 22:56:41 +0100 (CET) Received: from bluegene.passwd.hu (localhost [127.0.0.1]) by iq.passwd.hu (Postfix) with ESMTP id BDC55E3B73; Thu, 5 Mar 2020 22:56:41 +0100 (CET) From: Marton Balint To: ffmpeg-devel@ffmpeg.org Date: Thu, 5 Mar 2020 22:56:26 +0100 Message-Id: <20200305215628.19514-5-cus@passwd.hu> X-Mailer: git-send-email 2.16.4 In-Reply-To: <20200305215628.19514-1-cus@passwd.hu> References: <20200305215628.19514-1-cus@passwd.hu> Subject: [FFmpeg-devel] [PATCH v2 5/7] avformat/mxfenc: factorize timecode checking and setting X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: Marton Balint MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Signed-off-by: Marton Balint --- libavformat/mxfenc.c | 32 +++++++++++++------------------- 1 file changed, 13 insertions(+), 19 deletions(-) diff --git a/libavformat/mxfenc.c b/libavformat/mxfenc.c index 93d840ebbf..51e2dc5f31 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 {