From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id 815814101E for ; Mon, 13 Jun 2022 03:42:20 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id D18AF68B5FF; Mon, 13 Jun 2022 06:42:17 +0300 (EEST) Received: from out162-62-57-210.mail.qq.com (out162-62-57-210.mail.qq.com [162.62.57.210]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id D262D68B073 for ; Mon, 13 Jun 2022 06:42:10 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foxmail.com; s=s201512; t=1655091728; bh=F9/5txkiCSMwgXTEHw2WrbeQHPtug8v0imG9FubZgyU=; h=From:Subject:Date:References:To:In-Reply-To; b=phOx8bWhyW9EiIWFPQIb8gH6QN6F1b6SP0TRn6FA4xNpK85kjGNImk7QcW9Q9W26m adHh8bm4xUkScGdWgBrSCjHjU1DndL/g1Vxah3vEXGnFmFwZMMzBh9/1NB0k8j+XMI 17+MhRpa3huTtuaKTklyyV3AKFRvv8c8OP1xcgq0= Received: from [192.168.255.10] ([59.37.125.124]) by newxmesmtplogicsvrszc10.qq.com (NewEsmtp) with SMTP id A87000D9; Mon, 13 Jun 2022 11:42:07 +0800 X-QQ-mid: xmsmtpt1655091727ted0b9cr2 Message-ID: X-QQ-XMAILINFO: MZ4XH1L85f1ryAJMdHN3NfbJPYfMV5MbKgNhh/1Xygsc0VwNidLkBObyXUOFcC pXLO0hkLTMHn+SxjP4Bllimvs6W8lV9x2qx6CDc5wgvuw5RYgoMgWxXCRA8RjuI7WquSddvvj1Pl CKy4aOJDzJltxHt6iBKaQwNACduk8XM1EdECl733d5QQYyeXHvyR4Z2DsxXu23abSo4ZnA4YjCPI a0mCWam7QjN782WTaG9kI1r7kGUL+6j+dOufiGKWNtKQbsigyb1GpCwbTkISDnhvwS0b1KKDgAd4 7hZqnvmMFzjLsjdKvJk1j6xYCg4hp5ujwsGvMCqfceU1+BFdMSHWvGUKX31gO871VEmpma+KPMr7 fXuhjYQ4BGJEV7ly2TQM2fDvAb+L0GzQOsyRsb2k8iFkSGbMYtEyKoW81ysf4QsszaRYh9NcFAcq LM0bfd97XNJwlXvRBGEkNZZsFSqPfmccRm/O5bV6EmNngub7cSG6pNAso/QlWHFF8ox2RMqD7A26 rLp/kPMcjg1sb9VyAPsumAScrt+1lF+PXQSFkD6BEcHSpT5uQPXdeSBMjZxTDDokdVofLxNe9YMY kON1P4I60oFHUFtUn8zhGxhnJDjhGufD0dwPFNOr/PDfMJhsIo2Xb7arkcv03s0dUumwolegYroz /9FyPO1QyYhh56ldO7U+KSWIx4nTR9DiVtPe/tL4WFlWpP790YbI7bvIbNXB8WcWcjI+LP1q3hRB xBFOYMaASGoe+qJTNGUU8zpZqlT/Lt8GksnDd6zH/KgjG3p69qI/BjpzO7EBr7+nv6zc5o0JznXT 8XzgZs3u60io+s/HHD9Klo/ejdWuT6nEEZSnKJZ0SPwNIILlEFbcyLFss1bZytfNe2f5RVpibpJ0 9c5L+qvcVt3J6ZWVvpR12S1x70PF6K4JludnGWqKdq0Mc2pXXptyESThxq4FoLO/Hm5tCFs/VXOr qfMaEFgg8= From: =?utf-8?B?InpoaWxpemhhbyjotbXlv5fnq4spIg==?= Mime-Version: 1.0 (Mac OS X Mail 14.0 \(3654.60.0.2.21\)) Date: Mon, 13 Jun 2022 11:42:06 +0800 References: To: FFmpeg development discussions and patches In-Reply-To: X-OQ-MSGID: X-Mailer: Apple Mail (2.3654.60.0.2.21) Subject: Re: [FFmpeg-devel] [PATCH v2 3/3] avcodec/avs2_parser: parse more info X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 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 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: > On Jun 13, 2022, at 1:07 AM, Andreas Rheinhardt wrote: > > Zhao Zhili: >> Including video resolution, framerate and picture type, etc. >> >> Signed-off-by: Zhao Zhili >> --- >> v2: fix unused variable warning >> >> libavcodec/avs2.h | 27 ++++++++++ >> libavcodec/avs2_parser.c | 103 +++++++++++++++++++++++++++++++++++++++ >> 2 files changed, 130 insertions(+) >> >> diff --git a/libavcodec/avs2.h b/libavcodec/avs2.h >> index f342ba52a0..e961c7d517 100644 >> --- a/libavcodec/avs2.h >> +++ b/libavcodec/avs2.h >> @@ -23,6 +23,8 @@ >> #ifndef AVCODEC_AVS2_H >> #define AVCODEC_AVS2_Hto >> >> +#include "libavutil/rational.h" >> + >> #define AVS2_SLICE_MAX_START_CODE 0x000001AF >> >> enum { >> @@ -38,4 +40,29 @@ enum { >> #define AVS2_ISPIC(x) ((x) == AVS2_INTRA_PIC_START_CODE || (x) == AVS2_INTER_PIC_START_CODE) >> #define AVS2_ISUNIT(x) ((x) == AVS2_SEQ_START_CODE || AVS2_ISPIC(x)) >> >> +enum AVS2Profile { >> + AVS2_PROFILE_MAIN_PIC = 0x12, >> + AVS2_PROFILE_MAIN = 0x20, >> + AVS2_PROFILE_MAIN10 = 0x22, >> +}; >> + >> +static const AVRational ff_avs2_frame_rate_tab[16] = { > > If this is only used at one place (as it is), it should be moved to that > place; if it is to be used in several places, it should be moved to a > single file instead of a header. Thanks for the review, fixed by v3: 1. Move ff_avs2_frame_rate_tab from avs2.h to avs2.c 2. Consitify `precision` in patch 3/5 3. init_get_bits8() with size limites to buf_size_min 4. Select avs2_parser for libdavs2 5. Use ff_avs2_frame_rate_tab in libdavs2 http://ffmpeg.org/pipermail/ffmpeg-devel/2022-June/297476.html > >> + { 0 , 0 }, // forbid >> + { 24000, 1001}, >> + { 24 , 1 }, >> + { 25 , 1 }, >> + { 30000, 1001}, >> + { 30 , 1 }, >> + { 50 , 1 }, >> + { 60000, 1001}, >> + { 60 , 1 }, >> + { 100 , 1 }, >> + { 120 , 1 }, >> + { 200 , 1 }, >> + { 240 , 1 }, >> + { 300 , 1 }, >> + { 0 , 0 }, // reserved >> + { 0 , 0 } // reserved >> +}; >> + >> #endif >> diff --git a/libavcodec/avs2_parser.c b/libavcodec/avs2_parser.c >> index 71cf442903..18d7729768 100644 >> --- a/libavcodec/avs2_parser.c >> +++ b/libavcodec/avs2_parser.c >> @@ -19,7 +19,9 @@ >> * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA >> */ >> >> +#include "libavutil/avutil.h" >> #include "avs2.h" >> +#include "get_bits.h" >> #include "parser.h" >> >> static int avs2_find_frame_end(ParseContext *pc, const uint8_t *buf, int buf_size) >> @@ -58,6 +60,105 @@ static int avs2_find_frame_end(ParseContext *pc, const uint8_t *buf, int buf_siz >> return END_NOT_FOUND; >> } >> >> +static void parse_avs2_seq_header(AVCodecParserContext *s, const uint8_t *buf, >> + int buf_size, AVCodecContext *avctx) >> +{ >> + GetBitContext gb; >> + int profile, level; >> + int width, height; >> + int chroma, sample_precision, encoding_precision = 1; >> + // sample_precision and encoding_precision is 3 bits >> + static uint8_t precision[8] = { 0, 8, 10 }; > > Missing const. > >> + unsigned aspect_ratio; >> + unsigned frame_rate_code; >> + int low_delay; >> + >> + if (buf_size < 15) >> + return; >> + >> + init_get_bits8(&gb, buf, buf_size); > > If buf_size is gigantic, init_get_bits8 can fail. Given that you only > ever read the first 15 bytes of the header, you can avoid this by > initializing the GetBitContext with a size of 15. > >> + >> + s->key_frame = 1; >> + s->pict_type = AV_PICTURE_TYPE_I; >> + >> + profile = get_bits(&gb, 8); >> + level = get_bits(&gb, 8); >> + >> + // progressive_sequence u(1) >> + // field_coded_sequence u(1) >> + skip_bits(&gb, 2); >> + >> + width = get_bits(&gb, 14); >> + height = get_bits(&gb, 14); >> + >> + chroma = get_bits(&gb, 2); >> + sample_precision = get_bits(&gb, 3); >> + if (profile == AVS2_PROFILE_MAIN10) >> + encoding_precision = get_bits(&gb, 3); >> + >> + aspect_ratio = get_bits(&gb, 4); >> + frame_rate_code = get_bits(&gb, 4); >> + >> + // bit_rate_lower u(18) >> + // marker_bit f(1) >> + // bit_rate_upper u(12) >> + skip_bits(&gb, 31); >> + >> + low_delay = get_bits(&gb, 1); >> + >> + s->width = width; >> + s->height = height; >> + s->coded_width = FFALIGN(width, 8); >> + s->coded_height = FFALIGN(height, 8); >> + avctx->framerate.num = avctx->time_base.den = >> + ff_avs2_frame_rate_tab[frame_rate_code].num; >> + avctx->framerate.den = avctx->time_base.num = >> + ff_avs2_frame_rate_tab[frame_rate_code].den; >> + avctx->has_b_frames = FFMAX(avctx->has_b_frames, !low_delay); >> + >> + av_log(avctx, AV_LOG_DEBUG, >> + "AVS2 parse seq HDR: profile %x, level %x, " >> + "width %d, height %d, " >> + "chroma %d, sample_precision %d bits, encoding_precision %d bits, " >> + "aspect_ratio 0x%x, framerate %d/%d, low_delay %d\n", >> + profile, level, >> + width, height, >> + chroma, precision[sample_precision], precision[encoding_precision], >> + aspect_ratio, avctx->framerate.num, avctx->framerate.den, low_delay); >> +} >> + >> +static void parse_avs2_units(AVCodecParserContext *s, const uint8_t *buf, >> + int buf_size, AVCodecContext *avctx) >> +{ >> + if (buf_size < 5) >> + return; >> + >> + if (!(buf[0] == 0x0 && buf[1] == 0x0 && buf[2] == 0x1)) >> + return; >> + >> + switch (buf[3]) { >> + case AVS2_SEQ_START_CODE: >> + parse_avs2_seq_header(s, buf + 4, buf_size - 4, avctx); >> + return; >> + case AVS2_INTRA_PIC_START_CODE: >> + s->key_frame = 1; >> + s->pict_type = AV_PICTURE_TYPE_I; >> + return; >> + case AVS2_INTER_PIC_START_CODE: >> + s->key_frame = 0; >> + if (buf_size > 9) { >> + int pic_code_type = buf[8] & 0x3; >> + if (pic_code_type == 1) >> + s->pict_type = AV_PICTURE_TYPE_P; >> + else if (pic_code_type == 3) >> + s->pict_type = AV_PICTURE_TYPE_S; >> + else >> + s->pict_type = AV_PICTURE_TYPE_B; >> + } >> + return; >> + } >> +} >> + >> static int avs2_parse(AVCodecParserContext *s, AVCodecContext *avctx, >> const uint8_t **poutbuf, int *poutbuf_size, >> const uint8_t *buf, int buf_size) >> @@ -76,6 +177,8 @@ static int avs2_parse(AVCodecParserContext *s, AVCodecContext *avctx, >> } >> } >> >> + parse_avs2_units(s, buf, buf_size, avctx); >> + >> *poutbuf = buf; >> *poutbuf_size = buf_size; >> > > _______________________________________________ > ffmpeg-devel mailing list > ffmpeg-devel@ffmpeg.org > https://ffmpeg.org/mailman/listinfo/ffmpeg-devel > > To unsubscribe, visit link above, or email > ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".