From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id 6E88342107 for ; Tue, 22 Feb 2022 23:17:06 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 1D1B868B1B9; Wed, 23 Feb 2022 01:17:02 +0200 (EET) Received: from EUR05-AM6-obe.outbound.protection.outlook.com (mail-am6eur05olkn2046.outbound.protection.outlook.com [40.92.91.46]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 14877680288 for ; Wed, 23 Feb 2022 01:16:55 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Z3I6JYjisha8yjjNf94GBWIvsqJfUTKks6fZv/DyNw6+b0A/0a742E+bSmF4ctRdMvFpBXaqCQC9ozDhCeOdLtdkOHMOx5peQ33057pLTxcYiBhIbziJMm3Z8R7NvphMTJbedx35+mNOKsKr3GXNOJAvdout6t3UI+uvG5ZN4R4lsz4AvCgCk2sZhHVRAMD87YZ8xwYWnlNigv307xAOLQ5lnrWkoDbV0Ll7DUSwW/bkv2mjwzcKHUS+H9Jt0KeXvDBKeytDifh2blUoEGxL5dBeptxYk3hrDz0tP3aSkOVtkbg6MIkvXQwec+eMyJ14v3LSq9HhavACtDlZRpEkxA== 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=hwgHTnt89kjB0t/Hws9WaNApYpwIIoXmvZKsTtGq1OA=; b=VzzG0il4x0H8Qhrujd/tqEQr+oayXpaHjaVSNZ4/gpILmIhV1UmFz6brM/jFIDJoNrgMWZoW+Dy5SChvHx2/wBotHB5hiALjHVWflA2R+91iS6oA6fNI6FFYm3hUb1p2PSGPcl3oYGlvt1bh4HtS4mx7BHICi+KwyqCOlzpUy+4GksgUxu+hOKXmY5goQNXoEzx+J6kPy6j8KCDfi8Hf9t739uffgCJZNvR4ZTLqpxKBnly6cFOUryPcz2fjj9y2udSSy0o+R6cxNh/Xn4yRvpblbqKkqDdRmXHdjSkf8q4AV/N9kDBWTM6Nd51iAne8FFksrl9wICcQbrfUrZBIEQ== 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=hwgHTnt89kjB0t/Hws9WaNApYpwIIoXmvZKsTtGq1OA=; b=E3l1v1uqKgyt1S9ipqjfWb2W+MfLvMV9tnF3mWYUAHG0Z8jrQpiY262QVqbB76t3MWUKEPJrKlxeQSVsrhi7wYUuYvAe+i5HopCStGZ5/KIvcnWXkPAKhF7BU4XzBqkzNfy5UdXK3md9LKwwJfBhiJtxqTs1oh2BUYVCTMA8CfEKZZzjdeZbQ6L2e/c1zW4/J43/AJLHPTjDUjk9P3ghThCouF62hiVRikeziQMXQZbfHRcUM7HSZ0liPyGZdkee+OiQ8xi9s5LmvjdNIEfVV1jJZ5OReb+3qeOypJHkSthV2TJyNMCUfSZLp1LNUii7nTNFIX/TtYa96Qz1tZ8mhQ== Received: from AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) by DB8PR03MB6172.eurprd03.prod.outlook.com (2603:10a6:10:135::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5017.22; Tue, 22 Feb 2022 23:16:52 +0000 Received: from AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::b8d3:effd:9a3c:4090]) by AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::b8d3:effd:9a3c:4090%6]) with mapi id 15.20.5017.022; Tue, 22 Feb 2022 23:16:52 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Wed, 23 Feb 2022 00:16:40 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [b/7BzIjOpEiOOlnjVfU/FtZlQRH697+B] X-ClientProxiedBy: AS8PR05CA0024.eurprd05.prod.outlook.com (2603:10a6:20b:311::29) To AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) X-Microsoft-Original-Message-ID: <20220222231641.501507-2-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 541e478b-232e-41a3-6230-08d9f65968fe X-MS-Exchange-SLBlob-MailProps: S/btQ8cKWiQMUzK0h0wyFwXlNYOkAe0lJCqaU9cIg7cqC0ZOeaZaNe37b1zYSZPSx9899q9kTZFIatqEMhAkcUG9c6E2NDpCyDIF/dL4xs/re8H3XkJ4l+vn1AGvQPsfQ1yW4IAcJCLga0lnnZKGFuTVnYjKYagnyqDfaRBtlLsmpTMgnr5/46icZoBFcHHm3f3i6rXcAlOJfEpZnBABRYrVXIcKqUhEvvOQpn5ktZPT/b8N/QEJhkJ3KX/wSjwukWw+J62CdqHqxuOw/582oyjcs6FF2JfPEp2IYQ8mkRNSPXSTbIZZKEyhxTxD5usOtosuBPVruDfg7V/hultLBpZdecDDm+OqzCEYqcnMOiAnUTa1kn0xaoMSvzaqLS6uLZM2KUpmeV1k3yXszxFLE2llIyj55+4z71P1rVjiFQcK55kj9fMKiL/WSirQ45XMfhiXbfzVkRImeR3fKXEDk0CJrQt9tL3/PuBu+wU3484zimeZOEScjj/kpoc17LoL9sFPwCCsApTN1xVmXvUPzPs1MgGcC4m3IgZdweGSARsa4RE1c22wLLG6P/7O/DZIiuzeUYlIu2c7qOd6ANUsrxWoPdfL4EHH/sm+7qddz4XAowu/9hfsPySpthnN5yEU152CLbgfh9T+CPBDa3RMDZSh8OOI2etSqHVvj5InkS/xmzU0MgULguiuuwe31sVWSQ49WY6KBB7zjgbRR72qCN4CFslgrorVvaAETj1BSJvQ5LLlcCVtYCTp+UfpeKAcyTFjVSEp0Go= X-MS-TrafficTypeDiagnostic: DB8PR03MB6172:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: xnq85K9kruXhJKLZ5EeOw4R3EzYmaXegsWQGtIngCeK5DVWiD+J5M8Z3POVYzxpUx0hJFvN5rg+/U/CKNg+13ATfryOMNH1zSwDhn4wGF6Szh7LvKPL2Yrm0BRoB/jHjIVB5vxJLpA5PL8HF1+rz4oI4GpSENCNba8haMKxizxfIHDUtc0qD/HqNI8CI4kEogqKqsRN8u3ZiHr8Dfk8fx5d4DQFGX/5N+mteOiw+pJxs/HvAbmpTIKLdHU1wO/Hji7D7gPqIeLRhOufv/Q8zPWS+Kfq2n2jeOiOMPDgLw0EkHEHshiIbiBvLSlV5OUa3odBJ2L+vFSQfWDHZyG5Xp42akUCnDp53QLR9akR4kmpwtbpQBoFVV66Piz2TyzBH8Fxj266D84+RKrzWQPC4x8KNgBkhBDIGpGD6i0Uw3Z4PhMAB1mBdp/YThvIUZOcdtNJUuNPyQpCZCFcZkMDFT4KfVOE1yNmf+2NEQUgcV6p+mkd/KrsJmjE2ZfAC9dbPk8vNFIswzcZn5xGhmH/MOksXzD05qEJv08qloGjZ+9hTCOBa6j01Sv3C3THNLe+ktsswkhIUusaKVMeqmjAR4w== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?NaYwwgMkZL8TA+7hLtiT33BhEOAt1btoT1U7Vt42buuCKZiTgeBoP8pNkT57?= =?us-ascii?Q?ebtCr1Zg0wcP+x8b7B4wqtNJ2dqvyqHuHeCoMVGimXZYOtLXZ+wKOLaSzoIT?= =?us-ascii?Q?jG5HgcKUPthn7arvSJZZPs59wrxkgbMWqEqJfijWaXQ/wbYeD+neYQfExUER?= =?us-ascii?Q?mFzdYaniEi/z7I7yb56ItYo0d3J0g3Yuu8Wg+E5MvSSE0tbn/GLSKFUi5WhI?= =?us-ascii?Q?j6okapufDI7vF9oVKBw8J531Tf2nAHH8A7bZmP2vmwx1eGp4i+WRKHCTipC6?= =?us-ascii?Q?CWz5frGKEckPomc2l6bGSfkrlunSUnRDBN+OhaPgUfRkJZ4RWpPnH1umlKvS?= =?us-ascii?Q?QvKxuPUCtPYU/QKBWFVsqNDzNWR8JWmxKFsMzCQFP7bnfOKmrxyXW2c/bHMs?= =?us-ascii?Q?tdMvbNQF1Fp1MdhJUsOedNOW9AKxZ3Pxr3GPnwS6pEPqvpaAtRISpcP1cTmK?= =?us-ascii?Q?pyNFeKnDfSh156vq385GazEZj65JZvZJz4wTWiVP0qF1EaAXYRy4vBDR71Mb?= =?us-ascii?Q?ge6yymsE3cJpwPO55CgZle5nvRNxkkihIcQwKhusMhhaNr/7/zoExkAhr98A?= =?us-ascii?Q?ufGnWGyraApgqGEjXJnP9BCdWqoIaRATxZKeHFuv/FAsL+m7maLR9P36OY6g?= =?us-ascii?Q?pqz5CI9MBGdNxK6HrCaJZrBBJ37drUoFEL5u/VcJblq1Os5xvIsJi74JK3dk?= =?us-ascii?Q?6qL9i2JwoVydcQn5g2bOPd/2fAOxrwLEAcqHQla6uFdz6B8tJFg4LuudnZEj?= =?us-ascii?Q?Nueq3uh6vRzbeBjyYa/TQGUySuAjEMC/EYpi/gjg3tGtJ0ZqlkOe7QZ6A2F5?= =?us-ascii?Q?zZLE54/CZYyriBnd5UGy0rOhfmVlFNNPNJlwVTDq/Q+WfEldbIiya0S5TfKL?= =?us-ascii?Q?NJxOz7+dDBUAlhiWGogNYtR9b9XCgeVmVR452DMFUpTs7zoM+kCVD8qOawlO?= =?us-ascii?Q?upZJ4KEH7RBl4DRMZ2iLgg=3D=3D?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 541e478b-232e-41a3-6230-08d9f65968fe X-MS-Exchange-CrossTenant-AuthSource: AM7PR03MB6660.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Feb 2022 23:16:52.5690 (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: DB8PR03MB6172 Subject: [FFmpeg-devel] [PATCH 4/5] avcodec/libopenjpegenc: Don't clone AVFrame 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: Andreas Rheinhardt Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: Signed-off-by: Andreas Rheinhardt --- libavcodec/libopenjpegenc.c | 83 +++++++++++++++++++------------------ 1 file changed, 42 insertions(+), 41 deletions(-) diff --git a/libavcodec/libopenjpegenc.c b/libavcodec/libopenjpegenc.c index 3e52bcd4e9..08b7b6a152 100644 --- a/libavcodec/libopenjpegenc.c +++ b/libavcodec/libopenjpegenc.c @@ -345,7 +345,8 @@ static av_cold int libopenjpeg_encode_init(AVCodecContext *avctx) return 0; } -static int libopenjpeg_copy_packed8(AVCodecContext *avctx, const AVFrame *frame, opj_image_t *image) +static int libopenjpeg_copy_packed8(AVCodecContext *avctx, const uint8_t *src[4], + const int linesize[4], opj_image_t *image) { int compno; int x; @@ -355,7 +356,7 @@ static int libopenjpeg_copy_packed8(AVCodecContext *avctx, const AVFrame *frame, const int numcomps = image->numcomps; for (compno = 0; compno < numcomps; ++compno) { - if (image->comps[compno].w > frame->linesize[0] / numcomps) { + if (image->comps[compno].w > linesize[0] / numcomps) { av_log(avctx, AV_LOG_ERROR, "Error: frame's linesize is too small for the image\n"); return 0; } @@ -364,9 +365,9 @@ static int libopenjpeg_copy_packed8(AVCodecContext *avctx, const AVFrame *frame, for (compno = 0; compno < numcomps; ++compno) { for (y = 0; y < avctx->height; ++y) { image_line = image->comps[compno].data + y * image->comps[compno].w; - frame_index = y * frame->linesize[0] + compno; + frame_index = y * linesize[0] + compno; for (x = 0; x < avctx->width; ++x) { - image_line[x] = frame->data[0][frame_index]; + image_line[x] = src[0][frame_index]; frame_index += numcomps; } for (; x < image->comps[compno].w; ++x) { @@ -385,17 +386,18 @@ static int libopenjpeg_copy_packed8(AVCodecContext *avctx, const AVFrame *frame, } // for XYZ 12 bit -static int libopenjpeg_copy_packed12(AVCodecContext *avctx, const AVFrame *frame, opj_image_t *image) +static int libopenjpeg_copy_packed12(AVCodecContext *avctx, const uint8_t *src[4], + const int linesize[4], opj_image_t *image) { int compno; int x, y; int *image_line; int frame_index; const int numcomps = image->numcomps; - uint16_t *frame_ptr = (uint16_t *)frame->data[0]; + const uint16_t *frame_ptr = (const uint16_t *)src[0]; for (compno = 0; compno < numcomps; ++compno) { - if (image->comps[compno].w > frame->linesize[0] / numcomps) { + if (image->comps[compno].w > linesize[0] / numcomps) { av_log(avctx, AV_LOG_ERROR, "Error: frame's linesize is too small for the image\n"); return 0; } @@ -404,7 +406,7 @@ static int libopenjpeg_copy_packed12(AVCodecContext *avctx, const AVFrame *frame for (compno = 0; compno < numcomps; ++compno) { for (y = 0; y < avctx->height; ++y) { image_line = image->comps[compno].data + y * image->comps[compno].w; - frame_index = y * (frame->linesize[0] / 2) + compno; + frame_index = y * (linesize[0] / 2) + compno; for (x = 0; x < avctx->width; ++x) { image_line[x] = frame_ptr[frame_index] >> 4; frame_index += numcomps; @@ -424,7 +426,8 @@ static int libopenjpeg_copy_packed12(AVCodecContext *avctx, const AVFrame *frame return 1; } -static int libopenjpeg_copy_packed16(AVCodecContext *avctx, const AVFrame *frame, opj_image_t *image) +static int libopenjpeg_copy_packed16(AVCodecContext *avctx, const uint8_t *src[4], + const int linesize[4], opj_image_t *image) { int compno; int x; @@ -432,10 +435,10 @@ static int libopenjpeg_copy_packed16(AVCodecContext *avctx, const AVFrame *frame int *image_line; int frame_index; const int numcomps = image->numcomps; - uint16_t *frame_ptr = (uint16_t*)frame->data[0]; + const uint16_t *frame_ptr = (const uint16_t*)src[0]; for (compno = 0; compno < numcomps; ++compno) { - if (image->comps[compno].w > frame->linesize[0] / numcomps) { + if (image->comps[compno].w > linesize[0] / numcomps) { av_log(avctx, AV_LOG_ERROR, "Error: frame's linesize is too small for the image\n"); return 0; } @@ -444,7 +447,7 @@ static int libopenjpeg_copy_packed16(AVCodecContext *avctx, const AVFrame *frame for (compno = 0; compno < numcomps; ++compno) { for (y = 0; y < avctx->height; ++y) { image_line = image->comps[compno].data + y * image->comps[compno].w; - frame_index = y * (frame->linesize[0] / 2) + compno; + frame_index = y * (linesize[0] / 2) + compno; for (x = 0; x < avctx->width; ++x) { image_line[x] = frame_ptr[frame_index]; frame_index += numcomps; @@ -464,7 +467,8 @@ static int libopenjpeg_copy_packed16(AVCodecContext *avctx, const AVFrame *frame return 1; } -static int libopenjpeg_copy_unpacked8(AVCodecContext *avctx, const AVFrame *frame, opj_image_t *image) +static int libopenjpeg_copy_unpacked8(AVCodecContext *avctx, const uint8_t *src[4], + const int linesize[4], opj_image_t *image) { int compno; int x; @@ -476,7 +480,7 @@ static int libopenjpeg_copy_unpacked8(AVCodecContext *avctx, const AVFrame *fram const int numcomps = image->numcomps; for (compno = 0; compno < numcomps; ++compno) { - if (image->comps[compno].w > frame->linesize[compno]) { + if (image->comps[compno].w > linesize[compno]) { av_log(avctx, AV_LOG_ERROR, "Error: frame's linesize is too small for the image\n"); return 0; } @@ -487,9 +491,9 @@ static int libopenjpeg_copy_unpacked8(AVCodecContext *avctx, const AVFrame *fram height = (avctx->height + image->comps[compno].dy - 1) / image->comps[compno].dy; for (y = 0; y < height; ++y) { image_line = image->comps[compno].data + y * image->comps[compno].w; - frame_index = y * frame->linesize[compno]; + frame_index = y * linesize[compno]; for (x = 0; x < width; ++x) - image_line[x] = frame->data[compno][frame_index++]; + image_line[x] = src[compno][frame_index++]; for (; x < image->comps[compno].w; ++x) { image_line[x] = image_line[x - 1]; } @@ -505,7 +509,8 @@ static int libopenjpeg_copy_unpacked8(AVCodecContext *avctx, const AVFrame *fram return 1; } -static int libopenjpeg_copy_unpacked16(AVCodecContext *avctx, const AVFrame *frame, opj_image_t *image) +static int libopenjpeg_copy_unpacked16(AVCodecContext *avctx, const uint8_t *src[4], + const int linesize[4], opj_image_t *image) { int compno; int x; @@ -515,22 +520,21 @@ static int libopenjpeg_copy_unpacked16(AVCodecContext *avctx, const AVFrame *fra int *image_line; int frame_index; const int numcomps = image->numcomps; - uint16_t *frame_ptr; for (compno = 0; compno < numcomps; ++compno) { - if (image->comps[compno].w > frame->linesize[compno]) { + if (image->comps[compno].w > linesize[compno]) { av_log(avctx, AV_LOG_ERROR, "Error: frame's linesize is too small for the image\n"); return 0; } } for (compno = 0; compno < numcomps; ++compno) { + const uint16_t *frame_ptr = (const uint16_t *)src[compno]; width = (avctx->width + image->comps[compno].dx - 1) / image->comps[compno].dx; height = (avctx->height + image->comps[compno].dy - 1) / image->comps[compno].dy; - frame_ptr = (uint16_t *)frame->data[compno]; for (y = 0; y < height; ++y) { image_line = image->comps[compno].data + y * image->comps[compno].w; - frame_index = y * (frame->linesize[compno] / 2); + frame_index = y * (linesize[compno] / 2); for (x = 0; x < width; ++x) image_line[x] = frame_ptr[frame_index++]; for (; x < image->comps[compno].w; ++x) { @@ -553,12 +557,15 @@ static int libopenjpeg_encode_frame(AVCodecContext *avctx, AVPacket *pkt, { LibOpenJPEGContext *ctx = avctx->priv_data; int ret; - AVFrame *gbrframe; int cpyresult = 0; PacketWriter writer = { 0 }; opj_codec_t *compress = NULL; opj_stream_t *stream = NULL; opj_image_t *image = mj2_create_image(avctx, &ctx->enc_params); + const uint8_t *data[4] = { frame->data[0], frame->data[1], + frame->data[2], frame->data[3] }; + int linesize[4] = { frame->linesize[0], frame->linesize[1], + frame->linesize[2], frame->linesize[3] }; if (!image) { av_log(avctx, AV_LOG_ERROR, "Error creating the mj2 image\n"); ret = AVERROR(EINVAL); @@ -569,15 +576,15 @@ static int libopenjpeg_encode_frame(AVCodecContext *avctx, AVPacket *pkt, case AV_PIX_FMT_RGB24: case AV_PIX_FMT_RGBA: case AV_PIX_FMT_YA8: - cpyresult = libopenjpeg_copy_packed8(avctx, frame, image); + cpyresult = libopenjpeg_copy_packed8(avctx, data, linesize, image); break; case AV_PIX_FMT_XYZ12: - cpyresult = libopenjpeg_copy_packed12(avctx, frame, image); + cpyresult = libopenjpeg_copy_packed12(avctx, data, linesize, image); break; case AV_PIX_FMT_RGB48: case AV_PIX_FMT_RGBA64: case AV_PIX_FMT_YA16: - cpyresult = libopenjpeg_copy_packed16(avctx, frame, image); + cpyresult = libopenjpeg_copy_packed16(avctx, data, linesize, image); break; case AV_PIX_FMT_GBR24P: case AV_PIX_FMT_GBRP9: @@ -585,23 +592,17 @@ static int libopenjpeg_encode_frame(AVCodecContext *avctx, AVPacket *pkt, case AV_PIX_FMT_GBRP12: case AV_PIX_FMT_GBRP14: case AV_PIX_FMT_GBRP16: - gbrframe = av_frame_clone(frame); - if (!gbrframe) { - ret = AVERROR(ENOMEM); - goto done; - } - gbrframe->data[0] = frame->data[2]; // swap to be rgb - gbrframe->data[1] = frame->data[0]; - gbrframe->data[2] = frame->data[1]; - gbrframe->linesize[0] = frame->linesize[2]; - gbrframe->linesize[1] = frame->linesize[0]; - gbrframe->linesize[2] = frame->linesize[1]; + data[0] = frame->data[2]; // swap to be rgb + data[1] = frame->data[0]; + data[2] = frame->data[1]; + linesize[0] = frame->linesize[2]; + linesize[1] = frame->linesize[0]; + linesize[2] = frame->linesize[1]; if (avctx->pix_fmt == AV_PIX_FMT_GBR24P) { - cpyresult = libopenjpeg_copy_unpacked8(avctx, gbrframe, image); + cpyresult = libopenjpeg_copy_unpacked8(avctx, data, linesize, image); } else { - cpyresult = libopenjpeg_copy_unpacked16(avctx, gbrframe, image); + cpyresult = libopenjpeg_copy_unpacked16(avctx, data, linesize, image); } - av_frame_free(&gbrframe); break; case AV_PIX_FMT_GRAY8: case AV_PIX_FMT_YUV410P: @@ -613,7 +614,7 @@ static int libopenjpeg_encode_frame(AVCodecContext *avctx, AVPacket *pkt, case AV_PIX_FMT_YUVA420P: case AV_PIX_FMT_YUVA422P: case AV_PIX_FMT_YUVA444P: - cpyresult = libopenjpeg_copy_unpacked8(avctx, frame, image); + cpyresult = libopenjpeg_copy_unpacked8(avctx, data, linesize, image); break; case AV_PIX_FMT_GRAY10: case AV_PIX_FMT_GRAY12: @@ -643,7 +644,7 @@ static int libopenjpeg_encode_frame(AVCodecContext *avctx, AVPacket *pkt, case AV_PIX_FMT_YUVA444P16: case AV_PIX_FMT_YUVA422P16: case AV_PIX_FMT_YUVA420P16: - cpyresult = libopenjpeg_copy_unpacked16(avctx, frame, image); + cpyresult = libopenjpeg_copy_unpacked16(avctx, data, linesize, image); break; default: av_log(avctx, AV_LOG_ERROR, -- 2.32.0 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".