From patchwork Mon Apr 8 20:13:44 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 47944 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:3f98:b0:1a7:a0dc:8de5 with SMTP id ay24csp135797pzb; Mon, 8 Apr 2024 13:15:19 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCWISIZd3eKdYKHbWJug2dr+ISqdypOx5da64bmslB3eGqrTr+P0uzlFqSpO3Uw6gvDtlovkCe4S/h/ZrCe48lCWjJzpnqlXS0LybA== X-Google-Smtp-Source: AGHT+IEt5kv1w7dE/C1BtlKGzd8nVkYv89mylOK/d5y3NUCLnCWOcSjpEl8xemsc8jloSfBZTxpa X-Received: by 2002:a19:e019:0:b0:513:c428:9daa with SMTP id x25-20020a19e019000000b00513c4289daamr6287113lfg.0.1712607319186; Mon, 08 Apr 2024 13:15:19 -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 i22-20020a170906265600b00a4720ded990si3909687ejc.305.2024.04.08.13.15.18; Mon, 08 Apr 2024 13:15:19 -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=@outlook.com header.s=selector1 header.b=kpbSnshV; arc=fail (body hash mismatch); 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=outlook.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 4D69268D37D; Mon, 8 Apr 2024 23:15:04 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR01-VE1-obe.outbound.protection.outlook.com (mail-ve1eur01olkn2073.outbound.protection.outlook.com [40.92.66.73]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 5A5EB68D352 for ; Mon, 8 Apr 2024 23:15:01 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=BQEJ8PGfDe3l3PNvz69Pvnxhpwp6j6R5p8gXbuLL1W+ndmKLp92AdrPg7G3C0u8k2hxpJUtr4oSZYZQ9MAG+xgcpSvV9LgMtu58Iy3xIwBc5F2jPrO6Z2iNVurYbBwm6s5TYYotp676mliFq8H8r8Kw2Ne51RwF9EMa3J5C3h/8h0ZN7uH08D3biqUF1iDB2si02z2t9HGUS3V+9Mbn3RrgpCiUyuKVqZBysP1k+iMoFyYhLRT3mUgAAhq3ywjOdwj4KWiuFkW+kP6OYY52q9wSIK1ezYSKu8FUIAjajuJiFsA3HkslA2z9tkXDm/7PGmsKWG1SsZfuvKzFbhLLGWA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=7NdU7vnDYhuhI36eodouxYfJfgX4KZ6lfTP/pulXJ9E=; b=RbJXC4yK8HYrz2tkGwxpr1xZvjzobBHyQsFDKEN4qgZGboqBW8LHSziBCQUe5mdvN9+M3tTZyuUq3uHJA2qCTME/1wYQLqDjzaZNJPQ0g4jwyM9d8zCKad5tfuc3bIk7+2ntIE5953K1RlTB3HiJie91TJ7rdEon4TQ1aVMHusYf+kCgxeZ08fCjpM++0NElWlQmgDxeUNNXgoO0nxSslWoq6R4YLpTLdXS9H8MX0EHX69v959lq2rEoZq4xdcb8HmOwyQCd5Gvg8KUyKdIasqxE8gBdbMi0WxZUQneQAMAKT4WMh8tbOrUsAjyc12xEhVC4DEomhQjktqqIQAye/w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=outlook.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=7NdU7vnDYhuhI36eodouxYfJfgX4KZ6lfTP/pulXJ9E=; b=kpbSnshVDJ/nWW/tE+7Jvi9uKTKS/jOq1240/OMkYfr1LCRxCBMSmiM7b2n2I7mzqH0DXCSe1tdVJrxc4VP3ZQUFVkLucZNwG2+VOqgeE9+gfp6rFvkJU+S766IclKRoqu2C0PIxWzwi0KIK2uS2sYyBcC7l2jigvYnHkxeGct+lMM7VfJtCYfer/jGiA9IPgExgtsbhpLotZnjrMeR7BQVKGNdvHzs0HziTFSH0jNRfGNHhOycvP4+zFjFtIL2WrOgEXa1w3Eh17turHgcSxNOCE6HtglsXzVhpXMT1oiSQFso/ew99umiX+Uu9dF6/IcbWieAzbRVMS6z7eLbp9g== Received: from GV1P250MB0737.EURP250.PROD.OUTLOOK.COM (2603:10a6:150:8e::17) by PAXP250MB0494.EURP250.PROD.OUTLOOK.COM (2603:10a6:102:28d::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7409.46; Mon, 8 Apr 2024 20:14:59 +0000 Received: from GV1P250MB0737.EURP250.PROD.OUTLOOK.COM ([fe80::4a3b:cf76:cddc:c68d]) by GV1P250MB0737.EURP250.PROD.OUTLOOK.COM ([fe80::4a3b:cf76:cddc:c68d%4]) with mapi id 15.20.7409.042; Mon, 8 Apr 2024 20:14:59 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Mon, 8 Apr 2024 22:13:44 +0200 Message-ID: X-Mailer: git-send-email 2.40.1 In-Reply-To: References: X-TMN: [BzApZGA/HKWOqY/kW+WVC1LcVRm4s8mW1Q+9ZThYIrA=] X-ClientProxiedBy: ZR0P278CA0124.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:20::21) To GV1P250MB0737.EURP250.PROD.OUTLOOK.COM (2603:10a6:150:8e::17) X-Microsoft-Original-Message-ID: <20240408201405.2136840-5-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: GV1P250MB0737:EE_|PAXP250MB0494:EE_ X-MS-Office365-Filtering-Correlation-Id: 714d5516-7e5b-4603-f942-08dc58088fb9 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: mB177/u8m9x428I3CwnQhkbktytfu9Ta9tnlG26i6HirNYNUzvKF0PZVSTdZRFFtcQKaS/uWCXNTGgql0QVp5mR+3iMHTcmLoQNb0O2h7BPxWy7wDV5DJujKF3mIylKwC8KN/e3Wn2A6TWioPGI7PuRt6J8gcot2fdXOtEaD7Qh2KBvLnjX7PajGoOInJb65zevwrwB0U8WQVWZAwRHK70xFOSOq+LTCiPrr78Mv0BPHS19iGY/RyzZTcs29LQVS8o/1VJ67m6wlzAto4xODmG/NxsHizjvDfGjAxy65ubBFJr4+W+sNqcRpDNM3AiWNYaeWfp/qOWUnrtF44k1JZ9o7ITAOrDzvRVedeRrOlgQURzlKqJ6TLuvn75Y6oLi3rn9K2rbxfj2C25GU9aTbIA/6wKDgkvvrCq8pIfpkJgfFXj8UJn8u0eo5M9z3T92LDG4uukwpMiqRcJIk23ZQkZeUOq5OE9O8nC90BTjt2L2GVOeJEq0IkS0nH7efsHFXfqyIUWJTBSJYzKdBg44wc+SQvAQTI6GjNqYaGHfVYDNLFc6ZuGjKA4hxIY1KEixS7UmyXL2frnUqKNYDYVQ91H/T1hGe1BSKiwH8QIAu2Qb+2sVWgBuaf26UYCs4hCJx X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 3Wn6X/nZnr8BRicHJQnjumq6ogafl1qALk3qSw/+VbpOmiJsckO3mfKkumyRwstJcOjHuyxhMX9r0P2JBN2uLTHuAdB0eH8I0vAphKWHSsubDAML6okJ3e4nDmxFJ4wDTX6NNYDs3liQTSESLDMKtzK2OsIpn63xg1CW6qw4BmEv23KwsrdbFLFMCTw7myRs68Bz6UT1z563fbl88oTsXaUEW+4f8APQuR+oIpE57FWXV4XB6ZVlkJb7+WjslRiSjZlZvlMBQ1oCwOOYbxFQIOzDR2DdPo6NGPmR/1VDn7ojuvlO+JaBEBs+UaVmwn1B/mkj6MG3Dc0Cb9QQFI6s9npKkE0IupN2XAaS0yDbXLqX6fhimY45iytsq3U+nqRQzKRbQA/xZ0RR8VfKnMG7NSvTqs13d3iQI5HraaQ2Uun3Y1CkwxDNvbunNp/gtpN1AGptWTsVK846mjHKzcnZHx15LBo3Mn77R310BGmqTBOyJOQgPJAF0c1rUrp7IwdpSq8cUZFke27OCgwfNpx7EMaT496g7aQ0xEmPlugO10lEmBL3iq871K+2nkk2LxetqVGNmn2JkcqrKC/+iZtOzrVXH2s90jp+1I+ehdDj7uzzw7xUDecYix1GlhKK1JOF18ixknmcy1O1y8GOZasec3YYtpQezBe/rX2/7Ii3KxtXxbKcQ+G3qg5b+/UbQ/WP37PDrsEm9T1y4EZvLYxTbdu7ZVSS34FuG4kSHCTuzEhiNiv8tGCBryFKUhkECsShGzkNN8Nor2o4Uni5BWqRaWmq744LakzK6bNebd9NdfGWvQZqTO4VAxxkYFz50Msi0wGDcZgZWCrLz/yHZvrjhHtIaL+7H0z9f/HaQz5EoeweL6lsy0D8Q5NdFs+aQ1NSRgmRC4VWXEYPGo80BZQFqshXdjWvT0AdYBCCKkAWzFArOdDxPCfeVpFUkQDy7edKtH00PsT2Uw3d2T4z3GH8rHseCMPlcrq5lH82ckadLtvxCi7gHanhltxDi+3DfaSgE7B2c81KNiXNDpeS7H5poSONtuVuh+2+pLQHJzn1jtiCsFC5343J0tFpYdxFFjvUmTeGK4r4BEM6/IxFXksba102zVHRrgIWoD/448Mp1uBdjBxIq5xq4iqxJPwZlrI/q00yLWIScDDxukIGjkQyUhddn9dQHPnqSPPrhLM0bj8DWBn1rO5G8kDL0cXZbnb84iFCPsogGZSyuzJuOOfTFyuwzxI0vNuYjRKFFHzTLQ/t+BzCLorIzrzXTD1K/Mi1EnrrVhNc2yZFw3P4f6PHRA== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 714d5516-7e5b-4603-f942-08dc58088fb9 X-MS-Exchange-CrossTenant-AuthSource: GV1P250MB0737.EURP250.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Apr 2024 20:14:57.5774 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAXP250MB0494 Subject: [FFmpeg-devel] [PATCH v2 06/27] avcodec/vp9: Fix race when attaching side-data for show-existing frame 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: Andreas Rheinhardt Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: r1gOxWua+duX When outputting a show-existing frame, the VP9 decoder simply created a reference to said frame and returned it immediately to the caller, without waiting for it to have finished decoding. In case of frame-threading it is possible for the frame to only be decoded while it was waiting to be output. This is normally benign. But there is one case where it is not: If the user wants video encoding parameters to be exported, said side data will only be attached to the src AVFrame at the end of decoding the frame that is actually being shown. Without synchronisation adding said side data in the decoder thread and the reads in av_frame_ref() in the output thread constitute a data race. This happens e.g. when using the venc_data_dump tool with vp90-2-10-show-existing-frame.webm from the FATE-suite. Fix this by actually waiting for the frame to be output. Signed-off-by: Andreas Rheinhardt --- libavcodec/vp9.c | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/libavcodec/vp9.c b/libavcodec/vp9.c index bd52478ce7..e0bc313301 100644 --- a/libavcodec/vp9.c +++ b/libavcodec/vp9.c @@ -1569,6 +1569,8 @@ static int vp9_decode_frame(AVCodecContext *avctx, AVFrame *frame, av_log(avctx, AV_LOG_ERROR, "Requested reference %d not available\n", ref); return AVERROR_INVALIDDATA; } + ff_progress_frame_await(&s->s.refs[ref], INT_MAX); + if ((ret = av_frame_ref(frame, s->s.refs[ref].f)) < 0) return ret; frame->pts = pkt->pts; @@ -1715,10 +1717,8 @@ static int vp9_decode_frame(AVCodecContext *avctx, AVFrame *frame, #endif { ret = decode_tiles(avctx, data, size); - if (ret < 0) { - ff_progress_frame_report(&s->s.frames[CUR_FRAME].tf, INT_MAX); - return ret; - } + if (ret < 0) + goto fail; } // Sum all counts fields into td[0].counts for tile threading @@ -1732,18 +1732,19 @@ static int vp9_decode_frame(AVCodecContext *avctx, AVFrame *frame, ff_thread_finish_setup(avctx); } } while (s->pass++ == 1); - ff_progress_frame_report(&s->s.frames[CUR_FRAME].tf, INT_MAX); if (s->td->error_info < 0) { av_log(avctx, AV_LOG_ERROR, "Failed to decode tile data\n"); s->td->error_info = 0; - return AVERROR_INVALIDDATA; + ret = AVERROR_INVALIDDATA; + goto fail; } if (avctx->export_side_data & AV_CODEC_EXPORT_DATA_VIDEO_ENC_PARAMS) { ret = vp9_export_enc_params(s, &s->s.frames[CUR_FRAME]); if (ret < 0) - return ret; + goto fail; } + ff_progress_frame_report(&s->s.frames[CUR_FRAME].tf, INT_MAX); finish: // ref frame setup @@ -1757,6 +1758,9 @@ finish: } return pkt->size; +fail: + ff_progress_frame_report(&s->s.frames[CUR_FRAME].tf, INT_MAX); + return ret; } static void vp9_decode_flush(AVCodecContext *avctx)