X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=wmadec_filter.c;h=41dd51f96bb7fa49522a2749256802d45fa60de3;hp=0dff2b7914a0e1f1e18afc412bbd331bfe32f648;hb=c6dff555d7ed916d47b5739923613a265042c1a0;hpb=da06f6a311095df0b980c62bac40ce73b45b02a0 diff --git a/wmadec_filter.c b/wmadec_filter.c index 0dff2b79..41dd51f9 100644 --- a/wmadec_filter.c +++ b/wmadec_filter.c @@ -1068,10 +1068,13 @@ static int wma_decode_superframe(struct private_wmadec_data *pwd, void *data, if (buf_size == 0) { pwd->last_superframe_len = 0; + *data_size = 0; return 0; } - if (buf_size < pwd->ahi.block_align) + if (buf_size < pwd->ahi.block_align) { + *data_size = 0; return 0; + } buf_size = pwd->ahi.block_align; samples = data; init_get_bits(&pwd->gb, buf, buf_size); @@ -1221,12 +1224,12 @@ next_buffer: fn->min_iqs += 4096; goto next_buffer; } - fn->min_iqs = 2 * (WMA_FRAME_SKIP + pwd->ahi.block_align); + fn->min_iqs = 2 * pwd->ahi.packet_size; fn->private_data = pwd; converted = pwd->ahi.header_len; goto success; } - fn->min_iqs = WMA_FRAME_SKIP + pwd->ahi.block_align; + fn->min_iqs = pwd->ahi.packet_size; if (fn->min_iqs > len) goto success; out_size = WMA_OUTPUT_BUFFER_SIZE; @@ -1237,10 +1240,12 @@ next_buffer: free(out); goto err; } - out = para_realloc(out, out_size); - if (out_size > 0) + if (out_size > 0) { + out = para_realloc(out, out_size); btr_add_output(out, out_size, btrn); - converted += ret + WMA_FRAME_SKIP; + } else + free(out); + converted += pwd->ahi.packet_size; success: btr_consume(btrn, converted); return 0;