From patchwork Wed May 24 15:35:00 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: 3727 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.103.10.2 with SMTP id 2csp372915vsk; Wed, 24 May 2017 08:42:59 -0700 (PDT) X-Received: by 10.28.69.11 with SMTP id s11mr6215631wma.85.1495640579630; Wed, 24 May 2017 08:42:59 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1495640579; cv=none; d=google.com; s=arc-20160816; b=w4LkXgIW5rcw3asJJa7ccL9SKQcmeC2+Zg9QGtRV64qX0F4lcDimv5Jljv74d5wLjQ MgQ848+43EVRkVcHc/j8CpgSEsien4k5TvsM7z9RTVI9/YP2G/YlKacvPJovJpKqQKsg GQir+hKxqj9DCYNKfyQf02dEnCvZm4HtrnsiN36l+NS4HSD1iR0PRaQoE9HpOcCiD0iw ICbMa8aZsg7JdDiuqVeYi/7HiZGyE4aTsMncyxfwFUxN36wYE9BvCAgEJ3DLH83Itns7 Cuge6pcq2t6rVCsg/g9wrWxLn7TcQqZRR9m416J79Y94fkFrncSP64Ab7FuJwMFa4O5w jRbw== 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=ypTgDx7oyDBvkPQKzhaKjs1Zw1Ie0Fth2b4l1gGFgKA=; b=kWnEnP6lEZGtHrudlXrRT2Kwd5ciX4qp0+xewx456+Ai34IbXX/6uM1qCueWDjobgi gECGJ9w72dqE+phhG+NR8TPIZNthAKFGusZvpuhZRpjK2Hki3cZmI3O91/d4wlIWmOLa JdIJWRp7QkpbQTSwbfI8cK+7P3NmAOepzj+JbY3VRdWcA4xFhtImkWSEa6rBHnpxsgmB vgwoI9bB1gXB8H9iOcL4NreO6SCKX2s8FTzdf9BGIYYdrpDKZzNTJN07Hs3WP12ftY+L 18R+7NowSjiXQPkGIkTgxQ95KK0EmkA9M+znnS7/juepC0tGW39/2NxWVTWuL3PRs9EZ KcMA== ARC-Authentication-Results: i=1; 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 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id f3si5375271wmf.36.2017.05.24.08.42.58; Wed, 24 May 2017 08:42:59 -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 820BF689B62; Wed, 24 May 2017 18:42:53 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qt0-f195.google.com (mail-qt0-f195.google.com [209.85.216.195]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 64F35689A2C for ; Wed, 24 May 2017 18:42:47 +0300 (EEST) Received: by mail-qt0-f195.google.com with SMTP id a46so26777243qte.0 for ; Wed, 24 May 2017 08:42:49 -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=SsDlT0aauRZnPXjXbmVXj+RXuk1dBdNJqCT7K7hiUHM=; b=pRUIzbnTpsLXq2/J8kszuP08bI8ssHMAw2cafic1a7O3jaepDb6QqjiDWCzf9sH2sr 6K2V6ZihhD8dRNyAuKOzqxebq8CVClUGFLU58mpAoxLH22mr0cYnZOhwkdYL20HdrsQo fDAVV8Ql0V0P7MQw30Mb+hQOk6QF25HsAz194yasq5mDqyx9V/UDdwmBkk1yCiVs9rxH iVY5TVB1eW33AdYRhbIzIIShaK6ZKhvg5Mxe48eO8iQFvqXU0zWDgBVghw5v5OtECqjF 6+9ZdV3wM9D/OBpp8/GMqN8IXwuhC4u5ayBRzkgTA7WT2MigntefprfsR/0TCo7ym/mE aNQg== 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=SsDlT0aauRZnPXjXbmVXj+RXuk1dBdNJqCT7K7hiUHM=; b=FC7/Xo0OHiXiLRZa7twB8gahDELNyRpa9upAxpc6kL+VRPBj6Ef9DBQWgPRqcTJ3+x HmCLpcrgOIhMsLk6lj0mc/ZzmBRXNEyRosbOyikmZ2IoFip6nmcvqCmFOdurhLhjMoVg 2k9YPPOopeA2DAHPl+dw9+qCeLgPYIXOnAAIQs9988ccmZ3vIKbXgYf0DgY7sytXIluc G8maMv9rVLQDSFdqUFOg6OUcdhwaqD3hKUHG+sPi1EHPK8G3t2TcVPpkRtZPh46Sxjd2 2nBxIvMWQyAu57/gLi53wjt3q78nPs0wPcULvePiV91eyldM5juCzBYv13556X1I+rQN PDcw== X-Gm-Message-State: AODbwcBaxQLyc7K1QQewXhBHADYV4Yq633EhBijf+JzxugpgzBEjxewR XZgZeYpq/NA12PUYqeM= X-Received: by 10.200.44.101 with SMTP id e34mr22857832qta.146.1495640105293; Wed, 24 May 2017 08:35:05 -0700 (PDT) Received: from localhost.localdomain ([65.206.95.146]) by smtp.gmail.com with ESMTPSA id a73sm2829828qkg.35.2017.05.24.08.35.03 (version=TLS1 cipher=AES128-SHA bits=128/128); Wed, 24 May 2017 08:35:04 -0700 (PDT) From: "Ronald S. Bultje" To: ffmpeg-devel@ffmpeg.org Date: Wed, 24 May 2017 11:35:00 -0400 Message-Id: <1495640100-36856-1-git-send-email-rsbultje@gmail.com> X-Mailer: git-send-email 2.8.1 Subject: [FFmpeg-devel] [PATCH] hevc: fix race condition in max_ra/seq_decode. 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" These variables are shared between frame threads, but they are updated post-setup_finished() if a EOB/EOS slice type occurs. Moving the EOB/EOS slices to the next frame thread instance (by parsing them leading into the next picture instead of trailing behind the last picture) effectively prevents this race condition. Tthis fixes tsan failures on hevc-conformance-NoOutPrior_A_Qualcomm_1. --- libavcodec/hevc_parser.c | 2 +- libavcodec/hevcdec.c | 12 ++++++++++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/libavcodec/hevc_parser.c b/libavcodec/hevc_parser.c index c72b146..2b58eb6 100644 --- a/libavcodec/hevc_parser.c +++ b/libavcodec/hevc_parser.c @@ -267,7 +267,7 @@ static int hevc_find_frame_end(AVCodecParserContext *s, const uint8_t *buf, nut = (pc->state64 >> 2 * 8 + 1) & 0x3F; // Beginning of access unit - if ((nut >= HEVC_NAL_VPS && nut <= HEVC_NAL_AUD) || nut == HEVC_NAL_SEI_PREFIX || + if ((nut >= HEVC_NAL_VPS && nut <= HEVC_NAL_EOB_NUT) || nut == HEVC_NAL_SEI_PREFIX || (nut >= 41 && nut <= 44) || (nut >= 48 && nut <= 55)) { if (pc->frame_start_found) { pc->frame_start_found = 0; diff --git a/libavcodec/hevcdec.c b/libavcodec/hevcdec.c index ee001fd..fc9a5b7 100644 --- a/libavcodec/hevcdec.c +++ b/libavcodec/hevcdec.c @@ -2890,6 +2890,7 @@ fail: static int decode_nal_units(HEVCContext *s, const uint8_t *buf, int length) { int i, ret = 0; + int eos_at_start = 1; s->ref = NULL; s->last_eos = s->eos; @@ -2907,8 +2908,15 @@ static int decode_nal_units(HEVCContext *s, const uint8_t *buf, int length) for (i = 0; i < s->pkt.nb_nals; i++) { if (s->pkt.nals[i].type == HEVC_NAL_EOB_NUT || - s->pkt.nals[i].type == HEVC_NAL_EOS_NUT) - s->eos = 1; + s->pkt.nals[i].type == HEVC_NAL_EOS_NUT) { + if (eos_at_start) { + s->last_eos = 1; + } else { + s->eos = 1; + } + } else { + eos_at_start = 0; + } } /* decode the NAL units */