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 6A2A842844 for ; Tue, 5 Apr 2022 06:49:38 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id ED4B068B23A; Tue, 5 Apr 2022 09:49:35 +0300 (EEST) Received: from mail-pj1-f46.google.com (mail-pj1-f46.google.com [209.85.216.46]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 99A8168B120 for ; Tue, 5 Apr 2022 09:49:29 +0300 (EEST) Received: by mail-pj1-f46.google.com with SMTP id 2so3749014pjw.2 for ; Mon, 04 Apr 2022 23:49:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=message-id:date:mime-version:user-agent:content-language:to:from :subject:content-transfer-encoding; bh=IN3omPE5CMHjrgac6jJxMABXDP4I047iexa5EN0p1Hk=; b=FVrxsChryuAhRQr9sHTNqHholW3JLd5YCeOEqyk+ae8Yeyob3I2Lze1j6J5eKGyk+Z 93n7Tv2WjXENFYMmbenBC9mbXIYUY05To570OiF2pRgOnAJw2vadXkTfVcSTZyxeYNcC ZfRaUNDJ31qatjfrot1ZTPkCvCdWLPF+gGpBBALdjCo2irPoDX6PYiPuAsTllOIsaNxz gZDLIxXvBftWibUz9/CPJQflkOuOtZ7ZVm3PX8Ryet6QlmNjQiJppd0zhR0gmL3iLTQP pT3WnBlhLqA61A6RPe3M3ppNUYe/MmU6LhWsx6xIED3DR3ka9qx0mKhjtXw3dk/2VOYW ghJA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:message-id:date:mime-version:user-agent :content-language:to:from:subject:content-transfer-encoding; bh=IN3omPE5CMHjrgac6jJxMABXDP4I047iexa5EN0p1Hk=; b=g+bC9f9il0QxC8V90PZB8mJWL4oEkbzuqLggmDeki6KIrOSbzTtt21LO9yAnMJ9HBq 7jJrbogLzLYBx4W4y08fQpoJwhkZzOHPIRvv5dya30/EM3hwae88Xv/CfkQ1FgtzFuZj Co3NCUkBLdED5iCD0x80VjMQgM/4GxJ5RaH01no762arOS+z6+qfP94LlnoUlRDphjgp 8M8ady2d3LDdxYPSNcYsus51xqdSUGzZj6jJ2GzJtwCN7QkFJ1+5jOUKtY4lgtUntI8O YqxPtX93y1mBFpchFneLZBG7RXpBnGLagyikb0VzXaDCfF2euLjWltsdvi2zs+DCDkVv BvnQ== X-Gm-Message-State: AOAM533b59gZCl84z/5jhbSZu9UxtPii207uD5pvYQ8BffGR4ZuCddPq vJqU8sbqGg8B/tX/S+wzBGXlAc2tLtPw4g== X-Google-Smtp-Source: ABdhPJykY+2HyM3sC9xz5Bg6wfDZpl7vIbpx/GyivVZD+/iwNg+NXzbhlAoUUJPKjUuGHt9aW8sj/A== X-Received: by 2002:a17:903:244b:b0:154:2cb2:86d with SMTP id l11-20020a170903244b00b001542cb2086dmr1989867pls.123.1649141367779; Mon, 04 Apr 2022 23:49:27 -0700 (PDT) Received: from [192.168.247.14] ([47.246.98.230]) by smtp.gmail.com with ESMTPSA id pj9-20020a17090b4f4900b001c744034e7csm1257898pjb.2.2022.04.04.23.49.26 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 04 Apr 2022 23:49:27 -0700 (PDT) Message-ID: <5ca902bc-99cc-2866-ec9a-068ac356924d@gmail.com> Date: Tue, 5 Apr 2022 14:49:24 +0800 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.7.0 Content-Language: en-US To: ffmpeg-devel@ffmpeg.org From: Xiaolei Yu Subject: [FFmpeg-devel] [PATCH] libavcodec/hevcdec: detect non-conformant missing refs 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: For cases which prefer rejecting broken bitstreams. --- libavcodec/hevc_refs.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/libavcodec/hevc_refs.c b/libavcodec/hevc_refs.c index fe18ca2b1d..7ea70e301b 100644 --- a/libavcodec/hevc_refs.c +++ b/libavcodec/hevc_refs.c @@ -426,7 +426,7 @@ static HEVCFrame *generate_missing_ref(HEVCContext *s, int poc) /* add a reference with the given poc to the list and mark it as used in DPB */ static int add_candidate_ref(HEVCContext *s, RefPicList *list, - int poc, int ref_flag, uint8_t use_msb) + int poc, int ref_flag, uint8_t use_msb, int maybe_missing) { HEVCFrame *ref = find_ref_idx(s, poc, use_msb); @@ -434,6 +434,9 @@ static int add_candidate_ref(HEVCContext *s, RefPicList *list, return AVERROR_INVALIDDATA; if (!ref) { + if ((s->avctx->err_recognition & AV_EF_COMPLIANT) && !maybe_missing) + return AVERROR_INVALIDDATA; + ref = generate_missing_ref(s, poc); if (!ref) return AVERROR(ENOMEM); @@ -476,6 +479,7 @@ int ff_hevc_frame_rps(HEVCContext *s) for (i = 0; i < short_rps->num_delta_pocs; i++) { int poc = s->poc + short_rps->delta_poc[i]; int list; + int maybe_missing; if (!short_rps->used[i]) list = ST_FOLL; @@ -484,7 +488,10 @@ int ff_hevc_frame_rps(HEVCContext *s) else list = ST_CURR_AFT; - ret = add_candidate_ref(s, &rps[list], poc, HEVC_FRAME_FLAG_SHORT_REF, 1); + maybe_missing = list != ST_CURR_BEF && list != ST_CURR_AFT; + + ret = add_candidate_ref(s, &rps[list], poc, HEVC_FRAME_FLAG_SHORT_REF, 1, + maybe_missing); if (ret < 0) goto fail; } @@ -493,8 +500,10 @@ int ff_hevc_frame_rps(HEVCContext *s) for (i = 0; i < long_rps->nb_refs; i++) { int poc = long_rps->poc[i]; int list = long_rps->used[i] ? LT_CURR : LT_FOLL; + int maybe_missing = list != LT_CURR; - ret = add_candidate_ref(s, &rps[list], poc, HEVC_FRAME_FLAG_LONG_REF, long_rps->poc_msb_present[i]); + ret = add_candidate_ref(s, &rps[list], poc, HEVC_FRAME_FLAG_LONG_REF, long_rps->poc_msb_present[i], + maybe_missing); if (ret < 0) goto fail; } -- 2.35.1 _______________________________________________ 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".