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 D27B0447AB for ; Wed, 26 Oct 2022 02:23:57 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id EC05668BC2A; Wed, 26 Oct 2022 05:23:53 +0300 (EEST) Received: from out162-62-57-64.mail.qq.com (out162-62-57-64.mail.qq.com [162.62.57.64]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id AB62F68BBFC for ; Wed, 26 Oct 2022 05:23:46 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qq.com; s=s201512; t=1666751016; bh=hC+sOD6P+YutrvQ2yDwx/N7p1JkLwFxYujGxfI+ZV/g=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=PJlcycyLxlD+bWazCnm6dbb0kI0mBKfKZDFM2QU/xJ2uGpky4rxvrFcsZY1BsLGKY +sQXHeatKY6n27xep0IbZy69k/5skAng48TNdV8fAtcM5C8AAlOL1qhaCpxPrKBSg7 VSA7DavOLmhllLkY2ioDqLwgtwjNYhT731lj+vyU= Received: from localhost.localdomain ([103.107.216.225]) by newxmesmtplogicsvrszc2-1.qq.com (NewEsmtp) with SMTP id 5E288AB3; Wed, 26 Oct 2022 10:23:34 +0800 X-QQ-mid: xmsmtpt1666751014tu0an5509 Message-ID: X-QQ-XMAILINFO: NMXiAFG25ild8lRawEFvTjx3zkQfjhefqIyz7KgeqxEUWvaV2V8cUt4JqSIclp IcWSG/wY18jllH8vEOzvG42jMh3Hp5B5/EFzXlMlB5XjYI63hj5jcbkOHmUGwWcsYhP7uQ+QOEBT PkT8Tw0lnrlZgxsTu4XizVvkM71RDxOOGlGvmU0G1D1AAw5w4CWoGJl82fed+CP53mIb+DXYSy/3 SM1yc6v10/+SYV0zlDhmUMSgBEKvj4fFnLjrz41eUI6VvneHqhQjfSN0DdSD5BFKkozeAPjS+YAj zj3gZ6iMXRIqi8vtGGUoyoHlb3QbRdZu7SlGVP+OPBr3xv9ml3/BQDNE4MPgSflIhqJ078DVHJXO CLeWwBrgJ17SE+D03ObNBs3VCscZW7snPLeckk4kb1Rv8cs318R8+B1d3u+1cR5jZ72qT8Ct8hKw dYYjwGDsYGnUGGrx5UQgIwdvJcfoeRNx/lnnw4Fgk8joPESnrvzqpEwjLIr4MNyW+hQ6Rfgbcdtk PFhLL9dugL4NYrwOVize7Vtf9hfOxtRCUM6fTRn9u7RUrRr3f7+SUW8LHTOh/BAAokSprlhxpNo8 W1iA9/D7IXw1olK+5/ZH9gUKLvLeiMOEkXxA95iX1ZC/IlxMXkS/MegR8KV82jk5J8+2ED7Rj9Vg kZq+jx6wf1pndvuexK+MKJQKnNcaiqwT67arsUIxEu7+z8DYH4qg1X2F57VUHvYNtxm2BvEv4X/4 52IsUWrPNLSYCJ3Dvlqux2TR/dPNyS1l5hGjZecNEpdM7h0VjXNF6h/9Kh8zbEs8eqpF2F4Apt/j T5dTJt4/5s7xfaMa1dUUzOI0mrQ9gBOUGAt93R+0YA8Qy6BYNhRXFM4yA7zC4vvIZqzDvRafLVco J8mohlIjbTt88dOzDpbHojxwol2pYsL8htwnhEbK0t5ABbnSrnRdRTvwxDZkZWRs0E2R0mdp7wo5 F2avysEeLtj1Z2L1V34XfMyjlusaW/ From: 1035567130@qq.com To: ffmpeg-devel@ffmpeg.org Date: Wed, 26 Oct 2022 10:23:33 +0800 X-OQ-MSGID: <20221026022333.37893-1-1035567130@qq.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: References: MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v3] lavc/hevc_ps: fix process failed when SPS before VPS in hvcC 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 Cc: Wang Yaqiang 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: From: Wang Yaqiang In some videos, SPS will be stored before VPS in hvcC box, parse SPS does not depend on VPS, so the video is expected to be processed normally. Added "parsed_vps" parameter to indicate whether VPS have been parsed. Only VPS have been parsed can be verified during SPS parsing. Signed-off-by: Wang Yaqiang --- libavcodec/hevc_parser.c | 8 ++++++++ libavcodec/hevc_ps.c | 3 +-- libavcodec/hevcdec.c | 9 ++++++++- 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/libavcodec/hevc_parser.c b/libavcodec/hevc_parser.c index 59f9a0ff3e..be4aa55e51 100644 --- a/libavcodec/hevc_parser.c +++ b/libavcodec/hevc_parser.c @@ -85,8 +85,16 @@ static int hevc_parse_slice_header(AVCodecParserContext *s, H2645NAL *nal, } if (ps->sps != (HEVCSPS*)ps->sps_list[ps->pps->sps_id]->data) { ps->sps = (HEVCSPS*)ps->sps_list[ps->pps->sps_id]->data; + if (ps->sps->vps_id >= HEVC_MAX_VPS_COUNT || !ps->vps_list[ps->sps->vps_id]) { + av_log(avctx, AV_LOG_ERROR, "VPS id out of range: %d\n", ps->sps->vps_id); + return AVERROR_INVALIDDATA; + } ps->vps = (HEVCVPS*)ps->vps_list[ps->sps->vps_id]->data; } + if (!ps->vps) { + av_log(avctx, AV_LOG_ERROR, "VPS %d does not exist\n", ps->sps->vps_id); + return AVERROR_INVALIDDATA; + } ow = &ps->sps->output_window; s->coded_width = ps->sps->width; diff --git a/libavcodec/hevc_ps.c b/libavcodec/hevc_ps.c index f665d8053c..9abee8bd90 100644 --- a/libavcodec/hevc_ps.c +++ b/libavcodec/hevc_ps.c @@ -916,9 +916,8 @@ int ff_hevc_parse_sps(HEVCSPS *sps, GetBitContext *gb, unsigned int *sps_id, sps->vps_id = get_bits(gb, 4); if (vps_list && !vps_list[sps->vps_id]) { - av_log(avctx, AV_LOG_ERROR, "VPS %d does not exist\n", + av_log(avctx, AV_LOG_WARNING, "VPS %d does not exist\n", sps->vps_id); - return AVERROR_INVALIDDATA; } sps->max_sub_layers = get_bits(gb, 3) + 1; diff --git a/libavcodec/hevcdec.c b/libavcodec/hevcdec.c index fb44d8d3f2..03942a150d 100644 --- a/libavcodec/hevcdec.c +++ b/libavcodec/hevcdec.c @@ -327,6 +327,10 @@ static void export_stream_params(HEVCContext *s, const HEVCSPS *sps) { AVCodecContext *avctx = s->avctx; const HEVCParamSets *ps = &s->ps; + if (!s->ps.vps_list[sps->vps_id]) { + av_log(avctx, AV_LOG_ERROR, "VPS id out of range: %d\n", sps->vps_id); + return; + } const HEVCVPS *vps = (const HEVCVPS*)ps->vps_list[sps->vps_id]->data; const HEVCWindow *ow = &sps->output_window; unsigned int num = 0, den = 0; @@ -520,7 +524,10 @@ static int set_sps(HEVCContext *s, const HEVCSPS *sps, ret = pic_arrays_init(s, sps); if (ret < 0) goto fail; - + if (!s->ps.vps_list[sps->vps_id]) { + ret = AVERROR_INVALIDDATA; + goto fail; + } export_stream_params(s, sps); s->avctx->pix_fmt = pix_fmt; -- 2.33.0 _______________________________________________ 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".