Browse Source

mov: Fix detecting there is no sync sample.

Stss atom without entries doesn't mean every sample is a sync sample.

Signed-off-by: Martin Storsjö <martin@martin.st>
tags/n0.11
Yusuke Nakamura Martin Storsjö 13 years ago
parent
commit
accea4d9d8
2 changed files with 5 additions and 1 deletions
  1. +1
    -0
      libavformat/isom.h
  2. +4
    -1
      libavformat/mov.c

+ 1
- 0
libavformat/isom.h View File

@@ -106,6 +106,7 @@ typedef struct MOVStreamContext {
unsigned int sample_size;
unsigned int sample_count;
int *sample_sizes;
int keyframe_absent;
unsigned int keyframe_count;
int *keyframes;
int time_scale;


+ 4
- 1
libavformat/mov.c View File

@@ -1534,7 +1534,10 @@ static int mov_read_stss(MOVContext *c, AVIOContext *pb, MOVAtom atom)
av_dlog(c->fc, "keyframe_count = %d\n", entries);

if (!entries)
{
sc->keyframe_absent = 1;
return 0;
}
if (entries >= UINT_MAX / sizeof(int))
return AVERROR_INVALIDDATA;
sc->keyframes = av_malloc(entries * sizeof(int));
@@ -1776,7 +1779,7 @@ static void mov_build_index(MOVContext *mov, AVStream *st)
return;
}

if (!sc->keyframe_count || current_sample+key_off == sc->keyframes[stss_index]) {
if (!sc->keyframe_absent && (!sc->keyframe_count || current_sample+key_off == sc->keyframes[stss_index])) {
keyframe = 1;
if (stss_index + 1 < sc->keyframe_count)
stss_index++;


Loading…
Cancel
Save