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 ESMTPS id CCC0546248 for ; Mon, 27 Jan 2025 12:49:06 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 7E59768BC65; Mon, 27 Jan 2025 14:49:03 +0200 (EET) Received: from EUR05-DB8-obe.outbound.protection.outlook.com (mail-db8eur05olkn2101.outbound.protection.outlook.com [40.92.89.101]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 9535268B886 for ; Mon, 27 Jan 2025 14:48:56 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=N+/UAOTj75Mu2+NMcBiPUIYBCmi4xKW4b0uNF4GOthAR/mg08Ef4UumsHthYQiOOKk2zBv9dm9RznES4/9lGz/HJbv5gWd97reFvq+TWSU9Qfh8aw9HyRRg40vfhhN8u9xBWicKciVyfK/BS6ibQi7m9KALFGygPXacr7/W4p5Kvaau+U6QyzCXPneF9WdPMY/s77Gfx0mo1JEnvKyvjpR57JdUe45yiUn1TVrW7xpyg3tVHIr6xeRBuAySGlh7HGMCblhknro1W9yfnStuMDM+IvAdR1X0K1UcON41RiZ9RUdqF8+bFzBddE+TcKxvHQD8yrbc83c+IowHHjxMq+A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=HXyaXDYiVNMku15EC+VxNscS+dB2S5FldBQaeHkEHl8=; b=a2Cxuipur0AsMqtvW6av56Xx1GogxPyrlZuk1Bu94iT3cmvzxyolzRj7h0TNbC8DdlM4MMmywczgrJbrxu/iLFWfEQWuzyp/ribf5fQqAne6xdXXrbxNLcGSGWcs1nDdMQpcISJSkRuFfA55Og7X3P3sx6mouVwJ4NmbKHX3AuWwxt9u0wRUn7ysu5njpCgelgnA5VleHbB7GZTzJUKIDQhB5oL3awk1jlv3ucFly5jcinf9hBIekCiIMXBYhXdS4fR92C6DNOUhgj9l/fF51PIzh3dE65t8Hx8C9Ngb6GaOtGUeKdV0/qgsYZGle4qkKAX2NluxGqS/8pq0u1shkw== 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=HXyaXDYiVNMku15EC+VxNscS+dB2S5FldBQaeHkEHl8=; b=AaeeOSrdOcZitWbhnQ+nzybgBZzXrzu7oP2Av/5XbMMNThzWHXY2/wG/ZxKjHnSDqymwhnuFOO3qQK9Y+srX1zDcAvw4c2pd6juAtIAqmgwjvIp3rZrOvkBN+z1mqPqvgY7qNvwiXT9lv9roxlhQSUz/NDgOUdF/XRjhy1uuL1YOpM8AQNV0yyhWUXbvQBSjrH+psi6ktql2yg9fotp+L+X3FPa/GicpTp4KWobcFDm4LhJp6pP04NtYp30w7txFsXduZ/jHFGejrkKuz9bkyURZshFsQW658159k/L2idEUaR9sPo0X+emYI77zx/7UdfYQT0fiL++kSobj4S5iyA== Received: from AS8P250MB0744.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:541::14) by AS4P250MB0485.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:4b4::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8377.22; Mon, 27 Jan 2025 12:48:55 +0000 Received: from AS8P250MB0744.EURP250.PROD.OUTLOOK.COM ([fe80::384d:40d4:ecb7:1c9]) by AS8P250MB0744.EURP250.PROD.OUTLOOK.COM ([fe80::384d:40d4:ecb7:1c9%4]) with mapi id 15.20.8377.021; Mon, 27 Jan 2025 12:48:55 +0000 Message-ID: Date: Mon, 27 Jan 2025 13:48:53 +0100 User-Agent: Mozilla Thunderbird To: ffmpeg-devel@ffmpeg.org References: <20250122025403.14457-1-jamrial@gmail.com> <20250122025403.14457-4-jamrial@gmail.com> Content-Language: en-US From: Andreas Rheinhardt In-Reply-To: <20250122025403.14457-4-jamrial@gmail.com> X-ClientProxiedBy: ZRAP278CA0013.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:10::23) To AS8P250MB0744.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:541::14) X-Microsoft-Original-Message-ID: <86910f99-dc65-4472-9874-aafc0351fb09@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AS8P250MB0744:EE_|AS4P250MB0485:EE_ X-MS-Office365-Filtering-Correlation-Id: e2fb1a2c-59f2-4f9e-60eb-08dd3ed0f58e X-Microsoft-Antispam: BCL:0; ARA:14566002|7092599003|5072599009|8060799006|19110799003|6090799003|461199028|15080799006|440099028|3412199025|41001999003; X-Microsoft-Antispam-Message-Info: =?utf-8?B?U1hGVHNvSUVwMHJpSmI4UmdoWHUzb0V4UzZBOFl4c3ZpTmlJdEp3NTgyUElR?= =?utf-8?B?d0hyWjlkSDRXbENCUWZwYUtlUzE0RVBVTWs0TldJRzVEMzhzUGNzMXZxNEE1?= =?utf-8?B?Mk9DZE9xRm8rdklmZzdwZW1KZmx2RllVMnQwRDBNNzhGKzdzbi94OEJ5SmdZ?= =?utf-8?B?a1NyMGQrR2ZmdWlUMml5Q0ppWTkzc1pOUHIrNFlhVGsyc0pCeFN5blRtY2pF?= =?utf-8?B?MjdocXdhdStsL2N1Y1ppN24yOEVub0lWMmNQdkFlemlJNklCaWJpWXd6ZGFi?= =?utf-8?B?MTd3RjBjV1ZpNXdVejdzdUk1bHVkR3JpVkdPdUpKTHhVNmM2QXk4K016ellU?= =?utf-8?B?Q285bnZqUjFZc2cwS0tGZEN4bG1QZ05qZmxtUUhHVnBHZ2FRSVlYbk5ubnFD?= =?utf-8?B?WjJVYlcxb0RKbU45VmU1Rk9Ob0lMUHQyOUlua0NiZTVzOHZnYmNyZ3RFY1E0?= =?utf-8?B?RDRpRStpVDdwbjVGTXJ4ZndpKzVta2YxRVlkU0s2dng3a0FkVEhlWHhrMzZr?= =?utf-8?B?SEJqUTNCTUoyaUUzdlBqb0pmK1NUVllCS2xFYUx0elJSRFJmYU82VndCZjdH?= =?utf-8?B?M3FleGY1ZnliSTdwMjlSR2lNcWlyOGw2U1REcGtEcVZudzYybWVDd0IxM3JI?= =?utf-8?B?NmZySEZ6T0l3YmI4VGJqamZrSlQwdjkvQjU1R1VHR1J0WVVIKzZRUWRydEdY?= =?utf-8?B?K2o4RlUzQjJMUFE5M294cFcvYTFzSWNMRTFmaFk1bmZvT0lPNTJ1T3ZHN2pO?= =?utf-8?B?a3c0aDZkUjVjYm53R3Z6cXFNeDUvN1BQZWF1VVg0ZDBadVVYdU8veVBNZ25p?= =?utf-8?B?U0wzVGhtNlY4UktvKzJNZDNWSnpsK2k5Rmx0SzE1U3Q2SWtiYzVOUGxNdHVT?= =?utf-8?B?c3l3dGlYQ3BwSERya25VU2VRMnRsajBIMVBaWm96aEJxQ1I1aGhqcm9GcmVM?= =?utf-8?B?c1UwOUJOVVdKWkVnMUI3RVpsRFFtd1QrQVVnTS83cWFuV05NVkQxSjJ3Y2Er?= =?utf-8?B?ejE2cFFrWGQxK0MyV0lyY0g3WkN5SzJ3Wkl2NmpOaHJDbXJQVjRqTDFiQlp5?= =?utf-8?B?R2FNYUsrMEVLakxPWkVENEtzeTR0dHg5TlJGRHEyUWJwT2V6SllRcWFJMjVT?= =?utf-8?B?RWlOLzkxdHI4QzZZS1ZVV1l0U2trM1ZDWUU4YlRNVm5yWUlVSHpqdXY4d0d4?= =?utf-8?B?emtSY0k5NlBZOW14VTJLdVQ3WmNwcm1WOUl5ckVBNWVheUE4bW12UHE3YTZ2?= =?utf-8?B?YUpEVWpzWEx0bGpzZkhjZjBSMzN6QUx4TUtseXpiSktVU253UjlESkoyaXZL?= =?utf-8?B?Y1prUnlZV3U2VEt2WkNaZDI5Rjd0TnRZTWdzbEZYamhORlZiSmxORHU5WG53?= =?utf-8?B?OUd2TGZkWlYxZWgxanh3eUtXZVlyMWp6bjhTRTdHR3F3bDh4VXRBb0hrYlZn?= =?utf-8?B?MG9jN05qQlZYNXZRSDhTK2RwakkyeWZydU1VOWp2U0RId0NsbFU4ZjZDYXhV?= =?utf-8?B?enMvL1laTGRWUUhBUEtlSGgrLzZ1cStoSGhoY1dCUlZKUWM5VVVFV0FIOEJX?= =?utf-8?B?WGNuQT09?= X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?amV6OGxobVVQM1hNNnI2STRyRUpXcG9oU1hraVBjY0pYSjNRN2tYbkx1bklX?= =?utf-8?B?amxEOUtYcFA0OHZPQnVzTGlYWCtrM3dZTTJ1L3B0UEpSRjkzUWFuSy9WazY4?= =?utf-8?B?WWJ2VHRKQUFtT08rMXl0YmZ2dEx5V3gzYnJiTWZtdHpYYXlWZzlsR0p5SEls?= =?utf-8?B?SzkzQzU4YlU0Z1FwMGNKYU9tMTd4dnB2bzcwbjljeHdaeFRYaWFlb0MxL2Nv?= =?utf-8?B?eGlCejIvNGc0OVFYZmpPQUlBdUZZTGZRVTZ3V0tCeFVucUt1UXVwR1RwQ1V1?= =?utf-8?B?NDFaVEhwRTAzRUhBZmpBVEF2QThIRkFLa2xVT05WU0VhWjBpdDAvd3NJRE5S?= =?utf-8?B?bllSdXRPNG90MlU4b3RPa3lvMUxBN01xcG9ZbjJYRUY0TE9lbE50YUxxUHhE?= =?utf-8?B?cmNxWk82djdTN1V5ajdVUGVkSUlPQnlTb1RFRWJGaWtRNjYrYlpPZXV6U1R1?= =?utf-8?B?dTNpMjVjNk0reVFDU0pLaU5wUm1uMHVnRnU4dG9kNGFaL1RXeVU2bnhjc1l1?= =?utf-8?B?dG5FS0JzSUs2SmdESFNuZnlIR1llcVowWFZJYkJpRUo1R3NWYTROM1Z5alA1?= =?utf-8?B?Q2M0Qnl4UE9hWGYxclRNUFRjTHRMN3hDTUR1TU9RM2pSTGpldkcrTWJqMWVO?= =?utf-8?B?ekUwc1RSKzBxREo5NGFrSEQydEh3aGd2TUpBU1BGakJ6UXQzaWFuVm1JWVl1?= =?utf-8?B?VGlKQU5jMGxMeVY0aDNvQmhQL1cyemtrdnF0aTlyNXdlc2htZG9HR1BYaXg0?= =?utf-8?B?d1RzSldHMEhsd2hEZTUrY01LU2l1MWF1UC9oTURYS3JqOXJ4c3MwYlkvL3lB?= =?utf-8?B?TzdBbFBYVlNnMXVqVVhzUzRNVDRMNmxoRC91N3ZFY29UQndJWDlxT20zLytC?= =?utf-8?B?MXB6NkNFRitkYkVUTXNIZTd0Q3pucWpzWEV3Um1XbnJvQm9XeVZYM0ZidkRW?= =?utf-8?B?cmtKUHArRVFXK0xLMkd1WUFVYldsREFRNUZsbzFFZDdjMVVlbTlteGdNa2lP?= =?utf-8?B?TmZDZzQ5eHBwR3BiZ1ZENUcwbHVURnFlVnJSL0JCV3hsTzlBR3lETVhYSGcv?= =?utf-8?B?Q1NmL2RWdVovalhML2lvdXlDLzRjWE4xcStjS1d0QTBKcFRLMDB2eDJxSDJJ?= =?utf-8?B?RkVHZHZ3TFoyS3pFaHM1QTJIWXFwRzljRGRpWnNtNWVLU0FtNklSN3l2SnJW?= =?utf-8?B?a2pEWGZJUVlRblJUbVhnYkdoWEs1Mi8rREQ2ZzE4UDE1SlkvcDlEOE9MbCs0?= =?utf-8?B?NW5KWmkybnFkWDdsVG5BU1pjRDl0MHloTEdza1BnWjlzS2EvcWpJN0dKaytz?= =?utf-8?B?dWkyemFDVDlFTG5Ec0tVSDFvS2dJSjByck5nYk8yODVkQ21VUHp0TlFteDdr?= =?utf-8?B?Ri9CRVFBc2xTd1BLdHdGVStWK0FocDdmWEtsMzZBQ21GZCtDZ2U0Ymk3Z2Fh?= =?utf-8?B?dEFxQlQyQWlNTTROYlNqLzRrM0NSRi9MT2xEOXJlMmpvbDFXYVNJV1FUbTF4?= =?utf-8?B?RkFyelBxOFErUDRybitjMGI3RXJaRHlmUkZ1anpoTlBqYmExNW5ZY2g4aVd6?= =?utf-8?B?eXlCWnhOcVA2dVFVQnpFSUMxMWpzUW1iaWdDSlB5NUxGMzBneUgxaXVCeGZU?= =?utf-8?B?ZmloK3ZBdlJCbG5kSUx0T2FwVVhVaXgvaVM1YXVGSFpCK3FFUzh1Y2VIT1ps?= =?utf-8?B?eG13REhieHg3QzRmdE5KbytWMWRnQmg3SUh2VVNFY3RkaFhaeWFsTXh3PT0=?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: e2fb1a2c-59f2-4f9e-60eb-08dd3ed0f58e X-MS-Exchange-CrossTenant-AuthSource: AS8P250MB0744.EURP250.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Jan 2025 12:48:55.2868 (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: AS4P250MB0485 Subject: Re: [FFmpeg-devel] [PATCH 4/7] avcodec/encode: add support for param change frame side 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: James Almer: > With this, callers can signal supported encoders to reinitialize using certain > parameters, which should allow for more graceful (but potentially more limited > in scope) reinitialization than closing and reopening the encoder, or even > simply on-the-fly changes of trivial values that would not require any kind > or flushing or reinitialization by the encoder. > > Signed-off-by: James Almer > --- I don't really see the big improvement over closing+reopening the encoder. > libavcodec/codec_internal.h | 2 ++ > libavcodec/encode.c | 69 +++++++++++++++++++++++++++++++++++++ > 2 files changed, 71 insertions(+) > > diff --git a/libavcodec/codec_internal.h b/libavcodec/codec_internal.h > index 5b2db74590..e38402d2f5 100644 > --- a/libavcodec/codec_internal.h > +++ b/libavcodec/codec_internal.h > @@ -243,6 +243,8 @@ typedef struct FFCodec { > */ > void (*flush)(struct AVCodecContext *); > > + int (*reconf)(struct AVCodecContext *); > + > /** > * Decoding only, a comma-separated list of bitstream filters to apply to > * packets before decoding. > diff --git a/libavcodec/encode.c b/libavcodec/encode.c > index 3baf5b8103..187b4015f1 100644 > --- a/libavcodec/encode.c > +++ b/libavcodec/encode.c > @@ -31,6 +31,7 @@ > > #include "avcodec.h" > #include "avcodec_internal.h" > +#include "bytestream.h" > #include "codec_desc.h" > #include "codec_internal.h" > #include "encode.h" > @@ -59,6 +60,69 @@ static EncodeContext *encode_ctx(AVCodecInternal *avci) > return (EncodeContext*)avci; > } > > +static int apply_param_change(AVCodecContext *avctx, const AVFrame *frame) > +{ > + int ret = AVERROR_BUG; > + const AVFrameSideData *sd; > + GetByteContext gbc; > + uint32_t flags; > + > + sd = av_frame_get_side_data(frame, AV_FRAME_DATA_PARAM_CHANGE); > + if (!sd) > + return 0; > + > + if (!(avctx->codec->capabilities & AV_CODEC_CAP_PARAM_CHANGE)) { > + av_log(avctx, AV_LOG_ERROR, "This encoder does not support parameter " > + "changes, but PARAM_CHANGE side data was sent to it.\n"); > + ret = AVERROR(EINVAL); > + goto fail2; > + } > + > + if (sd->size < 4) > + goto fail; > + > + bytestream2_init(&gbc, sd->data, sd->size); > + flags = bytestream2_get_le32(&gbc); > + > + if (flags & AV_SIDE_DATA_PARAM_CHANGE_SAMPLE_RATE) { > + if (frame->sample_rate <= 0 || frame->sample_rate > INT_MAX) { > + av_log(avctx, AV_LOG_ERROR, "Invalid sample rate"); > + ret = AVERROR_INVALIDDATA; > + goto fail2; > + } > + avctx->sample_rate = frame->sample_rate; > + } > + if (flags & AV_SIDE_DATA_PARAM_CHANGE_DIMENSIONS) { > + av_image_check_size2(frame->width, frame->height, avctx->max_pixels, avctx->pix_fmt, 0, avctx); > + if (ret < 0) { > + av_log(avctx, AV_LOG_ERROR, "Invalid dimensions"); > + goto fail2; > + } > + avctx->width = frame->width; > + avctx->height = frame->height; > + } > + > + if (flags) { > + ret = 0; > + if (ffcodec(avctx->codec)->reconf) > + ret = ffcodec(avctx->codec)->reconf(avctx); > + if (ret < 0) > + goto fail2; > + } > + > + return 0; > +fail: > + av_log(avctx, AV_LOG_ERROR, "PARAM_CHANGE side data too small.\n"); > + ret = AVERROR_INVALIDDATA; > +fail2: > + if (ret < 0) { > + av_log(avctx, AV_LOG_ERROR, "Error applying parameter changes.\n"); > + if (avctx->err_recognition & AV_EF_EXPLODE) > + return ret; > + } > + return 0; > +} > + > int ff_alloc_packet(AVCodecContext *avctx, AVPacket *avpkt, int64_t size) > { > if (size < 0 || size > INT_MAX - AV_INPUT_BUFFER_PADDING_SIZE) { > @@ -205,6 +269,7 @@ int avcodec_encode_subtitle(AVCodecContext *avctx, uint8_t *buf, int buf_size, > int ff_encode_get_frame(AVCodecContext *avctx, AVFrame *frame) > { > AVCodecInternal *avci = avctx->internal; > + int ret; > > if (avci->draining) > return AVERROR_EOF; > @@ -229,6 +294,10 @@ FF_DISABLE_DEPRECATION_WARNINGS > FF_ENABLE_DEPRECATION_WARNINGS > #endif > > + ret = apply_param_change(avctx, frame); > + if (ret < 0) > + return ret; > + > return 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".