diff libmpdemux/demuxer.c @ 5133:9841a86d66f9

Initial ogg demuxer. No seeking, a/v sync is broken. Support avi with ogg/vorbis audio.
author albeu
date Sat, 16 Mar 2002 14:32:03 +0000
parents 441f62626ff4
children 1b173932dbbb
line wrap: on
line diff
--- a/libmpdemux/demuxer.c	Sat Mar 16 06:01:13 2002 +0000
+++ b/libmpdemux/demuxer.c	Sat Mar 16 14:32:03 2002 +0000
@@ -218,6 +218,7 @@
 int demux_y4m_fill_buffer(demuxer_t *demux);
 int demux_audio_fill_buffer(demux_stream_t *ds);
 extern int demux_demuxers_fill_buffer(demuxer_t *demux,demux_stream_t *ds);
+extern int demux_ogg_fill_buffer(demuxer_t *d);
 
 int demux_fill_buffer(demuxer_t *demux,demux_stream_t *ds){
   // Note: parameter 'ds' can be NULL!
@@ -243,6 +244,7 @@
     case DEMUXER_TYPE_Y4M: return demux_y4m_fill_buffer(demux);
     case DEMUXER_TYPE_AUDIO: return demux_audio_fill_buffer(ds);
     case DEMUXER_TYPE_DEMUXERS: return demux_demuxers_fill_buffer(demux,ds);
+    case DEMUXER_TYPE_OGG: return demux_ogg_fill_buffer(demux);
   }
   return 0;
 }
@@ -434,6 +436,9 @@
 extern int nuv_check_file(demuxer_t *demuxer);
 extern void demux_open_nuv(demuxer_t *demuxer);
 extern int demux_audio_open(demuxer_t* demuxer);
+extern int demux_ogg_open(demuxer_t* demuxer);
+
+extern demuxer_t* init_avi_with_ogg(demuxer_t* demuxer);
 
 
 static demuxer_t* demux_open_stream(stream_t *stream,int file_format,int audio_id,int video_id,int dvdsub_id){
@@ -593,6 +598,17 @@
       demuxer = NULL;
   }
 }
+//=============== Try to open as Ogg file: =================
+if(file_format==DEMUXER_TYPE_UNKNOWN || file_format==DEMUXER_TYPE_OGG){
+  demuxer=new_demuxer(stream,DEMUXER_TYPE_OGG,audio_id,video_id,dvdsub_id);
+  if(demux_ogg_open(demuxer)){
+      mp_msg(MSGT_DEMUXER,MSGL_INFO,"Detected OGG format\n");
+      file_format=DEMUXER_TYPE_OGG;
+  } else {
+      free_demuxer(demuxer);
+      demuxer = NULL;
+  }
+}
 //=============== Try to open as MPEG-PS file: =================
 if(file_format==DEMUXER_TYPE_UNKNOWN || file_format==DEMUXER_TYPE_MPEG_PS){
  int pes=1;
@@ -719,7 +735,12 @@
   break;
  }
  case DEMUXER_TYPE_AVI: {
-  return (demuxer_t*) demux_open_avi(demuxer);
+   sh_audio_t* sh_a;
+   demuxer = (demuxer_t*) demux_open_avi(demuxer);
+   sh_a = (sh_audio_t*)demuxer->audio->sh;
+   if(demuxer->audio->id != -2 && sh_a && sh_a->format == 0xFFFE)
+     demuxer = init_avi_with_ogg(demuxer);
+   return demuxer;
 //  break;
  }
  case DEMUXER_TYPE_NUV: {