From 515625622470bb406ed87b8b36739847b4655c39 Mon Sep 17 00:00:00 2001 From: Sergey Vlasov Date: Tue, 15 May 2007 14:21:33 +0400 Subject: dtsdec: save frame flags in DTSContext Frame flags must be saved between calls to dts_decode_frame() (if the input buffer did not hold a complete frame, flags for that frame will be used by the next dts_decode_frame() call when the rest of frame data is available). Fixes "dts_frame() failed" errors in mplayer due to uninitialized garbage in flags. Signed-off-by: Sergey Vlasov --- libavcodec/dtsdec.c | 5 +++-- 1 files changed, 3 insertions(+), 2 deletions(-) diff --git a/libavcodec/dtsdec.c b/libavcodec/dtsdec.c index cf77a57..17ba86f 100644 --- a/libavcodec/dtsdec.c +++ b/libavcodec/dtsdec.c @@ -36,6 +36,7 @@ typedef struct DTSContext { uint8_t buf[BUFFER_SIZE]; uint8_t *bufptr; uint8_t *bufpos; + int flags; } DTSContext; static inline int16_t @@ -201,7 +202,7 @@ 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, + length = dts_syncinfo(s->state, s->buf, &s->flags, &sample_rate, &bit_rate, &frame_length); if(!length) { av_log(NULL, AV_LOG_INFO, "skip\n"); @@ -215,7 +216,7 @@ 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; -- 1.5.1.1.197.g66b3