diff libmpdemux/demuxer.c @ 7364:b2445802532c

.PVA (mpeg-like fileformat used by MultiDec && WinTV) demuxer slightly modified patch, original by Matteo Giani <matgiani@ctonet.it>
author arpi
date Tue, 10 Sep 2002 21:50:03 +0000
parents 9129781e5939
children 89cbab549659
line wrap: on
line diff
--- a/libmpdemux/demuxer.c	Tue Sep 10 21:36:28 2002 +0000
+++ b/libmpdemux/demuxer.c	Tue Sep 10 21:50:03 2002 +0000
@@ -154,6 +154,7 @@
 extern void demux_close_demuxers(demuxer_t* demuxer);
 extern void demux_close_avi(demuxer_t *demuxer);
 extern void demux_close_rawdv(demuxer_t* demuxer);
+extern void demux_close_pva(demuxer_t* demuxer);
 
 #ifdef USE_TV
 #include "tv.h"
@@ -170,6 +171,8 @@
     int i;
     mp_msg(MSGT_DEMUXER,MSGL_V,"DEMUXER: freeing demuxer at %p  \n",demuxer);
     switch(demuxer->type) {
+    case DEMUXER_TYPE_PVA:
+      demux_close_pva(demuxer); break;
     case DEMUXER_TYPE_VIVO:
       demux_close_vivo(demuxer); break;
     case DEMUXER_TYPE_REAL:
@@ -284,6 +287,8 @@
 int demux_rawdv_fill_buffer(demuxer_t *demuxer);
 int demux_y4m_fill_buffer(demuxer_t *demux);
 int demux_audio_fill_buffer(demux_stream_t *ds);
+int demux_pva_fill_buffer(demuxer_t *demux);
+
 extern int demux_demuxers_fill_buffer(demuxer_t *demux,demux_stream_t *ds);
 extern int demux_ogg_fill_buffer(demuxer_t *d);
 extern int demux_rawaudio_fill_buffer(demuxer_t* demuxer, demux_stream_t *ds);
@@ -305,6 +310,7 @@
     case DEMUXER_TYPE_ASF: return demux_asf_fill_buffer(demux);
     case DEMUXER_TYPE_MOV: return demux_mov_fill_buffer(demux,ds);
     case DEMUXER_TYPE_VIVO: return demux_vivo_fill_buffer(demux);
+    case DEMUXER_TYPE_PVA: return demux_pva_fill_buffer(demux);
 #ifdef HAVE_LIBDV095
     case DEMUXER_TYPE_RAWDV: return demux_rawdv_fill_buffer(demux);
 #endif
@@ -532,10 +538,9 @@
 extern int y4m_check_file(demuxer_t *demuxer);
 extern void demux_open_y4m(demuxer_t *demuxer);
 extern int roq_check_file(demuxer_t *demuxer);
-
+extern int pva_check_file(demuxer_t * demuxer);
 extern int real_check_file(demuxer_t *demuxer);
 extern void demux_open_real(demuxer_t *demuxer);
-
 extern int nuv_check_file(demuxer_t *demuxer);
 extern void demux_open_nuv(demuxer_t *demuxer);
 extern int demux_audio_open(demuxer_t* demuxer);
@@ -740,6 +745,17 @@
       demuxer = NULL;
   }
 }
+//=============== Try to open as PVA file: =================
+if(file_format == DEMUXER_TYPE_UNKNOWN || file_format==DEMUXER_TYPE_PVA){
+	demuxer=new_demuxer(stream,DEMUXER_TYPE_PVA,audio_id,video_id,dvdsub_id);
+	if(pva_check_file(demuxer)) {
+		mp_msg(MSGT_DEMUXER,MSGL_INFO,"Detected PVA file...\n");
+		file_format=DEMUXER_TYPE_PVA;
+	} 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;
@@ -921,6 +937,10 @@
   demux_open_vivo(demuxer);
   break;
  }
+ case DEMUXER_TYPE_PVA: {
+  demux_open_pva(demuxer);
+  break;
+ }
  case DEMUXER_TYPE_Y4M: {
   demux_open_y4m(demuxer);
   break;
@@ -1069,6 +1089,8 @@
 int demux_seek_nuv(demuxer_t *demuxer,float rel_seek_secs,int flags);
 void demux_seek_mov(demuxer_t *demuxer,float pts,int flags);
 int demux_seek_real(demuxer_t *demuxer,float rel_seek_secs,int flags);
+int demux_seek_pva(demuxer_t *demuxer,float rel_seek_secs,int flags);
+
 #ifdef HAVE_LIBDV095
 int demux_seek_rawdv(demuxer_t *demuxer, float pts, int flags);
 #endif
@@ -1140,6 +1162,9 @@
 
   case DEMUXER_TYPE_MF:
       demux_seek_mf(demuxer,rel_seek_secs,flags);  break;
+
+  case DEMUXER_TYPE_PVA:
+      demux_seek_pva(demuxer,rel_seek_secs,flags); break;
       
   case DEMUXER_TYPE_FLI:
       demux_seek_fli(demuxer,rel_seek_secs,flags);  break;