changeset 3154:01f6f3c905db libavformat

move mov_build_index before mov_read_trak to avoid useless declaration
author bcoudurier
date Thu, 20 Mar 2008 15:57:11 +0000
parents 4ded3fdf5c7c
children e22efe21156d
files mov.c
diffstat 1 files changed, 107 insertions(+), 109 deletions(-) [+]
line wrap: on
line diff
--- a/mov.c	Thu Mar 20 15:55:50 2008 +0000
+++ b/mov.c	Thu Mar 20 15:57:11 2008 +0000
@@ -1089,7 +1089,113 @@
     return 0;
 }
 
-static void mov_build_index(MOVContext *mov, AVStream *st);
+static void mov_build_index(MOVContext *mov, AVStream *st)
+{
+    MOVStreamContext *sc = st->priv_data;
+    offset_t current_offset;
+    int64_t current_dts = 0;
+    unsigned int stts_index = 0;
+    unsigned int stsc_index = 0;
+    unsigned int stss_index = 0;
+    unsigned int i, j;
+
+    if (sc->sample_sizes || st->codec->codec_type == CODEC_TYPE_VIDEO ||
+        sc->audio_cid == -2) {
+        unsigned int current_sample = 0;
+        unsigned int stts_sample = 0;
+        unsigned int keyframe, sample_size;
+        unsigned int distance = 0;
+        int key_off = sc->keyframes && sc->keyframes[0] == 1;
+
+        st->nb_frames = sc->sample_count;
+        for (i = 0; i < sc->chunk_count; i++) {
+            current_offset = sc->chunk_offsets[i];
+            if (stsc_index + 1 < sc->sample_to_chunk_sz &&
+                i + 1 == sc->sample_to_chunk[stsc_index + 1].first)
+                stsc_index++;
+            for (j = 0; j < sc->sample_to_chunk[stsc_index].count; j++) {
+                if (current_sample >= sc->sample_count) {
+                    av_log(mov->fc, AV_LOG_ERROR, "wrong sample count\n");
+                    goto out;
+                }
+                keyframe = !sc->keyframe_count || current_sample+key_off == sc->keyframes[stss_index];
+                if (keyframe) {
+                    distance = 0;
+                    if (stss_index + 1 < sc->keyframe_count)
+                        stss_index++;
+                }
+                sample_size = sc->sample_size > 0 ? sc->sample_size : sc->sample_sizes[current_sample];
+                dprintf(mov->fc, "AVIndex stream %d, sample %d, offset %"PRIx64", dts %"PRId64", "
+                        "size %d, distance %d, keyframe %d\n", st->index, current_sample,
+                        current_offset, current_dts, sample_size, distance, keyframe);
+                if(sc->sample_to_chunk[stsc_index].id - 1 == sc->pseudo_stream_id)
+                    av_add_index_entry(st, current_offset, current_dts, sample_size, distance,
+                                    keyframe ? AVINDEX_KEYFRAME : 0);
+                current_offset += sample_size;
+                assert(sc->stts_data[stts_index].duration % sc->time_rate == 0);
+                current_dts += sc->stts_data[stts_index].duration / sc->time_rate;
+                distance++;
+                stts_sample++;
+                current_sample++;
+                if (stts_index + 1 < sc->stts_count && stts_sample == sc->stts_data[stts_index].count) {
+                    stts_sample = 0;
+                    stts_index++;
+                }
+            }
+        }
+    } else { /* read whole chunk */
+        unsigned int chunk_samples, chunk_size, chunk_duration;
+        unsigned int frames = 1;
+        for (i = 0; i < sc->chunk_count; i++) {
+            current_offset = sc->chunk_offsets[i];
+            if (stsc_index + 1 < sc->sample_to_chunk_sz &&
+                i + 1 == sc->sample_to_chunk[stsc_index + 1].first)
+                stsc_index++;
+            chunk_samples = sc->sample_to_chunk[stsc_index].count;
+            /* get chunk size, beware of alaw/ulaw/mace */
+            if (sc->samples_per_frame > 0 &&
+                (chunk_samples * sc->bytes_per_frame % sc->samples_per_frame == 0)) {
+                if (sc->samples_per_frame < 1024)
+                    chunk_size = chunk_samples * sc->bytes_per_frame / sc->samples_per_frame;
+                else {
+                    chunk_size = sc->bytes_per_frame;
+                    frames = chunk_samples / sc->samples_per_frame;
+                    chunk_samples = sc->samples_per_frame;
+                }
+            } else if (sc->sample_size > 1 || st->codec->bits_per_sample == 8) {
+                chunk_size = chunk_samples * sc->sample_size;
+            } else {
+                av_log(mov->fc, AV_LOG_ERROR, "could not determine chunk size, report problem\n");
+                goto out;
+            }
+            for (j = 0; j < frames; j++) {
+                av_add_index_entry(st, current_offset, current_dts, chunk_size, 0, AVINDEX_KEYFRAME);
+                /* get chunk duration */
+                chunk_duration = 0;
+                while (chunk_samples > 0) {
+                    if (chunk_samples < sc->stts_data[stts_index].count) {
+                        chunk_duration += sc->stts_data[stts_index].duration * chunk_samples;
+                        sc->stts_data[stts_index].count -= chunk_samples;
+                        break;
+                    } else {
+                        chunk_duration += sc->stts_data[stts_index].duration * chunk_samples;
+                        chunk_samples -= sc->stts_data[stts_index].count;
+                        if (stts_index + 1 < sc->stts_count)
+                            stts_index++;
+                    }
+                }
+                current_offset += sc->bytes_per_frame;
+                dprintf(mov->fc, "AVIndex stream %d, chunk %d, offset %"PRIx64", dts %"PRId64", size %d, "
+                        "duration %d\n", st->index, i, current_offset, current_dts, chunk_size, chunk_duration);
+                assert(chunk_duration % sc->time_rate == 0);
+                current_dts += chunk_duration / sc->time_rate;
+            }
+        }
+    }
+ out:
+    /* adjust sample count to avindex entries */
+    sc->sample_count = st->nb_index_entries;
+}
 
 static int mov_read_trak(MOVContext *c, ByteIOContext *pb, MOV_atom_t atom)
 {
@@ -1435,114 +1541,6 @@
     return score;
 }
 
