diff mbox series

[FFmpeg-devel,07/11] avcodec/aptx: Use AVCodecContext.frame_size according to the API

Message ID AM7PR03MB6660B595B38B2FD1DD3BA0AC8FCA9@AM7PR03MB6660.eurprd03.prod.outlook.com
State Superseded
Headers show
Series [FFmpeg-devel,01/11] tests/fate-run: Allow multiple inputs for transcode() | expand

Checks

Context Check Description
andriy/make_x86 success Make finished
andriy/make_fate_x86 success Make fate finished
andriy/make_ppc success Make finished
andriy/make_fate_ppc fail Make fate failed

Commit Message

Andreas Rheinhardt Aug. 29, 2021, 9:27 p.m. UTC
Currently the APTX (HD) codecs set frame_size if unset and check
whether it is divisible by block_size (corresponding to block_align
as used by other codecs). But this is based upon a misunderstanding
of the API: frame_size is not in bytes, but in samples.*

Said value is also not intended to be set by the user at all,
but set by encoders and (possibly) decoders if the number of channels
in a frame is constant. The latter condition is not fulfilled here,
so only set it for encoders to the value that it already had for APTX:
1024 samples (per channel).

*: If it were needed to check said value, one would need to check
for it to be divisible by four (four samples correspond to one block
of block_size bytes).

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
---
 libavcodec/aptx.c | 10 ++--------
 1 file changed, 2 insertions(+), 8 deletions(-)
diff mbox series

Patch

diff --git a/libavcodec/aptx.c b/libavcodec/aptx.c
index 3aeee1907c..97397aca68 100644
--- a/libavcodec/aptx.c
+++ b/libavcodec/aptx.c
@@ -515,14 +515,8 @@  av_cold int ff_aptx_init(AVCodecContext *avctx)
     s->hd = avctx->codec->id == AV_CODEC_ID_APTX_HD;
     s->block_size = s->hd ? 6 : 4;
 
-    if (avctx->frame_size == 0)
-        avctx->frame_size = 256 * s->block_size;
-
-    if (avctx->frame_size % s->block_size) {
-        av_log(avctx, AV_LOG_ERROR,
-               "Frame size must be a multiple of %d samples\n", s->block_size);
-        return AVERROR(EINVAL);
-    }
+    if (av_codec_is_encoder(avctx->codec))
+        avctx->frame_size = 1024;
 
     for (chan = 0; chan < NB_CHANNELS; chan++) {
         Channel *channel = &s->channels[chan];