From patchwork Sun Sep 18 18:00:07 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: sfan5 X-Patchwork-Id: 38018 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:3b1c:b0:96:9ee8:5cfd with SMTP id c28csp806755pzh; Sun, 18 Sep 2022 11:00:35 -0700 (PDT) X-Google-Smtp-Source: AMsMyM6SpSI2nrd5AxEcK6MzJu6f+dMO7ToC0u9p5VaJ4D2OeqHX7GCXvHyFlN8w/KDrsh/7vu1F X-Received: by 2002:a05:6402:3587:b0:451:30ca:c067 with SMTP id y7-20020a056402358700b0045130cac067mr12453354edc.195.1663524035684; Sun, 18 Sep 2022 11:00: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 hs27-20020a1709073e9b00b00770872942d8si16458905ejc.958.2022.09.18.11.00.34; Sun, 18 Sep 2022 11:00: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; 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=NONE dis=NONE) header.from=live.de Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id B508768BB9B; Sun, 18 Sep 2022 21:00:30 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR05-DB8-obe.outbound.protection.outlook.com (mail-db8eur05olkn2030.outbound.protection.outlook.com [40.92.89.30]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id E5E8768BAA9 for ; Sun, 18 Sep 2022 21:00:23 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=CQe/cNMJ6RWYKA4RUQmhX4O4H91w+87JX8rvJM4G8dxtF7kdZsNa8FYw8qhxtVCBbI1DS96XlG35BJigJUfsoykeTaIesqKzqIFyMI6dToXZKP5rHZX99SNGbANW59+SE/dF5mjzMqTpIHx7EP2l3obZhMZL1itCabxBl+wJ9luiyj1+kpcH4EtpSBwuE+tu+lZ0S4ImZzrlJ/cwaUaj0l4RTK1CEqTXARZRW9nhN7pDTQHZ24wBFO1MY3cilI6/AEqycjysP/9jkH4WRaG1LpKvtcio8/NOTc7N7fY4HU7EQnsx/P4smCj9D866D4828RsJHWNf6cdX626ILtcKvA== 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=ZgB3hHipckfcP1/kztlgsayJA8dndCUO2SG+KOkjwqA=; b=PvCkO0sEK1v5nDIGBZn+XTamELUOWdsheByxJK0vev9SqmR95ECFSdkAwhfsoftoSBgBqgYMGK5i3Q0KD5lpLGRFeNEWo7KnO63NTlU5RD2ABeXoC6Qh0oDk3dAYr/ZzAlKFW/QxCcg0WqoQZ5kTm2lJgXmryC1A26GVvX8ddWX3KFMjuzxyaix45mkP6xSWYCJcLug7f1CxC6EvDmwrzWzGGq+QYdf7m1iQMgLb9xk7MD4/1ZgYDGNb7sHA61XxdfQfzdUYfn9CUaDbfHFvviTTYLT/kaTviWFfUNx9Woy9s/0Cvt3MxgSxPJ6HX5wiYkmyVy5l+yMTF5Ov6vYXNQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none Received: from PAXP251MB0726.EURP251.PROD.OUTLOOK.COM (2603:10a6:102:28b::21) by AS8P251MB0885.EURP251.PROD.OUTLOOK.COM (2603:10a6:20b:539::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5632.17; Sun, 18 Sep 2022 18:00:22 +0000 Received: from PAXP251MB0726.EURP251.PROD.OUTLOOK.COM ([fe80::2d53:d0c3:7838:cbe8]) by PAXP251MB0726.EURP251.PROD.OUTLOOK.COM ([fe80::2d53:d0c3:7838:cbe8%6]) with mapi id 15.20.5632.015; Sun, 18 Sep 2022 18:00:21 +0000 Message-ID: Date: Sun, 18 Sep 2022 20:00:07 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.2.0 From: sfan5 To: ffmpeg-devel@ffmpeg.org Content-Language: en-US X-TMN: [eh6AAZ+Sz9SOzfaXAqHPDWkA2ZmTzwl0XbPiuhGxsl/JLtsA33pBAQUpf/wseSgV] X-ClientProxiedBy: AM0PR02CA0174.eurprd02.prod.outlook.com (2603:10a6:20b:28e::11) To PAXP251MB0726.EURP251.PROD.OUTLOOK.COM (2603:10a6:102:28b::21) X-Microsoft-Original-Message-ID: MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PAXP251MB0726:EE_|AS8P251MB0885:EE_ X-MS-Office365-Filtering-Correlation-Id: 91d69662-a6a1-4b5e-21e1-08da999fa781 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 0URYQbgrE74DpZB/RqYzs5jfrMxrJBUyJYpMjRDhBZfVavKasH9W4uzAYFbl442G83LlGA2MN01zT0YU8X6RM7tpXG7560Qrm5Y/PtpcgSiVyBYlsOUW0afaEpvk4Ywfn/sUCnn9spAKlZLt7YlMvfCqhsu9rS2HS4+VWPR3i7bOTu1a3CypkgwBfLpsaJhPxHSt/688NEntWevnMF2EQxe0c5AfAGlKZ0tPH2JM+mzTy6QFuUdsS0VEtinmfsfFokx1rETSK2/zzqQhWjbMfpQzpXW75BW+TX0laVkr2FfxcXVckGjyrvxIvJS82xQD16cT40CArX013ig2zZSJ3F2La9LdvyYV53BbnIiAC4XvBeSWz0HhlP4Ykv7fJFpggq/QzOi9vqLuYYz/d3El3T7U8G4mKtvcrTvy+X8FMzy55hN09K/dBAay4/7mjh4Yr0Zf1I9QDnFkrof0iTXDoyYLEIeCF6cP73jS569eMnSsdsOe1v1W4WRakyZwmvQIOq6FRX0z7UwGXkTYx7wR7iw9pNdqkfZxZ9+knVCxZEu/LJdCO1WG2T2Zpg3dEWybi6FQN5JbhuNC5E/5rCKsTBQdbLLnzRsy+USgQWYxAKrrTOLGdiO8eO2gK3wMV932ymBOrePgt/c6NKvyfpANMw== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?zPdlvuH7mABHVzYHaRn0/8OJ6O2y?= =?utf-8?q?i3p83s7kFeTZg2aDPKXW+y7tYcNt2Gbc/svMJGB8KpGFgwsJj+8zmZaGuZwETbkL3?= =?utf-8?q?dOXEj5ZpQxtt9/rZAcVMNtim5E3UAqIt7t0JEfxuBkRp2ssM7sUBTRb9i+IlvxHYF?= =?utf-8?q?X5G7XF9XXWsvLZGtgdNJgI0YsZDMmWoJrdvKMvIv6RJDLgsWZvt5plTovq0pyZX9Y?= =?utf-8?q?X0jC0r2fBj97JAsBEt9bs12tq6NKL7sTMhiKvvtzcbnlaNUID/NMYcLOe3abvbctz?= =?utf-8?q?MhEUmq4nHzpxpA2RmRTvW+PXoZiqWo1u2SzPZgcDdmb7qOUYLWYy32HmvDxgSqjb8?= =?utf-8?q?vMXQss+DSrO4aYMg7Zyx8nfsogCvAfOIP1/7xvDj7egIH7kvDbUEMOud0LNWhY6Xb?= =?utf-8?q?TFpRt7nEsTQE2KV0DOrrzgkVCSjiu8Lj1GV4dB78WSv0Iq9i9Rx06LZfBQ9OWyzEa?= =?utf-8?q?kOA7YDKb6W2cYZaxTZ5rnfn6IO5Gzxshy6ClHyhCdQT3Vj7T8+Jq50IV2vBpj82yb?= =?utf-8?q?IrMzsSdzoQ1HNVAnpNBygUhCu8HodiEFibXCZ6NH6OUPFKQZoomQbpxQBh1eMGlnd?= =?utf-8?q?AYbmQBFW+lbTEqPq3ST/K6YzvkomtB4rUPL0dckQzuhj9evm/Dw7z07POaArnU5mM?= =?utf-8?q?lno7gDO3f+lY9/ndM7YpN2f0Uj/r7HE770+OgcuVPZr7KsQr735o3S6zkP9T9xbXk?= =?utf-8?q?tN6OFyJ4+4g7oqU84qbaFdU4j4+eCuPzWPfhSNhXMJEtmBtClQzivKKab9T/3Wdsz?= =?utf-8?q?HQdzZmciJDBISx1VZeoV71OsE/Us2ATJuPJBIrXMXLIOKA+ui+mPnH07/jt7t2zii?= =?utf-8?q?e+vfakZEU0eQqBW+3RLsuDaPY0DcgrPB+VtHxPtAaBimTs/h9mwkpiEest5jDrczu?= =?utf-8?q?GZNb2pE7AoZzGU3o1mVMublvLNJckVVj1NFHudojhy/hKGqpKSB6M/PRMXr1hCnc5?= =?utf-8?q?ORqicSivaPor0p+CaUWzFPAhUUYXpYmz6FdKm378IUs+WwNU/avDEVtI1J7bBVPmw?= =?utf-8?q?DoV3rxxawNeYZ6a2IAia2qPe6BXrILShh2UV6iXvXr2dntuU/DsOV1mFnD1HgU109?= =?utf-8?q?zMhO7ttXYbFZ8PAYgoASIEXtwY/lXXgLq72xlY54o6UHcMtHIYWBcJ2gjg60mF183?= =?utf-8?q?1iifWvOWtiZVjprjTFHsZleVzKvJ4mseSx5CHycNlsWpCxUHjhXSwuxhXriJJBpO6?= =?utf-8?q?CP4w+/NLvYwpHajQ+dxZ4gznpsVtNv4TRCW5QfIHR1AGG4V+LfBnZSh44EQztMOw1?= =?utf-8?q?uwGDHKwljd8obcqD?= X-OriginatorOrg: sct-15-20-4755-11-msonline-outlook-00b75.templateTenant X-MS-Exchange-CrossTenant-Network-Message-Id: 91d69662-a6a1-4b5e-21e1-08da999fa781 X-MS-Exchange-CrossTenant-AuthSource: PAXP251MB0726.EURP251.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Sep 2022 18:00:21.7774 (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: AS8P251MB0885 Subject: [FFmpeg-devel] [PATCH] mediacodecdec_common: enable refcounting of buffers unconditionally 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: ZyzZFNIdQmA8 This allows av_mediacodec_release_buffer to be called safely after the decoder is closed, this was already the case with delay_flush=1. Note that this causes holding onto frames to keep the decoding context alive which is generally considered to be the intended behavior. --- libavcodec/mediacodecdec_common.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) mediacodec_wrap_hw_buffer(AVCodecContext *avctx, buffer->ctx = s; buffer->serial = atomic_load(&s->serial); - if (s->delay_flush) - ff_mediacodec_dec_ref(s); + ff_mediacodec_dec_ref(s); buffer->index = index; buffer->pts = info->presentationTimeUs; @@ -872,7 +870,7 @@ int ff_mediacodec_dec_receive(AVCodecContext *avctx, MediaCodecDecContext *s, */ int ff_mediacodec_dec_flush(AVCodecContext *avctx, MediaCodecDecContext *s) { - if (!s->surface || atomic_load(&s->refcount) == 1) { + if (!s->surface || !s->delay_flush || atomic_load(&s->refcount) == 1) { int ret; /* No frames (holding a reference to the codec) are retained by the diff --git a/libavcodec/mediacodecdec_common.c b/libavcodec/mediacodecdec_common.c index 9fa769656c..2a605e7f5b 100644 --- a/libavcodec/mediacodecdec_common.c +++ b/libavcodec/mediacodecdec_common.c @@ -265,8 +265,7 @@ static void mediacodec_buffer_release(void *opaque, uint8_t *data) ff_AMediaCodec_releaseOutputBuffer(ctx->codec, buffer->index, 0); } - if (ctx->delay_flush) - ff_mediacodec_dec_unref(ctx); + ff_mediacodec_dec_unref(ctx); av_freep(&buffer); } @@ -321,8 +320,7 @@ static int