From patchwork Tue Sep 19 19:38:55 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 34990 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:a886:b0:149:dfde:5c0a with SMTP id ca6csp177413pzb; Tue, 19 Sep 2023 12:38:47 -0700 (PDT) X-Google-Smtp-Source: AGHT+IExf7FxzvHZhPAp8TOAscvVcGgEGd6bUG88kiHqWUrrhZBr3WZ7roFJG6kuZXQv/00nsEeL X-Received: by 2002:a17:906:2cc:b0:9a5:b878:7336 with SMTP id 12-20020a17090602cc00b009a5b8787336mr353073ejk.7.1695152327676; Tue, 19 Sep 2023 12:38:47 -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 u26-20020a170906c41a00b0099dc5c06b96si10604287ejz.623.2023.09.19.12.38.46; Tue, 19 Sep 2023 12:38: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=@outlook.com header.s=selector1 header.b="f58H/e80"; 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 C662268C964; Tue, 19 Sep 2023 22:38:43 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR01-HE1-obe.outbound.protection.outlook.com (mail-he1eur01olkn2057.outbound.protection.outlook.com [40.92.65.57]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 772EA68C8F3 for ; Tue, 19 Sep 2023 22:38:36 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=CQi581QEMchaBIxh94G45lLkTU4M29eloqrgs2XT3Z02Hl/dkN6AEdPaVTLCR0gJRNJ2us4lIjNHTI9wcEbGsVaKxDuSIgpBfzBKdeaSfFnz/Sp8vBfM/gx4bsBFQjjsGOaG8dtmG+s4TujchN7sRglBJiuYOk1Cy2YkBRSJJaSkZ//Is3EOaXIjtAyMKVzPNJFjAa9CB6sw4OwYb61NdQX7s6aipLz+QMJp+Ab677o2oiXTTve+jkH1b64IxAKO7mmz+PDVcVDqZbI2mV2GBxAsUKU0XNCQpfKDOApT5ruxLob+bqx1rjQjIuTLC6pwr9IM6M4irzKIUKx3Rs5J4Q== 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=XRjlqaG0iDx0iZMj81mV2CWClCTMb4IC0esjDX6uNt0=; b=JddtXXi0RqWoVkqdRQc7shIx7bRC4WsldFujSuIbP4XwP6iald5ovh+oeNmWtn5v9EnNSpGeRNstUXpcXD6Uemg8H6tytu+QKobYdmGrGy/I8B8WiPUom6GkR5Tu3HZkEpcX10ATtZzdVJn/KlI0dMkRNdJ2esUc/yBY2VdrYBlmzEq9d3gJnN0CQ0SmqFMFp4MsKt5CVSrDbJZf1r6JLY9VNA7+AL6yHEVewC3wh9KVokoh1Z5+cxZxTXQ+ss54pA3Lv1Mw6qmvzaRsvsLFJqH7Z5xLQFPAlNHbORdPoXdLEYmtYu4PtZlu089mQ4YvoQm7gf0ereTuUgjWbMzyqg== 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=XRjlqaG0iDx0iZMj81mV2CWClCTMb4IC0esjDX6uNt0=; b=f58H/e80zkmihpNftfNYXeB4VldURTMehwJprpaP4390Ox+41VT4os/N3dmnmWIawNm2MpzU5ni/Yt8yLsMyDmregjGXFJ0DuVbkXqIGdaSa54ZFD8YAwpu3G3HDMCR0KoDCDPKLLeBS+s9kIo8efnoD/aXMmHEWStf+wb72vQwHaMFfMyNBpnG59T5uPva2V+lWtiwoiD3hWRdOCQo13mxQ7dYCkMtEmK1NIW3utd4fr7g1OaukLzExdyhJCjXuBtAGyepk1pjEZdoF843fqUoOjwoPS+SFB+TekEW6eu+fNmg19Nlqz7roeFhVNiVKLqM/7gy9co2+x42I1d32vQ== Received: from AS8P250MB0744.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:541::14) by DU2P250MB0352.EURP250.PROD.OUTLOOK.COM (2603:10a6:10:27d::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6813.19; Tue, 19 Sep 2023 19:38:34 +0000 Received: from AS8P250MB0744.EURP250.PROD.OUTLOOK.COM ([fe80::5e01:aea5:d3a8:cafa]) by AS8P250MB0744.EURP250.PROD.OUTLOOK.COM ([fe80::5e01:aea5:d3a8:cafa%3]) with mapi id 15.20.6792.026; Tue, 19 Sep 2023 19:38:34 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Tue, 19 Sep 2023 21:38:55 +0200 Message-ID: X-Mailer: git-send-email 2.34.1 X-TMN: [axl5TDwYwhG9MDR+gdLOWF1sKZq8v5FZ] X-ClientProxiedBy: FR0P281CA0204.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:ad::13) To AS8P250MB0744.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:541::14) X-Microsoft-Original-Message-ID: <20230919193937.642981-1-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AS8P250MB0744:EE_|DU2P250MB0352:EE_ X-MS-Office365-Filtering-Correlation-Id: 5794ffd8-a9ae-473a-b143-08dbb9480325 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: WyJrnNXroj2jBoDNZ92JubiUTlL9qIKTcjZcBnQxVZ6PcMMFVtccV0nm38oLxMLQWcy9kIpgVNAp6AGD5MrKRq6cHUchZ/5sR+zv5JLWH07dNklhHrGdcvSH+DVej4h6Z3hQy5eDLvFRKNmwVUG/qxnjzMlY91QBc3H+tg3uHFI1gndmqfUaWuprpIve4/Bunb4i/cDDIAq7duNYtrnwevm1k5xORFdDCCmbPPTWLMVWGV0hWOv3UdsJ2+idyAhJYkvHsgTGiqE3NMzQLzDBtbnTrogibqHwWcbMFRbtuFI9aJu82MvjvurYp2p3aV1mVAvVldWS6ya0YT5KjjwB8xpxE+cBrg0Pn1B46+SozI0W/FZ9SHI4PKe0NBdp8buuQ8TWV51ASg+79hiy81vZo60AlmVZ4qRnoX1YWJJURPunFcZ25I8fVOcp2KYb9AjSZeHbNYhOeNv2z+2XfdiuvInu6UBXqYKbIgBPB0TNZUJkCmuOgXRYGeaU46y+LwOgpYUziYViLh5D/lk5TRWKoCJbVdu/++S8FCyyHEod/Kokbqv6rzwDQIGb53Be2WuG/kLpBe7JkKGUnru2czY4inu0ig0SsafWMsFI3zkTAEA0t1xp5DWfnhGpKSnqPyX6 X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: l4vlO1U+5Tw8oH2SP45CLANqbipLvm4Q0EPdzMvbpBOeVgIEm7das8inaWnt8W7so89j7XTVcPBtipDeNuOl71noV973Ia51tKoix4ek1/CxQ01SVpoF1JWpeLPQYGPQ+pGAvQO2IcCLnKeTtZ4aUdpKEf37ShORdijFiB48ZYxvEKuwa0ThP7hSITjaQvWcne1Tlt0imDg2fu6qdh2zuyvamW5ARSPw4RJJ0jzpV79tpNnZmhVKo1VIHXpSqpeodI9eDs+qZ7lNdmf9v8rtAqZIsjkz+aKj4f9wHb+efiLLsfGNksB4AJm+KvuRkkX7/IUpjmAfMfZQA9doyD40nyXlDmcmiYf8SrSiF3KzyiSO0GL02Ytbw3Y2FgP6OrILcxYEbXfKcn5dkDrz5zvopvByYuEokRex0LsoKlXQ6mHWPgSCoQ1L8B5tmmjL+WNnRKMxYNvtdL8qZjA9x3KI4woOKu2Sj4sxHZj4hiy+swc3/HFjXU5Ke9o1LT/dfpYeHRQ2DB57AenpMeTWayMtZfAePwzsEJZSoZiMmINgGlXSgsGxpgfwgWpszXphdyop56xzWbuYqbhuVGDDUFm6GeLiylRIeWU97EWju0XX5kA/r3ggxJ5jt9+b6p6Wti41lY7VnODf0yEKBOGOm2jK7pqj9f8VSIwIqrzyvsY1i2IctXr4VB9bHCvpyMfDbpIkr6iuA/jTONmhBC64nlg0rrdmHM3mjYHF4zl5SlK7gDzHOGLjS2Vvx/LLB+8lvOLpysKeK7YjaSAWdd3OrWZTCl0ii45bFh5xlUozuy5VJ0yNtrFGlvu9swSDktFb8nQxwhzuHEsqeOkiBMsK0DdwgN6tLQfY/cG/26Rll2t1oJ8uN5arM1YXKVZyjfmTNe4vsUKxQPrEs4HawPK8AYjT2IvR1tN2SOKis7IGtXfzjVdx7aUyKB5Br+4xthZohY9lXOcVJRu1257wZbzBs8IM4RZ2qE0LUIw+txJv9Xx+r0l4MJlPFCZtIUs65E22+d0MJDhvSKF/dwKh9i4vQIuT1l8cU3e/svTjoDEe45+4z4JNWLR6zMHSY34/q1oQPba7kiwIa++Gwb6yYvVdoBv4OM0gzPZ9DElf69yXQ44IKVSo9f1kYSaRdxqrcE2Vspl8w5VmtO7ZJJZ2hMBHJX2B30+UXFhUg0CyxVdKbQbP/jY2t/A70/AStBb1dgBXEa9JIheY2d4PLPxV86pFNmDBMurz3d7Zjadbfpe+sDbjp344PKK6hThIOVOUnMHmZUuf X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5794ffd8-a9ae-473a-b143-08dbb9480325 X-MS-Exchange-CrossTenant-AuthSource: AS8P250MB0744.EURP250.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Sep 2023 19:38:34.6965 (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: DU2P250MB0352 Subject: [FFmpeg-devel] [PATCH 00/42] New API for reference counting and ThreadFrames 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: lD3K6M1c1zae This patchset initially grew out of my dissatisfaction with the fact that the AVBuffer API contains implicit allocations in av_buffer_ref() that need to be checked. Later this combined with my dissatisfaction with the current ThreadFrame API (which contains an implicit av_frame_ref()) which forbids decoders to set any AVFrame field of a frame that is used for syncing after having called ff_thread_finish_setup(). This leads to a race in the vp9-encparams test that is fixed in this patchset. Andreas Rheinhardt (42): tests/fate-run: Ensure that THREADS=random is actually random avcodec/refstruct: Add simple API for refcounted objects avcodec/get_buffer: Use RefStruct API for FramePool avcodec/h264_ps: Use RefStruct API for SPS/PPS avcodec/hevc_ps: Use RefStruct API for parameter sets avcodec/vp8: Use RefStruct API for seg_map avcodec/wavpack: Use RefStruct API for DSD context avcodec/dovi_rpu: Use RefStruct API for Vdr data avcodec/refstruct: Allow checking for exclusive ownership avcodec/cbs: Use RefStruct-API for unit content avcodec/cbs_sei: Use RefStruct API for SEI messages avcodec/decode: Use RefStruct API for hwaccel_picture_private avcodec/vulkan_decode: Use RefStruct API for shared_ref avcodec/hevcdec: Use RefStruct API for RefPicListTap buffer avcodec/pthread_frame: Use RefStruct API for ThreadFrame.progress avcodec/nvdec: Use RefStruct API for decoder_ref avcodec/refstruct: Add RefStruct pool API avcodec/h264dec: Use RefStruct-pool API instead of AVBufferPool API avcodec/hevcdec: Use RefStruct-pool API instead of AVBufferPool API avcodec/nvdec: Use RefStruct-pool API for decoder pool avcodec/refstruct: Allow to always return zeroed pool entries avcodec/vp9: Use RefStruct-pool API for extradata avcodec/vaapi_encode: Use RefStruct pool API, stop abusing AVBuffer API avcodec/refstruct: Allow to share pools avcodec/vp9: Join extradata buffer pools avcodec/refstruct: Allow to use a dynamic opaque avcodec/pthread_frame: Add new progress API avcodec/mimic: Switch to ProgressFrames avcodec/vp3: Switch to ProgressFrames avcodec/vp9: Switch to ProgressFrames avcodec/vp9: Fix race when attaching side-data for show-existing frame avcodec/vp9: Reduce wait times avcodec/vp9: Simplify replacing VP9Frame avcodec/vp9: Replace atomic_store() by atomic_init() avcodec/threadprogress: Add new API for frame-threaded progress avcodec/wavpack: Use ThreadProgress API avcodec/vp8: Convert to ProgressFrame API avcodec/codec_internal: Remove FF_CODEC_CAP_ALLOCATE_PROGRESS avcodec/hevcdec: Move collocated_ref to HEVCContext avcodec/hevcdec: Switch to ProgressFrames avcodec/pngdec: Switch to ProgressFrames avcodec/ffv1dec: Switch to ProgressFrames doc/multithreading.txt | 8 +- libavcodec/Makefile | 1 + libavcodec/av1dec.c | 64 +--- libavcodec/av1dec.h | 14 +- libavcodec/avcodec.c | 4 +- libavcodec/cbs.c | 103 +++---- libavcodec/cbs.h | 12 +- libavcodec/cbs_av1.c | 32 +- libavcodec/cbs_av1.h | 3 +- libavcodec/cbs_h264.h | 6 +- libavcodec/cbs_h2645.c | 113 +++---- libavcodec/cbs_h265.h | 9 +- libavcodec/cbs_h266.h | 11 +- libavcodec/cbs_h266_syntax_template.c | 10 +- libavcodec/cbs_internal.h | 7 +- libavcodec/cbs_sei.c | 61 ++-- libavcodec/cbs_sei.h | 20 +- libavcodec/cbs_sei_syntax_template.c | 5 + libavcodec/codec_internal.h | 7 +- libavcodec/decode.c | 146 +++++++-- libavcodec/decode.h | 10 +- libavcodec/dovi_rpu.c | 54 ++-- libavcodec/dovi_rpu.h | 4 +- libavcodec/dxva2_vp9.c | 4 +- libavcodec/ffv1.c | 1 - libavcodec/ffv1.h | 4 +- libavcodec/ffv1dec.c | 82 +++--- libavcodec/get_buffer.c | 44 +-- libavcodec/h264_mb.c | 4 +- libavcodec/h264_parser.c | 9 +- libavcodec/h264_picture.c | 91 ++---- libavcodec/h264_ps.c | 57 ++-- libavcodec/h264_ps.h | 13 +- libavcodec/h264_refs.c | 2 +- libavcodec/h264_sei.c | 2 +- libavcodec/h264_slice.c | 88 +++--- libavcodec/h264dec.c | 21 +- libavcodec/h264dec.h | 25 +- libavcodec/hevc_filter.c | 8 +- libavcodec/hevc_mvs.c | 8 +- libavcodec/hevc_parser.c | 8 +- libavcodec/hevc_ps.c | 80 +++-- libavcodec/hevc_ps.h | 10 +- libavcodec/hevc_refs.c | 64 ++-- libavcodec/hevc_sei.c | 5 +- libavcodec/hevcdec.c | 113 +++---- libavcodec/hevcdec.h | 22 +- libavcodec/hwaccel_internal.h | 3 +- libavcodec/internal.h | 4 +- libavcodec/mediacodecdec.c | 10 +- libavcodec/mimic.c | 60 ++-- libavcodec/mpeg4videodec.c | 3 +- libavcodec/mpegpicture.c | 18 +- libavcodec/mpegpicture.h | 1 - libavcodec/nvdec.c | 97 +++--- libavcodec/nvdec.h | 10 +- libavcodec/pngdec.c | 67 ++--- libavcodec/progressframe.h | 134 +++++++++ libavcodec/progressframe_internal.h | 32 ++ libavcodec/pthread_frame.c | 127 ++++++-- libavcodec/refstruct.c | 407 ++++++++++++++++++++++++++ libavcodec/refstruct.h | 360 +++++++++++++++++++++++ libavcodec/rv30.c | 1 - libavcodec/rv40.c | 1 - libavcodec/tests/avcodec.c | 10 +- libavcodec/threadframe.h | 4 +- libavcodec/threadprogress.h | 37 +++ libavcodec/utils.c | 14 +- libavcodec/vaapi_encode.c | 60 ++-- libavcodec/vaapi_encode.h | 5 +- libavcodec/videotoolbox.c | 4 +- libavcodec/vp3.c | 148 ++++------ libavcodec/vp8.c | 127 +++----- libavcodec/vp8.h | 11 +- libavcodec/vp9.c | 195 +++++------- libavcodec/vp9_mc_template.c | 2 +- libavcodec/vp9block.c | 5 +- libavcodec/vp9dec.h | 7 +- libavcodec/vp9lpf.c | 1 + libavcodec/vp9mvs.c | 4 +- libavcodec/vp9recon.c | 19 +- libavcodec/vp9shared.h | 14 +- libavcodec/vulkan_av1.c | 11 +- libavcodec/vulkan_decode.c | 49 ++-- libavcodec/vulkan_decode.h | 2 +- libavcodec/vulkan_h264.c | 15 +- libavcodec/vulkan_hevc.c | 27 +- libavcodec/wavpack.c | 125 ++++---- libavcodec/webp.c | 3 +- tests/fate-run.sh | 2 +- 90 files changed, 2165 insertions(+), 1540 deletions(-) create mode 100644 libavcodec/progressframe.h create mode 100644 libavcodec/progressframe_internal.h create mode 100644 libavcodec/refstruct.c create mode 100644 libavcodec/refstruct.h create mode 100644 libavcodec/threadprogress.h