diff avidec.c @ 979:d2e5dfdf4def libavformat

add size to AVIndex
author michael
date Wed, 01 Mar 2006 11:29:55 +0000
parents 8bb9cea3c2d3
children da4296d3bc39
line wrap: on
line diff
--- a/avidec.c	Wed Mar 01 07:42:55 2006 +0000
+++ b/avidec.c	Wed Mar 01 11:29:55 2006 +0000
@@ -55,6 +55,7 @@
 } AVIContext;
 
 static int avi_load_index(AVFormatContext *s);
+static int guess_ni_flag(AVFormatContext *s);
 
 #ifdef DEBUG
 static void print_tag(const char *str, unsigned int tag, int size)
@@ -118,11 +119,13 @@
 
     for(i=0; i<entries_in_use; i++){
         if(index_type){
-            int64_t pos= get_le32(pb) + base;
+            int64_t pos= get_le32(pb) + base - 8;
             int len    = get_le32(pb);
+            int key= len >= 0;
+            len &= 0x7FFFFFFF;
 
-            av_add_index_entry(st, pos, ast->cum_len, 0, (len<0) ? 0 : AVINDEX_KEYFRAME);
-            len &= 0x7FFFFFFF;
+//av_log(s, AV_LOG_ERROR, "pos:%Ld, len:%X\n", pos, len);
+            av_add_index_entry(st, pos, ast->cum_len, len, 0, key ? AVINDEX_KEYFRAME : 0);
 
             if(ast->sample_size)
                 ast->cum_len += len / ast->sample_size;
@@ -412,6 +415,7 @@
     if(!avi->index_loaded)
         avi_load_index(s);
     avi->index_loaded = 1;
+    avi->non_interleaved |= guess_ni_flag(s);
 
     return 0;
 }
@@ -699,7 +703,7 @@
         if(last_pos == pos)
             avi->non_interleaved= 1;
         else
-            av_add_index_entry(st, pos, ast->cum_len, 0, (flags&AVIIF_INDEX) ? AVINDEX_KEYFRAME : 0);
+            av_add_index_entry(st, pos, ast->cum_len, len, 0, (flags&AVIIF_INDEX) ? AVINDEX_KEYFRAME : 0);
         if(ast->sample_size)
             ast->cum_len += len / ast->sample_size;
         else
@@ -768,7 +772,6 @@
         }
     }
  the_end:
-    avi->non_interleaved |= guess_ni_flag(s);
     url_fseek(pb, pos, SEEK_SET);
     return 0;
 }