Mercurial > libavformat.hg
comparison mov.c @ 3086:d9af71ae9064 libavformat
support keyframes indexes starting at 0, broken files created by omneon, fix ref.mov seeking
author | bcoudurier |
---|---|
date | Tue, 26 Feb 2008 18:27:21 +0000 |
parents | bae59276377f |
children | a047cdd6c6b4 |
comparison
equal
deleted
inserted
replaced
3085:bae59276377f | 3086:d9af71ae9064 |
---|---|
1387 sc->audio_cid == -2) { | 1387 sc->audio_cid == -2) { |
1388 unsigned int current_sample = 0; | 1388 unsigned int current_sample = 0; |
1389 unsigned int stts_sample = 0; | 1389 unsigned int stts_sample = 0; |
1390 unsigned int keyframe, sample_size; | 1390 unsigned int keyframe, sample_size; |
1391 unsigned int distance = 0; | 1391 unsigned int distance = 0; |
1392 int key_off = sc->keyframes && sc->keyframes[0] == 1; | |
1392 | 1393 |
1393 st->nb_frames = sc->sample_count; | 1394 st->nb_frames = sc->sample_count; |
1394 for (i = 0; i < sc->chunk_count; i++) { | 1395 for (i = 0; i < sc->chunk_count; i++) { |
1395 current_offset = sc->chunk_offsets[i]; | 1396 current_offset = sc->chunk_offsets[i]; |
1396 if (stsc_index + 1 < sc->sample_to_chunk_sz && | 1397 if (stsc_index + 1 < sc->sample_to_chunk_sz && |
1399 for (j = 0; j < sc->sample_to_chunk[stsc_index].count; j++) { | 1400 for (j = 0; j < sc->sample_to_chunk[stsc_index].count; j++) { |
1400 if (current_sample >= sc->sample_count) { | 1401 if (current_sample >= sc->sample_count) { |
1401 av_log(mov->fc, AV_LOG_ERROR, "wrong sample count\n"); | 1402 av_log(mov->fc, AV_LOG_ERROR, "wrong sample count\n"); |
1402 goto out; | 1403 goto out; |
1403 } | 1404 } |
1404 keyframe = !sc->keyframe_count || current_sample + 1 == sc->keyframes[stss_index]; | 1405 keyframe = !sc->keyframe_count || current_sample+key_off == sc->keyframes[stss_index]; |
1405 if (keyframe) { | 1406 if (keyframe) { |
1406 distance = 0; | 1407 distance = 0; |
1407 if (stss_index + 1 < sc->keyframe_count) | 1408 if (stss_index + 1 < sc->keyframe_count) |
1408 stss_index++; | 1409 stss_index++; |
1409 } | 1410 } |