From patchwork Mon Jan 24 14:45:46 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 33765 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:e71a:0:0:0:0:0 with SMTP id b26csp385485ioh; Mon, 24 Jan 2022 06:46:37 -0800 (PST) X-Google-Smtp-Source: ABdhPJzbxOBSmM6z+s+SfCe1dqbg3dzXxvvrlq19C9BWOh8xs0tge5vHiwj0sHi/CPlGYSaSyKKz X-Received: by 2002:a05:6402:50c9:: with SMTP id h9mr16449747edb.210.1643035597032; Mon, 24 Jan 2022 06:46:37 -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 c24si7826947ejj.225.2022.01.24.06.46.34; Mon, 24 Jan 2022 06:46:37 -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=YdhPY3cg; 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 F249A68AFA8; Mon, 24 Jan 2022 16:46:32 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR01-DB5-obe.outbound.protection.outlook.com (mail-oln040092064090.outbound.protection.outlook.com [40.92.64.90]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 14337680157 for ; Mon, 24 Jan 2022 16:46:26 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=W5nvs5cXffFeSwTl6EMskq0mugyhg/gM0Nbl9r6o7J5KhVLUnPPKJdB13SMbvM+DG3+iXNGFC1lAG3bmyz0bEAMh3rT7iWIXdkuxx+AXvFlp7YRi/z4P8x5rDuXYhB8LrJoCW1JNYDfqii6GKRlRt8mwEOrxp5IF+kDAwnV8iLod6eeQssmjnwkOHr88yqz7A4iV/gXnYjpSEEqUcsET6JFvN94+Q1YRxwoYzvoOKic3OwLRhAM+o+7pkaFmNhPEoX9tcf9uztnkMyPOsLEcEeiZW+y26EOLvH0dT72O7jjsJgQ0IhWZFYxQUAUAroEdBxFJhUyw9UEo8EunJQi5qw== 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=P/2HfK95TUkIO/R+ynyoOJf6mQ0ASEmVYh5RVV3MDT4=; b=UHecw/sTLWYTqeN57Jwmdn64VeLSaUbHmeL8Gk7MYgDdrBpAOx2+AgJVU4WSVSwny0ZIi41XV3ONgnPb93oZuvxwHdQ/O8KE4LWL0eoqgaL6HcWBZrN3XmwBgjgGIcH2wTBMsVN+fFChXMF/nUekgbsNuVLpsUIU9Tw6+nIPilSY/jQtaynvy2yVMKvqS+gzaiQ48+ruCAWco9ad5aGxHvYPBlfBIh4kE58FIWo7ik+dBs63a31Tl70EufB7K4ClDKhV7LzEpEEM2ZyRP85a7uVBXZErFVey5tydsf26pluJjXiQSs3c/OridEa6FQVVHAV1SujkXwt2jfHhzdYirw== 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=P/2HfK95TUkIO/R+ynyoOJf6mQ0ASEmVYh5RVV3MDT4=; b=YdhPY3cg1Me02kqhp9Cs2IlflDmPXQKr6R5SOZVkeOaQuIYLiajBlcKzXOTZD4cURvTxPy4+6XuzjY/Uqq1C0nT5x4X73zhXn3jCDBRWccZleLzxqTV7CsW4szeKWefAQX/Nvgs3xpGUy8sZQ/EJDm03rtqYwLwW2hk/n2/vadzNOI58IzTbbeAiAYBdjDryHycmIB2hsgR7FaqPVi1bm4yv+cMKR5dfz4sJ8vJ1CGYEowo4ACESZr/Vi3YW2z3iqbqJaR/B2D3VKaVqBPeCQ1gHe29xdkti6lmpBasfcrWvcNLk14LOFVn/t9b0BB6VgenScHFlm2CtrNwAgAhprw== Received: from AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) by AM0PR0302MB3187.eurprd03.prod.outlook.com (2603:10a6:208:7::30) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4909.17; Mon, 24 Jan 2022 14:46:24 +0000 Received: from AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::ac56:2ff4:d304:ab22]) by AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::ac56:2ff4:d304:ab22%4]) with mapi id 15.20.4909.017; Mon, 24 Jan 2022 14:46:24 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Mon, 24 Jan 2022 15:45:46 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [uJpn7qhQF24ULp4KTkQF94M8s+ukAViu] X-ClientProxiedBy: AM5PR0201CA0016.eurprd02.prod.outlook.com (2603:10a6:203:3d::26) To AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) X-Microsoft-Original-Message-ID: <20220124144616.559446-1-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: a2c3c1f0-ea30-4c9e-3599-08d9df484b22 X-MS-Exchange-SLBlob-MailProps: S/btQ8cKWiRuJzjo+afAgBd4SR5uzlp8soyI1FYaKxdSsP/AAnZE94kqAavM17Nbqeq7lidnLVmqvbRSqoyNrWEqhDp57/pa1uHrYPX/nnPgl02FZeVPCijF3TB6i1v/eGFubuyUudOsJAUpo8ep2PYZd0NHd7I09yZpBw5iTij9pdQkzjQdVds76sAfcwfkFwo5pugQO7zxW0SG8ivhCZOzkJRvCrw/v4GCKmYnrOndnlDIv2a0QgR65ppbAdzrj+/Av6Rf/l4ds70iAH/8wK36hGj66BKOxfW9swcuOJYmUsQus3xE+RDu+h+E5AkrSd9c5KWCYRWPl+IieeCBnh6IUKPmEUQWPBwQyW8BXwwbuv9YaumyUBR10Ae1A1RwXXwz+kamqpKwlGmhszGdvBoaCQQ24dYwECeLkpRsvLcahVXQJCh7Dv0dhxcnxW42htMPh1Yg3x9q7yHLJBVHC0S0GbZF5R3dg8Qbz61W4iXo+MqSMV31f3AxGKn1m4K+bcaQj64xOfeNit8GPktYZVu+r0+K3AGYELan7it71/xfmMAjoD4TNsPm43SOIukL+XjOLcneaBssdizhz3QA15l16by0BWz13YGldxgM8mpS4NMYi5832fs77whG6l35ne0Hs9PwwWw98mwIJTSD0KgUxkwTZZ+/HDJY06h7DXfiGwI/ny1tZGuQAriSjQ5yVRYEP5zjoHAOl0rMe2LCMGycwDb9EAkmaf70LQRPe+GBp0e9gTODRvWl2etC7noYBV5q60UbKGA= X-MS-TrafficTypeDiagnostic: AM0PR0302MB3187:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: NxJQZ1W/Onehde5aNNoLbxxk3RAkRzvBN8cX1BauqpEa4U7fLRty8BFNy2ySG8SjZBYDOmqNdTWB3qJvWPUkKNZzxfSdz5n/alTe4LBKUHd1zWmFuz8zf1YJfiO3COlI0Ib4A0kzMGGeFbg2O7EE2UklZqu6BBMRwNl7aDulWKLEg9WdNGekEjIj0/5vQ1XzgB81pz8r0V+xYfXpIdKzf23lWNKyRR5+bHka4uICAG48gsI5sbUGktzfpjgN39XvKz5QckzXsEqxews8zmgr8RgEhEzmT7XsPvVF0KF/T30xFcIf/m+pK3QpGdeW1sKiUIz40pDyWgQkbojle8ut0pbnEnz7uOab8ZJRCxzM0arAWwobADVHpzEz59loNog4hR4Y9flttjD+LpdSb2AboXgwHqvjC2Zv8GIVr9Pb8Bd5iUlQ87Fd2BwFvk0u801Y4mx1fbZHv+ZVbo0mjWkpVCDH/lR21OZrAp2KyocMWGH6yibri7VgbnzVbHw4YhKVlNY7MNXrkGo+qtvCpWRvxASxe2r32EuIFH9cKDh+HEhZw8gszURMiMH7l2v6She2kFQ4/xWYBmOksqupOV1iiQ== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: RWWOLy/QEEIe/2GCsxr9NfCGEsKaudX6DKUGpVKIHuqhOUZL933yWjZvJWde6+5eHkEiJ+PKQxb95Yx3IximRULxfhUILCxeaTup5pPENKhVn6cniApnjxQRityIQ2S5RaZ2NoqGz8uze5d0nE71iFMlcfbBJZp4vlLk72/BLqZNNRKtZyVI/bbxjFm1dWjI+c90EvYd6ufP7hTyCTlUchCivPoGf7GrtSgzmb/czo8Q5YigbieegtEH8TjcrbZ/gGmwvhl3BFWl931ndUe+0m88pTcUEkMMu1Fxtwi0wCEsptRMW5b0PoSBPKjcpCxb34sjTc7we+Hm80xf74Mmtviop0S2Db8gmh5sP7WKgLW1TV5yXgfMvpU/FPhJC0DGUVFKWKknNOIo9ctaFhnnEE2QjF+B3jOXqt2IWB7uCQz2glTxsKRstdIlUtinM7pmVI8/tFv9PyLaJffdxaF1jXI45xRq/0IRp8Q60CGuqMd+oVq4VViNIX6IL99Mv/XppafhDGHwHZanuJEEManai5M8IXLDNqccTv8xLNvlzT20pvUPBec+TzaBeTCKA4l+8qlYTuTzsvwIvZ5fiKwwfYQ79ygqow4SGBlgmkfQFldEMIaryfRLFatOp8yiT7gJbRGec/eW3mKE+sFnmK2XyFPnDpmVBKMpTEv7ns/MPLon7lz5iOkutREce8QsHWGD1TTsMy58G4OchcqV66Jj3prhmhDk7oXWBvBBNfAig69OXj+mtj3mlWYo/SeHnDDDb9BGjzqS2/oKoZXBbloxIcuQqffQZS98BcP//CoMWozTelagnsRkn3BMIB1XArFK2fv5v7yGqvpKT88/6l9S26DUsSgFiBCH+lv1JX3iarcSWAY0gap4m3nANXF/IfAaV7f8hAGebpZpen6cVwxy6XaUeKwJxVYO+FFJ7S3kKrcCaeLr+HlDr//00jzUH0PC2VSwftAODZGxMIJKGglPDQ== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: a2c3c1f0-ea30-4c9e-3599-08d9df484b22 X-MS-Exchange-CrossTenant-AuthSource: AM7PR03MB6660.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Jan 2022 14:46:24.3164 (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: AM0PR0302MB3187 Subject: [FFmpeg-devel] [PATCH v2 01/31] avutil/fifo: Use av_fifo_generic_peek_at() for av_fifo_generic_peek() 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: HEQu/Ci0LxkK Avoids code duplication. It furthermore properly checks for buf_size to be > 0 before doing anything. Signed-off-by: Andreas Rheinhardt --- libavutil/fifo.c | 21 +-------------------- 1 file changed, 1 insertion(+), 20 deletions(-) diff --git a/libavutil/fifo.c b/libavutil/fifo.c index d741bdd395..e1f2175530 100644 --- a/libavutil/fifo.c +++ b/libavutil/fifo.c @@ -194,26 +194,7 @@ int av_fifo_generic_peek_at(AVFifoBuffer *f, void *dest, int offset, int buf_siz int av_fifo_generic_peek(AVFifoBuffer *f, void *dest, int buf_size, void (*func)(void *, void *, int)) { - uint8_t *rptr = f->rptr; - - if (buf_size > av_fifo_size(f)) - return AVERROR(EINVAL); - - do { - int len = FFMIN(f->end - rptr, buf_size); - if (func) - func(dest, rptr, len); - else { - memcpy(dest, rptr, len); - dest = (uint8_t *)dest + len; - } - rptr += len; - if (rptr >= f->end) - rptr -= f->end - f->buffer; - buf_size -= len; - } while (buf_size > 0); - - return 0; + return av_fifo_generic_peek_at(f, dest, 0, buf_size, func); } int av_fifo_generic_read(AVFifoBuffer *f, void *dest, int buf_size, From patchwork Mon Jan 24 14:45:47 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 33766 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:e71a:0:0:0:0:0 with SMTP id b26csp385628ioh; Mon, 24 Jan 2022 06:46:46 -0800 (PST) X-Google-Smtp-Source: ABdhPJyMNIx6WkGQuSrHhxojLsU4rm7zGlP4y5RARGrInbr3tFMXucl3EKrV2JUIsT4jgxia5jB4 X-Received: by 2002:a05:6402:2685:: with SMTP id w5mr16316053edd.151.1643035606622; Mon, 24 Jan 2022 06:46:46 -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 g1si10760392edb.24.2022.01.24.06.46.46; Mon, 24 Jan 2022 06:46:46 -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=pMlFgQqa; 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 07E1C68B034; Mon, 24 Jan 2022 16:46:43 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR03-AM5-obe.outbound.protection.outlook.com (mail-oln040092070031.outbound.protection.outlook.com [40.92.70.31]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 998FE68AEB1 for ; Mon, 24 Jan 2022 16:46:36 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=AVHyJs7nOpUQ5/8A4M2wQvHAtxQi+xKFN0JfIxIjfi5fVv8vptakY6xjYKu7S/8cu2kBvD8FKW9yq4vH0PJOHRolnihRM9/Nc34LHWWlqdqIHaH1cBT8UWbI4l1r7TJM5DNbVY03kTUlCWNrEKpI4kEBo4h4zgq9emhZa0lurld9orBAzEt1s8Lz2s2ESeyfNYkKfL0umiUyKj8ofWASbwx0yU358cGXbrOaLKiehdZn7z9+X+GcL5XaUqyVB+cYN3/kCVsNtRCmknbMHqmr777l1XwR4vS1Xu2S2ezxhan4TO2YH55Eko4tFaxqZdlSLZXJytNqaONfV6v0OvfwLA== 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=h+P3sXEjGcXBM5BMxNYT3AX1XUK21+xn0U6bS/eZZac=; b=drvovigLxnjlSUG2lBAIdSyV2V60EheWvqK02u2Z8vEZOa4WFteFpDU2cqZnGtQEypcfUzNx2XCeZmDvtLnhIdBQ59mRLyrSMntJfOnrJAnstNzHYbQsT3Z+vsRQKADBVN9p0S8sO9RMXH+LYPwHOK3vQy4BoYaliWx6mAC+536sW1NIR2Le2Th6ukrUc1IPCZcZlveqPlewkB1bz5kwbUIJUs36XBuIR5ylY0XDFYfE1vG3C9umvo0VY7/ZNHjuEktN5QL9s8ttvF87rPlEQsYGRyktrm3hvaEiKoWVvRTxg5O/GnIyt73IXWMggnE3HHXZkh03kLYb0hU4/Z699A== 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=h+P3sXEjGcXBM5BMxNYT3AX1XUK21+xn0U6bS/eZZac=; b=pMlFgQqahZkQmnbpvqO1q9okI/N4AJ4BftLfr6t3ahPr6I4G2bZ5/OVdhCEsmMw+aA3/2/YPpJuimixNQW2vFG36n88jiPX/FKPxASOzEP5F7SwKZKcEEE5a0D0zOFe5taVuWhka7O9qF1MLWdXPsDfCTPAoZbSCeWvs5XhKHTPF2cBoCm8QHig2K+YfkgDiS7ieE54pY16AFiKGpy+mC/WN2f/Yv7XwseCS/9S/x/f7YWR8cp8FJZ46CqxQTKERMtXU6TOGOdds095Lx7bgjsy8O3JNUgd5n/xqMBx6mRHBZD6MXuitZG1gPzPSqBqjggNco18N9tMtk858cQ+qWA== Received: from AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) by AM6PR03MB5236.eurprd03.prod.outlook.com (2603:10a6:20b:c4::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4909.17; Mon, 24 Jan 2022 14:46:35 +0000 Received: from AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::ac56:2ff4:d304:ab22]) by AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::ac56:2ff4:d304:ab22%4]) with mapi id 15.20.4909.017; Mon, 24 Jan 2022 14:46:35 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Mon, 24 Jan 2022 15:45:47 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [DWGErfsEzh8vBar9koPtmlMpA4ERK1dY] X-ClientProxiedBy: AM5PR0201CA0016.eurprd02.prod.outlook.com (2603:10a6:203:3d::26) To AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) X-Microsoft-Original-Message-ID: <20220124144616.559446-2-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 805e8dbd-70c3-4bc4-ee97-08d9df4851c6 X-MS-TrafficTypeDiagnostic: AM6PR03MB5236:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: LWu85VxEnOhqa+z7Z0ixth/2ftLFFctPEBL6Zk5T7pBUcfV0+LUdl2J5CahbpRVPAEWTwK4HqdVC4n/Ozfz9oYB9BJ0Z4K5h79VMsN3CP0GR0UgtuRB2FWMbDcnZ30rqyfyFvIh6UrKUSyha3KtpCwBUwOXqv0aSRvlC5aRbjWJ/rAfMBXp8hdKrcd9HEJmouEo0pTdy+spYmvpMOtfYhXpMgN1plBWv78CU/hkLlZfsgAZ0aqdqsDDr7Ldspiw4DR64+kcGpcKkemJl4NBEzhEX163ejPEdjypm8jaxM+pi/p1q7yf1CarsFGYCAR/XTedKqR4vmFijL8MTdnVsEwdtGxgnWT/cbJjEJvgEys+D5Iec6t26fnyzNB2wwwsGl9GQClySKBX8TGlwmcwTNXd+Xiur5ApmIz5RjLLVRWXVy0x9+yCzT/zWiZslhSSlCjE1tO0nIDIGu2E2pOuiHOXcyAT7KL8LoAZeoV/o+ydKaUTOPxH3W5OZYky5Aa/G2z0lrczMr5Zg61PCWfh4w5CwWufWklKuDk0TeOZzV0aPgT6yYaNids4Jb3cg4A5fnZg9slkV2dah3zpJvGvCrA== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: BOdNHLS4R+Bzd9WvYclX4TRxN9M2Xy/TKrc0/IdKbNiCe8MoySp2AIADsVTHiKf8Fi4H/Lx+0YTh9oAODI1Nb8PMeFucYgUb0/wlc/gUF8Bu93v8FOFplmXzXL1SVIlribT+9GeZ+yY+ZRcAtEEsYcrOWbkeS34DR+fKVxWCeZq9WzRdFiEM1LQrRezYutA2Sy/51i81EtGxfp+RxrgZtO8+leKb0E6VbAd2mZvWqpTvwJu6jA9ztGO/oqimgnLVzu7thPZP7e1yakhlNOfBtuOO+OCfn3I9vrCG21OmKnYaypqZIuabfNT+PH33kw+uE7ENr8IqK36J6Gbqqc/dnu+4EeN+uZaFS1hsODGytaL2SCDvOOUWNCNs4z28/A1sJkacimE+jPdLivqPreejIdcxdI/C/YuInXqZYJICtgL4ie5YDdg0AXkxBJ1XvOak+lhVB2chgmr5RSm8jZVdrWOl2RqOmL+asJjMDCbsqWZ37oHJn4BT4rOarl6FFXRpDjVk05KIu2vBBCNgKt10N81Pl6g+u/ld+SIQDnWJ75XF8SYN2XkWs0OWiQtWsWqY1+Vp42i6gV/A2wHjiEop/PsDb/pOI1Ite0raecZd17/AWN8pQgy6DeCRIaC40bcJjbvB8Gluh36GHN8xqvD67jjLdB69bAbvRJdDZOmLRbLzZJ1VxKyWJCnSYa/kiy6vG+a48bkAZvSu154UPUpFwFrSksFhTVyh0YWd2eEqb3R65JTo4yc0Rzbrx0NmYCVpJ7eOegpvhC3/lonhTm7rlpW427gIWiSI0S+xMv35kJSBsRs9RkhLpd4bFgaLLIja/Tm063ScPzOkcVrR3OQm7LZ5m0wHeVHWZqVzCJs/V07llveKNutkBqNiPf0HwIyt34OxO1Y/ZTOqMMhjKqb5HSiO73+cOcYfmriBsGbI1agP2gShpHI/N5P76BeLnalnG29IPcmSynHcHnWOK7hTcg== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 805e8dbd-70c3-4bc4-ee97-08d9df4851c6 X-MS-Exchange-CrossTenant-AuthSource: AM7PR03MB6660.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Jan 2022 14:46:35.4297 (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: AM6PR03MB5236 Subject: [FFmpeg-devel] [PATCH v2 02/31] lavu/fifo: disallow overly large fifo sizes 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: Anton Khirnov Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: UBWC8/A89i8V From: Anton Khirnov The API currently allows creating FIFOs up to - UINT_MAX: av_fifo_alloc(), av_fifo_realloc(), av_fifo_grow() - SIZE_MAX: av_fifo_alloc_array() However the usable limit is determined by - rndx/wndx being uint32_t - av_fifo_[size,space] returning int so no FIFO should be larger than the smallest of - INT_MAX - UINT32_MAX - SIZE_MAX (which should be INT_MAX an all commonly used platforms). Return an error on trying to allocate FIFOs larger than this limit. --- libavutil/fifo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/libavutil/fifo.c b/libavutil/fifo.c index e1f2175530..55621f0dca 100644 --- a/libavutil/fifo.c +++ b/libavutil/fifo.c @@ -20,14 +20,23 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ +#include + #include "avassert.h" #include "common.h" #include "fifo.h" +#define OLD_FIFO_SIZE_MAX (size_t)FFMIN3(INT_MAX, UINT32_MAX, SIZE_MAX) + AVFifoBuffer *av_fifo_alloc_array(size_t nmemb, size_t size) { AVFifoBuffer *f; - void *buffer = av_realloc_array(NULL, nmemb, size); + void *buffer; + + if (nmemb > OLD_FIFO_SIZE_MAX / size) + return NULL; + + buffer = av_realloc_array(NULL, nmemb, size); if (!buffer) return NULL; f = av_mallocz(sizeof(AVFifoBuffer)); @@ -82,6 +91,9 @@ int av_fifo_realloc2(AVFifoBuffer *f, unsigned int new_size) { unsigned int old_size = f->end - f->buffer; + if (new_size > OLD_FIFO_SIZE_MAX) + return AVERROR(EINVAL); + if (old_size < new_size) { size_t offset_r = f->rptr - f->buffer; size_t offset_w = f->wptr - f->buffer; From patchwork Mon Jan 24 14:45:48 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 33767 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:e71a:0:0:0:0:0 with SMTP id b26csp385794ioh; Mon, 24 Jan 2022 06:46:56 -0800 (PST) X-Google-Smtp-Source: ABdhPJz6u+FtqoZIBi9GCtJ+mexRAmQWsv+7lkcU6wIlrFkTFw7+VDxUD4QE6FXK4TuQm0qaguzF X-Received: by 2002:a17:907:971a:: with SMTP id jg26mr12819307ejc.571.1643035616642; Mon, 24 Jan 2022 06:46:56 -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 s16si1417276edd.599.2022.01.24.06.46.56; Mon, 24 Jan 2022 06:46:56 -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=eNTdYtBt; 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 0FA6068B064; Mon, 24 Jan 2022 16:46:48 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR03-AM5-obe.outbound.protection.outlook.com (mail-oln040092070031.outbound.protection.outlook.com [40.92.70.31]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id B068268AE56 for ; Mon, 24 Jan 2022 16:46:41 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=IUyJy4KdyhbyDhQS53Dy/jiRo/qJ2GrT4lyh1s966N2ZEHmIckv8R7ubE5V3ykGjMHjZ9TycBcO1tG4QeklWGt3epW/qNrvjO/eYSfteeeNpEla9lzgqWf8B8+LUyFM9LnDVwU6Oil4fTVdRPhrUDDuP/I3SALfou9yPXEkJVDLYV4UxgjR1dCijWqx2BhK8flfqhSpku1Xt1TFjgZ8IkBPdyQIGAxMzBF84Pu+znpT2vKvYL9iyHh4av12nYgy417unqcdqBq6HWBwR+6UgXE7APF/OsEynA54OS0SK+cjRMIwEUwwdf/BpdoOMN8B3XR7UnNCZzmU3vhUTAUNWLg== 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=t8nz/Zb+lcR6DDj2tkjBFBWsAkYc35Jf4eXHD+fwOw8=; b=GI2udjkSaS8crv28NUkfhK8h/fegIEp3taUBem1EhjwZtRsaZQtMpwaJFybPgwPQTh/dXB79WK2He6128bA3wLd1HZlalU1Emw2o+eHM0aDFZLuMZ8bkWze/KXSl18WAIdmb6DiDY5tKR7m1g2g9zX8fU/K+B2eSSRvXdPIxva0sehq8ZgIpx6dQRtxR9PZpJsI/szvgDYjbV8aPUsY2oDOVqfbWGkErddDGsR/oT9eKAecD0Lsi6/Jz6yWzrOStG0LICkk/sxP77toX/bpNJ3DNH896ow+uS1+bGx6v/+NvEdztE4z09K7uYLX92EpWGqakhfKekkCOV4Z6LPYBFA== 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=t8nz/Zb+lcR6DDj2tkjBFBWsAkYc35Jf4eXHD+fwOw8=; b=eNTdYtBtfuUQnWK23f5i70mFxlZQHJ9suQeEftCUnjMKH8kl/wfne1nKHuO4v9MWoZPubS6+gxiG/MvLEd4btShxmaIOGMvREub7xWIWYx9NAW+rS1NSxZxuX3s9Cov11CulUS2xn8uyXoUu3ZTkQbTvc78CrNx+fVBQjuCQE+q8UtdnXlhVxcCJszqWOWWEpIZDrKN1QnR/4lwdZIsSUTAXL/ZxriKHC0Hw8j3bt+tPjahunm1A/62ay95zI/V3PX6oBWMgXf1OXrwiao9xdH1pKwByn3zem+C/VJrsKXIABDQfLOA6OWrOVqElnPGR1Z3bHELXAVMLcPxmi532YA== Received: from AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) by AM6PR03MB5236.eurprd03.prod.outlook.com (2603:10a6:20b:c4::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4909.17; Mon, 24 Jan 2022 14:46:38 +0000 Received: from AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::ac56:2ff4:d304:ab22]) by AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::ac56:2ff4:d304:ab22%4]) with mapi id 15.20.4909.017; Mon, 24 Jan 2022 14:46:38 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Mon, 24 Jan 2022 15:45:48 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [g9LhRdV/NSYXAJbEFOOOe3pgAEBYxpEY] X-ClientProxiedBy: AM5PR0201CA0016.eurprd02.prod.outlook.com (2603:10a6:203:3d::26) To AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) X-Microsoft-Original-Message-ID: <20220124144616.559446-3-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 2e10f060-7eba-4dd4-81aa-08d9df4853d8 X-MS-TrafficTypeDiagnostic: AM6PR03MB5236:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: XEAuo1URa2a99OBk9j/m5tkI6UB8fLVB3dCPVSR7KDR3ABIFWc7aPCfaoSACfzhshup1/F298JY2Vg1kq3G+XQQ2RNKHFfQwC5zKI71WBSIX2BJDPDkdzNNCHMV24zVw9VBepMjzgmLGLu9CWmH8OgUCn3Eh1h3Fl/EiOJk9dVNfm28nM7alE3vLcS6EK6T1yqWeDkbJb0o8hQFmpUwPFrtoix5nZlZGXvuV3lfP7WMFNmxiZDjVaCSh2ZwqhiRL2QJhvtVvwX/apGLmPg64n0I6tc5ww9igZNPQrtLOwOxRLyJdnoElT4M9r3wMvsv/WgFgkLkUmeM4vXK8nLWeGuQgV+1qZvrAjoE5gyYl+5UHe1qXokPL9yaLHRSgsp1DMwj28Av0ddzvSLq2F0T1+wTHAiTnZVlq21C0H3eNZbRMBsC0BwvYzvsyCegGLcK87NQjAwmk+qlfUuMqCWw9+iAn9uCsjDogk9B5YSprubMIrMog1HFaCj61GRKgNVZGbk8N9vq5VJNumPKZLUBmHfgiOA9XO/mQMpvirpG0KYZAcSU3xuws4wPu74gC358qD7iRxs/lMLT4OvShVP1L8Q== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: bx3F+t8nLkdwndMPNyUboeCYlm8gb7dnZHYQhlJwh2yCFr/NZlZClveoE0ygmEQCXUp5UMMfIXgykvNNPKowdT/ZcXOoe6yObXW90NeHONmWVrkX0TX09XIVBTNuOBBkis08IEeN7MT8rkGadtDi7nJ+4WXoUJBLr8t1z8XNl653RoCtFJt5F6tguUpuxTT8A4VESBEIizbhGWXfwdzA7jzRH7xRLozUvAVqQM9fUe20/xKLdbqi+dGJcrxkGzm/e+nYdUZqDcG2wbrEy5kfOOLpa6gNfDlck1ks++o33WFm3L4nGPf99lj4s6LMdbF3OENqxgMFt6Q5fEdFTIwk9TaktdgYwnIX8vEpiXx5OEqBVuFVx9laMsDzbTJ/aBB57r/zZmwDwdt3gyU6yjR5SMQlOYj91xXu6zUCWkmfr3gaPxJrkScV4VFijwIIX03EXySMcDP6BkaWjuLEj+aaZL5BgUoiCGfD/UALDTuWndK7adGkk9AJxbA0QiJvlroKimJiDppMkxXJLtZaT/Y6whZmjttoJHa8eAxV2zrtuqqFMKKIzhANHas1aqGV1WjuB0Qza0C9x36z1NE6EA81W6CNlpIs+8nChiEHaYSaG5iNf7FMlz+hxnjv6tAHn3xLvwBIuxaECFbABjvJg/goEQ8ji+LTKyNqFlQvjzCIVcnKYOEC3dblaPxF4VhQVikueF44u1rxYvE5ZtaT27IYBchRsKDGzmT/HoLGENxxrEBZ5dHOyqzgQL+tX7DJjJf5faljMmD3WcZ6UppPoSEe3SU2H0hRbmvJ5rzfGuV7fsNWdKM6kTZrqPKh3/hQ4Iv7Nt9WTOzmF6eGhPBrXIiZlgUmkxs1GbiUsWWpiXDSlM+xqxREVrqMSEE85ypDQGLdZIQ84I99v1CPvo6OfoRmCZYA3Xa8xJmjG2HjxhTVsQdHmmu99LfJ/CxfEFrcjxjRMMN/WTcoUeJmpGTSKHdwNw== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 2e10f060-7eba-4dd4-81aa-08d9df4853d8 X-MS-Exchange-CrossTenant-AuthSource: AM7PR03MB6660.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Jan 2022 14:46:38.9004 (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: AM6PR03MB5236 Subject: [FFmpeg-devel] [PATCH v2 03/31] lavu/fifo: Add new AVFifo API based upon the notion of element size 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: Anton Khirnov Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: ChCnnTCI6/FZ From: Anton Khirnov Many AVFifoBuffer users operate on fixed-size elements (e.g. pointers), but the current FIFO API deals exclusively in bytes, requiring extra complexity in all these callers. Add a new AVFifo API creating a FIFO with an element size that may be larger than a byte. All operations on such a FIFO then operate on complete elements. This API does not reuse AVFifoBuffer and its API at all, but instead uses an opaque struct called AVFifo. The AVFifoBuffer API will be deprecated in a future commit once all of its users have been switched to the new API. Not reusing AVFifoBuffer also allowed to use the full range of size_t from the beginning. --- doc/APIchanges | 9 ++ libavutil/fifo.c | 224 ++++++++++++++++++++++++++++++++++++++++++++ libavutil/fifo.h | 179 +++++++++++++++++++++++++++++++++++ libavutil/version.h | 2 +- 4 files changed, 413 insertions(+), 1 deletion(-) diff --git a/doc/APIchanges b/doc/APIchanges index 8df0364e4c..57a9df9bef 100644 --- a/doc/APIchanges +++ b/doc/APIchanges @@ -14,6 +14,15 @@ libavutil: 2021-04-27 API changes, most recent first: +2022-01-xx - xxxxxxxxxx - lavu 57.19.100 - fifo.h + Add a new FIFO API, which allows setting a FIFO element size. + This API operates on these elements rather than on bytes. + Add av_fifo_alloc2(), av_fifo_elem_size(), av_fifo_can_read(), + av_fifo_can_write(), av_fifo_grow2(), av_fifo_drain2(), av_fifo_write(), + av_fifo_write_from_cb(), av_fifo_read(), av_fifo_read_to_cb(), + av_fifo_peek(), av_fifo_peek_to_cb(), av_fifo_drain2(), av_fifo_reset2(), + av_fifo_freep2(). + 2022-01-04 - 78dc21b123e - lavu 57.16.100 - frame.h Add AV_FRAME_DATA_DOVI_METADATA. diff --git a/libavutil/fifo.c b/libavutil/fifo.c index 55621f0dca..0e0d84258f 100644 --- a/libavutil/fifo.c +++ b/libavutil/fifo.c @@ -26,6 +26,230 @@ #include "common.h" #include "fifo.h" +struct AVFifo { + uint8_t *buffer; + + size_t elem_size, nb_elems; + size_t offset_r, offset_w; + // distinguishes the ambiguous situation offset_r == offset_w + int is_empty; +}; + +AVFifo *av_fifo_alloc2(size_t nb_elems, size_t elem_size, + unsigned int flags) +{ + AVFifo *f; + void *buffer; + + if (!elem_size) + return NULL; + + buffer = av_realloc_array(NULL, nb_elems, elem_size); + if (!buffer) + return NULL; + f = av_mallocz(sizeof(*f)); + if (!f) { + av_free(buffer); + return NULL; + } + f->buffer = buffer; + f->nb_elems = nb_elems; + f->elem_size = elem_size; + f->is_empty = 1; + + return f; +} + +size_t av_fifo_elem_size(const AVFifo *f) +{ + return f->elem_size; +} + +size_t av_fifo_can_read(const AVFifo *f) +{ + if (f->offset_w <= f->offset_r && !f->is_empty) + return f->nb_elems - f->offset_r + f->offset_w; + return f->offset_w - f->offset_r; +} + +size_t av_fifo_can_write(const AVFifo *f) +{ + return f->nb_elems - av_fifo_can_read(f); +} + +int av_fifo_grow2(AVFifo *f, size_t inc) +{ + uint8_t *tmp; + + if (inc > SIZE_MAX - f->nb_elems) + return AVERROR(EINVAL); + + tmp = av_realloc_array(f->buffer, f->nb_elems + inc, f->elem_size); + if (!tmp) + return AVERROR(ENOMEM); + f->buffer = tmp; + + // move the data from the beginning of the ring buffer + // to the newly allocated space + if (f->offset_w <= f->offset_r && !f->is_empty) { + const size_t copy = FFMIN(inc, f->offset_w); + memcpy(tmp + f->nb_elems * f->elem_size, tmp, copy * f->elem_size); + if (copy < f->offset_w) { + memmove(tmp, tmp + copy * f->elem_size, + (f->offset_w - copy) * f->elem_size); + f->offset_w -= copy; + } else + f->offset_w = f->nb_elems + copy; + } + + f->nb_elems += inc; + + return 0; +} + +static int fifo_write_common(AVFifo *f, const uint8_t *buf, size_t *nb_elems, + AVFifoCB read_cb, void *opaque) +{ + size_t to_write = *nb_elems; + size_t offset_w = f->offset_w; + int ret = 0; + + if (to_write > av_fifo_can_write(f)) + return AVERROR(ENOSPC); + + while (to_write > 0) { + size_t len = FFMIN(f->nb_elems - offset_w, to_write); + uint8_t *wptr = f->buffer + offset_w * f->elem_size; + + if (read_cb) { + ret = read_cb(opaque, wptr, &len); + if (ret < 0 || len == 0) + break; + } else { + memcpy(wptr, buf, len * f->elem_size); + buf += len * f->elem_size; + } + offset_w += len; + if (offset_w >= f->nb_elems) + offset_w = 0; + to_write -= len; + } + f->offset_w = offset_w; + + if (*nb_elems != to_write) + f->is_empty = 0; + *nb_elems -= to_write; + + return ret; +} + +int av_fifo_write(AVFifo *f, const void *buf, size_t nb_elems) +{ + return fifo_write_common(f, buf, &nb_elems, NULL, NULL); +} + +int av_fifo_write_from_cb(AVFifo *f, AVFifoCB read_cb, + void *opaque, size_t *nb_elems) +{ + return fifo_write_common(f, NULL, nb_elems, read_cb, opaque); +} + +static int fifo_peek_common(const AVFifo *f, uint8_t *buf, size_t *nb_elems, + size_t offset, AVFifoCB write_cb, void *opaque) +{ + size_t to_read = *nb_elems; + size_t offset_r = f->offset_r; + size_t can_read = av_fifo_can_read(f); + int ret = 0; + + if (offset > can_read || to_read > can_read - offset) { + *nb_elems = 0; + return AVERROR(EINVAL); + } + + if (offset_r >= f->nb_elems - offset) + offset_r -= f->nb_elems - offset; + else + offset_r += offset; + + while (to_read > 0) { + size_t len = FFMIN(f->nb_elems - offset_r, to_read); + uint8_t *rptr = f->buffer + offset_r * f->elem_size; + + if (write_cb) { + ret = write_cb(opaque, rptr, &len); + if (ret < 0 || len == 0) + break; + } else { + memcpy(buf, rptr, len * f->elem_size); + buf += len * f->elem_size; + } + offset_r += len; + if (offset_r >= f->nb_elems) + offset_r = 0; + to_read -= len; + } + + *nb_elems -= to_read; + + return ret; +} + +int av_fifo_read(AVFifo *f, void *buf, size_t nb_elems) +{ + int ret = fifo_peek_common(f, buf, &nb_elems, 0, NULL, NULL); + av_fifo_drain2(f, nb_elems); + return ret; +} + +int av_fifo_read_to_cb(AVFifo *f, AVFifoCB write_cb, + void *opaque, size_t *nb_elems) +{ + int ret = fifo_peek_common(f, NULL, nb_elems, 0, write_cb, opaque); + av_fifo_drain2(f, *nb_elems); + return ret; +} + +int av_fifo_peek(AVFifo *f, void *buf, size_t nb_elems, size_t offset) +{ + return fifo_peek_common(f, buf, &nb_elems, offset, NULL, NULL); +} + +int av_fifo_peek_to_cb(AVFifo *f, AVFifoCB write_cb, void *opaque, + size_t *nb_elems, size_t offset) +{ + return fifo_peek_common(f, NULL, nb_elems, offset, write_cb, opaque); +} + +void av_fifo_drain2(AVFifo *f, size_t size) +{ + const size_t cur_size = av_fifo_can_read(f); + + av_assert0(cur_size >= size); + if (cur_size == size) + f->is_empty = 1; + + if (f->offset_r >= f->nb_elems - size) + f->offset_r -= f->nb_elems - size; + else + f->offset_r += size; +} + +void av_fifo_reset2(AVFifo *f) +{ + f->offset_r = f->offset_w = 0; + f->is_empty = 1; +} + +void av_fifo_freep2(AVFifo **f) +{ + if (*f) { + av_freep(&(*f)->buffer); + av_freep(f); + } +} + + #define OLD_FIFO_SIZE_MAX (size_t)FFMIN3(INT_MAX, UINT32_MAX, SIZE_MAX) AVFifoBuffer *av_fifo_alloc_array(size_t nmemb, size_t size) diff --git a/libavutil/fifo.h b/libavutil/fifo.h index f4fd291e59..f455022e3c 100644 --- a/libavutil/fifo.h +++ b/libavutil/fifo.h @@ -28,6 +28,185 @@ #include "avutil.h" #include "attributes.h" +typedef struct AVFifo AVFifo; + +/** + * Callback for writing or reading from a FIFO, passed to (and invoked from) the + * av_fifo_*_cb() functions. It may be invoked multiple times from a single + * av_fifo_*_cb() call and may process less data than the maximum size indicated + * by nb_elems. + * + * @param opaque the opaque pointer provided to the av_fifo_*_cb() function + * @param buf the buffer for reading or writing the data, depending on which + * av_fifo_*_cb function is called + * @param nb_elems On entry contains the maximum number of elements that can be + * read from / written into buf. On success, the callback should + * update it to contain the number of elements actually written. + * + * @return 0 on success, a negative error code on failure (will be returned from + * the invoking av_fifo_*_cb() function) + */ +typedef int AVFifoCB(void *opaque, void *buf, size_t *nb_elems); + +/** + * Allocate and initialize an AVFifo with a given element size. + * + * @param elems initial number of elements that can be stored in the FIFO + * @param elem_size Size in bytes of a single element. Further operations on + * the returned FIFO will implicitly use this element size. + * @param flags currently unused, must be 0 + * + * @return newly-allocated AVFifo on success, a negative error code on failure + */ +AVFifo *av_fifo_alloc2(size_t elems, size_t elem_size, + unsigned int flags); + +/** + * @return Element size for FIFO operations. This element size is set at + * FIFO allocation and remains constant during its lifetime + */ +size_t av_fifo_elem_size(const AVFifo *f); + +/** + * @return number of elements available for reading from the given FIFO. + */ +size_t av_fifo_can_read(const AVFifo *f); + +/** + * @return number of elements that can be written into the given FIFO. + */ +size_t av_fifo_can_write(const AVFifo *f); + +/** + * Enlarge an AVFifo. + * + * On success, the FIFO will be large enough to hold exactly + * inc + av_fifo_can_read() + av_fifo_can_write() + * elements. In case of failure, the old FIFO is kept unchanged. + * + * @param f AVFifo to resize + * @param inc number of elements to allocate for, in addition to the current + * allocated size + * @return a non-negative number on success, a negative error code on failure + */ +int av_fifo_grow2(AVFifo *f, size_t inc); + +/** + * Write data into a FIFO. + * + * In case nb_elems > av_fifo_can_write(f), nothing is written and an error + * is returned. + * + * @param f the FIFO buffer + * @param buf Data to be written. nb_elems * av_fifo_elem_size(f) bytes will be + * read from buf on success. + * @param nb_elems number of elements to write into FIFO + * + * @return a non-negative number on success, a negative error code on failure + */ +int av_fifo_write(AVFifo *f, const void *buf, size_t nb_elems); + +/** + * Write data from a user-provided callback into a FIFO. + * + * @param f the FIFO buffer + * @param read_cb Callback supplying the data to the FIFO. May be called + * multiple times. + * @param opaque opaque user data to be provided to read_cb + * @param nb_elems Should point to the maximum number of elements that can be + * written. Will be updated to contain the number of elements + * actually written. + * + * @return non-negative number on success, a negative error code on failure + */ +int av_fifo_write_from_cb(AVFifo *f, AVFifoCB read_cb, + void *opaque, size_t *nb_elems); + +/** + * Read data from a FIFO. + * + * In case nb_elems > av_fifo_can_read(f), nothing is read and an error + * is returned. + * + * @param f the FIFO buffer + * @param buf Buffer to store the data. nb_elems * av_fifo_elem_size(f) bytes + * will be written into buf on success. + * @param nb_elems number of elements to read from FIFO + * + * @return a non-negative number on success, a negative error code on failure + */ +int av_fifo_read(AVFifo *f, void *buf, size_t nb_elems); + +/** + * Feed data from a FIFO into a user-provided callback. + * + * @param f the FIFO buffer + * @param write_cb Callback the data will be supplied to. May be called + * multiple times. + * @param opaque opaque user data to be provided to write_cb + * @param nb_elems Should point to the maximum number of elements that can be + * read. Will be updated to contain the total number of elements + * actually sent to the callback. + * + * @return non-negative number on success, a negative error code on failure + */ +int av_fifo_read_to_cb(AVFifo *f, AVFifoCB write_cb, + void *opaque, size_t *nb_elems); + +/** + * Read data from a FIFO without modifying FIFO state. + * + * Returns an error if an attempt is made to peek to nonexistent elements + * (i.e. if offset + nb_elems is larger than av_fifo_can_read(f)). + * + * @param f the FIFO buffer + * @param buf Buffer to store the data. nb_elems * av_fifo_elem_size(f) bytes + * will be written into buf. + * @param nb_elems number of elements to read from FIFO + * @param offset number of initial elements to skip. + * + * @return a non-negative number on success, a negative error code on failure + */ +int av_fifo_peek(AVFifo *f, void *buf, size_t nb_elems, size_t offset); + +/** + * Feed data from a FIFO into a user-provided callback. + * + * @param f the FIFO buffer + * @param write_cb Callback the data will be supplied to. May be called + * multiple times. + * @param opaque opaque user data to be provided to write_cb + * @param nb_elems Should point to the maximum number of elements that can be + * read. Will be updated to contain the total number of elements + * actually sent to the callback. + * @param offset number of initial elements to skip; offset + *nb_elems must not + * be larger than av_fifo_can_read(f). + * + * @return a non-negative number on success, a negative error code on failure + */ +int av_fifo_peek_to_cb(AVFifo *f, AVFifoCB write_cb, void *opaque, + size_t *nb_elems, size_t offset); + +/** + * Discard the specified amount of data from an AVFifo. + * @param size number of elements to discard, MUST NOT be larger than + * av_fifo_can_read(f) + */ +void av_fifo_drain2(AVFifo *f, size_t size); + +/* + * Empty the AVFifo. + * @param f AVFifo to reset + */ +void av_fifo_reset2(AVFifo *f); + +/** + * Free an AVFifo and reset pointer to NULL. + * @param f Pointer to an AVFifo to free. *f == NULL is allowed. + */ +void av_fifo_freep2(AVFifo **f); + + typedef struct AVFifoBuffer { uint8_t *buffer; uint8_t *rptr, *wptr, *end; diff --git a/libavutil/version.h b/libavutil/version.h index 953aac9d94..331b8f6ea9 100644 --- a/libavutil/version.h +++ b/libavutil/version.h @@ -79,7 +79,7 @@ */ #define LIBAVUTIL_VERSION_MAJOR 57 -#define LIBAVUTIL_VERSION_MINOR 18 +#define LIBAVUTIL_VERSION_MINOR 19 #define LIBAVUTIL_VERSION_MICRO 100 #define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \ From patchwork Mon Jan 24 14:45:49 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 33768 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:e71a:0:0:0:0:0 with SMTP id b26csp385985ioh; Mon, 24 Jan 2022 06:47:07 -0800 (PST) X-Google-Smtp-Source: ABdhPJyXQS9o7xXwABJMpwWwJ5dMK68QxYlJAb7On397YueHx845jF5XLsTE+jI/auHeaDcRz6lJ X-Received: by 2002:a17:907:3f83:: with SMTP id hr3mr12589969ejc.684.1643035627774; Mon, 24 Jan 2022 06:47:07 -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 e18si7564376ejm.305.2022.01.24.06.47.07; Mon, 24 Jan 2022 06:47:07 -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=vFveqDeq; 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 3B8E268B04A; Mon, 24 Jan 2022 16:46:49 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR02-AM5-obe.outbound.protection.outlook.com (mail-oln040092067014.outbound.protection.outlook.com [40.92.67.14]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id D46FF68B04A for ; Mon, 24 Jan 2022 16:46:41 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=kXdB1D+R9w/Yl/pG5cnB6VHaw+M/Wi57P7KtzRaLxE4UEQUMe0k4A0sNhaEtrjyzUVxcd73bfoj9XLFfheC/MGfDxPsFn8Xy6jqObfrwEKsXblIq819/l3a5aKPb54Bm5nWs9ZJhAXZ+iWhgI8LGgUgTNFfbXbbeP154KzSBpE6IdZExzuNFCPcinGoRiHYn8P3DiyR+8U9fPK5dkpTGAY+O+Wex+ZjptC4NUT8ysfgIssavzvvcrTk46LTwAvQMjhimayF1SMj44pw5YVOPYTe/pvFuYlLMm+OFNuHURMCv8shSek5DPWsveC9NhK7e2lp++34X6m39+0omOZYGcg== 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=x7N13kV8H1/EboQ4aDK7/BDcArWanJ3w7vLAxj0Y3Bw=; b=lXd5jeGhKSSbnRTiY/gOLPI/EIHuoobNd4v74GdfS5zOZuCzR2vVIxwV0AOwMaLwhXnwDM8ayeHj87IMXmkqv/oFTEXS1qybO9tIe0BQmjUODEdmdLshnrxMWBHkslwh0e+zLTwi+AWa7kYn1ZcNxsj82ybJWpjqJHfs4bB1BsLlNd3sTv4YUG648qw9VXAlC7e0+didh5awaA3s7FFx0yntWzDPvXkGbmiEI5eSmuyuhklXcwJw7c9oq/AMCrjdXaUIyl+a7WDhsCzqiNicBri13KfiN/VEX98lvL3gvwQeacbu5eilEJy/w06dCAcPOglS4sD8pXMl8PPyuz0uKw== 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=x7N13kV8H1/EboQ4aDK7/BDcArWanJ3w7vLAxj0Y3Bw=; b=vFveqDeq3M9XWUOUdO4tTRY4BfbQdYrtIOfsi7XeQo4LmpkIUTukxtb4lkTuVYBA3PSU1cmyq4AxR8NjfYoy8sTuYKOkxZx721dT9i8V/yvCTzpefOYkjH5uzdwdPgwE8E9nmD9xMzQqXYGLXBOQzeQKWK7rxi3+dYUZ2QZ3RXB448R9gi4oicCy2wTVPgISxcXlGyyq1u+wmoReskwSutYmiKiSMCx9fTLrex6vKoAXhsV7Uy7QV0won2zmsL5ynVhb0+2edgNxceccP9ObLMyshZBrIp0mUK1nVa6u+RTNAWGo/yODcRW+zZWpbXVmY504x8NVtU3OdDah9gbeqw== Received: from AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) by AM0PR0302MB3187.eurprd03.prod.outlook.com (2603:10a6:208:7::30) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4909.17; Mon, 24 Jan 2022 14:46:40 +0000 Received: from AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::ac56:2ff4:d304:ab22]) by AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::ac56:2ff4:d304:ab22%4]) with mapi id 15.20.4909.017; Mon, 24 Jan 2022 14:46:40 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Mon, 24 Jan 2022 15:45:49 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [h006fzE9NtrTmC4Hpdtqd+dBTg8m69H3] X-ClientProxiedBy: AM5PR0201CA0016.eurprd02.prod.outlook.com (2603:10a6:203:3d::26) To AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) X-Microsoft-Original-Message-ID: <20220124144616.559446-4-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 053383dc-134c-47d4-95fa-08d9df4854fd X-MS-TrafficTypeDiagnostic: AM0PR0302MB3187:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 10xlKnkwbGI/zXX6j9il6TL8bagPTwigYF1joUlHeh5tAtiqGGr90Gd0HKd/sSJRhoVbi7kIBZxR9BYcxEmxHFnhV+FOmxBzs7zux5tq2tdHeMOXhCzGQ/c4DKW5fWmYxdTNu35vPjNZSc0MomG4vAb4JdSxd+pK8Yusgto5LTIxNB3TEKgQ3tNVmaEugRxdl3c6zZ7yEgholbb0pAO1uwRP1mqEUDaMfHmtC/ngPEFe/H+KpPMdlo30BZ3whFJhs03/MJ8zGblLPCYg3UUWZYFacggZ8mucr6vXVDrb+xE6Iy4XQk3H3qC0ZXVeF2IXfN4DjIzaSILa3tXWQscGy1CcZZTbnBqShKckd9RDh1gBQ1+583Du+jqF2w8+BYJ8jXr2CJxdQKFxkKmJEYYWLOT821LfbLyhi8s4yzJQ8LMgSjedyIucveETaCEpeNx8Vj96paBgdXt34G8mxsEif5xXs1i16xdp9Jc7X46zn/hPCc6J5vLU8vbMPOjKfjTkBJoMjIS+lN+9gEw9xHwabRCdjQui47KE7Pb4rw16F2sW3mys5OzygNHJE/OSzLrL9xO4dR0KkzlbKf/ol6RGZw== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: lVay+66qz90x92W8NUwgN9N5tPD1uH7Wl/Kqb1v7tiCQzDJMoMAhVjfX03OhAM0TrhbjD9aVXK/mjbn+dnW0kdvOoOvhiwnWu7BoyNYyu3Olalxc+fGSA3r6XRkiSEWvPnE2sgZMtn0iBmU1tAYWaC+Nrc9op/ywlPnRjO+APOoSjzfkTy3eRLJRFDv3Ju49qrLs3nCoSLjnxFaW3DGQd+dCRSS7I8eWhG4wvZpAaWkJZwcfAGkSeKuZW3W9+MU5pqeRhGAUXeCdh8IJQiQpdhZUnkh6/W/7wEgRbVd3Rb/5Tt5o1LKztFJAEVQgkCQkiJmeVMPsmRdWllFxQ3k7uUqlqOFzVlcyGZRDiIpxquK8yJQIyzorQG0B/MmkNItqf0ddnHVhH57zbORQM6c+lN48V+F9LTjbyarmUlCQVC1OIHZoTUAwH51s3eWX1Kn3IDF+XcFccjX8ImGID/VZMLm5BMLWUxhPyz3HnHWq5I6fnWlsKXgRpIOz8Z5zXTL9kcKGdNV62MjJq3N5wGSWcy8FaQk6VQGuW1gUSNllvqbD5FQkxh6EBed0pR7LqqMrTC5Pov9Dc8gymcwC32wQv+lVCHJFsj8Q+dkRhRa1ORLsiqv/cJ6rD9M99UO6r1omi4XUes+0T7u2hjMwlFnh5x18R5RsFpyAsU3EWopGHFu2hjyRu9k1Y47Ew9WcRED/qovohKWT67UA7UOTH1noyBLAzxS0xY8ZYd8IkKycfadIkHLAMbFYiR80WLTyEUMZzMB5JxfTN37TYD9H8ZCRyNpDSIfq7RUxXGZwkCc9r53I0rUU8ixd+Z8oVXjdMK+HHlA3Z/XeFXVTC/h/lCT7swbkNdgHZgWgo32jvVtk2Fxn78shqbvIu65wLdwT8SLD8p8utbL6DHHQ4RjGdF0s3vKADeju78Hv0lxcOqzRFcOH9Z9xuIfptRlpft/wDCO8i+BpkJyYfgT7sYkmHoUdrQ== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 053383dc-134c-47d4-95fa-08d9df4854fd X-MS-Exchange-CrossTenant-AuthSource: AM7PR03MB6660.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Jan 2022 14:46:40.8211 (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: AM0PR0302MB3187 Subject: [FFmpeg-devel] [PATCH v2 04/31] lavu/fifo: add a flag for automatically growing the FIFO as needed 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: Anton Khirnov Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: 8Ze5pIlXx10y From: Anton Khirnov This will not increase the FIFO beyond 1MB, unless the caller explicitly specifies otherwise. --- doc/APIchanges | 2 +- libavutil/fifo.c | 39 +++++++++++++++++++++++++++++++++++++-- libavutil/fifo.h | 15 ++++++++++++++- 3 files changed, 52 insertions(+), 4 deletions(-) diff --git a/doc/APIchanges b/doc/APIchanges index 57a9df9bef..75e0b1f49a 100644 --- a/doc/APIchanges +++ b/doc/APIchanges @@ -21,7 +21,7 @@ API changes, most recent first: av_fifo_can_write(), av_fifo_grow2(), av_fifo_drain2(), av_fifo_write(), av_fifo_write_from_cb(), av_fifo_read(), av_fifo_read_to_cb(), av_fifo_peek(), av_fifo_peek_to_cb(), av_fifo_drain2(), av_fifo_reset2(), - av_fifo_freep2(). + av_fifo_freep2(), av_fifo_auto_grow_limit(). 2022-01-04 - 78dc21b123e - lavu 57.16.100 - frame.h Add AV_FRAME_DATA_DOVI_METADATA. diff --git a/libavutil/fifo.c b/libavutil/fifo.c index 0e0d84258f..5a09dd3877 100644 --- a/libavutil/fifo.c +++ b/libavutil/fifo.c @@ -26,6 +26,9 @@ #include "common.h" #include "fifo.h" +// by default the FIFO can be auto-grown to 1MB +#define AUTO_GROW_DEFAULT_BYTES (1024 * 1024) + struct AVFifo { uint8_t *buffer; @@ -33,6 +36,9 @@ struct AVFifo { size_t offset_r, offset_w; // distinguishes the ambiguous situation offset_r == offset_w int is_empty; + + unsigned int flags; + size_t auto_grow_limit; }; AVFifo *av_fifo_alloc2(size_t nb_elems, size_t elem_size, @@ -57,9 +63,17 @@ AVFifo *av_fifo_alloc2(size_t nb_elems, size_t elem_size, f->elem_size = elem_size; f->is_empty = 1; + f->flags = flags; + f->auto_grow_limit = FFMAX(AUTO_GROW_DEFAULT_BYTES / elem_size, 1); + return f; } +void av_fifo_auto_grow_limit(AVFifo *f, size_t max_elems) +{ + f->auto_grow_limit = max_elems; +} + size_t av_fifo_elem_size(const AVFifo *f) { return f->elem_size; @@ -107,6 +121,26 @@ int av_fifo_grow2(AVFifo *f, size_t inc) return 0; } +static int fifo_check_space(AVFifo *f, size_t to_write) +{ + const size_t can_write = av_fifo_can_write(f); + const size_t need_grow = to_write > can_write ? to_write - can_write : 0; + size_t can_grow; + + if (!need_grow) + return 0; + + can_grow = f->auto_grow_limit > f->nb_elems ? + f->auto_grow_limit - f->nb_elems : 0; + if ((f->flags & AV_FIFO_FLAG_AUTO_GROW) && need_grow <= can_grow) { + // allocate a bit more than necessary, if we can + const size_t inc = (need_grow < can_grow / 2 ) ? need_grow * 2 : can_grow; + return av_fifo_grow2(f, inc); + } + + return AVERROR(ENOSPC); +} + static int fifo_write_common(AVFifo *f, const uint8_t *buf, size_t *nb_elems, AVFifoCB read_cb, void *opaque) { @@ -114,8 +148,9 @@ static int fifo_write_common(AVFifo *f, const uint8_t *buf, size_t *nb_elems, size_t offset_w = f->offset_w; int ret = 0; - if (to_write > av_fifo_can_write(f)) - return AVERROR(ENOSPC); + ret = fifo_check_space(f, to_write); + if (ret < 0) + return ret; while (to_write > 0) { size_t len = FFMIN(f->nb_elems - offset_w, to_write); diff --git a/libavutil/fifo.h b/libavutil/fifo.h index f455022e3c..55548fbeb4 100644 --- a/libavutil/fifo.h +++ b/libavutil/fifo.h @@ -48,13 +48,20 @@ typedef struct AVFifo AVFifo; */ typedef int AVFifoCB(void *opaque, void *buf, size_t *nb_elems); +/** + * Automatically resize the FIFO on writes, so that the data fits. This + * automatic resizing happens up to a limit that can be modified with + * av_fifo_auto_grow_limit(). + */ +#define AV_FIFO_FLAG_AUTO_GROW (1 << 0) + /** * Allocate and initialize an AVFifo with a given element size. * * @param elems initial number of elements that can be stored in the FIFO * @param elem_size Size in bytes of a single element. Further operations on * the returned FIFO will implicitly use this element size. - * @param flags currently unused, must be 0 + * @param flags a combination of AV_FIFO_FLAG_* * * @return newly-allocated AVFifo on success, a negative error code on failure */ @@ -67,6 +74,12 @@ AVFifo *av_fifo_alloc2(size_t elems, size_t elem_size, */ size_t av_fifo_elem_size(const AVFifo *f); +/** + * Set the maximum size (in elements) to which the FIFO can be resized + * automatically. Has no effect unless AV_FIFO_FLAG_AUTO_GROW is used. + */ +void av_fifo_auto_grow_limit(AVFifo *f, size_t max_elems); + /** * @return number of elements available for reading from the given FIFO. */ From patchwork Mon Jan 24 14:45:50 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 33769 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:e71a:0:0:0:0:0 with SMTP id b26csp386166ioh; Mon, 24 Jan 2022 06:47:19 -0800 (PST) X-Google-Smtp-Source: ABdhPJwIkGEOSuAXHXAracH32JsOz7rF2HHRK/F6mvWlOMQVhBWe6RTK/7zYuaJowCEsqQD3SpkI X-Received: by 2002:a17:907:98ae:: with SMTP id ju14mr12387947ejc.533.1643035639016; Mon, 24 Jan 2022 06:47: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 z15si9315186edc.631.2022.01.24.06.47.18; Mon, 24 Jan 2022 06:47: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=sBkhzBSB; 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 877F468B086; Mon, 24 Jan 2022 16:46:53 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR02-AM5-obe.outbound.protection.outlook.com (mail-oln040092067060.outbound.protection.outlook.com [40.92.67.60]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id EA6D468AE56 for ; Mon, 24 Jan 2022 16:46:51 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=g+a238QKk/bVRQXnn4jLISMYRNa7nCvgcOkMCd22kgdDF0OPR8k+QcaXBHZDuzcWvek8oFTNpE8EikxtCT9vGYKMTQ7Ps+VQDEkkaHdhgqgMG6qbchl5uThXwl8MQvPJuzFp9YJuWthxHDx42yjo7cjYTeeEy5z/5LoFPEhpelJ3CSqC1GQTrXEYOS1RxzkYcLhfC1qu0HYMhwtVGPOG8tbfieTateDguq8DQPyy3vMAUrd6a8eaGJ1pQJYkVM1sz88fik5nTpTjARBweNE1MlfEm3dBj1SrVUsChpqFNaRoA+C766z+MuKE1Qp6UB5115+Ua9N6iyetRH/glyLBlw== 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=uCMgxwDqIDyQvtsQSNNrS6UdhzfiYfBTiQrLpzAXJ0A=; b=Wq2sS4jhoVcijc8uu5UfFjtqj2FnFuVowYsaypKL6DmthIO8SNP6p//KxM/WXEKkhoNZlQlSyMnBzHXBlN8QIiS138iMyFkkeIvQZ5NaKh8+UOcsFfeOwXc0U5f2B8FVTJO+f+nYat1Y2anFowAefqpqukixcPaKmc7f7EfKyc5m88ESJjiUA3rvaRRrVBxwCAsZbfe1Yz+zpeXo8Yz6Md+erqMnjBbHbqOPnb0zZq7R/ZtgL825KjldyB/2+xakrjIKvSGfKYzPCwRY2FSh9n7c771xv3SBvbDQygnFgfAYzMNIHmK8w8i6EE0gDnc5jxx4MAsD3bzXbtfTZqG+qg== 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=uCMgxwDqIDyQvtsQSNNrS6UdhzfiYfBTiQrLpzAXJ0A=; b=sBkhzBSBoWLGrG0D7HmxtB0BtmGRI+uuST7C+eFMROm8L7eE9CON73pcaHP2UaUqyNswb6550PfjOrESmHBGCV5KiFEktDYGHXJ8Hd146Ag6bt57W8ARpc5swBns1oEd1KPQ7pWIlI6Qqd2pm8TisNMI6JNciPDz0+PURTBaCjD2fZwG2xfiRivlnGOVkML3QrbrY8BIlSrCgP/NsEHH3jkd6BizDvOla9G88970MEG6y+uPaadWZf4pwov1hwM3kWEIyENjN5cHg87PPePfq5TMn36Ol5NMpyksA2uu+BfvJEISrLi6En+kOeU05A2HxNC+AU53uz8cD47KwQ9WlA== Received: from AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) by AM0PR0302MB3187.eurprd03.prod.outlook.com (2603:10a6:208:7::30) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4909.17; Mon, 24 Jan 2022 14:46:50 +0000 Received: from AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::ac56:2ff4:d304:ab22]) by AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::ac56:2ff4:d304:ab22%4]) with mapi id 15.20.4909.017; Mon, 24 Jan 2022 14:46:50 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Mon, 24 Jan 2022 15:45:50 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [1wNPbbrk5ui+s8pZrrcdFYzE2AZU65cG] X-ClientProxiedBy: AM5PR0201CA0016.eurprd02.prod.outlook.com (2603:10a6:203:3d::26) To AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) X-Microsoft-Original-Message-ID: <20220124144616.559446-5-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 39fc7b6d-71f9-4f40-8b3c-08d9df485ad0 X-MS-TrafficTypeDiagnostic: AM0PR0302MB3187:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 1imbNH6d1vC3XXEPDmw2slvdHIraIGEAg5n11bNz15rS7/3NuXb896vw6fFVh2QQ7/KZjx0QGJGT3RWlhJP1xd6LKhspqO6ySNq5J/28ELFU2HxNtpme7H0eTGlpQvTVyNBWFGqHQtXGZpOCsdmAyuPTFyUPZUKfxU6MSgf6Bpw9gPNj/n5002kQHr4D2FqvW5LDuvjJinJ6CAhk29t5j2WuP+z//VmEsY9WQ+Nl43PepLwWFzt6HdDfGhU2a/KyGnBok9NbkDwIXMZDgmNajWxVev3FgXqNWQJr5VBRwhUwey8aurjq3E+Zo7VCeogwR1LHSW6CTge7amjXdoaUBNmaCRxWwtcI/qLvRtccFXF1m5l7huAq8fM8Eu0RwpsnmrTGXNQ0UGjGqiPJv8ke5uOCfYkwh4p7JbGQmZNwgORwEYx+4Vx5mIhNonM9W1Hdt5DxISsI/z4doqp1riTkQUWDRmflx5WJRlBjVK/9kP7Gijs9oIb2a8Rb7Lj4eApesxErYKJKtOPUBm4NsZof1+6nB4r13V+cph7xjlxiTQ/5NurDBTAYfEkioMvvPQ18hefpYWRGbiTF7N1dYJ5EjA== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: oKn8T2FNUkbVClzITwT1dIlJKHo7axyGWX3K0KBqkVHalMpLRck8lHWMF1MshLL+rrWSUb7uFmDVKrApASMey+ACtYWPXI0+IGnTs7G+x9j5+DliMuuz0IGaHcykQgQjs95XK3FwkQAHqr9ybv/kn3oenW17Bj3o6k7XKDSVQfogV8vTDURQ/+fxela3UIls+HO077vz5bq+PbWqA8BbXjgPhECgxOqcjR9vcHlvJiMoTTWBGp83Un0bQFjvfBMjjTGtjKwjhl8Zgt9qbN7PlUz5V+iCFbnBDnz092uIHP7cXRX0LmXJlYS2yEXustigfr61oHqdTum7kaxZvr4w97f70eSJ2Hl4+2dNeKgmmH/79vPTZLQShtSc5SfIjZ0hw3NgxUR5HMLOYyMAsMlkX4xSA8pAEV7cdB848cUjYMt6b3Snpwxou69HjlpSFq9SlqupjYSVkqNaTpaR7nsVcIKQlpVLHnQlItkf0ZiurELW/ccHpE3vm+mtRQxWdKqdwO4t/PdN6jEmBhg6EpDuF2hR0HGmY4e81bJEWJ4RYZ8qzfr0A/veD/WMONRT7lsK/ENMz15i3jrOGBWOcnKSiU1Dvjz0JnyAAY/4cnkGcrkUNG2vywrzpWdSrliaeMg0MCy+xVNuQTiThQHLd24pW5urZbvA/u6RnnsmXEJvkmKD57PghSkvNhXjx3oWrRidY7ZfGgIxHMNlbdBLVxW8YB9JG0rbLGgStDEsAqCnhtrZI5PIyWZObS0TlPp/mNM1SqTr2+jctruIBhGfXxE56mXwY2bcZhP1LVl/JD4O8vhHiJbeDfJXp7nRb5ym1/O4tiVukgP8mQNExoyrITrpQY69sXtkauTU3o4WTuR1Aa8/lstHol6gsW56KsDBe7qpgMUFPqk0EZzOWjJjohSmb/f/4BcEdeJn6x2yMEWIa2lkSq8PDdk09QUWXTWwFT8Ut7IvbNfjq++StiePHFedaQ== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 39fc7b6d-71f9-4f40-8b3c-08d9df485ad0 X-MS-Exchange-CrossTenant-AuthSource: AM7PR03MB6660.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Jan 2022 14:46:50.5922 (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: AM0PR0302MB3187 Subject: [FFmpeg-devel] [PATCH v2 05/31] lavu/tests/fifo: switch to the new API 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: Anton Khirnov Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: XZCPV+7RWOvR From: Anton Khirnov --- libavutil/tests/fifo.c | 47 +++++++++++++++++++----------------------- 1 file changed, 21 insertions(+), 26 deletions(-) diff --git a/libavutil/tests/fifo.c b/libavutil/tests/fifo.c index a17d913233..579602ccf3 100644 --- a/libavutil/tests/fifo.c +++ b/libavutil/tests/fifo.c @@ -23,78 +23,73 @@ int main(void) { /* create a FIFO buffer */ - AVFifoBuffer *fifo = av_fifo_alloc(13 * sizeof(int)); + AVFifo *fifo = av_fifo_alloc2(13, sizeof(int), 0); int i, j, n, *p; /* fill data */ - for (i = 0; av_fifo_space(fifo) >= sizeof(int); i++) - av_fifo_generic_write(fifo, &i, sizeof(int), NULL); + for (i = 0; av_fifo_can_write(fifo); i++) + av_fifo_write(fifo, &i, 1); /* peek_at at FIFO */ - n = av_fifo_size(fifo) / sizeof(int); + n = av_fifo_can_read(fifo); for (i = 0; i < n; i++) { - av_fifo_generic_peek_at(fifo, &j, i * sizeof(int), sizeof(j), NULL); + av_fifo_peek(fifo, &j, 1, i); printf("%d: %d\n", i, j); } printf("\n"); /* generic peek at FIFO */ - n = av_fifo_size(fifo); - p = malloc(n); + n = av_fifo_can_read(fifo); + p = malloc(n * av_fifo_elem_size(fifo)); if (p == NULL) { fprintf(stderr, "failed to allocate memory.\n"); exit(1); } - (void) av_fifo_generic_peek(fifo, p, n, NULL); + (void) av_fifo_peek(fifo, p, n, 0); /* read data at p */ - n /= sizeof(int); for(i = 0; i < n; ++i) printf("%d: %d\n", i, p[i]); putchar('\n'); /* read data */ - for (i = 0; av_fifo_size(fifo) >= sizeof(int); i++) { - av_fifo_generic_read(fifo, &j, sizeof(int), NULL); + for (i = 0; av_fifo_can_read(fifo); i++) { + av_fifo_read(fifo, &j, 1); printf("%d ", j); } printf("\n"); - /* test *ndx overflow */ - av_fifo_reset(fifo); - fifo->rndx = fifo->wndx = ~(uint32_t)0 - 5; - /* fill data */ - for (i = 0; av_fifo_space(fifo) >= sizeof(int); i++) - av_fifo_generic_write(fifo, &i, sizeof(int), NULL); + for (i = 0; av_fifo_can_write(fifo); i++) + av_fifo_write(fifo, &i, 1); /* peek_at at FIFO */ - n = av_fifo_size(fifo) / sizeof(int); + n = av_fifo_can_read(fifo); for (i = 0; i < n; i++) { - av_fifo_generic_peek_at(fifo, &j, i * sizeof(int), sizeof(j), NULL); + av_fifo_peek(fifo, &j, 1, i); printf("%d: %d\n", i, j); } putchar('\n'); /* test fifo_grow */ - (void) av_fifo_grow(fifo, 15 * sizeof(int)); + (void) av_fifo_grow2(fifo, 15); /* fill data */ - n = av_fifo_size(fifo) / sizeof(int); - for (i = n; av_fifo_space(fifo) >= sizeof(int); ++i) - av_fifo_generic_write(fifo, &i, sizeof(int), NULL); + n = av_fifo_can_read(fifo); + for (i = n; av_fifo_can_write(fifo); ++i) + av_fifo_write(fifo, &i, 1); /* peek_at at FIFO */ - n = av_fifo_size(fifo) / sizeof(int); + n = av_fifo_can_read(fifo); for (i = 0; i < n; i++) { - av_fifo_generic_peek_at(fifo, &j, i * sizeof(int), sizeof(j), NULL); + av_fifo_peek(fifo, &j, 1, i); printf("%d: %d\n", i, j); } - av_fifo_free(fifo); + av_fifo_freep2(&fifo); free(p); return 0; From patchwork Mon Jan 24 14:45:51 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 33770 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:e71a:0:0:0:0:0 with SMTP id b26csp386352ioh; Mon, 24 Jan 2022 06:47:30 -0800 (PST) X-Google-Smtp-Source: ABdhPJwuvqK8T0WYrw5EBczQbxHxCmv5+o/Q6FtlRbYvDNNqIur/SYZCi4U1VNOZWKwc0EVqtQ99 X-Received: by 2002:a17:907:7601:: with SMTP id jx1mr12845269ejc.696.1643035650320; Mon, 24 Jan 2022 06:47:30 -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 j9si8797719edf.349.2022.01.24.06.47.29; Mon, 24 Jan 2022 06:47:30 -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=vDbp8nXR; 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 B5CA568B08A; Mon, 24 Jan 2022 16:46:56 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR03-AM5-obe.outbound.protection.outlook.com (mail-oln040092070075.outbound.protection.outlook.com [40.92.70.75]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 2F50368B056 for ; Mon, 24 Jan 2022 16:46:54 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=kEorFNIMCWdti55qmxUR0Sii+wNCjSR9PH/qrbDg1tXAT/AnKlG0SWY/IizKkzxKqxa82qO8zD1BD0eEFM4djGlezJy7IIIi9QNHE1X0US8iIcytGtvJTJoK2yJTeJvQDesX2gQX81Dy/6rJZt2q4SgptNqF3M2ZYLlYaQ4mtLLAmlh7k/RmSTyL3q3wHqJ9vJItkpbNC+pUhsr/SF3RyEkDfbBBZv2brizEJk9jtr1SCtfGGf8rzBJ4hOyxS7zKrSMXEjn5LVGxnGMHwLqqa59WNn6ntHpLaSiYKBIZTwYpyFtIhc+B3kFnD/S+METLhapWIB9s0E+iJP/cold16g== 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=BNjzTB91zizCdKRrQmjmgGx3g+qBHMKMWvgK427Mahw=; b=fyNcUQM3nmAAXw7vGS2ZSD6PVExYP9Q3iLRagnigFMPtUWvTI9ULhJrJuE6cy5AEhiBfhq3FpEtZ+fxkZHpFKzFn9/mYDaDD81KVZHzEVFyy37l0uPd128l3SXrebO06ch7Rd8/ZmzzoP6p275jfYDuh1wPvon/k6cRWbKEjrWHfKqEJRrw5jraZt+dxCSd8Y2LLBbPUnAeHt3gkZH+WX45XGex1WgGySwggGTX9BS2E0ZDeWdzK5o5MojMKMgef4PydIChaKt3jDP1dnqDCpVIdiTK5d0EB3Bx37aXojlnPYcF1D1Pua+h9cgxQpvzKQKeOUILLlTgsC9L0AHNU8g== 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=BNjzTB91zizCdKRrQmjmgGx3g+qBHMKMWvgK427Mahw=; b=vDbp8nXR/oZR5bEBk5kMfF5JI+WA2eryZZup2C489oGMMDJBE9CFlY2TO4ETCRkYYUAEJjXE4wTe28VNobRlRBsrQt8k0wVxEfAbVYjbDHwwWJ/WQasvYKEheG/lOvxFRpCw2edy+b1v/5zrmp97rD3gX8Wudi9Sj0y9Xaub1/wAX5Whf7f8mXdLdAbewTD/QCzBGfAHiai0LcxRPDLjwj0rurpF8ys9tJN6XBh9Ny+dnROLJuI3Xtd/xj8dbjdGkBemDd7HNU4qj7heyFGYU/T2e1mWpuMN+fFbMNG1cKX81ojUQcHUg7rmcjV7iLsaso4gXgjAlghYfUNayUixQg== Received: from AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) by AM6PR03MB5236.eurprd03.prod.outlook.com (2603:10a6:20b:c4::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4909.17; Mon, 24 Jan 2022 14:46:53 +0000 Received: from AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::ac56:2ff4:d304:ab22]) by AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::ac56:2ff4:d304:ab22%4]) with mapi id 15.20.4909.017; Mon, 24 Jan 2022 14:46:53 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Mon, 24 Jan 2022 15:45:51 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [auDj1v+lBaQSqkHIIHxP0gwYD0lLQX4p] X-ClientProxiedBy: AM5PR0201CA0016.eurprd02.prod.outlook.com (2603:10a6:203:3d::26) To AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) X-Microsoft-Original-Message-ID: <20220124144616.559446-6-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 2893b3a5-2d05-4199-502c-08d9df485cab X-MS-TrafficTypeDiagnostic: AM6PR03MB5236:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: QLed98lV6hCPIzdOpbYGfcjaEIPCcgRT5JdflUEjLP2Mu9gMoCEwawGMUH8sVhqosW/a8gSXC/YzEMdn64cp8PSWnXUzlFU3/G3cyv3mQSggpXUNQN7A2cbfRgo5DxxQkJJGrnb7ziCqAc5X56iok7Z7Fxdxv4jYCNQ2Kb/baYNMdic+t9WkPf1xqI8XOIBtTIykQbooVz8uaKEebxj78ez+LOCEiLMOHcKSZI6B8qFCIrXNWEiGwJ33sR3Kob7ywwG72j/KXAktYfUGDYuiWI7KyVwEermpbn7pmZoCRJHoD9gYTGJ9v9zuM9hwmZ6bcYS0FO9QttC3qlHqBjOEW/vPRoDJjlnGpQOm3vvGhuiJvAUCJpctFY/nV0KL1aEGl7Hcj3mHRfaya+Yd1QGYD3aLOUrFfj+Ee7O9TzNb3lBx5mSZHRCPjWmelNTVJYnpgTbvYISZj0oiPFKqR8vNkKQbXmWAuWzBBsgJ2E47NgnJK4zuCCgtaXuWPsM5lPNWYsL2BM6gNsoo2n9tIQ1pafy9kniuJOOh1wCKP6dz5jGcpWoalSAqb4DTs0tHLmQ9wjwmzeqqFRW4xSWKdUN8rg== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: +9YESvzVXM4npkcdKm5ny9tLEdYeR8TSwJ3nus3G9/QEFlP9kfBQypdTwE25YV1aOv6VxCfcphx4BYw+VK4MAaDltO6VeP2RXe4h4GC2zg00jK+2q1AZvuC/bJzXrL+dtut1JEaIenYmjeadG+ghWYqd+h04hAe1H++K+zR8tuqipnOGP9mdIV8BFARLCKfx5JLjJoSSDTxvlwiWaVGfQtwYC61TgeobFiJBWjqc0p3wISQkhcsR4sf6QsshevgNIlWjkIa6Tf7Q+VMAJNaZXFktVPi9HIu+o7VUhdCbi+SqSjubTQz7M/GVrhf1KXSz3alf+853M5m5rrPrCTIgsMCuWOLpQiVvJoEAGLqTWqNwuUhqDulNGatMrCLF7UnVERNi+o+UIK7inXQ974XuKBgXQssryOaKGfBq+rNTXK3BwsmbysiaD60NfFWAtVqT1kH56M8HSFY/t38n180rjO9I4C5FxRPVoI+l2rE+NBGv8VW9pYEkjfQ26J159vQPC4azMqExbBC6oNJzdYzyE7FWcp1KsRopPXTR0Xtravl+yEKpH8GF2dWbCq+9gBHibZbEyn3DGvnICii191jYrVHU/r437nbZFMznJDBplhVGGHbrh+9BYK++21FZQtlcXsYthBFISn7My/cR0VvSmYIui5uXBPnX6OR6J7x22Vnugk3wHDxrxuy25S6Ti277wo9IAKjHiBVIt9fcOteHkmeB/gIqL34uYTGdL0OEntZO/slRgJHj3yONf6XUiiymcYsjt6oQygQTRiehYzs6fQ1s3UDikiqVAbbJb9+Q6hVmkcfI1ow/RKbOdQWLyBTdn4U9sLZB7wgXt+b1spV6mNzkiJNNQSQJedExaicPlpCR5l8Hf5HtsFxJi8dj+oQjF1oEqujmnKyp2ALBn1ztiQf4GbpFPT2lkw+wzx/mQWOJ4XAscfdOu4E5PpJa1mh0zRbB7pV5zxsuZKBC2OfC+A== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 2893b3a5-2d05-4199-502c-08d9df485cab X-MS-Exchange-CrossTenant-AuthSource: AM7PR03MB6660.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Jan 2022 14:46:53.7037 (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: AM6PR03MB5236 Subject: [FFmpeg-devel] [PATCH v2 06/31] lavc/avcodec: switch to new FIFO API 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: Anton Khirnov Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: bPVwdBJVjYw6 From: Anton Khirnov --- libavcodec/avcodec.c | 17 ++++++----------- libavcodec/decode.c | 24 +++++++++--------------- libavcodec/internal.h | 2 +- 3 files changed, 16 insertions(+), 27 deletions(-) diff --git a/libavcodec/avcodec.c b/libavcodec/avcodec.c index c00a9b2af8..4df834c708 100644 --- a/libavcodec/avcodec.c +++ b/libavcodec/avcodec.c @@ -183,7 +183,8 @@ int attribute_align_arg avcodec_open2(AVCodecContext *avctx, const AVCodec *code avci->es.in_frame = av_frame_alloc(); avci->in_pkt = av_packet_alloc(); avci->last_pkt_props = av_packet_alloc(); - avci->pkt_props = av_fifo_alloc(sizeof(*avci->last_pkt_props)); + avci->pkt_props = av_fifo_alloc2(1, sizeof(*avci->last_pkt_props), + AV_FIFO_FLAG_AUTO_GROW); if (!avci->buffer_frame || !avci->buffer_pkt || !avci->es.in_frame || !avci->in_pkt || !avci->last_pkt_props || !avci->pkt_props) { @@ -399,13 +400,8 @@ void avcodec_flush_buffers(AVCodecContext *avctx) av_packet_unref(avci->buffer_pkt); av_packet_unref(avci->last_pkt_props); - while (av_fifo_size(avci->pkt_props) >= sizeof(*avci->last_pkt_props)) { - av_fifo_generic_read(avci->pkt_props, - avci->last_pkt_props, sizeof(*avci->last_pkt_props), - NULL); + while (av_fifo_read(avci->pkt_props, avci->last_pkt_props, 1) >= 0) av_packet_unref(avci->last_pkt_props); - } - av_fifo_reset(avci->pkt_props); av_frame_unref(avci->es.in_frame); av_packet_unref(avci->in_pkt); @@ -464,12 +460,11 @@ av_cold int avcodec_close(AVCodecContext *avctx) av_frame_free(&avci->buffer_frame); av_packet_free(&avci->buffer_pkt); if (avci->pkt_props) { - while (av_fifo_size(avci->pkt_props) >= sizeof(*avci->last_pkt_props)) { + while (av_fifo_can_read(avci->pkt_props)) { av_packet_unref(avci->last_pkt_props); - av_fifo_generic_read(avci->pkt_props, avci->last_pkt_props, - sizeof(*avci->last_pkt_props), NULL); + av_fifo_read(avci->pkt_props, avci->last_pkt_props, 1); } - av_fifo_freep(&avci->pkt_props); + av_fifo_freep2(&avci->pkt_props); } av_packet_free(&avci->last_pkt_props); diff --git a/libavcodec/decode.c b/libavcodec/decode.c index 0912f86a14..4023d2dd2e 100644 --- a/libavcodec/decode.c +++ b/libavcodec/decode.c @@ -165,26 +165,19 @@ static int extract_packet_props(AVCodecInternal *avci, const AVPacket *pkt) int ret = 0; if (IS_EMPTY(avci->last_pkt_props)) { - if (av_fifo_size(avci->pkt_props) >= sizeof(*pkt)) { - av_fifo_generic_read(avci->pkt_props, avci->last_pkt_props, - sizeof(*avci->last_pkt_props), NULL); - } else + if (av_fifo_read(avci->pkt_props, avci->last_pkt_props, 1) < 0) return copy_packet_props(avci->last_pkt_props, pkt); } - if (av_fifo_space(avci->pkt_props) < sizeof(*pkt)) { - ret = av_fifo_grow(avci->pkt_props, sizeof(*pkt)); - if (ret < 0) - return ret; - } - ret = copy_packet_props(&tmp, pkt); if (ret < 0) return ret; - av_fifo_generic_write(avci->pkt_props, &tmp, sizeof(tmp), NULL); + ret = av_fifo_write(avci->pkt_props, &tmp, 1); + if (ret < 0) + av_packet_unref(&tmp); - return 0; + return ret; } static int decode_bsfs_init(AVCodecContext *avctx) @@ -543,9 +536,10 @@ static int decode_receive_frame_internal(AVCodecContext *avctx, AVFrame *frame) avci->draining_done = 1; if (!(avctx->codec->caps_internal & FF_CODEC_CAP_SETS_FRAME_PROPS) && - IS_EMPTY(avci->last_pkt_props) && av_fifo_size(avci->pkt_props) >= sizeof(*avci->last_pkt_props)) - av_fifo_generic_read(avci->pkt_props, - avci->last_pkt_props, sizeof(*avci->last_pkt_props), NULL); + IS_EMPTY(avci->last_pkt_props)) { + // May fail if the FIFO is empty. + av_fifo_read(avci->pkt_props, avci->last_pkt_props, 1); + } if (!ret) { frame->best_effort_timestamp = guess_correct_pts(avctx, diff --git a/libavcodec/internal.h b/libavcodec/internal.h index 72ca1553f6..4e864535f1 100644 --- a/libavcodec/internal.h +++ b/libavcodec/internal.h @@ -149,7 +149,7 @@ typedef struct AVCodecInternal { * for decoding. */ AVPacket *last_pkt_props; - AVFifoBuffer *pkt_props; + AVFifo *pkt_props; /** * temporary buffer used for encoders to store their bitstream From patchwork Mon Jan 24 14:45:52 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 33763 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:e71a:0:0:0:0:0 with SMTP id b26csp386492ioh; Mon, 24 Jan 2022 06:47:40 -0800 (PST) X-Google-Smtp-Source: ABdhPJx4HC8PTAmYGzbYJlKNl0d0+qOwHg+2GqynJ6FPdUi0iYl+Y3JqAyxtP0eMZm2NmL7FMQs7 X-Received: by 2002:a17:906:4998:: with SMTP id p24mr12256448eju.131.1643035660331; Mon, 24 Jan 2022 06:47:40 -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 x17si8772644ejj.886.2022.01.24.06.47.39; Mon, 24 Jan 2022 06:47:40 -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=ak2mLHpf; 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 A913E68B0A2; Mon, 24 Jan 2022 16:47:00 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR05-DB8-obe.outbound.protection.outlook.com (mail-db8eur05olkn2019.outbound.protection.outlook.com [40.92.89.19]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 7A3EC68B05B for ; Mon, 24 Jan 2022 16:46:59 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=D8GRAnqMNU6MaHs7kpoh9LtL50Oi0UrJZywngebf7Wri+PWfoZQFWhDxLefH/+CjZ5WsU70cUER0fiTzRHdxvLeOQ0tYVuJWlWVDix0jS/nc5sUGnK+ZW65x0D98wVyqmzsiBfexgta64f2hLh4q/rnLikm8rq1yfuee3q4ANpA8mAwwbIZ71nCuZXvcAMuDl8YjLpO1Gt6pOqs+FjvmkhI20UCA7YPHW8Uwpw+3FdcBGyDetHEZQH8UNUR2cMO/CpHwEnfNYokL9kFDBvLTsttiLLPjvfvccPIJ9qBJqAn0m1Th/mZMXUdlBWZ8t12C/2IEaiizY4Xs0AUgI4LgoA== 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=v9uMRPMVMHqNtg5t5IymOqYtMihEGjmpic1O3sdmMUQ=; b=UJT1egJlaCfCXZjryuY3SwFgZJwB3vnvg9neBLGysS/wveswBHodhtvtDtPtsXGX/ekEoCFOW+GDFOOqMD8DuPaWJoPGSbjCujq5t7CFuE2+fD7ALYAE7+xPTCB0IEUeYDHfet2Qjve8Ybd8aOE9FBC4LfYBUmlngH5R1kK4d1s3ZjLqSzVWybvhLNzdlOLw4Lf6YxJDBmUswjEvvH4t37QlYOBvFHTJFCIRSFl22JVCspFk176hH8KdL5HQuzm1Iqwml8YimE7tOiFinke1PZbm4XopEZwxuCGzpSNDGd9M4QQpLuwD21CmASKRT3RTFYO8jxEgPmc9ns64Oa7/5g== 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=v9uMRPMVMHqNtg5t5IymOqYtMihEGjmpic1O3sdmMUQ=; b=ak2mLHpfoGYPGU+vuByTaQsPcGhvGRj9XYcn36b3pvLKtTQe7YPgvYy8rSQDmfgZCrESEVkY5UkBFFIbQZyvmB2/gofpXhwaFrfV56UvcMidxOg1+FNPT9vYIN9pEFLi3yB5JiflIvBHgWTYKm2s9+wXOeAWmg2pWuN65qYks+fcR2S2b90dWtw1U5Z3jdM+gKctCOMoY+eZg6f5bKPl6pV+1uDwmmwPtV56JP6YchI0PrBhNcZhS2O9AXhEc5fNDRu0AgC+NGOzHqfOdIJxpYX/zxIng0M9JPRN2+HLmto/VJ2Hy/nfZNKANv/YRDN7LkxiYBzbjd+AYnLhBJ8puw== Received: from AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) by VI1PR03MB3088.eurprd03.prod.outlook.com (2603:10a6:802:2f::25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4909.17; Mon, 24 Jan 2022 14:46:57 +0000 Received: from AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::ac56:2ff4:d304:ab22]) by AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::ac56:2ff4:d304:ab22%4]) with mapi id 15.20.4909.017; Mon, 24 Jan 2022 14:46:57 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Mon, 24 Jan 2022 15:45:52 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [POMDzCg3j0vdlnz7kJIB2OK2orIH71By] X-ClientProxiedBy: AM5PR0201CA0016.eurprd02.prod.outlook.com (2603:10a6:203:3d::26) To AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) X-Microsoft-Original-Message-ID: <20220124144616.559446-7-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 978e075e-2c95-4f16-7b94-08d9df485ec6 X-MS-TrafficTypeDiagnostic: VI1PR03MB3088:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: qe6meWCTIpQQgm6l/DL8esRwYRecwY9zNDVPr9amDg1A32PgNNLD7skG5h1DGuc6mnG05kpFBjlm8OQpD00ogkSpQmJq7jl0JMO5X7XtkAh97Yovz1LfFpqEgKs3dSih3raUZBbwb1IlTAeQGN/WK3rxU4bK7LbamA4u/d4W6t4qEYJmr386EXDe29t0mwqLBhDWVhEmhavSOvriQjhvYCRxCI+9paqitu8FYGsiDgXyVA93iHVKHSwCS4jHWcrqy//DYLQUkL+dtODVYGF2W88Hr6Sbzf+oZ3kH/BOzLUfFJRgUQqVEZMm09Ri8r12AGM79Z//peJ25gQrBsKlDb8i/dKQpevNs54/AzPchdP2OrDbxUtkneUtTi24Cp2NhSLVKx+cAQDA9o1JAlT8SnvR/ma+aoTGc7a5k7K/DOyuBdviSfXXIzkxcd3cJ3dtGyiQGEtkV7E647PKWZt2L0v9E46wEOFHiC0HKpyp8UHJ64JdrHklLhC7jWoGWBYoipuLaBSOpcWIkaKwPtx+bcM7S5LvHn7Ncg+z7d8RBU3NcL7VAcB2FgZfvNCXVKS8ILP71gaiV9hHB6nTuHCN4LA== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: YLZXubnDWiKlQJzMedbsjYz4fFnosf/pSSBnhSXRyGUz5yRFEHsuSNpdcb/HKwlnCmtLE/zUd36hsVdXUpER0ekAU8DT+tFfpeYJCy78ZIPBz8uasXOh9vcDZ/E+nrzcr7wKOlrVv1UpZnCNVntFLHUzse13eRqvoYSbVYIgA52X+jDLL8CFK5BYDM2I/u55f3lReUfFmI6ok3sKxB2elCTrtcaBotuHQQFerdWiBJ5FwRsxGmVYxJas21fXWXxJI7ogxABx31Kp4/S23W3LuDrP5CudIBn6pNlOfVCu/bLge1mIe9MijwcGhwAOjdy7TSgGG2w1iA5k1weYpo5dJ9PI85u0pNzu32Jcc3QgMjpyL8v8FqE1ClMyzq9VTCYKjAip/F8uTZUA2KK92dEYqIRL2j0qI9igI8XQYsgPLyrfgwAplaNFT3C9xrWioCdjgf57QMdAAq3bGz1vjupIckfZW4sp+pcZ4Egzt63LTEjqmSIysuTF4od2s2sCUJA9/sLbXzLHXShs1lA7wL/RBTN0pCZc64dPJDUx0AsJ1zKZJxQ0zjLLnsnqyNyCeMKT6Cm1pbf+ZuP1PfJxbzq16PTu+PHHselQg20HKltJ3NS+ZkOQ2UyMB1dHuedw3fXsgEArKapCIlMyK2TcMxjFiWwqxWCroS654yTZn6MzQUVeeDVpUG7DTAlLTq/Q2tDvEzyujTKf8iHV7FzRHH2HayxqecfutgbaLBf5k9qo7ttFo3BkilOb0oMjPN4nmSirGKcUxmSkl6M10rs4CweQIhE4ISn1SbU3XNgj201637cev0LBN18QHV10RRyFK5aNzMv7KCRAjwyTuC9xeUWmXKD66QBH59WA5MDn/RN9YfNQfMm/n1EHRLPyGsKjveLdd3V+7fSBSKJD0cVLlLwA6orHWQztj9rauEUW5PtEbSGUV1beiaH7UfGXJ451XAHWN4Srt/EObYABBwZNcqATJQ== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 978e075e-2c95-4f16-7b94-08d9df485ec6 X-MS-Exchange-CrossTenant-AuthSource: AM7PR03MB6660.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Jan 2022 14:46:57.2215 (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: VI1PR03MB3088 Subject: [FFmpeg-devel] [PATCH v2 07/31] lavc/amfenc: switch to new FIFO API 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: Anton Khirnov Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: iHHAY3gUgME/ From: Anton Khirnov --- libavcodec/amfenc.c | 43 ++++++++++++++----------------------------- libavcodec/amfenc.h | 2 +- 2 files changed, 15 insertions(+), 30 deletions(-) diff --git a/libavcodec/amfenc.c b/libavcodec/amfenc.c index fb23ed738c..0e5117c5a3 100644 --- a/libavcodec/amfenc.c +++ b/libavcodec/amfenc.c @@ -117,8 +117,9 @@ static int amf_load_library(AVCodecContext *avctx) if (!ctx->delayed_frame) { return AVERROR(ENOMEM); } - // hardcoded to current HW queue size - will realloc in timestamp_queue_enqueue() if too small - ctx->timestamp_list = av_fifo_alloc((avctx->max_b_frames + 16) * sizeof(int64_t)); + // hardcoded to current HW queue size - will auto-realloc if too small + ctx->timestamp_list = av_fifo_alloc2(avctx->max_b_frames + 16, sizeof(int64_t), + AV_FIFO_FLAG_AUTO_GROW); if (!ctx->timestamp_list) { return AVERROR(ENOMEM); } @@ -403,7 +404,7 @@ int av_cold ff_amf_encode_close(AVCodecContext *avctx) ctx->version = 0; ctx->delayed_drain = 0; av_frame_free(&ctx->delayed_frame); - av_fifo_freep(&ctx->timestamp_list); + av_fifo_freep2(&ctx->timestamp_list); return 0; } @@ -432,18 +433,6 @@ static int amf_copy_surface(AVCodecContext *avctx, const AVFrame *frame, return 0; } -static inline int timestamp_queue_enqueue(AVCodecContext *avctx, int64_t timestamp) -{ - AmfContext *ctx = avctx->priv_data; - if (av_fifo_space(ctx->timestamp_list) < sizeof(timestamp)) { - if (av_fifo_grow(ctx->timestamp_list, sizeof(timestamp)) < 0) { - return AVERROR(ENOMEM); - } - } - av_fifo_generic_write(ctx->timestamp_list, ×tamp, sizeof(timestamp), NULL); - return 0; -} - static int amf_copy_buffer(AVCodecContext *avctx, AVPacket *pkt, AMFBuffer *buffer) { AmfContext *ctx = avctx->priv_data; @@ -479,21 +468,17 @@ static int amf_copy_buffer(AVCodecContext *avctx, AVPacket *pkt, AMFBuffer *buff pkt->pts = var.int64Value; // original pts - AMF_RETURN_IF_FALSE(ctx, av_fifo_size(ctx->timestamp_list) > 0, AVERROR_UNKNOWN, "timestamp_list is empty\n"); - - av_fifo_generic_read(ctx->timestamp_list, ×tamp, sizeof(timestamp), NULL); + AMF_RETURN_IF_FALSE(ctx, av_fifo_read(ctx->timestamp_list, ×tamp, 1) >= 0, + AVERROR_UNKNOWN, "timestamp_list is empty\n"); // calc dts shift if max_b_frames > 0 if (avctx->max_b_frames > 0 && ctx->dts_delay == 0) { int64_t timestamp_last = AV_NOPTS_VALUE; - AMF_RETURN_IF_FALSE(ctx, av_fifo_size(ctx->timestamp_list) > 0, AVERROR_UNKNOWN, + size_t can_read = av_fifo_can_read(ctx->timestamp_list); + + AMF_RETURN_IF_FALSE(ctx, can_read > 0, AVERROR_UNKNOWN, "timestamp_list is empty while max_b_frames = %d\n", avctx->max_b_frames); - av_fifo_generic_peek_at( - ctx->timestamp_list, - ×tamp_last, - (av_fifo_size(ctx->timestamp_list) / sizeof(timestamp) - 1) * sizeof(timestamp_last), - sizeof(timestamp_last), - NULL); + av_fifo_peek(ctx->timestamp_list, ×tamp_last, 1, can_read - 1); if (timestamp < 0 || timestamp_last < AV_NOPTS_VALUE) { return AVERROR(ERANGE); } @@ -710,9 +695,9 @@ int ff_amf_receive_packet(AVCodecContext *avctx, AVPacket *avpkt) AMF_RETURN_IF_FALSE(ctx, res == AMF_OK, AVERROR_UNKNOWN, "SubmitInput() failed with error %d\n", res); av_frame_unref(frame); - if ((ret = timestamp_queue_enqueue(avctx, pts)) < 0) { + ret = av_fifo_write(ctx->timestamp_list, &pts, 1); + if (ret < 0) return ret; - } } } @@ -751,9 +736,9 @@ int ff_amf_receive_packet(AVCodecContext *avctx, AVPacket *avpkt) av_frame_unref(ctx->delayed_frame); AMF_RETURN_IF_FALSE(ctx, res == AMF_OK, AVERROR_UNKNOWN, "Repeated SubmitInput() failed with error %d\n", res); - if ((ret = timestamp_queue_enqueue(avctx, pts)) < 0) { + ret = av_fifo_write(ctx->timestamp_list, &pts, 1); + if (ret < 0) return ret; - } } else { av_log(avctx, AV_LOG_WARNING, "Data acquired but delayed frame submission got AMF_INPUT_FULL- should not happen\n"); } diff --git a/libavcodec/amfenc.h b/libavcodec/amfenc.h index 358b2ef778..1ab98d2f78 100644 --- a/libavcodec/amfenc.h +++ b/libavcodec/amfenc.h @@ -72,7 +72,7 @@ typedef struct AmfContext { AVFrame *delayed_frame; // shift dts back by max_b_frames in timing - AVFifoBuffer *timestamp_list; + AVFifo *timestamp_list; int64_t dts_delay; // common encoder option options From patchwork Mon Jan 24 14:45:53 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 33771 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:e71a:0:0:0:0:0 with SMTP id b26csp386631ioh; Mon, 24 Jan 2022 06:47:51 -0800 (PST) X-Google-Smtp-Source: ABdhPJwUsFpmkxyHfREYZfDTb2MZbbA9c4zQu1qRTcuv8XMUNfiftEbclN/F8nLCYJXgwGHnqGg4 X-Received: by 2002:aa7:c9ca:: with SMTP id i10mr16559759edt.66.1643035670966; Mon, 24 Jan 2022 06:47:50 -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 s16si8087443ejm.633.2022.01.24.06.47.50; Mon, 24 Jan 2022 06:47:50 -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=FHu3NOf7; 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 C37C0689D48; Mon, 24 Jan 2022 16:47:08 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR05-DB8-obe.outbound.protection.outlook.com (mail-db8eur05olkn2012.outbound.protection.outlook.com [40.92.89.12]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id E785C68B0A4 for ; Mon, 24 Jan 2022 16:47:01 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=JVlo8jrAWttoIr3R900VuPSKJHl8R+sFTvGxLzpeCJtJi+/Ol7c1Cagp0BQDPDE/7v0a5vPonXqX1TOcisCZ8vfUPjTjLlIVuyuoF3BNF1KkX2PLr/lo4vxNjkKpqbtRetXUyWw3V4dKhzvsAcUX/zgTFnnVjshWZCJxW0VKayw0U76UJa+ioRlsB1dpcvempmjXTb/X03HIU2TBwBi2wb73iubP9PgsEvZIRzJP7/JgpAAb9GswSbV0VG9lrhxdf4N7pPG4WtxidT1R7mSgnHTAzbTMbJG0JtysDbEhyehgtRhjJfrd7XuNegfzpeV3XRxPyHRSVARk3+YO61t8Pw== 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=ctHfHL5jF9qn3YgozoN4DEdfWxGQ27oYu19/Iu3B8lc=; b=DGVnkl0t4TYsXu5ts9lbHtfj/xDM5KzYSNIRSYCKqTOpDRwmy1uL4rzAEvsw8IpmNXgRyfViiL7bTb1a2fmDCf1y+/uxUNEBOpRSjOq9dfSkAnayErJ8pDjy5fEkCmL1scrwVKy0pJVN1Aoak/9xDLtzzCX7i6ZesIOk9idlBo9L86+q6usH9tFf5OAKRQm3MbWM1qCmE3QejmasvBaVF9tJMBDdK8Q6/miIDOFHV8i3LI2uva0XYP5QG9vRPkocp8BXH4d5Ru9QHv8gAJtJhlHEfzT4hzxzoOS2i6siBjhYWXeuzWjj7iMfFIKunkxuKmcLzridMaKsU5vLoA+xow== 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=ctHfHL5jF9qn3YgozoN4DEdfWxGQ27oYu19/Iu3B8lc=; b=FHu3NOf7ovh5MpMONbve/Ye1H0o0LBfU2sxxczElev7dr5T+1JsssjwvLp9JTiC6a/3pGWVvFI6PDIOjrFvaCuiav6O2/3HOSDtF9nO2eXPlajJ0cvy8nbynPSlona5TD6jJAhAlq+cVVz9kYX/fSovAHAdqKd5WmoLU2drc2EMrrIZrSdD7Hchog3ib3x4UhM1/iCsKCKuJwHbGE48iywXgCEfM5kscvUrTYX79/5y6rBN8NfmUREH3th/2awH4Z8sQw9/H5AsgfyVfbkxu9Xgoy4rD1cZhQ5E5fndshrVwOmSORDexABwaL2QdnpifYKvUCQn59pXUHVL2lsPt6g== Received: from AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) by VI1PR03MB3088.eurprd03.prod.outlook.com (2603:10a6:802:2f::25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4909.17; Mon, 24 Jan 2022 14:47:00 +0000 Received: from AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::ac56:2ff4:d304:ab22]) by AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::ac56:2ff4:d304:ab22%4]) with mapi id 15.20.4909.017; Mon, 24 Jan 2022 14:47:00 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Mon, 24 Jan 2022 15:45:53 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [Ewb3g/AgfSN2ZInc6ei1iUKLhdD21V3Z] X-ClientProxiedBy: AM5PR0201CA0016.eurprd02.prod.outlook.com (2603:10a6:203:3d::26) To AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) X-Microsoft-Original-Message-ID: <20220124144616.559446-8-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: a04dd8f9-8208-4275-ebb7-08d9df4860d7 X-MS-TrafficTypeDiagnostic: VI1PR03MB3088:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 81f4KtgIbtcLxnmrFrbh96TfNjDZdrf2HGRB9Jz7IclpOmUabRgzFxsAgEJdQKsIqfWYSUWwBQLXBJ5kh3d+xXolsTvUucQnnM+qyyl1BqtvbZzMTR0cPIa2uX9P/xJvECEWvy+W8helD4D1W4cPIngd+rxlgczZ2HVJpb62tbZaVaKhdY0jl1dklm+89AmJPkuLvb6SlVMgSWTqTZtMCOiWN9ZIvOcK3fF0gccHAOXMQuB02IForE6RvuKxEke8m62J2tZc3Gulvcw7eB2hJfsj3Md91+e+q3rPM6quUjf+i7cf6vTZc+qvROhY1pmDIuFkAsOecyhCuoK0uAGWpbXN2SW11T1ORVafLB7zAyN8tXDeehFj1Qv/uXWFgxdG/g4jXyy+bY91+4tO50PnY+rZM83t7XDx87jHXBoVPk9aTJ7rQU8EG9XmY+j2uFWeLbp6Cz+oxdn+Up+/gL+0lkrIgY7qjlQw3hs1/G/vNLABh5U85dsQzHl8hftdjOyphgvDEaKDlERHbFEyv9S0dC39M5cCPw7qkWIuCxgFrR2PR3FPmwYxPS6cVUsfy0HEDWVsFJDWJP2/xW9sTfSuSQ== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: jEVkzZGGJ4gWYid5Kc7qTsuz410MULKXXJmp8zcLJFxjRf7RdOG5r6ZtMJJRPjfv83Mwn5Ux77o0WYqDva98gyccjYLdkm/rQ712nX9VCV3H7rGZscJNJxYKyLCDyLSDj9XmFp9+y0XzagAAw06Cb3hfbbUQtRkR2cL+9N0EjphHu9t3Uq5TwOyrKxbafb2AzrHze8+rp7TrJk8aawMVQZzA0uuVo+WVOHoy+YoyVuv1/Xb+Hhz/lSLdqGRKNFoC89h1aqJgiexmmHI36cUaYkq35cdbyfI50XbBUuxGnk7DTGUXMRorIffDJ/khj9eMbD+PAj7a7vlzuJAcC+X3kkecqrVS1762r4RcJizbjHOiDPyfl1o6baI9zyAbHECS7UFNdGCitFyCuJyJqUJzPyt8Usa71WOTo/DvDKtFNo5e0eMZeremRHaNRH/Sj5jGJoJ/FAxMTPscDL02n0KqMPkhemzWAn2sNg2rkCTb6H8CKNmS8N5SpCg5S3Vnjs5LvJwC3JgdaZtDm6yJhx/QVeNctPgU0r3bw+oYOa/zjsHf+/26e4vlfJMfqMC+bUzShsKUm4UNo28diVqc1ypa2Y00A8f8oSQr3u4Z4aSYCU1ce0d+wnxuOCkTPSF9EFOIzxj8E5nnkpOsA7Qqg2PE8KwRMHJx3GANtt6rH/jSUlmCpd+XAwDPa2OJwQ+1gTAf1Vy9O0UDKse2QhRjrcLa4TKdiQdst6jEw0ds0WH5GVeqBqqfKqTMmGlSqlvf2LS88OHX5Rvlq/KJYTroB/zMTpmr97zrDvI6eMLEeaC81AlXfr6UtLHDCpZ55LhflClIs2dWnNkfqTUflPvIIEPf1ucgNuhZtD2PuL0cKPVAvuy2W3T0jxVAj3QcN9xrE4BueypjE8XgTnVLo/7/fiCSalV/HZcOvjxAC5SJKGxxOej/OjRxhxqPVzlw4gyIHo+UMpKM2glfq1bAE+GcW72CZA== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: a04dd8f9-8208-4275-ebb7-08d9df4860d7 X-MS-Exchange-CrossTenant-AuthSource: AM7PR03MB6660.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Jan 2022 14:47:00.7225 (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: VI1PR03MB3088 Subject: [FFmpeg-devel] [PATCH v2 08/31] lavc/cuviddec: do not reallocate the fifo unnecessarily 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: Anton Khirnov Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: FZA9BRkI6NfH From: Anton Khirnov --- libavcodec/cuviddec.c | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/libavcodec/cuviddec.c b/libavcodec/cuviddec.c index f03bbd8c4b..b1a3d674ab 100644 --- a/libavcodec/cuviddec.c +++ b/libavcodec/cuviddec.c @@ -1030,13 +1030,7 @@ static void cuvid_flush(AVCodecContext *avctx) if (ret < 0) goto error; - av_fifo_freep(&ctx->frame_queue); - - ctx->frame_queue = av_fifo_alloc(ctx->nb_surfaces * sizeof(CuvidParsedFrame)); - if (!ctx->frame_queue) { - av_log(avctx, AV_LOG_ERROR, "Failed to recreate frame queue on flush\n"); - return; - } + av_fifo_reset(ctx->frame_queue); if (ctx->cudecoder) { ctx->cvdl->cuvidDestroyDecoder(ctx->cudecoder); From patchwork Mon Jan 24 14:45:54 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 33772 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:e71a:0:0:0:0:0 with SMTP id b26csp386732ioh; Mon, 24 Jan 2022 06:48:01 -0800 (PST) X-Google-Smtp-Source: ABdhPJw9iEHgFd/EeSrd2VD6VmooS63w71z7V/rMbkiuPo3ZtkiKQuNCkp7DPxcjVuIxvwddJAQg X-Received: by 2002:a17:907:3e26:: with SMTP id hp38mr4707751ejc.715.1643035681068; Mon, 24 Jan 2022 06:48:01 -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 3si4145096ejr.609.2022.01.24.06.48.00; Mon, 24 Jan 2022 06:48:01 -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=igNRudaj; 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 E167168B0B8; Mon, 24 Jan 2022 16:47:09 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR05-DB8-obe.outbound.protection.outlook.com (mail-db8eur05olkn2012.outbound.protection.outlook.com [40.92.89.12]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 302AE68B0A4 for ; Mon, 24 Jan 2022 16:47:07 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=lG9cLWOOJl11Kp3c6em1eXtLhoJpE4PCqZHzfLvhWHLX+DmBUG5WGfYvWwjNR5KMdfAy2VyzEzthDRgaWY+4zVsv6Q2D6waRUcLuggU7OxLeBHcb0kO0gbfMeRPiBfkKhZVqZyKR3i6cLizQY/acDZ/iODQjtTxqohiqCeWdHmTMpnnQJZQ9zhxAuDhqrY51by8fBF4HENMdAn4OUAiUi0fySu2mHgPQDyGVC8tocm6Zz2w8ygYBE2EYi9/R99+fi7TKleTaxiLeAKKUouPGymCHLibuou0zQ9h2HK2ByiuZTN4RmRDwKPEe9jgykfDlTqYeIFSM13uZUWoWcahttg== 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=4pBnoYPHVB88eAW0B+koo5cIIK6HD553WRtDzI4Sg6s=; b=RfvXPHCdFoAhgmgrFV6H0ELYODU0D6PeQebHMptzrzZaOdOKbEOpXyJ+gVWA+AqGBm8atwEKWUBaku80SdMm4IdntuG+VAnPkR7HFLWzJHuuzbcsNG3kM4aVBS6TsSVhjJMabrNEG2mnH6eFDpLYPXBBPw/kOsBlpO8Wig4f7STZsd9v8S/EArXmMyqXOZNQN8Iwl9/v3wnNG919t7RJlZ7xKdnmtZds5XrMEWNPdHEizonwss42SCf91nq4xH6JZA924aCZ3CqTNYcb0JAeJVAYocDKAY0fLISQBKrqub7iYc2qBzxkjTvVINjThEjgJhwbd5jtpJiWMOZZQ40UKA== 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=4pBnoYPHVB88eAW0B+koo5cIIK6HD553WRtDzI4Sg6s=; b=igNRudajSJw1CaNtbmJJiEa4Q9O68SrGATTKXPPm6/qtIj7cEWWYM0/TIOWFLqfCHXCEacvRtociItmN3BJOp7iO938FXG/75ExURApJ0ASzsceBYX3Rlk11JrX6zsMTHAkY9NmboNieXVfXbAUW3XQdyIpn8CjxKklcskaSp/OqCO9TSNruuAjH53uPoCNGLdEREFoNW1OWNIIhPR7qVp98JbwQYDWVgrppPty41nTn3q2Mees1uzWVAq5CRWk1silyK439ljaBFm9Q235jZUhmvpxOwTsN4DhzyOcn7Q/UrmNT/aFBTDHbnw/mv8dH/jTIYWfNaoXEtkgBUHURvg== Received: from AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) by VI1PR03MB3088.eurprd03.prod.outlook.com (2603:10a6:802:2f::25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4909.17; Mon, 24 Jan 2022 14:47:02 +0000 Received: from AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::ac56:2ff4:d304:ab22]) by AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::ac56:2ff4:d304:ab22%4]) with mapi id 15.20.4909.017; Mon, 24 Jan 2022 14:47:02 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Mon, 24 Jan 2022 15:45:54 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [4lasaWpEAHyM15XXMPt/pfQkGSNK7Rav] X-ClientProxiedBy: AM5PR0201CA0016.eurprd02.prod.outlook.com (2603:10a6:203:3d::26) To AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) X-Microsoft-Original-Message-ID: <20220124144616.559446-9-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: f88c6fa7-6b4f-40f8-9e82-08d9df486210 X-MS-TrafficTypeDiagnostic: VI1PR03MB3088:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: Q9OyDB+A73Y+MQehxPr5QOQ9e900XwDT9TP6JZm/fEOyER6+fPgzcrH3t56+ARzx308bXFUVTxvLuYIqH6C3G4WxyHQc/feEcnvsQQuvA8JRd7SaRkvl5wILMCR1MUS2SjNR3ShsnPuxAbiW3Gk71Wv+C0gBgl+nlb0QLhzU3O4nLtEXdux95F33bV24xyF3dqTUjGkhlc/QSZgY5rqO2vXJyaymk36frKukdeFw6IU/Vg53TzZ1kArKsh2iEBDrmSlrYBUKxc7iWBcL6tRz7o1ZIQJfWTwz6X+KbdLFUQasifl5YxPqwjn2P1unQAux1tlrI5WayQFYHJe0NzdiUaRP8jaMrVg+Orqs/wAdkenJFy7qat4SDqrc0z9RbMK/sDPvlE4ICZb9IEu1SD1ieUNwjqtl/JIywmFRoxOAZySZEdKqL8vNNwqmmF1T65QXT6h36e0+XTZTiSgW+MZJI3HodrgnGM1ErsHrtU7yYodjCkE2mFk/PecUIGE0UP2q7t3dOkz4IFQwqWxV8xL8kPeqLgqzwSqpZylXBtMXh6f7yUhkmHTMtFIVfD0QY3kPRXTuRKviDz0JqWKQVOcDog== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 9Ljcm9VVgybuNq8ADT8UTFi3/81NLmc29wsEXl0pX/2zswISl0Jvf5kyBEfLAjPt0T3rRGKOWVxnvAXejR8voT1zjAOit9hk9mBOCQyPEtlSZqTlQ+98BGR9Z3nHPNtt8mw7xy1tH4CLHc1D8Qb9/y+ZSuGmTDO9cC9NP2d8xoN4w0B00r6NFwnK2bdoDp65L27g9AFdoJwZkHmOfw+WtlMj8No08CkY3XK3Zk6wjnxIilllbIGsJ44Apc7R+K8QF+c+soFFRywQPj4F39zrkdOg+9l6FZQ+i3uG3hN42nyGeYrM3EQ8Kp99y/EGJEhnGKp17KCdD+rzE7yEPt8whxh2FWYtdMptrChtALiL/LZsFNZ003YD13aCQZE1DeGqxuQx/9XsA30bRdUJUxn52f7tm++Y6neaowaG4ZF3m6PM7DOAxi766FqbRJhsoDDT0RCTpexYu/lu1LS4KuJAI7VLAg8OCHy7wTFAzdP5m6zC+Sey5/y7ckZPjTV8NZlJLkKNRXNzvlNHnELr0K7CHXr9CzNN+btlHvSpokUfuM311lXezjcLfkvTe4UE1tLt1cpsvsr4FrKuqnPjN5B2ctIXplUL0iWWC8QRMJQFQVCfSPecYcfI1uLX0tO+nZO69lBq1o55wfHdhsipKv0Jm1E1Bgg8trzIEhG8SjSGZaAa+VEJAKlDDIsbrCZXVIkC6e8ja6LifMrX+LS10zDrhNwrt9cKBhZpwCKdEPIrshYp4mla/DX8q/bEs3Z2yHGsNu2Xbn7eBdz0A/xMfu0MxOX6HYLp1uxN4GkDQfPM47bWuC4dYZrNLq6e3HdFw2PW2eAe00XDdHh7QF+S2v2MIx/F3lxbSk0jds5iA2//HGk1baobKeWkxjq30Hxcl0serv2sXk4JwobJsKzP6ta5qRHcqvWhyLgPzVphMGGf84aYW435m8g5cHWbLmZy1ySQq8Bi4pZSRzpSp3S+7RFZpg== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: f88c6fa7-6b4f-40f8-9e82-08d9df486210 X-MS-Exchange-CrossTenant-AuthSource: AM7PR03MB6660.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Jan 2022 14:47:02.8187 (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: VI1PR03MB3088 Subject: [FFmpeg-devel] [PATCH v2 09/31] lavc/cuviddec: convert to the new FIFO API 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: Anton Khirnov Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: T6k7pzvNJ8hq From: Anton Khirnov --- libavcodec/cuviddec.c | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/libavcodec/cuviddec.c b/libavcodec/cuviddec.c index b1a3d674ab..1b525cd804 100644 --- a/libavcodec/cuviddec.c +++ b/libavcodec/cuviddec.c @@ -78,7 +78,7 @@ typedef struct CuvidContext AVBufferRef *hwdevice; AVBufferRef *hwframe; - AVFifoBuffer *frame_queue; + AVFifo *frame_queue; int deint_mode; int deint_mode_current; @@ -363,13 +363,13 @@ static int CUDAAPI cuvid_handle_picture_display(void *opaque, CUVIDPARSERDISPINF parsed_frame.dispinfo.progressive_frame = ctx->progressive_sequence; if (ctx->deint_mode_current == cudaVideoDeinterlaceMode_Weave) { - av_fifo_generic_write(ctx->frame_queue, &parsed_frame, sizeof(CuvidParsedFrame), NULL); + av_fifo_write(ctx->frame_queue, &parsed_frame, 1); } else { parsed_frame.is_deinterlacing = 1; - av_fifo_generic_write(ctx->frame_queue, &parsed_frame, sizeof(CuvidParsedFrame), NULL); + av_fifo_write(ctx->frame_queue, &parsed_frame, 1); if (!ctx->drop_second_field) { parsed_frame.second_field = 1; - av_fifo_generic_write(ctx->frame_queue, &parsed_frame, sizeof(CuvidParsedFrame), NULL); + av_fifo_write(ctx->frame_queue, &parsed_frame, 1); } } @@ -384,7 +384,7 @@ static int cuvid_is_buffer_full(AVCodecContext *avctx) if (ctx->deint_mode != cudaVideoDeinterlaceMode_Weave && !ctx->drop_second_field) delay *= 2; - return (av_fifo_size(ctx->frame_queue) / sizeof(CuvidParsedFrame)) + delay >= ctx->nb_surfaces; + return av_fifo_can_read(ctx->frame_queue) + delay >= ctx->nb_surfaces; } static int cuvid_decode_packet(AVCodecContext *avctx, const AVPacket *avpkt) @@ -458,6 +458,7 @@ static int cuvid_output_frame(AVCodecContext *avctx, AVFrame *frame) AVHWDeviceContext *device_ctx = (AVHWDeviceContext*)ctx->hwdevice->data; AVCUDADeviceContext *device_hwctx = device_ctx->hwctx; CUcontext dummy, cuda_ctx = device_hwctx->cuda_ctx; + CuvidParsedFrame parsed_frame; CUdeviceptr mapped_frame = 0; int ret = 0, eret = 0; @@ -487,16 +488,13 @@ static int cuvid_output_frame(AVCodecContext *avctx, AVFrame *frame) if (ret < 0) return ret; - if (av_fifo_size(ctx->frame_queue)) { + if (av_fifo_read(ctx->frame_queue, &parsed_frame, 1) >= 0) { const AVPixFmtDescriptor *pixdesc; - CuvidParsedFrame parsed_frame; CUVIDPROCPARAMS params; unsigned int pitch = 0; int offset = 0; int i; - av_fifo_generic_read(ctx->frame_queue, &parsed_frame, sizeof(CuvidParsedFrame), NULL); - memset(¶ms, 0, sizeof(params)); params.progressive_frame = parsed_frame.dispinfo.progressive_frame; params.second_field = parsed_frame.second_field; @@ -657,7 +655,7 @@ static av_cold int cuvid_decode_end(AVCodecContext *avctx) AVCUDADeviceContext *device_hwctx = device_ctx->hwctx; CUcontext dummy, cuda_ctx = device_hwctx->cuda_ctx; - av_fifo_freep(&ctx->frame_queue); + av_fifo_freep2(&ctx->frame_queue); ctx->cudl->cuCtxPushCurrent(cuda_ctx); @@ -834,7 +832,7 @@ static av_cold int cuvid_decode_init(AVCodecContext *avctx) goto error; } - ctx->frame_queue = av_fifo_alloc(ctx->nb_surfaces * sizeof(CuvidParsedFrame)); + ctx->frame_queue = av_fifo_alloc2(ctx->nb_surfaces, sizeof(CuvidParsedFrame), 0); if (!ctx->frame_queue) { ret = AVERROR(ENOMEM); goto error; @@ -1030,7 +1028,7 @@ static void cuvid_flush(AVCodecContext *avctx) if (ret < 0) goto error; - av_fifo_reset(ctx->frame_queue); + av_fifo_reset2(ctx->frame_queue); if (ctx->cudecoder) { ctx->cvdl->cuvidDestroyDecoder(ctx->cudecoder); From patchwork Mon Jan 24 14:45:55 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 33773 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:e71a:0:0:0:0:0 with SMTP id b26csp386838ioh; Mon, 24 Jan 2022 06:48:12 -0800 (PST) X-Google-Smtp-Source: ABdhPJwudEeA14yodr+oAVI2pljO6KF60tpS7L9zeEojuQxgbtC/6n1jie80OpXNGW47pMs1D1aD X-Received: by 2002:a17:906:6a90:: with SMTP id p16mr12393344ejr.115.1643035692557; Mon, 24 Jan 2022 06:48:12 -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 e2si7866529ejm.387.2022.01.24.06.48.12; Mon, 24 Jan 2022 06:48:12 -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=Gmt+FGfY; 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 D4B7268B0C3; Mon, 24 Jan 2022 16:47:10 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR05-DB8-obe.outbound.protection.outlook.com (mail-db8eur05olkn2012.outbound.protection.outlook.com [40.92.89.12]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 5C0AE68B0AA for ; Mon, 24 Jan 2022 16:47:07 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=E2tsk7st2EdGc+Hos93mwUXzxxAU6U1o2hsuz7bZvMWZ90O01haMpd938jVfuIY3XLRMgyjpneiHkbY/G16CHOO3QEfP5WdqMQiqSIdAJMz2JJmnTWcxLgeZbUAM1JavtfDqWaBt4M+QvRVq0Bgih3s43tOJdPNdAxnDTc1P8XPSmI3J30DIR/aJh67tbSQEqDbDdQrmoM/jCw5HfBUMB5HiXQ28enC9HLXrtZ1qjkBsMASYOTy3FR5aqNwULkEec8/qw/3ZWAjyeQ9IyuNxMPXSD8uG+6WYBe/N5P9ZfXuEXBNhIbN1DgfOyDedMvczNf+5fOkeP7MuT/IRMdSW/g== 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=RoBYc0XydJ5KYIYG6ALUILMmFjxhyEqZR+pkURahIhE=; b=gvi8cD1PEsDzlC99FtQ0rZalfbfdgw2KG4gajolvuOEYVrGZbod0cCuVTV17DRPz5nj+uAL2Aj/oQ4HGNYZFGAU/ZWIBn38QfHfIKVlCcZQZwVbzUcQuISAByMYDfF5g+pp8Ek4hDOMnZSGIti737OjS5ezGy45AxwQkq/IW3/BZSmTDXoZmRfwXvWndLRQ00ZXxzBfRrRNn1p35RMmLgFSiCp+0OV/VTjLazmt/Eh9lQAT6CC5iB07M738A9GHaY/qiMA7a+j1C+gAtM8M2V3p/P5wGg/JTtm7ZeuAAjwQoVwCTcwBKIK8RUjxYLdqrvQYgBCv3rl1l4MZbKfr3dg== 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=RoBYc0XydJ5KYIYG6ALUILMmFjxhyEqZR+pkURahIhE=; b=Gmt+FGfY8f+waO0OuuvKYGs5jm5D6mpYk04mAmnsfBkxyFKlXlVTVLejBW9H/sFONAvdYyis9+Md8o0oepOK8S8rYIhSjqHQ4PNLd5zQ9qmTcod2snkdtIIMePGbxHc6rBYOFwNLZqyH1PZmRVF6I+P6dO5u3R7YedI+6OyLA0xHr47qxsWSDtljdopwNneQTOyqiIbK92Mvwo4eqhycqhEwcP71rlr/C7EYlK2SDubzkabj8EiiFJ/PHmSHGQpJ5nQqUVmj7hUcPSJGAvJq3ZyC3svLFMc0HVfObD7TmAxnlm+z8jUMd79Xgzxq0lARQ+QPnmIRQlK/Ud8b4wXVkQ== Received: from AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) by VI1PR03MB3088.eurprd03.prod.outlook.com (2603:10a6:802:2f::25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4909.17; Mon, 24 Jan 2022 14:47:04 +0000 Received: from AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::ac56:2ff4:d304:ab22]) by AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::ac56:2ff4:d304:ab22%4]) with mapi id 15.20.4909.017; Mon, 24 Jan 2022 14:47:04 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Mon, 24 Jan 2022 15:45:55 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [sS3TaQyxfazU90Tsyqlx1mw8zUX6PqTI] X-ClientProxiedBy: AM5PR0201CA0016.eurprd02.prod.outlook.com (2603:10a6:203:3d::26) To AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) X-Microsoft-Original-Message-ID: <20220124144616.559446-10-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 4796139b-c51b-4b51-ee78-08d9df486348 X-MS-TrafficTypeDiagnostic: VI1PR03MB3088:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 5czdxFUL/++yC/ivam/7jOJ9QHS6hKfCVHri+3wDdPC7pwPIR27DRBHWGRDKnECBNWIFWZYk2APhpKWLDouFIjr4Pbx7SluKs3ZRQMnr7U1CjVrFPcsUttoQQHD2enkTI3+WhyCnQBTbtZt3/aN43Tm8CZOX5+SqnplMWF4fA8AfF5qlIstGjYt9FEMmo48SDFqk+A+HQjtCSji59k4UMsUHk3p2+R69jRvVScFSovd1EWym/gJctpyKaZEygGsTfjBjX9tXQDKtZAZBc9TFThVOKlpYQvywoBxjlfrUv47Ob3CfFrCf8TZTZ9STd0E0fe/OkQ2b/QjoWWCIFxsyercsKFoUmh7CK/oaHJlbaacJggD+333KqbQz+xnMaHvoGYW4FLUuCjgx/JJ3Bh0m4KNoMuSfzsh6REhYc7e3gS7j40fp7EGzVS3jTflip3ssJ7aFH4l0coouZdAfmFchRUdUns/2aNYktwESc72UqoB3R0jqcgdBzgrqXHkpy79weYcg+7wsc6Cn0kxS0iJahcb67hAm8yitMxZjNuhbDcR08OSEtJb0XWfyhHQ1OPR8vfK8WtjPJewFEUTCfQU5fg== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: qMjERmsTTgAaViIjCwTngqcmTpSluJiFQGkw2dgG9k7Wn5et9QvHCtz8YiWIXbCX3vKVdbKjlYnFFsYJw6G8fINbRcXAsqQPVda90wpnCe2KZ5RzSswvCH7nzzb8SSaBXIBL/I0FLx13rI/IU87JqrOCSLxfS1bjNfRn9OrI8dmcgVh9B3Eb0NFoOakflJEnf1oiucMnS8yS8glSoXLFDm5kpo0xZ1C1xM0GhRhF63WaZJcKVFjN4bg98LZgY6qwOagnmhGRSmAbPoEBqIwzVIZxOO+mgFmlFwIkycZ3pSWmNUPmULoYMsKT3t5ZIoqQP1Ov8y2FtmKP3R2yTz4GhVLA6GsDiZYze1b/przyxK7FfLfFe8AznmR8AaTfoZx1gV3ANPqWx7tTAyS3QfyIgr4ErEwll+T45r4EIUVMnTzaCg0tXzYAieMPISYit5KZ3gERVl9uDX/JQpDM7bxLJ/5bJteWukm26XC4zQIlUCxNLzRgvwLnaPHTmSvTr54eJ8P9zDBUmP6ivJ3cPbxzO8BtAAFVLKa1syK4MUv0oWJI3SHnB2Fqs+15+aTN2cpa/0F/TWNXlof0mHOKIlrIEB4MWd593PkFYwOyUoTkANmR05ROfKFqwEoRt55eMiFDp8vOk5Liv88qoQr9L+37oFrNXT8Q6wFE4z/f5trk2VuTOeqhU7PySQOX1mh9dR2kLAzerzj+NSEcd1fKz3gGP/CHOzqYXGsjZIbik61q9+a6ul16JkXBgzBZ4me4JfGCgUzZLuHn2BwGfUUIO+uk6JD7YCsAIbZ1l8ibzyUwqthj8KQA+1EC+djQRB782KvftTdDaGpG3qjxQtAC8gY0Ke9X2wSUWR5Xo574YPZDyOnNQ4wOq6w+UqDfthNXNcTiwETFoFD9ar+/qWYB4Isu7YO9GjIe1rBKeghEW2WI6KuwkERXTWBs+nqzwTsn4eJx7iKFd0POLcPvEfuxZMA10Q== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 4796139b-c51b-4b51-ee78-08d9df486348 X-MS-Exchange-CrossTenant-AuthSource: AM7PR03MB6660.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Jan 2022 14:47:04.8342 (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: VI1PR03MB3088 Subject: [FFmpeg-devel] [PATCH v2 10/31] lavc/libvorbisenc: switch to new FIFO API 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: Anton Khirnov Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: MCjUVCF8OI5Q From: Anton Khirnov --- libavcodec/libvorbisenc.c | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/libavcodec/libvorbisenc.c b/libavcodec/libvorbisenc.c index fa0d5f4b42..b657f0157a 100644 --- a/libavcodec/libvorbisenc.c +++ b/libavcodec/libvorbisenc.c @@ -46,7 +46,7 @@ typedef struct LibvorbisEncContext { vorbis_info vi; /**< vorbis_info used during init */ vorbis_dsp_state vd; /**< DSP state used for analysis */ vorbis_block vb; /**< vorbis_block used for analysis */ - AVFifoBuffer *pkt_fifo; /**< output packet buffer */ + AVFifo *pkt_fifo; /**< output packet buffer */ int eof; /**< end-of-file flag */ int dsp_initialized; /**< vd has been initialized */ vorbis_comment vc; /**< VorbisComment info */ @@ -196,7 +196,7 @@ static av_cold int libvorbis_encode_close(AVCodecContext *avctx) vorbis_dsp_clear(&s->vd); vorbis_info_clear(&s->vi); - av_fifo_freep(&s->pkt_fifo); + av_fifo_freep2(&s->pkt_fifo); ff_af_queue_close(&s->afq); av_vorbis_parse_free(&s->vp); @@ -271,7 +271,7 @@ static av_cold int libvorbis_encode_init(AVCodecContext *avctx) avctx->frame_size = LIBVORBIS_FRAME_SIZE; ff_af_queue_init(avctx, &s->afq); - s->pkt_fifo = av_fifo_alloc(BUFFER_SIZE); + s->pkt_fifo = av_fifo_alloc2(BUFFER_SIZE, 1, 0); if (!s->pkt_fifo) { ret = AVERROR(ENOMEM); goto error; @@ -327,12 +327,12 @@ static int libvorbis_encode_frame(AVCodecContext *avctx, AVPacket *avpkt, /* add any available packets to the output packet buffer */ while ((ret = vorbis_bitrate_flushpacket(&s->vd, &op)) == 1) { - if (av_fifo_space(s->pkt_fifo) < sizeof(ogg_packet) + op.bytes) { + if (av_fifo_can_write(s->pkt_fifo) < sizeof(ogg_packet) + op.bytes) { av_log(avctx, AV_LOG_ERROR, "packet buffer is too small\n"); return AVERROR_BUG; } - av_fifo_generic_write(s->pkt_fifo, &op, sizeof(ogg_packet), NULL); - av_fifo_generic_write(s->pkt_fifo, op.packet, op.bytes, NULL); + av_fifo_write(s->pkt_fifo, &op, sizeof(ogg_packet)); + av_fifo_write(s->pkt_fifo, op.packet, op.bytes); } if (ret < 0) { av_log(avctx, AV_LOG_ERROR, "error getting available packets\n"); @@ -344,15 +344,13 @@ static int libvorbis_encode_frame(AVCodecContext *avctx, AVPacket *avpkt, return vorbis_error_to_averror(ret); } - /* check for available packets */ - if (av_fifo_size(s->pkt_fifo) < sizeof(ogg_packet)) + /* Read an available packet if possible */ + if (av_fifo_read(s->pkt_fifo, &op, sizeof(ogg_packet)) < 0) return 0; - av_fifo_generic_read(s->pkt_fifo, &op, sizeof(ogg_packet), NULL); - if ((ret = ff_get_encode_buffer(avctx, avpkt, op.bytes, 0)) < 0) return ret; - av_fifo_generic_read(s->pkt_fifo, avpkt->data, op.bytes, NULL); + av_fifo_read(s->pkt_fifo, avpkt->data, op.bytes); avpkt->pts = ff_samples_to_time_base(avctx, op.granulepos); From patchwork Mon Jan 24 14:45:56 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 33774 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:e71a:0:0:0:0:0 with SMTP id b26csp386975ioh; Mon, 24 Jan 2022 06:48:23 -0800 (PST) X-Google-Smtp-Source: ABdhPJzcv8rA7w9hOr2yu4OfP0kCLnucFIT/vqvMwKzeRiV2XE+dZD5lNqkQdTJmuLv0XKWav3u9 X-Received: by 2002:a05:6402:1d4d:: with SMTP id dz13mr16248819edb.80.1643035702760; Mon, 24 Jan 2022 06:48:22 -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 x1si2476549edd.507.2022.01.24.06.48.22; Mon, 24 Jan 2022 06:48:22 -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=lvV5REGM; 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 A0ABD68B0D0; Mon, 24 Jan 2022 16:47:11 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR05-DB8-obe.outbound.protection.outlook.com (mail-db8eur05olkn2070.outbound.protection.outlook.com [40.92.89.70]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 272D568B09D for ; Mon, 24 Jan 2022 16:47:09 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=nPI1cLy+BjnnkUQ1QqnqGieizlZQLvm1wEBfLZLmfDYhswY0hk6aPSb/QtFp1IjvVPZ9U94P6djHCXZC1CYdO8aLwA1Bf90P9Tc1tUQuL3OfVxS18lQJ3DKDY9A7mMSZ/5Mo747UCbF9Z4fx121xjmz0a+CII3+FY/Dw8TcK2AXPotzqITZ3ojU2DbedxI+WrmKOkV8G6IfrA13zftBFerc1akfVkbrjCEMAxtt9N29nbQsJcML0HJjl8E1ImriQwQWITWhZoXWNqljj4fXtpddcIlU+Bppo5Q+vayBYXYqjhPBgkOM6lpLgtB7aab56hGFd9lUXO9Fjay9a7FvIyg== 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=7T9Cya222mdFJpam5ZEdSrtRGPdpuSrzNQmCK65vPxw=; b=QJ2RKVCbQrF17rVACc5jZ84Oei/827Uymy0DtPYo9u8RizJo3SLhDZFmp652uBLd0AwVVMsr+/XyfwdrO4tju7R4eaSxupTHfOTeQuq/YkR/9GMRzTGYCrfcQqGmRsRqOOiXvR8lzxgIHWhvffgLqT5YwErB5rxtysIxwAPvX631NT9Quq5bF2PT0hqMPt3pefP7ipv7CT/i6C0ztl+GxDmb9zJL2wduw30KVrwVtZpBFMnR9YaAPn8Z0IBJoJK9VXzitTqz4vtBS911Z3fKBHBXHOIg60n8kST/I3qkzXlVyqL0xgNJUu2TVORvTOiuU1GdCUL5dUGLZAyBkLPngw== 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=7T9Cya222mdFJpam5ZEdSrtRGPdpuSrzNQmCK65vPxw=; b=lvV5REGMWaf0KbifjidBtbYJlQE4383C4go3pBBxEhPrYq4iVICVwWqBoTsVfL7rNbgFXwVV0P6QfttHNweLoUlx7Hrqog9V9ngapC6x8jH+IYSxxyVeTGC950dSq99WVhMZ+jofa5wHeog258kYXXok8+37q1mmqAdk3YTV6/m0gii/txruY7VwqjyFy3KU/IPpjuLrHe7m8QKpkfoGjMMBZ7bVJYqU9r/+MmdQjC646mNAUQPdUGbdT6/dJ26yg4L2ffx+6vzCh9Pc1J92ZdycOnCNDwPPqptTGIHpY+k7oIDBgn/39jkzJPcyzae9JroSrcAxDVDROVxEa8u7GA== Received: from AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) by VI1PR03MB3088.eurprd03.prod.outlook.com (2603:10a6:802:2f::25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4909.17; Mon, 24 Jan 2022 14:47:08 +0000 Received: from AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::ac56:2ff4:d304:ab22]) by AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::ac56:2ff4:d304:ab22%4]) with mapi id 15.20.4909.017; Mon, 24 Jan 2022 14:47:08 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Mon, 24 Jan 2022 15:45:56 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [h492sMu8g0A4f7AgvjxFPrPftt+xmZev] X-ClientProxiedBy: AM5PR0201CA0016.eurprd02.prod.outlook.com (2603:10a6:203:3d::26) To AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) X-Microsoft-Original-Message-ID: <20220124144616.559446-11-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 586d039f-57ba-476f-69c4-08d9df48655a X-MS-TrafficTypeDiagnostic: VI1PR03MB3088:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: qyxNDgCINFwvB2cEqgRHSLXNhkOLgVZJljBzwjA82EeWDTkWk4hyq2FwjkPN6Q845qRBYKN+L429RiPEsMp+v3WNwjhrzKGu6ZlV+8fBcYxgA3F5UWoa5trFZ2eej+KSPhV4/9D9rp5OiPmcf+b17VA6Z0lC+uvl3Mn60AOWcWY0aAWuR4QuiD6i+6qFIX+6Z3gpxdRjr6CUIMQ/Ihn7D3WIGf+C/WF6ZeN8I+eXh7q/hGXnYkUzjs5YZTlgaOfHGI/5F9TaivIPTeft4r146tJiFwhabyuw+ybw/rv9S2Sffk9vnRO9TDY5SJWiAQ86oDvfZefPSoB98P7dHnsAOlWA27IAgcamrct+b99Wp2t595POxj60gPWc5TFlDvrDLTm+9Pys1u05gHOcE6qYMY6ZY/0WRMee5CWJnqUPuE/BOBqq7Z4ohXESNVHr3ft1AwE1lB+x1/RYfNKRATewAQ7RNa8bNqpqYNg/8diV4nUfY89jaloXOfNnlKFlaYdpAmSSboQ+eRhc7E+wkpQNrK/trrpVjPO1vX5pomopguKzUIGi0yTqESSmtvbPem5A8c1fMaS45DkExUFHLyMOgA== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: FtBsE/ExgKBUuLiZT4Lv+j3sSazHryO3l9++Exaid57tw545TmV/w3bEJusZ22Pf5OXnKQOsf1FGwau5ZVAz+jq+TKIZa4Zp8HLGz8VQ61VOA86nKAf4Dhwgsv+IUdjhtu3JspEMgEjRx/9kLqu9bj2Sn1zyGxQcnQiTVH3EaeiDNLHUGzjXKo0HxhXx6pDorjAtgflKzYZYhIbk6IK+wyrOCSXXuhWiTfZzY0zjHbgGlwHZf+ccm+8PfF9JYnV/DzDeTVq/dAfamVQ2HmyzQBbHBxSmQeA2MfNAcf4E8Y07xsvys7zDIn3PJHiJobJn6k1DT/goXA8GbwRZMLea5s+8MbFB3i58ypeowkH4+2zzIU9pSTI2ghkx/xICm8dElHv+WbO0rNdUWzFld/vGtKXibUICq7nvv6e9XpWkUDO+JGSIU8mxWjrSGG8l2gJedlyLOQYrOj1KA862n3pEW4To0qBtNSWkRk7ywf1GCAg1WYPCsec7nw0BhC7Aw/1jCvNuLLQgRPwKeF44H9EQAgH4HgaNIQCRV/Kjb3MUrWpE17dxLywRBGQWfZZTQ4FRIBkdPkTdXBNcz76VWGKy0Wti831Ar84HAPYdpb2HJm0QGLBhkGpCrvk3KFtvBtecIuIpcO5mC8nEE+1ufxPbtj4DSP7kKWFyq3lQ4N49Ms8cVffQ/UN1OvcJl4tQ4dXJqTBnllPWojLEuN74GxZ9y6y0lfAVisFNjmLJPxbb6nQujXnqHgkJqoAdHrAiKX+zXn/+WaxIYP/5QbcvMuywuXvSoMSMCFwNv/mGXnsYNj23jgwg+8fL19rGzNJ9KkTVW1If1ha2HucVSTLpnZnDkvMWc5mApUmqCpTyTDn1/gOqCMlfH7okIAuBVGo3ezQFK9T5DOhuegsBJ9meb//s7rYIqgpVjRWA/hFx5Ko+2RuT+h05YZGO7d4InYEc5pUeR1rqmsvLntzTmVu/XuVLMQ== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 586d039f-57ba-476f-69c4-08d9df48655a X-MS-Exchange-CrossTenant-AuthSource: AM7PR03MB6660.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Jan 2022 14:47:08.2418 (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: VI1PR03MB3088 Subject: [FFmpeg-devel] [PATCH v2 11/31] lavc/libvpxenc: switch to the new FIFO API 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: Anton Khirnov Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: DD9jsIgs4pyc From: Anton Khirnov --- libavcodec/libvpxenc.c | 35 ++++++++++------------------------- 1 file changed, 10 insertions(+), 25 deletions(-) diff --git a/libavcodec/libvpxenc.c b/libavcodec/libvpxenc.c index 10e5a22fa9..ab5d31e4c4 100644 --- a/libavcodec/libvpxenc.c +++ b/libavcodec/libvpxenc.c @@ -128,7 +128,7 @@ typedef struct VPxEncoderContext { int corpus_complexity; int tpl_model; int discard_hdr10_plus; - AVFifoBuffer *hdr10_plus_fifo; + AVFifo *hdr10_plus_fifo; /** * If the driver does not support ROI then warn the first time we * encounter a frame with ROI side data. @@ -324,39 +324,23 @@ static av_cold void free_frame_list(struct FrameListData *list) } } -static av_cold int add_hdr10_plus(AVFifoBuffer *fifo, struct FrameHDR10Plus *data) -{ - int err = av_fifo_grow(fifo, sizeof(*data)); - if (err < 0) - return err; - av_fifo_generic_write(fifo, data, sizeof(*data), NULL); - return 0; -} - -static av_cold void free_hdr10_plus_fifo(AVFifoBuffer **fifo) +static av_cold void free_hdr10_plus_fifo(AVFifo **fifo) { FrameHDR10Plus frame_hdr10_plus; - while (av_fifo_size(*fifo) >= sizeof(frame_hdr10_plus)) { - av_fifo_generic_read(*fifo, &frame_hdr10_plus, sizeof(frame_hdr10_plus), NULL); + while (av_fifo_read(*fifo, &frame_hdr10_plus, 1) >= 0) av_buffer_unref(&frame_hdr10_plus.hdr10_plus); - } - av_fifo_freep(fifo); + av_fifo_freep2(fifo); } -static int copy_hdr10_plus_to_pkt(AVFifoBuffer *fifo, AVPacket *pkt) +static int copy_hdr10_plus_to_pkt(AVFifo *fifo, AVPacket *pkt) { FrameHDR10Plus frame_hdr10_plus; uint8_t *data; - if (!pkt) - return 0; - if (av_fifo_size(fifo) < sizeof(frame_hdr10_plus)) + if (!pkt || av_fifo_peek(fifo, &frame_hdr10_plus, 1, 0) < 0) return 0; - av_fifo_generic_peek(fifo, &frame_hdr10_plus, sizeof(frame_hdr10_plus), NULL); if (!frame_hdr10_plus.hdr10_plus || frame_hdr10_plus.pts != pkt->pts) return 0; - av_fifo_generic_read(fifo, &frame_hdr10_plus, sizeof(frame_hdr10_plus), NULL); - if (!frame_hdr10_plus.hdr10_plus) - return 0; + av_fifo_drain2(fifo, 1); data = av_packet_new_side_data(pkt, AV_PKT_DATA_DYNAMIC_HDR10_PLUS, frame_hdr10_plus.hdr10_plus->size); if (!data) { @@ -933,7 +917,8 @@ static av_cold int vpx_init(AVCodecContext *avctx, // it has PQ trc (SMPTE2084). if (enccfg.g_bit_depth > 8 && avctx->color_trc == AVCOL_TRC_SMPTE2084) { ctx->discard_hdr10_plus = 0; - ctx->hdr10_plus_fifo = av_fifo_alloc(sizeof(FrameHDR10Plus)); + ctx->hdr10_plus_fifo = av_fifo_alloc2(1, sizeof(FrameHDR10Plus), + AV_FIFO_FLAG_AUTO_GROW); if (!ctx->hdr10_plus_fifo) return AVERROR(ENOMEM); } @@ -1727,7 +1712,7 @@ static int vpx_encode(AVCodecContext *avctx, AVPacket *pkt, data.hdr10_plus = av_buffer_ref(hdr10_plus_metadata->buf); if (!data.hdr10_plus) return AVERROR(ENOMEM); - err = add_hdr10_plus(ctx->hdr10_plus_fifo, &data); + err = av_fifo_write(ctx->hdr10_plus_fifo, &data, 1); if (err < 0) { av_buffer_unref(&data.hdr10_plus); return err; From patchwork Mon Jan 24 14:45:57 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 33762 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:e71a:0:0:0:0:0 with SMTP id b26csp387093ioh; Mon, 24 Jan 2022 06:48:33 -0800 (PST) X-Google-Smtp-Source: ABdhPJxL8nxvU4CxuOHOdBJFpG/mzcjiAYCpgvkHygQjPiGsHgdrFsv17LcfARuqX1uM9I7H0ldY X-Received: by 2002:aa7:d4cd:: with SMTP id t13mr16256222edr.248.1643035713494; Mon, 24 Jan 2022 06:48:33 -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 sh10si9412742ejc.725.2022.01.24.06.48.32; Mon, 24 Jan 2022 06:48:33 -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=DRgXy78d; 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 6A71068B0D5; Mon, 24 Jan 2022 16:47:13 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR05-DB8-obe.outbound.protection.outlook.com (mail-db8eur05olkn2061.outbound.protection.outlook.com [40.92.89.61]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 078FD68B0D5 for ; Mon, 24 Jan 2022 16:47:11 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=WVoiYfFzZLu8fTdx6iZX1Oa/GQ++QKPtWVxqwG/GE+rvmRj0Kcp5bJFAxSxkiOYPFc2UMJf19yNJanJZzGtJ0QX+TWXthfviebE1jADgiHXMwx3bHdw/SOuSiletGzL+VQluQ1yrf8izNdxkmXcyR49lHyq0VYqwXh9hnqq3JUe46B8KFKiqJi80BCQ79+l/Paeoy0bxHZS+d/kAzVB+6dmiAR8ONY3GnGO0tA03kJ4bEgPeDlAoxi4fxrKgi7GcWu+eJu5Hj+MS9WuDJiRQqzE4sz7wwa2ynLPTrPxyLrdwinVxcyXpn+5celKfn4kIwYb6hce61NnHWLXexCmQkw== 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=aj5BQSXTuh6/qssOM/Y/ExBRhRF5YayX6mn9Meo2PF8=; b=SAyNm980xE2NxceQavtpIjmmzqC6/CfYZE1H0rbTkhCNXtFV7C9Fr6TcKxfYPJLD/qdANHcGuxRBFbBFjR8Yyv2O0fs6Epy+xPiNVXhGt07EVY5OmC6Qm4nYITLS/E588coQ/j/3OEhHFvAklQT+vn4kVU133p+P6QJMxTdeFDN9BcuNj1JGz0YZsYFW/d4hBzdEIPR8+3thcRRL5mSK2yGDvC0++fdUr5lOJhGXG5ztJWHCWLnx+mWc0xDW3MqMBJ/DYSGNCFjvxC1EMnA0tDk7aQHtbsSloL52TZK82OFVZQmTIVe5ozF7aq389VGXp6PnGHvFacO8kEaacQcRcw== 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=aj5BQSXTuh6/qssOM/Y/ExBRhRF5YayX6mn9Meo2PF8=; b=DRgXy78dWaqUj4LyP2AU8YajHOVVvtI3RzQvn/0y7FUjbEY76XActhU3QBqGNCVv260iZLgDBUpyeXFik7gv480d67s5sln6t5mwTEYMiiZafkv1V6PTUS9sI8XqjiO/G50WOw+UM6jq2v7XRQY7V3iX9/JqEXeIZ0SWDYXk5ZeI25HBiL9XZKRD+I6dgUEsqAwAJns8HNtbsF0gQ07bfJfb1Qnye6B03ph14AzgZFBhwQ0bx5vgAd8mYuJicLllbD6D/9yA6czRr9x+Mg0oHTycoOAfSAKCkYXSbP3zQZrGnWLnhf0hUAcsz+RAEzs5gff5TmoVRUBiJyxqTXZkOA== Received: from AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) by VI1PR03MB3088.eurprd03.prod.outlook.com (2603:10a6:802:2f::25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4909.17; Mon, 24 Jan 2022 14:47:10 +0000 Received: from AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::ac56:2ff4:d304:ab22]) by AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::ac56:2ff4:d304:ab22%4]) with mapi id 15.20.4909.017; Mon, 24 Jan 2022 14:47:10 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Mon, 24 Jan 2022 15:45:57 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [tue6K+rUhXAXXlUF4V63+uUk6HThNnzn] X-ClientProxiedBy: AM5PR0201CA0016.eurprd02.prod.outlook.com (2603:10a6:203:3d::26) To AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) X-Microsoft-Original-Message-ID: <20220124144616.559446-12-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 1dab4303-9295-4c71-f0c9-08d9df4866ac X-MS-TrafficTypeDiagnostic: VI1PR03MB3088:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: gRCg0I/xUz1uG14yIXLWJYDqVfEizWUsWYEd/bI1+Kz9Emi/0vowRvdM/hzkegmOreX+KqHWpC7nkCv1Ar1/6LtaJA9Y6kymKpSlnfJ0mRZ+z7ElpKSNzGlYIKwcBarNG3vE2jgETtTBQzEPnkEH4vgOZ25HpoiZsUbaWI6bDkwkW1g0ml0wkC2tHvv+gGEWa1onCOT5IYVCgpSgH6x83jcMb8TspdfkeqjxakY0wWi6Bu5Tfkk0/ZQVhmuC2D9Bqfmx0F1WjLSpZZSpZg1C3KWyfvNqozcQQg1xXxqVxXr+lLuRS1+mAPKzAhTuD1TRM4NrbGk19XoN2REIPW5bWrvIVgkQTnA/Sg4PXkD5VL7idqK8w0617QPY9nKfK2dOsAFqUUGO2AvmBnpZCnfA5PktArIYdUsVy5xrwjwcSIIEHsbsi1N4KNg+m/Lfhmg+GJoJ2f9K9ZZrWgKPC9+0bm+sAnRt/+6goTH1gwmRGBJZyuBqa7dQXbTPZpubp+OaMpm+8gCIrKgsxVy4KcOlv/0AviWh7FnCSS7qZ9ybqLdRbduD+iIYd8pFIg0YrMpDGs7Mrw9pUuZh9bW957WewA== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: BIvA7PLLKPOTS9oSZKg1Eo7GEJfInTSiUyHrYKs9z5VJc3DuytCX5YGgQ9AfjpEW2XS/VehwdX90+wWLkhNiPvVi7z1jj5yIKyldYkknVsDf3vWcovkZU6jdJ5p/EoV1ZeUFjcoMnpdGDhIsIRd51PYZcGP7wwQonLGVfRLm93nwrSdhkWesBhF8gr6nUSHRhsEUH5keVRd6sebouNlTkh5QbudNhOHteFeTA1NbXXGO8Ow+omAfWMdK5FyiWpJ7/GcTs2MG10HpTToT8hryzjUUFe+1mVvhr1o/UWur7XJ1DsaWcfMNZSJlzSwnKlDjO9E8TO609MDixi8qULOKMZizUmxHrnzB0e9iTrkRg3iOmQ4Hm0UJGHeVjTWyRYCyg5Xjk80AwZrorfjDvrXeIS34TfCaj06gThaEp81MMGtfKxtjzZFnpJUne02TwPljnTxbFYlGvtUrESv7zHlYWjiwL56NnH1snbOc1BFnKhXd3/tpitSesJGKBKKyb/KATeCQqnxzUUiX2p3F7iKwM2EUdJ4St35WZE3BcUzkd330JXEs1ZSs6g5UoFMnkOvZtlh27MvROR06+UPaCh9PMCka0k8cP3jla5u+md/gxYxruGRu1YBF6TsvFBd4nhj8LtGL9WJ0kRFNUCSLkM9RGXa5oO5EqfARroym0OUBdYSeyK+C9cF7h9toIqqozFwQbKqUfJgiI8ADowZGM1iUiHQu508jq9UIR4mEVvklf3favfg8VmvZPUBz7/F4lNxPL0wx7W17GHSqCVL0j4kw6aJy6nmf5TjjphQbImDPLoTn1zYLPY3RAvyd5OXAATdW8gXLSBFyxRDr7OGmhxoB7kO9urXGs6qhQtWgKk+uNIS+CdsaICWjMHDUBONeNgJE29ieA+YEHv7XDEyDheLKu2qYjQ6jMwib+S05JlrWIxScDW4Qz0Uk0vuxeU70nKdGFJEzjmHd4LZuTjZFqGKSjw== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1dab4303-9295-4c71-f0c9-08d9df4866ac X-MS-Exchange-CrossTenant-AuthSource: AM7PR03MB6660.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Jan 2022 14:47:10.5085 (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: VI1PR03MB3088 Subject: [FFmpeg-devel] [PATCH v2 12/31] lavc/libvpxenc: remove unneeded context variable 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: Anton Khirnov Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: eCPNFI+MzNS0 From: Anton Khirnov discard_hdr10_plus is 0 IFF hdr10_plus_fifo is non-NULL, so we can test for the latter and avoid an extra variable. --- libavcodec/libvpxenc.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/libavcodec/libvpxenc.c b/libavcodec/libvpxenc.c index ab5d31e4c4..8f94ba15dc 100644 --- a/libavcodec/libvpxenc.c +++ b/libavcodec/libvpxenc.c @@ -127,7 +127,6 @@ typedef struct VPxEncoderContext { int tune_content; int corpus_complexity; int tpl_model; - int discard_hdr10_plus; AVFifo *hdr10_plus_fifo; /** * If the driver does not support ROI then warn the first time we @@ -896,7 +895,6 @@ static av_cold int vpx_init(AVCodecContext *avctx, #endif AVDictionaryEntry* en = NULL; - ctx->discard_hdr10_plus = 1; av_log(avctx, AV_LOG_INFO, "%s\n", vpx_codec_version_str()); av_log(avctx, AV_LOG_VERBOSE, "%s\n", vpx_codec_build_config()); @@ -916,7 +914,6 @@ static av_cold int vpx_init(AVCodecContext *avctx, // Keep HDR10+ if it has bit depth higher than 8 and // it has PQ trc (SMPTE2084). if (enccfg.g_bit_depth > 8 && avctx->color_trc == AVCOL_TRC_SMPTE2084) { - ctx->discard_hdr10_plus = 0; ctx->hdr10_plus_fifo = av_fifo_alloc2(1, sizeof(FrameHDR10Plus), AV_FIFO_FLAG_AUTO_GROW); if (!ctx->hdr10_plus_fifo) @@ -1286,7 +1283,7 @@ static int storeframe(AVCodecContext *avctx, struct FrameListData *cx_frame, } if (cx_frame->frame_number != -1) { VPxContext *ctx = avctx->priv_data; - if (!ctx->discard_hdr10_plus) { + if (ctx->hdr10_plus_fifo) { int err = copy_hdr10_plus_to_pkt(ctx->hdr10_plus_fifo, pkt); if (err < 0) return err; @@ -1701,7 +1698,7 @@ static int vpx_encode(AVCodecContext *avctx, AVPacket *pkt, } } - if (!ctx->discard_hdr10_plus) { + if (ctx->hdr10_plus_fifo) { AVFrameSideData *hdr10_plus_metadata; // Add HDR10+ metadata to queue. hdr10_plus_metadata = av_frame_get_side_data(frame, AV_FRAME_DATA_DYNAMIC_HDR_PLUS); From patchwork Mon Jan 24 14:45:58 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 33775 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:e71a:0:0:0:0:0 with SMTP id b26csp387213ioh; Mon, 24 Jan 2022 06:48:43 -0800 (PST) X-Google-Smtp-Source: ABdhPJyCf68f15BcxRqI4Le1TAYXcBbqjr8uB7XISey8fYCaGV9iWl/BJJWTW4stVIe9ypkjf5SX X-Received: by 2002:a17:906:4983:: with SMTP id p3mr12567032eju.589.1643035723545; Mon, 24 Jan 2022 06:48:43 -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 nb42si10109078ejc.13.2022.01.24.06.48.43; Mon, 24 Jan 2022 06:48:43 -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=bLwkF6Di; 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 5EEDF68B0E0; Mon, 24 Jan 2022 16:47:16 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR05-DB8-obe.outbound.protection.outlook.com (mail-db8eur05olkn2017.outbound.protection.outlook.com [40.92.89.17]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 0C5B868B0A4 for ; Mon, 24 Jan 2022 16:47:13 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=SlqrahoZm7PM6ac34csNjIoItAbg7eQUnk1RcdebefW0cMUQ3YE4Jqwp4e3RmgIe4j6LvnBDnBIXjqZKcCPMazwYK/ep3szTtJMosBQWQ1V8kMRR9rdvle4dO/IMOs/k0OLlcagT2hT1fFcLUo/JmDd1ASR+C6DbeYILpTe8CD30fwWaM/zpZ5xNCRHUdfEph/Ndiymau+OAscyicdZS2/aXrl0UAkUKoqGnx/a4o/36n3cD7/o/1QiGowoI9rgldqsOAqgIWOK6kQBbPvjYlejgUtMc30AVpwALCzIcG80IFU0qSwsCb8kuadjAzFP6uc0Zbym5petLXkFejW3IKA== 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=f2H/cuvgyjDfjCW36L1M5pBrWvTWjulprZgoo2voRvc=; b=mN/GdTwiFTGTuq6fbxCpA/vmnLI9d8Fwu2etzYdzzhWO169KAn3gp81LFlBdnSjd096Va3Ml/Swv8ykyVeFMIJxrnbQEFrPX/wL/gwS5XrYz5WaTZD+yYB87V0ceytX/fbcD2FwPWqf8H9Ho1yqMpq5ivvsFTXp9Bg2qFacf5TbqmWXzvcMfyqiuUJdfkSy9qd82p5vzMjJGbV09QbuNh3iydV4L0DGoILWh+W4r6Mo2eBhpVM74ilKEfVB7kuXGZCNrTNEJX5GtS42Y5x3CwMhzW+LL4On4t2VKu8DIK3fJxqoI0GGCs28y+x24TXMg20QdUSl4NRGTTsMy31revw== 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=f2H/cuvgyjDfjCW36L1M5pBrWvTWjulprZgoo2voRvc=; b=bLwkF6DiOpyL0FC6bWKZbm7UEJ6SfxryZHolD02tFk3muTjX3oI2jSOgD1/bS9P9w2Uqo4zAsKxVZ43Qtt48cyG01or29iqyrvaE0ad92lcoowybBLQpN/SBgitvdTvxpyxtob+qI+MYGXvztyM5DkLuN2blmzY/2OiSBkenXfBE0Acp1AQy0qVKGkTUGenfwKMoTHZOAeCyavCWYtbOgzFe0vJAHazbIYQK3uMkOhd+lnGeYPMjSvcrEg5CT/mx620T2w6aatFRua/T8buWdxyEkfAppnsOFpdRaka7e3Dq0Du/Tz5k8uaIl+0/CKhZTyKZMYibYeI8Ngb8+xvaFA== Received: from AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) by VI1PR03MB3088.eurprd03.prod.outlook.com (2603:10a6:802:2f::25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4909.17; Mon, 24 Jan 2022 14:47:12 +0000 Received: from AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::ac56:2ff4:d304:ab22]) by AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::ac56:2ff4:d304:ab22%4]) with mapi id 15.20.4909.017; Mon, 24 Jan 2022 14:47:12 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Mon, 24 Jan 2022 15:45:58 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [Gnp6U6i9iwB9sq0suBdKLgfbVnx+vhr9] X-ClientProxiedBy: AM5PR0201CA0016.eurprd02.prod.outlook.com (2603:10a6:203:3d::26) To AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) X-Microsoft-Original-Message-ID: <20220124144616.559446-13-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 9a8d4e08-5c53-491c-5061-08d9df4867d7 X-MS-TrafficTypeDiagnostic: VI1PR03MB3088:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: a0iof7aWb0ghf87tTc6RdDmIJDqXXAzAfkrNqXiMs9rSLygBEM9sePx/bZBPuV98cFwS5IqbPB1wOlIHKwObD94Hf28YLZ/9rPRQ0Zo5/SClQSRwKPmkp4qvclq946j8WHHT2QLu6AsCQORcS4roUtq+6vrdQuquaiQwsnR5pFm4pdBglruw6RUtE7YrF3AM0ZzvATaDuJvqTfqpJxnXlLf9RBkoJJrYkyPxtutoCjZXGoZl6xwuhU7F/JDPZ6sQLJCiqKlPIXYp00QuC6Zs0vjt2SMccqbuAU6bo6j05x4KTsqLGpYjkEyYYZ41FL95RksbMNoR8e3aUpJrmrsakS01eU7L75HdfXdIp4xXDLfifjHcaGxmrONMbnwoEWSWJ8iZYEy4NT5xSScEO9S1UZT9G9sz6pLH0SvswvHGvFJ4or2/xFfm2Jv44E1NE4XDJzGVVpCRlv4UtOs09QHuODWK2Bf5mf3je8OU4DRyo+1zuTb2HWhzYsVSbpsHgXHE6cqhlHjtV39ui8lenfbmfvxvkY30g5Zp0UI8ZqmTpRsSioqcJtE7kr7s+5Cr/iKre+88pQf5yWD0bf/xODVySg== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 8ZTQF4gWSIpMWGkJunrtakN1vh11ld4wFX3BqRLGrKEc5Ueno65HuutGgclo7EWVbMQvHzjS8jiR032W6cIfYLe0VqG1FCdgsdxDn5yfvW65T0nSVZlNE9pebDXDw8nmVFdEyTn8WQtDWpIVM2swjKtaVHUoba3BZ/bB9BB2n+4mcftuDkswh1t+44sAM5P1OkHTSbQC0fLnbSZz40xd0rVRpijffSeeXbkMy4WWWqLEl/Kls5LAAq9nGx05Hnd75O3QZWfRhxQ5aTypmY1SGfAwodanPhhqROnpA2MY1em0MfDJv2kbHsdZHQcYv6n54Z0d7dF8z2iQSFsA3mgyoRn+BZ2/gUcaXgWP1oVgni4tKDdW62Oai9esBARLwAtp+JqERFE3PW2SwlftfPXmslAL4qK55Xh/N8gma5dUAc3xZWQ/MVBGt5Z9iAKVvy6D5g0x5xqwxOTXxsPjLobGV4FFNfHZhoK7bvh+KeZts40SZREeAT05i0fqRjxRjXVB8raqQAK14pL3mgi8Si8uoY4lfTliz9AME/n01ptqJxhqLzeiFdRsdKOAMAcrIQ4obpddIs3SUEyyYwIJnPr2ubKXXUsb84cgwzAaD/n/o3R4gMZPCntXj6J+Vl9ZaL1NleNstTJfcw2DMef99z06wVzz/wXMRer3lKAyRXIXfKF422TMmJ6TH8S3dgjUdYDYbzbzsfXmS2lddxPc/9B/rGyvyJKGMSV+Gh5Mu0xt3bwNd4hmwk6u3Lxg87/TwcKJ77m5U7g6Ztaq53lVW1ZD3mLgIdhIwHdcU5I/gbPo9Bhr0VkldlHGWyVEyUV+dtSoFgImTUoMvdw+dghsitqUnHZqfaQa6ykGB3Frjd/VAvuh/mBErIYy6wbN0rE+JJhhbYSIdCMwnZmEISgaXRzyTYvSH52D8qpHRtMqndR4dWiz0UYYb8YiS7eA9wf7wtr3PYCmwYDczNN0Ube/QFlRkA== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 9a8d4e08-5c53-491c-5061-08d9df4867d7 X-MS-Exchange-CrossTenant-AuthSource: AM7PR03MB6660.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Jan 2022 14:47:12.4951 (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: VI1PR03MB3088 Subject: [FFmpeg-devel] [PATCH v2 13/31] lavc/nvenc: switch to the new FIFO API 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: Anton Khirnov Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: eMd43mG8svsk From: Anton Khirnov --- libavcodec/nvenc.c | 49 ++++++++++++++++++++++------------------------ libavcodec/nvenc.h | 8 ++++---- 2 files changed, 27 insertions(+), 30 deletions(-) diff --git a/libavcodec/nvenc.c b/libavcodec/nvenc.c index 850c46022b..effd6381da 100644 --- a/libavcodec/nvenc.c +++ b/libavcodec/nvenc.c @@ -1568,7 +1568,7 @@ static av_cold int nvenc_alloc_surface(AVCodecContext *avctx, int idx) ctx->surfaces[idx].output_surface = allocOut.bitstreamBuffer; - av_fifo_generic_write(ctx->unused_surface_queue, &tmp_surface, sizeof(tmp_surface), NULL); + av_fifo_write(ctx->unused_surface_queue, &tmp_surface, 1); return 0; } @@ -1582,18 +1582,18 @@ static av_cold int nvenc_setup_surfaces(AVCodecContext *avctx) if (!ctx->surfaces) return AVERROR(ENOMEM); - ctx->timestamp_list = av_fifo_alloc(ctx->nb_surfaces * sizeof(int64_t)); + ctx->timestamp_list = av_fifo_alloc2(ctx->nb_surfaces, sizeof(int64_t), 0); if (!ctx->timestamp_list) return AVERROR(ENOMEM); - ctx->unused_surface_queue = av_fifo_alloc(ctx->nb_surfaces * sizeof(NvencSurface*)); + ctx->unused_surface_queue = av_fifo_alloc2(ctx->nb_surfaces, sizeof(NvencSurface*), 0); if (!ctx->unused_surface_queue) return AVERROR(ENOMEM); - ctx->output_surface_queue = av_fifo_alloc(ctx->nb_surfaces * sizeof(NvencSurface*)); + ctx->output_surface_queue = av_fifo_alloc2(ctx->nb_surfaces, sizeof(NvencSurface*), 0); if (!ctx->output_surface_queue) return AVERROR(ENOMEM); - ctx->output_surface_ready_queue = av_fifo_alloc(ctx->nb_surfaces * sizeof(NvencSurface*)); + ctx->output_surface_ready_queue = av_fifo_alloc2(ctx->nb_surfaces, sizeof(NvencSurface*), 0); if (!ctx->output_surface_ready_queue) return AVERROR(ENOMEM); @@ -1666,10 +1666,10 @@ av_cold int ff_nvenc_encode_close(AVCodecContext *avctx) p_nvenc->nvEncEncodePicture(ctx->nvencoder, ¶ms); } - av_fifo_freep(&ctx->timestamp_list); - av_fifo_freep(&ctx->output_surface_ready_queue); - av_fifo_freep(&ctx->output_surface_queue); - av_fifo_freep(&ctx->unused_surface_queue); + av_fifo_freep2(&ctx->timestamp_list); + av_fifo_freep2(&ctx->output_surface_ready_queue); + av_fifo_freep2(&ctx->output_surface_queue); + av_fifo_freep2(&ctx->unused_surface_queue); if (ctx->surfaces && (avctx->pix_fmt == AV_PIX_FMT_CUDA || avctx->pix_fmt == AV_PIX_FMT_D3D11)) { for (i = 0; i < ctx->nb_registered_frames; i++) { @@ -1777,11 +1777,10 @@ static NvencSurface *get_free_frame(NvencContext *ctx) { NvencSurface *tmp_surf; - if (!(av_fifo_size(ctx->unused_surface_queue) > 0)) + if (av_fifo_read(ctx->unused_surface_queue, &tmp_surf, 1) < 0) // queue empty return NULL; - av_fifo_generic_read(ctx->unused_surface_queue, &tmp_surf, sizeof(tmp_surf), NULL); return tmp_surf; } @@ -1998,16 +1997,16 @@ static void nvenc_codec_specific_pic_params(AVCodecContext *avctx, } } -static inline void timestamp_queue_enqueue(AVFifoBuffer* queue, int64_t timestamp) +static inline void timestamp_queue_enqueue(AVFifo *queue, int64_t timestamp) { - av_fifo_generic_write(queue, ×tamp, sizeof(timestamp), NULL); + av_fifo_write(queue, ×tamp, 1); } -static inline int64_t timestamp_queue_dequeue(AVFifoBuffer* queue) +static inline int64_t timestamp_queue_dequeue(AVFifo *queue) { int64_t timestamp = AV_NOPTS_VALUE; - if (av_fifo_size(queue) > 0) - av_fifo_generic_read(queue, ×tamp, sizeof(timestamp), NULL); + // The following call might fail if the queue is empty. + av_fifo_read(queue, ×tamp, 1); return timestamp; } @@ -2152,8 +2151,8 @@ static int output_ready(AVCodecContext *avctx, int flush) NvencContext *ctx = avctx->priv_data; int nb_ready, nb_pending; - nb_ready = av_fifo_size(ctx->output_surface_ready_queue) / sizeof(NvencSurface*); - nb_pending = av_fifo_size(ctx->output_surface_queue) / sizeof(NvencSurface*); + nb_ready = av_fifo_can_read(ctx->output_surface_ready_queue); + nb_pending = av_fifo_can_read(ctx->output_surface_queue); if (flush) return nb_ready > 0; return (nb_ready > 0) && (nb_ready + nb_pending >= ctx->async_depth); @@ -2442,16 +2441,14 @@ static int nvenc_send_frame(AVCodecContext *avctx, const AVFrame *frame) return nvenc_print_error(avctx, nv_status, "EncodePicture failed!"); if (frame && frame->buf[0]) { - av_fifo_generic_write(ctx->output_surface_queue, &in_surf, sizeof(in_surf), NULL); + av_fifo_write(ctx->output_surface_queue, &in_surf, 1); timestamp_queue_enqueue(ctx->timestamp_list, frame->pts); } /* all the pending buffers are now ready for output */ if (nv_status == NV_ENC_SUCCESS) { - while (av_fifo_size(ctx->output_surface_queue) > 0) { - av_fifo_generic_read(ctx->output_surface_queue, &tmp_out_surf, sizeof(tmp_out_surf), NULL); - av_fifo_generic_write(ctx->output_surface_ready_queue, &tmp_out_surf, sizeof(tmp_out_surf), NULL); - } + while (av_fifo_read(ctx->output_surface_queue, &tmp_out_surf, 1) >= 0) + av_fifo_write(ctx->output_surface_ready_queue, &tmp_out_surf, 1); } return 0; @@ -2483,7 +2480,7 @@ int ff_nvenc_receive_packet(AVCodecContext *avctx, AVPacket *pkt) av_frame_unref(frame); if (output_ready(avctx, avctx->internal->draining)) { - av_fifo_generic_read(ctx->output_surface_ready_queue, &tmp_out_surf, sizeof(tmp_out_surf), NULL); + av_fifo_read(ctx->output_surface_ready_queue, &tmp_out_surf, 1); res = nvenc_push_context(avctx); if (res < 0) @@ -2498,7 +2495,7 @@ int ff_nvenc_receive_packet(AVCodecContext *avctx, AVPacket *pkt) if (res) return res; - av_fifo_generic_write(ctx->unused_surface_queue, &tmp_out_surf, sizeof(tmp_out_surf), NULL); + av_fifo_write(ctx->unused_surface_queue, &tmp_out_surf, 1); } else if (avctx->internal->draining) { return AVERROR_EOF; } else { @@ -2513,5 +2510,5 @@ av_cold void ff_nvenc_encode_flush(AVCodecContext *avctx) NvencContext *ctx = avctx->priv_data; nvenc_send_frame(avctx, NULL); - av_fifo_reset(ctx->timestamp_list); + av_fifo_reset2(ctx->timestamp_list); } diff --git a/libavcodec/nvenc.h b/libavcodec/nvenc.h index b42a156c56..9eb129952e 100644 --- a/libavcodec/nvenc.h +++ b/libavcodec/nvenc.h @@ -168,10 +168,10 @@ typedef struct NvencContext int nb_surfaces; NvencSurface *surfaces; - AVFifoBuffer *unused_surface_queue; - AVFifoBuffer *output_surface_queue; - AVFifoBuffer *output_surface_ready_queue; - AVFifoBuffer *timestamp_list; + AVFifo *unused_surface_queue; + AVFifo *output_surface_queue; + AVFifo *output_surface_ready_queue; + AVFifo *timestamp_list; NV_ENC_SEI_PAYLOAD *sei_data; int sei_data_size; From patchwork Mon Jan 24 14:45:59 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 33776 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:e71a:0:0:0:0:0 with SMTP id b26csp387404ioh; Mon, 24 Jan 2022 06:48:56 -0800 (PST) X-Google-Smtp-Source: ABdhPJw/0KZr+dO0UmYq8xhvSCcUC2dw0PbkKg9bVvhO+ODvIym/ByMl7WM7gHavd2AE6+Fndwok X-Received: by 2002:a17:906:a21a:: with SMTP id r26mr13090200ejy.174.1643035735956; Mon, 24 Jan 2022 06:48:55 -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 g26si10161836edf.602.2022.01.24.06.48.55; Mon, 24 Jan 2022 06:48:55 -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=CTlk0VlB; 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 8598768B0CC; Mon, 24 Jan 2022 16:47:33 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05olkn2025.outbound.protection.outlook.com [40.92.90.25]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 3206E68B042 for ; Mon, 24 Jan 2022 16:47:30 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=YJ4bKbWXee3BEJxtBCDjBWjjCBYvdG8Hfbb+SA1qBcsd5QXeGOCI2b1Lgk7/2m1woTnbjcWTDkQJuGc37O0lpOMoR6/rdqkteTHG1EGrVJKBbLdZmiC1iEdAAtrG4Hs8eAVuYyzvkpTcbvxVii/XC28p/7Ws41IB+skf0nJztZUGcV8Yl609+PiHMIQRMBom4YGIQwkzXc3++MWFylAFqG23+0qyMMV7MxtUx4fyVGXJQFksY1Atfm6BknXUeJ/2rYbHlN5hvwM7a20j+U6B2HUTd/rVhJ7z1EzEmvwhE9S+adq3y6t2RZm88gZ+SgdiVJ/K98clTc7KP8zvN458JQ== 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=iUsXuU2o1R7q8xk6JtXBTR0lwjPA2X/COT8F48gZCA0=; b=SKlvAto7w67OakBGGwevUMX0rGCxZDumFju10qd31t2+QHw/dIHIDB6mU71fD6FYKSDVDwK8LRvVmSYk7klqdwrx/pt+NfGyA7shp1Q6GgtpUPoG0V8qeio0kZW+N8FiwkeP0UbHSw4v/DcOYys2ay3lV2bW2aJKrfeUSk6WBYTxHsqMPRGgaXdDgzbkrGbXRvQYP6BgPbQpLypZ0FnJgFZ/WK9ICmcJb+O1Ql7UGKyBfJsAJbj6bqKGrHDBbb/q4/Zw5cc5Fvc4NiyOX2zmdupUgDezab5ZjiT+TcSBCM/rMhybH8VH9prMt9/gqiBgY0kC2azyQZ1OQTxX4lYXeg== 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=iUsXuU2o1R7q8xk6JtXBTR0lwjPA2X/COT8F48gZCA0=; b=CTlk0VlBWmfLCcfM26jgymenvdKrVQyNxWtV4USMzB3g81nVV9D4+Zym587E45lIFoyqlYbyUGX6lE0fp89aoMvrCrLpDHW3ObORTegGuNj4YhasiTtrt6VygJThyYXMqbfg/rp2Ct7UFSBbRHbgDh2yYEzH23YjuEgV+JwpY1zPORfmkL99VAY3JjlJUh2ZFTmsxAJ852lB19eaO3mujdK6n5WsiTkrnHJU6jNw2Jc3E6FiHG8vJuFiUNDfhqImS+GSdoQ8xIiPkSGglQMbETbX7TTOe+SCRU50K+5ggcfBT77KIBCBOGe1xOf7yI8QfJY2LSZ6psck/uLcXVcmmw== Received: from AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) by VI1PR03MB3088.eurprd03.prod.outlook.com (2603:10a6:802:2f::25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4909.17; Mon, 24 Jan 2022 14:47:29 +0000 Received: from AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::ac56:2ff4:d304:ab22]) by AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::ac56:2ff4:d304:ab22%4]) with mapi id 15.20.4909.017; Mon, 24 Jan 2022 14:47:29 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Mon, 24 Jan 2022 15:45:59 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [WWfZ9uq+4XW+/nGycFy+1++GCqC8/kI1] X-ClientProxiedBy: AM5PR0201CA0016.eurprd02.prod.outlook.com (2603:10a6:203:3d::26) To AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) X-Microsoft-Original-Message-ID: <20220124144616.559446-14-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: c22e6502-b59c-463c-026d-08d9df487206 X-MS-TrafficTypeDiagnostic: VI1PR03MB3088:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: YdrIFrBu1Bu2tnSm3EjMjbhfKsi2t0JtjhNVIDoKzUHhYi5NjFEs32nySrQM4QfRWZelS+00RkJjJU+4+DXMUQu3E0Qm8Wyae9VMbtoLN6gJuEuY7oEorPQc0lYIqhlt3DNpZ32WO+UfJvWRVK/18M5x2nemt2dFVEMJnMmBM0tFSpdctYdkkJBf39mJ9w4rgV2IXg5jvRvoHleeiJIFDMyT2JC/6QR64q9jyG+N8MN8MNFP0D4UD37wB3eNwtZW/7Uf3sbXEmEdxuvzOguidfgXDDcgNWlOhcS2lU8DqJQTdKh1KhDPo39d7pezFp4ExdJR01tu1tgEu989Iy/Lkq78iJuIlGXT7Ov7NiLjUWgzb/hu+/mCC6eQhWz1+OX+jbToZeViHqUSBqKXbe2AeHquqZTqJGLh5K2oPV6pCoFT1we4qq+qDsiHLI41fn2NQ0VSWCik3e/CBzSOg5/3U7F1NojqFtvHJE8mVLT7CW6Ey7qMHm00+HygJsa2q5WooOe+4uUxK/IS+nPwC6qkp74WWrR0kGvjMvgJ2p3pe/1BJbzdiM2jgHP4EeZNpQcCvARLvHV5C8/sYDOIecx1rw== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: /lsejtGptedaLTht5WDw70Wd8gImfOX1Bpbk5qfvKHLStsQOrivS/1voNF+Rl5AN3F8y9J/VlIVh0++Hq1OrvQTbe2/yqRGS9hdOLVYCSkdADj3lLLvan/ghuOl7duCh4UR2JVoIgIE2kAOiy7UU9dob1+0hxDPpjoqL1ssDXma+vM6JyH1WZrI6S9+MgWFVUU2d6Ja2reUxjidN9rf45lszLFJruNr6PT39J9Tpflkyq8r6lX9SUkhNMyFAC73bjRKw0nq+Dh73GJFxucXkCdVLkBTUa1aSQEboRzRieqjV6OweLMivMibFRpjGz+XGW72JLxTCbxf/6qTCdd/Hy6ATrLVPfqW5H58kdcfAe9mIPmavvtpB05UP5h03C2+GBB8IU+zTvTH320LYy0Cq0gMXEE7TPXdfE56BlrNojMzzsqKt4aNDD90I/knCs3E/8Ilho1s/kYJnt1tHDJ4vua2fEyXcNXtl/Tr+6dwR3d2K+N2FphnFThP3N5Jyd2PpUFTsWGk45gMbXmFzI39Uq/mdNQrBeI8+lJA547G3LSkbp2c0Swk1YLAyZmH0PIKhFXjpPQQJ+O6Rk27EbODc9u70RCL5rSeA2nfdN18VoW+ojWDexXRkZV9Ytj0f6aRvi9nTjrfAj+rKCpTl0DtE1Dn6K09Qqrc9LEBQCTewXrpzbTjz8Dkb5ShZMHH8ZUV8NbRojddBTo6HXk7txeKd3ZBFYwn293qP21Dub/5wwYBcDKGwd+enRmzGqCmeZ4HqvzJ6LN1AackVCtBB8PcCSaPE3NxlT8FslC9RsL2lCKZY+UuczILkSzD3GBpGoiRZS5K+lLgx5Qu3FjDY7d3r2hZJMVTTRSbhJbjLSBPIbeK4UL8VC9yO0OVWZXMDyKdeP3bKqtwf9nE/yoTSiQCkXcQv9RrdDsycK3zmTpOnQzQZlc6V/xQFnN94mA9sTXi7qUXMFGxVkER13OHBwtK7AQ== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: c22e6502-b59c-463c-026d-08d9df487206 X-MS-Exchange-CrossTenant-AuthSource: AM7PR03MB6660.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Jan 2022 14:47:29.5927 (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: VI1PR03MB3088 Subject: [FFmpeg-devel] [PATCH v2 14/31] lavc/qsvdec: switch to the new FIFO API 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: Anton Khirnov Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: 2nNDQYorCmsK From: Anton Khirnov --- libavcodec/qsvdec.c | 88 ++++++++++++++++++--------------------------- 1 file changed, 35 insertions(+), 53 deletions(-) diff --git a/libavcodec/qsvdec.c b/libavcodec/qsvdec.c index d9e0fef1f1..56cd5c86c9 100644 --- a/libavcodec/qsvdec.c +++ b/libavcodec/qsvdec.c @@ -56,6 +56,11 @@ static const AVRational mfx_tb = { 1, 90000 }; AV_NOPTS_VALUE : pts_tb.num ? \ av_rescale_q(mfx_pts, mfx_tb, pts_tb) : mfx_pts) +typedef struct QSVAsyncFrame { + mfxSyncPoint *sync; + QSVFrame *frame; +} QSVAsyncFrame; + typedef struct QSVContext { // the session used for decoding mfxSession session; @@ -71,7 +76,7 @@ typedef struct QSVContext { */ QSVFrame *work_frames; - AVFifoBuffer *async_fifo; + AVFifo *async_fifo; int zero_consume_run; int buffered_count; int reinit_flag; @@ -208,16 +213,6 @@ static int qsv_init_session(AVCodecContext *avctx, QSVContext *q, mfxSession ses return 0; } -static inline unsigned int qsv_fifo_item_size(void) -{ - return sizeof(mfxSyncPoint*) + sizeof(QSVFrame*); -} - -static inline unsigned int qsv_fifo_size(const AVFifoBuffer* fifo) -{ - return av_fifo_size(fifo) / qsv_fifo_item_size(); -} - static int qsv_decode_preinit(AVCodecContext *avctx, QSVContext *q, enum AVPixelFormat pix_fmt, mfxVideoParam *param) { mfxSession session = NULL; @@ -235,7 +230,7 @@ static int qsv_decode_preinit(AVCodecContext *avctx, QSVContext *q, enum AVPixel } if (!q->async_fifo) { - q->async_fifo = av_fifo_alloc(q->async_depth * qsv_fifo_item_size()); + q->async_fifo = av_fifo_alloc2(q->async_depth, sizeof(QSVAsyncFrame), 0); if (!q->async_fifo) return AVERROR(ENOMEM); } @@ -502,7 +497,6 @@ static int qsv_decode(AVCodecContext *avctx, QSVContext *q, AVFrame *frame, int *got_frame, const AVPacket *avpkt) { - QSVFrame *out_frame; mfxFrameSurface1 *insurf; mfxFrameSurface1 *outsurf; mfxSyncPoint *sync; @@ -561,6 +555,7 @@ static int qsv_decode(AVCodecContext *avctx, QSVContext *q, } if (*sync) { + QSVAsyncFrame aframe; QSVFrame *out_frame = find_frame(q, outsurf); if (!out_frame) { @@ -571,35 +566,36 @@ static int qsv_decode(AVCodecContext *avctx, QSVContext *q, } out_frame->queued += 1; - av_fifo_generic_write(q->async_fifo, &out_frame, sizeof(out_frame), NULL); - av_fifo_generic_write(q->async_fifo, &sync, sizeof(sync), NULL); + + aframe = (QSVAsyncFrame){ sync, out_frame }; + av_fifo_write(q->async_fifo, &aframe, 1); } else { av_freep(&sync); } - if ((qsv_fifo_size(q->async_fifo) >= q->async_depth) || - (!avpkt->size && av_fifo_size(q->async_fifo))) { + if ((av_fifo_can_read(q->async_fifo) >= q->async_depth) || + (!avpkt->size && av_fifo_can_read(q->async_fifo))) { + QSVAsyncFrame aframe; AVFrame *src_frame; - av_fifo_generic_read(q->async_fifo, &out_frame, sizeof(out_frame), NULL); - av_fifo_generic_read(q->async_fifo, &sync, sizeof(sync), NULL); - out_frame->queued -= 1; + av_fifo_read(q->async_fifo, &aframe, 1); + aframe.frame->queued -= 1; if (avctx->pix_fmt != AV_PIX_FMT_QSV) { do { - ret = MFXVideoCORE_SyncOperation(q->session, *sync, 1000); + ret = MFXVideoCORE_SyncOperation(q->session, *aframe.sync, 1000); } while (ret == MFX_WRN_IN_EXECUTION); } - av_freep(&sync); + av_freep(&aframe.sync); - src_frame = out_frame->frame; + src_frame = aframe.frame->frame; ret = av_frame_ref(frame, src_frame); if (ret < 0) return ret; - outsurf = &out_frame->surface; + outsurf = &aframe.frame->surface; frame->pts = MFX_PTS_TO_PTS(outsurf->Data.TimeStamp, avctx->pkt_timebase); @@ -611,10 +607,10 @@ static int qsv_decode(AVCodecContext *avctx, QSVContext *q, outsurf->Info.PicStruct & MFX_PICSTRUCT_FIELD_TFF; frame->interlaced_frame = !(outsurf->Info.PicStruct & MFX_PICSTRUCT_PROGRESSIVE); - frame->pict_type = ff_qsv_map_pictype(out_frame->dec_info.FrameType); + frame->pict_type = ff_qsv_map_pictype(aframe.frame->dec_info.FrameType); //Key frame is IDR frame is only suitable for H264. For HEVC, IRAPs are key frames. if (avctx->codec_id == AV_CODEC_ID_H264) - frame->key_frame = !!(out_frame->dec_info.FrameType & MFX_FRAMETYPE_IDR); + frame->key_frame = !!(aframe.frame->dec_info.FrameType & MFX_FRAMETYPE_IDR); /* update the surface properties */ if (avctx->pix_fmt == AV_PIX_FMT_QSV) @@ -633,14 +629,11 @@ static void qsv_decode_close_qsvcontext(QSVContext *q) if (q->session) MFXVideoDECODE_Close(q->session); - while (q->async_fifo && av_fifo_size(q->async_fifo)) { - QSVFrame *out_frame; - mfxSyncPoint *sync; - - av_fifo_generic_read(q->async_fifo, &out_frame, sizeof(out_frame), NULL); - av_fifo_generic_read(q->async_fifo, &sync, sizeof(sync), NULL); - - av_freep(&sync); + if (q->async_fifo) { + QSVAsyncFrame aframe; + while (av_fifo_read(q->async_fifo, &aframe, 1) >= 0) + av_freep(&aframe.sync); + av_fifo_freep2(&q->async_fifo); } while (cur) { @@ -650,9 +643,6 @@ static void qsv_decode_close_qsvcontext(QSVContext *q) cur = q->work_frames; } - av_fifo_free(q->async_fifo); - q->async_fifo = NULL; - ff_qsv_close_internal_session(&q->internal_qs); av_buffer_unref(&q->frames_ctx.hw_frames_ctx); @@ -734,7 +724,7 @@ typedef struct QSVDecContext { int load_plugin; - AVFifoBuffer *packet_fifo; + AVFifo *packet_fifo; AVPacket buffer_pkt; } QSVDecContext; @@ -742,10 +732,8 @@ typedef struct QSVDecContext { static void qsv_clear_buffers(QSVDecContext *s) { AVPacket pkt; - while (av_fifo_size(s->packet_fifo) >= sizeof(pkt)) { - av_fifo_generic_read(s->packet_fifo, &pkt, sizeof(pkt), NULL); + while (av_fifo_read(s->packet_fifo, &pkt, 1) >= 0) av_packet_unref(&pkt); - } av_packet_unref(&s->buffer_pkt); } @@ -758,7 +746,7 @@ static av_cold int qsv_decode_close(AVCodecContext *avctx) qsv_clear_buffers(s); - av_fifo_free(s->packet_fifo); + av_fifo_freep2(&s->packet_fifo); return 0; } @@ -797,7 +785,8 @@ static av_cold int qsv_decode_init(AVCodecContext *avctx) } s->qsv.orig_pix_fmt = AV_PIX_FMT_NV12; - s->packet_fifo = av_fifo_alloc(sizeof(AVPacket)); + s->packet_fifo = av_fifo_alloc2(1, sizeof(AVPacket), + AV_FIFO_FLAG_AUTO_GROW); if (!s->packet_fifo) { ret = AVERROR(ENOMEM); goto fail; @@ -823,17 +812,10 @@ static int qsv_decode_frame(AVCodecContext *avctx, void *data, if (avpkt->size) { AVPacket input_ref; - if (av_fifo_space(s->packet_fifo) < sizeof(input_ref)) { - ret = av_fifo_realloc2(s->packet_fifo, - av_fifo_size(s->packet_fifo) + sizeof(input_ref)); - if (ret < 0) - return ret; - } - ret = av_packet_ref(&input_ref, avpkt); if (ret < 0) return ret; - av_fifo_generic_write(s->packet_fifo, &input_ref, sizeof(input_ref), NULL); + av_fifo_write(s->packet_fifo, &input_ref, 1); } /* process buffered data */ @@ -841,12 +823,12 @@ static int qsv_decode_frame(AVCodecContext *avctx, void *data, /* prepare the input data */ if (s->buffer_pkt.size <= 0) { /* no more data */ - if (av_fifo_size(s->packet_fifo) < sizeof(AVPacket)) + if (!av_fifo_can_read(s->packet_fifo)) return avpkt->size ? avpkt->size : qsv_process_data(avctx, &s->qsv, frame, got_frame, avpkt); /* in progress of reinit, no read from fifo and keep the buffer_pkt */ if (!s->qsv.reinit_flag) { av_packet_unref(&s->buffer_pkt); - av_fifo_generic_read(s->packet_fifo, &s->buffer_pkt, sizeof(s->buffer_pkt), NULL); + av_fifo_read(s->packet_fifo, &s->buffer_pkt, 1); } } From patchwork Mon Jan 24 14:46:00 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 33777 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:e71a:0:0:0:0:0 with SMTP id b26csp387608ioh; Mon, 24 Jan 2022 06:49:07 -0800 (PST) X-Google-Smtp-Source: ABdhPJwKnSBuQwuKyT38L+rX3uwYjMpF1XTnanrLpdB4z6Ng05uaf8w6Q9WdhxKxUvDPNsaKhwl1 X-Received: by 2002:a17:906:43d3:: with SMTP id j19mr12290168ejn.568.1643035747726; Mon, 24 Jan 2022 06:49:07 -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 og48si7371658ejc.143.2022.01.24.06.49.07; Mon, 24 Jan 2022 06:49:07 -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=oyJm15Om; 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 9A92568B10C; Mon, 24 Jan 2022 16:47:52 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05olkn2041.outbound.protection.outlook.com [40.92.90.41]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id DF1C468B07F for ; Mon, 24 Jan 2022 16:47:45 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=YymLQ9awr1GSv8hQNE2gmt823htRcNV/3OGWoenL+KS/5feYR3oVAJtsx2tqsdJtzVV0IDtGIyjKRXaE+Ow9gRc0NMZl/ZdTjLM3yA5eO9pbqgIg1h3VKd9iQ9jpXC2LFUj06IM+x4pBgHHyoRpndWVOHWbAS8zRm1g5uY5gwD/cWCKsqG2eSqA3gBBI+3KFc8b4oHCQZ3CjtSEtcUAXH6lAF5KkP52MTfJQLCrWNGJehqnL5Hk7JzsyzY3+HFv5LxovrTXq6IlvcSq4XTtoaDeSuojJRLypw8smVEigkDIAFnYdoRsiYy3RcNIKyWMzkhyiGLOlc/+HEtRvhXP4dQ== 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=20wsIC3tFOfC+ybHOKvgdwt6z7gvlW3xwKhbyY9Bryg=; b=KNWnzDFwZhCXCfKRXxk3ZtDBniA/Cgw4fExZbSw4Im9J/Nlre5dlfNJNNyiqJ4QfZbvhEjpEJHLORUoIWzaUs/IOyPoYUUpIEWiyrUH52AbG2dSPDozJXrWhAKzRxv/XhXtMtqVkETJt8Qu0sz3jgxGt/aREXIx7mnfd6hg54lCz56UkXKZ/Qc/OqFovYRclAx2FOq5X1OuJIZxMWHdkedm56dTSztnp8cKi+paHmEy1f036NYP1eOz3+A7NLl+cAIUbA2Upj9TxHgUKxhUeeS83wO6G89d+86vCRnytG/ZhcafgIuB76HznIqy3JNwHqCRTnEbgmAyUSfJGbbSusg== 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=20wsIC3tFOfC+ybHOKvgdwt6z7gvlW3xwKhbyY9Bryg=; b=oyJm15OmC5LrBBjrI5BD9YydWg8ycBZfwdB+4PV7GDqLbZmdK5muV4aKEv5QG4Pfp65RBQYemVgOELnFTj2Gp+0lGqEdqnzCLH3l63pAm+9QuNqLditDR3vW87btUtIIDchEhM9XC3g08rp0QnN427BKrp+exSYEsyDxLVZDneKL96oWdvdKqMcLwcVnd/AMsKfjErXaXJaxdidNSY3cqk8oX2GvjG2/OBf9ywdPHWMbMnEi3TdBcXU929r3alUA1x6IdUdpeC9P3vvsSgWYndYQfOSBT1A6Rqo7RRhdFpNbj2b4m4JsUGzkZLO2rB1DcWA6k3m4XkZnr5dp84p+xw== Received: from AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) by VI1PR03MB3088.eurprd03.prod.outlook.com (2603:10a6:802:2f::25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4909.17; Mon, 24 Jan 2022 14:47:44 +0000 Received: from AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::ac56:2ff4:d304:ab22]) by AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::ac56:2ff4:d304:ab22%4]) with mapi id 15.20.4909.017; Mon, 24 Jan 2022 14:47:44 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Mon, 24 Jan 2022 15:46:00 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [axTksoLpGVTOuiGBdOnOzhqzyZCaqVvY] X-ClientProxiedBy: AM5PR0201CA0016.eurprd02.prod.outlook.com (2603:10a6:203:3d::26) To AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) X-Microsoft-Original-Message-ID: <20220124144616.559446-15-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: bc86227e-54cd-4a69-0bdb-08d9df487b2b X-MS-TrafficTypeDiagnostic: VI1PR03MB3088:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 4RCfUJ0Anop8uJYNP7E4objq8gkzMrrwiZECiw42KDyE/y/V4JNNjZLjQMqkkuW1b2pxdG+wH2XqjksDZSXPW6KOfn9K3DK5lDtGsAkt8+3z5ACtL0yzJS+OQ7v87idopdwuecNPLpbzC2aHQqj5n99N1rOGxqrLuANBcg21iQxHtG3OIV9KJCelg54D/sN4UK6vlE6qqVMG/yVfsVEW7Q5weYg6Y/nAPFFb9p3tnM6Zpvf51v+4Q0H1tEkx8tntnJ3Q16n/EwjCe46TXUnTDcS9yjcHRnjIm+k1VwQyD1mDNnJ60fpS4lgxtSW5GB4h1mIebKSEpcNdtBGi619O0Kx8TC/uu9dHfAF3xta+CbInM0z19GLAILYEbeNQnA9qHDJxx+2ufvdGBSJCU2JxuSTzmNcTXTgp2tgMtp2UIdcfGQPydXpSeyH03aXWfZUUJDaDB/r5NVmlliCjd49X98zKakRBobwcZMTojeo/mLVHKZIIYqUSbH5beFGtlbJiVL9GEGeczwaIrCDMluB1NY6lnts2XNnubYcS+yCBWHkRn38gKkqmMzt33+CVn6NPYAfdVBHTUxuZdP0N+3a7Ag== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: K8sE2uu7AXbTM9CAdxBxWeZXxnFdhgbMYfY/PXlHcfDwF5C11ZWc3YYv8XJwvk1dRaF9uXWurfnJa+JIvqtopjIC+n8I4L8xAoRxhaxJywBE/Fnfuw/txtjmQ980Per6knEPMP2RWdtsjIAFCJZqzastHQyYxEBV81scPXCxvqrhFVHQeIEE2oMUAj3BoG7cKKTR0+blFeTc5Q697xmk96W2wla0byfac3rug5qxnOyzoEdeLIB2k5AgKYYPqNSNBihAa2Z1n5QottyF3R90qxJh+Ynxly0XFN5vhUkEEXCTGj7P8dl7opLNmFPxhJqCb2OvYgoJtko3PtTY9oYfdPOx5A8eb8huKRm5KdSh9jQC9eUYBzhNLU5oylmKDBl2oz3ET0h+qBq1D/RyrdI4dVw+nlA7kMRklOReicg2nmuyn42qz1sHSGBWQeLDHPySmI4a4zQ6rwwG4ZdVUwzbxM3/jVag2GB08hv2DIE6o/DXQKPwxDNbvAfA5O6vnANz5WCcLV8NfovGiKbtI9yOKy91VaTwdnzBlbr5Cs0p1rWu6QbsV1X+DvYF7RrcwnA8Dt47CC0Sr2dFjDBMHVnZJ1UC8y/bdu5Jw2YCR+HFmvMG+loXMdHavj7fgH40TRHbvVNVbUu6eJzT6aA6yzrHIGmVja9xQaU0fqMEMnIYttImpi8F2GYyqSPvVfriaQbc/Y+DhbTWHJWyvX7sBrrfrgKGA/+PHQtHl/Vx4dsIrVTuj6BmiFyP24gf0i4P6Y/fNRYmnBCCCdWcHOgf4+ab39LNfAn3ksYC5oslvTVyvy9TGXVxZHQNVxZ+G1CZ+ode3EpXgbMVXHfeC+lJ8TCcNwSs05jSpLG/mRbEaFL2/bgJW+jWLGsjqwmE/FP0RJHxxLUBmvHhc2YeXEs0dRNRCa3pBcWBUzLU0Vk8FUE5Reb/CvjXfvMukefgge43AOgK9oEM6uE5M+DeTALs+x2uwQ== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: bc86227e-54cd-4a69-0bdb-08d9df487b2b X-MS-Exchange-CrossTenant-AuthSource: AM7PR03MB6660.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Jan 2022 14:47:44.9037 (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: VI1PR03MB3088 Subject: [FFmpeg-devel] [PATCH v2 15/31] lavc/qsvenc: switch to new FIFO API 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: Anton Khirnov Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: twyvYVfITwho From: Anton Khirnov --- libavcodec/qsvenc.c | 126 +++++++++++++++++++------------------------- libavcodec/qsvenc.h | 2 +- 2 files changed, 55 insertions(+), 73 deletions(-) diff --git a/libavcodec/qsvenc.c b/libavcodec/qsvenc.c index acb82f321c..a12f7bce42 100644 --- a/libavcodec/qsvenc.c +++ b/libavcodec/qsvenc.c @@ -88,6 +88,12 @@ static const struct profile_names vp9_profiles[] = { #endif }; +typedef struct QSVPacket { + AVPacket pkt; + mfxSyncPoint *sync; + mfxBitstream *bs; +} QSVPacket; + static const char *print_profile(enum AVCodecID codec_id, mfxU16 profile) { const struct profile_names *profiles; @@ -1315,16 +1321,6 @@ static int qsvenc_init_session(AVCodecContext *avctx, QSVEncContext *q) return 0; } -static inline unsigned int qsv_fifo_item_size(void) -{ - return sizeof(AVPacket) + sizeof(mfxSyncPoint*) + sizeof(mfxBitstream*); -} - -static inline unsigned int qsv_fifo_size(const AVFifoBuffer* fifo) -{ - return av_fifo_size(fifo)/qsv_fifo_item_size(); -} - int ff_qsv_enc_init(AVCodecContext *avctx, QSVEncContext *q) { int iopattern = 0; @@ -1333,7 +1329,7 @@ int ff_qsv_enc_init(AVCodecContext *avctx, QSVEncContext *q) q->param.AsyncDepth = q->async_depth; - q->async_fifo = av_fifo_alloc(q->async_depth * qsv_fifo_item_size()); + q->async_fifo = av_fifo_alloc2(q->async_depth, sizeof(QSVPacket), 0); if (!q->async_fifo) return AVERROR(ENOMEM); @@ -1636,15 +1632,13 @@ static void print_interlace_msg(AVCodecContext *avctx, QSVEncContext *q) static int encode_frame(AVCodecContext *avctx, QSVEncContext *q, const AVFrame *frame) { - AVPacket new_pkt = { 0 }; - mfxBitstream *bs = NULL; + QSVPacket pkt = { { 0 } }; #if QSV_VERSION_ATLEAST(1, 26) mfxExtAVCEncodedFrameInfo *enc_info = NULL; mfxExtBuffer **enc_buf = NULL; #endif mfxFrameSurface1 *surf = NULL; - mfxSyncPoint *sync = NULL; QSVFrame *qsv_frame = NULL; mfxEncodeCtrl* enc_ctrl = NULL; int ret; @@ -1667,17 +1661,17 @@ static int encode_frame(AVCodecContext *avctx, QSVEncContext *q, } } - ret = av_new_packet(&new_pkt, q->packet_size); + ret = av_new_packet(&pkt.pkt, q->packet_size); if (ret < 0) { av_log(avctx, AV_LOG_ERROR, "Error allocating the output packet\n"); return ret; } - bs = av_mallocz(sizeof(*bs)); - if (!bs) + pkt.bs = av_mallocz(sizeof(*pkt.bs)); + if (!pkt.bs) goto nomem; - bs->Data = new_pkt.data; - bs->MaxLength = new_pkt.size; + pkt.bs->Data = pkt.pkt.data; + pkt.bs->MaxLength = pkt.pkt.size; #if QSV_VERSION_ATLEAST(1, 26) if (avctx->codec_id == AV_CODEC_ID_H264) { @@ -1687,13 +1681,13 @@ static int encode_frame(AVCodecContext *avctx, QSVEncContext *q, enc_info->Header.BufferId = MFX_EXTBUFF_ENCODED_FRAME_INFO; enc_info->Header.BufferSz = sizeof (*enc_info); - bs->NumExtParam = 1; + pkt.bs->NumExtParam = 1; enc_buf = av_mallocz(sizeof(mfxExtBuffer *)); if (!enc_buf) goto nomem; enc_buf[0] = (mfxExtBuffer *)enc_info; - bs->ExtParam = enc_buf; + pkt.bs->ExtParam = enc_buf; } #endif @@ -1701,12 +1695,12 @@ static int encode_frame(AVCodecContext *avctx, QSVEncContext *q, q->set_encode_ctrl_cb(avctx, frame, &qsv_frame->enc_ctrl); } - sync = av_mallocz(sizeof(*sync)); - if (!sync) + pkt.sync = av_mallocz(sizeof(*pkt.sync)); + if (!pkt.sync) goto nomem; do { - ret = MFXVideoENCODE_EncodeFrameAsync(q->session, enc_ctrl, surf, bs, sync); + ret = MFXVideoENCODE_EncodeFrameAsync(q->session, enc_ctrl, surf, pkt.bs, pkt.sync); if (ret == MFX_WRN_DEVICE_BUSY) av_usleep(500); } while (ret == MFX_WRN_DEVICE_BUSY || ret == MFX_WRN_IN_EXECUTION); @@ -1725,15 +1719,13 @@ static int encode_frame(AVCodecContext *avctx, QSVEncContext *q, ret = 0; - if (*sync) { - av_fifo_generic_write(q->async_fifo, &new_pkt, sizeof(new_pkt), NULL); - av_fifo_generic_write(q->async_fifo, &sync, sizeof(sync), NULL); - av_fifo_generic_write(q->async_fifo, &bs, sizeof(bs), NULL); + if (*pkt.sync) { + av_fifo_write(q->async_fifo, &pkt, 1); } else { free: - av_freep(&sync); - av_packet_unref(&new_pkt); - av_freep(&bs); + av_freep(&pkt.sync); + av_packet_unref(&pkt.pkt); + av_freep(&pkt.bs); #if QSV_VERSION_ATLEAST(1, 26) if (avctx->codec_id == AV_CODEC_ID_H264) { av_freep(&enc_info); @@ -1757,60 +1749,56 @@ int ff_qsv_encode(AVCodecContext *avctx, QSVEncContext *q, if (ret < 0) return ret; - if ((qsv_fifo_size(q->async_fifo) >= q->async_depth) || - (!frame && av_fifo_size(q->async_fifo))) { - AVPacket new_pkt; - mfxBitstream *bs; - mfxSyncPoint *sync; + if ((av_fifo_can_read(q->async_fifo) >= q->async_depth) || + (!frame && av_fifo_can_read(q->async_fifo))) { + QSVPacket qpkt; #if QSV_VERSION_ATLEAST(1, 26) mfxExtAVCEncodedFrameInfo *enc_info; mfxExtBuffer **enc_buf; #endif enum AVPictureType pict_type; - av_fifo_generic_read(q->async_fifo, &new_pkt, sizeof(new_pkt), NULL); - av_fifo_generic_read(q->async_fifo, &sync, sizeof(sync), NULL); - av_fifo_generic_read(q->async_fifo, &bs, sizeof(bs), NULL); + av_fifo_read(q->async_fifo, &qpkt, 1); do { - ret = MFXVideoCORE_SyncOperation(q->session, *sync, 1000); + ret = MFXVideoCORE_SyncOperation(q->session, *qpkt.sync, 1000); } while (ret == MFX_WRN_IN_EXECUTION); - new_pkt.dts = av_rescale_q(bs->DecodeTimeStamp, (AVRational){1, 90000}, avctx->time_base); - new_pkt.pts = av_rescale_q(bs->TimeStamp, (AVRational){1, 90000}, avctx->time_base); - new_pkt.size = bs->DataLength; + qpkt.pkt.dts = av_rescale_q(qpkt.bs->DecodeTimeStamp, (AVRational){1, 90000}, avctx->time_base); + qpkt.pkt.pts = av_rescale_q(qpkt.bs->TimeStamp, (AVRational){1, 90000}, avctx->time_base); + qpkt.pkt.size = qpkt.bs->DataLength; - if (bs->FrameType & MFX_FRAMETYPE_IDR || bs->FrameType & MFX_FRAMETYPE_xIDR) { - new_pkt.flags |= AV_PKT_FLAG_KEY; + if (qpkt.bs->FrameType & MFX_FRAMETYPE_IDR || qpkt.bs->FrameType & MFX_FRAMETYPE_xIDR) { + qpkt.pkt.flags |= AV_PKT_FLAG_KEY; pict_type = AV_PICTURE_TYPE_I; - } else if (bs->FrameType & MFX_FRAMETYPE_I || bs->FrameType & MFX_FRAMETYPE_xI) + } else if (qpkt.bs->FrameType & MFX_FRAMETYPE_I || qpkt.bs->FrameType & MFX_FRAMETYPE_xI) pict_type = AV_PICTURE_TYPE_I; - else if (bs->FrameType & MFX_FRAMETYPE_P || bs->FrameType & MFX_FRAMETYPE_xP) + else if (qpkt.bs->FrameType & MFX_FRAMETYPE_P || qpkt.bs->FrameType & MFX_FRAMETYPE_xP) pict_type = AV_PICTURE_TYPE_P; - else if (bs->FrameType & MFX_FRAMETYPE_B || bs->FrameType & MFX_FRAMETYPE_xB) + else if (qpkt.bs->FrameType & MFX_FRAMETYPE_B || qpkt.bs->FrameType & MFX_FRAMETYPE_xB) pict_type = AV_PICTURE_TYPE_B; - else if (bs->FrameType == MFX_FRAMETYPE_UNKNOWN) { + else if (qpkt.bs->FrameType == MFX_FRAMETYPE_UNKNOWN) { pict_type = AV_PICTURE_TYPE_NONE; av_log(avctx, AV_LOG_WARNING, "Unknown FrameType, set pict_type to AV_PICTURE_TYPE_NONE.\n"); } else { - av_log(avctx, AV_LOG_ERROR, "Invalid FrameType:%d.\n", bs->FrameType); + av_log(avctx, AV_LOG_ERROR, "Invalid FrameType:%d.\n", qpkt.bs->FrameType); return AVERROR_INVALIDDATA; } #if QSV_VERSION_ATLEAST(1, 26) if (avctx->codec_id == AV_CODEC_ID_H264) { - enc_buf = bs->ExtParam; - enc_info = (mfxExtAVCEncodedFrameInfo *)(*bs->ExtParam); - ff_side_data_set_encoder_stats(&new_pkt, + enc_buf = qpkt.bs->ExtParam; + enc_info = (mfxExtAVCEncodedFrameInfo *)(*enc_buf); + ff_side_data_set_encoder_stats(&qpkt.pkt, enc_info->QP * FF_QP2LAMBDA, NULL, 0, pict_type); av_freep(&enc_info); av_freep(&enc_buf); } #endif - av_freep(&bs); - av_freep(&sync); + av_freep(&qpkt.bs); + av_freep(&qpkt.sync); - av_packet_move_ref(pkt, &new_pkt); + av_packet_move_ref(pkt, &qpkt.pkt); *got_packet = 1; } @@ -1840,29 +1828,23 @@ int ff_qsv_enc_close(AVCodecContext *avctx, QSVEncContext *q) cur = q->work_frames; } - while (q->async_fifo && av_fifo_size(q->async_fifo)) { - AVPacket pkt; - mfxSyncPoint *sync; - mfxBitstream *bs; - - av_fifo_generic_read(q->async_fifo, &pkt, sizeof(pkt), NULL); - av_fifo_generic_read(q->async_fifo, &sync, sizeof(sync), NULL); - av_fifo_generic_read(q->async_fifo, &bs, sizeof(bs), NULL); - + if (q->async_fifo) { + QSVPacket pkt; + while (av_fifo_read(q->async_fifo, &pkt, 1) >= 0) { #if QSV_VERSION_ATLEAST(1, 26) if (avctx->codec_id == AV_CODEC_ID_H264) { - mfxExtBuffer **enc_buf = bs->ExtParam; - mfxExtAVCEncodedFrameInfo *enc_info = (mfxExtAVCEncodedFrameInfo *)(*bs->ExtParam); + mfxExtBuffer **enc_buf = pkt.bs->ExtParam; + mfxExtAVCEncodedFrameInfo *enc_info = (mfxExtAVCEncodedFrameInfo *)(*enc_buf); av_freep(&enc_info); av_freep(&enc_buf); } #endif - av_freep(&sync); - av_freep(&bs); - av_packet_unref(&pkt); + av_freep(&pkt.sync); + av_freep(&pkt.bs); + av_packet_unref(&pkt.pkt); + } + av_fifo_freep2(&q->async_fifo); } - av_fifo_free(q->async_fifo); - q->async_fifo = NULL; av_freep(&q->opaque_surfaces); av_buffer_unref(&q->opaque_alloc_buf); diff --git a/libavcodec/qsvenc.h b/libavcodec/qsvenc.h index 65f035045c..fb278b8829 100644 --- a/libavcodec/qsvenc.h +++ b/libavcodec/qsvenc.h @@ -150,7 +150,7 @@ typedef struct QSVEncContext { mfxExtBuffer **extparam; - AVFifoBuffer *async_fifo; + AVFifo *async_fifo; QSVFramesContext frames_ctx; From patchwork Mon Jan 24 14:46:01 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 33778 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:e71a:0:0:0:0:0 with SMTP id b26csp387791ioh; Mon, 24 Jan 2022 06:49:19 -0800 (PST) X-Google-Smtp-Source: ABdhPJyNUN3q2uiC2jipnV2uLos2HAswWKAb/uaQXPJDyB6sqxhS1YeFfCFaacc6iSzxR1WdhABz X-Received: by 2002:a17:907:d24:: with SMTP id gn36mr12519924ejc.324.1643035758934; Mon, 24 Jan 2022 06:49:18 -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 dn15si6467644ejc.117.2022.01.24.06.49.18; Mon, 24 Jan 2022 06:49:18 -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=k+UAnvvN; 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 890EB68B118; Mon, 24 Jan 2022 16:47:53 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05olkn2041.outbound.protection.outlook.com [40.92.90.41]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 0F33968B10A for ; Mon, 24 Jan 2022 16:47:50 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=fIzXP2pV6oToWuzmsXVvXynYo9ADY3/WTI+4j2kZvKzNBaZsm45vu4BBIhTs5U3NOXhidDGitE3w/1Hz8MTR04RKesjKrvqI1b8Zd/xkcls7N2owjBLCdo9gM33GzCzcshFukV46fXPhONAWmPO60RccGjrtHQ0xB8a7aDFys2L8l1u/U33xHw5oIKsz3J/ZhItSMwylTcpStpakUx5rzEOWELthMfZclFz4pcYtPmXQPgE5elaH8ci5HJF7UxU0u2H31xU6MQvSeieQeMdeIFRLxcOr/8fLJMfYq8dXi1qtIthwGwCpGEdaLPAHC9BDvpn6wmhWirLnVy7AoE0lwg== 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=J1Teron+0OEBp3MpBChL877s7tOWEXwuZw9trrhOW/4=; b=J2b+Xnsgepxlo+Itgjc1Wt/wuJ/gS/bdr7IIwFXJvajWFXR+D9eKs/GBuMDILlCvvQu/WpAvoSSuzGvcxAk0eABBEAhMBvTtymLliuQvBz+J9PqO5WNd5lMA9plpliqK+n/GuQFnGoWrMvO5s/Dd2xpXQKEZG0d5yH+96WOeELXJXBHKWrNedUNQU0CtNBXgr2/ri8i82DVgZhZtJv4uo5Rezbrc0sEyFSyws/kXlB1K9ktEuV7CUsLc/SIM/m8SC7rcVh67XAMhE/qtlkoskIcYazR+uN2SptgefMStT41dXCq31tRQ51SPpZcjVESSEKh9We4l8TjoC4U3QalSig== 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=J1Teron+0OEBp3MpBChL877s7tOWEXwuZw9trrhOW/4=; b=k+UAnvvNCQD62sn/auIJJ39WHiGCIj+d65IJMtvb20OI0kh+AAlYIcJcMZiLILM1UMGzzUB+1A8cZeO7RH+TDbc2Tki7WYyDkpHsS0+Raa0piNihtRyW999PgSBW35fW3GL+CBSebxIpgJeHgt30s0UTnJVT94XzfAfEXXEYcXO/5IV+t3Jm0Bw247rp0TZVdwH8I80XuhvtAKHMa+BT5VD+r0I7O0Y8iMwl/L1Ezx57Jfhb2iNOuNOd2eQUMzVYDT1bC/h+BM6Au4do5cGdQvlS9t7gHA8kVvhkrvBzK1WtNZj8vlIpt1l/Lyfghc/u6+h9KdqZBF3Gh1JhWQvi1Q== Received: from AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) by VI1PR03MB3088.eurprd03.prod.outlook.com (2603:10a6:802:2f::25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4909.17; Mon, 24 Jan 2022 14:47:49 +0000 Received: from AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::ac56:2ff4:d304:ab22]) by AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::ac56:2ff4:d304:ab22%4]) with mapi id 15.20.4909.017; Mon, 24 Jan 2022 14:47:49 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Mon, 24 Jan 2022 15:46:01 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [ru5M/AQE0m9XZ0kO6dnQ+H3YVo/MrHBx] X-ClientProxiedBy: AM5PR0201CA0016.eurprd02.prod.outlook.com (2603:10a6:203:3d::26) To AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) X-Microsoft-Original-Message-ID: <20220124144616.559446-16-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 16e3455d-3e10-4e9b-a723-08d9df487dbb X-MS-Exchange-SLBlob-MailProps: S/btQ8cKWiRuJzjo+afAgBd4SR5uzlp8BcsIBA7LRQ/MJy84Rl55v8uadO5lUL9ITQ+PimjeSxEQQzvZb73ZTac0BqGL13soU/6HIpR+i4/DWgF8Z3zGgbUXcFovqcNxYAY5WjCMRfTt4PtyEdBS51OnMkRYEDfAdh0Xy0cDER7I584QJ9hgNP89ueRK3HFvgcG7hbyVdL8G5GmOM7EjZ3lZXahrz0JBpU99KNAAs1YvtfyxCRrCDoi8OVe67IbG+KWRm1XXvWaS/KjWgQ1RF0nb1LiI4cfrPrrELvIn6wM2SAEBua8ZGeP4M3AxDToGotUEo1/CXQXIU684SpaETDg/hPOxHjW0Z7U0LH8xcpHKkvxWrsXBta5egYLF5ZfGfDAm/vkPiyu0PiDmkOLfJEHMl4YqbIFDPX1YvrqqxibNW7YY/XwMYxsQkAPSoL2WtqBnOSWZ8BeS1X55yOwMECgT0UZh7AQMTmGHNKrB1oIBcSL32Tw6TYUJUiSZpe8qV+s20UqeMpV3C5SWsA6OxuYih+ZTSKcjSfa18SdhHL1FFqHu5OvJpcjHruBLjhycSgTILH207sa1jC93T6c7URxywiDw5n7u54dmPK7oyKEDoM7jiPLLzgtZQSxN6YQ1iVYrq+4dr+bwwMLZTNYmaypMFef6kAQ4yMHlUg6iCr3c/4Zt/eNFf5PbrWZdPyJyd9Rmux8rGVhkFcqZdxgDiIbF15h/h3wLOnh4c49fyI+gQfc/XNsT/9ny/KE3ZrOkOYtCVd6H4xA= X-MS-TrafficTypeDiagnostic: VI1PR03MB3088:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: /kNFV0e7Kw1KquKeOv8SndMDWWb7aG3D7hZu17Kw75EcBIWijKxIyn9goEKEjTL3hfQfOn9Ty6wfzwTCF1DuHKLyTCX1imniHbg3Q5+Sxg2L3uvCMXM622x7Aa6OhPs42VVjnO1nGP19iNlGQ1B/j7xpnPRk5S+2nAEeCjtIkKk+LaI2Siz3r1gfXqqEUzkWiiNJc4k3VzzVabHayuUFtjBksachd1slwwGOQqekNUZvly5ffYHwhFDaivnnyUUi8sr4rCCV8gr0Dsh5++uhA2Kg0XwGazC46X5jvFL2edMxNEp7AfswVlKBKJRuRFJ3A3QtgoC12lxPAEXgwoz/24/IyICKAV5pK7kzquzJxWvcZOO0GBfifCc05q1HolzN/Vo1gG7sD7kuclXw32WNiYzyrP5CUFlAsY2+g8aypWcq29jBGq5jBMLdvGB5+3/NS4bkSIZdq83x5bWqB/3+V6wMvzgTY8n+1gopjG3SHfFZZI+zA2xAbla3uoLl/cwd09Rt0gaAQfTxC9ExnQlLDjhEpLVTBU/MwfbRyNmdiXCHMeuCIdecvf21naDcSsYwZBiIP791sTskwk53U6mgog== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: nhwiFEaPFOoe4slKIARnHwE4S8tC7VzYAWUKEtHOM/Jaqx8MSiNF25IpzsoUKe36wyCIthNvmZNI7XSwrpQCUz3Lvg3qBnB5+CiPVnahIYSg7eDUBzVjpflCIcJ9EMK8NnZsXTp71koda5Yytt3ZUWCKNP9LhDzOtTVnkriiLpo/yBY00pdev3Zv2/aJtZG1058ryyVlb3ULSPcetxwojBPHQsTiBdrWBkUmHiizTnCDY2YNDbKX0vqiKA+2J1ae4eKNnwKAZh6JUJwn5aYZ9eNb+nwulNBgMtd4m+MUKSvdxs7A/jxwCV69wUaRcQ7F7b/COvvhgHNcpfjC5n4VTJCTXrvYQaK/gFeyO1UtJROGpJjMivoDlo6dg6SrSm7SGxp3aoBJTfMWlDvuXmHG8o6v7rbj+5f0Ay2FKJhkiAQVFHyFKtIPvaZd3I21az9UbXFvKSXJIlBAbUGoWsh+2Jf3D1l1eiRwEYcZlHq8CEo6YSEqLPS2EzPT6eq3WMiymU7N9QXDfatfhT32xtvLaX8Ak/nN9Z09DAluE4nq/d7K5iTeXowIqL75ai4Jc0AJenyNUZkZyUlZ+0FahZCgS/TNzzZI9/2hCLpVtsRsT92PWFWn9LUwtN2a9OrQ5YGa+3A2Cu0dRBON6yvQAc4psXhRPDHLDaBkLrHdqXPIoTgJeEEquiFKMSMxTEvHzDnaITXoPFTNG/W6emjnEE50PCmEKc0GHE3d1AYZb06H59Bn/qfvEOGQcAAcGdr7ov6R3NHrhD2DVQEGRSQjomad/bhEB59tpBqdX6S4mJJ+QHnqlAAa1SOEbkHQ366DTNpnhXkFp8wORJA3tsFtFWC2WDmlICNSz5VJEmYw9TGJ5UQ78fnkQVioWMtXCAd6IXl2X8HgayIZi7PXc3xGelpR09zJoM5juiAW0ssuIAbyWFQ7oyQJjnVRCwshCKRsubZQ1i40/7JbvDXwo+4j0BEV1A== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 16e3455d-3e10-4e9b-a723-08d9df487dbb X-MS-Exchange-CrossTenant-AuthSource: AM7PR03MB6660.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Jan 2022 14:47:49.1543 (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: VI1PR03MB3088 Subject: [FFmpeg-devel] [PATCH v2 16/31] avcodec/qsvenc: Reindent after the previous commit 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: yGlfgmITpehg Signed-off-by: Andreas Rheinhardt --- libavcodec/qsvenc.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/libavcodec/qsvenc.c b/libavcodec/qsvenc.c index a12f7bce42..a1093ae768 100644 --- a/libavcodec/qsvenc.c +++ b/libavcodec/qsvenc.c @@ -1832,17 +1832,17 @@ int ff_qsv_enc_close(AVCodecContext *avctx, QSVEncContext *q) QSVPacket pkt; while (av_fifo_read(q->async_fifo, &pkt, 1) >= 0) { #if QSV_VERSION_ATLEAST(1, 26) - if (avctx->codec_id == AV_CODEC_ID_H264) { - mfxExtBuffer **enc_buf = pkt.bs->ExtParam; - mfxExtAVCEncodedFrameInfo *enc_info = (mfxExtAVCEncodedFrameInfo *)(*enc_buf); - av_freep(&enc_info); - av_freep(&enc_buf); - } + if (avctx->codec_id == AV_CODEC_ID_H264) { + mfxExtBuffer **enc_buf = pkt.bs->ExtParam; + mfxExtAVCEncodedFrameInfo *enc_info = (mfxExtAVCEncodedFrameInfo *)(*enc_buf); + av_freep(&enc_info); + av_freep(&enc_buf); + } #endif - av_freep(&pkt.sync); - av_freep(&pkt.bs); - av_packet_unref(&pkt.pkt); - } + av_freep(&pkt.sync); + av_freep(&pkt.bs); + av_packet_unref(&pkt.pkt); + } av_fifo_freep2(&q->async_fifo); } From patchwork Mon Jan 24 14:46:02 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 33779 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:e71a:0:0:0:0:0 with SMTP id b26csp387931ioh; Mon, 24 Jan 2022 06:49:29 -0800 (PST) X-Google-Smtp-Source: ABdhPJxLgVdHZBpWhXkELZE1gK2V4B1j0N+TwSjJhjz1Lpi3Wdr1WA4EsOVH4m5tI9Xy1dtlEBbF X-Received: by 2002:a05:6402:d0d:: with SMTP id eb13mr16220339edb.349.1643035769199; Mon, 24 Jan 2022 06:49:29 -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 ji1si8602629ejc.921.2022.01.24.06.49.28; Mon, 24 Jan 2022 06:49:29 -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=Olmn9xXw; 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 6EAF968B11B; Mon, 24 Jan 2022 16:47:55 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR03-AM5-obe.outbound.protection.outlook.com (mail-oln040092070041.outbound.protection.outlook.com [40.92.70.41]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id C6E8D68B122 for ; Mon, 24 Jan 2022 16:47:53 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=WFWglkUxF03IxroYxnyi62i25PQ47KYKnQKEFYs1fGJpEQIomxsBIkfinZHAEEqGyFhuFxbybHnu6le2eLJ0afqepBdP9dI0PtcWk0G7S1ygSmsIFQYjI8cCihH4OYTTxtq1X4LW1LuwmouM1FrbqpgadEzfMIdfjigFfIRGDceF9GCkejsMYzW66milJhmOpz8yR6i5s20uXVxgfdMwvHTK/X1rGY66ilhBQ3xLIgtJ9AMNcICWMaH1KOJ5VlujXLA/nMnHCNyNoLDadVMXdIdk4mu3jAfqX3IRkUeS6K0QWRqaMcfquV4YAld/x4YYnHcxYxihyqgEV2iNS+eH8g== 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=DgQU97rjtYXtCJaSfuxaWYnq16x7j9bWCA9AVbAFME8=; b=ChvdUljYDv4JR8+i86k6bXIE6E/x5GB8ItFg7vs0oJhM8l7BvK4dFfwwogPvBcSTu0F6ofyAFuySglZQgMPOT4Iu8iDZmCyyGeE/hQPaJWw0yUrmQOfXf7QiojxU94I4TliY5h3mqjxM24iyOofpsOp7wPT64S589YhFG7ZIiRTox8aUXe6n01rt/ok9Ob4b5PrCeio7/YuHWvKbD7cVcDoOyfLsIQlY+mzX/LJMSGLucmbQfWpkm1GP9D4X59MSkMjI2igwKDZyRGM6eA++XxPvW1Mgg0CZX99GOjgZzXHEun/L0RxHrWckBt026GYumkgFN4Da/JflSg8bu3nSyA== 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=DgQU97rjtYXtCJaSfuxaWYnq16x7j9bWCA9AVbAFME8=; b=Olmn9xXw2kzjs0e9idfxhJsxeA1AAStTTmW0mWy0JDOIJkOHfAhAUj0ZwcIaMBUB+9DjUo4otfCA/ZEENY9uyjrqsDf9URIjJSw1gbstB2/mB2ehyf966yceLnfwEPIboxgGXzT/dJ6dKtOVpzaxlRK8ZPiAn0Pa5cq3vXwEH7XEJEF/hzVqFtB09rvfxrbN9uSbnh+mngKyCE6Zz1Y5U4I+s4UZWngjnFTZyYiy3Hq3Wsbm8d94KG1vHo3f/s4tOs4Q8lJgZ01cv0gb5lNJORS1ZsGxaEZsPMn7cWsOJC4u7096Roo2XIgNDyNpGI7osoJMyUObaMPH3ceVlJ7XwA== Received: from AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) by AM6PR03MB5236.eurprd03.prod.outlook.com (2603:10a6:20b:c4::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4909.17; Mon, 24 Jan 2022 14:47:52 +0000 Received: from AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::ac56:2ff4:d304:ab22]) by AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::ac56:2ff4:d304:ab22%4]) with mapi id 15.20.4909.017; Mon, 24 Jan 2022 14:47:52 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Mon, 24 Jan 2022 15:46:02 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [gFJUcN2x43LRrQheonq/QpwuDvHofw4c] X-ClientProxiedBy: AM5PR0201CA0016.eurprd02.prod.outlook.com (2603:10a6:203:3d::26) To AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) X-Microsoft-Original-Message-ID: <20220124144616.559446-17-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: a1646a8e-fbb9-40b5-2070-08d9df487f9f X-MS-TrafficTypeDiagnostic: AM6PR03MB5236:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 6izUFcpKG3cNuxCngsppXSgCoPkLDqElgsW1IT6T4lSNp95MY9zjeKGgHZkJXkt04H/EccIBZ8atFh+TKWezmQw1Iqwy/dhbEF02r7/VYx+D90pSn4WXOSZE8lfuw/bSYpgoVKmSnZ+Zm667XzNbE7yUYsVO08IKL79smMGgHZllPxBwtOy81t/NFU+uTRyiN4AmClJld8AiwxRY+bBx5yHzTRkQ06nS/Wxx/VnSSeD+w4+vdVLDYTwn+CO0NncvQVQw3d9T3CLeQ/aCamap+N27SeM7l53nqi8i5ugfZuSiTA3HnTZt9rrcWSKynmUur6GGhXeh3PCIUgixG7JlYmMizjeotOQkEIQoSgfeMY52x5dFw465Rzm/LSr82xJZN/vEZ4ucaPqUZ4RgvYie9P3zSbr7RZtO2cqABBpUBQbhiOIK0Q69YAR2HEm/l4uRbseuo191SgI9mICKQgFrp4DjY9eKOdJFm1yLNevZ4W5rbFwdiPTb1pfexq5HV9Ww3XW8G0bJpRAyUbVmeC5zd8aABT/yC/GV50e1C7sB3LAyvZ87pa1IG1Q9i4XOcecTy66Axo6Q9ZIVYnwC53dapg== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: Lx0EWeytmGZoxvH3tWt3jqfTWKQHlgfGgUaAJizZDSP34OU1eNjqtGxRIorL787P6/mi5O62mqyJpTe9EmTrwYuJQ4dF07g/zTe2VksDAKrLMuBuprZhrjvMbYGfa7sql23JJjeN4Oi5+Gmk6K6BhlfE+WoKTpdDQTG7M6lTcDCgQMnSH8OSpOSnOM7QKEPGA5+Nc2y/CDUbbmJHVvGKxeoTyidZMUSF2na0U34+dlYgo1htpe0IrS1TW4/I9UZvt5rblw+fqC127iM/OFarWpved5YW/clQND+w1zgl5zs6Mj8Fg+Cn+lEiBw78B87Qge01an3xiMtumOmEcHVr26K0dJopHTRKUWNRcCEw16Uui3UUUIuOH0FLQXKkvtVWzc84iUCeBrCBanxvTMsMNhMH6SdXAkOGCttypWJciQ6pmk6BebU4OPb3h9gL2w1xivJJnJDeH/ErMvCkglwI2lSLFXobyOW7SQzemJALVIsvI9hJ+F7dJ7cryh7fR9WQmawpVjd6+s1rzk+IGOaOXQKld5v+nUAceYwYvilKPxRvbLytTwAoM1o1hvgWlZgJWtoG+W7oDPR53w9rtJfIOyrZzoIOX5KxZrYlQilIaf+SG5qludg46QBLG9MSKAhm7Ivx6j6aUDi3aifUjkx6T1XQ5O5Uw1+DpfDXNHfVipcQlivk3Sg7HSa2HTMoF5tY2uus6R/b0ST7J+hEQmQdM9VZzAhAtAEgJl0DcwVrJiZbZi3znhsarpbEZZqSE6MG8F8yuc6uasV7n28KSeRl9s63sZu96OtDI0oZduU18c0SZbsg+9Es3JI9NBeEag84385ENcYBE3NfU08Ay8vPCBBX0mBDBAzAea2uusYN4dDd9GdPO37aS1Bc+HlAG5t1gD62DR5viJwpUWkMEli3PdTICDqCnT4EERXRbZDdfCAi5NTIU6HQ2YR0+5GR96cXi+/GfOdANy2lF91+WYxbPg== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: a1646a8e-fbb9-40b5-2070-08d9df487f9f X-MS-Exchange-CrossTenant-AuthSource: AM7PR03MB6660.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Jan 2022 14:47:52.5798 (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: AM6PR03MB5236 Subject: [FFmpeg-devel] [PATCH v2 17/31] lavf/dvenc: return an error on audio/video desync 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: Anton Khirnov Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: l7QKRNQ62TPa From: Anton Khirnov --- libavformat/dvenc.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/libavformat/dvenc.c b/libavformat/dvenc.c index b76539b59f..03b63cff89 100644 --- a/libavformat/dvenc.c +++ b/libavformat/dvenc.c @@ -255,8 +255,10 @@ static int dv_assemble_frame(AVFormatContext *s, switch (st->codecpar->codec_type) { case AVMEDIA_TYPE_VIDEO: /* FIXME: we have to have more sensible approach than this one */ - if (c->has_video) + if (c->has_video) { av_log(s, AV_LOG_ERROR, "Can't process DV frame #%d. Insufficient audio data or severe sync problem.\n", c->frames); + return AVERROR(EINVAL); + } if (data_size != c->sys->frame_size) { av_log(s, AV_LOG_ERROR, "Unexpected frame size, %d != %d\n", data_size, c->sys->frame_size); @@ -270,8 +272,10 @@ static int dv_assemble_frame(AVFormatContext *s, for (i = 0; i < c->n_ast && st != c->ast[i]; i++); /* FIXME: we have to have more sensible approach than this one */ - if (av_fifo_size(c->audio_data[i]) + data_size >= 100*MAX_AUDIO_FRAME_SIZE) + if (av_fifo_size(c->audio_data[i]) + data_size >= 100*MAX_AUDIO_FRAME_SIZE) { av_log(s, AV_LOG_ERROR, "Can't process DV frame #%d. Insufficient video data or severe sync problem.\n", c->frames); + return AVERROR(EINVAL); + } av_fifo_generic_write(c->audio_data[i], data, data_size, NULL); reqasize = 4 * dv_audio_frame_size(c->sys, c->frames, st->codecpar->sample_rate); From patchwork Mon Jan 24 14:46:03 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 33781 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:e71a:0:0:0:0:0 with SMTP id b26csp388096ioh; Mon, 24 Jan 2022 06:49:39 -0800 (PST) X-Google-Smtp-Source: ABdhPJxvwMZ29SuxUjzygeKhiMfgDlWrDJx4kT3T7mNsCdQsxXkqTEXk3XmKLwsYV6hJGcbQ9mIP X-Received: by 2002:a50:fe81:: with SMTP id d1mr16241542edt.202.1643035779226; Mon, 24 Jan 2022 06:49:39 -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 hc30si1375294ejc.253.2022.01.24.06.49.38; Mon, 24 Jan 2022 06:49:39 -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=MgvTXKfk; 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 9AA3D68B024; Mon, 24 Jan 2022 16:48:06 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR03-AM5-obe.outbound.protection.outlook.com (mail-oln040092070029.outbound.protection.outlook.com [40.92.70.29]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 45E5468B024 for ; Mon, 24 Jan 2022 16:48:04 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=ZDluutQuSfQk7p9ji51zHmKstRTQpl71CBLRdG75Bjun72fyYMgVo/4ZhVSJ686JKq/yxZUVm7gmaQmtsIN5oZOXVfC0Q7wXC4Zi4qc4p5IsT8EctgZ1jqZ099pM47YTIfS7JVuS/9EmysGKwSLeEKBn9kvCevrqNEQI1dxF7q59pbIg4ms0uwaTOAa3ON7aY4VrM44RRvPupO00Z+dT2uJGm1TEMF0s8XDk1ycImZk8Y4OPSetIysxs9nWbojQTQxqNClBNwFNnGc46oEk6g1jclYBA8h60omfco1Qv28z4gWRS0FeMlcjDdMWcurSM/tXd+0iA1LBrv5Ts4pdUyA== 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=agRojYHi2b4uHIZJ8F3T8Ph24ulZqX1HsCY76QNUzBY=; b=Qz1vB8hVXvHhnKoyLvONPOOhglfp08cATiX3jxP+aGpvsiwkSUz9QRpXUJxJSQk5MpVcQp1HMb8gsq33Z4Wu/gKwimtADVzkpha6s3eidB7Sjx+3QaI6U6BJvR8P6cda8FxEZfW1WiOLAwSOjevWu+NsLHXQOWvPK0prvpj/cuv1xIDSLaf3zM7x+ap9nCtcpcZMtKUagrCWdj5dc+Z2D1yPCkJFC+dkvtClrBC7RFWpq2TbJDeNY0oZ0ZT0wk7pKJ8/MhalPi8LKsw2nkygwMr1JHI9Aus7/xs3/PPUmjA+sMeXmT5gZ2UNBP4kbiTzSKAMSzlDsOh51wYOLlNEpg== 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=agRojYHi2b4uHIZJ8F3T8Ph24ulZqX1HsCY76QNUzBY=; b=MgvTXKfkiZ5ngUYEDVETdAvJM4oMmfkOraR5Gr3MdVze9MEZyj8vWvvKmaYB28ciAGtY6z4Ywx4ZWfyTh/8OM0zOEwY6iMwbf3JadOAbaHqtvSvMVb3lqtPq2cPoMVzLJKB7fZr0+H+avUCCtdNpTGXKcw1TqppBiWSdSq7WZNr1bhD4p+1uFqtK8nE+mXPHd68YKSf/nMupasRE+EZ5OkDSiC/nLOEgG16LAbOmU+RFb7qzjr3s7TxP+W06tH/bxVnIzLvs7KtuWkBs7lxkkjOUWPyt4T/f7CTT3KsthnbNWdM7hBhmuRYtE+7o1ERCZPM+sK4dkOaXsQkHuJKFmw== Received: from AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) by AM6PR03MB5236.eurprd03.prod.outlook.com (2603:10a6:20b:c4::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4909.17; Mon, 24 Jan 2022 14:48:03 +0000 Received: from AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::ac56:2ff4:d304:ab22]) by AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::ac56:2ff4:d304:ab22%4]) with mapi id 15.20.4909.017; Mon, 24 Jan 2022 14:48:03 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Mon, 24 Jan 2022 15:46:03 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [o+nNT/4oeTcNzTA0TspvimhIzy3lbftK] X-ClientProxiedBy: AM5PR0201CA0016.eurprd02.prod.outlook.com (2603:10a6:203:3d::26) To AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) X-Microsoft-Original-Message-ID: <20220124144616.559446-18-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 3b69b001-95d8-4a29-b53f-08d9df48862f X-MS-TrafficTypeDiagnostic: AM6PR03MB5236:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 7lWdyISYHl4CM3sjBy1Ukcmo3BLAe/Uj15j19fh9Fd7fzBy9dFzimt1PJ7mKXYS2o/Aruvj2ugPKrKAO+NdfuzsmZZOb/4Thsee9atl2QvcTfe3M6mcsUXi7GegBI/8zJLn+0FcrvGx9eTcp/+Vmv2+XrQ3ou1exW2b3ghTz6h0lyRhSPhTr3QbCBthWtUjGgsvKtNKfK5kwvkNHMcJL+s/cMX0kVRiAVgDl7ZWid/rOLgJFDIm9lS03KINjP9yMpQSHOGP7eMizGSm/+spd0oDooU/oLCRndSw5KzH96fB7cesvteJ2cqI/VNw/etbgwcVZafX0I6NmSreoStO9h+ileSeSoB+bZG7Q6vRA3Ia1bjyngzQaTe8cZ4GEsehe7hS7rkr3mdCZpfizWucLZmS1lXYq+HUj1YotHPDrbIthVziJQCdYror2bky/7GJ5jk51QH8zxcHc86PIeZV+EsMd+jfmdk5IvIl6v6dUpfKtBlEzdGCv670jHczagRCZGCL/cXZHAJn8Hbs/vGmgy+GNYT1eXC7o3GAlYGUmB9BIrT72tnj4bACoOT/14J/VMzNBqb83CB+Pj5HERTobnA== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: wD1LIOaLkxMZVenVNEbPWY6s32yxgW+eMSvDvg4fWhE4QTZTlBDj9tOECyh1xB9YTRyt+rLT6MCcBeOmbPq5O081LQDIVspDv4AROQ710D18MOM7UuaNI2DlQb6XUq0lDky6XvfFnMOcUUT8OiQgUxV4pUAA258ScWJFV5rBQckhqckhLgJD34tXWl1W+nCQxRMScSZnhEYqdIFSV/Dl7bNcKvMfbQrrypKrJ9qqryXFt6HrMi+cq8gXeJEVTDi1uBEzhP1eHYhmfkLfbL7GKpkNKnCkvVKX8CNcXVd3rkKIBxGppy/Tpk8591MpcvZqg5fgbgxOgBRp3g47/gup55JmkqNUhqzPxg3nzP5nfE0XuNHlDH+t2rVdYbRocUnBESHygBcPkYP2da8lf/FUAbXxWnIjpdGfDK9GkxfsCP3TFU3IXHe8SZnDfgzhgQTI1pmmAVRG3ppcvPU1i6nL4Uux76Wz4XAuMnta250kge+vkErh2FKT6DRHH/gC2IVKbBgyqgSYZ/c5ICZU1I02o/0wzXb9DDjaEOKgneSZfWZcGP1MNu92G0tLvyGnlff9VbK9TzSKZmloFLrncNVdkIL9wQuV8lbXWZCEd53ulIX8vV5j9FK/RYP7RARW20yLhC4VSIP69Osz0RP3bNNxviJPdW7isPZmEWMteV8P6b5GW5vQNM7JtNUdAJzmWwZrPMaz3/6ezo2HglQOJPu+smXD11aVqz6FagayyCwETT8FhZopXsvo6VV/wjQRQQ99dDgEd7RQEupquYr0yewGlNtx+/Gjn9y1CEmDW03n30DAu9YT2q3pGyWuKfSIEnaLUtDiimh3E3xgYno6bBzUaMdjJwsGiUwCD1m9mf9O+YPhzvHqI5JZnP478TL1OIOIHd6A2oP7ubZqF1oL2oT84tNsSKDvjlA+yUYDruEDPJSDJ3cpM/3JlqNRBkXGhmXcMRU6c+CF6i9aEyz8qVxuDA== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 3b69b001-95d8-4a29-b53f-08d9df48862f X-MS-Exchange-CrossTenant-AuthSource: AM7PR03MB6660.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Jan 2022 14:48:03.3735 (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: AM6PR03MB5236 Subject: [FFmpeg-devel] [PATCH v2 18/31] lavf/dvenc: switch to new FIFO API 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: Anton Khirnov Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: vYhvU9AheNqI From: Anton Khirnov --- libavformat/dvenc.c | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/libavformat/dvenc.c b/libavformat/dvenc.c index 03b63cff89..e1188109c6 100644 --- a/libavformat/dvenc.c +++ b/libavformat/dvenc.c @@ -49,7 +49,7 @@ struct DVMuxContext { const AVDVProfile* sys; /* current DV profile, e.g.: 525/60, 625/50 */ int n_ast; /* number of stereo audio streams (up to 2) */ AVStream *ast[4]; /* stereo audio streams */ - AVFifoBuffer *audio_data[4]; /* FIFO for storing excessive amounts of PCM */ + AVFifo *audio_data[4]; /* FIFO for storing excessive amounts of PCM */ int frames; /* current frame number */ int64_t start_time; /* recording start time */ int has_audio; /* frame under construction has audio */ @@ -202,7 +202,7 @@ static void dv_inject_audio(DVMuxContext *c, int channel, uint8_t* frame_ptr) continue; // FIXME: maybe we have to admit that DV is a big-endian PCM - av_fifo_generic_peek_at(c->audio_data[channel], frame_ptr + d, of * 2, 2, NULL); + av_fifo_peek(c->audio_data[channel], frame_ptr + d, 2, of * 2); FFSWAP(uint8_t, frame_ptr[d], frame_ptr[d + 1]); } frame_ptr += 16 * 80; /* 15 Video DIFs + 1 Audio DIF */ @@ -272,16 +272,16 @@ static int dv_assemble_frame(AVFormatContext *s, for (i = 0; i < c->n_ast && st != c->ast[i]; i++); /* FIXME: we have to have more sensible approach than this one */ - if (av_fifo_size(c->audio_data[i]) + data_size >= 100*MAX_AUDIO_FRAME_SIZE) { + if (av_fifo_can_write(c->audio_data[i]) < data_size) { av_log(s, AV_LOG_ERROR, "Can't process DV frame #%d. Insufficient video data or severe sync problem.\n", c->frames); return AVERROR(EINVAL); } - av_fifo_generic_write(c->audio_data[i], data, data_size, NULL); + av_fifo_write(c->audio_data[i], data, data_size); reqasize = 4 * dv_audio_frame_size(c->sys, c->frames, st->codecpar->sample_rate); /* Let us see if we've got enough audio for one DV frame. */ - c->has_audio |= ((reqasize <= av_fifo_size(c->audio_data[i])) << i); + c->has_audio |= ((reqasize <= av_fifo_can_read(c->audio_data[i])) << i); break; default: @@ -295,8 +295,8 @@ static int dv_assemble_frame(AVFormatContext *s, for (i=0; i < c->n_ast; i++) { dv_inject_audio(c, i, *frame); reqasize = 4 * dv_audio_frame_size(c->sys, c->frames, c->ast[i]->codecpar->sample_rate); - av_fifo_drain(c->audio_data[i], reqasize); - c->has_audio |= ((reqasize <= av_fifo_size(c->audio_data[i])) << i); + av_fifo_drain2(c->audio_data[i], reqasize); + c->has_audio |= ((reqasize <= av_fifo_can_read(c->audio_data[i])) << i); } c->has_video = 0; @@ -374,9 +374,11 @@ static DVMuxContext* dv_init_mux(AVFormatContext* s) ff_parse_creation_time_metadata(s, &c->start_time, 1); for (i=0; i < c->n_ast; i++) { - if (c->ast[i] && !(c->audio_data[i]=av_fifo_alloc_array(100, MAX_AUDIO_FRAME_SIZE))) { + if (!c->ast[i]) + continue; + c->audio_data[i] = av_fifo_alloc2(100 * MAX_AUDIO_FRAME_SIZE, 1, 0); + if (!c->audio_data[i]) goto bail_out; - } } return c; @@ -438,7 +440,7 @@ static void dv_deinit(AVFormatContext *s) DVMuxContext *c = s->priv_data; for (int i = 0; i < c->n_ast; i++) - av_fifo_freep(&c->audio_data[i]); + av_fifo_freep2(&c->audio_data[i]); } const AVOutputFormat ff_dv_muxer = { From patchwork Mon Jan 24 14:46:04 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 33783 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:e71a:0:0:0:0:0 with SMTP id b26csp388269ioh; Mon, 24 Jan 2022 06:49:50 -0800 (PST) X-Google-Smtp-Source: ABdhPJw4xyEZJ48+OFkbMIsG9PaLzB2VAKqUTh6PqzHEVLeMUXVwXWadCAyhYOX11XtVj3N8H88q X-Received: by 2002:a17:906:305b:: with SMTP id d27mr12231693ejd.316.1643035790235; Mon, 24 Jan 2022 06:49:50 -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 qf21si9427212ejc.896.2022.01.24.06.49.49; Mon, 24 Jan 2022 06:49:50 -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=GppilWBJ; 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 A023468B084; Mon, 24 Jan 2022 16:48:08 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR03-AM5-obe.outbound.protection.outlook.com (mail-oln040092070061.outbound.protection.outlook.com [40.92.70.61]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 2F40A68B148 for ; Mon, 24 Jan 2022 16:48:06 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=D253meOhRFznNlFrcoBbPJCqeM77bJV8YK0QuC5swDVi2AGt0RUpLpcmdUymGIVBcnt93KSAhZp0+JxargfPA7lceMdaFS/90aSaIJ8LVfa9wuwQc6OrOtB5gk3QzImRj6350TgZnIwXpO+XadOZsaNgLIdd7IJ0NiCAUAH0iznOOpnZPk8qIZIjvXSpRjw1bOP/UC8XH1I/E9z1EheVX9TKajgtTDtgMrWfOu+75tVwe/XxaEewX8Ie1qLqeMoe5lsQ873r9c6AmDEHVGl2z6H60Qhugx7py3WDtu3sFnI6dj/8xYpndEk81nyigGpT/TbsNYY8tuTIKTXpkW+Qmw== 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=U1OLQLyBJHjvgfboIVFxG982YVH4ux6o3Cfvbsyt4EE=; b=APnykR7e5hOHFn/CwlRtSQLoSJm+/yRuWYSmEFkbLhDqZgXy+RCY0gipF84uTE+nifTBuGxyVYse6eU1f37ylq/sXvT1qCJFa9XG7SJFS3OW3GxerP1/MzyD0E5gU2E2QHfdetnPpcPw2vJCIe0xo0V0C1bH160O/Y6WgrNvBEkcY/JtlS3i4NwAEEgALoxwxyyHIGrQy62yP6/Mz1LiMkPgFp/l8YIRK6Eli2nrpv80b/HXGKUtHEQMtjECFVIJ3SuoOLZswsa+QgZTlbGMhoCc7IfHr2tHabvbKhMn3YIoiBOkFnUi1ssPmEAJ9QQUNrHv3hB/SXv1zGNi0od+Nw== 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=U1OLQLyBJHjvgfboIVFxG982YVH4ux6o3Cfvbsyt4EE=; b=GppilWBJE2FQ4Gf/uk1qwF2agCGsWT/4MTlBxDCE/F3Ry/bIbSg128XpN3HyBVFEGQOQo2oHVum2M3lwNSmgYMXTey87MEmXhr5YaR1Du8/GpFC9nnyY9L7thYwn9M3oAVZOd5vYz7XvTWV5OpzQfAu33/4x8l2AjxDC8YpycGvl1K3FNYjwP4caATUeKFoptCtC2uwj7CMbouf7SqLQcPVSPm62cwJJrT9BJKaetfFTOX6Io2JmgYwDsZvXYhIUlmFa6xVkc5Cy//FSPtiRiFqa7Yf/uC7aaVRbiD7kWeki9eULnZZgdytNHoaiAvoE9AYeUrXNpc8e8phMRm6Asw== Received: from AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) by AM6PR03MB5236.eurprd03.prod.outlook.com (2603:10a6:20b:c4::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4909.17; Mon, 24 Jan 2022 14:48:05 +0000 Received: from AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::ac56:2ff4:d304:ab22]) by AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::ac56:2ff4:d304:ab22%4]) with mapi id 15.20.4909.017; Mon, 24 Jan 2022 14:48:05 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Mon, 24 Jan 2022 15:46:04 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [nHwgjMLKWEgCvY7EiSnxW1eyXZ/yXuJE] X-ClientProxiedBy: AM5PR0201CA0016.eurprd02.prod.outlook.com (2603:10a6:203:3d::26) To AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) X-Microsoft-Original-Message-ID: <20220124144616.559446-19-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: cb036a32-44fe-4fe7-8d2b-08d9df4887a6 X-MS-TrafficTypeDiagnostic: AM6PR03MB5236:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: /slHKo0mmp4/huTM5NHTMsUgx3S0Liaa7oJ2UWp0g3EN91JWB4YsZs6R57RQ3If4EFdH9XH2qdVVJQFV7h4KiRdbprt56ocLSuWHK1N0669VW6hXKH19YDH+ZCS5w+hi+/rMTmGH6dBphic7ro+8ow5UnlKCWzuTF4+JhNR8BX77yOD3B6hO0Xtj+TxAwLW+FSfx20vOSK7DQBQHTfUAAH02Dvd9TUlT7SJiXAQvjyD+0i4Zh1ZoOQeRUM8eNF1Q8Do5QNLVohRyVwvH8O7Bx8+SQ6LA/MZr8a0q2bxfPqmnMQHI4X9D5iN1eoYApi3OGZZvacHLRni6OG8e0wk1QlshEnIdFTGN9CuuKWLBbjI5CCb4tzJQhnviukC1lTkT0svR7iNfi1FHZGjuIDfUZZvA/WRJl474dzaNaX0zWY6n5IkzNWdaytw+Ek77xL6U5PwPffVSzt4uqIYkjfKF8CJ5JUjJlg19mTS0dMpR5mE9AIKz4V9C8R5rELOkgMUQuLpaIk2KnT4on5iHbtn7Dlf6EEiICOCNB6vZg7E++vy37cjeW1lip5HdEa84kOcE03w30aczSiuwz76V3OYRSA== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: XN2lqrgGJpvuSgCQ9V8qLdUUnekvpeK4jHl/bS4PQJAI3bR2PyFI3Hif48ot5WKtQxKBg3P9RXxFo3hAsDegEONDxQ701t3kCSKmNqVSFBjkMtw1eULAOj4CLt/JFhlb3hsKCQex2NMeaUpncugLI+OtVpOd8RUzI5MHusFs20Y14y4xhHlGAohFJR5ouqz2ufa6fTEQcsYczPvUgIXR/fZICkiJDXg8CYy5uDbqXLdfzygaSFgs7Jq74Tblm8RLds5z9tCo1iJMZr2Uh1RwU5vn8pYsOv5XtjXD1NEkwvtoUbaXpLE3nNlEt5llU8KMww+/eySUGDTYTYpD1jKEJFGVKj2b/mdKkpPs080kOk9K05PC+9gAiREiw69/iSFMoZro1TzaDok2lZdBKf0+DB0C4dh3RMiWtgPli2NKYM08DrWQsC4L7SO+l54rfiY5bCzDPNJpIv5xJ8YHsD6XO06nNZb1JVaCiC6vBNWe5y6L3f6SyEq/0tjEVEJnrb912EqB6ZGc2TZ/3qHT3J5YrvXTEQCAn6GPLKgl1Nyfu/STPZ75PGbWcwuojmxcfvOuGA4cR7xw485rtVyBkDR+m1k9ybFDOi+n6anLHBDhFEFbebk8xvth02k/hF8n+xUJG6yEz2zcd5K1/ik5R8YSZVG+tU7S5T9Bea60dzGaT8YXEKPYFuWuPL/AS2p+fvTxKYTn6HA+Kz6NfkKkoHAluz5tsMKW5a0hySbIyaF2YLKXDh9jCLf2jB9Qegpe2TG63hwWzz/Apuq6XAfqKQYAiYfSB+rApYxTpnegnmYiT6AQUZp8YNqrKuwird/ba3vxULZQvC1pSKn3dKWcOfiI5vQ3UablNWFacAvZa73VLVgQ7PEN4eIO83DJ5aX+zIP4JZK9SuJ8cOii4mncKaW8p9h1KY8WfVsH7uXJZGc17C6fjUqDMz+uIhiD9M/REDfv9oWhtOhITlioHU8I99gPvw== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: cb036a32-44fe-4fe7-8d2b-08d9df4887a6 X-MS-Exchange-CrossTenant-AuthSource: AM7PR03MB6660.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Jan 2022 14:48:05.8145 (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: AM6PR03MB5236 Subject: [FFmpeg-devel] [PATCH v2 19/31] lavf/mpegenc: switch to new FIFO API 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: Anton Khirnov Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: ftTA6txOUP68 From: Anton Khirnov --- libavformat/mpegenc.c | 40 +++++++++++++++++++++++----------------- 1 file changed, 23 insertions(+), 17 deletions(-) diff --git a/libavformat/mpegenc.c b/libavformat/mpegenc.c index b1d8bf9c38..64248695bd 100644 --- a/libavformat/mpegenc.c +++ b/libavformat/mpegenc.c @@ -45,7 +45,7 @@ typedef struct PacketDesc { } PacketDesc; typedef struct StreamInfo { - AVFifoBuffer *fifo; + AVFifo *fifo; uint8_t id; int max_buffer_size; /* in bytes */ int buffer_index; @@ -459,7 +459,7 @@ static av_cold int mpeg_mux_init(AVFormatContext *ctx) av_get_media_type_string(st->codecpar->codec_type), i); return AVERROR(EINVAL); } - stream->fifo = av_fifo_alloc(16); + stream->fifo = av_fifo_alloc2(16, 1, 0); if (!stream->fifo) return AVERROR(ENOMEM); } @@ -626,6 +626,12 @@ static int get_nb_frames(AVFormatContext *ctx, StreamInfo *stream, int len) return nb_frames; } +static int fifo_avio_wrapper(void *opaque, void *buf, size_t *nb_elems) +{ + avio_write(opaque, buf, *nb_elems); + return 0; +} + /* flush the packet on stream stream_index */ static int flush_packet(AVFormatContext *ctx, int stream_index, int64_t pts, int64_t dts, int64_t scr, int trailer_size) @@ -741,6 +747,7 @@ static int flush_packet(AVFormatContext *ctx, int stream_index, packet_size -= pad_packet_bytes + zero_trail_bytes; if (packet_size > 0) { + size_t fifo_data; /* packet header size */ packet_size -= 6; @@ -776,7 +783,7 @@ static int flush_packet(AVFormatContext *ctx, int stream_index, startcode = 0x100 + id; } - stuffing_size = payload_size - av_fifo_size(stream->fifo); + stuffing_size = payload_size - av_fifo_can_read(stream->fifo); // first byte does not fit -> reset pts/dts + stuffing if (payload_size <= trailer_size && pts != AV_NOPTS_VALUE) { @@ -814,7 +821,7 @@ static int flush_packet(AVFormatContext *ctx, int stream_index, stuffing_size = 0; if (startcode == PRIVATE_STREAM_1 && id >= 0xa0) { - if (payload_size < av_fifo_size(stream->fifo)) + if (payload_size < av_fifo_can_read(stream->fifo)) stuffing_size += payload_size % stream->lpcm_align; } @@ -907,11 +914,10 @@ static int flush_packet(AVFormatContext *ctx, int stream_index, } /* output data */ - av_assert0(payload_size - stuffing_size <= av_fifo_size(stream->fifo)); - av_fifo_generic_read(stream->fifo, ctx->pb, - payload_size - stuffing_size, - (void (*)(void*, void*, int))avio_write); - stream->bytes_to_iframe -= payload_size - stuffing_size; + fifo_data = payload_size - stuffing_size; + av_assert0(fifo_data <= av_fifo_can_read(stream->fifo)); + av_fifo_read_to_cb(stream->fifo, fifo_avio_wrapper, ctx->pb, &fifo_data); + stream->bytes_to_iframe -= fifo_data; } else { payload_size = stuffing_size = 0; @@ -1005,7 +1011,7 @@ retry: for (i = 0; i < ctx->nb_streams; i++) { AVStream *st = ctx->streams[i]; StreamInfo *stream = st->priv_data; - const int avail_data = av_fifo_size(stream->fifo); + const size_t avail_data = av_fifo_can_read(stream->fifo); const int space = stream->max_buffer_size - stream->buffer_index; int rel_space = 1024LL * space / stream->max_buffer_size; PacketDesc *next_pkt = stream->premux_packet; @@ -1075,7 +1081,7 @@ retry: st = ctx->streams[best_i]; stream = st->priv_data; - av_assert0(av_fifo_size(stream->fifo) > 0); + av_assert0(av_fifo_can_read(stream->fifo) > 0); av_assert0(avail_space >= s->packet_size || ignore_constraints); @@ -1095,7 +1101,7 @@ retry: es_size = flush_packet(ctx, best_i, timestamp_packet->pts, timestamp_packet->dts, scr, trailer_size); } else { - av_assert0(av_fifo_size(stream->fifo) == trailer_size); + av_assert0(av_fifo_can_read(stream->fifo) == trailer_size); es_size = flush_packet(ctx, best_i, AV_NOPTS_VALUE, AV_NOPTS_VALUE, scr, trailer_size); } @@ -1199,7 +1205,7 @@ static int mpeg_mux_write_packet(AVFormatContext *ctx, AVPacket *pkt) pkt_desc->unwritten_size = pkt_desc->size = size; - ret = av_fifo_realloc2(stream->fifo, av_fifo_size(stream->fifo) + size); + ret = av_fifo_grow2(stream->fifo, size); if (ret < 0) return ret; @@ -1208,13 +1214,13 @@ static int mpeg_mux_write_packet(AVFormatContext *ctx, AVPacket *pkt) if (is_iframe && (s->packet_number == 0 || pts != AV_NOPTS_VALUE && (pts - stream->vobu_start_pts >= 36000))) { - stream->bytes_to_iframe = av_fifo_size(stream->fifo); + stream->bytes_to_iframe = av_fifo_can_read(stream->fifo); stream->align_iframe = 1; stream->vobu_start_pts = pts; } } - av_fifo_generic_write(stream->fifo, buf, size, NULL); + av_fifo_write(stream->fifo, buf, size); for (;;) { int ret = output_packet(ctx, 0); @@ -1244,7 +1250,7 @@ static int mpeg_mux_end(AVFormatContext *ctx) for (i = 0; i < ctx->nb_streams; i++) { stream = ctx->streams[i]->priv_data; - av_assert0(av_fifo_size(stream->fifo) == 0); + av_assert0(av_fifo_can_read(stream->fifo) == 0); } return 0; } @@ -1260,7 +1266,7 @@ static void mpeg_mux_deinit(AVFormatContext *ctx) av_free(pkt); pkt = tmp; } - av_fifo_freep(&stream->fifo); + av_fifo_freep2(&stream->fifo); } } From patchwork Mon Jan 24 14:46:05 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 33784 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:e71a:0:0:0:0:0 with SMTP id b26csp388407ioh; Mon, 24 Jan 2022 06:50:00 -0800 (PST) X-Google-Smtp-Source: ABdhPJzVJR4SNaygzkzjXecdIPGN0VPzPJ5jvJqC7jrmFS/u+2CC473pSz7YxCS+T3bsuj3FhbMn X-Received: by 2002:a05:6402:7cf:: with SMTP id u15mr16409987edy.325.1643035800772; Mon, 24 Jan 2022 06:50:00 -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 p26si8456472eds.322.2022.01.24.06.50.00; Mon, 24 Jan 2022 06:50:00 -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=gCNPilig; 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 89BFD68B150; Mon, 24 Jan 2022 16:48:10 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR03-AM5-obe.outbound.protection.outlook.com (mail-oln040092070033.outbound.protection.outlook.com [40.92.70.33]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id B250468B155 for ; Mon, 24 Jan 2022 16:48:08 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Hq14/RxwCnJiTR6EnJpMt2cHBIENt8y4y47s0a75I2GZwJ7yPBiDoxu3cn3xU4o0f6NEBY/H3qR4CRTPAFPkNpiBJpCxegpiH26QwMN52yNAtGWV5DVPNqIXuG1wip6RllP8zbDf4IaFT3q15NNbbGfQZpWdhFrIulaZsHpUb2NcsmgVCcp+1JPUJXR3AylI3kylF6doupaE63dnuDEO7Zq0WocE6SZr2mD6dhDdpOzaqfigy5QFI/D89nXr/0oaKJ6izrWhYdMXU6unFcl3wT31APohmpCdoy0uMSiPMP+WUUtl+4RC+iAjl9nO336dtOR7ScyU6G8ba5bAvkAeMQ== 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=HAWLTLs78MC1sJDD6wLx+fG3QABrZXpMx6aLBsQQ4hs=; b=Yw41mRxnpCjQJxINsT+QcWE0NsS71sl8CSqemyb8gbr/pVPjF//ForTught4bqfFNflhSFUug2FEfPwmfBt0I3kRdj5/1h614TVaAR/JmAsKraf00ZjxCstoUPYAVWGXwFZL480ioD/2c/LPYrfy1nleaJjNhuY47e/waBF6oSmi06DlZEpXEeeHbsfLOaeSOJ42Ukebice7RsoGjnpk8YmdG5obnHRVMjRUQxSgRi5fcyFIeHUrEtpHkDddPL4OOD1LF75lCTtpBjuODulMECgqhO46eMkJG+gTARQ4PNX7XsMCzzT2WYq5MRpx4Xrk3rLH76y52i7TfGUxTGuS5w== 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=HAWLTLs78MC1sJDD6wLx+fG3QABrZXpMx6aLBsQQ4hs=; b=gCNPiliglGr0khzawTEiSvbvSVb2Be99olDiuisF1qW3sSwfvVNuoAC0yWmtdZzFgN+rUhsG4fx7EgJW7PWikzlqLIttExVKY7iQEj4Dc1WKITwCt/htxI+/CSbjiz/QvdeaPf10avcn+iAGL+l9d9JgFH+bl79Uudwp6P11/CdsbHTL1KsUzWvUEZGliG1GWtaAz7dTRPck0teRqaUG1iiI/C1L/VHvmEXil14mOD67ylbtmzi/B/7BDtfNZFdoJksmEankpli+wCXnnlArdIUY0YPLhsQ1jjnBRYMNgf9BDzUwRST01hSbCzYjHOIK1gxBRejvVLe9AehMHm+wgQ== Received: from AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) by AM6PR03MB5236.eurprd03.prod.outlook.com (2603:10a6:20b:c4::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4909.17; Mon, 24 Jan 2022 14:48:07 +0000 Received: from AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::ac56:2ff4:d304:ab22]) by AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::ac56:2ff4:d304:ab22%4]) with mapi id 15.20.4909.017; Mon, 24 Jan 2022 14:48:07 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Mon, 24 Jan 2022 15:46:05 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [vpipyoyHNhmfWbmRN/fV7gqB/7IrcSmk] X-ClientProxiedBy: AM5PR0201CA0016.eurprd02.prod.outlook.com (2603:10a6:203:3d::26) To AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) X-Microsoft-Original-Message-ID: <20220124144616.559446-20-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: d82c8467-afc6-412e-c35a-08d9df488892 X-MS-TrafficTypeDiagnostic: AM6PR03MB5236:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: Jom9DL0ZGw6kw11je/3ZjwW43czhaZXUV362EXWSYIy9jwZEOI9CHzMzwSmKPKM999IutJhP52h436mh0hgIWEBN3aeiKwJ0Z+VW9Y0ukpxwtOZqWeUYG8fn3lvbHH4IV9WduBRlGybzMaGQNzro8cJczVaAfcATh84EtRtvYnsDrYE4Qc1C7K/uvLOOhdbv6REui3VgETwHuXm/0cPR0XfWIj39eph7ScT1lKexW3dFJ2r3NFQpzpQ2s4qDEw2ISXghsbeWxmTkg5VH8VKXgKRKcXxSHYnrfnZOQOtrioZpXkWW2i3wqxwESduH+YUTMCTXlW7xOM2D6C2rsCOn5tqL6KTpRmy1oZ+OroK8Ralob+PtpNr8xEt91RqjLHvVh5Cg5O8KfGBfhUHGrpIUsBxjn9E9IehLxnln27jiD1EmxtUnoT5VYF9N2Gg1NzSx/W3k7gDiOkMfcz01HHMfGokwH8VHzD9PZ1byHck8c9z8NK626Wr4s4bxiat5c2cN9H4Qn0hiFiLyyUgXXf5w4uAq+zcX2srw5BST8On++0C6zbLp5it+FuNV8CJLq18EFiYtd7SS7R38PS5ArnqzSA== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: p69vapuQ4UoR4Z+l+xrs58jpqCkOFeFlODMrJlEh+hrrmWirDp/lfdvnlIlhix0Qld5swEKh1Sl1oadmkhuQzATjmM3AdHA33wMQvZGPBmVWf6rGSj2HVOrcpzqFnQTbM2IRYp3pIU/unGVesbQ419L3ABGjP6fpMGHAWUIWIR+XSbvmuMxvvanovK4y8Kcut5qCE7xE0D5fDD4iOzD73c74JfNTgTjNueanwqeiIv/NArZaXCTgNS58Y5ozWiQxMqOLk/GGaUyNSc5Yh49Iv+E4Hd/dSxmUAJMhwHpoWAWPX8OyA/DniZv6L5QlXyMcqK3Jb2l2a4kIJan+Rx6gGyY86rheffNv0Ytf/68vRtKThsaqIgqbHUBmxhwKASqQCnG3dleFIcPkaRYGeWJvLfC/Er3Ofe/+xBzZ+Abn0+lOv880iFcD8s2AgIgLLtSBhZvPRL8ixd/x43o8x/mFxuxidn0kp6KDEhjyX48h2T1kebYwlgi8KRdnPbKlF7QnM+3FfkFoWAXksXxlS4m7siQhiu+rkZQaBkaWVo6XNJS7zvcD1NIufnGHPS+zZ0Gu0mGQ6JkyCOx4QzJNmnj22EDkXgqzoXms+uk61W4hEOw2N0vuBhGunXEzNN0GNyGXAOZVVWQsyM6JwrxgUlBLOEqWhlNE8NCfLp4tEYt2W7UdYcwbGb/HA9QWAPvd8ER0JoQ1O8l/1ktdjEJ4C7+ZbCiOKl2PE1m53fx19+h7zpROlTc0AQC6DnCOMt0MbERb/e4cOh+KQ0g2rKxFoad/bxmdArLC+bNQaRe3SngoKlUWQhhDumavwdHvUGzWjZFT2ND/gKJzHjMM0Zms7QGqS74jDS8ijsovv0kyfziEo7ya2pVYK1eW73aFo5Mmqc23McypRJLnn467urj1VKvguQ6bOLfRaaGiPevLjfsRwisc3Vh/dmG90cqRWht7vhPV3ZynS5y37AbXocD3rHbrFw== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: d82c8467-afc6-412e-c35a-08d9df488892 X-MS-Exchange-CrossTenant-AuthSource: AM7PR03MB6660.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Jan 2022 14:48:07.3625 (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: AM6PR03MB5236 Subject: [FFmpeg-devel] [PATCH v2 20/31] lavf/swfenc: switch to new FIFO API 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: Anton Khirnov Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: l/gIux49layW From: Anton Khirnov --- libavformat/swfenc.c | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/libavformat/swfenc.c b/libavformat/swfenc.c index 1fd2ad81a3..9eb22ee9b3 100644 --- a/libavformat/swfenc.c +++ b/libavformat/swfenc.c @@ -38,7 +38,7 @@ typedef struct SWFEncContext { int swf_frame_number; int video_frame_number; int tag; - AVFifoBuffer *audio_fifo; + AVFifo *audio_fifo; AVCodecParameters *audio_par, *video_par; AVStream *video_st; } SWFEncContext; @@ -211,7 +211,7 @@ static int swf_write_header(AVFormatContext *s) } if (par->codec_id == AV_CODEC_ID_MP3) { swf->audio_par = par; - swf->audio_fifo= av_fifo_alloc(AUDIO_FIFO_SIZE); + swf->audio_fifo = av_fifo_alloc2(AUDIO_FIFO_SIZE, 1, 0); if (!swf->audio_fifo) return AVERROR(ENOMEM); } else { @@ -362,6 +362,12 @@ static int swf_write_header(AVFormatContext *s) return 0; } +static int fifo_avio_wrapper(void *opaque, void *buf, size_t *nb_elems) +{ + avio_write(opaque, buf, *nb_elems); + return 0; +} + static int swf_write_video(AVFormatContext *s, AVCodecParameters *par, const uint8_t *buf, int size, unsigned pkt_flags) { @@ -454,12 +460,12 @@ static int swf_write_video(AVFormatContext *s, swf->swf_frame_number++; /* streaming sound always should be placed just before showframe tags */ - if (swf->audio_par && av_fifo_size(swf->audio_fifo)) { - int frame_size = av_fifo_size(swf->audio_fifo); + if (swf->audio_par && av_fifo_can_read(swf->audio_fifo)) { + size_t frame_size = av_fifo_can_read(swf->audio_fifo); put_swf_tag(s, TAG_STREAMBLOCK | TAG_LONG); avio_wl16(pb, swf->sound_samples); avio_wl16(pb, 0); // seek samples - av_fifo_generic_read(swf->audio_fifo, pb, frame_size, (void*)avio_write); + av_fifo_read_to_cb(swf->audio_fifo, fifo_avio_wrapper, pb, &frame_size); put_swf_end_tag(s); /* update FIFO */ @@ -482,12 +488,12 @@ static int swf_write_audio(AVFormatContext *s, if (swf->swf_frame_number == 16000) av_log(s, AV_LOG_INFO, "warning: Flash Player limit of 16000 frames reached\n"); - if (av_fifo_size(swf->audio_fifo) + size > AUDIO_FIFO_SIZE) { + if (av_fifo_can_write(swf->audio_fifo) < size) { av_log(s, AV_LOG_ERROR, "audio fifo too small to mux audio essence\n"); return -1; } - av_fifo_generic_write(swf->audio_fifo, buf, size, NULL); + av_fifo_write(swf->audio_fifo, buf, size); swf->sound_samples += av_get_audio_frame_duration2(par, size); /* if audio only stream make sure we add swf frames */ @@ -535,7 +541,7 @@ static void swf_deinit(AVFormatContext *s) { SWFEncContext *swf = s->priv_data; - av_fifo_freep(&swf->audio_fifo); + av_fifo_freep2(&swf->audio_fifo); } #if CONFIG_SWF_MUXER From patchwork Mon Jan 24 14:46:06 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 33785 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:e71a:0:0:0:0:0 with SMTP id b26csp388565ioh; Mon, 24 Jan 2022 06:50:12 -0800 (PST) X-Google-Smtp-Source: ABdhPJw1LoXL5LBGbZmoG8QJzYwkbvLTwbu8qoLI20QWlVnvSBRPxKXIG4MojDG+KAU6K8IyMkMt X-Received: by 2002:a05:6402:394:: with SMTP id o20mr15871889edv.257.1643035811865; Mon, 24 Jan 2022 06:50:11 -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 e4si9157798ejs.21.2022.01.24.06.50.11; Mon, 24 Jan 2022 06:50:11 -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=n9XfTUVB; 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 8516A68B161; Mon, 24 Jan 2022 16:48:19 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05olkn2071.outbound.protection.outlook.com [40.92.90.71]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id E337468B08E for ; Mon, 24 Jan 2022 16:48:17 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=fhHwzmdoJ42ACUckzfixexu12JkdkS/F63+/ONswuF4i5Tl6U67PI1L/+8OMNH1HzF2PvFSp39sCZHZDy9QNyBuKfmOvtaJ570xdcI2AJsxs8C/oa05MLPg2hI6QoQwOQ/Ug+ZoRURWlOJEFE9ACrIaDm4Tom0dhkIKoC32r5QvKApYA8Kb7Y42x4Xjcm7iW6cpFt6cOMIVXzXvP7Eu/IdRLcWazl8EmFPq7ZOCTXErez6sPHNf77Mh3OQmDFyg/B7Q4YtTaCjp9eJgUBjuqG0gn/zZjjDYwFwX75DzP4FrJfVuUYsNheAu2Bom/yTRqsn1P8Sn7JWyfLEqyfk6JJw== 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=dY55ZCWXjH5/lwmqivFgj0thacWstdMsr9Th5t5yHT8=; b=fT0tavlIC87Sacb1wYyVhjI9P4DCwB6Fg6I5jKEWfYfjgg3WzARMZdZ5/djTc5KxDXaovclcouX5Dn7AgbsTfy7WoDri9ZbE6klIT8JJ93eXvUhh+/fsPJpdC61bPtE8pvvUzvbYl6WRBIQaoiAyZCTuZEyHDHKFAceEOF8etXG6upjDKMFv3nd5Nh+JLJchx2JrkmOmXCsTrgCB0+RrSUr0Ipb6ReTg6J9w3rytxPjSpmprWITuNLob+bwCjZon3QxWX57CtRef+WdXPv87Y/pnO8L5UgayNjomKAOcSqaciD2MLjMkTpDcIk4mDE97oyKahr2pH1EeiMNtIG4yNg== 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=dY55ZCWXjH5/lwmqivFgj0thacWstdMsr9Th5t5yHT8=; b=n9XfTUVBf+9U9qSU7Nux2bI6iBcP/aRF41ZldU42vVy1gJ9TwspHUBsdP92h2RUBt1R/oKsL6XYxzGh2iNriSQdvqqV7pIUGIfxOmP4lI2NTdHShYSI0iVc4et+ZzP7b9SmU745wzR3bQj2M9EwHSVIJz2KZBuubAnHsJQAIWaKRFOn53qPN6W+cwESdvXyhtEPBd10a/HC7g/E2Uh7Sffd7tAiNIPjybY4YW0L1l99FoOD8yKLvaGt4hoHX79LRPGWEDQpC1n4xiv0tMhyF8dE3zhkW61vKtibJ1F9MrujtwDzgbXf1IGwpDlJ8sgZqdAX1qTkZ7BNFuoKoTie7GA== Received: from AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) by AM6PR03MB5236.eurprd03.prod.outlook.com (2603:10a6:20b:c4::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4909.17; Mon, 24 Jan 2022 14:48:16 +0000 Received: from AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::ac56:2ff4:d304:ab22]) by AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::ac56:2ff4:d304:ab22%4]) with mapi id 15.20.4909.017; Mon, 24 Jan 2022 14:48:16 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Mon, 24 Jan 2022 15:46:06 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [8d1Liy6eO9Z2aV+HcSVmPL1P8AoGQSbS] X-ClientProxiedBy: AM5PR0201CA0016.eurprd02.prod.outlook.com (2603:10a6:203:3d::26) To AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) X-Microsoft-Original-Message-ID: <20220124144616.559446-21-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: b2273e3c-eb79-4edb-4a91-08d9df488de9 X-MS-TrafficTypeDiagnostic: AM6PR03MB5236:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: Ei/iQTa9SoixF1DJo70YQl5eSf5a/wBYSt+og6+nzzP0mbvsmrQ8iKkuijouL5bDVek+OSz9ef3ncO+YUhUpCgNDtP3JEnhwa0vNItsbc3QctactI77DJFP97wub9+tUgRer1TTwX3Jeruxxdq6CJnAwfwBKsejf54EMtfYQguVb8IHT6iOYpWX3YOLoOOgdZJGhF0t/OdaV+LOsP/F6weIW/4fXNkXqFuTmliRTxeaowZPqVlwWugpX7qawz8ZEFg6O8A0xRWxyQDpJSnucgmwK6Zmr/qv/7aWqTUS3aG3n5fxO4D/p2NSQQC9fO0npnswWBhhZQxh7c9NAe6z4UTCm2nUd98NoJT9tr3BbIWNY6n22kOIEWvIdTnm0LYFFxnuCCvd2O0a9N0//ugkqjpxmsZ5+LSMniP2kyilBfCrlWMYCgbwE6HYMFYUYOZ17hN5UCozXkGeYVWxpByL+40BbAnW3hy2eE/Ii7vLUSMQO86/qVeZ24RLSmJIDFcJ3ys9xuvIb1NuYmgYtwz4TmWEhkHAPEy7MUTLzqZLNSkRfrhpjgWzOLgCvd/9dmKu3Qk/JwYlv1GoByj1toIQgeA== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: aGPaDZVBL24BOSTqdQE3xUVVNPg5yKzoDqYEotbGGNXBtAxqpkfRFVCCHakU/iHUsO3AAm/1I0aKPV0cEbdJlH+vquTAs4Kr8z/eWenrOY5p9lEpVcjvfdh8mVe4BMQRDXm3LEpuH7imrPzbEnk8ZLzDxDn72IpIVdljjtbF34s4fmiIIZQIWYhOAPqjB+NCpjbN70defvbkVGG0gWZ6t3FzhUWSodZKp0ksahf+aTW+Hw0Nphje/RVW0/hJCZGStc/d2NHx2YFSiMnP6RqXizcxWjZbPdrTPDOd1qp/4z97g99NasprsP9HTDgt9mxxt/z3H+d0MhkRoNDFKEGv69bYXdKyrPf9GPUHPM3kQGsmO1HYqAtJmRxnToAVeyIksIcn4jSvXNufs7YlriBt1RCLCbXoZNlVeK6yEY9AzqAYCV0D+bho+AjKqs5lEF56SieSRsBvCjMjy8L/YxnK4FZl7P/sSXYMNBBCnnroxPcOuXsLKNk5QVC25g6KBf/E4zS4A9ResJshq6EHc+lMD7YWRUKxl7qwothu/nVHOagMXmgWUpkd6FXIQnU9NrWIIwwvbIksL2howOFGcnRirJmDFdfp+k0bbSFQid8OlX4KRU9rioyFCYgTUH5O7gr/h7sbWKK53aRV5uWyAG2sy74vUWKA+HyAnhezkk0L83N3jPg1oZKVeX2z7ZRsRhAq+YP3we3c6IFw/EpSCdEZYnysN/c30kW2K75dIvycgjN39ts5SIn2wnhz3v42eCcGH+nhnKRX5GY3wWvl3X/bMq4YCIJHd8qBGFmYKZwM7KmVEClHRRx0PwmH9MT7eY4xVCsEOvpLfgi6EbpHRakxfLim34i4wOWYOpMpSuw5H/AdK669kkzBDuQzIi6kPUu2d2u5Mz/3CmgknApm6sH/2Seq8SQdPjTT/8epfJZcfB7OCHaaRU/y4FGtiXfOQk5nkYP00LVsAJBwy1cW87aqmw== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: b2273e3c-eb79-4edb-4a91-08d9df488de9 X-MS-Exchange-CrossTenant-AuthSource: AM7PR03MB6660.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Jan 2022 14:48:16.3182 (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: AM6PR03MB5236 Subject: [FFmpeg-devel] [PATCH v2 21/31] lavf/udp: switch to new FIFO API 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: Anton Khirnov Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: y9/SOUgMhleu From: Anton Khirnov --- libavformat/udp.c | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/libavformat/udp.c b/libavformat/udp.c index 83c042d079..1737aee1c2 100644 --- a/libavformat/udp.c +++ b/libavformat/udp.c @@ -98,7 +98,7 @@ typedef struct UDPContext { /* Circular Buffer variables for use in UDP receive code */ int circular_buffer_size; - AVFifoBuffer *fifo; + AVFifo *fifo; int circular_buffer_error; int64_t bitrate; /* number of bits to send per second */ int64_t burst_bits; @@ -500,7 +500,7 @@ static void *circular_buffer_task_rx( void *_URLContext) continue; AV_WL32(s->tmp, len); - if(av_fifo_space(s->fifo) < len + 4) { + if (av_fifo_can_write(s->fifo) < len + 4) { /* No Space left */ if (s->overrun_nonfatal) { av_log(h, AV_LOG_WARNING, "Circular buffer overrun. " @@ -514,7 +514,7 @@ static void *circular_buffer_task_rx( void *_URLContext) goto end; } } - av_fifo_generic_write(s->fifo, s->tmp, len+4, NULL); + av_fifo_write(s->fifo, s->tmp, len + 4); pthread_cond_signal(&s->cond); } @@ -548,22 +548,22 @@ static void *circular_buffer_task_tx( void *_URLContext) uint8_t tmp[4]; int64_t timestamp; - len = av_fifo_size(s->fifo); + len = av_fifo_can_read(s->fifo); while (len<4) { if (s->close_req) goto end; pthread_cond_wait(&s->cond, &s->mutex); - len = av_fifo_size(s->fifo); + len = av_fifo_can_read(s->fifo); } - av_fifo_generic_read(s->fifo, tmp, 4, NULL); + av_fifo_read(s->fifo, tmp, 4); len = AV_RL32(tmp); av_assert0(len >= 0); av_assert0(len <= sizeof(s->tmp)); - av_fifo_generic_read(s->fifo, s->tmp, len, NULL); + av_fifo_read(s->fifo, s->tmp, len); pthread_mutex_unlock(&s->mutex); @@ -906,7 +906,7 @@ static int udp_open(URLContext *h, const char *uri, int flags) if ((!is_output && s->circular_buffer_size) || (is_output && s->bitrate && s->circular_buffer_size)) { /* start the task going */ - s->fifo = av_fifo_alloc(s->circular_buffer_size); + s->fifo = av_fifo_alloc2(s->circular_buffer_size, 1, 0); if (!s->fifo) { ret = AVERROR(ENOMEM); goto fail; @@ -943,7 +943,7 @@ static int udp_open(URLContext *h, const char *uri, int flags) fail: if (udp_fd >= 0) closesocket(udp_fd); - av_fifo_freep(&s->fifo); + av_fifo_freep2(&s->fifo); ff_ip_reset_filters(&s->filters); return ret; } @@ -970,19 +970,19 @@ static int udp_read(URLContext *h, uint8_t *buf, int size) if (s->fifo) { pthread_mutex_lock(&s->mutex); do { - avail = av_fifo_size(s->fifo); + avail = av_fifo_can_read(s->fifo); if (avail) { // >=size) { uint8_t tmp[4]; - av_fifo_generic_read(s->fifo, tmp, 4, NULL); + av_fifo_read(s->fifo, tmp, 4); avail = AV_RL32(tmp); if(avail > size){ av_log(h, AV_LOG_WARNING, "Part of datagram lost due to insufficient buffer size\n"); avail = size; } - av_fifo_generic_read(s->fifo, buf, avail, NULL); - av_fifo_drain(s->fifo, AV_RL32(tmp) - avail); + av_fifo_read(s->fifo, buf, avail); + av_fifo_drain2(s->fifo, AV_RL32(tmp) - avail); pthread_mutex_unlock(&s->mutex); return avail; } else if(s->circular_buffer_error){ @@ -1043,14 +1043,14 @@ static int udp_write(URLContext *h, const uint8_t *buf, int size) return err; } - if(av_fifo_space(s->fifo) < size + 4) { + if (av_fifo_can_write(s->fifo) < size + 4) { /* What about a partial packet tx ? */ pthread_mutex_unlock(&s->mutex); return AVERROR(ENOMEM); } AV_WL32(tmp, size); - av_fifo_generic_write(s->fifo, tmp, 4, NULL); /* size of packet */ - av_fifo_generic_write(s->fifo, (uint8_t *)buf, size, NULL); /* the data */ + av_fifo_write(s->fifo, tmp, 4); /* size of packet */ + av_fifo_write(s->fifo, buf, size); /* the data */ pthread_cond_signal(&s->cond); pthread_mutex_unlock(&s->mutex); return size; @@ -1112,7 +1112,7 @@ static int udp_close(URLContext *h) } #endif closesocket(s->udp_fd); - av_fifo_freep(&s->fifo); + av_fifo_freep2(&s->fifo); ff_ip_reset_filters(&s->filters); return 0; } From patchwork Mon Jan 24 14:46:07 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 33786 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:e71a:0:0:0:0:0 with SMTP id b26csp388728ioh; Mon, 24 Jan 2022 06:50:23 -0800 (PST) X-Google-Smtp-Source: ABdhPJz87GWbzW858Wl1dl+/u4IQ1lrm2JhJGoY933SpgT2d4K3yJPY6q6f9oh1RYGnYPX04ZMEj X-Received: by 2002:a05:6402:11ca:: with SMTP id j10mr16409357edw.169.1643035822616; Mon, 24 Jan 2022 06:50:22 -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 qa30si1869155ejc.423.2022.01.24.06.50.21; Mon, 24 Jan 2022 06:50:22 -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=b6FRvRv6; 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 9962868B167; Mon, 24 Jan 2022 16:48:22 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR05-DB8-obe.outbound.protection.outlook.com (mail-db8eur05olkn2053.outbound.protection.outlook.com [40.92.89.53]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 06EB768B143 for ; Mon, 24 Jan 2022 16:48:20 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=C+ZouZQyRIfGCmA9+7F4ZWMs0dISa1yyX6WSNeE2XXAsInGnYmJAkQKIaXM1nspJE0IfvU8KbBrGIE2NzYqTY/WJ/IGqnct8CNcVYdBsLD1C7imcQiCNISawRk+iAcNb/THXVMRokv8fW6RkzLQla9CoBZUDdqxLuR1HLBM93IjsMp19DAeNV7nVou6n9Qiu85ztFFdbyFpUagiC/JA/pjRW0DjhB2Blj7rdcM6j2Muq3C6j4c/JuLZkUfBPwNocomeG08kzSV63Uy9f/fYsouv35hGjCXMs4mtoq7i5a16ongbfeADn1nZXf83YriWweIjZ/HJak3Nyxn2p3qFDqA== 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=cyHVm2mR580w6HeWBDg+d8i5Rt7bqbR583rQ9adMYNU=; b=fowu2nC++7NSv/7Yueaa90ye/L+E8l9pxXiv9kBFIHTlknT0/m4hg3K/u/3H8MaJnfyYUJ9q5aNRROppMcOvmaTY5LqrAQivWI4WuEe/FA648kFTpCH+jfPedLQLoNglYRURN1kUzlcpu6Hnsht6IyC4spFQJHRlkgSOWhTtazIiIasoP5tNWFF48Gc6BFBwuJCyPDUbLkwqsyWd58bZC4pzZFSjTfDWuX0FAQSBWgPHEjs2AocHm973v1kUC3YEChHR2rd2sSaSEDaxQW+IhB4mw1a12XNFfQjI6PyMCVd4D3Etylmr88dKIwD63FwaFS1P/NVbwzYRUaYBL3MY7A== 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=cyHVm2mR580w6HeWBDg+d8i5Rt7bqbR583rQ9adMYNU=; b=b6FRvRv6t/xgZsguUMZXVCLODlmY2r5VvE2oCJus3yW+rAHgLKVq3C93Wqs59wS3jZPHt1XLlHo0NNz+l5Ou73z33h1EuImMO3dqlZKMyAJ90NqDXdiHfAqaOkjac46/q4Hl1B5SkVE9WDnbM8F9f3dy0+toNFjuBoApObonu0jQ/0CpXxNcB1GPjKksjLmtjYpXMBByDBlrG0HF4zbJ6LoEQnL8vi2GzOWOiAFG5LJPjRtUV6NFOxDXhCf2gXYlRpNywyaOveyTzbbbtsRRK7SrkZ/SadgBY2LIEobkGLcCkslppEYcrwyLd+QAvicWb6XF3UWvJkoTfVXlTpnfPQ== Received: from AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) by AM0PR0302MB3187.eurprd03.prod.outlook.com (2603:10a6:208:7::30) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4909.17; Mon, 24 Jan 2022 14:48:18 +0000 Received: from AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::ac56:2ff4:d304:ab22]) by AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::ac56:2ff4:d304:ab22%4]) with mapi id 15.20.4909.017; Mon, 24 Jan 2022 14:48:18 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Mon, 24 Jan 2022 15:46:07 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [n3KUoK2O4SDo+h3imNUcKcSZl7eAXzbI] X-ClientProxiedBy: AM5PR0201CA0016.eurprd02.prod.outlook.com (2603:10a6:203:3d::26) To AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) X-Microsoft-Original-Message-ID: <20220124144616.559446-22-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 85bc401d-77df-4174-a61d-08d9df488f70 X-MS-TrafficTypeDiagnostic: AM0PR0302MB3187:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: ZTAYs516C4aZBv1XnC6wniQm5p2ZWzdfGjw7wcia/uJiAVHCwXkIKM3aE8l27kcGOo2v091JH+hrsZJwnQbNtE/wDEK4wfrrGn+a7JhKZciB3JMqhgH6s21XMW6k9BBg4jmXSl58h4A0V4r25sh8ljIAq5tXyIRMSvUP3lyOQf0R6y3mY9Smn97ZPBoK4MGb9bRjy5IuzkL2z9gpQySmuTpUpsPjyOon0znMLIos+2ia9wfyfHscXYy9fwBfCl7ZEVAALpBWmfynUs6qC30UVMZ+l8ABldocfDDM7QhpsuiuMK8WgTU/gF9t9rp+4TLrzva8brDRLGtBwodtc7AQpx0SOxC9TumMacU8NqSa3U5s7fwJeMabQ+ESC9uTjVkFcc7K1mpvnwe0GtosC5WHZPZry6E7YZdE/IDD7OKTbFCQ1FtFbjWliwoxkPdgd0aX6amfxQUKMNqTXxPfoRIQByvVscZd7R4xQ/zWkizBcYSgonxNnJTeYlqKXW5RQt6AMUwu2HFg8Tv69sxMMnBCb/ohTrmCAf7aSkORjZHyj3Iabb2pL5KBWvyLeLxfRvTZCI97jlg9+bZKz9dTtHhSiA== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 1Mt/PEtYMY2vXca/Sz5eo1HI6042iltCopNV1zxL7CG0Gf1aMeNt+g4yDqTO5XEIPYi9uPPnRQUDX3aXE3GUJ76VYHkXeW0iAo/WrQnQPtdsHKH4YdQ+kNwDorfSnfeIX2JwsJ/Oiik9PqZJIkpu++4gUZnJeHklbAbqKqt+jMcapsXXoOG/oh+b+billtX+bhSIN5jrxHvuXQAWXzmrik2NlXTk+mRAThkyRIu5p4yxW1p9QYJWceZEJqGoOcodVJeA8MVMThOwPiCjECxVaZ6rnb3wmvIdKslJpJdndsSQ4GZ+JnzhREB7EBvsQYyD2CFHCB9aIjjKobkLxyfwu9HbAl2hAaukx9IzWeLuwbmWBbs5J4M/z1M9TDn7k9rKdXFO71/uf5/DmXYJbIGTwIZKAGk4GOhp5UyEKDR/IKASECYNBpU6eMsj2iHR70lOQbvlL7uMQEciEpnd3NHRybZV/z5EiaRAsL1QEv/mVfEfoNQnluXT1fvBJz5lWRzuOUimnt4KYSgPFdMQhPvzHG1kt6vZPuwChNT69WJ+LsrvVC/4ArWRUf2rQExGL7GHQTMQ9BkAoisEn/lv6NE9euX3bS9Ya9ljpFpC6UAEVURdvBbY5cqj0JAyqrnKaAFnVXmreupxz1zZIRRTF5wcY63kUQnUhYpaNRRTJXBz/fhYZL6RUfnMCbSXGymCkVXi88RYsUxziQnzoY24HphdHlzchCf+qSWKatcvVZEisH84pVHy7FTqCaz4miBud67voSCrVQHQ1hXv0MCtTGFCEOnM7fuPi4PJ1ak3ysqJVjrNhBZbdO4NUPKKX6FP7nnR51DsIJwlB+6/a599bnKG52gY2OyZp11UHjSaHcFD6aNGrTcDDJBxKWCe/633RF6aqGEEfk2zfbBGzPZ16nOu4Tb9BPkwflHk5EOSb+EcMmMkdWg+OZO33eMckygNeU9jqGGTro/S6/cIRCvUGb4vkQ== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 85bc401d-77df-4174-a61d-08d9df488f70 X-MS-Exchange-CrossTenant-AuthSource: AM7PR03MB6660.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Jan 2022 14:48:18.8830 (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: AM0PR0302MB3187 Subject: [FFmpeg-devel] [PATCH v2 22/31] lavf/async: switch to new FIFO API 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: Anton Khirnov Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: DhdhDSO7fpF7 From: Anton Khirnov --- libavformat/async.c | 68 ++++++++++++++++++++++----------------------- 1 file changed, 33 insertions(+), 35 deletions(-) diff --git a/libavformat/async.c b/libavformat/async.c index 5a81507ef1..547417aa1e 100644 --- a/libavformat/async.c +++ b/libavformat/async.c @@ -47,7 +47,7 @@ typedef struct RingBuffer { - AVFifoBuffer *fifo; + AVFifo *fifo; int read_back_capacity; int read_pos; @@ -83,7 +83,7 @@ typedef struct Context { static int ring_init(RingBuffer *ring, unsigned int capacity, int read_back_capacity) { memset(ring, 0, sizeof(RingBuffer)); - ring->fifo = av_fifo_alloc(capacity + read_back_capacity); + ring->fifo = av_fifo_alloc2(capacity + read_back_capacity, 1, 0); if (!ring->fifo) return AVERROR(ENOMEM); @@ -93,45 +93,59 @@ static int ring_init(RingBuffer *ring, unsigned int capacity, int read_back_capa static void ring_destroy(RingBuffer *ring) { - av_fifo_freep(&ring->fifo); + av_fifo_freep2(&ring->fifo); } static void ring_reset(RingBuffer *ring) { - av_fifo_reset(ring->fifo); + av_fifo_reset2(ring->fifo); ring->read_pos = 0; } static int ring_size(RingBuffer *ring) { - return av_fifo_size(ring->fifo) - ring->read_pos; + return av_fifo_can_read(ring->fifo) - ring->read_pos; } static int ring_space(RingBuffer *ring) { - return av_fifo_space(ring->fifo); + return av_fifo_can_write(ring->fifo); } -static int ring_generic_read(RingBuffer *ring, void *dest, int buf_size, void (*func)(void*, void*, int)) +static int ring_read(RingBuffer *ring, void *dest, int buf_size) { - int ret; + int ret = 0; av_assert2(buf_size <= ring_size(ring)); - ret = av_fifo_generic_peek_at(ring->fifo, dest, ring->read_pos, buf_size, func); + if (dest) + ret = av_fifo_peek(ring->fifo, dest, buf_size, ring->read_pos); ring->read_pos += buf_size; if (ring->read_pos > ring->read_back_capacity) { - av_fifo_drain(ring->fifo, ring->read_pos - ring->read_back_capacity); + av_fifo_drain2(ring->fifo, ring->read_pos - ring->read_back_capacity); ring->read_pos = ring->read_back_capacity; } return ret; } -static int ring_generic_write(RingBuffer *ring, void *src, int size, int (*func)(void*, void*, int)) +static int wrapped_url_read(void *src, void *dst, size_t *size) +{ + URLContext *h = src; + Context *c = h->priv_data; + int ret; + + ret = ffurl_read(c->inner, dst, *size); + *size = ret > 0 ? ret : 0; + c->inner_io_error = ret < 0 ? ret : 0; + + return c->inner_io_error; +} + +static int ring_write(RingBuffer *ring, URLContext *h, size_t size) { av_assert2(size <= ring_space(ring)); - return av_fifo_generic_write(ring->fifo, src, size, func); + return av_fifo_write_from_cb(ring->fifo, wrapped_url_read, h, &size); } static int ring_size_of_read_back(RingBuffer *ring) @@ -161,18 +175,6 @@ static int async_check_interrupt(void *arg) return c->abort_request; } -static int wrapped_url_read(void *src, void *dst, int size) -{ - URLContext *h = src; - Context *c = h->priv_data; - int ret; - - ret = ffurl_read(c->inner, dst, size); - c->inner_io_error = ret < 0 ? ret : 0; - - return ret; -} - static void *async_buffer_task(void *arg) { URLContext *h = arg; @@ -221,7 +223,7 @@ static void *async_buffer_task(void *arg) pthread_mutex_unlock(&c->mutex); to_copy = FFMIN(4096, fifo_space); - ret = ring_generic_write(ring, (void *)h, to_copy, wrapped_url_read); + ret = ring_write(ring, h, to_copy); pthread_mutex_lock(&c->mutex); if (ret <= 0) { @@ -327,11 +329,11 @@ static int async_close(URLContext *h) return 0; } -static int async_read_internal(URLContext *h, void *dest, int size, int read_complete, - void (*func)(void*, void*, int)) +static int async_read_internal(URLContext *h, void *dest, int size) { Context *c = h->priv_data; RingBuffer *ring = &c->ring; + int read_complete = !dest; int to_read = size; int ret = 0; @@ -346,8 +348,8 @@ static int async_read_internal(URLContext *h, void *dest, int size, int read_com fifo_size = ring_size(ring); to_copy = FFMIN(to_read, fifo_size); if (to_copy > 0) { - ring_generic_read(ring, dest, to_copy, func); - if (!func) + ring_read(ring, dest, to_copy); + if (dest) dest = (uint8_t *)dest + to_copy; c->logical_pos += to_copy; to_read -= to_copy; @@ -376,11 +378,7 @@ static int async_read_internal(URLContext *h, void *dest, int size, int read_com static int async_read(URLContext *h, unsigned char *buf, int size) { - return async_read_internal(h, buf, size, 0, NULL); -} - -static void fifo_do_not_copy_func(void* dest, void* src, int size) { - // do not copy + return async_read_internal(h, buf, size); } static int64_t async_seek(URLContext *h, int64_t pos, int whence) @@ -422,7 +420,7 @@ static int64_t async_seek(URLContext *h, int64_t pos, int whence) if (pos_delta > 0) { // fast seek forwards - async_read_internal(h, NULL, pos_delta, 1, fifo_do_not_copy_func); + async_read_internal(h, NULL, pos_delta); } else { // fast seek backwards ring_drain(ring, pos_delta); From patchwork Mon Jan 24 14:46:08 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 33780 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:e71a:0:0:0:0:0 with SMTP id b26csp388890ioh; Mon, 24 Jan 2022 06:50:33 -0800 (PST) X-Google-Smtp-Source: ABdhPJxxbqJTL6whkKoPNBGNqkgyMDS1GLiaVo0bSG5kkAJNiIhixbaXhZHlmMIoOTIcPNFqWReG X-Received: by 2002:a05:6402:51d0:: with SMTP id r16mr8666025edd.415.1643035832946; Mon, 24 Jan 2022 06:50:32 -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 sc13si2246683ejc.164.2022.01.24.06.50.32; Mon, 24 Jan 2022 06:50:32 -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=RGBBTwdu; 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 A832468B177; Mon, 24 Jan 2022 16:48:38 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR05-DB8-obe.outbound.protection.outlook.com (mail-db8eur05olkn2050.outbound.protection.outlook.com [40.92.89.50]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 1363568AD15 for ; Mon, 24 Jan 2022 16:48:32 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=HjQn5DMp9wGVO8HnO/e774ydAjSKZ5MfCOJeLde2UjwR2nigQwI2nvv+VSaUyCQ0+MqUu3sIzMtEjq5Uivy2qtaQ8mmVT/5EgIe/kVV1QQS9LzlxcFzq9XX32Ah3dOcoPZ1W1/7L/ePdFbtUuuwCjss7X1duyK+8PcePHxJ0hNuPZ+w1vugRJd3hdtmW53YJjoj8nx9emGLnMTK7rPG1MpvbHCXedPoY4Kv56U39OAdCpGmG6zAN1yzsBJQ5YYq2vWRnBxX1hkX9GZnt1XBZ8Z+ziueOXibnMuFT0kwO04EN58vvOp1Rt4kDuJKrlpcQyWcybR0KEnP3R7R3KGQb5A== 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=aMb3FEnzxXKgSqbVbxcJAUwP9Zv9qgFp2xwBoos1cyI=; b=QFD7vdXwIDyi7DCY4MJciEZrIdGp/+YELtEO1fMmIQWFeoFiYPO04BntaGQSuNhRtIiJ2wRZ52a9M0knJ18Ur7B6MUF2YAq124AovzJQTHeRNbVynhJzTo06g8IfBTsUYfxjxD2ytM2uNm8u1HPlaKPOn5qKrXn9oYrcBbMPMMB42SpQ2rF0PcPp1lAydC+q0gf3OuHDN3Su0/bNDWjB9ioG8AHVUXwmn/eBIOsUW+YKCNShH5l96Wj7RjfKR+q5madJhiKiv/Q42v15AjXpa3Bc3HxqzlbK2raRDM7BZb+qypPz33XunY00AV+yu3Bxh0YN4zFFjdtVqvWknNsabw== 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=aMb3FEnzxXKgSqbVbxcJAUwP9Zv9qgFp2xwBoos1cyI=; b=RGBBTwduwax5fUHlFJVXUzKBbo9QHJYHv9sMNAq1BpU2QAVRPJNFqMtWTJK49tcyyTvyLBalESFMYy6CHK5On1FJHwrk5eIJHg+NeGw/QNuoeMB2rH8DLunIQadBs6wmF2pGLj9d8a98r9wrfmJUQjKv6xIqzm2wahswwDlV8IbLOglTfMS0OWVNDyF1yreQIB7n3X/jeino+YsL3ZvmEs2+bqx+78tMfId0+q01OCGxZ+gkD4SEf0gwQgc6U0VSvAH64ojUGsEcOmCmAy7LDGDHbl4VMMVkU6s5kUA7dH5AfDUx80g4YDmaGT9BMpeio45v0rdRgxH4udBSEIx4SA== Received: from AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) by AM0PR0302MB3187.eurprd03.prod.outlook.com (2603:10a6:208:7::30) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4909.17; Mon, 24 Jan 2022 14:48:30 +0000 Received: from AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::ac56:2ff4:d304:ab22]) by AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::ac56:2ff4:d304:ab22%4]) with mapi id 15.20.4909.017; Mon, 24 Jan 2022 14:48:30 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Mon, 24 Jan 2022 15:46:08 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [LbddDIkn3U5F8Rfutvta7DkIakjmcn/H] X-ClientProxiedBy: AM5PR0201CA0016.eurprd02.prod.outlook.com (2603:10a6:203:3d::26) To AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) X-Microsoft-Original-Message-ID: <20220124144616.559446-23-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: c144b6ff-8a59-4980-871a-08d9df48968f X-MS-TrafficTypeDiagnostic: AM0PR0302MB3187:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: RnK4GsMOeg3dUrqM3zg73M1tmDehiHvj6KSvHBMX5flrotKqgyAaEOv7LlfGsRLmTDHknkyqmRkKHkos5zj+YXgIN4rc4mPix3ZAvkMjh3R20Db1En8GtGEuzIz9W0J/B4io38ZdXx0Uya6u0n8KJTCaB/gSACLQmp98+1auaTvM8QHPOxcjkhmsN2GqZNltarCnz5GuTTU+o5d4QQ9aEIXArMAWsy4IxTCLfTlaz7gb+NJ/g/goIdsaQDgeCbdHEvveZ3FN5B4g4s4A+1Aai2i18VBJXRk4NAw9EY0NeZP+PfBn7trE8Av+lx9ETqPrpwwnB2D4o45gKv+fC+IxNiiFubcShPcXpYRnZSf7h+e0/1nwCyBX4qtE1Ic7FTga4I7LPiC3OCIvDYe9LzDHIWMYEdAEom95WAmqf7vbdgeeWPZP4nfXwml9PON92FhdvoEB/2bAua8hZO7LlfHvVpGP7Zr+ocdPfDwjiU6xpQIa1sKPR2jd42MVEzxog0GM/QChqWSZ0zp0sXiadB6mX6lEA2wrA2NBOTQrOmnzGAtiIgupLTMsmnNvtzVy3bbfsj5HKLxaeSyncTL+hxKd9w== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: vaVd1+Unh9sIxajBAkb+jiBNkJRcjEbbihJotz8LY+4EUMeAXN66qpEC0cORHK7wAhFXHdPFlkIJy770hsMcmmIOI+lDVI+7DRZYKlzO8IK3BRx/oNO0XVU2Mzp6ETdJZV6RKBThIKu0moO5vFfAJQevB9DmM3nveSKnkIo7O1JyQ2p3/wsM7IIkdjs6szNfHVwvAVmmhJWpU+DFz0mlMplsOphKYMiQbOURPTuqZsxEvktHDMm94gjRe/OkEWGAwGo8H2EoVXCJSEZqdivm7FyJ0kQu1IHb4Bn/pph11oQW7NnpPqZRGpBRR83CsY3BP8sMSCM0gxNmL8assinYrmUq+fGNBJvavD5SbUh3pu3zwQb7mo6TyLTgoobYaPgeZmWgGavCqXEst5KDdkh6FdSgB4yTmEzrvxwrbgQd0N6T4cEtv4B/+z6bFZANeyZNdyiFWTZ92c/nxM8dyFtAREq48dvJ4yS0lDBKOny2Jje7HWfAqw7vnEBvgHAjP6krJyx7jNgjYRIqf9qedgwPlkwhWfHKXcTDPT1oqmNrelctjOOgRHkXcVNmb9Oo9m4GGyUQRUR8AGo9B+KxTke2Y/RzYz/fR+z3761pAxXA7Jz0v3mD92tts6lCXmLV8Nwfv+Pp45PoslBdP5MeBSbbiUkzET4JVOiXSeT2vvnX1Hd8dshuf5lTB2DgPO3yX8hoPZY+6G7qNG2+ArdZQbWDiTZqurqJQlqx5Yip0bJw941bA/QcnD149CnWYC+gKeZBPAkB/WT/IWjk9/mPauqGB18ADETWerL+pxBtG746vCiWE2oee1O2xUypTR0/qMag/b9/RWQ/6wujXse5pajw6jwq0XaA5kH+j1vix9R0kX+Xzbq8/fl+XVvmbNH6+2VdrzvCkWOmFYvREURgqHskrvbuOjXA47i9/zPS2Wy67n7CTpUzezJPoVVXrApfQcuvEX1M0sb6HQpFY8zKnW/Ccg== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: c144b6ff-8a59-4980-871a-08d9df48968f X-MS-Exchange-CrossTenant-AuthSource: AM7PR03MB6660.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Jan 2022 14:48:30.8138 (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: AM0PR0302MB3187 Subject: [FFmpeg-devel] [PATCH v2 23/31] lavd/jack: switch to the new FIFO API 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: Anton Khirnov Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: TexdjGWU4rD5 From: Anton Khirnov --- libavdevice/jack.c | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/libavdevice/jack.c b/libavdevice/jack.c index 0d5465e407..b9a167bed3 100644 --- a/libavdevice/jack.c +++ b/libavdevice/jack.c @@ -50,8 +50,8 @@ typedef struct JackData { jack_port_t ** ports; int nports; TimeFilter * timefilter; - AVFifoBuffer * new_pkts; - AVFifoBuffer * filled_pkts; + AVFifo * new_pkts; + AVFifo * filled_pkts; int pkt_xrun; int jack_xrun; } JackData; @@ -81,13 +81,14 @@ static int process_callback(jack_nframes_t nframes, void *arg) self->buffer_size); /* Check if an empty packet is available, and if there's enough space to send it back once filled */ - if ((av_fifo_size(self->new_pkts) < sizeof(pkt)) || (av_fifo_space(self->filled_pkts) < sizeof(pkt))) { + if (!av_fifo_can_read(self->new_pkts) || + !av_fifo_can_write(self->filled_pkts)) { self->pkt_xrun = 1; return 0; } /* Retrieve empty (but allocated) packet */ - av_fifo_generic_read(self->new_pkts, &pkt, sizeof(pkt), NULL); + av_fifo_read(self->new_pkts, &pkt, 1); pkt_data = (float *) pkt.data; latency = 0; @@ -106,7 +107,7 @@ static int process_callback(jack_nframes_t nframes, void *arg) pkt.pts = (cycle_time - (double) latency / (self->nports * self->sample_rate)) * 1000000.0; /* Send the now filled packet back, and increase packet counter */ - av_fifo_generic_write(self->filled_pkts, &pkt, sizeof(pkt), NULL); + av_fifo_write(self->filled_pkts, &pkt, 1); sem_post(&self->packet_count); return 0; @@ -134,12 +135,12 @@ static int supply_new_packets(JackData *self, AVFormatContext *context) /* Supply the process callback with new empty packets, by filling the new * packets FIFO buffer with as many packets as possible. process_callback() * can't do this by itself, because it can't allocate memory in realtime. */ - while (av_fifo_space(self->new_pkts) >= sizeof(pkt)) { + while (av_fifo_can_write(self->new_pkts)) { if ((test = av_new_packet(&pkt, pkt_size)) < 0) { av_log(context, AV_LOG_ERROR, "Could not create packet of size %d\n", pkt_size); return test; } - av_fifo_generic_write(self->new_pkts, &pkt, sizeof(pkt), NULL); + av_fifo_write(self->new_pkts, &pkt, 1); } return 0; } @@ -193,9 +194,9 @@ static int start_jack(AVFormatContext *context) } /* Create FIFO buffers */ - self->filled_pkts = av_fifo_alloc_array(FIFO_PACKETS_NUM, sizeof(AVPacket)); + self->filled_pkts = av_fifo_alloc2(FIFO_PACKETS_NUM, sizeof(AVPacket), 0); /* New packets FIFO with one extra packet for safety against underruns */ - self->new_pkts = av_fifo_alloc_array((FIFO_PACKETS_NUM + 1), sizeof(AVPacket)); + self->new_pkts = av_fifo_alloc2((FIFO_PACKETS_NUM + 1), sizeof(AVPacket), 0); if (!self->new_pkts) { jack_client_close(self->client); return AVERROR(ENOMEM); @@ -209,14 +210,13 @@ static int start_jack(AVFormatContext *context) } -static void free_pkt_fifo(AVFifoBuffer **fifo) +static void free_pkt_fifo(AVFifo **fifop) { + AVFifo *fifo = *fifop; AVPacket pkt; - while (av_fifo_size(*fifo)) { - av_fifo_generic_read(*fifo, &pkt, sizeof(pkt), NULL); + while (av_fifo_read(fifo, &pkt, 1) >= 0) av_packet_unref(&pkt); - } - av_fifo_freep(fifo); + av_fifo_freep2(fifop); } static void stop_jack(JackData *self) @@ -313,7 +313,7 @@ static int audio_read_packet(AVFormatContext *context, AVPacket *pkt) } /* Retrieve the packet filled with audio data by process_callback() */ - av_fifo_generic_read(self->filled_pkts, pkt, sizeof(*pkt), NULL); + av_fifo_read(self->filled_pkts, pkt, 1); if ((test = supply_new_packets(self, context))) return test; From patchwork Mon Jan 24 14:46:09 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 33787 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:e71a:0:0:0:0:0 with SMTP id b26csp389077ioh; Mon, 24 Jan 2022 06:50:43 -0800 (PST) X-Google-Smtp-Source: ABdhPJwZiTHJ8q5jb/H+88oiUXVS7YMiCvew/w+hRx8kxMtdy/MVbzqeZY9c8aNjSG9ayXw+He5E X-Received: by 2002:aa7:da81:: with SMTP id q1mr15997161eds.280.1643035843412; Mon, 24 Jan 2022 06:50:43 -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 nc35si5677540ejc.80.2022.01.24.06.50.42; Mon, 24 Jan 2022 06:50:43 -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=TEn4rRuA; 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 B854868B188; Mon, 24 Jan 2022 16:48:39 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR05-DB8-obe.outbound.protection.outlook.com (mail-db8eur05olkn2050.outbound.protection.outlook.com [40.92.89.50]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 48C1E68AD15 for ; Mon, 24 Jan 2022 16:48:37 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=GwL40tlwOTfpVQtp7z+lnqF3OJxMyvj2poEDMWIOpJj78xaI51sTuZ+qBEBSHw1GjFg5LNBaVNOTnd4ApoQlIvugCiNd5un/c0Axskn42RAaD5oUrsTdZRkq0jupj8VqC6bFO1xjYz4/Pz3NcgfoANSTvMt7pOp3cpT2TMTm+yWAoI2p4fbvfjAK0i0N4x5KTmi93t/3401OVsUGzRBWyjJa0tHA7oCXCYT/DhhBnZ0Pjvrg7cm3brhb73J25Ri76VL+EJsldTTb2dOxzmOskRuwKi8xPN52ZhZGVOuZqU6S5/PS2Y/BOcqA8pGuxJjuE9fveqS2wY5inIkw3W+Cpg== 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=GurJAi7DM7tBMijjIZsPOifzhyZjfOddA4YELiEC/xc=; b=ZPkFiszTPQk/f1tU0YRrnFMwoOcbOpq3yE/Z3Uz1pJ87jmpHIbpJEZ7OAbHZTbl//sa/0VEXYnipElgfB+2XmXA8frwuCmiNJyZhDQ8ZsYZKheFBJiSaBtDO9YWkr4usFHu3+taLENyRAJWGYKfKqONAtooFfJzmL0SsaKkYtsS96dpWTYHZwAAgVFC2j66V9u7SBVhAJUcuhlVdQ8kv3pq9R8RhQh35+15e8+7rQd85NK3mKjZkZtl84D2DhkrNpryQQVBpVtzjCoNO+Vt5oL7sD/K+ld+2bsv9SOApi9BN/yJ/AbORp4viIctYeWNzsvBQmJgMbi2jScVGsMuCfQ== 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=GurJAi7DM7tBMijjIZsPOifzhyZjfOddA4YELiEC/xc=; b=TEn4rRuA0pknHg6V3tCF/aL/efcilLnlv27ndHOjrHba6TFGxUTpYYeh0pqzg26n0x0nRi6yeeuKN+MWsmTw1Z7jmSQ8BOTpj9VguZqrl26r+NrhXVSP2ZhcedUz/8bpEwTbUin67nvlGJpQ7k3TLavxt9RiPle/EmU7jK811fADT6dkwCaEwxbKBSHGm6lv8nXLkgXoEC0syrGM8cmmxA1/JTlO3FYDJ7gSYdUsnQXGEziwERAeR1K2ov8yD00/pkWTkB/t6mU1GXWthFdi+kCXWvLkAm2idUC/pM+/1Rav/Oj6s9juHjcKoGnjeV+3HqsqQGI5jpOLWm6tn3IzaQ== Received: from AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) by AM0PR0302MB3187.eurprd03.prod.outlook.com (2603:10a6:208:7::30) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4909.17; Mon, 24 Jan 2022 14:48:35 +0000 Received: from AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::ac56:2ff4:d304:ab22]) by AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::ac56:2ff4:d304:ab22%4]) with mapi id 15.20.4909.017; Mon, 24 Jan 2022 14:48:35 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Mon, 24 Jan 2022 15:46:09 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [IokuLJNtJlU3eiSbozXVWuNsUBf7LOam] X-ClientProxiedBy: AM5PR0201CA0016.eurprd02.prod.outlook.com (2603:10a6:203:3d::26) To AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) X-Microsoft-Original-Message-ID: <20220124144616.559446-24-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: be06926d-7f7c-418d-d89e-08d9df489917 X-MS-TrafficTypeDiagnostic: AM0PR0302MB3187:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: YNF79fRwTRewS35N5IfGwoFAdNJ/zWHl0wf1fQ6QjKpeUyBtG4Uz/49n/Thr4dgdQTmUhoHCDzY2ZsdJnuSB5s6MgTheuu9JjdboiJKMTa9VnzW+dajEgB0OJW9bZ+jKmoq97Ykr6JVIq2+bOVOZkAx7drPIZqwFnOy1im6BGPWmJ1wrK9bXieneO/zdSa0AHRQALNhS7/F3g2h9I1neHt1JbBp7tpNSsUsDr7En6AwecQZ1mF3IkZk1QbmL5OOH5L8ArH+hz6v/fDcxWc//+On+xZrW5Kd+57Hmw/+KmbXODV7p82uppPGq1YU+1n5lHC5PaW+xho+NJ6p6Kzue6BbBnTKkGQI3N/glFRYZUyvOVQ5+UEWGi+AMoxvsMOOOViH7PYgtOY7B2klHM2viWmCXSbDK8qv0Q0C+R3c2bWYQs6tn0IgM1N8xNp808CdOYpSOKr7XH6PtvYLx2ggFyRW4GMykRcGJ+4ka9GZMgJ0tnl7L92l7pF0I8zkKrcxnZEL3yFku2SZIbkuxJb/DmqnIrjj6UulCvTiFoO7RGcs1so7lQdIqFDZX1ME6trmbDFU31rpVzvhhIb7bafltWQ== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: j6ifx839wqBE2XutCCvGnisUQQyEtS9ouCGdoVwSR7Zn88Ap6hnAKo9yv81g5Xad+54tNs+iB9McmAsNWaq1J51dj12IsJkS4rHUNYXFEMYQ2XaVDJw5Jr87xWF6Ukt5chqI3BGS+1rGLjMHP2m0zVAg/HfRwumAtt9h4rnMh/zNtNYi7WpBDEr7GEamOW26Sh54W30hRC7dyFYft9ZH8Kw66jszpcCf+qfoabe0PLmqbmvu7MOxruEhXSE2F4TgOl217i/7XnDYLBgBQ1Ivv54Q65oXyRNkaAAnTjadJIg+rhfa/jtJL6Eu0xJeAY8Tl8+oyhobfAwhHwCTdCsidVY1JC+lu7zMcyWI4ugsL0PfJ/gcKxgR+2zyRwLFBdSN9hVrNBSha753tYEleoutCCFuzf3b5TRMOk8FndcvaykbcmPR1YsOr/yyVt+YisxsZloDKH26AVcg2bRCBEQCP9cQvKjZ3tPw45VdycJdzT96S+bd8oLwXyPjZrQksbLAIaNVEM5OBx9KenLiWxYWKjQMizv5/bHPcvgJPQpf2sSypg4QL5SIXaUqS9buJ7VLjHl91q/TaxPAV+XDqRbbO6O94mi0WfTdN96qSlwhk1iC7Nt/CG4iLi6BTLemrp3fnyxMWBT3wJ4f34fYmZ6rhz303WAlHpBtOObHSY4KChBhx2EJLn268qmOo3PfWIDDotLpAY7eGjH8sZ0ATLm5AjDcDyGM46yXqQEv5tHn9MGKvyNyKn2I0FW5ni5Yy2kl/GdN9R1l5C449nCnF81qy6nE1yfBSkxvGhaxSBLaeBYvT/9pzqg/mqprW6tfUWd0dm6F6YHSK4rSuPOx0ecNBLFZtRYD50dcIc9bLmV6+oKLAsk9JWhe06dXlaLtyJtwAKWbcMecaTHIdQj3covH/4v2JbhQkz2PoSeh9POZWEUNiMfjpRKeq8Yb1QSKK148WM7flU21PJTLdY7vFpOq3g== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: be06926d-7f7c-418d-d89e-08d9df489917 X-MS-Exchange-CrossTenant-AuthSource: AM7PR03MB6660.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Jan 2022 14:48:35.0626 (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: AM0PR0302MB3187 Subject: [FFmpeg-devel] [PATCH v2 24/31] lavu/audio_fifo: drop an unnecessary include 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: Anton Khirnov Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: pqP0jhw5rCh/ From: Anton Khirnov Nothing in audio_fifo.h uses anything from fifo.h --- libavutil/audio_fifo.h | 1 - 1 file changed, 1 deletion(-) diff --git a/libavutil/audio_fifo.h b/libavutil/audio_fifo.h index d8a9194a8d..9d570b04c0 100644 --- a/libavutil/audio_fifo.h +++ b/libavutil/audio_fifo.h @@ -28,7 +28,6 @@ #define AVUTIL_AUDIO_FIFO_H #include "avutil.h" -#include "fifo.h" #include "samplefmt.h" /** From patchwork Mon Jan 24 14:46:10 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 33788 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:e71a:0:0:0:0:0 with SMTP id b26csp389243ioh; Mon, 24 Jan 2022 06:50:55 -0800 (PST) X-Google-Smtp-Source: ABdhPJyMudpbtuj7aiiOhguaYCHerMZ3ZR2y3EogRySzOI9YMLI19b4Pj7NzcbALI7eAMToOyJ2n X-Received: by 2002:a17:906:6a09:: with SMTP id qw9mr5261389ejc.117.1643035854887; Mon, 24 Jan 2022 06:50:54 -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 ds3si9694086ejc.490.2022.01.24.06.50.53; Mon, 24 Jan 2022 06:50:54 -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=EwMk9nTY; 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 C94DD68B16A; Mon, 24 Jan 2022 16:48:41 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR01-HE1-obe.outbound.protection.outlook.com (mail-oln040092065057.outbound.protection.outlook.com [40.92.65.57]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id AD7CB68B185 for ; Mon, 24 Jan 2022 16:48:39 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=YaYPdfdBC+JT8Bp8bcsOY42CzOr05ZYPkraHUoBD4MjKqiR1MBQxm9L5isR1qFww3dpLtdV8n8IojgCCiEHHxMsI7LYAhhZo58p3th1Jmk9AAk92CyaoJI3w+VgnVmZ4qLWmojIHJAh92Gj0t5CsWi5buEizSKM8qqMxq++TsRkoruUR/12IFO1vJxbEk6FQGfGo1KjODdpmdhbpmzG6ppar8I3J7v7E85Yafgjci5bqI2PaM1Agaj9VWQGEDLskgrv74NKiJpc9E7rVxWF8HkBCZ8HU+cBb2r/c3ahtFKXNp/PpdF7vvZzlAMQ1vAtoJsAvsHZI3nsT2sN06bCl6g== 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=1QFwzacSfO+X2uw4MgGBL9X4+Lb3es5pnSB02G3hHa4=; b=kzbp2/TME2DTo4Inb/xNc7ut24m0I8JQ9urBrjMFJC0BS6fpFjCPmJtq3V8zODYt9dVypbbSvXAtMwEYFx1lDaq33q1sIf73PsaVD1CecQZXpt37Mu8MRC0GEm4KdKToJIJHACzLnBIcLfOoim4pCVyDUnp9S0JfsFYx2njICZhkcMZBiZLEv7zQV7T/VskAUmZSzVP31gD3itcJLikI+ohnhhQse0kTUhYSiHo/kh/rSAr3hI2C4MTZGnA+0klqcBpOvr7Cr3prvdvgaXCyU1L67qIgdu2vFHCqH/8KudTNw5RUbaGHFjJx/a5IqzMbcTnw6BMwofiiBSCzNkUmRg== 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=1QFwzacSfO+X2uw4MgGBL9X4+Lb3es5pnSB02G3hHa4=; b=EwMk9nTYOEUm7OYQpdYmXl4hyVN4rvaec3a40kR6Q4ey6kIE0IYl478TSP7f3Uj+RAEZrpIQHrxyjVy2UZWjamM70k5JZAZP3/GOHI5omD8UD9aKY0hftRbtjwLx76fxZfh10DlgLKZ16hjQe7Kq9zeCYoQhSxYSnNunGMFWpNPbNmM9WW+5S1loUMxIuMCIxHUQMfCTuvf50H/1O7YPkTshiMqa7nNDeJVKj25OMdBbgGtvU3fAZNLYe+uk8IOlfyhajexzNzKceI9QmSgjINKdUMAVqF+OKy0S9/eU232d8iCTBrlowTWSobZWLW0rh2srrIHeOK2cLD4BY7zvwA== Received: from AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) by VI1PR03MB4397.eurprd03.prod.outlook.com (2603:10a6:803:51::24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4909.17; Mon, 24 Jan 2022 14:48:38 +0000 Received: from AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::ac56:2ff4:d304:ab22]) by AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::ac56:2ff4:d304:ab22%4]) with mapi id 15.20.4909.017; Mon, 24 Jan 2022 14:48:37 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Mon, 24 Jan 2022 15:46:10 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [K0WHs/UO0h8OB6nQKjfKZnl++30mJkgc] X-ClientProxiedBy: AM5PR0201CA0016.eurprd02.prod.outlook.com (2603:10a6:203:3d::26) To AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) X-Microsoft-Original-Message-ID: <20220124144616.559446-25-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: d58ae57b-b28b-4f23-468e-08d9df489acc X-MS-TrafficTypeDiagnostic: VI1PR03MB4397:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: vrksYCywsBH5fkNbqRdeudC0D0OGDOmsdFLlsknj5OdW/eCg2hZQ5VwbtOj8zdJFdpJT+DNEwe8ODJjBZKdhk8qcBZd5PGfidTq9EZKqsBYoSxCQJ7YKQd35dvAgntDTMX1W2bu4piv/RYatSrK/dbtvH+4pbvWtTrYutA9t8W33QECaaGTeEqYG+OfjE+ur+QjhWQlWxFUJyPW6+69+mTFIKPmvFbOsHfde/IavBpoC3SVoJYJg1TxdabQ5iil4vv72ok5fmkbVESHe9ccyOAsApr6dARHOgKBgs7cdPGehdrniSW73diRTz+NeVJuAg19t7IIj17I3Hvher7Ea8zzGUk3IcUo29j5egrbgo7tLXf1RAxuIfDIoGGcdcdnPV6aPf+8ffEwlcgnAZHyDbYvl+tbAskj+Hj2FeawI6tIcE3a8kK+TZagakCcWEv00owItwDCm8bRYl7M2eRckVTIhEEgnHC7WNifCtd3ld6hSILa4MGOJ/dIplPKQ3U/bufHLjpzwnUpb+u6iCw8Zpqw/nisFvv2lz/Mia8jGAjBTfK524HGcSysCddVzxGHCD8+ImFaxxP77RvTaJP1Ghw== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: t+gstpCigo3tkteakIlOzaRuaI+YBOcDrF/nMgPKDSlI/Ge22b3IdhxIcOmH9xwDd7T019/KGqxTLmvUosqg4zSSn6rXKBfJzb2DMlcT3wDy97O52fK6l1R2etlOV+HKycUkDORFMie1Uyi6h7XubHtZrLKSJrZ3u3OCGIcMDHXKafGg8wWsBsYsAAQCgwiiNoQd4fvlFrMbtJyAHpmm8SmQwcEA4XLY3A5OYtgJ8GsJdRP9QhErFfFUWHMIrQPgY27pEiUHr4x7RppEYzoapFYiX9l5eFtpufd5X9xRu0+QyT65qZNEQY3cV3crHuE5quOkiJ8w5kGWDL5FrK3qNou2J2/SjY7qwIVODp5WcQ8P7V9+m2xhbx8XNKvUT1JQJGJtv52iFoMpnzXAxiIPZXdgSfa7EivN799KpJstYNeDNjUsWmN4KCBuv8Svc6AUc33GpT/JitVhFfIxXLAWix0Jb2hDGKw8FYA8IKbVxrrryHt9id4Wv2cuBNCu4HD7zJi2yoyPeVy77OkNUFCDLfpOy+52NuSu09t122Yq6Idd7+76yPELRFXT+CBZFd3860D3sEOHKwdj7OMpIlSnHYVyWgeUWlfGzogKZQYighAa/KiSmQ2ZN9aJv4+dhBdFfc+32O1V2QdDTqtMpuZx1FKOPA/taIhHCXKeZLMKxuQluuZH8x+t2a3QH2lC5Rv8f9u3U3vWCRlQMnLb8ufUSX0p6Jjk2Dec9dGRvAWQ2fP/AlX9Ddf1n/PkPOiSzuEgK7p0KHHaJ6xG9/c5lR33PzCBUALsMk/fYUF2Tqt/cB4Lcb5u7Sgsirs5lzLpHFJnRLEMyXOO4lS4t06b2tpWQK9M/kfLwgrLp3kGnNk+eBi6Ef+rb2DaPiC4rOhubyDd+ieXA/+uLdSiQPJcOtaAWvX+QC/CBYXPzEqrr02QyniYtIWR6/Ekyr5+aEdHazNcHaW30XIj1knNZNYS/Z2VMg== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: d58ae57b-b28b-4f23-468e-08d9df489acc X-MS-Exchange-CrossTenant-AuthSource: AM7PR03MB6660.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Jan 2022 14:48:37.9228 (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: VI1PR03MB4397 Subject: [FFmpeg-devel] [PATCH v2 25/31] lavu/audio_fifo: switch to new FIFO API 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: Anton Khirnov Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: jy/afaHxQXnZ From: Anton Khirnov --- libavutil/audio_fifo.c | 44 ++++++++++++++++-------------------------- 1 file changed, 17 insertions(+), 27 deletions(-) diff --git a/libavutil/audio_fifo.c b/libavutil/audio_fifo.c index 243efc39e4..b1355e55a0 100644 --- a/libavutil/audio_fifo.c +++ b/libavutil/audio_fifo.c @@ -32,7 +32,7 @@ #include "samplefmt.h" struct AVAudioFifo { - AVFifoBuffer **buf; /**< single buffer for interleaved, per-channel buffers for planar */ + AVFifo **buf; /**< single buffer for interleaved, per-channel buffers for planar */ int nb_buffers; /**< number of buffers */ int nb_samples; /**< number of samples currently in the FIFO */ int allocated_samples; /**< current allocated size, in samples */ @@ -48,7 +48,7 @@ void av_audio_fifo_free(AVAudioFifo *af) if (af->buf) { int i; for (i = 0; i < af->nb_buffers; i++) { - av_fifo_freep(&af->buf[i]); + av_fifo_freep2(&af->buf[i]); } av_freep(&af->buf); } @@ -80,7 +80,7 @@ AVAudioFifo *av_audio_fifo_alloc(enum AVSampleFormat sample_fmt, int channels, goto error; for (i = 0; i < af->nb_buffers; i++) { - af->buf[i] = av_fifo_alloc(buf_size); + af->buf[i] = av_fifo_alloc2(buf_size, 1, 0); if (!af->buf[i]) goto error; } @@ -95,15 +95,19 @@ error: int av_audio_fifo_realloc(AVAudioFifo *af, int nb_samples) { + const size_t cur_size = av_fifo_can_read (af->buf[0]) + + av_fifo_can_write(af->buf[0]); int i, ret, buf_size; if ((ret = av_samples_get_buffer_size(&buf_size, af->channels, nb_samples, af->sample_fmt, 1)) < 0) return ret; - for (i = 0; i < af->nb_buffers; i++) { - if ((ret = av_fifo_realloc2(af->buf[i], buf_size)) < 0) - return ret; + if (buf_size > cur_size) { + for (i = 0; i < af->nb_buffers; i++) { + if ((ret = av_fifo_grow2(af->buf[i], buf_size - cur_size)) < 0) + return ret; + } } af->allocated_samples = nb_samples; return 0; @@ -126,8 +130,8 @@ int av_audio_fifo_write(AVAudioFifo *af, void **data, int nb_samples) size = nb_samples * af->sample_size; for (i = 0; i < af->nb_buffers; i++) { - ret = av_fifo_generic_write(af->buf[i], data[i], size, NULL); - if (ret != size) + ret = av_fifo_write(af->buf[i], data[i], size); + if (ret < 0) return AVERROR_BUG; } af->nb_samples += nb_samples; @@ -137,21 +141,7 @@ int av_audio_fifo_write(AVAudioFifo *af, void **data, int nb_samples) int av_audio_fifo_peek(AVAudioFifo *af, void **data, int nb_samples) { - int i, ret, size; - - if (nb_samples < 0) - return AVERROR(EINVAL); - nb_samples = FFMIN(nb_samples, af->nb_samples); - if (!nb_samples) - return 0; - - size = nb_samples * af->sample_size; - for (i = 0; i < af->nb_buffers; i++) { - if ((ret = av_fifo_generic_peek(af->buf[i], data[i], size, NULL)) < 0) - return AVERROR_BUG; - } - - return nb_samples; + return av_audio_fifo_peek_at(af, data, nb_samples, 0); } int av_audio_fifo_peek_at(AVAudioFifo *af, void **data, int nb_samples, int offset) @@ -171,7 +161,7 @@ int av_audio_fifo_peek_at(AVAudioFifo *af, void **data, int nb_samples, int offs offset *= af->sample_size; size = nb_samples * af->sample_size; for (i = 0; i < af->nb_buffers; i++) { - if ((ret = av_fifo_generic_peek_at(af->buf[i], data[i], offset, size, NULL)) < 0) + if ((ret = av_fifo_peek(af->buf[i], data[i], size, offset)) < 0) return AVERROR_BUG; } @@ -190,7 +180,7 @@ int av_audio_fifo_read(AVAudioFifo *af, void **data, int nb_samples) size = nb_samples * af->sample_size; for (i = 0; i < af->nb_buffers; i++) { - if (av_fifo_generic_read(af->buf[i], data[i], size, NULL) < 0) + if (av_fifo_read(af->buf[i], data[i], size) < 0) return AVERROR_BUG; } af->nb_samples -= nb_samples; @@ -209,7 +199,7 @@ int av_audio_fifo_drain(AVAudioFifo *af, int nb_samples) if (nb_samples) { size = nb_samples * af->sample_size; for (i = 0; i < af->nb_buffers; i++) - av_fifo_drain(af->buf[i], size); + av_fifo_drain2(af->buf[i], size); af->nb_samples -= nb_samples; } return 0; @@ -220,7 +210,7 @@ void av_audio_fifo_reset(AVAudioFifo *af) int i; for (i = 0; i < af->nb_buffers; i++) - av_fifo_reset(af->buf[i]); + av_fifo_reset2(af->buf[i]); af->nb_samples = 0; } From patchwork Mon Jan 24 14:46:11 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 33789 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:e71a:0:0:0:0:0 with SMTP id b26csp389350ioh; Mon, 24 Jan 2022 06:51:04 -0800 (PST) X-Google-Smtp-Source: ABdhPJx9bMsu/xwY7hpOGoX6wFzn8gKcZHcezc8i6z0R3cNyPia0vRZJMLPmWLNfldiqhQV33Yo4 X-Received: by 2002:a17:907:7b87:: with SMTP id ne7mr2847482ejc.662.1643035864222; Mon, 24 Jan 2022 06:51:04 -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 b4si8312916ejl.229.2022.01.24.06.51.03; Mon, 24 Jan 2022 06:51:04 -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=Kyyd06hS; 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 07DEC68B07D; Mon, 24 Jan 2022 16:48:48 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR05-DB8-obe.outbound.protection.outlook.com (mail-db8eur05olkn2059.outbound.protection.outlook.com [40.92.89.59]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 4005668AF37 for ; Mon, 24 Jan 2022 16:48:45 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=XX2E0XPyrJHkLCd+sm539N1rWMuYFwvcYiPz226+uTPZwHCOqnv+UP3/w8LACJ4ksYvBob9oT8OCyHnXesyRtQsPnZ0j+O+Lv0eyy2evpXii4rLM5jpnZ5TRTx26AdVXCQ5qrKhJlTvG3HL9373CjcSviHYYuvBHQVBavNiVsVjU+ilO336eES2nV2YjglfR5gcPShfpxBI3X6nfcypq/3K3DnUZUVCGy4Hq7uMfRO0FSLYp0hDT4hkXF6O9RaiqW+CDi6sGFjdbY6Xsl7QRx6UXhOOciX8t7EtwifNwx/UVkCN+drCR4bQ16N4teL0rJWlx9vU65iiC1aEowY4oJg== 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=JXIOxM/iaBXevLPojidYqlrRPQJTWhyhpVDNTZVfRvg=; b=jCzNu2QmnaMBEaQXjxdgUedXiayXCX4HHAoqS4j3mOgYOpPxfpApP5m0XLGcQ+GIJzZOl5Cq5zEpRKSgqzeDO6ao9ITCpQTWmtFcvBppasxIHXCASVYCR7pxCrO69dJIVopC43/dHpH9c++b+dGHXlBfW/DY9cmjOMd7VIPnJL3CbZJB7/gz6tjEpMg5Kc+IHNC7lynhdJOxQ0NpPJg6T0nWr00UREh3nyYt56bgcKwgk3QnFKES04Mqqb+DSg+fOKHhZi7F803n5UmTaHYC9S/02dpzG6vh69skny9sopmJm4zowPaH1Bs7HCDe9Y5WNpXAXcEkYo/I8e63usd2WQ== 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=JXIOxM/iaBXevLPojidYqlrRPQJTWhyhpVDNTZVfRvg=; b=Kyyd06hSQ0b7znuokqAZwx6XB18LKX11d5L2ER/X06z7eg3hOOyl+nicQnWlfks43J3ND6uWrXxjIkYSj5NXvl9lultjtzKXYHIofCR5fQZ60FWsQy0xEHNoLOkF/GEWhpAsLGMAEH0DbmJJLv8Ja/PMHc21XmH27XVm21xZfa2ocMJibyepFEzmNOx3DO09l6nq/0OR0jJDTzGWEQNC2NEE3i7rSO4vI4UTEHGcRCPdGbULhvonbc3HHLO239LwPMQkBxt+/xfe9Y5QdnnXEbGcSEqCEVVprnTgMTZJRsGFvJT6ra5jK2NDqzD/aKcTmn69QgeTHmqUhrsb6STOPQ== Received: from AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) by VI1PR03MB4397.eurprd03.prod.outlook.com (2603:10a6:803:51::24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4909.17; Mon, 24 Jan 2022 14:48:44 +0000 Received: from AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::ac56:2ff4:d304:ab22]) by AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::ac56:2ff4:d304:ab22%4]) with mapi id 15.20.4909.017; Mon, 24 Jan 2022 14:48:44 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Mon, 24 Jan 2022 15:46:11 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [YRKOvju9r7r5Mm3FNMJSbTNeLG8UB3eF] X-ClientProxiedBy: AM5PR0201CA0016.eurprd02.prod.outlook.com (2603:10a6:203:3d::26) To AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) X-Microsoft-Original-Message-ID: <20220124144616.559446-26-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: a7ee8867-fca9-4c49-74f4-08d9df489ecd X-MS-TrafficTypeDiagnostic: VI1PR03MB4397:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: DrBn62Hi6iPf2LYjtkdK4KrsRkphIW2SKjWnPh2MNce7cMwa3NNuK63jdb1EAhHklYoNhlEaQzwACgtS/6az4aQR2W1TiThdh0z80PK1tqEKWlkE79+n0Sou3Ur1eA0ZJoRN/VMEBCisc3i2ebOIvhBR3yqZ44Epk+GgxwhA4+amqhWSSkyMCxd1tFfpknLrdVqivWYFVzGg/4pVvIBnZPrjRAKtzGuyDZbynZT2x3AOuS1PjZoxDDqzHQLeWfaD9St0ZOAHW3sMZFNiYhaSkBRWEV/fT0qVWJ/jenJo9NinO3A7ShjWnU6yARtoayLogKtoNNRFjjr/23j+zi7qzz27VdFJ1FAIBUsQ/C1YLnxkhi9fpludcBtlIT7RdC7KOrgIu8GGuyx9d6+ddDPcHM8FhJvqoexqAZLbXtI8BuE6fRFbnee+bY6G7PgWhBdJ13omvkJ1nq+BLUAmHIUub8oiZVtxB/hod6Jgx8cWXi/XBBQlZI7aF1QB+gYtm8mLm4MpIEOyc8OzgFH5hiFLG4iNHoQNWJBnnic1Jo8pRuvOIn3qA0fUC1QI7jKK3GtEENyuT3Wxw2PETGbcphsqBA== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: q7OGIfLuzI1gObANmz8kEM6pxWd3X8r0UEzwysHCG7xDwJrHVok7EsksraP3lBEQdLgMWPStNqzO+kTve8qlJfJKyQ9FJOsay26vL+pUEuITXTaWcFw7pbUKPOgAPDLsEmtf8IQH2+OvNJxNXIKJPue7G97aZ7pp5i4zizogovJUx28P0LW/d4A4w+RVkfEzuWifO1ZSHeeQTiHIyTcoVbJ7xGQgHlXzjujKUYGpePr3NZEOg40ZrX9soZWADnSXXRA69HXLYC5n40TTPXraDOSYDgboWDZawMxiAffUKhqtUDV+8nqwxYT+5eC3I8vCG3D9rz//7r6FSpHIPZYlVm5EVOXuCq1+a+LMFsimqDh8FZ/uxheqLNQh3u3DuyArd7L1WoaUskH3NXou75BNqfOCrxap8kt9Ie4msjJtB4Vp6i6CtaLcXGFjgCdhMI8G+x5eQq10rkzbAHjRMVjhzif+sEv3Ieu/aObHctoBdJ66NqotW6X7l6S0UlbBkrUy6C5s7EtWeRYk0N8alT82PI1pbmBbakmS+6xnq4G1Wn/AE2cJPND4ukM6F+smxHtU90autdXiJRs9+ilk1nyK1UYXUf8nT3599FPaNGBjKkODEQlKISn4ZL9HgT6n4iKQFDf2LkKwdOEmORrJQ+kEp2j+r2qvgoVPPJZGmR9zqxVk6hKb/DvxheAmzXGjBy+mLNaBmfOvOiCsBz2J/aqJggLj2OAupz9ymEAFeQX5+CH3E2qib8EhatMh0JyKgaiyFroTKPf7L3HdcaNgDLAZ9NLm5SMHN+g2sigPEfKvSRj+XueUMlkkzC+dV7oBO9olF1pNcsCZWIr3vWm7SNzzQjnvcUzbXRnAsZjGFcKgxQiB4AcShbfp1TIQ0Gn6sMUmHOXOwVdaENLzpB+eDFqD7cVorFLXECjAdyWvBXZXXXhpFkdQhNRYWRf6nciwf1HCKwIK30HtlEMj3EG3NSY3Yw== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: a7ee8867-fca9-4c49-74f4-08d9df489ecd X-MS-Exchange-CrossTenant-AuthSource: AM7PR03MB6660.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Jan 2022 14:48:44.7211 (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: VI1PR03MB4397 Subject: [FFmpeg-devel] [PATCH v2 26/31] lavu/threadmessage: switch to new FIFO API 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: Anton Khirnov Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: hFcf4Go6l6fx From: Anton Khirnov --- libavutil/threadmessage.c | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/libavutil/threadmessage.c b/libavutil/threadmessage.c index 764b7fb813..6f25da76d7 100644 --- a/libavutil/threadmessage.c +++ b/libavutil/threadmessage.c @@ -24,7 +24,7 @@ struct AVThreadMessageQueue { #if HAVE_THREADS - AVFifoBuffer *fifo; + AVFifo *fifo; pthread_mutex_t lock; pthread_cond_t cond_recv; pthread_cond_t cond_send; @@ -64,7 +64,7 @@ int av_thread_message_queue_alloc(AVThreadMessageQueue **mq, av_free(rmq); return AVERROR(ret); } - if (!(rmq->fifo = av_fifo_alloc(elsize * nelem))) { + if (!(rmq->fifo = av_fifo_alloc2(nelem, elsize, 0))) { pthread_cond_destroy(&rmq->cond_send); pthread_cond_destroy(&rmq->cond_recv); pthread_mutex_destroy(&rmq->lock); @@ -93,7 +93,7 @@ void av_thread_message_queue_free(AVThreadMessageQueue **mq) #if HAVE_THREADS if (*mq) { av_thread_message_flush(*mq); - av_fifo_freep(&(*mq)->fifo); + av_fifo_freep2(&(*mq)->fifo); pthread_cond_destroy(&(*mq)->cond_send); pthread_cond_destroy(&(*mq)->cond_recv); pthread_mutex_destroy(&(*mq)->lock); @@ -107,9 +107,9 @@ int av_thread_message_queue_nb_elems(AVThreadMessageQueue *mq) #if HAVE_THREADS int ret; pthread_mutex_lock(&mq->lock); - ret = av_fifo_size(mq->fifo); + ret = av_fifo_can_read(mq->fifo); pthread_mutex_unlock(&mq->lock); - return ret / mq->elsize; + return ret; #else return AVERROR(ENOSYS); #endif @@ -121,14 +121,14 @@ static int av_thread_message_queue_send_locked(AVThreadMessageQueue *mq, void *msg, unsigned flags) { - while (!mq->err_send && av_fifo_space(mq->fifo) < mq->elsize) { + while (!mq->err_send && !av_fifo_can_write(mq->fifo)) { if ((flags & AV_THREAD_MESSAGE_NONBLOCK)) return AVERROR(EAGAIN); pthread_cond_wait(&mq->cond_send, &mq->lock); } if (mq->err_send) return mq->err_send; - av_fifo_generic_write(mq->fifo, msg, mq->elsize, NULL); + av_fifo_write(mq->fifo, msg, 1); /* one message is sent, signal one receiver */ pthread_cond_signal(&mq->cond_recv); return 0; @@ -138,14 +138,14 @@ static int av_thread_message_queue_recv_locked(AVThreadMessageQueue *mq, void *msg, unsigned flags) { - while (!mq->err_recv && av_fifo_size(mq->fifo) < mq->elsize) { + while (!mq->err_recv && !av_fifo_can_read(mq->fifo)) { if ((flags & AV_THREAD_MESSAGE_NONBLOCK)) return AVERROR(EAGAIN); pthread_cond_wait(&mq->cond_recv, &mq->lock); } - if (av_fifo_size(mq->fifo) < mq->elsize) + if (!av_fifo_can_read(mq->fifo)) return mq->err_recv; - av_fifo_generic_read(mq->fifo, msg, mq->elsize, NULL); + av_fifo_read(mq->fifo, msg, 1); /* one message space appeared, signal one sender */ pthread_cond_signal(&mq->cond_send); return 0; @@ -208,25 +208,25 @@ void av_thread_message_queue_set_err_recv(AVThreadMessageQueue *mq, } #if HAVE_THREADS -static void free_func_wrap(void *arg, void *msg, int size) +static int free_func_wrap(void *arg, void *buf, size_t *nb_elems) { AVThreadMessageQueue *mq = arg; - mq->free_func(msg); + uint8_t *msg = buf; + for (size_t i = 0; i < *nb_elems; i++) + mq->free_func(msg + i * mq->elsize); + return 0; } #endif void av_thread_message_flush(AVThreadMessageQueue *mq) { #if HAVE_THREADS - int used, off; - void *free_func = mq->free_func; + size_t used; pthread_mutex_lock(&mq->lock); - used = av_fifo_size(mq->fifo); - if (free_func) - for (off = 0; off < used; off += mq->elsize) - av_fifo_generic_peek_at(mq->fifo, mq, off, mq->elsize, free_func_wrap); - av_fifo_drain(mq->fifo, used); + used = av_fifo_can_read(mq->fifo); + if (mq->free_func) + av_fifo_read_to_cb(mq->fifo, free_func_wrap, mq, &used); /* only the senders need to be notified since the queue is empty and there * is nothing to read */ pthread_cond_broadcast(&mq->cond_send); From patchwork Mon Jan 24 14:46:12 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 33790 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:e71a:0:0:0:0:0 with SMTP id b26csp389464ioh; Mon, 24 Jan 2022 06:51:14 -0800 (PST) X-Google-Smtp-Source: ABdhPJzYYX4PhX18CgPA7Lp/bifEiGuh5e2I80CHH8/5v1dFYxoZpCvmL2TDhowVrYINdFuDMU2U X-Received: by 2002:a17:906:fa85:: with SMTP id lt5mr12860835ejb.690.1643035874333; Mon, 24 Jan 2022 06:51:14 -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 do6si8611545ejc.516.2022.01.24.06.51.13; Mon, 24 Jan 2022 06:51:14 -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=oW3xeJSo; 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 1BC5968B18E; Mon, 24 Jan 2022 16:48:51 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR01-HE1-obe.outbound.protection.outlook.com (mail-oln040092065052.outbound.protection.outlook.com [40.92.65.52]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 1D58968B05B for ; Mon, 24 Jan 2022 16:48:48 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=EeTUI3JC7WyUXtfF+HlKv/t3B6GJtI0YZevuu1b6ScX1TvV03rqlGFEzY3AsplDeuADocJ2tXHsr8kUhonJiYSspND16qXJbXcD582o5yWRsiHQaEW9mZlz9WlA+p7WGxB4LzlV6XeHaEJkSoqSP43JNqG/yuWwiIJHWR7ifhcQB7L0CYtGLbfJpFKHbmRIDiCpokhtLoLI74mNG61w6KUKamwgB7GBXx81Uh+cPvPUCvZhL/NBaf8vyH5TdG0ql+1c1aElj6070aBIzanvr+AnsXH/Gp3FQst5cXhU3JtJjWfkcTNbjA8KE+OudxYNzzx7ZNsMjg/pFgOCZbZGUFA== 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=Ph2ynH92c5pDNjbrC0NjqxCkjr4ze+BiSlTHbYUGHQM=; b=huv6Bh73JKP0qFIWA6F8cL2yfW2bkrZfx+GZvToEeuxrc0C3Da4bU7cXsB3WejRPyZo4JwCWpl34ZzngafhTbIVvb/lRsDtVW09Hx2IHOZ9QXgaGybdzbUwooA5k2Ldd5ArXDwuRfuMvf7Bndwm0O/JP/bNqsL8DXPwBn7Z6Yte7TGxcGRLvOMAnknohYrXW15KYWCLC9o/tPg3+h4fsxTSQUJOX6iCe9ASJcXIMIX0l3wGpb6tnu64+Vchn0XWfj0sTuYMfYsQblzrHPJtc/7dPnXNv2Y0nJh/fXdhWZXuD2J6rTzh85AvRuPr5YG9cpad3KKd/TLDBSSGhPqwW7w== 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=Ph2ynH92c5pDNjbrC0NjqxCkjr4ze+BiSlTHbYUGHQM=; b=oW3xeJSo319zExJMtpgC7NNTjAvx/BWv1c4aoTvZlAztx4hnn1kfmU5NEhX5uG0R7DduTHRecW7NdUPMwVhZF2B2uImNd6yoShBMBJakd1Z4J7uG87ZJJf+YZx0TApYoTNKuDsqe0dfWWhymxd1k57M8VzZ1WB5HxHkNspvwYZUSVq8dNVU+iNBhrEoWxD1VcDiGRISyRYfpbVacz0+OKnQPMmBy1YcCSqtBFhDPiYg5yD2u4RIcNdXtWef+cEJ9g2ekptalonW+dE+APeE5M/Jqy6yhUxHI3SAtK9KBCd1obZD9gpT7LVfmJ4zAsKjxemQVbEvRHLgtrX3cL/eWCw== Received: from AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) by VI1PR03MB4397.eurprd03.prod.outlook.com (2603:10a6:803:51::24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4909.17; Mon, 24 Jan 2022 14:48:47 +0000 Received: from AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::ac56:2ff4:d304:ab22]) by AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::ac56:2ff4:d304:ab22%4]) with mapi id 15.20.4909.017; Mon, 24 Jan 2022 14:48:47 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Mon, 24 Jan 2022 15:46:12 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [jmRrWGZAIL+XPKN/U3KFWKKo6q7qyiyu] X-ClientProxiedBy: AM5PR0201CA0016.eurprd02.prod.outlook.com (2603:10a6:203:3d::26) To AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) X-Microsoft-Original-Message-ID: <20220124144616.559446-27-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: de352b92-d24c-4533-cc1f-08d9df48a078 X-MS-TrafficTypeDiagnostic: VI1PR03MB4397:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: GiSz43dDQCmhJHS2/nBVNCvYkuC4HIherujtr8l58GILWMIyUuGopgDDyrhfejv4hhwQsxtI3TJIkbZ/aKDvuLsfdkNEPGX5DHLzYbGub8ZQ/4GGLZiPCYB7Jkr7lBbkFQCNouC81aWHJNjwh6JKIA4qHiJOIXVctq0FoUzLRFSqzFzOAorJhJS9wptlf+gjLJ/NClwWO9M4KUbu1Mey+gV0NwUSUmsBwywiYP1NBvZhA1pPmnQyp34T4XMBbsg3mmkG5qPmrgV4EjYgUWDzeFT6FPTtcSGmphpArU9E/u5gbfcGDH35q0mIgpZjbZzaT5EZMCczXytbwH94QXd9msOIUFQ5VhO3qPHDufr4JvTdAtB3jMLbNof6ZvoHChweIswyzdolpczJ5nHvKSio1ftQ5nFAW7gwYJ6OnpsFN2Ja65IslhTcKtPwP9uOQSfCEPWgrKg2kkQnM33PPvuDMqvDm2SAFacqu3ghF6vfcHHMwOABpEQjcrcsXC33Y7xW2fk7DlYvl74Neg71JSLzc9FYvJVidK1M3IP/+iSIzoZd+RTVKhzfi2VDc3gUA/LM/0ioBlYpseqLA+gMV0J4rQ== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: PrgpC8/blsV3wBHqCsn+NHinhfA6rRQO++0VpzMpxp7xPO/fKgA2QC1bM78L18YsTDjRTlFdn+RIzv+Ho2fCEImnw4qyuKehCq2bEJE9Mjtp9Q8td0VfqoBaPHNmEFcdE3USYBYJ2GzgiiCY4N+9ZVjM7FJuiaGyewUBzN6yUfcbFkgqy2qmlNxJfy5BhcKekEa2MODQq6ouIJmENox/xuZQDZetA2PEP6gqWN8tnsmgLFqSxBrZeWmtUYxTJkTafXXbFm0rxfETzCWwQyYP+a7g4V1H7bbkqYUUxqu8kCf3SXBxLdSg2toW7eF13uHqiM7D+Z3LS5W2/vJ9VJojR8I933yeJo30beizK4uOPQKVqzZp5/nWQVu5WMvKAaUwLkmFQNOAW3opfX6wPjR+U4PFpms/836laObkHSmHednMjlEua8jUDqEn9Zdis6IvKACMCh4dVn7RbJef5p7LyCCilHUpEWGrqQ8Z9kg8GyEridWn57iw0QbtTo+u3aqKK1gsMK0SeG9tX3Q5Gj4irRd0Tw6wDD4PTbkPx6lK4bM+JcBdP6E3JZkThKS5aKXvIiRqiYcy72eUWpNmNFxh0Srw4bkCbHxjRSw5jgrRzuXLzXgkdcg9hb2U8tEpXDafUTLeXaw8YWJ7qGv2NuiWiQmRVhm/OYAIOgRwj0NNGwv8EVEF5SK67yB0lXje8h8P5pOfNKSF073kzwNhbDtLHHpN91XR1BUPhX0ZyUk9CWrKKXjKbVTKL27Jmg3syKzfoR/nDNIFzyR4Dk68vQXwBMJdEvZiPHTHkViRkRzrMGrz3B9OBGe8VWzaQTDugOfBAew6dXogrMt3XdJjVMibrMR5fA9Ooh27r3dRa3YOdghSEMSVyBBl3i/eAPNZ8+0zAGYl0hkmgI6reemk+HzjkCgErxtPb2Esg8A+slRneRlrgL58OrjYtnR4FojI5z5Gt2DbRZmcYNzO/H26p8QlGw== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: de352b92-d24c-4533-cc1f-08d9df48a078 X-MS-Exchange-CrossTenant-AuthSource: AM7PR03MB6660.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Jan 2022 14:48:47.4421 (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: VI1PR03MB4397 Subject: [FFmpeg-devel] [PATCH v2 27/31] lavfi/qsvvpp: switch to new FIFO API 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: Anton Khirnov Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: +N0nSPoAcrmN From: Anton Khirnov --- libavfilter/qsvvpp.c | 46 ++++++++++++++++++-------------------------- libavfilter/qsvvpp.h | 2 +- 2 files changed, 20 insertions(+), 28 deletions(-) diff --git a/libavfilter/qsvvpp.c b/libavfilter/qsvvpp.c index d1218355c7..35769dfd60 100644 --- a/libavfilter/qsvvpp.c +++ b/libavfilter/qsvvpp.c @@ -40,6 +40,11 @@ static const AVRational default_tb = { 1, 90000 }; +typedef struct QSVAsyncFrame { + mfxSyncPoint sync; + QSVFrame *frame; +} QSVAsyncFrame; + static const struct { int mfx_iopattern; const char *desc; @@ -642,16 +647,6 @@ static int init_vpp_session(AVFilterContext *avctx, QSVVPPContext *s) return 0; } -static unsigned int qsv_fifo_item_size(void) -{ - return sizeof(mfxSyncPoint) + sizeof(QSVFrame*); -} - -static unsigned int qsv_fifo_size(const AVFifoBuffer* fifo) -{ - return av_fifo_size(fifo)/qsv_fifo_item_size(); -} - int ff_qsvvpp_create(AVFilterContext *avctx, QSVVPPContext **vpp, QSVVPPParam *param) { int i; @@ -727,7 +722,7 @@ int ff_qsvvpp_create(AVFilterContext *avctx, QSVVPPContext **vpp, QSVVPPParam *p s->got_frame = 0; /** keep fifo size at least 1. Even when async_depth is 0, fifo is used. */ - s->async_fifo = av_fifo_alloc((param->async_depth + 1) * qsv_fifo_item_size()); + s->async_fifo = av_fifo_alloc2(param->async_depth + 1, sizeof(QSVAsyncFrame), 0); s->async_depth = param->async_depth; if (!s->async_fifo) { ret = AVERROR(ENOMEM); @@ -789,7 +784,7 @@ int ff_qsvvpp_free(QSVVPPContext **vpp) av_freep(&s->surface_ptrs_out); av_freep(&s->ext_buffers); av_freep(&s->frame_infos); - av_fifo_free(s->async_fifo); + av_fifo_freep2(&s->async_fifo); av_freep(vpp); return 0; @@ -799,24 +794,23 @@ int ff_qsvvpp_filter_frame(QSVVPPContext *s, AVFilterLink *inlink, AVFrame *picr { AVFilterContext *ctx = inlink->dst; AVFilterLink *outlink = ctx->outputs[0]; + QSVAsyncFrame aframe; mfxSyncPoint sync; QSVFrame *in_frame, *out_frame, *tmp; int ret, filter_ret; - while (s->eof && qsv_fifo_size(s->async_fifo)) { - av_fifo_generic_read(s->async_fifo, &tmp, sizeof(tmp), NULL); - av_fifo_generic_read(s->async_fifo, &sync, sizeof(sync), NULL); - if (MFXVideoCORE_SyncOperation(s->session, sync, 1000) < 0) + while (s->eof && av_fifo_read(s->async_fifo, &aframe, 1) >= 0) { + if (MFXVideoCORE_SyncOperation(s->session, aframe.sync, 1000) < 0) av_log(ctx, AV_LOG_WARNING, "Sync failed.\n"); - filter_ret = s->filter_frame(outlink, tmp->frame); + filter_ret = s->filter_frame(outlink, aframe.frame->frame); if (filter_ret < 0) { - av_frame_free(&tmp->frame); + av_frame_free(&aframe.frame->frame); return filter_ret; } - tmp->queued--; + aframe.frame->queued--; s->got_frame = 1; - tmp->frame = NULL; + aframe.frame->frame = NULL; }; if (!picref) @@ -853,16 +847,14 @@ int ff_qsvvpp_filter_frame(QSVVPPContext *s, AVFilterLink *inlink, AVFrame *picr default_tb, outlink->time_base); out_frame->queued++; - av_fifo_generic_write(s->async_fifo, &out_frame, sizeof(out_frame), NULL); - av_fifo_generic_write(s->async_fifo, &sync, sizeof(sync), NULL); - + aframe = (QSVAsyncFrame){ sync, out_frame }; + av_fifo_write(s->async_fifo, &aframe, 1); - if (qsv_fifo_size(s->async_fifo) > s->async_depth) { - av_fifo_generic_read(s->async_fifo, &tmp, sizeof(tmp), NULL); - av_fifo_generic_read(s->async_fifo, &sync, sizeof(sync), NULL); + if (av_fifo_can_read(s->async_fifo) > s->async_depth) { + av_fifo_read(s->async_fifo, &aframe, 1); do { - ret = MFXVideoCORE_SyncOperation(s->session, sync, 1000); + ret = MFXVideoCORE_SyncOperation(s->session, aframe.sync, 1000); } while (ret == MFX_WRN_IN_EXECUTION); filter_ret = s->filter_frame(outlink, tmp->frame); diff --git a/libavfilter/qsvvpp.h b/libavfilter/qsvvpp.h index e0f4c8f5bb..4fe07ab1f7 100644 --- a/libavfilter/qsvvpp.h +++ b/libavfilter/qsvvpp.h @@ -73,7 +73,7 @@ typedef struct QSVVPPContext { int async_depth; int eof; /** order with frame_out, sync */ - AVFifoBuffer *async_fifo; + AVFifo *async_fifo; } QSVVPPContext; typedef struct QSVVPPCrop { From patchwork Mon Jan 24 14:46:13 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 33791 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:e71a:0:0:0:0:0 with SMTP id b26csp389558ioh; Mon, 24 Jan 2022 06:51:25 -0800 (PST) X-Google-Smtp-Source: ABdhPJwV0ezWx6m4WQm/cLmbq7O32v8QokYFyVDEDddORkE93xRfuR90DN675TrK8VbIMkzdaN40 X-Received: by 2002:a17:907:3f1c:: with SMTP id hq28mr4500078ejc.501.1643035885285; Mon, 24 Jan 2022 06:51:25 -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 nb6si3108775ejc.554.2022.01.24.06.51.24; Mon, 24 Jan 2022 06:51:25 -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=nwxhVWCJ; 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 07A2C68B19C; Mon, 24 Jan 2022 16:48:54 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR01-HE1-obe.outbound.protection.outlook.com (mail-oln040092065094.outbound.protection.outlook.com [40.92.65.94]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 9162768B05B for ; Mon, 24 Jan 2022 16:48:52 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=GpLH2bIP0qZqVJ5ySZ/BVosvvSjfoDc075/WyhrBhTt5kyfs2cpN/77zPNrJbh3Ku2JxRkosJMmZdQ1YGJbPhNqBCk+XTOhllTUKFYSt9GWIep+tuOGXxiRyxdijOYBsqs8+Gi3KMYjh4YONEMJZdithDM+H6ijUJ1pSYhVqMJ7jSSQItdrin+V6Pe5Z2iWETkWPKAEfs83f37lVmDcEXlWl/+/UUKlolnyXFNeINT9J9z4FL9t8M7zDedAqmwT7D+SZNAqna/qEZPHKQ+U0AQGg+Z0hxu4RavZBIWGsop1Z9owo6EDAxSl79q8LRkljn1ce9dzsTwcx511bg01MSQ== 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=+89zkahvhAU/eLlLLuOeUL9vBLSmkLMVIJt1h845us8=; b=MJDPG4BvfYb3D+fhE0JletZwENkXgLzx/kyRVn35/YVBZIccNrChhedUbzCeq8e6005IjYfCw/SLiH/DyVl/Z1VN/NmA3D8+zWJ1L/0DeIT4V8qN/8N5yYL1Zi9DEQ+uV2Rj0dXFrZUOt3OwsguV/1HJA6+gej6ilBonvwAT0Bn3oWCJDn/YyVgs+1wu6SdFpMFxK5eQt/eW50nTFtwsVI5fk03ue73C/FA9eBXh3YphIsB2KJczljzwraUpVzRIzvWZ5TQBz2OEq9X0R05+WmWXZz5LlmUrWLkQ7laPkLuJ1CatslARkIseDe0PxhrgM9ItY+oJWOjZQmmY8c7uOQ== 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=+89zkahvhAU/eLlLLuOeUL9vBLSmkLMVIJt1h845us8=; b=nwxhVWCJ5BzBTrsxqZUgi/LFwl1k3n8Na4gCcVEh29gfy+KBD/V62j0tiqjuVuTMKnK9+1lGyQoP9rISWOlW247cF+vj4nxuyxFsar8Fg2/ng/kJKWOrurq4F3Sfjmtje5CNgv/KAToigdOekuCembj52y4QggurzVw6608y1F7A9wEAxIZRveD3cfJFzSTA8QI0+NB+mtuJ2TZf2REJ97EgP17uKHTvkLf8ziYna/98cVvVKUvCO/ibYfwdm4uQqej7T5LPQMGI+Xqg5D+xhSwkZHu6ZHdle9/da0013gjtiDMFMnSr+aIX6Mm9OtVAljfP2AW0s/XuvW4NNwQxgg== Received: from AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) by VI1PR03MB4397.eurprd03.prod.outlook.com (2603:10a6:803:51::24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4909.17; Mon, 24 Jan 2022 14:48:50 +0000 Received: from AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::ac56:2ff4:d304:ab22]) by AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::ac56:2ff4:d304:ab22%4]) with mapi id 15.20.4909.017; Mon, 24 Jan 2022 14:48:50 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Mon, 24 Jan 2022 15:46:13 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [gq/Fc0Wt1V/z2fH/N1M/Ap/GJ3rbD/dy] X-ClientProxiedBy: AM5PR0201CA0016.eurprd02.prod.outlook.com (2603:10a6:203:3d::26) To AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) X-Microsoft-Original-Message-ID: <20220124144616.559446-28-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: cf3f1cb2-48c9-4138-3643-08d9df48a28a X-MS-TrafficTypeDiagnostic: VI1PR03MB4397:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: ZI3cn13mVNoJHlYqSYUPUvlwNUwBZHMv9HpdHRWJ2PcFWdqWgSkoqOPuXTPchwirCcq2g6tThmr1I93EgyvQF3GgYPSeZcXLCljV+tnAfrV0W+wvqvedf9/KtsJsulozODvjyDqY1rAjphgsPanLP8FqrG6xs4Hn6RrPOV8cgFOnXGfcLe59dxSnZdmFlc6pBdm5Hp6cHI3JHu5nugft9tfuDk2tKerUBxxXr1x7Q88B/qtfYyN/ps+zl/5yzlWrgh5bKzKWNHBZvnOgFHHjkkbXCYgcBbJ2kpK8offuSwGjBxV4ecp9l6qrkPdL6PlGLZ8hogF0phV+1IVIojSAN6ZdUL7aC/ufxzKCGBsVXpwc2VHrnX6Bbc9JRq7Jzb1b3jqsKPB+dW9/PhSeOk1HGriD85nvzSic7GNR5YNENv9G3ckgQ1wrbKjMidn+bTnzjYzC8XtaYtfZcWZt1rF/GmWohGj1vw9V3TqNfX+pSSNFZF8iXUIOrz0lN+KyZLZgc8etgPsGdRq9qF0CMsxc1d9E8kRTIE1ppNj8KNHSL3GY8npNPKbnYdFgvDzeGq3t+I+mBZrosSy+f6fnxSrJEQ== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: F8dHxQiQg6CoY5XWZ2NwdVPINcFx0f3n6qdAK7Y4J2RrwJm2Nv8Mm/jx1rZNIgIwJdg+oqlxUfKf5oK5jOtUV2kTUQjUdl97AxF1eEHofZOBdWbLkj4OANSX+8/DiVXcyIgBwUACa4iDundqjUTwz5VZK6PKri/p8JjaB+sGBg0qkJ8VHAUtkzWj6n5gQvUrPTqA6thnR79uDvrICTJLk0SoSEQ5Di9LT/uH3KKJbOh97EzWRmfhagnTL3lDkdax7bu50bRLwhUhMDyClCJ4f6yna046An2dfTDy4WSsYdzDDOXbdfv1Cnq13Uhvesn7vbCqA/BWB+6K9TvTUi2LaScT6O3RU2Ztjwszp+3dxJsXJQHCdr9vUXWgAGqhuWCu9TRF4dapdcppWbjvaNfXYmumegOoBk78LjLby9mnyfTiMmA+q/aRa5daseBQsKxV16SmSCEQMvY7BkXtxVToSCevx1DLxPOS4MiU2GceCjchwlrDEIXSMppo7whDMuF0jn2BdYrzWLOyMho4P+Ie+ST2OkdgsQZxMrIEY6ptNd0uq3D0UZcfsl6qDjGXajT2B3bG5cNk+/PzmT+w2JhLfQLsGdrg/6zm6iFht7yv76b187cVMdwwf6Yy+78gje4bv9UG/l4GQn4Pm1RnYrYK3IUh2JmkrmpBqz6Lj8kVWeYklpGf/FGCUw46YTG58IXQ+/Ly14HFGE3tL4m1F8KF7kIj+SVv6c4bt4WNvtJYX0VKkMsDuJ9T3x0EaPdL9vyV+vCr7Lja4oDcMpo5xAzNJu6V32X2u1dH3hvZ5nhbGy7wgO8hHfWBxKCY4UvIw+u88tXE2cLFUO1/MYLWbYC5h0nwMR2iAhdvlq8orwTpYR9GASLbXIUJ1bmTsoPwSOTNyAk5muLpMd0MY0GhiSBJNpCevaI9BZ6aZ8yQJIe6J4ED/vl4fHIcnu1/BVHFbERlRFAPHUl9ZSQko5j1V9iZUA== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: cf3f1cb2-48c9-4138-3643-08d9df48a28a X-MS-Exchange-CrossTenant-AuthSource: AM7PR03MB6660.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Jan 2022 14:48:50.9130 (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: VI1PR03MB4397 Subject: [FFmpeg-devel] [PATCH v2 28/31] lavfi/vf_deshake_opencl: switch to new FIFO API 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: Anton Khirnov Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: y/ZBhgzGcqw9 From: Anton Khirnov --- libavfilter/vf_deshake_opencl.c | 92 +++++++++++---------------------- 1 file changed, 29 insertions(+), 63 deletions(-) diff --git a/libavfilter/vf_deshake_opencl.c b/libavfilter/vf_deshake_opencl.c index 9c761ba5ad..c2b5bef897 100644 --- a/libavfilter/vf_deshake_opencl.c +++ b/libavfilter/vf_deshake_opencl.c @@ -134,7 +134,7 @@ typedef struct DebugMatches { // for each frame typedef struct AbsoluteFrameMotion { // Array with the various ringbuffers, indexed via the RingbufferIndices enum - AVFifoBuffer *ringbuffers[RingbufCount]; + AVFifo *ringbuffers[RingbufCount]; // Offset to get to the current frame being processed // (not in bytes) @@ -144,7 +144,7 @@ typedef struct AbsoluteFrameMotion { int data_start_offset; int data_end_offset; - AVFifoBuffer *debug_matches; + AVFifo *debug_matches; } AbsoluteFrameMotion; // Takes care of freeing the arrays within the DebugMatches inside of the @@ -156,18 +156,10 @@ static void free_debug_matches(AbsoluteFrameMotion *afm) { return; } - while (av_fifo_size(afm->debug_matches) > 0) { - av_fifo_generic_read( - afm->debug_matches, - &dm, - sizeof(DebugMatches), - NULL - ); - + while (av_fifo_read(afm->debug_matches, &dm, 1) >= 0) av_freep(&dm.matches); - } - av_fifo_freep(&afm->debug_matches); + av_fifo_freep2(&afm->debug_matches); } // Stores the translation, scale, rotation, and skew deltas between two frames @@ -853,7 +845,7 @@ static IterIndices start_end_for(DeshakeOpenCLContext *deshake_ctx, int length) // clipping the offset into the appropriate range static void ringbuf_float_at( DeshakeOpenCLContext *deshake_ctx, - AVFifoBuffer *values, + AVFifo *values, float *val, int offset ) { @@ -863,7 +855,7 @@ static void ringbuf_float_at( } else { // This expression represents the last valid index in the buffer, // which we use repeatedly at the end of the video. - clip_end = deshake_ctx->smooth_window - (av_fifo_space(values) / sizeof(float)) - 1; + clip_end = deshake_ctx->smooth_window - av_fifo_can_write(values) - 1; } if (deshake_ctx->abs_motion.data_start_offset != -1) { @@ -881,13 +873,7 @@ static void ringbuf_float_at( clip_end ); - av_fifo_generic_peek_at( - values, - val, - offset_clipped * sizeof(float), - sizeof(float), - NULL - ); + av_fifo_peek(values, val, 1, offset_clipped); } // Returns smoothed current frame value of the given buffer of floats based on the @@ -905,7 +891,7 @@ static float smooth( float *gauss_kernel, int length, float max_val, - AVFifoBuffer *values + AVFifo *values ) { float new_large_s = 0, new_small_s = 0, new_best = 0, old, diff_between, percent_of_max, inverted_percent; @@ -1069,7 +1055,7 @@ static av_cold void deshake_opencl_uninit(AVFilterContext *avctx) cl_int cle; for (int i = 0; i < RingbufCount; i++) - av_fifo_freep(&ctx->abs_motion.ringbuffers[i]); + av_fifo_freep2(&ctx->abs_motion.ringbuffers[i]); if (ctx->debug_on) free_debug_matches(&ctx->abs_motion); @@ -1188,10 +1174,8 @@ static int deshake_opencl_init(AVFilterContext *avctx) } for (int i = 0; i < RingbufCount; i++) { - ctx->abs_motion.ringbuffers[i] = av_fifo_alloc_array( - ctx->smooth_window, - sizeof(float) - ); + ctx->abs_motion.ringbuffers[i] = av_fifo_alloc2(ctx->smooth_window, + sizeof(float), 0); if (!ctx->abs_motion.ringbuffers[i]) { err = AVERROR(ENOMEM); @@ -1200,9 +1184,9 @@ static int deshake_opencl_init(AVFilterContext *avctx) } if (ctx->debug_on) { - ctx->abs_motion.debug_matches = av_fifo_alloc_array( + ctx->abs_motion.debug_matches = av_fifo_alloc2( ctx->smooth_window / 2, - sizeof(DebugMatches) + sizeof(DebugMatches), 0 ); if (!ctx->abs_motion.debug_matches) { @@ -1424,12 +1408,9 @@ static int filter_frame(AVFilterLink *link, AVFrame *input_frame) const float luma_h_over_chroma_h = ((float)input_frame->height / (float)chroma_height); if (deshake_ctx->debug_on) { - av_fifo_generic_read( + av_fifo_read( deshake_ctx->abs_motion.debug_matches, - &debug_matches, - sizeof(DebugMatches), - NULL - ); + &debug_matches, 1); } if (input_frame->pkt_duration) { @@ -1441,13 +1422,9 @@ static int filter_frame(AVFilterLink *link, AVFrame *input_frame) // Get the absolute transform data for this frame for (int i = 0; i < RingbufCount; i++) { - av_fifo_generic_peek_at( - deshake_ctx->abs_motion.ringbuffers[i], - &old_vals[i], - deshake_ctx->abs_motion.curr_frame_offset * sizeof(float), - sizeof(float), - NULL - ); + av_fifo_peek(deshake_ctx->abs_motion.ringbuffers[i], + &old_vals[i], 1, + deshake_ctx->abs_motion.curr_frame_offset); } if (deshake_ctx->tripod_mode) { @@ -1842,7 +1819,7 @@ static int queue_frame(AVFilterLink *link, AVFrame *input_frame) { sizeof(cl_mem), &deshake_ctx->brief_pattern} ); - if (av_fifo_size(deshake_ctx->abs_motion.ringbuffers[RingbufX]) == 0) { + if (!av_fifo_can_read(deshake_ctx->abs_motion.ringbuffers[RingbufX])) { // This is the first frame we've been given to queue, meaning there is // no previous frame to match descriptors to @@ -1892,7 +1869,7 @@ static int queue_frame(AVFilterLink *link, AVFrame *input_frame) // old data (and just treat them all as part of the new values) if (deshake_ctx->abs_motion.data_end_offset == -1) { deshake_ctx->abs_motion.data_end_offset = - av_fifo_size(deshake_ctx->abs_motion.ringbuffers[RingbufX]) / sizeof(float) - 1; + av_fifo_can_read(deshake_ctx->abs_motion.ringbuffers[RingbufX]) - 1; } goto no_motion_data; @@ -1934,13 +1911,10 @@ static int queue_frame(AVFilterLink *link, AVFrame *input_frame) // Get the absolute transform data for the previous frame for (int i = 0; i < RingbufCount; i++) { - av_fifo_generic_peek_at( + av_fifo_peek( deshake_ctx->abs_motion.ringbuffers[i], - &prev_vals[i], - av_fifo_size(deshake_ctx->abs_motion.ringbuffers[i]) - sizeof(float), - sizeof(float), - NULL - ); + &prev_vals[i], 1, + av_fifo_can_read(deshake_ctx->abs_motion.ringbuffers[i]) - 1); } new_vals[RingbufX] = prev_vals[RingbufX] + relative.translation.s[0]; @@ -2011,21 +1985,13 @@ end: } debug_matches.num_matches = num_vectors; - av_fifo_generic_write( + av_fifo_write( deshake_ctx->abs_motion.debug_matches, - &debug_matches, - sizeof(DebugMatches), - NULL - ); + &debug_matches, 1); } for (int i = 0; i < RingbufCount; i++) { - av_fifo_generic_write( - deshake_ctx->abs_motion.ringbuffers[i], - &new_vals[i], - sizeof(float), - NULL - ); + av_fifo_write(deshake_ctx->abs_motion.ringbuffers[i], &new_vals[i], 1); } return ff_framequeue_add(&deshake_ctx->fq, input_frame); @@ -2063,9 +2029,9 @@ static int activate(AVFilterContext *ctx) // If there is no more space in the ringbuffers, remove the oldest // values to make room for the new ones - if (av_fifo_space(deshake_ctx->abs_motion.ringbuffers[RingbufX]) == 0) { + if (!av_fifo_can_write(deshake_ctx->abs_motion.ringbuffers[RingbufX])) { for (int i = 0; i < RingbufCount; i++) { - av_fifo_drain(deshake_ctx->abs_motion.ringbuffers[i], sizeof(float)); + av_fifo_drain2(deshake_ctx->abs_motion.ringbuffers[i], 1); } } ret = queue_frame(inlink, frame); @@ -2092,7 +2058,7 @@ static int activate(AVFilterContext *ctx) // Finish processing the rest of the frames in the queue. while(ff_framequeue_queued_frames(&deshake_ctx->fq) != 0) { for (int i = 0; i < RingbufCount; i++) { - av_fifo_drain(deshake_ctx->abs_motion.ringbuffers[i], sizeof(float)); + av_fifo_drain2(deshake_ctx->abs_motion.ringbuffers[i], 1); } ret = filter_frame(inlink, ff_framequeue_take(&deshake_ctx->fq)); From patchwork Mon Jan 24 14:46:14 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 33782 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:e71a:0:0:0:0:0 with SMTP id b26csp389720ioh; Mon, 24 Jan 2022 06:51:39 -0800 (PST) X-Google-Smtp-Source: ABdhPJyMa1cnecG/QOrFZhIdoFvTUINCVqQJBxFEg/QgtaA2iEtJHpUVvyrTU6dFqNoGtyiVVlcX X-Received: by 2002:a17:907:96ac:: with SMTP id hd44mr4113270ejc.88.1643035899230; Mon, 24 Jan 2022 06:51:39 -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 c10si8212224ejf.519.2022.01.24.06.51.38; Mon, 24 Jan 2022 06:51:39 -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=c3ABXEB9; 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 F267568B18B; Mon, 24 Jan 2022 16:48:56 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR04-HE1-obe.outbound.protection.outlook.com (mail-oln040092073065.outbound.protection.outlook.com [40.92.73.65]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id DE16E68B194 for ; Mon, 24 Jan 2022 16:48:54 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=aHGdweHGM1NoN9FaAf7cYqG2AEJMNAX4NmHUNtZAKeOucKXyVZ0yzJ4FZUDUgb2kUm1lwV+VVP4B9vJUxzvjkJ0ElZqFeIkioE9CzVqxDG6iWlx+pYvpSmkYAjRLKIn/BxceLYV7xwMWubHPgO+CDCtsK/o3SYPnttIq3Q3XEB9/kHQOyqR8qLLvQLBp8OLF95GiINq7nGguGLdsD4GkRgpn/CvhmSoyos1DhnKcvlJjTUiXayButhsgJlAm71GKIrSYarbrk1P7Tg+F++KfTOcTp6GoolPFW9xtIA4tMekJ3zITvO8r78HbtfG1Wha7M+Bl/PjR4P5WZqe/AzoTQQ== 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=+u8ozoHId0jFB2GeYHu4wR08mB1q75p/26oN6vKYaA8=; b=TtwY0dithMoCSj1NwIdnT6NrznIgPZamyiAODdv9s/VtgoM+2mLJDXcpD74VmxzfB1g+IhE1B6WtDoi8cuYaLKv1CxgWxmtvO/GirWXwLyF2wM4lnx/0FAqUrqZIDY0HoAdzEvvznei5gmwJq+hNnh43TqAsGe0MCetsbYfaEiiBUxnIGoNfxHqo9IxO6WYLazhh5atTlGcEJbiKyAJ9ed+TDA4DzS7z4nVvktzAyObbtrNLiWt4tavDnJmmXn9lE9c6E+OIwXCQJBGKFz4hV05KcqD9Q6AoEl1dmY/WJ3Y2uqiesVxcyl4wu9neYi6YW9d6tocYmeh+7fQC01IPBQ== 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=+u8ozoHId0jFB2GeYHu4wR08mB1q75p/26oN6vKYaA8=; b=c3ABXEB9RklOVeN+gtDrf/ibnYdmWEHy4nvIeGIGe5a8dRbh+gQGFCcuJjXWvq1vGevE0EAsp9lJQeHDTAKUU6MjWM0N14xyI/MQJOf6ltUd3HPBeBTBT0Uf9tMrJCrTcov8FWebETsbk58A0hiExmhli7kPIeutC4JafxRN3iD14sjwYJovUOZIwJK7cgCaoByjxGJpRThwXDlVwnbCJodiKUCZFCedmbfTnqsgvfDHApkvD9L+8dehAM7qpfWu2afmx0O82Y7repymiozfxgro4Iv0xf9cQA3h8Q/IBZRSPAV6C3I8AK4CIF3Z/VVob2qg4eG7OgJrIH70uUEiFg== Received: from AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) by VI1PR03MB3614.eurprd03.prod.outlook.com (2603:10a6:803:2a::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4909.17; Mon, 24 Jan 2022 14:48:53 +0000 Received: from AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::ac56:2ff4:d304:ab22]) by AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::ac56:2ff4:d304:ab22%4]) with mapi id 15.20.4909.017; Mon, 24 Jan 2022 14:48:53 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Mon, 24 Jan 2022 15:46:14 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [Q5UfynX0hZBjrmYtVJTLT7PB7C6MARe2] X-ClientProxiedBy: AM5PR0201CA0016.eurprd02.prod.outlook.com (2603:10a6:203:3d::26) To AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) X-Microsoft-Original-Message-ID: <20220124144616.559446-29-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 23802542-4fa3-40d5-bbd7-08d9df48a3da X-MS-TrafficTypeDiagnostic: VI1PR03MB3614:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 9aQ/T/lV4mV6tbCxLMwaF0ML0yMeUK+KTrKUOqY4fVkLqU2zRlzPFpYLpEOFl7bm49qv4rdTEfwuzTuezHbVr8YPn31ElfuB/DEvvZTayVsD1IHNbnOmxE7OMfrakYt+n1dh06wrZ6JQRWtXI9WlOGHkcQt6Xww4/kVka0rFlcPKz8kR3Bcoa8VpsawwManTHW4fz9DQOgWde/N2gUxndMefbyB0DBq1HcmSEBh2hCMBwLT9SwlIQV+XUpG1uCEHb0SJQV6QAYXRL4fWi2Hb4g5hNMq+HmKTXGQp5+2FWJUXoB619KTzzu0SUxlmRQucjT2D1bviNIUUPx1qcK/jnZr/UVBncHl63++D+4RiJIN+XmeW9bmxjMxZMBPZj4zDbwaEkyL4iYj5fORMUT2A2REJaUaQdCp5wy1zI757YaS50sDHDnqJNsRfQ2ZNqsc+WHl1QUXH38YVNuH1QB7XKMRge2qnbfOd+mL6GFuly8mgdMF1hKqPH06O7wLTOJALqhf91XGkQxO2t5mfnWbVLHVah6TqhjjbIigGweK5pKOmeLQ7DWWqLrWszJwKCLs3/0//uL+QyWQz5WXBM8RFcA== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: Cb94OHdYhlP/RpFLRxbJhArbgsHSU09kb0Cnb15bVQRpx4+boTQfmerYKB021QEwmrrTIbnyLBGNxkONea+EBcBieqZzFaGRYbEuMViP8SdZIhF8FqSa/cVfFeayMBad2d9q7cMtuwkDo/UWfwbQEGWvkGYjNTCbWRUy/AcfqXb0/sznw6cRuC6hSdNwq7xXtW+JSVZpftjX+p6HW9XIX8RrJ3+V25VQ/ZOKCoMIhf+5+1ZcFR/eWJmSy/a35fNMmo6Glmkaqz78a40zbJxhGQc00gKCAf7F4I2q8PcQzUkx34hIFkK2TDMay1PCOqLGnFxgD3DM+iArpvvlvTSncqEXt9D6IfD1w9mT4rM9qSxfiAKu1k/Z/eyEowSm/yrczcTgcKZT/g9eCvm/GnnxJK6TTWs1oXjDWPjp75Vx7+n5ZRqmdFUNPd1HckCzeckycY5VCRVghvkgMfuD5dHjFHo0hKwEmiRj8PHnEg5w/i4BupX+unBZ4uJ5dsWDM+Muh7cyR2kibf4R+Lv2eDFJ7p2f25f/L35Y3iKp7owhoRkMvLnd926uWmlDGtMkVtkQJbbYvy7xHXVa0DZs6H6Jw6vbblhPdpN7aSct+RQhkerw+WqQUNYh/hYa1+02/JSTP1rR8UGumF2quf+emf6pTI6n+j2IQ8+gatIUgVwtbZ+ixrkGbKz1TCohPDCLfi4OGjIiaUW0Jo6a6E0Fsh7vm647DfD075vH/90JTz81Pv2jyHByVDJoIkk9n6uiL2d1IaNbMiLrBscr+cCBiQC5blYi67r+9tGXBcbuw+G2RuVnS3sgRNqi3jBl35a8sh/szCOkGpuDlPhhxGWKG6L/5pNDLCCNmjlJZOq5X7XMwmxPP5A+PmZEFHbZ/BJe3rMcheuwClz54dXdf/tZ/1obKnSIhAhDjHmpPlUqUjHiKjmqaESTJxmgGmyPJP1LepAu47D2qmUhEs4g3gwogGoGPw== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 23802542-4fa3-40d5-bbd7-08d9df48a3da X-MS-Exchange-CrossTenant-AuthSource: AM7PR03MB6660.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Jan 2022 14:48:53.1014 (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: VI1PR03MB3614 Subject: [FFmpeg-devel] [PATCH v2 29/31] ffplay: switch to new FIFO API 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: Anton Khirnov Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: fFYQSkHnts5B From: Anton Khirnov --- fftools/ffplay.c | 22 +++++++++------------- 1 file changed, 9 insertions(+), 13 deletions(-) diff --git a/fftools/ffplay.c b/fftools/ffplay.c index e7b20be76b..ac48d8765d 100644 --- a/fftools/ffplay.c +++ b/fftools/ffplay.c @@ -115,7 +115,7 @@ typedef struct MyAVPacketList { } MyAVPacketList; typedef struct PacketQueue { - AVFifoBuffer *pkt_list; + AVFifo *pkt_list; int nb_packets; int size; int64_t duration; @@ -424,19 +424,18 @@ int64_t get_valid_channel_layout(int64_t channel_layout, int channels) static int packet_queue_put_private(PacketQueue *q, AVPacket *pkt) { MyAVPacketList pkt1; + int ret; if (q->abort_request) return -1; - if (av_fifo_space(q->pkt_list) < sizeof(pkt1)) { - if (av_fifo_grow(q->pkt_list, sizeof(pkt1)) < 0) - return -1; - } pkt1.pkt = pkt; pkt1.serial = q->serial; - av_fifo_generic_write(q->pkt_list, &pkt1, sizeof(pkt1), NULL); + ret = av_fifo_write(q->pkt_list, &pkt1, 1); + if (ret < 0) + return ret; q->nb_packets++; q->size += pkt1.pkt->size + sizeof(pkt1); q->duration += pkt1.pkt->duration; @@ -477,7 +476,7 @@ static int packet_queue_put_nullpacket(PacketQueue *q, AVPacket *pkt, int stream static int packet_queue_init(PacketQueue *q) { memset(q, 0, sizeof(PacketQueue)); - q->pkt_list = av_fifo_alloc(sizeof(MyAVPacketList)); + q->pkt_list = av_fifo_alloc2(1, sizeof(MyAVPacketList), AV_FIFO_FLAG_AUTO_GROW); if (!q->pkt_list) return AVERROR(ENOMEM); q->mutex = SDL_CreateMutex(); @@ -499,10 +498,8 @@ static void packet_queue_flush(PacketQueue *q) MyAVPacketList pkt1; SDL_LockMutex(q->mutex); - while (av_fifo_size(q->pkt_list) >= sizeof(pkt1)) { - av_fifo_generic_read(q->pkt_list, &pkt1, sizeof(pkt1), NULL); + while (av_fifo_read(q->pkt_list, &pkt1, 1) >= 0) av_packet_free(&pkt1.pkt); - } q->nb_packets = 0; q->size = 0; q->duration = 0; @@ -513,7 +510,7 @@ static void packet_queue_flush(PacketQueue *q) static void packet_queue_destroy(PacketQueue *q) { packet_queue_flush(q); - av_fifo_freep(&q->pkt_list); + av_fifo_freep2(&q->pkt_list); SDL_DestroyMutex(q->mutex); SDL_DestroyCond(q->cond); } @@ -551,8 +548,7 @@ static int packet_queue_get(PacketQueue *q, AVPacket *pkt, int block, int *seria break; } - if (av_fifo_size(q->pkt_list) >= sizeof(pkt1)) { - av_fifo_generic_read(q->pkt_list, &pkt1, sizeof(pkt1), NULL); + if (av_fifo_read(q->pkt_list, &pkt1, 1) >= 0) { q->nb_packets--; q->size -= pkt1.pkt->size + sizeof(pkt1); q->duration -= pkt1.pkt->duration; From patchwork Mon Jan 24 14:46:15 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 33792 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:e71a:0:0:0:0:0 with SMTP id b26csp389895ioh; Mon, 24 Jan 2022 06:51:54 -0800 (PST) X-Google-Smtp-Source: ABdhPJwDSiDOAv92zkeNVT7vEvl5mh+igBodYYdmhE0/uci9Emi2lBsXc2+/GNQcrOTmOJpnVGcO X-Received: by 2002:a05:6402:40d5:: with SMTP id z21mr13001207edb.239.1643035914205; Mon, 24 Jan 2022 06:51:54 -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 n15si2999462ejl.808.2022.01.24.06.51.53; Mon, 24 Jan 2022 06:51:54 -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="r/j1Bn0l"; 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 5DD0168B1B0; Mon, 24 Jan 2022 16:48:58 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR02-HE1-obe.outbound.protection.outlook.com (mail-oln040092068106.outbound.protection.outlook.com [40.92.68.106]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 9A41E68B09D for ; Mon, 24 Jan 2022 16:48:56 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=kPHGnULGFzCy6a5iqDZziBtB9gVOV9sveP8llSFKNfZUjWx1XjS5jJ8jjcRprbv8PPvnMo46j2cidUIipBp9GocG3jzz9Qg5QlAQ+OvIwQeRZFRdWkiQoQsgjwInfH8y9kgwCT73FfQDlSW5kGXSUw0i43oQb02pzucvfMkdvpq1ouwI3hm6D+3U13k5o+EgTd1ZMDsdPRWF7FPXz9uVtZacM+SDULPaiONT1Rs+o6a1RLWKvdtp8vhFpWYlwfwooRDVfOQWjqaPHS9FIBlznsbOuMMYEy9vhd+/4HYTF14n+y+2xUQDkEeEXqFjbw/qdU4jBLi2OB+UB/aALGC8mw== 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=RWzf6f9yY4S1xCWo9evM5bkvgPE4bX0JB3SXligsHWU=; b=YOBExBCGmYUorFupedMt8IDyxOQOsX6j5AqW9mRv7Cozd2i7DexsFo0AvAI/4lvaDhLtA/0BBPCMMDUac4Esu7Oi6vtJ3FcGa0qKZbLzNWFZr9bg20qHtyOMNeme2uR6gNKUogNWqTKN6NZxoOCFqQ/VOVn8+ITDmYwyCex27TsaXK3DcshhlGP1zx4LW43Dh18Abx8IJHZjUcZxtTJtGPYknLUr+/tQML3UHuOy0ciVKkmEE2BX9I9wbpz3CigKx6xt5APDbwWL6zTq+MrsBihrwSD04B/C3eOLSuwT/SOHbcylLlihCKior+lo9URreJSwOgP6IjNxJYbz1Ehpjg== 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=RWzf6f9yY4S1xCWo9evM5bkvgPE4bX0JB3SXligsHWU=; b=r/j1Bn0lo0Tmm/leqYq6PuhxVXdrob1XsuSG/p+H3nQTP/Ctbt4AZFJrx3RqsFYsviBq+DsQfcszMdZWXg3+AlxZbCmlb06aPuKNdV+QgsqMV0N6tQni0bmqkzUeD0bLDFyDDSBk4UYyOlevgrTCMMqxu0e4PFhZ/jSHqQ9cyjNUXwKUAUEdNp7Q2GhS9S9grJWds0FkWEV2uEk/zijImRxilJ+TKxv5HHh8teqyc5ltO4W2Qi1TXbX/AwOOLB6a+8dS3v0qjLqjsxDKwgYiGsxMlWv6voSEJuBzwazQHPb8YybfDavmq/GoYye9zt1BP+B9f+tmD1i3SN5fqeJZXw== Received: from AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) by VI1PR03MB3614.eurprd03.prod.outlook.com (2603:10a6:803:2a::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4909.17; Mon, 24 Jan 2022 14:48:54 +0000 Received: from AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::ac56:2ff4:d304:ab22]) by AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::ac56:2ff4:d304:ab22%4]) with mapi id 15.20.4909.017; Mon, 24 Jan 2022 14:48:54 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Mon, 24 Jan 2022 15:46:15 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [cG23gUuHx0nSi6jq3PWIB+Z2u20dqI6f] X-ClientProxiedBy: AM5PR0201CA0016.eurprd02.prod.outlook.com (2603:10a6:203:3d::26) To AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) X-Microsoft-Original-Message-ID: <20220124144616.559446-30-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 4e75e940-b799-4530-f4e2-08d9df48a4c8 X-MS-TrafficTypeDiagnostic: VI1PR03MB3614:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: NBBhMEEZxL79zTMjSyI3wdSxBiZfuLclTymvo+CGX2uDOm2V+Tq73PIO/kPfHl7wyyEQK/33AB+ykl1+qXwXtLQDjiLykZZDPhqxoqUmkN6N/aoBjwoig87Tsn4gTmvW4OfaQjsaQ+ol/FjIdOleevFNqjQbMoxjtfoTsW01U5eB1kOd0VjqMkOcYgbjs3hY4RStqNsnVV5WX3XNlqmrxapggfJtVOIG2zzcpnHiDqOq+Bqn+AXgyfuB9VZq6K1Qx3rpxB4pOxKfOqCpwzQkLO8HFHzM85DN3RveJuO42IQ4h47aSz2+IbPTfkjAOvAS1tWI01KO2oavDmApvo7TNCCFmcEug5Zz13my/wYiZ8KCvsOnPTexGSjsgI8iORWKsKaggWIh1zVfVmzWw98cfYkOsfA5wFRVHlkZltt4/fBO9Cb17ZggRCWcDvHm214KPgoimITugZyAlaLMl5wyrgTsDVI+gdHAC3d0R5oOS6//tEyrYmeYMm8ETJkAO57OtCt6tHIAbX0ehYMOzPMSxtGzn6tTARGWoYBFmurdEZEbrg++B1H0YKYRBWO2MFg8EiYcV4O4boeJwjZ+juDD2Q== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: ucE2qKo88YaGad4fznUVQqUBkg+FPAxE9Z9NmHbCRc/XwrQsk843XetcI2g8S6DqjyB8ZWr0MtOzb6Ss0jhrVr2U0diXhBgOWUgePzp08dTgqDuuKdupsp5ruNEdrabka5oWTqsWOb3REG+Bb36aTcvg6fUlbqYFvu9TltENwX7BiWk9i3WLM4ZPVtocnwQl9s/7r08V7gNy59DJW1ZWLu4MDD0ZlUjGdrXtND4WDuAoE5iWVsFYOvpBSMROk7S3wT20/xP+f1I5JInDwdws/Sc25Ku8s1Sl5harGMkWML5kI5S/2AoR+M5nToi4rRs2LiY41IsWMKxm7TKtohfuvJ3NUiC2OGwthhk7LhM427Mp4t4pmi5t2zUxNu0e4OKZkTKSvcDTzLKZwqaWenRwVo4T6iEYAQQA3UJ850EQesY6gaF9AUmSmyQnYnldbN0tXhgX9x3mtk9Y1Gvf4MJzwj0i1d0n79bPVh0EwtS/9t4keeVqBdYO2XdAGEa5hBH1hCQwB7NRogpaaq9BrgmeyNCXAPtk86N0dEFVK7PCzEfmuGnlN8ZUX5On2yJCd2yn6stQXy2ckWEaI3TQmWwo+dYCvHD0Kkt6Egq/+pt86ecqav6aQqNkJgAXDXu1kSren2duWcRg+2LIZsuozIv/XlfuXBsKSLrnDP8QAdw+nAa4ftmxvP0DpFbGRkMp4ys4qBH3mA6DGr1MdYA+kV3hLX9Zmn8yNodSCi4kU+QlMDoHsaJ8Kq2lmhfyGi4FSj2/ke3ISHAokeRCz55jAf9a73EIRieKFZzLXpJq/LzCgzy2MBhL3xZ7I0Ix6rr7JI3MlyLjNnaEXdqE32iwfLN2UGP6Zp3NaO9U9O2+khVwTxfU+GCXrgJaLz+0sHeKs1iqNTbZQDkumt9NowK8jPGVYV6NWBcyp8vJY3RlL8sVWpeefhz8AwQqx1NOqqJt+fcD1ms0bosJhPROWdUKUHqp0Q== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 4e75e940-b799-4530-f4e2-08d9df48a4c8 X-MS-Exchange-CrossTenant-AuthSource: AM7PR03MB6660.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Jan 2022 14:48:54.7113 (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: VI1PR03MB3614 Subject: [FFmpeg-devel] [PATCH v2 30/31] ffmpeg: switch to new FIFO API 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: Anton Khirnov Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: Du1blGvx/MCR From: Anton Khirnov --- fftools/ffmpeg.c | 69 ++++++++++++++++------------------------- fftools/ffmpeg.h | 6 ++-- fftools/ffmpeg_filter.c | 14 ++++----- fftools/ffmpeg_opt.c | 4 +-- 4 files changed, 37 insertions(+), 56 deletions(-) diff --git a/fftools/ffmpeg.c b/fftools/ffmpeg.c index 5d134b025f..d909fa58a7 100644 --- a/fftools/ffmpeg.c +++ b/fftools/ffmpeg.c @@ -527,23 +527,17 @@ static void ffmpeg_cleanup(int ret) for (j = 0; j < fg->nb_inputs; j++) { InputFilter *ifilter = fg->inputs[j]; struct InputStream *ist = ifilter->ist; + AVFrame *frame; - while (av_fifo_size(ifilter->frame_queue)) { - AVFrame *frame; - av_fifo_generic_read(ifilter->frame_queue, &frame, - sizeof(frame), NULL); + while (av_fifo_read(ifilter->frame_queue, &frame, 1) >= 0) av_frame_free(&frame); - } - av_fifo_freep(&ifilter->frame_queue); + av_fifo_freep2(&ifilter->frame_queue); av_freep(&ifilter->displaymatrix); if (ist->sub2video.sub_queue) { - while (av_fifo_size(ist->sub2video.sub_queue)) { - AVSubtitle sub; - av_fifo_generic_read(ist->sub2video.sub_queue, - &sub, sizeof(sub), NULL); + AVSubtitle sub; + while (av_fifo_read(ist->sub2video.sub_queue, &sub, 1) >= 0) avsubtitle_free(&sub); - } - av_fifo_freep(&ist->sub2video.sub_queue); + av_fifo_freep2(&ist->sub2video.sub_queue); } av_buffer_unref(&ifilter->hw_frames_ctx); av_freep(&ifilter->name); @@ -608,12 +602,10 @@ static void ffmpeg_cleanup(int ret) avcodec_parameters_free(&ost->ref_par); if (ost->muxing_queue) { - while (av_fifo_size(ost->muxing_queue)) { - AVPacket *pkt; - av_fifo_generic_read(ost->muxing_queue, &pkt, sizeof(pkt), NULL); + AVPacket *pkt; + while (av_fifo_read(ost->muxing_queue, &pkt, 1) >= 0) av_packet_free(&pkt); - } - av_fifo_freep(&ost->muxing_queue); + av_fifo_freep2(&ost->muxing_queue); } av_freep(&output_streams[i]); @@ -749,11 +741,11 @@ static void write_packet(OutputFile *of, AVPacket *pkt, OutputStream *ost, int u if (!of->header_written) { AVPacket *tmp_pkt; /* the muxer is not initialized yet, buffer the packet */ - if (!av_fifo_space(ost->muxing_queue)) { - size_t cur_size = av_fifo_size(ost->muxing_queue); + if (!av_fifo_can_write(ost->muxing_queue)) { + size_t cur_size = av_fifo_can_read(ost->muxing_queue); unsigned int are_we_over_size = (ost->muxing_queue_data_size + pkt->size) > ost->muxing_queue_data_threshold; - size_t limit = are_we_over_size ? ost->max_muxing_queue_size : INT_MAX; + size_t limit = are_we_over_size ? ost->max_muxing_queue_size : SIZE_MAX; size_t new_size = FFMIN(2 * cur_size, limit); if (new_size <= cur_size) { @@ -762,7 +754,7 @@ static void write_packet(OutputFile *of, AVPacket *pkt, OutputStream *ost, int u ost->file_index, ost->st->index); exit_program(1); } - ret = av_fifo_realloc2(ost->muxing_queue, new_size); + ret = av_fifo_grow2(ost->muxing_queue, new_size - cur_size); if (ret < 0) exit_program(1); } @@ -774,7 +766,7 @@ static void write_packet(OutputFile *of, AVPacket *pkt, OutputStream *ost, int u exit_program(1); av_packet_move_ref(tmp_pkt, pkt); ost->muxing_queue_data_size += tmp_pkt->size; - av_fifo_generic_write(ost->muxing_queue, &tmp_pkt, sizeof(tmp_pkt), NULL); + av_fifo_write(ost->muxing_queue, &tmp_pkt, 1); return; } @@ -2195,15 +2187,11 @@ static int ifilter_send_frame(InputFilter *ifilter, AVFrame *frame, int keep_ref if (!tmp) return AVERROR(ENOMEM); - if (!av_fifo_space(ifilter->frame_queue)) { - ret = av_fifo_realloc2(ifilter->frame_queue, 2 * av_fifo_size(ifilter->frame_queue)); - if (ret < 0) { - av_frame_free(&tmp); - return ret; - } - } - av_fifo_generic_write(ifilter->frame_queue, &tmp, sizeof(tmp), NULL); - return 0; + ret = av_fifo_write(ifilter->frame_queue, &tmp, 1); + if (ret < 0) + av_frame_free(&tmp); + + return ret; } ret = reap_filters(1); @@ -2526,15 +2514,13 @@ static int transcode_subtitles(InputStream *ist, AVPacket *pkt, int *got_output, sub2video_update(ist, INT64_MIN, &subtitle); } else if (ist->nb_filters) { if (!ist->sub2video.sub_queue) - ist->sub2video.sub_queue = av_fifo_alloc(8 * sizeof(AVSubtitle)); + ist->sub2video.sub_queue = av_fifo_alloc2(8, sizeof(AVSubtitle), AV_FIFO_FLAG_AUTO_GROW); if (!ist->sub2video.sub_queue) exit_program(1); - if (!av_fifo_space(ist->sub2video.sub_queue)) { - ret = av_fifo_realloc2(ist->sub2video.sub_queue, 2 * av_fifo_size(ist->sub2video.sub_queue)); - if (ret < 0) - exit_program(1); - } - av_fifo_generic_write(ist->sub2video.sub_queue, &subtitle, sizeof(subtitle), NULL); + + ret = av_fifo_write(ist->sub2video.sub_queue, &subtitle, 1); + if (ret < 0) + exit_program(1); free_sub = 0; } @@ -2976,14 +2962,13 @@ static int check_init_output_file(OutputFile *of, int file_index) /* flush the muxing queues */ for (i = 0; i < of->ctx->nb_streams; i++) { OutputStream *ost = output_streams[of->ost_index + i]; + AVPacket *pkt; /* try to improve muxing time_base (only possible if nothing has been written yet) */ - if (!av_fifo_size(ost->muxing_queue)) + if (!av_fifo_can_read(ost->muxing_queue)) ost->mux_timebase = ost->st->time_base; - while (av_fifo_size(ost->muxing_queue)) { - AVPacket *pkt; - av_fifo_generic_read(ost->muxing_queue, &pkt, sizeof(pkt), NULL); + while (av_fifo_read(ost->muxing_queue, &pkt, 1) >= 0) { ost->muxing_queue_data_size -= pkt->size; write_packet(of, pkt, ost, 1); av_packet_free(&pkt); diff --git a/fftools/ffmpeg.h b/fftools/ffmpeg.h index 9b200b806a..81ec4d5970 100644 --- a/fftools/ffmpeg.h +++ b/fftools/ffmpeg.h @@ -241,7 +241,7 @@ typedef struct InputFilter { uint8_t *name; enum AVMediaType type; // AVMEDIA_TYPE_SUBTITLE for sub2video - AVFifoBuffer *frame_queue; + AVFifo *frame_queue; // parameters configured for this input int format; @@ -355,7 +355,7 @@ typedef struct InputStream { struct sub2video { int64_t last_pts; int64_t end_pts; - AVFifoBuffer *sub_queue; ///< queue of AVSubtitle* before filter init + AVFifo *sub_queue; ///< queue of AVSubtitle* before filter init AVFrame *frame; int w, h; unsigned int initialize; ///< marks if sub2video_update should force an initialization @@ -555,7 +555,7 @@ typedef struct OutputStream { int max_muxing_queue_size; /* the packets are buffered here until the muxer is ready to be initialized */ - AVFifoBuffer *muxing_queue; + AVFifo *muxing_queue; /* * The size of the AVPackets' buffers in queue. diff --git a/fftools/ffmpeg_filter.c b/fftools/ffmpeg_filter.c index 1f6cba2c04..41d87377c7 100644 --- a/fftools/ffmpeg_filter.c +++ b/fftools/ffmpeg_filter.c @@ -178,7 +178,7 @@ int init_simple_filtergraph(InputStream *ist, OutputStream *ost) ifilter->graph = fg; ifilter->format = -1; - ifilter->frame_queue = av_fifo_alloc(8 * sizeof(AVFrame*)); + ifilter->frame_queue = av_fifo_alloc2(8, sizeof(AVFrame*), AV_FIFO_FLAG_AUTO_GROW); if (!ifilter->frame_queue) exit_program(1); @@ -286,7 +286,7 @@ static void init_input_filter(FilterGraph *fg, AVFilterInOut *in) ifilter->type = ist->st->codecpar->codec_type; ifilter->name = describe_filter_link(fg, in, 1); - ifilter->frame_queue = av_fifo_alloc(8 * sizeof(AVFrame*)); + ifilter->frame_queue = av_fifo_alloc2(8, sizeof(AVFrame*), AV_FIFO_FLAG_AUTO_GROW); if (!ifilter->frame_queue) exit_program(1); @@ -1106,9 +1106,8 @@ int configure_filtergraph(FilterGraph *fg) } for (i = 0; i < fg->nb_inputs; i++) { - while (av_fifo_size(fg->inputs[i]->frame_queue)) { - AVFrame *tmp; - av_fifo_generic_read(fg->inputs[i]->frame_queue, &tmp, sizeof(tmp), NULL); + AVFrame *tmp; + while (av_fifo_read(fg->inputs[i]->frame_queue, &tmp, 1) >= 0) { ret = av_buffersrc_add_frame(fg->inputs[i]->filter, tmp); av_frame_free(&tmp); if (ret < 0) @@ -1129,9 +1128,8 @@ int configure_filtergraph(FilterGraph *fg) for (i = 0; i < fg->nb_inputs; i++) { InputStream *ist = fg->inputs[i]->ist; if (ist->sub2video.sub_queue && ist->sub2video.frame) { - while (av_fifo_size(ist->sub2video.sub_queue)) { - AVSubtitle tmp; - av_fifo_generic_read(ist->sub2video.sub_queue, &tmp, sizeof(tmp), NULL); + AVSubtitle tmp; + while (av_fifo_read(ist->sub2video.sub_queue, &tmp, 1) >= 0) { sub2video_update(ist, INT64_MIN, &tmp); avsubtitle_free(&tmp); } diff --git a/fftools/ffmpeg_opt.c b/fftools/ffmpeg_opt.c index 9c820ab73f..3102851885 100644 --- a/fftools/ffmpeg_opt.c +++ b/fftools/ffmpeg_opt.c @@ -1589,8 +1589,6 @@ static OutputStream *new_output_stream(OptionsContext *o, AVFormatContext *oc, e ost->max_muxing_queue_size = 128; MATCH_PER_STREAM_OPT(max_muxing_queue_size, i, ost->max_muxing_queue_size, oc, st); - ost->max_muxing_queue_size = FFMIN(ost->max_muxing_queue_size, INT_MAX / sizeof(ost->pkt)); - ost->max_muxing_queue_size *= sizeof(ost->pkt); ost->muxing_queue_data_size = 0; @@ -1617,7 +1615,7 @@ static OutputStream *new_output_stream(OptionsContext *o, AVFormatContext *oc, e } ost->last_mux_dts = AV_NOPTS_VALUE; - ost->muxing_queue = av_fifo_alloc(8 * sizeof(AVPacket)); + ost->muxing_queue = av_fifo_alloc2(8, sizeof(AVPacket*), 0); if (!ost->muxing_queue) exit_program(1); From patchwork Mon Jan 24 14:46:16 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 33793 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:e71a:0:0:0:0:0 with SMTP id b26csp390140ioh; Mon, 24 Jan 2022 06:52:11 -0800 (PST) X-Google-Smtp-Source: ABdhPJxV/Rw5waEXTnADWm8YJ90m5KIYUmBCVvf5OUQvjPzwm2m281NiOhe4NpFDJ2b395fBKGLH X-Received: by 2002:a05:6402:3591:: with SMTP id y17mr16260910edc.386.1643035930456; Mon, 24 Jan 2022 06:52:10 -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 dd19si9696281ejc.610.2022.01.24.06.52.07; Mon, 24 Jan 2022 06:52:10 -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=V7lTneMC; 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 3888668B1B9; Mon, 24 Jan 2022 16:48:59 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR04-HE1-obe.outbound.protection.outlook.com (mail-oln040092073058.outbound.protection.outlook.com [40.92.73.58]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id C8C4968B1B0 for ; Mon, 24 Jan 2022 16:48:57 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=e0o8W15dYcz6ae+E+CEda8nPfI/eaWjtIDdJswZR80oKOEcb4wf6rNhaRrJ3RoN7ZCdEUaytThKzBTlPM0PSstRFd138Jc04cL/b/nEUauhTui5BrszcZZ6boz2E8wmzAT8JzWnYmPYSIm6gdriNLSq53E6ADF2700ZnVz2MlnJAFij9UTxFURLAMRGsWrrtvzDtE+jguvn9cKwtUxKIRXKxpVEj8/q1wcXIAvC7H1hTocJo2lbV7X50IefKfNDFChlWpe064EBbRXknXwYu8c6BdmGC2mPfGDeIDfLE8chdM9bjJ2wokgcYlg4FTgT2nj6AHSid2w+zQQw2TYhxRQ== 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=dQf4K0O5tWaZGkoyseMvnvbaQHbFBEKzm/ObkMPwta4=; b=cCiS/lsG9DW3OvaQs2Z6Kt7kgqPxwARmaiIScttdyShvG8N0ol4/cXrLBClVwuCcJsc3ZM35QJ2Lh+Ki14b3hObHCVvz9GhY3002AULTD+QhLZN8ZshvXIGrNQdecvpPuaKq+PLfLuldXtxASeVxTSOpfVcCPP+3/7TeoCyLDPGS3e3+iAkCcR+EtzycGD7BnpVIVfLBfvK53/c6kJU2VB2fUkBU1v+dB/I7qAAMn9ofHxqrWu6gvWbk1275TPj06W6s4zA9Jofpcw4qzntwvMFd4EApdCDH8zA/NAdgC8Hlm1BXc9fkBFtfxwU/ENF/MlQEoOIqbimjJ3TdnHcyOw== 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=dQf4K0O5tWaZGkoyseMvnvbaQHbFBEKzm/ObkMPwta4=; b=V7lTneMCHzPS5imeP9e384QJ4bvAnWPNhS8EMiVwbL65brXVT8N/xTz1huXUVKh2Y11KvENL1REnr8fAgaEKpF0G9OdvJMBQz5KIgg6VmGGKM3KrdQyxu7D+7iHDtYn9CJG/VEcfWISvUSDvxRtBHiDZ2OT5k9TnCIHdDk2+b0ckYK24a5jMSkbSVJi5HT1+Ck6FhUldog6M8YNtFtWpCJn8u0KfXt1Qcqgc1cHFxOjWwUdx6SKSff00FxZYFYfnv5jWwPLWg2UGVxvDRLSVKTGjuVrntr2HYvzrvVnwvbqLLE/JvpkBsjv6iHeaeP5VVM5ZTPMOSndxfMkbkaCGUw== Received: from AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) by DB6PR03MB3000.eurprd03.prod.outlook.com (2603:10a6:6:36::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4909.17; Mon, 24 Jan 2022 14:48:56 +0000 Received: from AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::ac56:2ff4:d304:ab22]) by AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::ac56:2ff4:d304:ab22%4]) with mapi id 15.20.4909.017; Mon, 24 Jan 2022 14:48:56 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Mon, 24 Jan 2022 15:46:16 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [YxXDysxscN529Jt0vqmYx2ZHd+UDxhZP] X-ClientProxiedBy: AM5PR0201CA0016.eurprd02.prod.outlook.com (2603:10a6:203:3d::26) To AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) X-Microsoft-Original-Message-ID: <20220124144616.559446-31-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 8d46a484-da97-4ca0-c702-08d9df48a59f X-MS-TrafficTypeDiagnostic: DB6PR03MB3000:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 2aoC8BogCFHQU2tgxeeQPRYvOAqo6A+4zJF0qGc4D3ZisOrZiRy1c2hP0yAofcX/v5CQK0kq0OpzY+QMiPfRz/5G5n34IYS1a4MHOSIrc7INZyYxW3fo+Hw2DXz2LAkL70Oq/z9h/GgNyiHNa+PTKge2d5KfA+44MxBgnBkAT854AUrIrgk/Miq47DUZunePmWcL7bYihRDwoP0KIXTRdBYRFeBQmTFdDY4oFQ1qrh1XwSpIhWWVeC6d7DI+PANj8J+ql+4Q3vLRSat4qg+DEPdOOZt19Y3Y26VBKCpto1Q3EaQZuCaMiziIpU0KilUzOhNxnlvsW3i2cxhyr8UCZFvR8XH0Z5ZuXgnmNphVtv3R66eVlXiFsCdx0SixAHXFxF04yolxVJXb19BGp2zMIcBSmotZHxnKBwFkMECZ0CARBzwp2tuh1FEExalzQbdqFlwlqQAFzJpuUODxfZX9OjjX3GxG7ya7Q+2s3paScplJYugwB8oreWsMTcfOmBcODUlmrEZQnKGU7el1KBMgULAqGTIFjOQtD6hg3Sytr9GZhjA11L2p7yQ3/JE9/m4YBg2VkCg9RGdYg2OZprI2Xw== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: vl9nwYU6oxuXPRj0yzFt1wke/RE0wBfslyqeZx9TJ2hvcmhrpORDmeHyjjNHvtBjK3uTmJXJRPtSRF3mMXkOFDyKLresp6s/IQgmo0A0A7M4kgZCP+JfsgsC414SLlTuCF+YmKnyZB4TndGc1a/FyCBKjaJilnqUcTcOylbZsgfGhjIXIQswgSHLni6kb7jTJ2GLy2EzDX/rX+z0wqHGleyX30g/rlMCwfUvXi2s+LsNOoveEqMRJoAXMMl25R1TvMgPtjkHWYKBWMRziVImizn+tq4FQQFIv/J+QkGUVDKOQnIBJ6BzBoBU8EXwy99l9d7wfl1w4b4vLQOx9jQzHEurnn7S+C/ooCl7m3WTEBPEl/xkeTdBWfwyT9JvrKfrU/hE2PzXd7ITReuv2hPiqZ8Enzg2pC3U1tkS/2OG8I1f40kJrOFrrHG5W1+9Qp8b1bSQb772apO/i4zFanZ0DuNiJBVtP+aiHCvwvm6uJNy2V+a4p63j5xrlj+rWatpKReK5JhVRTgMs/8/G+xyJYyJKDu2dEcjYV0I5lvHhPhKR5Ua8ds3407eJP4TUkvSLSsgLNLGE/3pSqBxN/lJxXwtShZ/KZzeyQQiZHHu33vCsjUJekv6DFZTGqv5QR4C/dW7HJHPn7WJ9FbJcWcpNe2yYuGUKZJ/gPBCXZu05cjGw0gBda8nRZ22XM7i5/jKRhihHcz9Cnfa1MelhLDIQQcI7sGDL89CxsHqxBhLMvfn2W9ooZ/scBiTYaCCgszjalQNyUKmFcvA4e3IdGyxkrXEBJ1BURiJObkh3uTwsWGeOBUOXjd0TbYNrkCT200avetrZr1GKA5HdYEwoJRO52SG3TGnoPdm+hZr2YZl3/z8nF8xQyAS1dUQYI8wqSbS4SzWNTxDlT2vmTdLaWAt7eOMO6fnx/qVry3whlAi5U3Qj2wWqxWzjgvZB9pU5rveIvsanAJeNxHup4qXSG0SA6w== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8d46a484-da97-4ca0-c702-08d9df48a59f X-MS-Exchange-CrossTenant-AuthSource: AM7PR03MB6660.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Jan 2022 14:48:56.1017 (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: DB6PR03MB3000 Subject: [FFmpeg-devel] [PATCH v2 31/31] avutil/fifo: Deprecate old FIFO API 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: Anton Khirnov Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: nep+2iU4tz8D From: Anton Khirnov Users should switch to the superior AVFifo API. Unfortunately AVFifoBuffer fields cannot be marked as deprecated because it would trigger a warning wherever fifo.h is #included, due to inlined av_fifo_peek2(). --- doc/APIchanges | 8 ++++++++ libavutil/fifo.c | 4 ++++ libavutil/fifo.h | 45 ++++++++++++++++++++++++++++++++++++++++++++- libavutil/version.h | 3 ++- 4 files changed, 58 insertions(+), 2 deletions(-) diff --git a/doc/APIchanges b/doc/APIchanges index 75e0b1f49a..db6b2ab809 100644 --- a/doc/APIchanges +++ b/doc/APIchanges @@ -14,6 +14,14 @@ libavutil: 2021-04-27 API changes, most recent first: +2022-01-xx - xxxxxxxxxx - lavu 57.20.100 - fifo.h + Deprecate AVFifoBuffer and the API around it, namely av_fifo_alloc(), + av_fifo_alloc_array(), av_fifo_free(), av_fifo_freep(), av_fifo_reset(), + av_fifo_size(), av_fifo_space(), av_fifo_generic_peek_at(), + av_fifo_generic_peek(), av_fifo_generic_read(), av_fifo_generic_write(), + av_fifo_realloc2(), av_fifo_grow(), av_fifo_drain() and av_fifo_peek2(). + Users should switch to the AVFifo-API. + 2022-01-xx - xxxxxxxxxx - lavu 57.19.100 - fifo.h Add a new FIFO API, which allows setting a FIFO element size. This API operates on these elements rather than on bytes. diff --git a/libavutil/fifo.c b/libavutil/fifo.c index 5a09dd3877..818e39694b 100644 --- a/libavutil/fifo.c +++ b/libavutil/fifo.c @@ -285,6 +285,8 @@ void av_fifo_freep2(AVFifo **f) } +#if FF_API_FIFO_OLD_API +FF_DISABLE_DEPRECATION_WARNINGS #define OLD_FIFO_SIZE_MAX (size_t)FFMIN3(INT_MAX, UINT32_MAX, SIZE_MAX) AVFifoBuffer *av_fifo_alloc_array(size_t nmemb, size_t size) @@ -497,3 +499,5 @@ void av_fifo_drain(AVFifoBuffer *f, int size) f->rptr -= f->end - f->buffer; f->rndx += size; } +FF_ENABLE_DEPRECATION_WARNINGS +#endif diff --git a/libavutil/fifo.h b/libavutil/fifo.h index 55548fbeb4..40852c0f70 100644 --- a/libavutil/fifo.h +++ b/libavutil/fifo.h @@ -220,6 +220,7 @@ void av_fifo_reset2(AVFifo *f); void av_fifo_freep2(AVFifo **f); +#if FF_API_FIFO_OLD_API typedef struct AVFifoBuffer { uint8_t *buffer; uint8_t *rptr, *wptr, *end; @@ -230,7 +231,9 @@ typedef struct AVFifoBuffer { * Initialize an AVFifoBuffer. * @param size of FIFO * @return AVFifoBuffer or NULL in case of memory allocation failure + * @deprecated use av_fifo_alloc2() */ +attribute_deprecated AVFifoBuffer *av_fifo_alloc(unsigned int size); /** @@ -238,25 +241,33 @@ AVFifoBuffer *av_fifo_alloc(unsigned int size); * @param nmemb number of elements * @param size size of the single element * @return AVFifoBuffer or NULL in case of memory allocation failure + * @deprecated use av_fifo_alloc2() */ +attribute_deprecated AVFifoBuffer *av_fifo_alloc_array(size_t nmemb, size_t size); /** * Free an AVFifoBuffer. * @param f AVFifoBuffer to free + * @deprecated use the AVFifo API with av_fifo_freep2() */ +attribute_deprecated void av_fifo_free(AVFifoBuffer *f); /** * Free an AVFifoBuffer and reset pointer to NULL. * @param f AVFifoBuffer to free + * @deprecated use the AVFifo API with av_fifo_freep2() */ +attribute_deprecated void av_fifo_freep(AVFifoBuffer **f); /** * Reset the AVFifoBuffer to the state right after av_fifo_alloc, in particular it is emptied. * @param f AVFifoBuffer to reset + * @deprecated use av_fifo_reset2() with the new AVFifo-API */ +attribute_deprecated void av_fifo_reset(AVFifoBuffer *f); /** @@ -264,7 +275,9 @@ void av_fifo_reset(AVFifoBuffer *f); * amount of data you can read from it. * @param f AVFifoBuffer to read from * @return size + * @deprecated use av_fifo_can_read() with the new AVFifo-API */ +attribute_deprecated int av_fifo_size(const AVFifoBuffer *f); /** @@ -272,7 +285,9 @@ int av_fifo_size(const AVFifoBuffer *f); * amount of data you can write into it. * @param f AVFifoBuffer to write into * @return size + * @deprecated use av_fifo_can_write() with the new AVFifo-API */ +attribute_deprecated int av_fifo_space(const AVFifoBuffer *f); /** @@ -285,7 +300,11 @@ int av_fifo_space(const AVFifoBuffer *f); * @param dest data destination * * @return a non-negative number on success, a negative error code on failure + * + * @deprecated use the new AVFifo-API with av_fifo_peek() when func == NULL, + * av_fifo_peek_to_cb() otherwise */ +attribute_deprecated int av_fifo_generic_peek_at(AVFifoBuffer *f, void *dest, int offset, int buf_size, void (*func)(void*, void*, int)); /** @@ -297,7 +316,11 @@ int av_fifo_generic_peek_at(AVFifoBuffer *f, void *dest, int offset, int buf_siz * @param dest data destination * * @return a non-negative number on success, a negative error code on failure + * + * @deprecated use the new AVFifo-API with av_fifo_peek() when func == NULL, + * av_fifo_peek_to_cb() otherwise */ +attribute_deprecated int av_fifo_generic_peek(AVFifoBuffer *f, void *dest, int buf_size, void (*func)(void*, void*, int)); /** @@ -308,7 +331,11 @@ int av_fifo_generic_peek(AVFifoBuffer *f, void *dest, int buf_size, void (*func) * @param dest data destination * * @return a non-negative number on success, a negative error code on failure + * + * @deprecated use the new AVFifo-API with av_fifo_read() when func == NULL, + * av_fifo_read_to_cb() otherwise */ +attribute_deprecated int av_fifo_generic_read(AVFifoBuffer *f, void *dest, int buf_size, void (*func)(void*, void*, int)); /** @@ -323,7 +350,11 @@ int av_fifo_generic_read(AVFifoBuffer *f, void *dest, int buf_size, void (*func) * indicate no more data available to write. * If func is NULL, src is interpreted as a simple byte array for source data. * @return the number of bytes written to the FIFO or a negative error code on failure + * + * @deprecated use the new AVFifo-API with av_fifo_write() when func == NULL, + * av_fifo_write_to_cb() otherwise */ +attribute_deprecated int av_fifo_generic_write(AVFifoBuffer *f, void *src, int size, int (*func)(void*, void*, int)); /** @@ -333,7 +364,11 @@ int av_fifo_generic_write(AVFifoBuffer *f, void *src, int size, int (*func)(void * @param f AVFifoBuffer to resize * @param size new AVFifoBuffer size in bytes * @return <0 for failure, >=0 otherwise + * + * @deprecated use the new AVFifo-API with av_fifo_grow2() to increase FIFO size, + * decreasing FIFO size is not supported */ +attribute_deprecated int av_fifo_realloc2(AVFifoBuffer *f, unsigned int size); /** @@ -344,14 +379,21 @@ int av_fifo_realloc2(AVFifoBuffer *f, unsigned int size); * @param f AVFifoBuffer to resize * @param additional_space the amount of space in bytes to allocate in addition to av_fifo_size() * @return <0 for failure, >=0 otherwise + * + * @deprecated use the new AVFifo-API with av_fifo_grow2(); note that unlike + * this function it adds to the allocated size, rather than to the used size */ +attribute_deprecated int av_fifo_grow(AVFifoBuffer *f, unsigned int additional_space); /** * Read and discard the specified amount of data from an AVFifoBuffer. * @param f AVFifoBuffer to read from * @param size amount of data to read in bytes + * + * @deprecated use the new AVFifo-API with av_fifo_drain2() */ +attribute_deprecated void av_fifo_drain(AVFifoBuffer *f, int size); #if FF_API_FIFO_PEEK2 @@ -364,7 +406,7 @@ void av_fifo_drain(AVFifoBuffer *f, int size); * than the used buffer size or the returned pointer will * point outside to the buffer data. * The used buffer size can be checked with av_fifo_size(). - * @deprecated use av_fifo_generic_peek_at() + * @deprecated use the new AVFifo-API with av_fifo_peek() or av_fifo_peek_to_cb() */ attribute_deprecated static inline uint8_t *av_fifo_peek2(const AVFifoBuffer *f, int offs) @@ -377,5 +419,6 @@ static inline uint8_t *av_fifo_peek2(const AVFifoBuffer *f, int offs) return ptr; } #endif +#endif #endif /* AVUTIL_FIFO_H */ diff --git a/libavutil/version.h b/libavutil/version.h index 331b8f6ea9..5e47f61fe6 100644 --- a/libavutil/version.h +++ b/libavutil/version.h @@ -79,7 +79,7 @@ */ #define LIBAVUTIL_VERSION_MAJOR 57 -#define LIBAVUTIL_VERSION_MINOR 19 +#define LIBAVUTIL_VERSION_MINOR 20 #define LIBAVUTIL_VERSION_MICRO 100 #define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \ @@ -110,6 +110,7 @@ #define FF_API_COLORSPACE_NAME (LIBAVUTIL_VERSION_MAJOR < 58) #define FF_API_AV_MALLOCZ_ARRAY (LIBAVUTIL_VERSION_MAJOR < 58) #define FF_API_FIFO_PEEK2 (LIBAVUTIL_VERSION_MAJOR < 58) +#define FF_API_FIFO_OLD_API (LIBAVUTIL_VERSION_MAJOR < 58) /** * @}