summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTorsten Jager <t.jager@gmx.de>2014-02-07 16:47:00 +0100
committerTorsten Jager <t.jager@gmx.de>2014-02-07 16:47:00 +0100
commit729938c70ca34bb983dbaed11f8d199b97f76235 (patch)
treeb00fde8bfaaa0f98f907339eb937d6618ac82887
parent4152e54a17457f692d583330d353f9b99d90439e (diff)
downloadxine-lib-729938c70ca34bb983dbaed11f8d199b97f76235.tar.gz
xine-lib-729938c70ca34bb983dbaed11f8d199b97f76235.tar.bz2
demux_qt: fix minor trak length bug.
-rw-r--r--src/demuxers/demux_qt.c7
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;