-static void mov_build_index(MOVContext *mov, AVStream *st)
-{
-    MOVStreamContext *sc = st->priv_data;
-    offset_t current_offset;
-    int64_t current_dts = 0;
-    unsigned int stts_index = 0;
-    unsigned int stsc_index = 0;
-    unsigned int stss_index = 0;
-    unsigned int i, j;
-
-    if (sc->sample_sizes || st->codec->codec_type == CODEC_TYPE_VIDEO ||
-        sc->audio_cid == -2) {
-        unsigned int current_sample = 0;
-        unsigned int stts_sample = 0;
-        unsigned int keyframe, sample_size;
-        unsigned int distance = 0;
-        int key_off = sc->keyframes && sc->keyframes[0] == 1;
-
-        st->nb_frames = sc->sample_count;
-        for (i = 0; i < sc->chunk_count; i++) {
-            current_offset = sc->chunk_offsets[i];
-            if (stsc_index + 1 < sc->sample_to_chunk_sz &&
-                i + 1 == sc->sample_to_chunk[stsc_index + 1].first)
-                stsc_index++;
-            for (j = 0; j < sc->sample_to_chunk[stsc_index].count; j++) {
-                if (current_sample >= sc->sample_count) {
-                    av_log(mov->fc, AV_LOG_ERROR, "wrong sample count\n");
-                    goto out;
-                }
-                keyframe = !sc->keyframe_count || current_sample+key_off == sc->keyframes[stss_index];
-                if (keyframe) {
-                    distance = 0;
-                    if (stss_index + 1 < sc->keyframe_count)
-                        stss_index++;
-                }
-                sample_size = sc->sample_size > 0 ? sc->sample_size : sc->sample_sizes[current_sample];
-                dprintf(mov->fc, "AVIndex stream %d, sample %d, offset %"PRIx64", dts %"PRId64", "
-                        "size %d, distance %d, keyframe %d\n", st->index, current_sample,
-                        current_offset, current_dts, sample_size, distance, keyframe);
-                if(sc->sample_to_chunk[stsc_index].id - 1 == sc->pseudo_stream_id)
-                    av_add_index_entry(st, current_offset, current_dts, sample_size, distance,
-                                    keyframe ? AVINDEX_KEYFRAME : 0);
-                current_offset += sample_size;
-                assert(sc->stts_data[stts_index].duration % sc->time_rate == 0);
-                current_dts += sc->stts_data[stts_index].duration / sc->time_rate;
-                distance++;
-                stts_sample++;
-                current_sample++;
-                if (stts_index + 1 < sc->stts_count && stts_sample == sc->stts_data[stts_index].count) {
-                    stts_sample = 0;
-                    stts_index++;
-                }
-            }
-        }
-    } else { /* read whole chunk */
-        unsigned int chunk_samples, chunk_size, chunk_duration;
-        unsigned int frames = 1;
-        for (i = 0; i < sc->chunk_count; i++) {
-            current_offset = sc->chunk_offsets[i];
-            if (stsc_index + 1 < sc->sample_to_chunk_sz &&
-                i + 1 == sc->sample_to_chunk[stsc_index + 1].first)
-                stsc_index++;
-            chunk_samples = sc->sample_to_chunk[stsc_index].count;
-            /* get chunk size, beware of alaw/ulaw/mace */
-            if (sc->samples_per_frame > 0 &&
-                (chunk_samples * sc->bytes_per_frame % sc->samples_per_frame == 0)) {
-                if (sc->samples_per_frame < 1024)
-                    chunk_size = chunk_samples * sc->bytes_per_frame / sc->samples_per_frame;
-                else {
-                    chunk_size = sc->bytes_per_frame;
-                    frames = chunk_samples / sc->samples_per_frame;
-                    chunk_samples = sc->samples_per_frame;
-                }
-            } else if (sc->sample_size > 1 || st->codec->bits_per_sample == 8) {
-                chunk_size = chunk_samples * sc->sample_size;
-            } else {
-                av_log(mov->fc, AV_LOG_ERROR, "could not determine chunk size, report problem\n");
-                goto out;
-            }
-            for (j = 0; j < frames; j++) {
-                av_add_index_entry(st, current_offset, current_dts, chunk_size, 0, AVINDEX_KEYFRAME);
-                /* get chunk duration */
-                chunk_duration = 0;
-                while (chunk_samples > 0) {
-                    if (chunk_samples < sc->stts_data[stts_index].count) {
-                        chunk_duration += sc->stts_data[stts_index].duration * chunk_samples;
-                        sc->stts_data[stts_index].count -= chunk_samples;
-                        break;
-                    } else {
-                        chunk_duration += sc->stts_data[stts_index].duration * chunk_samples;
-                        chunk_samples -= sc->stts_data[stts_index].count;
-                        if (stts_index + 1 < sc->stts_count)
-                            stts_index++;
-                    }
-                }
-                current_offset += sc->bytes_per_frame;
-                dprintf(mov->fc, "AVIndex stream %d, chunk %d, offset %"PRIx64", dts %"PRId64", size %d, "
-                        "duration %d\n", st->index, i, current_offset, current_dts, chunk_size, chunk_duration);
-                assert(chunk_duration % sc->time_rate == 0);
-                current_dts += chunk_duration / sc->time_rate;
-            }
-        }
-    }
- out:
-    /* adjust sample count to avindex entries */
-    sc->sample_count = st->nb_index_entries;
-}
-
 static int mov_read_header(AVFormatContext *s, AVFormatParameters *ap)
 {
     MOVContext *mov = s->priv_data;