@@ -, +, @@ --- libavcodec/dtsdec.c | 15 ++++++++------- 1 files changed, 8 insertions(+), 7 deletions(-) --- a/libavcodec/dtsdec.c +++ a/libavcodec/dtsdec.c @@ -36,6 +36,9 @@ typedef struct DTSContext { uint8_t buf[BUFFER_SIZE]; uint8_t *bufptr; uint8_t *bufpos; + int flags; + int sample_rate; + int bit_rate; } DTSContext; static inline int16_t @@ -173,10 +176,8 @@ dts_decode_frame(AVCodecContext * avctx, void *data, int *data_size, uint8_t *start = buff; uint8_t *end = buff + buff_size; int16_t *out_samples = data; - int sample_rate; int frame_length; int flags; - int bit_rate; int len; level_t level; sample_t bias; @@ -201,8 +202,8 @@ dts_decode_frame(AVCodecContext * avctx, void *data, int *data_size, if(s->bufpos != s->buf + HEADER_SIZE) break; - length = dts_syncinfo(s->state, s->buf, &flags, &sample_rate, - &bit_rate, &frame_length); + length = dts_syncinfo(s->state, s->buf, &s->flags, &s->sample_rate, + &s->bit_rate, &frame_length); if(!length) { av_log(NULL, AV_LOG_INFO, "skip\n"); for(s->bufptr = s->buf; s->bufptr < s->buf + HEADER_SIZE - 1; s->bufptr++) @@ -215,15 +216,15 @@ dts_decode_frame(AVCodecContext * avctx, void *data, int *data_size, level = CONVERT_LEVEL; bias = CONVERT_BIAS; - flags |= DTS_ADJUST_LEVEL; + flags = s->flags | DTS_ADJUST_LEVEL; if(dts_frame(s->state, s->buf, &flags, &level, bias)) { av_log(avctx, AV_LOG_ERROR, "dts_frame() failed\n"); goto end; } - avctx->sample_rate = sample_rate; + avctx->sample_rate = s->sample_rate; avctx->channels = channels_multi(flags); - avctx->bit_rate = bit_rate; + avctx->bit_rate = s->bit_rate; nblocks = dts_blocks_num(s->state); --