summaryrefslogtreecommitdiff
path: root/ffmpeg/libavcodec/gsmdec.c
diff options
context:
space:
mode:
authorTim Redfern <tim@eclectronics.org>2013-12-29 12:19:38 +0000
committerTim Redfern <tim@eclectronics.org>2013-12-29 12:19:38 +0000
commitf7813a5324be39d13ab536c245d15dfc602a7849 (patch)
treefad99148b88823d34a5df2f0a25881a002eb291b /ffmpeg/libavcodec/gsmdec.c
parentb7a5a477b8ff4d4e3028b9dfb9a9df0a41463f92 (diff)
basic type mechanism working
Diffstat (limited to 'ffmpeg/libavcodec/gsmdec.c')
-rw-r--r--ffmpeg/libavcodec/gsmdec.c20
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