]> git.sesse.net Git - ffmpeg/blobdiff - libavformat/avidec.c
avformat/ffmdec: Add {} to nested if/else
[ffmpeg] / libavformat / avidec.c
index be54b1494d0d3dfda8caa61c4c81df8a90228404..38598107fcc17164f72ddfa6dbe9a181168a8570 100644 (file)
@@ -480,6 +480,7 @@ static int avi_read_header(AVFormatContext *s)
     int avih_width      = 0, avih_height = 0;
     int amv_file_format = 0;
     uint64_t list_end   = 0;
+    int64_t pos;
     int ret;
     AVDictionaryEntry *dict_entry;
 
@@ -930,13 +931,13 @@ static int avi_read_header(AVFormatContext *s)
             }
             break;
         case MKTAG('i', 'n', 'd', 'x'):
-            i = avio_tell(pb);
+            pos = avio_tell(pb);
             if (pb->seekable && !(s->flags & AVFMT_FLAG_IGNIDX) &&
                 avi->use_odml &&
                 read_braindead_odml_indx(s, 0) < 0 &&
                 (s->error_recognition & AV_EF_EXPLODE))
                 goto fail;
-            avio_seek(pb, i + size, SEEK_SET);
+            avio_seek(pb, pos + size, SEEK_SET);
             break;
         case MKTAG('v', 'p', 'r', 'p'):
             if (stream_index < (unsigned)s->nb_streams && size > 9 * 4) {
@@ -1305,6 +1306,75 @@ start_sync:
     return AVERROR_EOF;
 }
 
+static int ni_prepare_read(AVFormatContext *s)
+{
+    AVIContext *avi = s->priv_data;
+    int best_stream_index = 0;
+    AVStream *best_st     = NULL;
+    AVIStream *best_ast;
+    int64_t best_ts = INT64_MAX;
+    int i;
+
+    for (i = 0; i < s->nb_streams; i++) {
+        AVStream *st   = s->streams[i];
+        AVIStream *ast = st->priv_data;
+        int64_t ts     = ast->frame_offset;
+        int64_t last_ts;
+
+        if (!st->nb_index_entries)
+            continue;
+
+        last_ts = st->index_entries[st->nb_index_entries - 1].timestamp;
+        if (!ast->remaining && ts > last_ts)
+            continue;
+
+        ts = av_rescale_q(ts, st->time_base,
+                          (AVRational) { FFMAX(1, ast->sample_size),
+                                         AV_TIME_BASE });
+
+        av_log(s, AV_LOG_TRACE, "%"PRId64" %d/%d %"PRId64"\n", ts,
+                st->time_base.num, st->time_base.den, ast->frame_offset);
+        if (ts < best_ts) {
+            best_ts           = ts;
+            best_st           = st;
+            best_stream_index = i;
+        }
+    }
+    if (!best_st)
+        return AVERROR_EOF;
+
+    best_ast = best_st->priv_data;
+    best_ts  = best_ast->frame_offset;
+    if (best_ast->remaining) {
+        i = av_index_search_timestamp(best_st,
+                                      best_ts,
+                                      AVSEEK_FLAG_ANY |
+                                      AVSEEK_FLAG_BACKWARD);
+    } else {
+        i = av_index_search_timestamp(best_st, best_ts, AVSEEK_FLAG_ANY);
+        if (i >= 0)
+            best_ast->frame_offset = best_st->index_entries[i].timestamp;
+    }
+
+    if (i >= 0) {
+        int64_t pos = best_st->index_entries[i].pos;
+        pos += best_ast->packet_size - best_ast->remaining;
+        if (avio_seek(s->pb, pos + 8, SEEK_SET) < 0)
+          return AVERROR_EOF;
+
+        av_assert0(best_ast->remaining <= best_ast->packet_size);
+
+        avi->stream_index = best_stream_index;
+        if (!best_ast->remaining)
+            best_ast->packet_size =
+            best_ast->remaining   = best_st->index_entries[i].size;
+    }
+    else
+        return AVERROR_EOF;
+
+    return 0;
+}
+
 static int avi_read_packet(AVFormatContext *s, AVPacket *pkt)
 {
     AVIContext *avi = s->priv_data;
@@ -1320,68 +1390,9 @@ static int avi_read_packet(AVFormatContext *s, AVPacket *pkt)
     }
 
     if (avi->non_interleaved) {
-        int best_stream_index = 0;
-        AVStream *best_st     = NULL;
-        AVIStream *best_ast;
-        int64_t best_ts = INT64_MAX;
-        int i;
-
-        for (i = 0; i < s->nb_streams; i++) {
-            AVStream *st   = s->streams[i];
-            AVIStream *ast = st->priv_data;
-            int64_t ts     = ast->frame_offset;
-            int64_t last_ts;
-
-            if (!st->nb_index_entries)
-                continue;
-
-            last_ts = st->index_entries[st->nb_index_entries - 1].timestamp;
-            if (!ast->remaining && ts > last_ts)
-                continue;
-
-            ts = av_rescale_q(ts, st->time_base,
-                              (AVRational) { FFMAX(1, ast->sample_size),
-                                             AV_TIME_BASE });
-
-            av_log(s, AV_LOG_TRACE, "%"PRId64" %d/%d %"PRId64"\n", ts,
-                    st->time_base.num, st->time_base.den, ast->frame_offset);
-            if (ts < best_ts) {
-                best_ts           = ts;
-                best_st           = st;
-                best_stream_index = i;
-            }
-        }
-        if (!best_st)
-            return AVERROR_EOF;
-
-        best_ast = best_st->priv_data;
-        best_ts  = best_ast->frame_offset;
-        if (best_ast->remaining) {
-            i = av_index_search_timestamp(best_st,
-                                          best_ts,
-                                          AVSEEK_FLAG_ANY |
-                                          AVSEEK_FLAG_BACKWARD);
-        } else {
-            i = av_index_search_timestamp(best_st, best_ts, AVSEEK_FLAG_ANY);
-            if (i >= 0)
-                best_ast->frame_offset = best_st->index_entries[i].timestamp;
-        }
-
-        if (i >= 0) {
-            int64_t pos = best_st->index_entries[i].pos;
-            pos += best_ast->packet_size - best_ast->remaining;
-            if (avio_seek(s->pb, pos + 8, SEEK_SET) < 0)
-              return AVERROR_EOF;
-
-            av_assert0(best_ast->remaining <= best_ast->packet_size);
-
-            avi->stream_index = best_stream_index;
-            if (!best_ast->remaining)
-                best_ast->packet_size =
-                best_ast->remaining   = best_st->index_entries[i].size;
-        }
-        else
-          return AVERROR_EOF;
+        err = ni_prepare_read(s);
+        if (err < 0)
+            return err;
     }
 
 resync: