diff options
author | Torsten Jager <t.jager@gmx.de> | 2014-02-07 16:47:00 +0100 |
---|---|---|
committer | Torsten Jager <t.jager@gmx.de> | 2014-02-07 16:47:00 +0100 |
commit | 729938c70ca34bb983dbaed11f8d199b97f76235 (patch) | |
tree | b00fde8bfaaa0f98f907339eb937d6618ac82887 | |
parent | 4152e54a17457f692d583330d353f9b99d90439e (diff) | |
download | xine-lib-729938c70ca34bb983dbaed11f8d199b97f76235.tar.gz xine-lib-729938c70ca34bb983dbaed11f8d199b97f76235.tar.bz2 |
demux_qt: fix minor trak length bug.
-rw-r--r-- | src/demuxers/demux_qt.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/src/demuxers/demux_qt.c b/src/demuxers/demux_qt.c index 390b6b43b..9e9ac8ec3 100644 --- a/src/demuxers/demux_qt.c +++ b/src/demuxers/demux_qt.c @@ -310,6 +310,7 @@ typedef struct { unsigned char *chunk_offset_table64; /* sample sizes */ + unsigned int samples; unsigned int sample_size; unsigned int sample_size_count; unsigned char *sample_size_table; @@ -943,6 +944,7 @@ static qt_error parse_trak_atom (qt_trak *trak, trak->chunk_offset_count = 0; trak->chunk_offset_table32 = NULL; trak->chunk_offset_table64 = NULL; + trak->samples = 0; trak->sample_size = 0; trak->sample_size_count = 0; trak->sample_size_table = NULL; @@ -1441,6 +1443,7 @@ static qt_error parse_trak_atom (qt_trak *trak, if (atomsize >= 20) { trak->sample_size = _X_BE_32(&atom[12]); trak->sample_size_count = _X_BE_32(&atom[16]); + trak->samples = trak->sample_size_count; if (trak->sample_size_count > (atomsize - 20) / 4) trak->sample_size_count = (atomsize - 20) / 4; debug_atom_load (" qt stsz atom (sample size atom): sample size = %d, %d entries\n", @@ -1836,8 +1839,8 @@ static qt_error build_frame_table(qt_trak *trak, } /* was the last chunk incomplete? */ - if (trak->sample_size_count && (trak->sample_size_count < trak->frame_count)) - trak->frame_count = trak->sample_size_count; + if (trak->samples && (trak->samples < trak->frame_count)) + trak->frame_count = trak->samples; /* fill in the keyframe information */ p = trak->sync_sample_table; |