From patchwork Thu Dec 30 15:08:16 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hendrik Leppkes X-Patchwork-Id: 32948 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:cd86:0:0:0:0:0 with SMTP id d128csp13160017iog; Thu, 30 Dec 2021 07:08:48 -0800 (PST) X-Google-Smtp-Source: ABdhPJymFR28D/LDXUdOXwl+9C/S8+0xbJFLMWp649XbmnMBgzkmWjR0xu3AHyxvvBurGgj5xE99 X-Received: by 2002:a17:907:7282:: with SMTP id dt2mr24872080ejc.653.1640876927831; Thu, 30 Dec 2021 07:08:47 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1640876927; cv=none; d=google.com; s=arc-20160816; b=pFOuzkeRieIrHKsEJV0EKvBTfafzLqyyR5Ptkq+3JFPXTVV0qoPYgd88s9HWwJhQhK 44XNcQ1pIRjSbtAJAEXQT5x+B6IxH5+URP/97jCyOZsC8Th6D0YwuAcOwjqd4H9Cy4BT dXiSysxBv3e44NEhFcsYFr8qbXzECzWAuJpigqfEqnx/2w2wJRuQzDQMq4Q+AL5jHrgp 5gUYuhsPq7G087IqQc4MENSM16Qbli+INutnwpVzlXS6YMQ2l9oxSI7Hf+ULHQtCKwfj h827yg1tRXPaJ3OcrYsjT/YM2GUQabUVuqIw9SPNfC4G2tkjqKouEq3ZzK842NqK3btI cJQw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:references:in-reply-to :message-id:date:to:from:dkim-signature:delivered-to; bh=QZJW7nJrrjM/rrjWEIe1oKNpb0NVuMk3DlFSgz0Uup0=; b=oYa3DxXoZiP+b1VDoCUFqD6TDhTEIpSDMhrWNRpz17gV0RV244z9b5RVOY926KWf2T RZnVWph0v23D4Hr7Ok0ZEo/HSN0/F+hPm/2fv2g4VxrLb4xagesaY2/w+ushIELO2dYG /T+P/2eHI86KXEOIk8BBMwRfLu2J61C1LKqGR4Iz8FEXHRaCQ1688aqv6oAQFLZH/7ZX KU0jSWkT9bXR3N6yMZdeQHmAxYiH6Pp09dURcR+AFZeUEFl8zEc49p5NENZJOArI3Dq8 xwpbk7C3OMG0lDc265nTVJZzomdpx1svCWBPqi022B7uSzEx5ZFSmbj8LM4kmXxk91eZ Hcrw== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b="BH2yUx/a"; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id p7si12810286edi.14.2021.12.30.07.08.46; Thu, 30 Dec 2021 07:08:47 -0800 (PST) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b="BH2yUx/a"; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 0E18568AF36; Thu, 30 Dec 2021 17:08:43 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-ed1-f45.google.com (mail-ed1-f45.google.com [209.85.208.45]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 5C30268A8F5 for ; Thu, 30 Dec 2021 17:08:36 +0200 (EET) Received: by mail-ed1-f45.google.com with SMTP id w16so99190697edc.11 for ; Thu, 30 Dec 2021 07:08:36 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=YGiPHgQ8S8GP5GmnONu61yaGv10SJQA8soooI4l9lIQ=; b=BH2yUx/aQL+RO0AnQWSG0sB5ofdla0zgnARrkypldZ5nHP+RF5R50THwCw8ZorGgKx 4RHfD+dgWmOQxljpOa3VcoHyv67u/YwqLzp8KJCc1ZGazpsEeHNyJbubsVFWeKDapD87 bT0Tvh2Urt9R1GPzIKAxkiN4gaper9liflIUHLQgP92h4UFvfhlekEC78OMV8Fz63jEE VPoE1zVJNIzXWUVh43x/b2gT5cmjtSQd0nGUJXBH6XogE2IXXLB9Gzs+epB+t5v0OETR kg+XY0VlULMcy1/eMh+n9Wx9CuptgXjW1IdGM/WyTBI55ZgnLwZ4ddIoOPlBJOooAMXA uJDQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=YGiPHgQ8S8GP5GmnONu61yaGv10SJQA8soooI4l9lIQ=; b=frOAo6NiUY1034sxJ1GObB5xSe+B0mxAoYp+k82ZrhmaRaGlzDuMe6fk1x0TN6o64i kdltyCx8X+GPF4DlEeXHa/3pu8j6Bffoddm9tAsMjHJEGJ0SQ5eioIl7Lu3z1Uztk5Hc MnTK9JJDB6HSGWNpr4e5pYWy1gteMviovlQEhzpxDfIBd1Q8pLr3JwOW0e9rAH3ZvC/w O7k+nGGb3Ae5NR7kesrDA6IPvlZ2SZsps1wVeNChUK4IRRjQxfyM43k7u+l02extwHOT UuN8Zb8GYNSLdb2PNzoGSFMpq+mlRNED65/PR09hMBcExUvcfqOHNDAyVT9/cHB3nm5K +gbQ== X-Gm-Message-State: AOAM532mE1NhnG/0vp0Y6IVDxUnGJoK9YNwkDCJjOyTgiFM8jwa3CEUd LTvbqbkXl7SBXCHEcxujmsFkoj1JfWA= X-Received: by 2002:a05:6402:2031:: with SMTP id ay17mr31153740edb.182.1640876915566; Thu, 30 Dec 2021 07:08:35 -0800 (PST) Received: from localhost.localdomain (p200300ccf7135a000c71ac01fe98e4d0.dip0.t-ipconnect.de. [2003:cc:f713:5a00:c71:ac01:fe98:e4d0]) by smtp.gmail.com with ESMTPSA id z26sm9506785edr.11.2021.12.30.07.08.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 30 Dec 2021 07:08:34 -0800 (PST) From: Hendrik Leppkes To: ffmpeg-devel@ffmpeg.org Date: Thu, 30 Dec 2021 16:08:16 +0100 Message-Id: <20211230150816.500-1-h.leppkes@gmail.com> X-Mailer: git-send-email 2.33.0.windows.2 In-Reply-To: <20211228134929.1164-1-h.leppkes@gmail.com> References: <20211228134929.1164-1-h.leppkes@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2] hevcdec: skip slices with missing PPS instead of skipping the entire packet 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: Hendrik Leppkes Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: SL4r7VcndUIu Aborting decoding of the entire packet on a missing PPS can result in missing the actual PPS on streams with badly ordered NALs, where the SPS/PPS/VPS are stitched to the back of the previous frame, instead of the beginning of the next frame. Instead, skip the undecodable slice, and let the decoder process further NALs in the same packet. If this happens on the first slice, the entire frame will be discarded later, otherwise on other slices the decode error flag will be set to indicate a missing/corrupt slice. --- libavcodec/hevcdec.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/libavcodec/hevcdec.c b/libavcodec/hevcdec.c index 3aa70e2245..89381db240 100644 --- a/libavcodec/hevcdec.c +++ b/libavcodec/hevcdec.c @@ -575,7 +575,9 @@ static int hls_slice_header(HEVCContext *s) sh->pps_id = get_ue_golomb_long(gb); if (sh->pps_id >= HEVC_MAX_PPS_COUNT || !s->ps.pps_list[sh->pps_id]) { av_log(s->avctx, AV_LOG_ERROR, "PPS id out of range: %d\n", sh->pps_id); - return AVERROR_INVALIDDATA; + if (s->ref) + s->ref->frame->decode_error_flags |= FF_DECODE_ERROR_DECODE_SLICES; + return 1; // skip slice with missing PPS, allowing other NALs to be decoded } if (!sh->first_slice_in_pic_flag && s->ps.pps != (HEVCPPS*)s->ps.pps_list[sh->pps_id]->data) {