From patchwork Tue Sep 4 16:17:43 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: joshdk@ob-encoder.com X-Patchwork-Id: 10231 Delivered-To: ffmpegpatchwork@gmail.com Received: by 2002:a02:12c4:0:0:0:0:0 with SMTP id 65-v6csp4075391jap; Tue, 4 Sep 2018 09:24:47 -0700 (PDT) X-Google-Smtp-Source: ANB0VdYpaenAbh44LV3HXLZVWg/RgytF9dwPLSB76DrGqcivEJUeQCzug2cfSFBjzRmJnFP6pS4g X-Received: by 2002:adf:a644:: with SMTP id k62-v6mr23158670wrc.78.1536078287896; Tue, 04 Sep 2018 09:24:47 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1536078287; cv=none; d=google.com; s=arc-20160816; b=BnMU5itVkxN+OiROw6RL7BiqWtu1UwaksBFIvMVafu8AWxSYnJQaWDxLLHirwyuZyu +c3SRDHhOhYTJ/vgpqp2mjnHJ5WBUzVHgSC+Dhvv9e8+WhIhIG4FxTA4SOE0bK/Wf09J eQQ6U/6iYquahzGn608VGgsWtSUEBjQvtrhuAghBnPFq0RiHNJmQAXLHE6TsE8HU9f5P d33z+/n0ztGYBtnpxtB5joEwzBlDp3LbXk/Q9TUjtOaIGvffHzmlvTgwv17eFcKZtT48 TQXKC4bLgCclWcWI3ap2bL01zccwZ82be2FkzX9494CJABGjXvwSAmWdYBbr3z3+khot tjdw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:mime-version:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:message-id:date:to:from:dkim-signature :delivered-to:arc-authentication-results; bh=MQVhTakh8LoVh+9NOjfTdJsdrBAG+papcSpusM6a6Wo=; b=yOwgd/OBEfL1jOZI8fCx0c9bgeIooHX139Sv2ZgknVSqPnZW5hH6lHcBsX2DZQVenT Fs5ZJhHZwEu6vIP/g2weF3OBkyGFxfYZeZuOyHms2coZoL504d36W5CodllEJRP7+jbz 1ua/w809AK8WDP7tL71x6fWfK5nK9uFgC+IGfWXRp6eWQ4jHOnSWoqmooKrJK86F0HFK +/dorP3xYQ6nwfItly4AuvyH1TjJv3IjkbaZrZ2AR5fH4Fip+x9ecDEVgFg9HcbfVHem Qbtcp74c6JF+43q9jRxbib3Zu9oSZssFmzzDzs1BMJegIA+VL/XRfBbdF5QTEOrTItNK jvLg== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@ob-encoder-com.20150623.gappssmtp.com header.s=20150623 header.b=S0z77YDR; 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 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id l18-v6si19464905wre.222.2018.09.04.09.24.24; Tue, 04 Sep 2018 09:24:47 -0700 (PDT) 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=@ob-encoder-com.20150623.gappssmtp.com header.s=20150623 header.b=S0z77YDR; 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 Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 652F0689C85; Tue, 4 Sep 2018 19:24:15 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wm0-f48.google.com (mail-wm0-f48.google.com [74.125.82.48]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 6EB78689C39 for ; Tue, 4 Sep 2018 19:24:08 +0300 (EEST) Received: by mail-wm0-f48.google.com with SMTP id y2-v6so5100289wma.1 for ; Tue, 04 Sep 2018 09:24:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ob-encoder-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id; bh=GwRDtT/g/tBojzOgMmS8Agxj/ty3Jolda8UDd/Rj0nc=; b=S0z77YDRmfp3ubxBc12X0EpQK5yqi2qwg1hnoupe+DJztJ3NfLKBnYlLzZyGNXr5Pt 76D6RsiVJX6I78oOSJvaxY4wWevBgMS+/hFCC9yPCsfrC8H3TF7odJi3MT8zSnlKjUCh v5GwucvhN9hjeD7+CgGNzJ1yd4Vk9xiGpJeO65RdCeo60ZAYto/IDHZn1lVov7FKpFOC 3Z5VeukKsI5Os4CZG2zTMTMGmLcntlBWSUG6bycb1gjh8DuXbAQecrszlmuitIwzm8aQ 5Wh6W2wuQh2+1hZXe0pj7XNu1uj5zn4x0Fbzvxf/QUvpBOlQWgfL9+eHJqIwg1bcOerC IiKw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=GwRDtT/g/tBojzOgMmS8Agxj/ty3Jolda8UDd/Rj0nc=; b=NGMe5yBDtCXxOFG5EkMTMDK1ZzMrM6stRszCHnIfnskNQAizIM+/s/IyUjVbd2qFvJ L7RWVRoaAS7Tec4q3GpGiWsW+WZRbn5FmoYwFV2PrUVgHbq2zjvSHCJZjDs2OLoorGgo BVWjDVWZ8Q2lXVvstgBNvMNISOqfBLZW8MekvkdhDtUodYphJvfMRPOd2Nc9ETj59KoM poYitAMzFEukGkGSEE11fsV89hq+Ht1K2YgHyvaRP1kttVdQYFEbu0DU+VvvG5usmTk1 OdJgcrljHB0KoqHFwBQ27rGGjeCgku2wWUC/BncPqOyQVoltka9poz5nj0AzFqezqLKr 0+cA== X-Gm-Message-State: APzg51AQ+CXKa73mngViTsAhpa6RPv+SXhGB3AVdv13VWDYLkGPZZR6h 5IX7t93dgQ9HXgT+R7QvbaDPskZJBFg= X-Received: by 2002:a1c:f11a:: with SMTP id p26-v6mr8934420wmh.92.1536077865579; Tue, 04 Sep 2018 09:17:45 -0700 (PDT) Received: from localhost.localdomain ([31.24.218.220]) by smtp.gmail.com with ESMTPSA id 127-v6sm12354302wmb.30.2018.09.04.09.17.44 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 04 Sep 2018 09:17:44 -0700 (PDT) From: joshdk@ob-encoder.com X-Google-Original-From: joshdk@obe.tv To: ffmpeg-devel@ffmpeg.org Date: Tue, 4 Sep 2018 17:17:43 +0100 Message-Id: <20180904161743.29608-1-joshdk@obe.tv> X-Mailer: git-send-email 2.17.1 Subject: [FFmpeg-devel] [PATCH] lavc/h264: warn on mixed non-IDR/IDR NAL units 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: Josh de Kock MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" From: Josh de Kock No segfault on sample ticket 4408. --- libavcodec/h264dec.c | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/libavcodec/h264dec.c b/libavcodec/h264dec.c index 8d115fa040..2ab52f57c0 100644 --- a/libavcodec/h264dec.c +++ b/libavcodec/h264dec.c @@ -601,7 +601,7 @@ static int decode_nal_units(H264Context *h, const uint8_t *buf, int buf_size) { AVCodecContext *const avctx = h->avctx; int nals_needed = 0; ///< number of NALs that need decoding before the next frame thread starts - int idr_cleared=0; + int slice_run = 0; int i, ret = 0; h->has_slice = 0; @@ -656,19 +656,23 @@ static int decode_nal_units(H264Context *h, const uint8_t *buf, int buf_size) ret = -1; goto end; } - if(!idr_cleared) { - if (h->current_slice && (avctx->active_thread_type & FF_THREAD_SLICE)) { - av_log(h, AV_LOG_ERROR, "invalid mixed IDR / non IDR frames cannot be decoded in slice multithreading mode\n"); - ret = AVERROR_INVALIDDATA; - goto end; - } - idr(h); // FIXME ensure we don't lose some frames if there is reordering + if (slice_run >= 0) + slice_run++; + if (slice_run < 0) { + av_log(h, AV_LOG_WARNING, "encountered IDR slice after non-IDR slice before PPS (is PPS missing?)\n"); } - idr_cleared = 1; + + idr(h); // FIXME ensure we don't lose some frames if there is reordering h->has_recovery_point = 1; case H264_NAL_SLICE: h->has_slice = 1; + if (slice_run <= 0) + slice_run--; + if (slice_run > 0) { + av_log(h, AV_LOG_WARNING, "encountered non-IDR slice after IDR slice before PPS (is PPS missing?)\n"); + } + if ((err = ff_h264_queue_decode_slice(h, nal))) { H264SliceContext *sl = h->slice_ctx + h->nb_slice_ctx_queued; sl->ref_count[0] = sl->ref_count[1] = 0; @@ -732,6 +736,7 @@ static int decode_nal_units(H264Context *h, const uint8_t *buf, int buf_size) break; } case H264_NAL_PPS: + slice_run = 0; if (avctx->hwaccel && avctx->hwaccel->decode_params) { ret = avctx->hwaccel->decode_params(avctx, nal->type,