diff options
Diffstat (limited to 'ffmpeg/libavcodec/gsmdec.c')
| -rw-r--r-- | ffmpeg/libavcodec/gsmdec.c | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/ffmpeg/libavcodec/gsmdec.c b/ffmpeg/libavcodec/gsmdec.c index dc64267..c4cde92 100644 --- a/ffmpeg/libavcodec/gsmdec.c +++ b/ffmpeg/libavcodec/gsmdec.c @@ -47,7 +47,16 @@ static av_cold int gsm_init(AVCodecContext *avctx) break; case AV_CODEC_ID_GSM_MS: avctx->frame_size = 2 * GSM_FRAME_SIZE; - avctx->block_align = GSM_MS_BLOCK_SIZE; + if (!avctx->block_align) + avctx->block_align = GSM_MS_BLOCK_SIZE; + else + if (avctx->block_align < MSN_MIN_BLOCK_SIZE || + avctx->block_align > GSM_MS_BLOCK_SIZE || + (avctx->block_align - MSN_MIN_BLOCK_SIZE) % 3) { + av_log(avctx, AV_LOG_ERROR, "Invalid block alignment %d\n", + avctx->block_align); + return AVERROR_INVALIDDATA; + } } return 0; @@ -79,12 +88,13 @@ static int gsm_decode_frame(AVCodecContext *avctx, void *data, init_get_bits(&gb, buf, buf_size * 8); if (get_bits(&gb, 4) != 0xd) av_log(avctx, AV_LOG_WARNING, "Missing GSM magic!\n"); - res = gsm_decode_block(avctx, samples, &gb); + res = gsm_decode_block(avctx, samples, &gb, GSM_13000); if (res < 0) return res; break; case AV_CODEC_ID_GSM_MS: - res = ff_msgsm_decode_block(avctx, samples, buf); + res = ff_msgsm_decode_block(avctx, samples, buf, + (GSM_MS_BLOCK_SIZE - avctx->block_align) / 3); if (res < 0) return res; } @@ -103,6 +113,7 @@ static void gsm_flush(AVCodecContext *avctx) #if CONFIG_GSM_DECODER AVCodec ff_gsm_decoder = { .name = "gsm", + .long_name = NULL_IF_CONFIG_SMALL("GSM"), .type = AVMEDIA_TYPE_AUDIO, .id = AV_CODEC_ID_GSM, .priv_data_size = sizeof(GSMContext), @@ -110,12 +121,12 @@ AVCodec ff_gsm_decoder = { .decode = gsm_decode_frame, .flush = gsm_flush, .capabilities = CODEC_CAP_DR1, - .long_name = NULL_IF_CONFIG_SMALL("GSM"), }; #endif #if CONFIG_GSM_MS_DECODER AVCodec ff_gsm_ms_decoder = { .name = "gsm_ms", + .long_name = NULL_IF_CONFIG_SMALL("GSM Microsoft variant"), .type = AVMEDIA_TYPE_AUDIO, .id = AV_CODEC_ID_GSM_MS, .priv_data_size = sizeof(GSMContext), @@ -123,6 +134,5 @@ AVCodec ff_gsm_ms_decoder = { .decode = gsm_decode_frame, .flush = gsm_flush, .capabilities = CODEC_CAP_DR1, - .long_name = NULL_IF_CONFIG_SMALL("GSM Microsoft variant"), }; #endif |
