From patchwork Sun Jul 7 10:21:30 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zhao Zhili X-Patchwork-Id: 50384 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a59:cc64:0:b0:482:c625:d099 with SMTP id k4csp5227859vqv; Sun, 7 Jul 2024 03:22:39 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCU4AC+X2qZI2Cjz4xSO0y+5LJp7chnSyOHybU7WUQuEk2BoUkbUMCcOyUmIbPjrz044OiG+GIgeUt+P+KCdl+yrAhqx1widDrb8+Q== X-Google-Smtp-Source: AGHT+IGMPpu3sjXLJUEPZkpd/qPOGAXdIpgyBEVSQbVyvhKeVLD6UsyBDqxOq/AimJWaHCPYhsPs X-Received: by 2002:a17:906:370f:b0:a77:ecf0:84e5 with SMTP id a640c23a62f3a-a77ecf08c1bmr146893466b.14.1720347759092; Sun, 07 Jul 2024 03:22:39 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1720347759; cv=none; d=google.com; s=arc-20160816; b=m7YtX15cqV4E4sLR74SYZLUFEaAiy30+JO+rr19CB3Yknob8zYZq4LAHa0DE3EmKbF eScI6qa0F6ttWXQT5K6kmM4LscsaxLUUq+Ao3kkJVX0367zFC6+XodHrxcTTJIhC4dnB JbVTQQbk66ukoOMIb+irDqCuYZWjaFpG6Se1AniMHxdzicOLpFLPcmLZ0LjcFAji2OJJ wiyFafxzDz0/D9Gyfq6IEiNp9fAh7DiJtsqb1rMHMAePhmEpBLqc8q15Z5hVdG/uqQiw yYBWgo4xU/EL19BvJa+w+dCYF0HR+DL172zGkk9B9Fb52NzB7wltTAm1PBe6L47GarJF yq8w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:date:to:from:message-id :dkim-signature:delivered-to; bh=yAk+KszbJqaTqpESuNWGQRFnncyfI9/H/xLefLXbn5g=; fh=HnHYuZ9XgUo86ZRXTLWWmQxhslYEI9B9taZ5X1DLFfc=; b=k/5ZiOJhW5rFGb3JCrqL2RDmvWmrjGzMKliFcT//8gOta3MI5sESXi/4Z8/Hs0lQ7i Htbl6sersBT7pQTH8tpdl48oeyG4yAAZtnJYLLhXWNhsJ8vL3pLXuZB/FTxH+NfQ63Bm nKn1XzcfOhBh3o15+fc3FZ/Nq5+1z69DE25c6PRaV+k5My0RUdpFyQnDU7ywuI1Fb1K7 urQmz2Gn7regvmbMr9dW9gYpiFpgh0htdJ+jgwxv1JdttIxDrvYT8eh4fJGeLT3B1mpj 7gdkO/lo4ujnU92ZNMwNnk8yHTUUAGp9dyisHlUJ/7X7L8vXBGhb5P4/2cf7raDJBZ4b R+Hw==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@foxmail.com header.s=s201512 header.b=goVP8Rmk; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=foxmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id a640c23a62f3a-a77e3fa4f1csi149045066b.15.2024.07.07.03.22.38; Sun, 07 Jul 2024 03:22:39 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@foxmail.com header.s=s201512 header.b=goVP8Rmk; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=foxmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id DE95068DB1B; Sun, 7 Jul 2024 13:22:04 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from out203-205-251-73.mail.qq.com (out203-205-251-73.mail.qq.com [203.205.251.73]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id C989468DA69 for ; Sun, 7 Jul 2024 13:21:46 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foxmail.com; s=s201512; t=1720347696; bh=9XkA8NS0uRcnbbZKYZtKeB6aeunem06uAffdftD2i0s=; h=From:To:Cc:Subject:Date; b=goVP8RmksGlI9Q6rlegcXqkgQqUJcb4LkVW3P/7JEYW4Pp712ezDesxLDczb/Panf uLgV7T0JI9/mKtTLnJ0c8CDFwz0hEKqT3EMJYgzMS33sW3BjuSm7dkWVzvN+ReDNtv mdib8sYlP//8dUhWaxuaa3+BXfBLbH+RAJVbU9KY= Received: from ZHILIZHAO-MB1.tencent.com ([113.116.28.29]) by newxmesmtplogicsvrsza10-0.qq.com (NewEsmtp) with SMTP id 5633A86C; Sun, 07 Jul 2024 18:21:35 +0800 X-QQ-mid: xmsmtpt1720347695t7lzvx2rh Message-ID: X-QQ-XMAILINFO: MR/iVh5QLeieY7Y3CVPCVCPolBHj9nJJFiVdtf/ACkCop6YC74FbF2tZL3xpeY UgzeDGVsfnk68rq4T3HEfaMNMW3vnGrAqyaCnV/HYxyZo5thmSWVObWxNMt4vWL27Ruu0fZf9ReD zWhvxUXtHY9tUxY+EW5oFkr8/Sn2ymoBZ+en1gckV29kk5jNKy9/ceZeCcgONA0cHZzd1N0xzPyA yrfehsvFhvS4ZpOHH+NbiZeHaTicZvMYE5rMVKeLtJViX9Oh1/+MJcA9MIBW3/IoNJRX7Xcc67uO sfNifazyHe3+2NkmhsAP+5S8oN7ByY9OlsZdWz3kAb03KIGZt0Qz0rRJcNDeo2pT+WEU75X9dH4p NxS2AJAiT1s8jhMP+MDE/uImMCCXevK4JLiYJp+WpAo71odoriCw7l0nbAMEIWfzso1r/M/4VE4M OOPdJ1sd9PKI1C/hj2P2o0+mBE8A0FPMX4zZBiWG05Mm9Rt/dWK0K2TRTEGmbTI0l/iIldtJg0JH ApuUFdV0TnLp19Tv5KNUHQ62VCPjpriIKAWmWMayer2TUpjaJqAppXgasIRYE5+uujXmQhIvV4ot UVkhx6p1LBjdinJFkMUBrrZrY+vKj7PbQX6U0blDOpWCc83lBoN2Md8umSo7aDa4VpypbQAdXev3 bIXcM0k9OdGQVEOvxo7r0Y4wh/ISDpiTfAytEh6jNK1mkOqD/m4g6P/NdnMdzg7EJ91n8x9L5hEs vJUwu0WPBGtGpGozdWtlTcatTuhRNkMeEVDQkkTGZW0uTpsfq5L0WeUi3mBAjtK46BCBGqVEJDFw yClTY1IB4pxMp1X+yGO6s2NeMiaxvxuN6tvZT6BaPSSHGP9KbtTXUa0AofbRw0a3njtfHOTGmEFY nphxXRBf/YpktTOLosMk8vlQhpTFdE75GY3V5XEOdXIc/LqA0vzPHoKjbbcwKuMbZic3s8T8WLe1 3LrHcTnw0xuBrpLkoRJDf3qKkXadZ0 X-QQ-XMRINFO: MPJ6Tf5t3I/ycC2BItcBVIA= From: Zhao Zhili To: ffmpeg-devel@ffmpeg.org Date: Sun, 7 Jul 2024 18:21:30 +0800 X-OQ-MSGID: <20240707102134.93935-1-quinkblack@foxmail.com> X-Mailer: git-send-email 2.42.0 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 1/5] avcodec/videotoolboxenc: Don't ignore ENOMEM 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: Zhao Zhili Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: jE+KiVRwRF+s From: Zhao Zhili --- libavcodec/videotoolboxenc.c | 29 ++++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/libavcodec/videotoolboxenc.c b/libavcodec/videotoolboxenc.c index 42065cbcb3..91ee507050 100644 --- a/libavcodec/videotoolboxenc.c +++ b/libavcodec/videotoolboxenc.c @@ -2585,14 +2585,13 @@ static int vtenc_send_frame(AVCodecContext *avctx, if (vtctx->a53_cc && side_data && side_data->size) { sei = av_mallocz(sizeof(*sei)); if (!sei) { - av_log(avctx, AV_LOG_ERROR, "Not enough memory for closed captions, skipping\n"); - } else { - int ret = ff_alloc_a53_sei(frame, 0, &sei->data, &sei->size); - if (ret < 0) { - av_log(avctx, AV_LOG_ERROR, "Not enough memory for closed captions, skipping\n"); - av_free(sei); - sei = NULL; - } + status = AVERROR(ENOMEM); + goto out; + } + status = ff_alloc_a53_sei(frame, 0, &sei->data, &sei->size); + if (status < 0) { + av_free(sei); + goto out; } } #endif @@ -2608,15 +2607,19 @@ static int vtenc_send_frame(AVCodecContext *avctx, NULL ); - if (frame_dict) CFRelease(frame_dict); - CFRelease(cv_img); - if (status) { av_log(avctx, AV_LOG_ERROR, "Error: cannot encode frame: %d\n", status); - return AVERROR_EXTERNAL; + status = AVERROR_EXTERNAL; + // Not necessary, just in case new code put after here + goto out; } - return 0; +out: + if (frame_dict) + CFRelease(frame_dict); + CFRelease(cv_img); + + return status; } static av_cold int vtenc_frame( From patchwork Sun Jul 7 10:21:31 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zhao Zhili X-Patchwork-Id: 50383 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a59:cc64:0:b0:482:c625:d099 with SMTP id k4csp5227815vqv; Sun, 7 Jul 2024 03:22:29 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCU8l2HYabU3BZWCpgQcNBn4rlgITM5zlYF/tLJEvzD7dJtDk8/Cdt+Tbd/AZjhsoX+uSMogbTrfTjl7SwaHYDNM0C+aa6I/W1a55w== X-Google-Smtp-Source: AGHT+IFKyLFDOHiETwYZuGaEd9Uz1KEcLZMrcQEbTDJ6DAiXkM2cNZp8UD6C7kTYs+f5WABfqsd4 X-Received: by 2002:a17:906:b2cd:b0:a75:2495:a6a3 with SMTP id a640c23a62f3a-a77c195d246mr547009566b.67.1720347748787; Sun, 07 Jul 2024 03:22:28 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1720347748; cv=none; d=google.com; s=arc-20160816; b=b9LUQ9Krtj2XExc5viNetzyeGI3tI5cdLX4+zyHaVMCGP8S5Bu3g29RY/Z1nk0LwWH 7xL3rnohz1RCk2wSZ/Cu4Cb8tNN8kzo8NHQM6I5ML836yIp3sMsDlzzZegr8sFW+bbl0 hLZcMAMTZzbecgz03Xt/7OdEweTbQFDmM0j65cY6ixIJs40+eppGo10m2iyVuGjicECj qkgp+Fuhi5XQ4NR0nMMURnzS2kmNnK3ss0iJek05adPGRmKfW4Iuwde0CUGEiT58Z3Uw XvAvyvQ7HbKNCAWcOhW0dNQ+fKEQ1rnS249PwXgqeEa4OZYDjud7rQTk/v7HTj05eazb mflw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:references:in-reply-to:date :to:from:message-id:dkim-signature:delivered-to; bh=/wDE3heFkf3fyL6Z3JUxGUKFADPYBKoZuhEjz4OlTfI=; fh=HnHYuZ9XgUo86ZRXTLWWmQxhslYEI9B9taZ5X1DLFfc=; b=gVh15amfhGkkPmwZSXdysJS0Xpnt5LJZgrv9J9Q4OYCdmt2Jusz8kOBDK89qBoeBOx 7RRlVUU3IlTQ0W6nSupu7QMP9WjOBMrTaXXUEHaZKqeSjaP39ovwqggPAeIQq0qorTGz 9xozHkEsDmnvxfmmBa2kY6nlT5BkweypK9+Bvyyk0XXQOgOMQ2FXLk6g5rdcHChK5Aoo OWgUuTbRAG0qlrwbFCFGSuWrkXe0YkFpiyRUDg8E7tUbvp1OxlZ2D8/XBGsp82b/QFmi 5OEydzR4bQHSiRNOk6+lX0pEhYavqPihv5I83JxWUR9DMaFTtvXjV7kn2qXDIEig+lno 8Jpg==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@foxmail.com header.s=s201512 header.b="jswsb/4w"; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=foxmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id a640c23a62f3a-a77d5b21760si244172566b.193.2024.07.07.03.22.28; Sun, 07 Jul 2024 03:22:28 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@foxmail.com header.s=s201512 header.b="jswsb/4w"; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=foxmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id C2EFF68DB05; Sun, 7 Jul 2024 13:22:02 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from out203-205-251-84.mail.qq.com (unknown [203.205.251.84]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 2185E68D9D3 for ; Sun, 7 Jul 2024 13:21:45 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foxmail.com; s=s201512; t=1720347697; bh=CHhHZ7WRpHyX9IaOj01rY26qwIwfEA4gyc38EvZCqpI=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=jswsb/4wfFzUfb9G0XYKwqztYLDTmPcg4r27iTEzzXIVC52V+nqwkdwbgXjq0MMW6 MOWAUx7hVe0+ubufgttReQpH0Q7Zdc/IffGD5PWYTRPdHH05DhAttmo4e0/NoqGfbm hvi5d9H8HDUzYCqxcIRnoK4vlUlCEH3eA9Kzy0Vc= Received: from ZHILIZHAO-MB1.tencent.com ([113.116.28.29]) by newxmesmtplogicsvrsza10-0.qq.com (NewEsmtp) with SMTP id 5633A86C; Sun, 07 Jul 2024 18:21:35 +0800 X-QQ-mid: xmsmtpt1720347696tzc1453mu Message-ID: X-QQ-XMAILINFO: M58CI+QHpTskLzvk1ZaY1ap6L9+IIzjVKnkWJiOmyktDi8ETfXFpBHQMCbIpUM 3aS9FIfXIA13jcsV4DNaDgB4jXa4+/P10cWNir2ndn8rUt5OL0Id38RaRHypiJ4LXzZ5PXyyJIHl X5+nYYhv4YdFpdKee7zyeNa3tFOGOKfXzMPz0Jio/xb2vzKRVAJlNHEOnyxrE+q9Jp2IpjAbkljD XUgcOwwgdgIgUiTC4YFzP/zS9ZyaKAuTXxDFu7bzs/BOv4zLUqqNEWfegGSHe25RWinRDUU3oNNe MwBCJLXe7FJ4VoGG33RPlybiu2S6CgTOcNo/XNRZe+P6rIUJOw9F+KHWr8r81Z97tWLOmt/I7eW/ Tn234CDUNgJFyzs+Ah4Pc+IMZy4UYu+VwAQE/D2v8JARQYIYdSkjSuxsHeU8nBu9yl0lrJUR8feG sBU4PhYyRaq5103vzmuMEAXftqWb071+wSKkKQP1jhScuM5yqG/ObBNjvkqFkq+jYfh8Bdq9MzBK fnvEhJEfYTjmW1nl7GSH/jDAQSx8wRHkgYL5PJTMABffT9oVXI2eW6n5bwgyaxJoEdPH9/G4Ra8j x9IHyYVi3GC/sLx3hOJRfEWtTdRgnT1WoanDuOL488yL03IDaDkwae+TSq0Dyto1WDAg7y6++wSh KlLD4xHXtEg2lafVhnmwKKk129WJFemVRu5ve3pYVfF+kYDIC4kUuloB6jaK69oUhSn9pmdXYx+m ugqCin4z1Di2WWvtuYhZql4LKepAQ3MJqTDvbkaPnnI9JDRK0wBFcy4sMQfEZ6Tu73sNK6p/49tL i3NRanIr41es1HsKbxLFnxU7LcQt82zdzh/8Bb2cLgR1npSfvUcSAdaxs0J4Mrcm8nSPcxALCGqH OwnnDQ9HRxnqscr7+1py0pDMrMAHF+DmMUI/HJrC/42vKt3fqColWhI3j8I7otL30dUa1CCYsqHj KSn1N4UqK/J3vBrPRlpTtEkqhywr/1Hor+q3VLag0= X-QQ-XMRINFO: NyFYKkN4Ny6FSmKK/uo/jdU= From: Zhao Zhili To: ffmpeg-devel@ffmpeg.org Date: Sun, 7 Jul 2024 18:21:31 +0800 X-OQ-MSGID: <20240707102134.93935-2-quinkblack@foxmail.com> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20240707102134.93935-1-quinkblack@foxmail.com> References: <20240707102134.93935-1-quinkblack@foxmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 2/5] avcodec/videotoolboxenc: Remove unused 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: Zhao Zhili Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: nJNrtH1IvhuT From: Zhao Zhili --- libavcodec/videotoolboxenc.c | 1 - 1 file changed, 1 deletion(-) diff --git a/libavcodec/videotoolboxenc.c b/libavcodec/videotoolboxenc.c index 91ee507050..03e3c9ad42 100644 --- a/libavcodec/videotoolboxenc.c +++ b/libavcodec/videotoolboxenc.c @@ -229,7 +229,6 @@ typedef struct BufNode { CMSampleBufferRef cm_buffer; ExtraSEI *sei; struct BufNode* next; - int error; } BufNode; typedef struct VTEncContext { From patchwork Sun Jul 7 10:21:32 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zhao Zhili X-Patchwork-Id: 50382 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a59:cc64:0:b0:482:c625:d099 with SMTP id k4csp5227770vqv; Sun, 7 Jul 2024 03:22:19 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCXVClf0xPzvxunttjXIeoj7kRr9cIcol9KJ9476hF+xz4Qb5UukqV6E3W/9T0ySeW3R91BAWSm64GFgylX3NZ9KnqPhMHTCDDtQ5g== X-Google-Smtp-Source: AGHT+IGEr9H56dw1iAcHy8QDXj5DyHQSO5R8bY+FqNNtYfbwaM+K5TKAG5usJxuBT+sLQQAf3Psd X-Received: by 2002:a17:907:2da1:b0:a77:eddf:a49c with SMTP id a640c23a62f3a-a77eddfbf14mr140915766b.41.1720347739168; Sun, 07 Jul 2024 03:22:19 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1720347739; cv=none; d=google.com; s=arc-20160816; b=ekmwEwUZSX/Z1Nz4eP3NpyLwU8ACruS5jL0spazP7NEGEqKH7JB1MWETC29Op90BS0 EI8Ux2PdUlpfRpkhhUigsuPldn3dx7pI6U3TJYpjRD0c/WOImhEVLTsUqXqLpgMaFDTS bgsFd9KRjVCzzMELE/W2m4keHwD5GLflPsMVcRXXUoh3op3o9tDxnfNsaUCDB2EK8SQY E0gn2XdHsJpKcI2rxVO3ny1b4Zm3thiqoDscVwQfhPjDH7y7aoC/y9COdXPUvi/MaHj6 Rz+qMusgHSZ7eF9H+qvsEpZyfqipG/4Ykx+bFVpo+8bXO9XjMNka2WJ6SWNq3vCqvk4e fkeQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:references:in-reply-to:date :to:from:message-id:dkim-signature:delivered-to; bh=32DRynPwoKCeU/wcZHa1wpCewt5MgWDXpDWvFAtm64A=; fh=HnHYuZ9XgUo86ZRXTLWWmQxhslYEI9B9taZ5X1DLFfc=; b=liiRLX9L+vvIryxAhjLsnIbtTIonerfUdemrSd5o9aXJVDl4wKlIH+aHTa7lAUZdKA zrwQ3TG0kBe400ZCGoYzdK2we6q0v0y5bHsed28GkO3EYGdCOaGWriYKH4+9uh8RHY8V iAExzY5b4h1AqC5m0Wd8WMgWp7hf6F1ulMCx21nfzPOraB6c9zoxM6lTbQUO03uMH8wI iYOult/ISPk8WdHW6n/Y6EzFBh71auSM0FWbZsUm6jiyAm7SjL6dev3eKr8AATqI6nr1 BBTUBq92f3r5pYpzIcrWKWJ7c9o7mILV78VindfBCNI0oz0uKQn3HfFpO91J1hvx/E53 Lbiw==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@foxmail.com header.s=s201512 header.b=qk5ueFY4; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=foxmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id a640c23a62f3a-a72ab04a376si1013496966b.318.2024.07.07.03.22.18; Sun, 07 Jul 2024 03:22:19 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@foxmail.com header.s=s201512 header.b=qk5ueFY4; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=foxmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 7652B68DADE; Sun, 7 Jul 2024 13:22:01 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from out162-62-58-216.mail.qq.com (out162-62-58-216.mail.qq.com [162.62.58.216]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 37E5F68DA5C for ; Sun, 7 Jul 2024 13:21:45 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foxmail.com; s=s201512; t=1720347697; bh=J+H6R9iG5ROOJS/kL0K56cUnaOs3Pmi00FtqlA5Hu6k=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=qk5ueFY4aNpOhqUxfBude+c7ZdQW7I2CC6gLD8lJNhW4Qgfewj6Mm7jRAB03vGUTb c8DhQVfS/OIV3/E+P0VpkvpRH8STCYEgylodHtIgud4TuH/BQdzpaFiMGkMIO5otm4 7hKcARsoe9gMVgh52ApEW+PecC+rOz63p8Cxx2YM= Received: from ZHILIZHAO-MB1.tencent.com ([113.116.28.29]) by newxmesmtplogicsvrsza10-0.qq.com (NewEsmtp) with SMTP id 5633A86C; Sun, 07 Jul 2024 18:21:35 +0800 X-QQ-mid: xmsmtpt1720347696tdirvyhvk Message-ID: X-QQ-XMAILINFO: NvKyM24IHTKS1fop19uWb4kYzGGXwNsEg0SyhhV5xwJuDI7Lks0hoIiLkxfN8c NhLB/eWts+jDMdysZUuzcAdsHgZ2Fcnd9dJbn95LW7jP34Lnsc7XspGFHxco1zP7qeKxtcXpfRC2 syAzReEBiK5K9h7qAdnidKapYzuwTxRpairKlqNqce1CAfOqAUy3vaTF5p5GtQaxcCytCk8kBtPL 3uhT8qzc1BLOZS5KuK2Aek1iE8zr5ARp0eI2RqGfF0dCjq/rqa53HLkPeVfpZyvWHkM8Lggt77yw PZGHoxZJ7HemZsOHI/WuW3Qj/bGmKzQn/+y9c2iV21IaHPkqt7sBq8LVevx1n9gmOa5t+nviQmUj JIcL85IeskaqtzDW0AfI8J35+2AH/d5+V7H++VWD2fyD3czU+VtNHc8cK1YXfYAazR7+n2PyWck/ 2n0QshguP0uQxTBXmbSomHUFjm5tOqJVoAGVAvzqYo8Asla0IbAk4mUYmNd4r7XRepCvilOAe5p4 jr2cexFHyRgi+7J/0lJZcicg5XWC5649fH7eEuy082S3EqjSE73/u836hVq3sHaYT2SX+z3rdlH8 dbVLLyD9heSJ2uRgjDRToUbJliYUEFirfW+B33ZNOF6gAPYOaW7Itk2SHS8ACYBQE24Z4eEIRD3s 6MWs3ujqSJHN5j28EZYuNa7BTFVIjD0T0EbhzGYxJNgml45GlfPZYRurljPS058cnWfrHdnJUp22 bJ826ZMOGZTB+JanKlpQ4OTf4LfysojYg5Pr+lAnfy80ahvU+sxQo8Sv4qFJGD/RGCW7IWyDQTeU O48Fj6rKO5C3RjwxC1+l9tWDY8vBmfUqVKnNmKicBPxBEpYgb3sn2QNIZojvNt16SQSH9S6Sqkoj eypQ5YBGIS+9VyNn0xFODAlLDQhSE8zJMkFdHdLAeusMHigwOcABUmnAv6MEmPMUOxh+rUZ0SOwu FrmCUzzf16SrraaLaLHgslIUxlLx6ASDfPB+BH7KY+OkW1Sl4dd+EX4nxsJCotVwDY5rh9A4g= X-QQ-XMRINFO: Nq+8W0+stu50PRdwbJxPCL0= From: Zhao Zhili To: ffmpeg-devel@ffmpeg.org Date: Sun, 7 Jul 2024 18:21:32 +0800 X-OQ-MSGID: <20240707102134.93935-3-quinkblack@foxmail.com> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20240707102134.93935-1-quinkblack@foxmail.com> References: <20240707102134.93935-1-quinkblack@foxmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 3/5] avcodec/videotoolboxenc: Use BufNode as sourceFrameRefcon 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: Zhao Zhili Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: i4j52zcmupRG From: Zhao Zhili ExtraSEI is used as the sourceFrameRefcon of VTCompressionSessionEncodeFrame. It cannot hold other information which is necessary to fix another issue in the following patch. This patch also fixed leak of ExtraSEI on the error path of vtenc_output_callback. --- libavcodec/videotoolboxenc.c | 77 ++++++++++++++++++++++++------------ 1 file changed, 51 insertions(+), 26 deletions(-) diff --git a/libavcodec/videotoolboxenc.c b/libavcodec/videotoolboxenc.c index 03e3c9ad42..213bfa8b49 100644 --- a/libavcodec/videotoolboxenc.c +++ b/libavcodec/videotoolboxenc.c @@ -347,8 +347,7 @@ static void set_async_error(VTEncContext *vtctx, int err) while (info) { BufNode *next = info->next; - CFRelease(info->cm_buffer); - av_free(info); + vtenc_free_buf_node(info); info = next; } @@ -438,19 +437,8 @@ static int vtenc_q_pop(VTEncContext *vtctx, bool wait, CMSampleBufferRef *buf, E return 0; } -static void vtenc_q_push(VTEncContext *vtctx, CMSampleBufferRef buffer, ExtraSEI *sei) +static void vtenc_q_push(VTEncContext *vtctx, BufNode *info) { - BufNode *info = av_malloc(sizeof(BufNode)); - if (!info) { - set_async_error(vtctx, AVERROR(ENOMEM)); - return; - } - - CFRetain(buffer); - info->cm_buffer = buffer; - info->sei = sei; - info->next = NULL; - pthread_mutex_lock(&vtctx->lock); if (!vtctx->q_head) { @@ -726,6 +714,22 @@ static int set_extradata(AVCodecContext *avctx, CMSampleBufferRef sample_buffer) return 0; } +static void vtenc_free_buf_node(BufNode *info) +{ + if (!info) + return; + + if (info->sei) { + av_free(info->sei->data); + av_free(info->sei); + } + + if (info->cm_buffer) + CFRelease(info->cm_buffer); + + av_free(info); +} + static void vtenc_output_callback( void *ctx, void *sourceFrameCtx, @@ -735,13 +739,15 @@ static void vtenc_output_callback( { AVCodecContext *avctx = ctx; VTEncContext *vtctx = avctx->priv_data; - ExtraSEI *sei = sourceFrameCtx; + BufNode *info = sourceFrameCtx; if (vtctx->async_error) { + vtenc_free_buf_node(info); return; } if (status) { + vtenc_free_buf_node(info); av_log(avctx, AV_LOG_ERROR, "Error encoding frame: %d\n", (int)status); set_async_error(vtctx, AVERROR_EXTERNAL); return; @@ -751,15 +757,19 @@ static void vtenc_output_callback( return; } + CFRetain(sample_buffer); + info->cm_buffer = sample_buffer; + if (!avctx->extradata && (avctx->flags & AV_CODEC_FLAG_GLOBAL_HEADER)) { int set_status = set_extradata(avctx, sample_buffer); if (set_status) { + vtenc_free_buf_node(info); set_async_error(vtctx, set_status); return; } } - vtenc_q_push(vtctx, sample_buffer, sei); + vtenc_q_push(vtctx, info); } static int get_length_code_size( @@ -2565,19 +2575,23 @@ static int vtenc_send_frame(AVCodecContext *avctx, const AVFrame *frame) { CMTime time; - CFDictionaryRef frame_dict; + CFDictionaryRef frame_dict = NULL; CVPixelBufferRef cv_img = NULL; AVFrameSideData *side_data = NULL; + BufNode *node = av_mallocz(sizeof(*node)); ExtraSEI *sei = NULL; - int status = create_cv_pixel_buffer(avctx, frame, &cv_img); + int status; - if (status) return status; + if (!node) + return AVERROR(ENOMEM); + + status = create_cv_pixel_buffer(avctx, frame, &cv_img); + if (status) + goto out; status = create_encoder_dict_h264(frame, &frame_dict); - if (status) { - CFRelease(cv_img); - return status; - } + if (status) + goto out; #if CONFIG_ATSC_A53 side_data = av_frame_get_side_data(frame, AV_FRAME_DATA_A53_CC); @@ -2587,6 +2601,7 @@ static int vtenc_send_frame(AVCodecContext *avctx, status = AVERROR(ENOMEM); goto out; } + node->sei = sei; status = ff_alloc_a53_sei(frame, 0, &sei->data, &sei->size); if (status < 0) { av_free(sei); @@ -2602,7 +2617,7 @@ static int vtenc_send_frame(AVCodecContext *avctx, time, kCMTimeInvalid, frame_dict, - sei, + node, NULL ); @@ -2616,7 +2631,10 @@ static int vtenc_send_frame(AVCodecContext *avctx, out: if (frame_dict) CFRelease(frame_dict); - CFRelease(cv_img); + if (cv_img) + CFRelease(cv_img); + if (status) + vtenc_free_buf_node(node); return status; } @@ -2701,6 +2719,10 @@ static int vtenc_populate_extradata(AVCodecContext *avctx, CVPixelBufferRef pix_buf = NULL; CMTime time; CMSampleBufferRef buf = NULL; + BufNode *node = av_mallocz(sizeof(*node)); + + if (!node) + return AVERROR(ENOMEM); status = vtenc_create_encoder(avctx, codec_type, @@ -2736,7 +2758,7 @@ static int vtenc_populate_extradata(AVCodecContext *avctx, time, kCMTimeInvalid, NULL, - NULL, + node, NULL); if (status) { @@ -2747,6 +2769,7 @@ static int vtenc_populate_extradata(AVCodecContext *avctx, status = AVERROR_EXTERNAL; goto pe_cleanup; } + node = NULL; //Populates extradata - output frames are flushed and param sets are available. status = VTCompressionSessionCompleteFrames(vtctx->session, @@ -2773,6 +2796,8 @@ pe_cleanup: vtctx->frame_ct_out = 0; av_assert0(status != 0 || (avctx->extradata && avctx->extradata_size > 0)); + if (!status) + vtenc_free_buf_node(node); return status; } From patchwork Sun Jul 7 10:21:33 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zhao Zhili X-Patchwork-Id: 50381 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a59:cc64:0:b0:482:c625:d099 with SMTP id k4csp5227667vqv; Sun, 7 Jul 2024 03:21:59 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCXfJ3fl2J3HE6fJ7WpkCl0ag/AoPx0plr9+OOM8vKu6BUxc+GU/Df8B1oJY6HSn41fb9X1EQfYkiV0E0jsRzcAuQfYAuwjKUsfWFw== X-Google-Smtp-Source: AGHT+IE+5YAQduHLQjbAK5n2cs097SE0Uvk5X790l5qhB38/2ihYEoef5H+qJAWoUENb+W6OY4ZD X-Received: by 2002:a17:906:dcf:b0:a77:e0ac:2a74 with SMTP id a640c23a62f3a-a77e0ac2bcamr266560966b.17.1720347719369; Sun, 07 Jul 2024 03:21:59 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1720347719; cv=none; d=google.com; s=arc-20160816; b=W2B2Yo5qVmruPd8fCKWtrVbO/FgL673g7dK5wFehtl/D7QDTBq6KjbgF9JQZVXnnfg JqvBPQQijbvK87in45HqtmMIxSA54rdqD+VTMdKmsnjdpRqH1c/E/yi4AA/4r+4Ex4Qs rvz2iKHzW9y8HYL3fLMDX+5ZN1gSq61WjogUeUk9ucRHsdTxuVN8a/iMMPY4xCcS1jA2 m8Sos9OVWSzpFtfOJrc0xdtG87x+mZ81l10BT8dbksWBZcl+TLqWAdBaN1QJM8VSQ6vz oLDnIcZOe8/+aobtj/dtZclyAPwmk6aFtUDRq5AA7O5WiqnywVfplkekbPr1/X5A7qw4 87eQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:references:in-reply-to:date :to:from:message-id:dkim-signature:delivered-to; bh=wxb0w+aiVaIX9ZT0BjflIekUsM7+EngegWK1Bbmoq0g=; fh=HnHYuZ9XgUo86ZRXTLWWmQxhslYEI9B9taZ5X1DLFfc=; b=sPaLYysm9TnZZ/EK98oTtwlFsvItvLAU7RKHGh5jMRlgSAvFyJWNLtQ9+cJe7xWNtV d83Oml9aV9nSDaUm6WcqHOhQHMBCtG8t7I8mlfrNV9gfXSbweReJA317iq95+YCoU7tf /DwToIr3Kqqn8Fz7X+kXgqOUBYtOHakVfG62WM3tFBbqQgU7s2DbS8PzAHM2JJPRYVwP lOiPYUs6h16F3VZ61eUJGEDSBhHs3rKKE7TVQAgSNE8Fe5H7OD/At9nlXgbxY/qIc7cQ anFpJ1qp/UeDJ+CADBjv1TjH5vD4gCSnFrVZTwcVyir1mij9qDXO5pxcoheMdIiKNHaU iEKA==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@foxmail.com header.s=s201512 header.b=xL8SDhAp; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=foxmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id a640c23a62f3a-a77d8214c48si231726366b.542.2024.07.07.03.21.58; Sun, 07 Jul 2024 03:21:59 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@foxmail.com header.s=s201512 header.b=xL8SDhAp; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=foxmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 963B968DA0B; Sun, 7 Jul 2024 13:21:55 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from out162-62-57-252.mail.qq.com (out162-62-57-252.mail.qq.com [162.62.57.252]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 349DF68DA30 for ; Sun, 7 Jul 2024 13:21:45 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foxmail.com; s=s201512; t=1720347698; bh=gumDTTp1lo/TxZt7SLG49JJnYf+Y5Y9RSBzcSuR3LFU=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=xL8SDhAp+D4gW0JKLDdpwJLWI6jvOCZE2FrB9h4uwBK2al3oBz/yRmwStLtdjm1Ts yHRaW/wehs1i7zouR6mqGb1k68YccwlUsWTEiCbmJ3FyxKHR3SFhj+jzqkMPEA4fwq /WfMeCigINTKENn4+lv1cp6CSRFGvtHmLju5QR38= Received: from ZHILIZHAO-MB1.tencent.com ([113.116.28.29]) by newxmesmtplogicsvrsza10-0.qq.com (NewEsmtp) with SMTP id 5633A86C; Sun, 07 Jul 2024 18:21:35 +0800 X-QQ-mid: xmsmtpt1720347697tqlu9k5r9 Message-ID: X-QQ-XMAILINFO: M6T0E+nC5suJo0iPnt9YcvOvVA9lyTMPuVe9E9Q9cIipashwNcFK/AYIobHTh6 OscCdflE408eXpvq8AL32NXH79S6WJ0K+1+dHHRjVHPY5xkixNaOaNGUE3VqfdhYjSVarvcWmVZA 3j6kgRil6y3ew/7Yd31os2iWKlGI+p5Cneh11yTYN0y8bquoMOkWMRTIqlS7fuBmSQccK8GspEPc RQXY5kRNCy9uRfRDCUlhyRV+j4JoGmIMhJxAoF/EXXBI4MLnMibCt8KLB4YvdOh1EQAbzqPR1tke 56nubovCRhNwyJiwNcz89De7Bp3nXoQXCrR5FSfX6iHzmm/NPd6u2AskEm2htdo4YhKke7mHX+m6 ywuo2+j5Ip5pCx7sEVhW2U5C78YRhZhlYRV8fPf+3dX86N2arR1UH3A01nGOmCDVRL2LwFX8TPKG lqh2xkQUDuHRzC2r27/IkFoXzvTDjustRUDuPEqzoRXmAii5XfZZhyPH3auo0GvkS++G60JerVAu YexwXb9cZq3oKE33cUZnK4/4WdcvCHhnRUKEvoSZJ5IxAfwUwqsu+JiEYvoptfndI7PTLGeS1vWn k7sQF6SE9MZ4nEczmNiwDC+b5q2kxaTrcauS6XGsHOxE5g4xh57QSw+oTz7oYOQqgL0FKIOFJExV Y2jvQPOd7qHNJ96ULcJp0Q+96jQjlxBCccP3bW+d7pHaVg0/wVYYLetqEV58M7+HZUJwicZsIZqx h4sqMIEXSOgPvlSqPIuqPCu8c3998npkLILO6OcD2MC5eJzVA3/QIgMWsN9jlF4k3kGdSvQuLu7x +9d4+zUHqKTancad9AqIZpAeUlroDYy9xKxDAn/4/EjrWTAN43tyeBz1dG0xxog3ETKyVZt60JSC oWejaWNMx+hlSBWcYOQ5qtHurIok5Vh4zB/pC1wjsM8vrwGzmwNrol7pcGmjVL/gp3j+t9jpvbdD dpYJAuo1i/I8hDPzssqCD+cO6LL0GLCsDEGiIQG+VuUCdUNyWvZc9SsZPq21RXf3IC2WMvQZ+nQv y9blwk1lxNXyr3i7huHndz6EiYYBUXMcsBUUXnOeIcEdn/pRQB X-QQ-XMRINFO: Nq+8W0+stu50PRdwbJxPCL0= From: Zhao Zhili To: ffmpeg-devel@ffmpeg.org Date: Sun, 7 Jul 2024 18:21:33 +0800 X-OQ-MSGID: <20240707102134.93935-4-quinkblack@foxmail.com> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20240707102134.93935-1-quinkblack@foxmail.com> References: <20240707102134.93935-1-quinkblack@foxmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 4/5] avcodec/videotoolboxenc: Fix concurrent access to CVPixelBufferRef 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: Zhao Zhili Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: fukU3CGP0Yze From: Zhao Zhili For a frame comes from AV_HWDEVICE_TYPE_VIDEOTOOLBOX, it's CVPixelBufferRef is maintained by a pool. CVPixelBufferRef returned to the pool when frame buffer reference reached to zero. However, VTCompressionSessionEncodeFrame also hold a reference to the CVPixelBufferRef. So a new frame get from av_hwframe_get_buffer may access a CVPixelBufferRef which still used by the encoder. It's only after vtenc_output_callback that we can make sure CVPixelBufferRef has been released by the encoder. The issue can be tested with sample from trac #10884. ffmpeg -hwaccel videotoolbox \ -hwaccel_output_format videotoolbox_vld \ -i input.mp4 \ -c:v hevc_videotoolbox \ -profile:v main \ -b:v 3M \ -vf scale_vt=w=iw/2:h=ih/2:color_matrix=bt709:color_primaries=bt709:color_transfer=bt709 \ -c:a copy \ -tag:v hvc1 \ output.mp4 Withtout the patch, there are some out of order images in output.mp4. --- libavcodec/videotoolboxenc.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/libavcodec/videotoolboxenc.c b/libavcodec/videotoolboxenc.c index 213bfa8b49..9bb9b0b457 100644 --- a/libavcodec/videotoolboxenc.c +++ b/libavcodec/videotoolboxenc.c @@ -228,6 +228,7 @@ typedef struct ExtraSEI { typedef struct BufNode { CMSampleBufferRef cm_buffer; ExtraSEI *sei; + AVBufferRef *frame_buf; struct BufNode* next; } BufNode; @@ -727,6 +728,7 @@ static void vtenc_free_buf_node(BufNode *info) if (info->cm_buffer) CFRelease(info->cm_buffer); + av_buffer_unref(&info->frame_buf); av_free(info); } @@ -741,6 +743,7 @@ static void vtenc_output_callback( VTEncContext *vtctx = avctx->priv_data; BufNode *info = sourceFrameCtx; + av_buffer_unref(&info->frame_buf); if (vtctx->async_error) { vtenc_free_buf_node(info); return; @@ -2459,7 +2462,8 @@ static int copy_avframe_to_pixel_buffer(AVCodecContext *avctx, static int create_cv_pixel_buffer(AVCodecContext *avctx, const AVFrame *frame, - CVPixelBufferRef *cv_img) + CVPixelBufferRef *cv_img, + BufNode *node) { int plane_count; int color; @@ -2478,6 +2482,12 @@ static int create_cv_pixel_buffer(AVCodecContext *avctx, av_assert0(*cv_img); CFRetain(*cv_img); + if (frame->buf[0]) { + node->frame_buf = av_buffer_ref(frame->buf[0]); + if (!node->frame_buf) + return AVERROR(ENOMEM); + } + return 0; } @@ -2585,7 +2595,7 @@ static int vtenc_send_frame(AVCodecContext *avctx, if (!node) return AVERROR(ENOMEM); - status = create_cv_pixel_buffer(avctx, frame, &cv_img); + status = create_cv_pixel_buffer(avctx, frame, &cv_img, node); if (status) goto out; From patchwork Sun Jul 7 10:21:34 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zhao Zhili X-Patchwork-Id: 50385 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a59:cc64:0:b0:482:c625:d099 with SMTP id k4csp5229660vqv; Sun, 7 Jul 2024 03:29:08 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCUJ4ASrN1uLWKRA8smJMtDlz+0bkd678XG+WjcJBXl8dbrGmOPcMZ34uYcn5S9oQk8NpZDPCxLTyRKkkQ6QbVvt5Prugn/vndU5bQ== X-Google-Smtp-Source: AGHT+IHhyUebFlWdKSGSAAXUIqOt0aAhFrcXrN8hQwJTg6u0Ng60e+62KIl5sJHQxWeFaP2XYNt9 X-Received: by 2002:a17:906:66c5:b0:a77:e55a:9e87 with SMTP id a640c23a62f3a-a77e55aa009mr210275566b.48.1720348148449; Sun, 07 Jul 2024 03:29:08 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1720348148; cv=none; d=google.com; s=arc-20160816; b=Bk5RpkGKu02IM/SxcIgXo1XaZCQIIx7daBb8lfD58EES9gyNsBIufBdAp4hg5eJxw+ KWtdVR4nkwY1lEXQkXrjdeadTyebnPLSlWD6Nc4dRqx7AtGecirfEsBS8lE6FHyXFtyF y8p5SkPcb54h4Ryh7Z5le1oBJPAQa5+c16p5vstcNzXw9Vmf0TdJ11dh0IMsTeGOQYoH I7JSFeC631ag+251mLsciWNAYpbeEA/85FpNGPVliEXSmez4BZtLiB6TZI+u03Wyh9Fd mfUw02z02gOwecx8gsFRe5dL9a6eXlme+XQKBo3jISDWzvzz2JNb1infi2kBn9EH8xiZ WZVQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:references:in-reply-to:date :to:from:message-id:dkim-signature:delivered-to; bh=YtUG/vFvp7URssiqnu4WHWnfaCDUd+o3PWp4/WFL27M=; fh=HnHYuZ9XgUo86ZRXTLWWmQxhslYEI9B9taZ5X1DLFfc=; b=fDXsuP5yBGYEt5kcv+cG1voHQJ5hIvBrHBTfOifVzuAxraWWtwgw671LGz6eDnOB2y b6O0KMo2hlusUFjqek2Ipj72Rj+miKYoUtguXopkeEjBJcWsxs/thoumIVjexdDTtGq2 8qqFwnLjhxztFSRJxr4aNQPgSIgfJkBPmoi53PwYGc41NL4yv1J4FQfeluV1qi0/kIS4 4jBOAH8vhItykbG77wBc4Q+FoIwuzog7BSxsU2MiTk2rwXa+wsTjgXJAjHaRbdMNYrtG INKKgMH5kQI3b2ZS4P/MKhtib+t7WuILN95TwqtL6F9tnAK9RQmwK01jjGo/i+6olKRS 8ZVw==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@foxmail.com header.s=s201512 header.b="F1gTki/f"; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=foxmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id a640c23a62f3a-a77e816cfe2si123740566b.712.2024.07.07.03.29.07; Sun, 07 Jul 2024 03:29:08 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@foxmail.com header.s=s201512 header.b="F1gTki/f"; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=foxmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id B6DBF68DAB5; Sun, 7 Jul 2024 13:21:59 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from out162-62-57-252.mail.qq.com (out162-62-57-252.mail.qq.com [162.62.57.252]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 2CCB968DA0B for ; Sun, 7 Jul 2024 13:21:45 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foxmail.com; s=s201512; t=1720347698; bh=YYhKZruBp3xZtVuQF6mSbBJegtSqBbGPBNgqAMx50Bc=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=F1gTki/fH2c5ixXRFM25kk2e5h0zHKgwMf9Oi5swCt7Yeb9cMA9HKuPK8E+80eDIP 38SAokdoKiqAHQF8YOLB6hz3jlhLyeeCtj/myCXLY2CiG+BXg49mQWBU3EPrceufOI +9fsJOExnzMBsfn4b7KiQJxevNLAPspg4AFoLDtg= Received: from ZHILIZHAO-MB1.tencent.com ([113.116.28.29]) by newxmesmtplogicsvrsza10-0.qq.com (NewEsmtp) with SMTP id 5633A86C; Sun, 07 Jul 2024 18:21:35 +0800 X-QQ-mid: xmsmtpt1720347697t0ojlxb7u Message-ID: X-QQ-XMAILINFO: OIy020LZxBBEUSnxjNELh/1AClYWiOQgTFwd/AfFUAhjogWI76R1+/18RWw8aH 0pB9qBTTYK8pgkPdg5SAT/u19d7cyL14TAbdozsJ/1oRDcouD7NutYmd7mzPGE/z+oqP/vaZGxYf 6NyY4DcHYtIynicBZvKVZI3av+vxwcKBeKqIN5K9aHzq8Q5Zz0kPvOWk/qtXGuRyDZZrI5DnAdI8 Yn8MUf1d6XdkZswLFiCtsXW0GkVroQSCFzCTA7iKU61k2bPfunElqjCE0++xwicyCe9SQFjOVGBp GQ0rZElbIXPkrU8RsX7D+if7Xy2dR5tnxdFvA4/WXyXI22Kest9wc/RdFzbFkDwbVR8uhvv1SMRH dRk4jUggPrvc3SEmw9obJ8zYj4yxX2ExUXxY1wpMYhZJeaiVt3xTrAQmM+T/6pznKhWvOzCCFvIc WVtDTeBIHq90hRwSlGSGz16ZDt7bBX91qxMopteMjZt2gacH3sA9l+/mFqYpvNXvXu3+TwwOJfxx ir5LhsiHZaGhbyD6AAr6GbhkZ5zbcPdOhBZ/l26f+MV3o6J0MRoS/nr0oDgOwT2bNhQUYHYUP2Fh ugik7mj7eRH+qzidD+nLgUQp31QZTUGfAVePnBJdW3ZimydG9P5S238EOV09b3FncJq2N7R7XnF9 3+GM1vgYpKulM+aFhwgjp3uLsIVCYvHBk365S/tZysSZww2uf90bdXSjo3Ka5DvQJSZ1oPnAN8vT tQx85G8lsqac/TxwoIc93y7GonnufRmkqIrfUtgMa1WfUGVyBZ81qFR4/yP0vJJtcve5DQvMHfMx SuwciJGYWnAPm9Al7ClimwdVYAurBF4HK5Jr8/pAFwwtTM43eJOajqx6RLV/DigmQqH7xqA/ny8P HAANUgCj+8mw092VMFjfHFHbSEPgJd5zk1Ofi0PN3fwOG3JZRGN0RoXJ4nkAD1JHVg0x4tkawcKR xnpLySku3+NkMhNfZCWZLdRhLfSYpbd4oxmR/STP9xGyIr1ni4rbCEq0WKgfITkuUhH15y6og= X-QQ-XMRINFO: MSVp+SPm3vtS1Vd6Y4Mggwc= From: Zhao Zhili To: ffmpeg-devel@ffmpeg.org Date: Sun, 7 Jul 2024 18:21:34 +0800 X-OQ-MSGID: <20240707102134.93935-5-quinkblack@foxmail.com> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20240707102134.93935-1-quinkblack@foxmail.com> References: <20240707102134.93935-1-quinkblack@foxmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 5/5] avcodec/videotoolboxenc: Put ExtraSEI inside BufNode directly 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: Zhao Zhili Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: k0GSFtAMcOEL From: Zhao Zhili Reduce error path and simplify the code. --- libavcodec/videotoolboxenc.c | 60 +++++++++++++----------------------- 1 file changed, 21 insertions(+), 39 deletions(-) diff --git a/libavcodec/videotoolboxenc.c b/libavcodec/videotoolboxenc.c index 9bb9b0b457..bd0b55275f 100644 --- a/libavcodec/videotoolboxenc.c +++ b/libavcodec/videotoolboxenc.c @@ -227,7 +227,7 @@ typedef struct ExtraSEI { typedef struct BufNode { CMSampleBufferRef cm_buffer; - ExtraSEI *sei; + ExtraSEI sei; AVBufferRef *frame_buf; struct BufNode* next; } BufNode; @@ -281,6 +281,18 @@ typedef struct VTEncContext { int max_ref_frames; } VTEncContext; +static void vtenc_free_buf_node(BufNode *info) +{ + if (!info) + return; + + av_free(info->sei.data); + if (info->cm_buffer) + CFRelease(info->cm_buffer); + av_buffer_unref(&info->frame_buf); + av_free(info); +} + static int vt_dump_encoder(AVCodecContext *avctx) { VTEncContext *vtctx = avctx->priv_data; @@ -388,7 +400,7 @@ static void vtenc_reset(VTEncContext *vtctx) } } -static int vtenc_q_pop(VTEncContext *vtctx, bool wait, CMSampleBufferRef *buf, ExtraSEI **sei) +static int vtenc_q_pop(VTEncContext *vtctx, bool wait, CMSampleBufferRef *buf, ExtraSEI *sei) { BufNode *info; @@ -426,14 +438,12 @@ static int vtenc_q_pop(VTEncContext *vtctx, bool wait, CMSampleBufferRef *buf, E pthread_mutex_unlock(&vtctx->lock); *buf = info->cm_buffer; + info->cm_buffer = NULL; 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 = (ExtraSEI) {0}; } - av_free(info); - + vtenc_free_buf_node(info); return 0; } @@ -715,23 +725,6 @@ static int set_extradata(AVCodecContext *avctx, CMSampleBufferRef sample_buffer) return 0; } -static void vtenc_free_buf_node(BufNode *info) -{ - if (!info) - return; - - if (info->sei) { - av_free(info->sei->data); - av_free(info->sei); - } - - if (info->cm_buffer) - CFRelease(info->cm_buffer); - - av_buffer_unref(&info->frame_buf); - av_free(info); -} - static void vtenc_output_callback( void *ctx, void *sourceFrameCtx, @@ -2589,7 +2582,6 @@ static int vtenc_send_frame(AVCodecContext *avctx, CVPixelBufferRef cv_img = NULL; AVFrameSideData *side_data = NULL; BufNode *node = av_mallocz(sizeof(*node)); - ExtraSEI *sei = NULL; int status; if (!node) @@ -2606,15 +2598,8 @@ static int vtenc_send_frame(AVCodecContext *avctx, #if CONFIG_ATSC_A53 side_data = av_frame_get_side_data(frame, AV_FRAME_DATA_A53_CC); if (vtctx->a53_cc && side_data && side_data->size) { - sei = av_mallocz(sizeof(*sei)); - if (!sei) { - status = AVERROR(ENOMEM); - goto out; - } - node->sei = sei; - status = ff_alloc_a53_sei(frame, 0, &sei->data, &sei->size); + status = ff_alloc_a53_sei(frame, 0, &node->sei.data, &node->sei.size); if (status < 0) { - av_free(sei); goto out; } } @@ -2659,7 +2644,7 @@ static av_cold int vtenc_frame( bool get_frame; int status; CMSampleBufferRef buf = NULL; - ExtraSEI *sei = NULL; + ExtraSEI sei = {0}; if (frame) { status = vtenc_send_frame(avctx, vtctx, frame); @@ -2700,11 +2685,8 @@ static av_cold int vtenc_frame( if (status) goto end_nopkt; if (!buf) goto end_nopkt; - status = vtenc_cm_to_avpacket(avctx, buf, pkt, sei); - if (sei) { - if (sei->data) av_free(sei->data); - av_free(sei); - } + status = vtenc_cm_to_avpacket(avctx, buf, pkt, sei.data ? &sei : NULL); + av_free(sei.data); CFRelease(buf); if (status) goto end_nopkt;