[FFmpeg-devel] [PATCH] sbc: do not set sample format in parser
Marc Gonzalez
marc.w.gonzalez at free.fr
Tue Jan 5 17:57:44 EET 2021
From: Arnaud Vrac <avrac at freebox.fr>
Date: Tue, 5 Jan 2021 13:47:43 +0100
Commit bdd31feec934 changed the SBC decoder to only set the output
sample format on init, instead of setting it explicitly on each frame,
which is correct. But the SBC parser overrides the sample format to S16,
which triggers a crash when combining the parser and the decoder.
Fix the issue by not setting the sample format anymore in the parser,
which is wrong.
---
We've been seeing the following crash signature:
Crash reason: SIGSEGV /0x00000000
Crash address: 0x0
0 libavcodec.so.58 sbc_decode_frame
1 libavcodec.so.58 decode_receive_frame_internal
2 libavcodec.so.58 avcodec_send_packet
3 fbxbta2dp decoder_th_func
4 libpthread.so.0 start_thread
5 libc.so.6 thread_start
NB: call stack obtained via CFI, so not necessarily correct
---
libavcodec/sbc_parser.c | 2 --
1 file changed, 2 deletions(-)
diff --git a/libavcodec/sbc_parser.c b/libavcodec/sbc_parser.c
index f56564147a..5549b1951c 100644
--- a/libavcodec/sbc_parser.c
+++ b/libavcodec/sbc_parser.c
@@ -42,7 +42,6 @@ static int sbc_parse_header(AVCodecParserContext *s, AVCodecContext *avctx,
if (data[0] == MSBC_SYNCWORD && data[1] == 0 && data[2] == 0) {
avctx->channels = 1;
- avctx->sample_fmt = AV_SAMPLE_FMT_S16;
avctx->sample_rate = 16000;
avctx->frame_size = 120;
s->duration = avctx->frame_size;
@@ -66,7 +65,6 @@ static int sbc_parse_header(AVCodecParserContext *s, AVCodecContext *avctx,
+ (joint * subbands)) + 7) / 8;
avctx->channels = channels;
- avctx->sample_fmt = AV_SAMPLE_FMT_S16;
avctx->sample_rate = sample_rates[sr];
avctx->frame_size = subbands * blocks;
s->duration = avctx->frame_size;
--
2.27.0
More information about the ffmpeg-devel
mailing list