diff demux_avi.c @ 426:26e513f392b2

new stream selection code
author arpi_esp
date Sun, 15 Apr 2001 03:40:37 +0000
parents da98e96499bb
children 8511095c5283
line wrap: on
line diff
--- a/demux_avi.c	Sat Apr 14 22:51:56 2001 +0000
+++ b/demux_avi.c	Sun Apr 15 03:40:37 2001 +0000
@@ -17,8 +17,32 @@
 // Select ds from ID
 static inline demux_stream_t* demux_avi_select_stream(demuxer_t *demux,unsigned int id){
   int stream_id=avi_stream_id(id);
-  if(stream_id==demux->audio->id) return demux->audio;
-  if(stream_id==demux->video->id) return demux->video;
+
+//  printf("demux_avi_select_stream(%d)  {a:%d/v:%d}\n",stream_id,
+//       demux->audio->id,demux->video->id);
+
+  if(demux->video->id==-1)
+    if(avi_header.v_streams[stream_id])
+        demux->video->id=stream_id;
+
+  if(demux->audio->id==-1)
+    if(avi_header.a_streams[stream_id])
+        demux->audio->id=stream_id;
+
+  if(stream_id==demux->audio->id){
+      if(!demux->audio->sh){
+        demux->audio->sh=avi_header.a_streams[stream_id];
+        if(verbose) printf("Auto-selected AVI audio ID = %d\n",demux->audio->id);
+      }
+      return demux->audio;
+  }
+  if(stream_id==demux->video->id){
+      if(!demux->video->sh){
+        demux->video->sh=avi_header.v_streams[stream_id];
+        if(verbose) printf("Auto-selected AVI video ID = %d\n",demux->video->id);
+      }
+      return demux->video;
+  }
   if(id!=mmioFOURCC('J','U','N','K')){
      // unknown
      if(verbose>=2) printf("Unknown chunk: %.4s (%X)\n",&id,id);