Index: libavformat/avidec.c
===================================================================
--- libavformat/avidec.c	(revision 19698)
+++ libavformat/avidec.c	(working copy)
@@ -19,8 +19,8 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
-//#define DEBUG
-//#define DEBUG_SEEK
+#define DEBUG
+#define DEBUG_SEEK
 
 #include "libavutil/intreadwrite.h"
 #include "libavutil/bswap.h"
@@ -78,7 +78,7 @@
 #ifdef DEBUG
 static void print_tag(const char *str, unsigned int tag, int size)
 {
-    dprintf(NULL, "%s: tag=%c%c%c%c size=0x%x\n",
+    av_log(NULL, AV_LOG_ERROR, "%s: tag=%c%c%c%c size=0x%x\n",
            str, tag & 0xff,
            (tag >> 8) & 0xff,
            (tag >> 16) & 0xff,
@@ -170,6 +170,7 @@
 
             if(last_pos == pos || pos == base - 8)
                 avi->non_interleaved= 1;
+av_log(s, AV_LOG_ERROR, "(1) avi->non_interleaved=%d\n", avi->non_interleaved);
             if(last_pos != pos)
                 av_add_index_entry(st, pos, ast->cum_len / FFMAX(1, ast->sample_size), len, 0, key ? AVINDEX_KEYFRAME : 0);
 
@@ -205,6 +206,7 @@
     int i;
     int64_t j;
 
+av_log(s, AV_LOG_ERROR, "clean_index()/n");
     for(i=0; i<s->nb_streams; i++){
         AVStream *st = s->streams[i];
         AVIStream *ast = st->priv_data;
@@ -304,7 +306,9 @@
             frame_period = get_le32(pb);
             bit_rate = get_le32(pb) * 8;
             get_le32(pb);
+av_log(s, AV_LOG_ERROR, "(2-pre) avi->non_interleaved=%d\n", avi->non_interleaved);
             avi->non_interleaved |= get_le32(pb) & AVIF_MUSTUSEINDEX;
+av_log(s, AV_LOG_ERROR, "(2) avi->non_interleaved=%d\n", avi->non_interleaved);
 
             url_fskip(pb, 2 * 4);
             get_le32(pb);
@@ -636,6 +640,7 @@
         avi_load_index(s);
     avi->index_loaded = 1;
     avi->non_interleaved |= guess_ni_flag(s);
+av_log(s, AV_LOG_ERROR, "(3) avi->non_interleaved=%d\n", avi->non_interleaved);
     if(avi->non_interleaved) {
         av_log(s, AV_LOG_INFO, "non-interleaved AVI\n");
         clean_index(s);
@@ -662,19 +667,24 @@
     int64_t i, sync;
     void* dstr;
 
+av_log(s, AV_LOG_ERROR, "\n");
+av_log(s, AV_LOG_ERROR, "avi_read_packet(), avi->non_interleaved=%d, avi->stream_index=%d\n", avi->non_interleaved, avi->stream_index);
+
     if (CONFIG_DV_DEMUXER && avi->dv_demux) {
         int size = dv_get_packet(avi->dv_demux, pkt);
         if (size >= 0)
             return size;
     }
 
-    if(avi->non_interleaved){
+    if((avi->non_interleaved) && (avi->stream_index < 0)){
         int best_stream_index = 0;
         AVStream *best_st= NULL;
         AVIStream *best_ast;
         int64_t best_ts= INT64_MAX;
         int i;
 
+//av_log(s, AV_LOG_ERROR, "(2) avi_read_packet(), avi->non_interleaved=%d\n", avi->non_interleaved);
+
         for(i=0; i<s->nb_streams; i++){
             AVStream *st = s->streams[i];
             AVIStream *ast = st->priv_data;
@@ -684,18 +694,21 @@
                 ts /= ast->sample_size;
             ts = av_rescale_q(ts, st->time_base, AV_TIME_BASE_Q);
 
-//            av_log(s, AV_LOG_DEBUG, "%"PRId64" %d/%d %"PRId64"\n", ts, st->time_base.num, st->time_base.den, ast->frame_offset);
+av_log(s, AV_LOG_ERROR, "avi_read_packet(): i=%d, ts=%"PRId64" st->time_base=%d/%d, ast->frame_offset=%"PRId64", st->nb_index_entries=%d, ast->sample_size=%d\n", i, ts, st->time_base.num, st->time_base.den, ast->frame_offset, st->nb_index_entries, ast->sample_size);
             if(ts < best_ts && st->nb_index_entries){
                 best_ts= ts;
                 best_st= st;
                 best_stream_index= i;
             }
         }
+av_log(s, AV_LOG_ERROR, "avi_read_packet(): best_stream_index=%d, best_ts=%"PRId64"\n", best_stream_index, best_ts);
         if(!best_st)
             return -1;
 
+
         best_ast = best_st->priv_data;
         best_ts = av_rescale_q(best_ts, AV_TIME_BASE_Q, best_st->time_base);
+av_log(s, AV_LOG_ERROR, "avi_read_packet(): best_ast->remaining=%d\n", best_ast->remaining);
         if(best_ast->remaining)
             i= av_index_search_timestamp(best_st, best_ts, AVSEEK_FLAG_ANY | AVSEEK_FLAG_BACKWARD);
         else{
@@ -704,6 +717,7 @@
                 best_ast->frame_offset= best_st->index_entries[i].timestamp
                                       * FFMAX(1, best_ast->sample_size);
         }
+av_log(s, AV_LOG_ERROR, "avi_read_packet(): i=%d, best_ast->frame_offset=%"PRId64"\n", i, best_ast->frame_offset);
 
 //        av_log(s, AV_LOG_DEBUG, "%d\n", i);
         if(i>=0){
@@ -718,10 +732,12 @@
             if(!best_ast->remaining)
                 best_ast->packet_size=
                 best_ast->remaining= best_st->index_entries[i].size;
+av_log(s, AV_LOG_ERROR, "avi_read_packet(): best_ast->packet_size=best_ast->remaining=%d\n", best_ast->remaining);
         }
     }
 
 resync:
+av_log(s, AV_LOG_ERROR, "avi_read_packet(): resync:\n");
     if(avi->stream_index >= 0){
         AVStream *st= s->streams[ avi->stream_index ];
         AVIStream *ast= st->priv_data;
@@ -764,7 +780,7 @@
 //                pkt->dts += ast->start;
             if(ast->sample_size)
                 pkt->dts /= ast->sample_size;
-//av_log(s, AV_LOG_DEBUG, "dts:%"PRId64" offset:%"PRId64" %d/%d smpl_siz:%d base:%d st:%d size:%d\n", pkt->dts, ast->frame_offset, ast->scale, ast->rate, ast->sample_size, AV_TIME_BASE, avi->stream_index, size);
+av_log(s, AV_LOG_ERROR, "dts:%"PRId64" offset:%"PRId64" %d/%d smpl_siz:%d base:%d st:%d size:%d\n", pkt->dts, ast->frame_offset, ast->scale, ast->rate, ast->sample_size, AV_TIME_BASE, avi->stream_index, size);
             pkt->stream_index = avi->stream_index;
 
             if (st->codec->codec_type == CODEC_TYPE_VIDEO) {
@@ -793,6 +809,7 @@
             ast->packet_size= 0;
         }
 
+av_log(s, AV_LOG_ERROR, "size=%d. ast->remaining=%d\n", size, ast->remaining);
         return size;
     }
 
@@ -807,7 +824,7 @@
         size= d[4] + (d[5]<<8) + (d[6]<<16) + (d[7]<<24);
 
         n= get_stream_idx(d+2);
-//av_log(s, AV_LOG_DEBUG, "%X %X %X %X %X %X %X %X %"PRId64" %d %d\n", d[0], d[1], d[2], d[3], d[4], d[5], d[6], d[7], i, size, n);
+av_log(s, AV_LOG_ERROR, "%X %X %X %X %X %X %X %X i=%"PRId64" size=%d n=%d\n", d[0], d[1], d[2], d[3], d[4], d[5], d[6], d[7], i, size, n);
         if(i + (uint64_t)size > avi->fsize || d[0]<0)
             continue;
 
@@ -817,7 +834,7 @@
            ||(d[0] == 'J' && d[1] == 'U' && d[2] == 'N' && d[3] == 'K')
            ||(d[0] == 'i' && d[1] == 'd' && d[2] == 'x' && d[3] == '1')){
             url_fskip(pb, size);
-//av_log(s, AV_LOG_DEBUG, "SKIP\n");
+av_log(s, AV_LOG_ERROR, "SKIP\n");
             goto resync;
         }
 
@@ -887,6 +904,7 @@
                 avi->stream_index= n;
                 ast->packet_size= size + 8;
                 ast->remaining= size;
+av_log(s, AV_LOG_ERROR, "ast->remaining=size=%d\n", ast->remaining);
 
                 {
                     uint64_t pos= url_ftell(pb) - 8;
@@ -914,6 +932,8 @@
     unsigned int index, tag, flags, pos, len;
     unsigned last_pos= -1;
 
+av_log(s, AV_LOG_ERROR, "avi_read_idx1()/n");
+
     nb_index_entries = size / 16;
     if (nb_index_entries <= 0)
         return -1;
@@ -949,6 +969,7 @@
             avi->non_interleaved= 1;
         else
             av_add_index_entry(st, pos, ast->cum_len / FFMAX(1, ast->sample_size), len, 0, (flags&AVIIF_INDEX) ? AVINDEX_KEYFRAME : 0);
+av_log(s, AV_LOG_ERROR, "(4) avi->non_interleaved=%d\n", avi->non_interleaved);
         if(ast->sample_size)
             ast->cum_len += len;
         else
@@ -996,9 +1017,11 @@
     uint32_t tag, size;
     int64_t pos= url_ftell(pb);
 
+av_log(s, AV_LOG_ERROR, "avi_load_index()\n");
+
     url_fseek(pb, avi->movi_end, SEEK_SET);
 #ifdef DEBUG_SEEK
-    printf("movi_end=0x%"PRIx64"\n", avi->movi_end);
+    av_log(s, AV_LOG_DEBUG, "movi_end=0x%"PRIx64"\n", avi->movi_end);
 #endif
     for(;;) {
         if (url_feof(pb))
@@ -1006,7 +1029,7 @@
         tag = get_le32(pb);
         size = get_le32(pb);
 #ifdef DEBUG_SEEK
-        printf("tag=%c%c%c%c size=0x%x\n",
+        av_log(s, AV_LOG_DEBUG, "tag=%c%c%c%c size=0x%x\n",
                tag & 0xff,
                (tag >> 8) & 0xff,
                (tag >> 16) & 0xff,
@@ -1055,7 +1078,7 @@
     pos = st->index_entries[index].pos;
     timestamp = st->index_entries[index].timestamp;
 
-//    av_log(s, AV_LOG_DEBUG, "XX %"PRId64" %d %"PRId64"\n", timestamp, index, st->index_entries[index].timestamp);
+    av_log(s, AV_LOG_DEBUG, "XX %"PRId64" %d %"PRId64"\n", timestamp, index, st->index_entries[index].timestamp);
 
     if (CONFIG_DV_DEMUXER && avi->dv_demux) {
         /* One and only one real stream for DV in AVI, and it has video  */
Index: libavformat/utils.c
===================================================================
--- libavformat/utils.c	(revision 19698)
+++ libavformat/utils.c	(working copy)
@@ -1200,6 +1200,8 @@
     AVIndexEntry *entries, *ie;
     int index;
 
+av_log(NULL, AV_LOG_ERROR, "av_add_index_entry()\n");
+
     if((unsigned)st->nb_index_entries + 1 >= UINT_MAX / sizeof(AVIndexEntry))
         return -1;
 
