From patchwork Wed Jan 24 19:52:34 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 45800 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:120f:b0:199:de12:6fa6 with SMTP id v15csp1504079pzf; Wed, 24 Jan 2024 11:51:19 -0800 (PST) X-Google-Smtp-Source: AGHT+IH55IK7TeAnyipHxCS3s3QvWM2wxGwoUcBtvne7h7Mo2xlPmPVqgL3cK65FOvxNNoMKAvjL X-Received: by 2002:a17:907:a647:b0:a31:6875:5fdb with SMTP id vu7-20020a170907a64700b00a3168755fdbmr16700ejc.1.1706125879595; Wed, 24 Jan 2024 11:51:19 -0800 (PST) Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id y25-20020a170906471900b00a2fde635200si171987ejq.541.2024.01.24.11.51.19; Wed, 24 Jan 2024 11:51:19 -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=@outlook.com header.s=selector1 header.b=oBWgOc39; 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 4F83268D124; Wed, 24 Jan 2024 21:51:17 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR03-DBA-obe.outbound.protection.outlook.com (mail-dbaeur03olkn2022.outbound.protection.outlook.com [40.92.58.22]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id E66F168C351 for ; Wed, 24 Jan 2024 21:51:10 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=X89H9WghIcqeAgzhEQzZrU+ghD7Y1mGlaug05ISt/hnO2cWSv+CvJjybbzqT1vwai63u85F7FXzbjJS/QYdAy37xz3VRrAiLnv2VjQ0SsMJiVWE1gwxMgdygXfrrQAKEprbrzz0C/BlhUr2l30VFEGSyJRuLfMyAaoJL87CVQfQypMk9zRRDJkpr46hTmV1cOBOQSm3zqIeB4YlF/kO+twsxDC4bX4tfibuVIVNT0r0XE2aQu47K2Z7SpSUej+kyUg8BFZOu0EwNRNS6CbM23UdhU3pjLkh083cwX30gaS5gQI2TWgOJKQmde3PDggV0LIsyM+mRHyhLXUUJsh1Ekw== 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=28ZG0MHVw1EYl0Q9JV3IU5V4+BBEZMkQ8XVHJGFB3Ks=; b=J1NnU90ndhS7LHqGo8EDStmmpvq3banEvXwePXdPC224AtWWNR+bTdygf7DjGzNHr/4+pqCLTN5SeF2yBuYHJsF8AG8JmBui1P71K6HEDelGD0WmNkjfNUjnp//9Ndhgz9D5ugn3EYvb7owYL/QOejZVUA4pdL1fwDDMtw0RPfxaK0jfbNIfxEgY+7wsI1zx8IvwAxxZoUr55YN7dqfrwtN9ZxefDzfHrCY7NXIsG6tK+W1aiRY72a63yZUCq9zyOhCibACvkPP8WjQT7WQb3a7+aKt8/TF8rte43hU+C9nTl3yn85Drwas/cMSSssgC0oQyZpx5dkeGK7MAWyCxSw== 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=28ZG0MHVw1EYl0Q9JV3IU5V4+BBEZMkQ8XVHJGFB3Ks=; b=oBWgOc39q4ZHz8KxKqKUHOtyvqW0MGFc2h9NItHmkHJWsyAbKkuYNnest4yr1jtcnS4lkMwz8a5lM8KVlpTHpBP8ZpfqlrlfxuVuvCKQbn94FUIML7VKmolodzFg9g/WTONwx+uK07O/vzRXW6wK58lreTTawb6ZIn3hsbl6ZdaLS8a4+2+FBwbraEmswjQbeIQVHh7Z64zw6IbbZPJhv+5VGWX8WVdTynkV3EIYHMZEfqCQCK2CaV62Q73f8bcDj+Svt3GavzznMclHhO9bCwcU10ws1nD4XYhfAqLAr9/p1uvkg3pP6em9ZgRiQ7TGEUxuV/V4ArFGFXReW4dUcw== Received: from AS8P250MB0744.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:541::14) by DU2P250MB0350.EURP250.PROD.OUTLOOK.COM (2603:10a6:10:27b::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7202.37; Wed, 24 Jan 2024 19:51:09 +0000 Received: from AS8P250MB0744.EURP250.PROD.OUTLOOK.COM ([fe80::65aa:deb0:a18e:d48d]) by AS8P250MB0744.EURP250.PROD.OUTLOOK.COM ([fe80::65aa:deb0:a18e:d48d%5]) with mapi id 15.20.7202.031; Wed, 24 Jan 2024 19:51:09 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Wed, 24 Jan 2024 20:52:34 +0100 Message-ID: X-Mailer: git-send-email 2.34.1 In-Reply-To: References: X-TMN: [h2N8XgWcq9ifYdKPyRY0CSp1x8er93bVpJDoHjuunTo=] X-ClientProxiedBy: ZR0P278CA0019.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:1c::6) To AS8P250MB0744.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:541::14) X-Microsoft-Original-Message-ID: <20240124195239.558681-1-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AS8P250MB0744:EE_|DU2P250MB0350:EE_ X-MS-Office365-Filtering-Correlation-Id: 77b22a22-4de4-4877-dba3-08dc1d15cf69 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: IGqsw1C5OiwUjNixAN+c0LkXDpluTlr6RCzN+e8GZRD1fK1pWIZMYgewj+YnlQA3v/6jrJDlckD5RRM9Rh+kak7B9lv9OzqtF7/7XEwhwno1/IiaJJVpYzjHeK/50rZHsPUuWKFdlebrrCWvNbJhV/5FxPAcz6H0rA+I/sraKHCuBSURc6UEzCm3rIy3vCEgudaw/RfNC6mz2WGSa6J8qJ41sf6rsFDWvkjU1hZM+yCUJitUQpOFo4Hbhb4A1VYOCk4QAZXWrfD7Nck3J47IDcyuk872cAi8+27Wt37CNvX0b+PAoqXAcerovYeJWzh6pmsbuxQPHH0oWBGCEhmBFp5BQ0VwHBAn8temh2zeDRMjz2vmPyQzwdbsTjGpTGYhCqXcBWBPliFGsQTfszZ8vESbISmaJ7MjXKQWcUygqkx82CAf+x0Uy9FSbqgCiNeKPAjVjxFQ3VRADrm9cHwUSN3DvX+pTsy6OaChpK91La/h+5X7lKQzIybmRiPquiBFcbfaQCRFlarR/A8bzGibvrwpfgGQ1fJI5ZQG6QLWNDePbdmLeH3GmOZxQX43rjoo5DMCXDiMKh7vn4FRxmh+o8/qebrAWrPl9h0bmB/gp9oycEgYnejJfoLCdlklT4xB X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: TAmcqIynYi5Z95LB5ETIgvg372abQ2LnfXlz8iS89bVTmEB0m+XSe4UXJdQnle2IThCx6BT5M4r2etZXDXw/JAGd3aH3zcP65ONrnufRGFv71zc8A2AwSZ8915aZWwj/MFHlcQefULOLchZWgHZuqfUavIJBX0E7HRDh3HRHXvS4qhIl2N+n7BVSXywiztjSGZPVnl8jdoVSp8xclEPdCBzKouqkPt1Nd41n3+9Xf9jC05D91VjJxAPqtqn5b5EVRlrYX4D64woEZcLbXindA/gdaR4KmGJQ6xooxg3YvijQ2lGfVHdj7whkmf7bQqRKmZlbJZUdMADTpX6SZw5luf3GwF2A53jPPGXUfmmfwuuEFcMU/sD+VhmIvvalGAasvcsvgy+N9tR807g70RmEjADwaT6M8OcgjwUAt6arwNCqav9bthpAcfO+8LZ1kpF02zHiF7wSicsIggJ2qVvFHH+9zT02eTVJZWe/JHJm2sgT6Ql/BqB7hQtB7FBlcP7YeRg0VXSRy8UvmC3Nle0aS8re6DJM3JSwwsFFedNpRLIjOGiuFv7p/go8FcwLFjzAfYfL636TwkAFiXlzXreXhgTRpmPp212zlYYdY9dao+MIAlVbwc8oWcC8pXihDxIbVpIApsorV1dEooEAoddSt1fxZzwyEYtTqxlAV828gJgAhGpF+qGy1rHNossyyivUqSgVnSoj9k9FSB+naToAUpakeHK4C6g75fei26y4fxvm9VlHjV9YgI5JIPlPPQev/cGj20YrKW+5+qCyV/T4SbqWnNdH6t0oPR6rO2GZ7TZBRaOAQDHDD70fOMFzWqjc60lQNe4SUwruBtLN8w0hO4IyDnNxbz4mEcFckB6lEQK3FiXMhaCmfAj7usbjsWjm23GP54+LOuGyS6wsJuoFcrlD+EULsgbf4hUpoJgaph5QGboPcRtiEnvdTTI7OxkVZWTW/ahtAdAbUoJQZcfNSudcnvqC9M8+nN5TTEVuNbnWrQCARIy687o6/ujOLU3tMNUTd73hsaTgMiTXfXdMysLKLFANU9tQJZt8FgykaUPeYBGsak09RiTwFHZD+C2a3vRAnEzUDLGYIuEyBYQULyGM5no5rgqdJbJG/onSnMJiB9ply5K8n67lkEWSshaOSlWlm7kdNtf7DqZ7XthQogbSOthB4fAji84QkvhQGx/O3iCJu/PZkPOQ4e7HaG4EZDIxaYex45Tw3OaPLYfnurb+oqRsTgiC/YJL7l1TtdELlXdeG7yg/Nuw7qYmkR83 X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 77b22a22-4de4-4877-dba3-08dc1d15cf69 X-MS-Exchange-CrossTenant-AuthSource: AS8P250MB0744.EURP250.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Jan 2024 19:51:09.2829 (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: DU2P250MB0350 Subject: [FFmpeg-devel] [PATCH 2/7] avcodec/dxvenc: Fix data races with slice threading 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: ummEXnOj82va The old code set a common struct from each thread; this only "worked" (but is still UB) because the values written are the same for each thread. Fix this by moving the assignments to the main thread. (This also avoids casting const away from a const AVFrame*.) Signed-off-by: Andreas Rheinhardt --- libavcodec/dxvenc.c | 29 +++++++++-------------------- 1 file changed, 9 insertions(+), 20 deletions(-) diff --git a/libavcodec/dxvenc.c b/libavcodec/dxvenc.c index 10473038cc..94e522d72b 100644 --- a/libavcodec/dxvenc.c +++ b/libavcodec/dxvenc.c @@ -130,25 +130,6 @@ typedef struct DXVEncContext { HTEntry lut_lookback_ht[LOOKBACK_HT_ELEMS]; } DXVEncContext; -static int compress_texture_thread(AVCodecContext *avctx, void *arg, - int slice, int thread_nb) -{ - DXVEncContext *ctx = avctx->priv_data; - AVFrame *frame = arg; - - if (ctx->enc.tex_funct) { - ctx->enc.tex_data.out = ctx->tex_data; - ctx->enc.frame_data.in = frame->data[0]; - ctx->enc.stride = frame->linesize[0]; - return ff_texturedsp_compress_thread(avctx, &ctx->enc, slice, thread_nb); - } else { - /* unimplemented: YCoCg formats */ - return AVERROR_INVALIDDATA; - } - - return 0; -} - /* Converts an index offset value to a 2-bit opcode and pushes it to a stream. * Inverse of CHECKPOINT in dxv.c. */ #define PUSH_OP(x) \ @@ -252,7 +233,15 @@ static int dxv_encode(AVCodecContext *avctx, AVPacket *pkt, if (ret < 0) return ret; - avctx->execute2(avctx, compress_texture_thread, (void*)frame, NULL, ctx->enc.slice_count); + if (ctx->enc.tex_funct) { + ctx->enc.tex_data.out = ctx->tex_data; + ctx->enc.frame_data.in = frame->data[0]; + ctx->enc.stride = frame->linesize[0]; + avctx->execute2(avctx, ff_texturedsp_compress_thread, &ctx->enc, NULL, ctx->enc.slice_count); + } else { + /* unimplemented: YCoCg formats */ + return AVERROR_INVALIDDATA; + } bytestream2_init_writer(pbc, pkt->data, pkt->size);