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 }