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 F1E32468EF for ; Sat, 24 Jun 2023 19:49:16 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id DB6F468C156; Sat, 24 Jun 2023 22:49:13 +0300 (EEST) Received: from EUR02-AM0-obe.outbound.protection.outlook.com (mail-am0eur02olkn2015.outbound.protection.outlook.com [40.92.49.15]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 87C1768B775 for ; Sat, 24 Jun 2023 22:49:07 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=f1z3pYU1en7RUQgSxol8CtgBF1CsqyOLRIkgM/DEBNJQjMkRzv7l2GuTjAlGyx7IpbDQoqQu2fHGFsNaFRyKmLJa1m29lmE/6fwSPiQ4vFm8W/XiccB4Ys7ebNuDp4hN4Tw4xMuCBG4O77kzcL25XtP98nR5vJfBey8XefhSA+ZQRhRM02mkddnVHlFPKX6TWM4uij3cZ49E1rrkWKibSAx94aqC1xwRKZkF7H92CjJXrNb/8qUhqlyGHak6BZplHtQJzsWjXEuI5rGFN+HQ8ZjYaGcXMOIJ+OVt/XAFoKy7PMgzF02ZCXgYRhgi/6V/pVAeAyOMHZakW4FYB/2hFg== 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=60HV3xUagnFCOTfp42jJkPoNQvFQ1uObkg0Hz+OhX/E=; b=LOePzVcKWZI1rYYSpcuKqS2wCmHPDyuJ6jjkXG+upMMD+JBQub6BAVphiMRNdfJyL+35XqsbvRnFGtyn7MNppZo8wOGjfLn+KtamKltiAdqK8EJN8MZeBhjylaCmQmo8/m9CWkxPaPN9z1hg4n4+1zKhdHWzci9BZqtEb/gFeRCqp4HKf9z9YLNjpLWtqa8W3e2eAk0WRsBzXNxIGePRtWSm7adfL+bjGQfkDMKqfkCxcPr3/UXeycc575k52Yo/JuqcdO8LT5k/lOLXi+Eyw00+lTIhajpVZXbkHtlwy90HznuUuvvHh83Ft2lOYY+Kdxt6m7RQIlxymTKqShijEw== 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=60HV3xUagnFCOTfp42jJkPoNQvFQ1uObkg0Hz+OhX/E=; b=bvj0+nF01LGFL6O/vbBkA38/NeYPqCmo9KUPQzAepae5HfH5tJopz+zje9t5Zu2V5HxQgkdFKV5wBk2svv9JjZ18zwFSSwpElJvXUXZpz+Hon/q2UTkWOSz2d/gVYnelnuNy9/95j3LLWiSOPKIrEzWa8Nm6YnCIPdP6r5bnLQIBY7HA1Y6rhHk3OVwtJoe9CZ/TBKX46taNwTyo4/HjfiONRffLnZLxshkLs1iZYPBPtNow/CakBuPPSX/hzn8zwnseZt7sf3I+ptSPwONqEvypd/xnxUUf0Qy5qKAgQDRtJuGocJrUMEnUji968x29DrKBojAYPnD13gvcQGDqCg== Received: from GV1P250MB0737.EURP250.PROD.OUTLOOK.COM (2603:10a6:150:8e::17) by DU2P250MB0027.EURP250.PROD.OUTLOOK.COM (2603:10a6:10:23a::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6521.26; Sat, 24 Jun 2023 19:33:48 +0000 Received: from GV1P250MB0737.EURP250.PROD.OUTLOOK.COM ([fe80::5ed5:2c98:b8f2:616d]) by GV1P250MB0737.EURP250.PROD.OUTLOOK.COM ([fe80::5ed5:2c98:b8f2:616d%7]) with mapi id 15.20.6521.026; Sat, 24 Jun 2023 19:33:48 +0000 Message-ID: Date: Sat, 24 Jun 2023 21:34:58 +0200 Content-Language: en-US To: ffmpeg-devel@ffmpeg.org References: <20230620141608.31759-1-anton@khirnov.net> <20230620141608.31759-4-anton@khirnov.net> From: Andreas Rheinhardt In-Reply-To: <20230620141608.31759-4-anton@khirnov.net> X-TMN: [pmupthJa2XSHRXMEZYZF/V9YL49sW96w] X-ClientProxiedBy: ZR2P278CA0054.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:53::17) To GV1P250MB0737.EURP250.PROD.OUTLOOK.COM (2603:10a6:150:8e::17) X-Microsoft-Original-Message-ID: <83f8b08b-8d1d-db9d-6d87-ec3903609c43@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: GV1P250MB0737:EE_|DU2P250MB0027:EE_ X-MS-Office365-Filtering-Correlation-Id: f0e3c4c8-a68c-4485-a490-08db74e9eec4 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 3sCzdAcwzLo+lEqubK4qfppxTlpbFws5iXv6UDY22W/1pu2FEtaIS1Rmi+gvLWhpLquIgxl2zVYgKlAusSXjd6J/FDlpgWIhFdTf6BxjbslHYW9IICapbovsXbndwJDW+bamxLKHhUtduq+/sI4GjuL5h8rtO5N98fCVNhwhvdkTf5usJKpkCBozKCgvgtmLE8mjIl0wQNg03AumjpwsY5OSHvE7EP4yZccAYZsCLu/DDoPXetfHST6P0QE88N+MhtOJIPb6nWwwwZB/Nd81IaA/Gy1BXSy24iPtvPa1AZ1mpKpQ7OoTcZPYrjf5JXXV0FZBonOdCgPIJG8DPlAoh3xMd+w9G20t4sSYRmOnBdgWmcX1CAu35VIymgTECvgv4JJac1XxvpFNu4HN9g08qxZfpAhZi++ghYlX5/eXUFmAu3lfMIPSFJaWcZYhT4RIvQngxq2poss+IAib6YSJuYi1L11YoWqpKJqRSfH+KREPe9Q02aVPcd7rqAdar5yFWwQIDGSmL6Df89AszQvPh8Zmu3lq2lCI/6GhgsV82B0+blddW5dySXgsNIIPB0GK X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?a3dWZE55bW9YQmQ0YjFtbmZaYTVTeDgyQlpxRHlBdHZaamFvaCt1L3lIV3hR?= =?utf-8?B?RkMwNzlGdWlIV3Njd3lWNExuZ2pSQzd5UFN3Vk1lOHREbWJpUTVJZUZGbEY3?= =?utf-8?B?d2NvenBHWXcxMkFWZnh1YzZqRlQ0UU9WbmNEZ2Z2UzNCak1rbDQyTHJjRXY3?= =?utf-8?B?cWI2amVlYW1meGZmR0p1aFpQbmV3NWw3Qk5Wa2JzWEQrYlhsSnBWcWdqK2E0?= =?utf-8?B?dExUbHNwcGFXaVh1V005dVlZOEdUQXhleS9lMVdzSFFzWFJCRTdISnhtbCti?= =?utf-8?B?bVRTNWFMTUltVEdjczhXMmZ5TkowRUNsREovekdIQ25MeEs3YWFGQzBGcis0?= =?utf-8?B?VGtYd0tFclFXMlQ4a3lPc1BLQ0tkc3puejZKTWJwVzJSdkV6OWJ3RzdBUFg3?= =?utf-8?B?a3pvUHFsQzYweElpTWw4UWNQZmY3UjZIMW13TW9YVDk1alBNTzNiSk1YVHhh?= =?utf-8?B?NEthRW5TNVFkZkdYWitFcldORUgyRXZwSjVwdVFiVnpnZ040WE1rWXFHY1Qv?= =?utf-8?B?U1FreVNkU0pGblRMRjNvRVZnSjcyZ1NQeitLQzQ0M3hndHl4c1ErK1NGVTYv?= =?utf-8?B?QSs1RVNCZ2lLaXZEUHFJTmU5akh4b3dnOFg5aE5CcllvNUNhaC9HYXhFeGd5?= =?utf-8?B?Z1hZaVgwaEx1S0xUeHBOdGVOSDFnb0xnVVNVRXZqQ1ZISWphZTZqZkN3RWJw?= =?utf-8?B?TVNRdmNlK1paaWZ5cElZcFpTZ1RaV0FXYXBIWEgySFdiWU5KMTZOZTlkYXpJ?= =?utf-8?B?b2RIRUwrbzdnME4zNTJkd0ZzdnpwbUFkVHc5ZElzOXEwZmZVcGxQdkxOUDQx?= =?utf-8?B?VFhoQmVZUGtoUXRHWVBLbWNWbXN2Z3JxY045Yk04UDBJTkVmY01DbDVkSXVT?= =?utf-8?B?UFdUakphc2hlNmkrSE1mRGdLeXlybFR2RTFGRlZKWWxhbkE5aDc4S3NkcjAz?= =?utf-8?B?aXd3QlI2Q2FNcVNhQ2pEMnM5N0NhQU1RU21RUzdPbmUrL1BKS3pIMHZZYjNk?= =?utf-8?B?NTVON2sxdzVoL1k5M2d0QUR4a1ZhU0JDNGJvM1hpcHJhMm1zV3Z6NUl4S3NZ?= =?utf-8?B?UHFwQ2JYYUFHK0grUkdWNHA1eGpPODNlQXpUMi9oTTZEVW4wUHhWMG0vaG1j?= =?utf-8?B?ZC9RNCtOcXhDc2tYbWZJVlZUZ0xoK3BhcDdkQVprUUoxbG1MNGVlWENybWJG?= =?utf-8?B?amY5MHJVOS9lL0dEdFZjalVRZDhKZ0ZQTi9CUUdxS1I2MFYyc2doREx3dnpm?= =?utf-8?B?ZWNkeE5XRGtwR2RCbnliOTRIamRGVllLWmZwSElXVTZXTGlMcmZpbnF2S0lO?= =?utf-8?B?aGgrL21MbE5tc2dLNy9ma2o5UlFvWW5WaGQ2R3dTVzZxRnE4clQzcnVPUDM3?= =?utf-8?B?RjU0UHE4VFlFODhXbHlkM3NkRXh1ZmFrWjdVSU5kVC9penJyMEszcnZLSjAr?= =?utf-8?B?MFlRei9XNUVLQUV3YmFpZE1jZS9NSEdSSmh3YlltWTVXVjdmUGQ0MExVTG1S?= =?utf-8?B?dEJJQlBTV0kwTXNtUnhaMFpoR0xGcW9SRjg0Rk9XbHFNdE5iS1lEdnBrdVZG?= =?utf-8?B?ZlRFU3F3Q0g2TVBpNVBieDA5UWZMSEVyYTZERzM5ZDF2ZzRnTTlCbTVQS09O?= =?utf-8?B?SlYxQWRrOXMxN2NmWGo1OFVSUVhrcHVIcEp0Yk1BekNWTFlMZjBiTnBuZjlT?= =?utf-8?Q?3WSkaa3279fqGWsQPq63?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: f0e3c4c8-a68c-4485-a490-08db74e9eec4 X-MS-Exchange-CrossTenant-AuthSource: GV1P250MB0737.EURP250.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Jun 2023 19:33:48.7963 (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: DU2P250MB0027 Subject: Re: [FFmpeg-devel] [PATCH 4/9] lavc: add generic-decode-layer private data 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: Anton Khirnov: > Move AVCodecInternal.nb_draining_errors to it, should should not be > visible outside of decode.c. > --- > libavcodec/avcodec.c | 4 +++- > libavcodec/avcodec_internal.h | 2 ++ > libavcodec/decode.c | 22 ++++++++++++++++++++-- > libavcodec/internal.h | 10 +++++++--- > libavcodec/pthread_frame.c | 3 ++- > 5 files changed, 34 insertions(+), 7 deletions(-) > > diff --git a/libavcodec/avcodec.c b/libavcodec/avcodec.c > index a5cb6035b6..ff251d2dae 100644 > --- a/libavcodec/avcodec.c > +++ b/libavcodec/avcodec.c > @@ -150,7 +150,9 @@ int attribute_align_arg avcodec_open2(AVCodecContext *avctx, const AVCodec *code > if (avctx->extradata_size < 0 || avctx->extradata_size >= FF_MAX_EXTRADATA_SIZE) > return AVERROR(EINVAL); > > - avci = av_mallocz(sizeof(*avci)); > + avci = av_codec_is_decoder(codec) ? > + ff_decode_internal_alloc() : > + av_mallocz(sizeof(AVCodecInternal)); > if (!avci) { > ret = AVERROR(ENOMEM); > goto end; > diff --git a/libavcodec/avcodec_internal.h b/libavcodec/avcodec_internal.h > index 6ffe575c3e..f52f91e07c 100644 > --- a/libavcodec/avcodec_internal.h > +++ b/libavcodec/avcodec_internal.h > @@ -53,4 +53,6 @@ int ff_decode_preinit(struct AVCodecContext *avctx); > void ff_decode_flush_buffers(struct AVCodecContext *avctx); > void ff_encode_flush_buffers(struct AVCodecContext *avctx); > > +struct AVCodecInternal *ff_decode_internal_alloc(void); > + > #endif // AVCODEC_AVCODEC_INTERNAL_H > diff --git a/libavcodec/decode.c b/libavcodec/decode.c > index b5e5b4a2db..c070148b58 100644 > --- a/libavcodec/decode.c > +++ b/libavcodec/decode.c > @@ -50,6 +50,11 @@ > #include "internal.h" > #include "thread.h" > > +struct DecodeContext { > + /* to prevent infinite loop on errors when draining */ > + int nb_draining_errors; > +}; > + > static int apply_param_change(AVCodecContext *avctx, const AVPacket *avpkt) > { > int ret; > @@ -439,7 +444,7 @@ FF_ENABLE_DEPRECATION_WARNINGS > int nb_errors_max = 20 + (HAVE_THREADS && avctx->active_thread_type & FF_THREAD_FRAME ? > avctx->thread_count : 1); > > - if (avci->nb_draining_errors++ >= nb_errors_max) { > + if (avci->d->nb_draining_errors++ >= nb_errors_max) { > av_log(avctx, AV_LOG_ERROR, "Too many errors when draining, this is a bug. " > "Stop draining and force EOF.\n"); > avci->draining_done = 1; > @@ -1752,5 +1757,18 @@ void ff_decode_flush_buffers(AVCodecContext *avctx) > > av_bsf_flush(avci->bsf); > > - avci->nb_draining_errors = 0; > + avci->d->nb_draining_errors = 0; > +} > + > +AVCodecInternal *ff_decode_internal_alloc(void) > +{ > + struct Dummy { > + AVCodecInternal i; > + DecodeContext d; > + } *dummy = av_mallocz(sizeof(*dummy)); > + if (!dummy) > + return NULL; > + dummy->i.d = &dummy->d; > + > + return &dummy->i; > } > diff --git a/libavcodec/internal.h b/libavcodec/internal.h > index dceae182c0..b672092ac4 100644 > --- a/libavcodec/internal.h > +++ b/libavcodec/internal.h > @@ -49,7 +49,14 @@ > # define STRIDE_ALIGN 8 > #endif > > +typedef struct DecodeContext DecodeContext; > + > typedef struct AVCodecInternal { > + /** > + * Generic decoding private data. > + */ > + DecodeContext *d; This approach has the downside of adding unnecessary indirecations; it furthermore adds pointers to DecodeContext and EncodeContext to AVCodecInternal, as if both could be valid at the same time. The above could be overcome by using the typical approach to access these extra fields, as is used for FFStream etc. Furthermore, I do not really think that is worth it: The number of fields affected by it are just so small. Has encoder code ever tried to set nb_draining_errors? > + > /** > * When using frame-threaded decoding, this field is set for the first > * worker thread (e.g. to decode extradata just once). > @@ -148,9 +155,6 @@ typedef struct AVCodecInternal { > AVFrame *buffer_frame; > int draining_done; > > - /* to prevent infinite loop on errors when draining */ > - int nb_draining_errors; > - > /* used when avctx flag AV_CODEC_FLAG_DROPCHANGED is set */ > int changed_frames_dropped; > int initial_format; > diff --git a/libavcodec/pthread_frame.c b/libavcodec/pthread_frame.c > index 008f3da43b..bc305f561f 100644 > --- a/libavcodec/pthread_frame.c > +++ b/libavcodec/pthread_frame.c > @@ -28,6 +28,7 @@ > #include > > #include "avcodec.h" > +#include "avcodec_internal.h" > #include "codec_internal.h" > #include "decode.h" > #include "hwconfig.h" > @@ -815,7 +816,7 @@ static av_cold int init_thread(PerThreadContext *p, int *threads_to_free, > p->parent = fctx; > p->avctx = copy; > > - copy->internal = av_mallocz(sizeof(*copy->internal)); > + copy->internal = ff_decode_internal_alloc(); > if (!copy->internal) > return AVERROR(ENOMEM); > copy->internal->thread_ctx = p; _______________________________________________ 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".