Browse Source

takdec: stop decoding in case of unknown bps

Signed-off-by: Paul B Mahol <onemda@gmail.com>
tags/n1.1
Paul B Mahol 12 years ago
parent
commit
4dcf71aacc
1 changed files with 11 additions and 3 deletions
  1. +11
    -3
      libavcodec/takdec.c

+ 11
- 3
libavcodec/takdec.c View File

@@ -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;


Loading…
Cancel
Save