From f92f4523782be96cd80b4d94d2642d12dd42cf00 Mon Sep 17 00:00:00 2001 From: Mashiat Sarker Shakkhar Date: Mon, 30 Apr 2012 08:56:35 -0700 Subject: WMAL: do not start decoding if frame does not end in current packet This fixes decoding of frames which span more than two packets. Tested with recit24.wma. Signed-off-by: Kostya Shishkov --- libavcodec/wmalosslessdec.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'libavcodec/wmalosslessdec.c') diff --git a/libavcodec/wmalosslessdec.c b/libavcodec/wmalosslessdec.c index 1520a06c45..e86645e225 100644 --- a/libavcodec/wmalosslessdec.c +++ b/libavcodec/wmalosslessdec.c @@ -1209,8 +1209,8 @@ static int decode_packet(AVCodecContext *avctx, void *data, int *got_frame_ptr, save_bits(s, gb, num_bits_prev_frame, 1); /* decode the cross packet frame if it is valid */ - if (!s->packet_loss) - decode_frame(s); + if (num_bits_prev_frame < remaining_packet_bits && !s->packet_loss) + decode_frame(s); } else if (s->num_saved_bits - s->frame_offset) { av_dlog(avctx, "ignoring %x previously saved bits\n", s->num_saved_bits - s->frame_offset); -- cgit v1.2.3 From 035a394eac868928dded505fb5ca494350ad2e92 Mon Sep 17 00:00:00 2001 From: Jakub Stachowski Date: Sat, 28 Apr 2012 11:24:19 -0700 Subject: WMAL: do not output last frame again if nothing was decoded in current packet Reviewed-by: Mashiat Sarker Shakkhar Signed-off-by: Michael Niedermayer Signed-off-by: Kostya Shishkov --- libavcodec/wmalosslessdec.c | 2 ++ 1 file changed, 2 insertions(+) (limited to 'libavcodec/wmalosslessdec.c') diff --git a/libavcodec/wmalosslessdec.c b/libavcodec/wmalosslessdec.c index e86645e225..913271e216 100644 --- a/libavcodec/wmalosslessdec.c +++ b/libavcodec/wmalosslessdec.c @@ -1166,6 +1166,8 @@ static int decode_packet(AVCodecContext *avctx, void *data, int *got_frame_ptr, int buf_size = avpkt->size; int num_bits_prev_frame, packet_sequence_number, spliced_packet; + s->frame.nb_samples = 0; + if (s->packet_done || s->packet_loss) { s->packet_done = 0; -- cgit v1.2.3