This is an automated email from the git hooks/post-receive script.

Git pushed a commit to branch master
in repository ffmpeg.

commit b764f40eaa426041252306ac95e2cdcd3a972526
Author:     Andreas Rheinhardt <[email protected]>
AuthorDate: Mon Feb 9 02:12:43 2026 +0100
Commit:     Andreas Rheinhardt <[email protected]>
CommitDate: Thu Feb 12 10:34:19 2026 +0100

    avcodec/adpcmenc: Check sample rates, ch layouts generically
    
    This also advertises the supported sample rates/channel layouts.
    For ADPCM_IMA_AMV, it actually fixes the advertised channel layouts.
    
    Signed-off-by: Andreas Rheinhardt <[email protected]>
---
 libavcodec/adpcmenc.c | 63 ++++++++++++++++++++-------------------------------
 1 file changed, 24 insertions(+), 39 deletions(-)

diff --git a/libavcodec/adpcmenc.c b/libavcodec/adpcmenc.c
index 232496b281..b2c3474de7 100644
--- a/libavcodec/adpcmenc.c
+++ b/libavcodec/adpcmenc.c
@@ -163,13 +163,6 @@ static av_cold int adpcm_encode_init(AVCodecContext *avctx)
         avctx->block_align = s->block_size;
         ) /* End of CASE */
     CASE(ADPCM_SWF,
-        if (avctx->sample_rate != 11025 &&
-            avctx->sample_rate != 22050 &&
-            avctx->sample_rate != 44100) {
-            av_log(avctx, AV_LOG_ERROR, "Sample rate must be 11025, "
-                   "22050 or 44100\n");
-            return AVERROR(EINVAL);
-        }
         avctx->frame_size  = 4096; /* Hardcoded according to the SWF spec. */
         avctx->block_align = (2 + channels * (22 + 4 * (avctx->frame_size - 
1)) + 7) / 8;
         ) /* End of CASE */
@@ -179,16 +172,6 @@ static av_cold int adpcm_encode_init(AVCodecContext *avctx)
         avctx->block_align = s->block_size;
         break;
     CASE(ADPCM_IMA_AMV,
-        if (avctx->sample_rate != 22050) {
-            av_log(avctx, AV_LOG_ERROR, "Sample rate must be 22050\n");
-            return AVERROR(EINVAL);
-        }
-
-        if (channels != 1) {
-            av_log(avctx, AV_LOG_ERROR, "Only mono is supported\n");
-            return AVERROR(EINVAL);
-        }
-
         avctx->frame_size  = s->block_size;
         avctx->block_align = 8 + (FFALIGN(avctx->frame_size, 2) / 2);
         ) /* End of CASE */
@@ -968,7 +951,7 @@ static const enum AVSampleFormat sample_fmts_p[] = {
     AV_SAMPLE_FMT_S16P, AV_SAMPLE_FMT_NONE
 };
 
-static const AVChannelLayout ch_layouts[] = {
+static const AVChannelLayout ch_layouts_mono_stereo[] = {
     AV_CHANNEL_LAYOUT_MONO,
     AV_CHANNEL_LAYOUT_STEREO,
     { 0 },
@@ -995,8 +978,8 @@ static const AVClass adpcm_encoder_class = {
     .version    = LIBAVUTIL_VERSION_INT,
 };
 
-#define ADPCM_ENCODER_0(id_, name_, sample_fmts_, capabilities_, long_name_)
-#define ADPCM_ENCODER_1(id_, name_, sample_fmts_, capabilities_, long_name_) \
+#define ADPCM_ENCODER_0(id_, name_, sample_fmts_, capabilities_, long_name_, 
...)
+#define ADPCM_ENCODER_1(id_, name_, sample_fmts_, capabilities_, long_name_, 
...) \
 const FFCodec ff_ ## name_ ## _encoder = {                                 \
     .p.name         = #name_,                                              \
     CODEC_LONG_NAME(long_name_),                                           \
@@ -1005,30 +988,32 @@ const FFCodec ff_ ## name_ ## _encoder = {               
                  \
     .p.capabilities = capabilities_ | AV_CODEC_CAP_DR1 |                   \
                       AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE,               \
     .p.priv_class   = &adpcm_encoder_class,                                \
-    CODEC_CH_LAYOUTS_ARRAY(ch_layouts),                                    \
     CODEC_SAMPLEFMTS_ARRAY(sample_fmts_),                                  \
     .priv_data_size = sizeof(ADPCMEncodeContext),                          \
     .init           = adpcm_encode_init,                                   \
     FF_CODEC_ENCODE_CB(adpcm_encode_frame),                                \
     .close          = adpcm_encode_close,                                  \
     .caps_internal  = FF_CODEC_CAP_INIT_CLEANUP,                           \
+    __VA_ARGS__,                                                           \
 };
