Commit de17e538 authored by aurel's avatar aurel

matroskadec: add support for bzlib compressed tracks

git-svn-id: file:///var/local/repositories/ffmpeg/trunk@13177 9553f0bf-9b14-0410-a0b8-cfaf0461ba5b
parent ab2d1e61
......@@ -38,6 +38,9 @@
#ifdef CONFIG_ZLIB
#include <zlib.h>
#endif
#ifdef CONFIG_BZLIB
#include <bzlib.h>
#endif
typedef struct Track {
MatroskaTrackType type;
......@@ -1505,6 +1508,9 @@ matroska_add_stream (MatroskaDemuxContext *matroska)
if (num != MATROSKA_TRACK_ENCODING_COMP_HEADERSTRIP &&
#ifdef CONFIG_ZLIB
num != MATROSKA_TRACK_ENCODING_COMP_ZLIB &&
#endif
#ifdef CONFIG_BZLIB
num != MATROSKA_TRACK_ENCODING_COMP_BZLIB &&
#endif
num != MATROSKA_TRACK_ENCODING_COMP_LZO)
av_log(matroska->ctx, AV_LOG_ERROR,
......@@ -2749,6 +2755,30 @@ matroska_parse_block(MatroskaDemuxContext *matroska, uint8_t *data, int size,
}
break;
}
#endif
#ifdef CONFIG_BZLIB
case MATROSKA_TRACK_ENCODING_COMP_BZLIB: {
bz_stream bzstream = {0};
pkt_data = NULL;
if (BZ2_bzDecompressInit(&bzstream, 0, 0) != BZ_OK)
continue;
bzstream.next_in = data;
bzstream.avail_in = lace_size[n];
do {
pkt_size *= 3;
pkt_data = av_realloc(pkt_data, pkt_size);
bzstream.avail_out = pkt_size - bzstream.total_out_lo32;
bzstream.next_out = pkt_data + bzstream.total_out_lo32;
result = BZ2_bzDecompress(&bzstream);
} while (result==BZ_OK && pkt_size<10000000);
pkt_size = bzstream.total_out_lo32;
BZ2_bzDecompressEnd(&bzstream);
if (result != BZ_STREAM_END) {
av_free(pkt_data);
continue;
}
break;
}
#endif
}
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment