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 8BBBA45E95 for ; Wed, 14 Jun 2023 09:41:25 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 11D8D68C414; Wed, 14 Jun 2023 12:41:22 +0300 (EEST) Received: from EUR04-HE1-obe.outbound.protection.outlook.com (mail-he1eur04olkn2030.outbound.protection.outlook.com [40.92.73.30]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 774E868BF5C for ; Wed, 14 Jun 2023 12:41:15 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=SNYdu4tzpI+rTgfnmxnD9UW6z2GRhT/DN9nGslF9ksSdksMKg/KvOOAu1cW0ZxGZCtk5EQ4TKT3eQZ+/IicIzYFRsGlf84r/kjes7GELVbIaimHDOenFRon2JqVYX7ao0Rc1dYlOSXHvirUWTjppYe4vV6Mf3ouBAEQtMAB+9EcUL8RySeExf8CAF6+iqO6/U5NXA/9RsKgwDT6RyjG2kA5ba9mEygH920w/LG3n/PxWQtCUSdeaZffC0rzM/ee+xtIw+SWb/2LIvhZEyAjKmjl4JXHfKTVVOv7SO460PYdhx+kVHHSIwVRXZFC4gbf4NhHDPpqZZoPrtl7E2ba4CA== 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=+B9Xdx3K3BBW8gJc9MLcwlTUhwpEUMRiZotJwgI8ubk=; b=TnQ/LUBYEJbtCetxPsh3F+6KViaGKoMpcYuYa7ujyxtwakynZoShhKTcrhcnmnHZ1tzXb6SSlgxIQrXGqvCbG5roGznAYNNdnHEunXqDzaD4pxS3Azjs9ntSQ4LhCxq2aUkd+UpDZU+s1+aMlbTiLR3X7JwuSvVnJcUSLaCubc4bcyBjePDvq7yYcp2vYRjgWWVU+LKepkPhbzH2OtVQ8SDdCTniLn4w9zhZ+645x4bAWeHCGNYhoWYsi+VMBAXWv5dEmzVPlHUpQCt8rFEQ31iIQoOMZlN5XYgKYiQjxAL5+C5EPzO4d729IQlwEsrLfFyR5JsarLGdyCOneDKllA== 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=+B9Xdx3K3BBW8gJc9MLcwlTUhwpEUMRiZotJwgI8ubk=; b=jiNvGunpiiVvaEPD4n/OfAeof0ERHkSDi+5VHRDKitk5jXBr3rx9lAxLX8enYlN18C8nHEMqVp1KLUfc4Q8O4jHTcVGJ30BU2ykpxqW58ldMlwm0M11CfG8GKlpjaRgUxCOXY/zQUEh85P7Za0OtCA2haXKGpaIzvks6bbko68OtqHGMaSQKifY1BIf1pb3k4mtBErTVyE6wA8/RN/Oo8BQ1zEXcYeZL/WY4avsMfNM9DuPoezp04/N2ohZQmFesqygjL6PcXImIlQoOoFcJby2zGL9GvQ+WBmhfAei/r8xU/Yumaj/5fERKr2rWdlOMs6ajR4+dJL1yls6BSktuaQ== Received: from GV1P250MB0737.EURP250.PROD.OUTLOOK.COM (2603:10a6:150:8e::17) by DU2P250MB0190.EURP250.PROD.OUTLOOK.COM (2603:10a6:10:276::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6477.37; Wed, 14 Jun 2023 09:41:13 +0000 Received: from GV1P250MB0737.EURP250.PROD.OUTLOOK.COM ([fe80::6328:a667:5a29:f1e1]) by GV1P250MB0737.EURP250.PROD.OUTLOOK.COM ([fe80::6328:a667:5a29:f1e1%5]) with mapi id 15.20.6455.045; Wed, 14 Jun 2023 09:41:13 +0000 Message-ID: Date: Wed, 14 Jun 2023 11:42:01 +0200 Content-Language: en-US To: ffmpeg-devel@ffmpeg.org References: <20230608142029.16564-1-thilo.borgmann@mail.de> <20230608142029.16564-5-thilo.borgmann@mail.de> From: Andreas Rheinhardt In-Reply-To: <20230608142029.16564-5-thilo.borgmann@mail.de> X-TMN: [Q53KmAknRMTbX7MOsClfO0JlvQq1jpI4] X-ClientProxiedBy: AM0PR03CA0062.eurprd03.prod.outlook.com (2603:10a6:208::39) To GV1P250MB0737.EURP250.PROD.OUTLOOK.COM (2603:10a6:150:8e::17) X-Microsoft-Original-Message-ID: MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: GV1P250MB0737:EE_|DU2P250MB0190:EE_ X-MS-Office365-Filtering-Correlation-Id: 74ead23c-cf59-4da4-4ae8-08db6cbb7dd5 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: N/2QdzCxuzS56hnZAg2e8zp7/eyTxKppzHBYQfQNHMnWGYqabzf3jlWEZJHbyptjdc2RVqVjXDUMVVmZpw0JQmWBwav+nRVzoy6LI5mljlOeWlGLUgDKd0A40LG+N4haNCFCdflqYaDBo1Dba+nSZO/1aglJceiymFyWf+fcxudNqzc+dzQiNJ9sWEFbfZqEQmHf0y4jPLlJaW0LvRKUx/SKroTQ3CkILgQgueH3O6N8KcGb5cRpX5yv5+BA11HC2uf5idlMTCg7vwFIPSnjAm4kO3JRmBq4BPclecPEgeRWYFhmcardeKfxdxE5+aQL5PD0r4WQ3aX3lIKOSCjGhvOinsdFor+EVj4cEsM6AxSUgBtCnisO7m2H7rgrACQYhKDQSo95pBcRI6jv4B4fQFp4dgzUNNhpuogd11U7IvjDAbn7/7qJXFHwLQbLxSmRXHghAoVtzFOyGkU3wj34/Kmxj0vGg2ANsbhKPkFkSYJP1WhXmYZhnliIYKjw/36L7iI+WptnMzGjCerGfwgXd3xvsW+j8fhaCd4GE8vnl3Oj5iVJJo5+rdAs4CLpQg5NJYXnp/SAmR/8x9EogEm58gTvNQp3uceY5BA05mPyqtiQSTumkwvUP06eCArQA9YN X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?dnB4NEx5ZDVFWkI3S2NYblRqR29LYU1Mek1RZVpjK1luakJCdHNpamlPTFJ5?= =?utf-8?B?R2UwdWtjbnVjcFpyVDV4Rk44ajRPdXJYSDZpL1FzYVh5RG1sdnNMMmt5L3Vj?= =?utf-8?B?ek9MSERMWFBJd0ZiRk1DcTQ1V1FUbldBSEFPN0xSaTRNNDVUeWt4dDlqQkxa?= =?utf-8?B?czI2bFh6T2pHS3VVNEFSV3NFaTNwRE9ybjJMSUN3b1NKaEpFRmlsSWJQQ1FO?= =?utf-8?B?UURrTDc4QVNJaVAzL2tkbFFxaENXeGl0UnBZSzZRak93YlJVU0Eyb2h0M0dJ?= =?utf-8?B?NTBFR3ovV2owTFhKY1FlUkxWTlMrTENsNkt0USt4b2hGVzBMdWd2R3FBWUlt?= =?utf-8?B?RTVLM1RrQkhXOTE3SHZ1SGxnT2ZTcnBHcysxNWZvWjdwUEpFVUJXZkFRTWZh?= =?utf-8?B?cGhXQmE1cnpLbnJwenROOHFieUxMeUZQUzNFUFdpcWVpeDRqZXE2Y1QxVnZ5?= =?utf-8?B?Zm04b3VybEQ1VldlZUREZmU2RXJncE9peCtIUlZJRFBQdkt3cXBTL0tidUp0?= =?utf-8?B?b3FDRXkwUmpFWXd0bG1GM3FzcS85M0l4eFZSWmpLOGF1ZEQyVGNvNWE1WStG?= =?utf-8?B?a0FLckNBa0pHQm1qK3V4SmhYbzNpOU9GSFRIemdpekdoNXZTaGt6aFJLUzNp?= =?utf-8?B?ZGJmY1NnR1dIanNsdEZROHMxNlp6czBUZnZ1dGpOaVd3VjZSVmNFRjhydktk?= =?utf-8?B?T2NEL2p0dEY2ZGhwZ0Z5bjY1Q21mZytleXdUNDF1M0tmcGY2L3VCWDVPcFV4?= =?utf-8?B?L1laUEpERVZCSHRsVEpYS3Q4VVJQbmpqSUVnRERsWUdldEkwMUR6OEFqaHUx?= =?utf-8?B?dEdFQ3hVRVBrMHpQeWRrMjJ4MXVlOTJIQWJBREZmOUFnclBsVmc3N0xQcEZU?= =?utf-8?B?bklVd2xpb2xyandtWG8zZG9NWGVDNmRDYVFSZEVDRUdWelh1R2cvWjhLamhp?= =?utf-8?B?dUd5bS9QdGRkdnNtZWF4Um05Q0lxNXZqcjVFamZKMy9xelNDeHA1SEVKSGt2?= =?utf-8?B?clhCQUlYUk9tK1lybWZkQlorZGN4NERFTnNIeSt6WWZvOUNYa28rWlJHLzFU?= =?utf-8?B?ZnJxUVNjRnFHeUJqSFJWTEJxVEM2eVhvTUE5QmRHRExiR2psL0swc1d0eEZT?= =?utf-8?B?Y01hVklUQ3I0ZnBYdFRwTFpWTVdaSHNZQ3BjR3N3UEM3TFl5S29LTW9oaG9R?= =?utf-8?B?RStLTWFqNmZzMDMvMVdUamtGOFdFT3dvTWNPTTJDd0RUcEdhTHBGSHkySmVF?= =?utf-8?B?Z3gxSWlJWHhGWVNUb2pvTkdMT0ZTMjMzeERBVG1sT0x3b3BFeU1SS3dCQnNB?= =?utf-8?B?RmdUY1RYeEdMT0xYS2tmTG9NTWYzSEJRVjFOSXQwa3VRc21HRjRpUmU0ZnVy?= =?utf-8?B?N2ZDQ3lHSXZYWjdFaThCQkVKV045SXU4d3RnNDJYUDhwbEpSTm5RQUZOK1RW?= =?utf-8?B?cGJ5WjBYc2tOMjh1dUxhL211SHpBNzdXTEVDeDBRVCtBZFF1SEN6S3Jtb2xG?= =?utf-8?B?L0NBUjRicnlUNFRhVWpvRXVFTiswVElZRWw0UlYza2RpcitnTjlSMkxLR21D?= =?utf-8?B?eUUrVk9tZjRQVDI3NXF6eU5qeW10TWlRMmFiZkdnbkpYd2tKdGVvOGg3WHAy?= =?utf-8?B?MmNZNlJ4Nmt6OTF2aTV5eHFPdTZwY0ppRnlvWUVzUkdPaVYxOVIrY25rTUYy?= =?utf-8?Q?Nb1/EkwAn9U2J3CtMUG3?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 74ead23c-cf59-4da4-4ae8-08db6cbb7dd5 X-MS-Exchange-CrossTenant-AuthSource: GV1P250MB0737.EURP250.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Jun 2023 09:41:13.2591 (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: DU2P250MB0190 Subject: Re: [FFmpeg-devel] [PATCH v1 4/4] avcodec/webp: make init_canvas_frame static 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 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: Thilo Borgmann: > --- > libavcodec/webp.c | 143 +++++++++++++++++++++++----------------------- > 1 file changed, 71 insertions(+), 72 deletions(-) > > diff --git a/libavcodec/webp.c b/libavcodec/webp.c > index bee43fcf19..d3e3f85dd3 100644 > --- a/libavcodec/webp.c > +++ b/libavcodec/webp.c > @@ -1337,7 +1337,77 @@ static int vp8_lossy_decode_frame(AVCodecContext *avctx, AVFrame *p, > } > return ret; > } > -int init_canvas_frame(WebPContext *s, int format, int key_frame); > + > +static int init_canvas_frame(WebPContext *s, int format, int key_frame) > +{ > + AVFrame *canvas = s->canvas_frame.f; > + int height; > + int ret; > + > + // canvas is needed only for animation > + if (!(s->vp8x_flags & VP8X_FLAG_ANIMATION)) > + return 0; > + > + // avoid init for non-key frames whose format and size did not change > + if (!key_frame && > + canvas->data[0] && > + canvas->format == format && > + canvas->width == s->canvas_width && > + canvas->height == s->canvas_height) > + return 0; > + > + // canvas changes within IPPP sequences will loose thread sync > + // because of the ThreadFrame reallocation and will wait forever > + // so if frame-threading is used, forbid canvas changes and unlock > + // previous frames > + if (!key_frame && canvas->data[0]) { > + if (s->avctx->thread_count > 1) { > + av_log(s->avctx, AV_LOG_WARNING, "Canvas change detected. The output will be damaged. Use -threads 1 to try decoding with best effort.\n"); > + // unlock previous frames that have sent an _await() call > + ff_thread_report_progress(&s->canvas_frame, INT_MAX, 0); > + return AVERROR_PATCHWELCOME; > + } else { > + // warn for damaged frames > + av_log(s->avctx, AV_LOG_WARNING, "Canvas change detected. The output will be damaged.\n"); > + } > + } > + > + s->avctx->pix_fmt = format; > + canvas->format = format; > + canvas->width = s->canvas_width; > + canvas->height = s->canvas_height; > + > + // VP8 decoder changed the width and height in AVCodecContext. > + // Change it back to the canvas size. > + ret = ff_set_dimensions(s->avctx, s->canvas_width, s->canvas_height); > + if (ret < 0) > + return ret; > + > + ff_thread_release_ext_buffer(s->avctx, &s->canvas_frame); > + ret = ff_thread_get_ext_buffer(s->avctx, &s->canvas_frame, AV_GET_BUFFER_FLAG_REF); > + if (ret < 0) > + return ret; > + > + if (canvas->format == AV_PIX_FMT_ARGB) { > + height = canvas->height; > + memset(canvas->data[0], 0, height * canvas->linesize[0]); > + } else /* if (canvas->format == AV_PIX_FMT_YUVA420P) */ { > + const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(canvas->format); > + for (int comp = 0; comp < desc->nb_components; comp++) { > + int plane = desc->comp[comp].plane; > + > + if (comp == 1 || comp == 2) > + height = AV_CEIL_RSHIFT(canvas->height, desc->log2_chroma_h); > + else > + height = FFALIGN(canvas->height, 1 << desc->log2_chroma_h); > + > + memset(canvas->data[plane], s->transparent_yuva[plane], > + height * canvas->linesize[plane]); > + } > + } > + > + return 0; > +} > > static int webp_decode_frame_common(AVCodecContext *avctx, uint8_t *data, int size, > int *got_frame, int key_frame) > @@ -1577,77 +1647,6 @@ exif_end: > return size; > } > > -int init_canvas_frame(WebPContext *s, int format, int key_frame) > -{ > - AVFrame *canvas = s->canvas_frame.f; > - int height; > - int ret; > - > - // canvas is needed only for animation > - if (!(s->vp8x_flags & VP8X_FLAG_ANIMATION)) > - return 0; > - > - // avoid init for non-key frames whose format and size did not change > - if (!key_frame && > - canvas->data[0] && > - canvas->format == format && > - canvas->width == s->canvas_width && > - canvas->height == s->canvas_height) > - return 0; > - > - // canvas changes within IPPP sequences will loose thread sync > - // because of the ThreadFrame reallocation and will wait forever > - // so if frame-threading is used, forbid canvas changes and unlock > - // previous frames > - if (!key_frame && canvas->data[0]) { > - if (s->avctx->thread_count > 1) { > - av_log(s->avctx, AV_LOG_WARNING, "Canvas change detected. The output will be damaged. Use -threads 1 to try decoding with best effort.\n"); > - // unlock previous frames that have sent an _await() call > - ff_thread_report_progress(&s->canvas_frame, INT_MAX, 0); > - return AVERROR_PATCHWELCOME; > - } else { > - // warn for damaged frames > - av_log(s->avctx, AV_LOG_WARNING, "Canvas change detected. The output will be damaged.\n"); > - } > - } > - > - s->avctx->pix_fmt = format; > - canvas->format = format; > - canvas->width = s->canvas_width; > - canvas->height = s->canvas_height; > - > - // VP8 decoder changed the width and height in AVCodecContext. > - // Change it back to the canvas size. > - ret = ff_set_dimensions(s->avctx, s->canvas_width, s->canvas_height); > - if (ret < 0) > - return ret; > - > - ff_thread_release_ext_buffer(s->avctx, &s->canvas_frame); > - ret = ff_thread_get_ext_buffer(s->avctx, &s->canvas_frame, AV_GET_BUFFER_FLAG_REF); > - if (ret < 0) > - return ret; > - > - if (canvas->format == AV_PIX_FMT_ARGB) { > - height = canvas->height; > - memset(canvas->data[0], 0, height * canvas->linesize[0]); > - } else /* if (canvas->format == AV_PIX_FMT_YUVA420P) */ { > - const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(canvas->format); > - for (int comp = 0; comp < desc->nb_components; comp++) { > - int plane = desc->comp[comp].plane; > - > - if (comp == 1 || comp == 2) > - height = AV_CEIL_RSHIFT(canvas->height, desc->log2_chroma_h); > - else > - height = FFALIGN(canvas->height, 1 << desc->log2_chroma_h); > - > - memset(canvas->data[plane], s->transparent_yuva[plane], > - height * canvas->linesize[plane]); > - } > - } > - > - return 0; > -} > - > /* > * Blend src1 (foreground) and src2 (background) into dest, in ARGB format. > * width, height are the dimensions of src1 You add this function in the preceding patch. So why don't you do it properly instead of fixing this up later? - Andreas _______________________________________________ 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".