From patchwork Sat Nov 19 21:35:15 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rick Kern X-Patchwork-Id: 39341 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a21:999a:b0:a4:2148:650a with SMTP id ve26csp1243440pzb; Sat, 19 Nov 2022 13:35:41 -0800 (PST) X-Google-Smtp-Source: AA0mqf5uHIvs3H3xvstOSNABCOyaYiMJUYIGqDhj5iOfyTlSlrQjy8QfN8xD4jymBKuUqtDsYD7Y X-Received: by 2002:a17:906:cf85:b0:78d:b66d:749f with SMTP id um5-20020a170906cf8500b0078db66d749fmr10116075ejb.566.1668893741074; Sat, 19 Nov 2022 13:35:41 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1668893741; cv=none; d=google.com; s=arc-20160816; b=h6qBo3F2x57NQ3wdw7X8yYJ0BsTlf2mqJ5a58gMgVHFzlsTxbrHapOlbT1kDSfDKLS fEn5tDhrGTInoEuaXkCw3OX/cjEi8ABCAghmFRmrjFA885cpkPBJahJ3bgdiCes47ot8 kWxuGd76VBxgn+AeeePMbgqMXoYW6NF15WnTGYk06ZHIHGpRiNJgkyvaZKinyt3oOvLX c5UtQ+XW8ly89yRpW/agw2/j9izmR7cDnyB1EnFYu6jd97YAyG5lJNTE6PKtl6uROvhO K7QpCeMz9hcUYkstfyDi07h4O6BSa7CPtV6CtnSc93K24KZ1+4XF1Yct0R7vHUuLMrRB JcBg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:references:in-reply-to:message-id :date:to:from:dkim-signature:delivered-to; bh=+6YjV1GVadNZr4F0X8Z6xXnZjA/jRI8DtKGvXQQG+0w=; b=x5QJqpjcnAeoGPAI5pJWEeb7Ugzdz23YvXPCBsAkZb7rvWfBQn89eRcnyB6KvNLIOp rK2N5IRL6FNO3m2kZ6fW+sfthrE1E//ZcElIYuM57AsFghqpXaDsNp563DaTM+tXqtYI NBCcvYluq7bb5mqtoR2KK6N531MmO2bLCxT3TibtxnqqNpV75knYOBCx+RL/APw8hnFC rAHrpAOJKAkhfjzK9w/Q6kLSMuFleoHkhJgewfwAHXusMIZm1VgNPgWm975veorpL/mb P4cJJFIaiVtJGU4JXw2+lfnc69qKK2ywT5kpBPKbRZe9lBX5DM5KfhDRcpkrM792XQ3V 4JVg== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b=YdiBJrlG; 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=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id hq6-20020a1709073f0600b007adf3ed5d20si7156432ejc.376.2022.11.19.13.35.40; Sat, 19 Nov 2022 13:35:41 -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=@gmail.com header.s=20210112 header.b=YdiBJrlG; 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=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 2986E68B1CE; Sat, 19 Nov 2022 23:35:29 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qk1-f171.google.com (mail-qk1-f171.google.com [209.85.222.171]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 87C06689C24 for ; Sat, 19 Nov 2022 23:35:21 +0200 (EET) Received: by mail-qk1-f171.google.com with SMTP id 8so5825637qka.1 for ; Sat, 19 Nov 2022 13:35:21 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=a+IdOFYVx4wJ6ERtYB9G3N4/MISo/2Vqu05fWTPB23U=; b=YdiBJrlGsHg49O8sZDN0xul9d91jLp2yZm175XGSdKL0lxW0PM6D05+P1JGQYWmxKA VBLmGWmt91pJ/k2HZkjK1UjaidyTxMX/FJ/9JC8eE5baus2KIu7CMkVYKsNvUznxLGTe v6EwalON+ELc/dDimyQae9ACz7JfBTL15wdMeeg+KExewMHt1mbIoUGvtJZhhckQbRht 5PVVwCO2iJMgWnEBsMi/0XWB1EeyVMSkvsHpxwtsDDmSjzgtkdYQYFNSZXKOip7ryq+t uBaJ13QzgApFrPQHmVM5gLiRlzMZ5ScgLO2mKOLRjnpYngT1UAzrnpJzBOpQQ5NCHy8I OSHw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=a+IdOFYVx4wJ6ERtYB9G3N4/MISo/2Vqu05fWTPB23U=; b=eyU382N9RRVgkm0hEu0uoKrJ3qHIngqjgCMnjJM8cgfgvtp7FSH3lKcTl9/qwzzjx+ FWN6YGlCWqozQ1HLAyfJUS4Ie0aDXnIShTOm6fnzFmhWdi+FVafHC3fh+ref3hdrS7/u SQFpr1G6SarzmElOqz8z6bXcsR7JW4oU1R/U3wG9D+qrp3vxPS+HnxYjnBKL0Hb2umn+ A9/iKwyISuGCt4Mh90rww0y+Sq/8Uav4OaaKtuPT3q+QtbgMu2ZvIbtQmrPt4KmZZ8/F L2ppvRVQZ8dmS8UBRmF2fvVDIFer3uBfAMnGJWIyVJJCqU2U22aYRxWWxHC4ew9bQLG5 Quiw== X-Gm-Message-State: ANoB5pk13wQwhz23QvPhQVe0EvxX/nxLnRs4csiUyiboqMxrsOrn5IUa Ngtp06TBGiY1y27vzX7pSoF2D8WhzjA= X-Received: by 2002:ae9:f10c:0:b0:6ec:5496:4e17 with SMTP id k12-20020ae9f10c000000b006ec54964e17mr10908724qkg.559.1668893719781; Sat, 19 Nov 2022 13:35:19 -0800 (PST) Received: from localhost.localdomain ([50.201.95.250]) by smtp.gmail.com with ESMTPSA id w128-20020a379486000000b006cf19068261sm4954756qkd.116.2022.11.19.13.35.18 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 19 Nov 2022 13:35:19 -0800 (PST) From: Rick Kern To: ffmpeg-devel@ffmpeg.org Date: Sat, 19 Nov 2022 16:35:15 -0500 Message-Id: <20221119213516.45148-2-kernrj@gmail.com> X-Mailer: git-send-email 2.38.1 In-Reply-To: <20221119213516.45148-1-kernrj@gmail.com> References: <20221119213516.45148-1-kernrj@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 1/2] fftools/objpool: move objpool to libavutil X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: wyxgiuZKZdih Moved objpool to libavutil to make it available outside of fftools. Signed-off-by: Rick Kern --- fftools/Makefile | 1 - fftools/ffmpeg_mux.c | 2 +- fftools/sync_queue.c | 2 +- fftools/thread_queue.c | 2 +- fftools/thread_queue.h | 2 +- libavutil/Makefile | 2 ++ {fftools => libavutil}/objpool.c | 0 {fftools => libavutil}/objpool.h | 0 8 files changed, 6 insertions(+), 5 deletions(-) rename {fftools => libavutil}/objpool.c (100%) rename {fftools => libavutil}/objpool.h (100%) diff --git a/fftools/Makefile b/fftools/Makefile index 8ac38e75d2..25b11deaff 100644 --- a/fftools/Makefile +++ b/fftools/Makefile @@ -16,7 +16,6 @@ OBJS-ffmpeg += \ fftools/ffmpeg_mux.o \ fftools/ffmpeg_mux_init.o \ fftools/ffmpeg_opt.o \ - fftools/objpool.o \ fftools/sync_queue.o \ fftools/thread_queue.o \ diff --git a/fftools/ffmpeg_mux.c b/fftools/ffmpeg_mux.c index ad04f5049d..bd1a1ed403 100644 --- a/fftools/ffmpeg_mux.c +++ b/fftools/ffmpeg_mux.c @@ -22,7 +22,6 @@ #include "ffmpeg.h" #include "ffmpeg_mux.h" -#include "objpool.h" #include "sync_queue.h" #include "thread_queue.h" @@ -30,6 +29,7 @@ #include "libavutil/intreadwrite.h" #include "libavutil/log.h" #include "libavutil/mem.h" +#include "libavutil/objpool.h" #include "libavutil/timestamp.h" #include "libavutil/thread.h" diff --git a/fftools/sync_queue.c b/fftools/sync_queue.c index c2b23ee4f5..75b8dc72fc 100644 --- a/fftools/sync_queue.c +++ b/fftools/sync_queue.c @@ -24,8 +24,8 @@ #include "libavutil/fifo.h" #include "libavutil/mathematics.h" #include "libavutil/mem.h" +#include "libavutil/objpool.h" -#include "objpool.h" #include "sync_queue.h" typedef struct SyncQueueStream { diff --git a/fftools/thread_queue.c b/fftools/thread_queue.c index a1ab4ce92e..ced7b02fba 100644 --- a/fftools/thread_queue.c +++ b/fftools/thread_queue.c @@ -24,9 +24,9 @@ #include "libavutil/fifo.h" #include "libavutil/intreadwrite.h" #include "libavutil/mem.h" +#include "libavutil/objpool.h" #include "libavutil/thread.h" -#include "objpool.h" #include "thread_queue.h" enum { diff --git a/fftools/thread_queue.h b/fftools/thread_queue.h index 0cc8c71ebd..6d5862bd1f 100644 --- a/fftools/thread_queue.h +++ b/fftools/thread_queue.h @@ -21,7 +21,7 @@ #include -#include "objpool.h" +#include "libavutil/objpool.h" typedef struct ThreadQueue ThreadQueue; diff --git a/libavutil/Makefile b/libavutil/Makefile index 3d9c07aea8..bd9ac28335 100644 --- a/libavutil/Makefile +++ b/libavutil/Makefile @@ -62,6 +62,7 @@ HEADERS = adler32.h \ mem.h \ motion_vector.h \ murmur3.h \ + objpool.h \ opt.h \ parseutils.h \ pixdesc.h \ @@ -149,6 +150,7 @@ OBJS = adler32.o \ md5.o \ mem.o \ murmur3.o \ + objpool.o \ opt.o \ parseutils.o \ pixdesc.o \ diff --git a/fftools/objpool.c b/libavutil/objpool.c similarity index 100% rename from fftools/objpool.c rename to libavutil/objpool.c diff --git a/fftools/objpool.h b/libavutil/objpool.h similarity index 100% rename from fftools/objpool.h rename to libavutil/objpool.h From patchwork Sat Nov 19 21:35:16 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rick Kern X-Patchwork-Id: 39342 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a21:999a:b0:a4:2148:650a with SMTP id ve26csp1243478pzb; Sat, 19 Nov 2022 13:35:48 -0800 (PST) X-Google-Smtp-Source: AA0mqf7210HSEz1fXbf4MAWqrI8DghSLTCd+Is4UDtPyVl8ne+MfcxyyEGJSpzNVfdo76VWYOasC X-Received: by 2002:a17:906:2ac3:b0:7ad:f2f9:2b49 with SMTP id m3-20020a1709062ac300b007adf2f92b49mr9912819eje.94.1668893748759; Sat, 19 Nov 2022 13:35:48 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1668893748; cv=none; d=google.com; s=arc-20160816; b=IGuBD1nHxMazPddFXuA0N2M/O7RhxbM62LJTMkZXb2AqnHreHIkbsuF6bCOF3rVLIE 9MSXvIqPxED6UvxKRi12L3M6Jcf+RV0CgwK2W/1f67pscQMBsPgfCk5DY4j4pM3qLPhI dDb/MFHYF9bjlrGvmwee+0D3QhPM6agSBSBcfYsXDiElov0IGdSl7JCU9PxvrWfj+MMu 80WGipeTWpKURW307qMRgdgHolULuDJfMXjlZATFgt0fvAEpCh7GXUTK2TMOqX9fBPKV zU0aYhTh1IG+1qTeijk4J7eDIw+TiOJdX++6+WvkPgy5J3FbDmGcaNa0Cd3vrEjbdyWX 8TOA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:references:in-reply-to:message-id :date:to:from:dkim-signature:delivered-to; bh=FBKvrSMMviokUVgGIHRiSk6Zu0IGjEq8ugYBxKHKIAw=; b=vNdS9gYXFf3Q4Y2aFAekcDd28FtjhIridZduqa6XpVKdXnq0XOJuhnObh1+E8zfaWz q2E+WJX4KozNiuH8BGKINbTJouuOoeyNQ9k8ynf/fVneKKWjc4NAxksnUgjfsOURn09V q7LdVe9tkwuO1epYkrmI5v1JB7Bb4Zr2UNdvbpMI5+L85qKNaSdCLhxN6csRJKXNyIR3 g4tPV7i52RlJNsoGeJPvh+2orwZhJTZVEjypfqToVmEb1QCXqu0ALoikD+UCk34Mxz3X XpPx6nGVCrGuVsn5D0050/HgcsEF6A7brjRp5Ab9cET/P7CnCbXlaaHFI+k25ZWoL7Ff T7mQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b=Ecwu9XmN; 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=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id d21-20020a1709067f1500b007707b853e46si4882964ejr.882.2022.11.19.13.35.48; Sat, 19 Nov 2022 13:35:48 -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=@gmail.com header.s=20210112 header.b=Ecwu9XmN; 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=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 4B00768B640; Sat, 19 Nov 2022 23:35:30 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qk1-f180.google.com (mail-qk1-f180.google.com [209.85.222.180]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 7B6CE68A4CB for ; Sat, 19 Nov 2022 23:35:22 +0200 (EET) Received: by mail-qk1-f180.google.com with SMTP id k2so5795881qkk.7 for ; Sat, 19 Nov 2022 13:35:22 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=pAm+PXx0IXUSYmWkzc4qeKYCxMTNGNxtdOAVELKK0yU=; b=Ecwu9XmNMjm/fhoSMN3Q94wHvXDcj1KljxuogEArENbfvkaR01cNWk2H2QdZUv4/sq Kxk6nBZDbfaCN0RnYGF+XEY1x3YwoPMw2PFMQ5gfV4hM92oTNbT8u+aLsiybj48tQprT MVkDR5vUES9zlgn6p271zXB377DOs4+sLWGmu0lRfRjEDOZed7q1fpOijaOoMoeNu4a9 W9hglKrZX5hwxJDcS6YehRKTvd0yrOQMC17E3PNQLtc99GU4qDL80SgJxwE5JuUXT0Yk d0AVvvJqrz2PkCW1aBoi0HYtxImj+UESUwrYV4xNQJcz/8uN5NO6cK7jOVP99M+05d/2 Eucg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=pAm+PXx0IXUSYmWkzc4qeKYCxMTNGNxtdOAVELKK0yU=; b=k5a87Ks3D1x9ehKZMB5Ciplmp1tTL1ZD0AHQLbKkdQjJm9KOvWFvhEQXwGMxRHmNK6 0VdO2uBnFui3b5j6cmmTFwjH26do/Exzny4EK8b3JO0J72oUDl/Onjs7IpO7tSAl6nhi kw7LYNo6FTCGXA8IhaEhTbNEvZ+jaHZkYUme6UTEoTi66gJ2M8gN+L+yhtXSAzLzF50m UYvqQnSgAog3KjOvIPoQW2+VgAlISZa8W8m1nmXXGwZ24EpbOZQS8fDcRsqLyYf9nZZR Q27v+EahEptCBQOBhEOLSDgtvbMoTGq+LNwmS5yYKe7ZQtKcIER0C0mvSFRqRZjxYtwr ygWQ== X-Gm-Message-State: ANoB5pnUTo345BAm+e9mm5+DLiGO0L7cULIqfjqjSDq4ZxWji83y4NiT rr/u2+WrO8H2IiuMugXw/pEyIHb5GdM= X-Received: by 2002:a05:620a:488d:b0:6fa:74df:f8de with SMTP id ea13-20020a05620a488d00b006fa74dff8demr11137999qkb.7.1668893720840; Sat, 19 Nov 2022 13:35:20 -0800 (PST) Received: from localhost.localdomain ([50.201.95.250]) by smtp.gmail.com with ESMTPSA id w128-20020a379486000000b006cf19068261sm4954756qkd.116.2022.11.19.13.35.19 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 19 Nov 2022 13:35:20 -0800 (PST) From: Rick Kern To: ffmpeg-devel@ffmpeg.org Date: Sat, 19 Nov 2022 16:35:16 -0500 Message-Id: <20221119213516.45148-3-kernrj@gmail.com> X-Mailer: git-send-email 2.38.1 In-Reply-To: <20221119213516.45148-1-kernrj@gmail.com> References: <20221119213516.45148-1-kernrj@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 2/2] lavc/videotoolboxenc: use objectpool for encoder output information X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: GnFiikwgWDnX Instead of allocating/freeing, use objpool for data passed from an input frame to an output packet. Signed-off-by: Rick Kern --- libavcodec/videotoolboxenc.c | 80 ++++++++++++++++++++++++++++++++---- 1 file changed, 71 insertions(+), 9 deletions(-) diff --git a/libavcodec/videotoolboxenc.c b/libavcodec/videotoolboxenc.c index dc9e321d3d..205cbfbc68 100644 --- a/libavcodec/videotoolboxenc.c +++ b/libavcodec/videotoolboxenc.c @@ -24,6 +24,7 @@ #include #include #include "avcodec.h" +#include "libavutil/objpool.h" #include "libavutil/opt.h" #include "libavutil/avassert.h" #include "libavutil/avstring.h" @@ -251,8 +252,49 @@ typedef struct VTEncContext { /* can't be bool type since AVOption will access it as int */ int a53_cc; + + ObjPool *output_node_pool; } VTEncContext; +static BufNode *output_node_alloc(void) { return av_mallocz(sizeof(BufNode)); } +static void output_node_free(BufNode **node) { av_freep(node); } +static void output_node_reset(BufNode *node) { + if (node->cm_buffer != NULL) { + CFRelease(node->cm_buffer); + } + + if (node->sei != NULL) { + if (node->sei->data != NULL) { + av_free(node->sei->data); + } + + av_free(node->sei); + } + + memset(node, 0, sizeof(*node)); +} + +static int alloc_output_node_pool(ObjPool **pool_out) { + ObjPool *pool = NULL; + + if (pool_out == NULL) { + return AVERROR(EINVAL); + } + + pool = objpool_alloc( + output_node_alloc, + output_node_reset, + output_node_free); + + if (pool == NULL) { + return AVERROR(ENOMEM); + } + + *pool_out = pool; + + return 0; +} + static int vtenc_populate_extradata(AVCodecContext *avctx, CMVideoCodecType codec_type, CFStringRef profile_level, @@ -285,8 +327,7 @@ static void set_async_error(VTEncContext *vtctx, int err) while (info) { BufNode *next = info->next; - CFRelease(info->cm_buffer); - av_free(info); + objpool_release(vtctx->output_node_pool, &info); info = next; } @@ -336,22 +377,29 @@ static int vtenc_q_pop(VTEncContext *vtctx, bool wait, CMSampleBufferRef *buf, E pthread_mutex_unlock(&vtctx->lock); *buf = info->cm_buffer; + if (*buf != NULL) { + CFRetain(*buf); + } + if (sei && *buf) { *sei = info->sei; - } else if (info->sei) { - if (info->sei->data) av_free(info->sei->data); - av_free(info->sei); + info->sei = NULL; } - av_free(info); + objpool_release(vtctx->output_node_pool, &info); return 0; } static void vtenc_q_push(VTEncContext *vtctx, CMSampleBufferRef buffer, ExtraSEI *sei) { - BufNode *info = av_malloc(sizeof(BufNode)); - if (!info) { + BufNode *info = NULL; + int status = objpool_get(vtctx->output_node_pool, &info); + + if (status < 0) { + set_async_error(vtctx, status); + return; + } else if (!info) { set_async_error(vtctx, AVERROR(ENOMEM)); return; } @@ -1589,7 +1637,17 @@ static av_cold int vtenc_init(AVCodecContext *avctx) } avctx->has_b_frames = vtctx->has_b_frames; - return 0; + status = alloc_output_node_pool(&vtctx->output_node_pool); + + if (status < 0) { + av_log( + avctx, + AV_LOG_ERROR, + "Failed to allocate output pool (%d)\n", + status); + } + + return status; } static void vtenc_get_frame_info(CMSampleBufferRef buffer, bool *is_key_frame) @@ -2647,6 +2705,10 @@ static av_cold int vtenc_close(AVCodecContext *avctx) vtctx->ycbcr_matrix = NULL; } + if (vtctx->output_node_pool != NULL) { + objpool_free(&vtctx->output_node_pool); + } + return 0; }