aboutsummaryrefslogtreecommitdiffstats
path: root/libavcodec/takdec.c
diff options
context:
space:
mode:
authorPaul B Mahol <onemda@gmail.com>2012-10-12 09:18:58 +0000
committerPaul B Mahol <onemda@gmail.com>2012-10-12 09:18:58 +0000
commit4dcf71aacca695fecba2c04e14d2b44bb3d8b764 (patch)
tree3e6d559a80b8c3a670cb4e530629f3598529d89d /libavcodec/takdec.c
parent56519d7d14ac73580dd2b99e2789e33c19674f28 (diff)
downloadffmpeg-4dcf71aacca695fecba2c04e14d2b44bb3d8b764.tar.gz
takdec: stop decoding in case of unknown bps
Signed-off-by: Paul B Mahol <onemda@gmail.com>
Diffstat (limited to 'libavcodec/takdec.c')
-rw-r--r--libavcodec/takdec.c14
1 files changed, 11 insertions, 3 deletions
diff --git a/libavcodec/takdec.c b/libavcodec/takdec.c
index d55f51a26d..76bde55c56 100644
--- a/libavcodec/takdec.c
+++ b/libavcodec/takdec.c
@@ -146,7 +146,7 @@ static const struct CParam {
{ 0x1A, 0x1800000, 0x1800000, 0x6800000, 0xC000000 },
};
-static void tak_set_bps(AVCodecContext *avctx, int bps)
+static int tak_set_bps(AVCodecContext *avctx, int bps)
{
switch (bps) {
case 8:
@@ -158,7 +158,12 @@ static void tak_set_bps(AVCodecContext *avctx, int bps)
case 24:
avctx->sample_fmt = AV_SAMPLE_FMT_S32P;
break;
+ default:
+ av_log(avctx, AV_LOG_ERROR, "invalid/unsupported bits per sample\n");
+ return AVERROR_INVALIDDATA;
}
+
+ return 0;
}
static int get_shift(int sample_rate)
@@ -185,6 +190,7 @@ static int get_scale(int sample_rate, int shift)
static av_cold int tak_decode_init(AVCodecContext *avctx)
{
TAKDecContext *s = avctx->priv_data;
+ int ret;
ff_tak_init_crc();
ff_dsputil_init(&s->dsp, avctx);
@@ -196,7 +202,8 @@ static av_cold int tak_decode_init(AVCodecContext *avctx)
s->uval = get_scale(avctx->sample_rate, get_shift(avctx->sample_rate));
s->subframe_scale = get_scale(avctx->sample_rate, 1);
- tak_set_bps(avctx, avctx->bits_per_coded_sample);
+ if ((ret = tak_set_bps(avctx, avctx->bits_per_coded_sample)) < 0)
+ return ret;
return 0;
}
@@ -775,7 +782,8 @@ static int tak_decode_frame(AVCodecContext *avctx, void *data,
if (s->ti.bps != avctx->bits_per_raw_sample) {
avctx->bits_per_raw_sample = s->ti.bps;
- tak_set_bps(avctx, avctx->bits_per_raw_sample);
+ if ((ret = tak_set_bps(avctx, avctx->bits_per_raw_sample)) < 0)
+ return ret;
}
if (s->ti.sample_rate != avctx->sample_rate) {
avctx->sample_rate = s->ti.sample_rate;