diff options
author | Thibaut Mattern <thibaut.mattern@gmail.com> | 2008-02-18 23:51:40 +0100 |
---|---|---|
committer | Thibaut Mattern <thibaut.mattern@gmail.com> | 2008-02-18 23:51:40 +0100 |
commit | dfaac7bec1f45bbabb8e5cfbe1001dee13829496 (patch) | |
tree | 51150def7f224d8e6e1fd9c74ee630972e885fa4 | |
parent | 81f97ffcec8753ec559ea7c3659bbf022d6a9b2b (diff) | |
download | xine-lib-dfaac7bec1f45bbabb8e5cfbe1001dee13829496.tar.gz xine-lib-dfaac7bec1f45bbabb8e5cfbe1001dee13829496.tar.bz2 |
Timecode diff is signed.
Should fix bug 35.
--HG--
extra : transplant_source : %DD%95%9F%A7%8D%01%BD%98%40%E4R%AAW%F2%ED%93%B2%DE%1A%E9
-rw-r--r-- | src/demuxers/demux_matroska.c | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/src/demuxers/demux_matroska.c b/src/demuxers/demux_matroska.c index 3c992ecca..63b6ea3c8 100644 --- a/src/demuxers/demux_matroska.c +++ b/src/demuxers/demux_matroska.c @@ -1832,6 +1832,15 @@ static int read_block_data (demux_matroska_t *this, int len) { return 1; } +static int parse_int16(uint8_t *data) { + int value = (int)_X_BE_16(data); + if (value & 1<<15) + { + value -= 1<<16; + } + return value; +} + static int parse_block (demux_matroska_t *this, uint64_t block_size, uint64_t cluster_timecode, uint64_t block_duration, int normpos, int is_key) { @@ -1848,8 +1857,9 @@ static int parse_block (demux_matroska_t *this, uint64_t block_size, if (!(num_len = parse_ebml_uint(this, data, &track_num))) return 0; data += num_len; - - timecode_diff = (int)_X_BE_16(data); + + /* timecode_diff is signed */ + timecode_diff = parse_int16(data); data += 2; flags = *data; |