mirror of
https://github.com/xenia-project/FFmpeg.git
synced 2024-11-23 19:49:56 +00:00
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>
This commit is contained in:
parent
f346b6bbeb
commit
accea4d9d8
@ -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;
|
||||
|
@ -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…
Reference in New Issue
Block a user