mirror of
https://github.com/xenia-project/FFmpeg.git
synced 2025-01-22 03:46:46 +00:00
takdec: stop decoding in case of unknown bps
Signed-off-by: Paul B Mahol <onemda@gmail.com>
This commit is contained in:
parent
56519d7d14
commit
4dcf71aacc
@ -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…
x
Reference in New Issue
Block a user