Message ID | 20240812165156.2433-1-jamrial@gmail.com |
---|---|
State | New |
Headers | show |
Series | [FFmpeg-devel] avcodec/adpcm: adpcm_dtk is stereo only | expand |
Context | Check | Description |
---|---|---|
yinshiyou/make_loongarch64 | success | Make finished |
yinshiyou/make_fate_loongarch64 | success | Make fate finished |
James Almer: > Fixes ticket #11133 > > Signed-off-by: James Almer <jamrial@gmail.com> > --- > libavcodec/adpcm.c | 5 ++++- > 1 file changed, 4 insertions(+), 1 deletion(-) > > diff --git a/libavcodec/adpcm.c b/libavcodec/adpcm.c > index 8d358bc414..623d33fd02 100644 > --- a/libavcodec/adpcm.c > +++ b/libavcodec/adpcm.c > @@ -276,6 +276,9 @@ static av_cold int adpcm_decode_init(AVCodecContext * avctx) > return AVERROR_PATCHWELCOME; > } > break; > + case AV_CODEC_ID_ADPCM_DTK: > + min_channels = 2; > + break; > case AV_CODEC_ID_ADPCM_PSX: > max_channels = 8; > if (avctx->ch_layout.nb_channels <= 0 || > @@ -1047,7 +1050,7 @@ static int get_nb_samples(AVCodecContext *avctx, GetByteContext *gb, > break; > case AV_CODEC_ID_ADPCM_DTK: > case AV_CODEC_ID_ADPCM_PSX: > - nb_samples = buf_size / (16 * ch) * 28; > + nb_samples = buf_size / 32 * 28; This also changes AV_CODEC_ID_ADPCM_PSX; given that its max_channels is 8, this does not seem intended. > break; > case AV_CODEC_ID_ADPCM_ARGO: > nb_samples = buf_size / avctx->block_align * 32; Who says that adpcm_dtk is stereo-only? - Andreas
On 8/12/2024 2:55 PM, Andreas Rheinhardt wrote: > James Almer: >> Fixes ticket #11133 >> >> Signed-off-by: James Almer <jamrial@gmail.com> >> --- >> libavcodec/adpcm.c | 5 ++++- >> 1 file changed, 4 insertions(+), 1 deletion(-) >> >> diff --git a/libavcodec/adpcm.c b/libavcodec/adpcm.c >> index 8d358bc414..623d33fd02 100644 >> --- a/libavcodec/adpcm.c >> +++ b/libavcodec/adpcm.c >> @@ -276,6 +276,9 @@ static av_cold int adpcm_decode_init(AVCodecContext * avctx) >> return AVERROR_PATCHWELCOME; >> } >> break; >> + case AV_CODEC_ID_ADPCM_DTK: >> + min_channels = 2; >> + break; >> case AV_CODEC_ID_ADPCM_PSX: >> max_channels = 8; >> if (avctx->ch_layout.nb_channels <= 0 || >> @@ -1047,7 +1050,7 @@ static int get_nb_samples(AVCodecContext *avctx, GetByteContext *gb, >> break; >> case AV_CODEC_ID_ADPCM_DTK: >> case AV_CODEC_ID_ADPCM_PSX: >> - nb_samples = buf_size / (16 * ch) * 28; >> + nb_samples = buf_size / 32 * 28; > > This also changes AV_CODEC_ID_ADPCM_PSX; given that its max_channels is > 8, this does not seem intended. Will fix. > >> break; >> case AV_CODEC_ID_ADPCM_ARGO: >> nb_samples = buf_size / avctx->block_align * 32; > > Who says that adpcm_dtk is stereo-only? It's an audio format only used in a bunch of GameCube games, and nothing but stereo samples exist of it. The frames also have a header with per-channel information, and it's always for two. > > - 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".
diff --git a/libavcodec/adpcm.c b/libavcodec/adpcm.c index 8d358bc414..623d33fd02 100644 --- a/libavcodec/adpcm.c +++ b/libavcodec/adpcm.c @@ -276,6 +276,9 @@ static av_cold int adpcm_decode_init(AVCodecContext * avctx) return AVERROR_PATCHWELCOME; } break; + case AV_CODEC_ID_ADPCM_DTK: + min_channels = 2; + break; case AV_CODEC_ID_ADPCM_PSX: max_channels = 8; if (avctx->ch_layout.nb_channels <= 0 || @@ -1047,7 +1050,7 @@ static int get_nb_samples(AVCodecContext *avctx, GetByteContext *gb, break; case AV_CODEC_ID_ADPCM_DTK: case AV_CODEC_ID_ADPCM_PSX: - nb_samples = buf_size / (16 * ch) * 28; + nb_samples = buf_size / 32 * 28; break; case AV_CODEC_ID_ADPCM_ARGO: nb_samples = buf_size / avctx->block_align * 32;
Fixes ticket #11133 Signed-off-by: James Almer <jamrial@gmail.com> --- libavcodec/adpcm.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-)