From patchwork Wed Mar 29 00:40:22 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Ronald S. Bultje" X-Patchwork-Id: 3161 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.103.44.195 with SMTP id s186csp867241vss; Tue, 28 Mar 2017 17:40:35 -0700 (PDT) X-Received: by 10.223.134.173 with SMTP id 42mr15100363wrx.130.1490748035678; Tue, 28 Mar 2017 17:40:35 -0700 (PDT) Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id 1si1793654wrd.118.2017.03.28.17.40.35; Tue, 28 Mar 2017 17:40:35 -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=@gmail.com; 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=NONE 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 37B15689999; Wed, 29 Mar 2017 03:40:10 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qk0-f195.google.com (mail-qk0-f195.google.com [209.85.220.195]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id B646968921D for ; Wed, 29 Mar 2017 03:40:03 +0300 (EEST) Received: by mail-qk0-f195.google.com with SMTP id r142so134845qke.3 for ; Tue, 28 Mar 2017 17:40:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=xvOvAP78mfi5YZz7mvc+eONTSlRVk4ZrQ9AusUs6/H4=; b=kzCIbjybOtmo9mm4dxaJxXXJI9U868HHsT3S+ITiG6KaqDlVGXWPnNceECR/DxCbkQ bQXpC4HvC182fkSvleTcLD71qOncbGge1Nc9JoJ0RdUjWjOgUHqz8wKjJxfvR4cR0A1n qq537yCYfVTGujdn2MslG7MlrbMmTsfA5RqhIXaQrqPJtDfZAkwsH6wMh55daCsmN7QJ 7KLHAN1g5JGfyAZ96ThFNGrhejwj9InplpkZ/iyRpfpcqSnkR14KB1RLWCdHBhjjXkYl aLySA/QJk7l+MMaZnoai/m0RpiK2II02ZIu/YioR7hjhAjgpymDxzglZx2VMIHEtZ4PT bjMw== 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=xvOvAP78mfi5YZz7mvc+eONTSlRVk4ZrQ9AusUs6/H4=; b=DrHTbVK906qSyQ9SuOLq4jTagTKA8+gzmsYUT2MFeiPDNaDhbZkJt3rPDMiCZH0VrD jhM3ZZSlWU8o8aTPMiybJUzZRhA88mbc6+wobw/L7mTDDHifsKD1FHoj3uhQtRIIdC+b hlgXh1wZHtIWLeu18aoqH5A954J+SjNXEBq1569cgJukYXqLuz/bcgXFgvOM5XBwqvbA DNKT8G+mkZCIWu7jRN5u7D8L9eW1o80YKsBTG8e76RpMPiFdj5Yh6IGn9tD2twZsWiLl dHOVVceL1ZDsKX9WT31nhN0HzCaZuirBPwlzHnVZDaEoxHg79Egyxo0Zi7tZIuYeOA1z B/tQ== X-Gm-Message-State: AFeK/H2m9xtm8I9060aZY6GS1EMm/EJ6K8vtZrTJf/wekFNngkx97kz8OBmMEsb6eDeHTg== X-Received: by 10.55.31.156 with SMTP id n28mr10043092qkh.131.1490748024986; Tue, 28 Mar 2017 17:40:24 -0700 (PDT) Received: from Macintosh-7.home (pool-96-246-175-85.nycmny.fios.verizon.net. [96.246.175.85]) by smtp.gmail.com with ESMTPSA id j4sm3828839qkc.40.2017.03.28.17.40.23 (version=TLS1 cipher=AES128-SHA bits=128/128); Tue, 28 Mar 2017 17:40:23 -0700 (PDT) From: "Ronald S. Bultje" To: ffmpeg-devel@ffmpeg.org Date: Tue, 28 Mar 2017 20:40:22 -0400 Message-Id: <1490748022-65880-1-git-send-email-rsbultje@gmail.com> X-Mailer: git-send-email 2.8.1 Subject: [FFmpeg-devel] [PATCH] hevc: only write to max_ra and pocTid0 in the first slice. 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: "Ronald S. Bultje" MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Values from subsequent values are guaranteed to be identical (since poc and nal_unit_type are checked to be the same between slices), so this doesn't affect output in any way, but does resolve the remaining reported race conditions (by tsan) in fate-hevc. --- libavcodec/hevcdec.c | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/libavcodec/hevcdec.c b/libavcodec/hevcdec.c index ef21595..f9e8ff0 100644 --- a/libavcodec/hevcdec.c +++ b/libavcodec/hevcdec.c @@ -585,7 +585,7 @@ static int hls_slice_header(HEVCContext *s) } /* 8.3.1 */ - if (s->temporal_id == 0 && + if (sh->first_slice_in_pic_flag && s->temporal_id == 0 && s->nal_unit_type != HEVC_NAL_TRAIL_N && s->nal_unit_type != HEVC_NAL_TSA_N && s->nal_unit_type != HEVC_NAL_STSA_N && @@ -2771,25 +2771,25 @@ static int decode_nal_unit(HEVCContext *s, const H2645NAL *nal) if (ret < 0) return ret; - if (s->max_ra == INT_MAX) { - if (s->nal_unit_type == HEVC_NAL_CRA_NUT || IS_BLA(s)) { - s->max_ra = s->poc; + if (s->sh.first_slice_in_pic_flag) { + if (s->max_ra == INT_MAX) { + if (s->nal_unit_type == HEVC_NAL_CRA_NUT || IS_BLA(s)) { + s->max_ra = s->poc; + } else { + if (IS_IDR(s)) + s->max_ra = INT_MIN; + } + } + + if ((s->nal_unit_type == HEVC_NAL_RASL_R || s->nal_unit_type == HEVC_NAL_RASL_N) && + s->poc <= s->max_ra) { + s->is_decoded = 0; + break; } else { - if (IS_IDR(s)) + if (s->nal_unit_type == HEVC_NAL_RASL_R && s->poc > s->max_ra) s->max_ra = INT_MIN; } - } - - if ((s->nal_unit_type == HEVC_NAL_RASL_R || s->nal_unit_type == HEVC_NAL_RASL_N) && - s->poc <= s->max_ra) { - s->is_decoded = 0; - break; - } else { - if (s->nal_unit_type == HEVC_NAL_RASL_R && s->poc > s->max_ra) - s->max_ra = INT_MIN; - } - if (s->sh.first_slice_in_pic_flag) { ret = hevc_frame_start(s); if (ret < 0) return ret;