-#define ADPCM_ENCODER_2(enabled, codec_id, name, sample_fmts, capabilities, 
long_name) \
-    ADPCM_ENCODER_ ## enabled(codec_id, name, sample_fmts, capabilities, 
long_name)
-#define ADPCM_ENCODER_3(config, codec_id, name, sample_fmts, capabilities, 
long_name) \
-    ADPCM_ENCODER_2(config, codec_id, name, sample_fmts, capabilities, 
long_name)
-#define ADPCM_ENCODER(codec, name, sample_fmts, capabilities, long_name) \
+#define ADPCM_ENCODER_2(enabled, codec_id, name, sample_fmts, capabilities, 
long_name, ...) \
+    ADPCM_ENCODER_ ## enabled(codec_id, name, sample_fmts, capabilities, 
long_name, __VA_ARGS__)
+#define ADPCM_ENCODER_3(config, codec_id, name, sample_fmts, capabilities, 
long_name, ...) \
+    ADPCM_ENCODER_2(config, codec_id, name, sample_fmts, capabilities, 
long_name, __VA_ARGS__)
+#define ADPCM_ENCODER(codec, name, sample_fmts, capabilities, long_name, ...) \
     ADPCM_ENCODER_3(CONFIG_ ## codec ## _ENCODER, AV_CODEC_ID_ ## codec, \
-                    name, sample_fmts, capabilities, long_name)
-
-ADPCM_ENCODER(ADPCM_ARGO,    adpcm_argo,    sample_fmts_p, 0,                  
           "ADPCM Argonaut Games")
-ADPCM_ENCODER(ADPCM_IMA_AMV, adpcm_ima_amv, sample_fmts,   0,                  
           "ADPCM IMA AMV")
-ADPCM_ENCODER(ADPCM_IMA_APM, adpcm_ima_apm, sample_fmts,   
AV_CODEC_CAP_SMALL_LAST_FRAME, "ADPCM IMA Ubisoft APM")
-ADPCM_ENCODER(ADPCM_IMA_ALP, adpcm_ima_alp, sample_fmts,   
AV_CODEC_CAP_SMALL_LAST_FRAME, "ADPCM IMA High Voltage Software ALP")
-ADPCM_ENCODER(ADPCM_IMA_QT,  adpcm_ima_qt,  sample_fmts_p, 0,                  
           "ADPCM IMA QuickTime")
-ADPCM_ENCODER(ADPCM_IMA_SSI, adpcm_ima_ssi, sample_fmts,   
AV_CODEC_CAP_SMALL_LAST_FRAME, "ADPCM IMA Simon & Schuster Interactive")
-ADPCM_ENCODER(ADPCM_IMA_WAV, adpcm_ima_wav, sample_fmts_p, 0,                  
           "ADPCM IMA WAV")
-ADPCM_ENCODER(ADPCM_IMA_WS,  adpcm_ima_ws,  sample_fmts,   
AV_CODEC_CAP_SMALL_LAST_FRAME, "ADPCM IMA Westwood")
-ADPCM_ENCODER(ADPCM_MS,      adpcm_ms,      sample_fmts,   0,                  
           "ADPCM Microsoft")
-ADPCM_ENCODER(ADPCM_SWF,     adpcm_swf,     sample_fmts,   0,                  
           "ADPCM Shockwave Flash")
-ADPCM_ENCODER(ADPCM_YAMAHA,  adpcm_yamaha,  sample_fmts,   0,                  
           "ADPCM Yamaha")
+                    name, sample_fmts, capabilities, long_name, __VA_ARGS__)
+
+#define MONO_STEREO CODEC_CH_LAYOUTS_ARRAY(ch_layouts_mono_stereo)
+
+ADPCM_ENCODER(ADPCM_ARGO,    adpcm_argo,    sample_fmts_p, 0,                  
           "ADPCM Argonaut Games",                   MONO_STEREO)
+ADPCM_ENCODER(ADPCM_IMA_AMV, adpcm_ima_amv, sample_fmts,   0,                  
           "ADPCM IMA AMV",                          
CODEC_CH_LAYOUTS(AV_CHANNEL_LAYOUT_MONO), CODEC_SAMPLERATES(22050))
+ADPCM_ENCODER(ADPCM_IMA_APM, adpcm_ima_apm, sample_fmts,   
AV_CODEC_CAP_SMALL_LAST_FRAME, "ADPCM IMA Ubisoft APM",                  
MONO_STEREO)
+ADPCM_ENCODER(ADPCM_IMA_ALP, adpcm_ima_alp, sample_fmts,   
AV_CODEC_CAP_SMALL_LAST_FRAME, "ADPCM IMA High Voltage Software ALP",    
MONO_STEREO)
+ADPCM_ENCODER(ADPCM_IMA_QT,  adpcm_ima_qt,  sample_fmts_p, 0,                  
           "ADPCM IMA QuickTime",                    MONO_STEREO)
+ADPCM_ENCODER(ADPCM_IMA_SSI, adpcm_ima_ssi, sample_fmts,   
AV_CODEC_CAP_SMALL_LAST_FRAME, "ADPCM IMA Simon & Schuster Interactive", 
MONO_STEREO)
+ADPCM_ENCODER(ADPCM_IMA_WAV, adpcm_ima_wav, sample_fmts_p, 0,                  
           "ADPCM IMA WAV",                          MONO_STEREO)
+ADPCM_ENCODER(ADPCM_IMA_WS,  adpcm_ima_ws,  sample_fmts,   
AV_CODEC_CAP_SMALL_LAST_FRAME, "ADPCM IMA Westwood",                     
MONO_STEREO)
+ADPCM_ENCODER(ADPCM_MS,      adpcm_ms,      sample_fmts,   0,                  
           "ADPCM Microsoft",                        MONO_STEREO)
+ADPCM_ENCODER(ADPCM_SWF,     adpcm_swf,     sample_fmts,   0,                  
           "ADPCM Shockwave Flash",                  MONO_STEREO, 
CODEC_SAMPLERATES(11025, 22050, 44100))
+ADPCM_ENCODER(ADPCM_YAMAHA,  adpcm_yamaha,  sample_fmts,   0,                  
           "ADPCM Yamaha",                           MONO_STEREO)

_______________________________________________
ffmpeg-cvslog mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to