comparison 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
comparison
equal deleted inserted replaced
7363:8acd8cb8fd52 7364:b2445802532c
152 extern void demux_close_ogg(demuxer_t* demuxer); 152 extern void demux_close_ogg(demuxer_t* demuxer);
153 extern void demux_close_rtp(demuxer_t* demuxer); 153 extern void demux_close_rtp(demuxer_t* demuxer);
154 extern void demux_close_demuxers(demuxer_t* demuxer); 154 extern void demux_close_demuxers(demuxer_t* demuxer);
155 extern void demux_close_avi(demuxer_t *demuxer); 155 extern void demux_close_avi(demuxer_t *demuxer);
156 extern void demux_close_rawdv(demuxer_t* demuxer); 156 extern void demux_close_rawdv(demuxer_t* demuxer);
157 extern void demux_close_pva(demuxer_t* demuxer);
157 158
158 #ifdef USE_TV 159 #ifdef USE_TV
159 #include "tv.h" 160 #include "tv.h"
160 extern int tv_param_on; 161 extern int tv_param_on;
161 162
168 169
169 void free_demuxer(demuxer_t *demuxer){ 170 void free_demuxer(demuxer_t *demuxer){
170 int i; 171 int i;
171 mp_msg(MSGT_DEMUXER,MSGL_V,"DEMUXER: freeing demuxer at %p \n",demuxer); 172 mp_msg(MSGT_DEMUXER,MSGL_V,"DEMUXER: freeing demuxer at %p \n",demuxer);
172 switch(demuxer->type) { 173 switch(demuxer->type) {
174 case DEMUXER_TYPE_PVA:
175 demux_close_pva(demuxer); break;
173 case DEMUXER_TYPE_VIVO: 176 case DEMUXER_TYPE_VIVO:
174 demux_close_vivo(demuxer); break; 177 demux_close_vivo(demuxer); break;
175 case DEMUXER_TYPE_REAL: 178 case DEMUXER_TYPE_REAL:
176 demux_close_real(demuxer); break; 179 demux_close_real(demuxer); break;
177 case DEMUXER_TYPE_Y4M: 180 case DEMUXER_TYPE_Y4M:
282 int demux_nuv_fill_buffer(demuxer_t *demux); 285 int demux_nuv_fill_buffer(demuxer_t *demux);
283 int demux_rtp_fill_buffer(demuxer_t *demux, demux_stream_t* ds); 286 int demux_rtp_fill_buffer(demuxer_t *demux, demux_stream_t* ds);
284 int demux_rawdv_fill_buffer(demuxer_t *demuxer); 287 int demux_rawdv_fill_buffer(demuxer_t *demuxer);
285 int demux_y4m_fill_buffer(demuxer_t *demux); 288 int demux_y4m_fill_buffer(demuxer_t *demux);
286 int demux_audio_fill_buffer(demux_stream_t *ds); 289 int demux_audio_fill_buffer(demux_stream_t *ds);
290 int demux_pva_fill_buffer(demuxer_t *demux);
291
287 extern int demux_demuxers_fill_buffer(demuxer_t *demux,demux_stream_t *ds); 292 extern int demux_demuxers_fill_buffer(demuxer_t *demux,demux_stream_t *ds);
288 extern int demux_ogg_fill_buffer(demuxer_t *d); 293 extern int demux_ogg_fill_buffer(demuxer_t *d);
289 extern int demux_rawaudio_fill_buffer(demuxer_t* demuxer, demux_stream_t *ds); 294 extern int demux_rawaudio_fill_buffer(demuxer_t* demuxer, demux_stream_t *ds);
290 295
291 int demux_fill_buffer(demuxer_t *demux,demux_stream_t *ds){ 296 int demux_fill_buffer(demuxer_t *demux,demux_stream_t *ds){
303 case DEMUXER_TYPE_AVI_NI: return demux_avi_fill_buffer_ni(demux,ds); 308 case DEMUXER_TYPE_AVI_NI: return demux_avi_fill_buffer_ni(demux,ds);
304 case DEMUXER_TYPE_AVI_NINI: return demux_avi_fill_buffer_nini(demux,ds); 309 case DEMUXER_TYPE_AVI_NINI: return demux_avi_fill_buffer_nini(demux,ds);
305 case DEMUXER_TYPE_ASF: return demux_asf_fill_buffer(demux); 310 case DEMUXER_TYPE_ASF: return demux_asf_fill_buffer(demux);
306 case DEMUXER_TYPE_MOV: return demux_mov_fill_buffer(demux,ds); 311 case DEMUXER_TYPE_MOV: return demux_mov_fill_buffer(demux,ds);
307 case DEMUXER_TYPE_VIVO: return demux_vivo_fill_buffer(demux); 312 case DEMUXER_TYPE_VIVO: return demux_vivo_fill_buffer(demux);
313 case DEMUXER_TYPE_PVA: return demux_pva_fill_buffer(demux);
308 #ifdef HAVE_LIBDV095 314 #ifdef HAVE_LIBDV095
309 case DEMUXER_TYPE_RAWDV: return demux_rawdv_fill_buffer(demux); 315 case DEMUXER_TYPE_RAWDV: return demux_rawdv_fill_buffer(demux);
310 #endif 316 #endif
311 case DEMUXER_TYPE_REAL: return demux_real_fill_buffer(demux); 317 case DEMUXER_TYPE_REAL: return demux_real_fill_buffer(demux);
312 case DEMUXER_TYPE_NUV: return demux_nuv_fill_buffer(demux); 318 case DEMUXER_TYPE_NUV: return demux_nuv_fill_buffer(demux);
530 extern int vivo_check_file(demuxer_t *demuxer); 536 extern int vivo_check_file(demuxer_t *demuxer);
531 extern void demux_open_vivo(demuxer_t *demuxer); 537 extern void demux_open_vivo(demuxer_t *demuxer);
532 extern int y4m_check_file(demuxer_t *demuxer); 538 extern int y4m_check_file(demuxer_t *demuxer);
533 extern void demux_open_y4m(demuxer_t *demuxer); 539 extern void demux_open_y4m(demuxer_t *demuxer);
534 extern int roq_check_file(demuxer_t *demuxer); 540 extern int roq_check_file(demuxer_t *demuxer);
535 541 extern int pva_check_file(demuxer_t * demuxer);
536 extern int real_check_file(demuxer_t *demuxer); 542 extern int real_check_file(demuxer_t *demuxer);
537 extern void demux_open_real(demuxer_t *demuxer); 543 extern void demux_open_real(demuxer_t *demuxer);
538
539 extern int nuv_check_file(demuxer_t *demuxer); 544 extern int nuv_check_file(demuxer_t *demuxer);
540 extern void demux_open_nuv(demuxer_t *demuxer); 545 extern void demux_open_nuv(demuxer_t *demuxer);
541 extern int demux_audio_open(demuxer_t* demuxer); 546 extern int demux_audio_open(demuxer_t* demuxer);
542 extern int demux_ogg_open(demuxer_t* demuxer); 547 extern int demux_ogg_open(demuxer_t* demuxer);
543 extern int demux_rawaudio_open(demuxer_t* demuxer); 548 extern int demux_rawaudio_open(demuxer_t* demuxer);
737 file_format=DEMUXER_TYPE_OGG; 742 file_format=DEMUXER_TYPE_OGG;
738 } else { 743 } else {
739 free_demuxer(demuxer); 744 free_demuxer(demuxer);
740 demuxer = NULL; 745 demuxer = NULL;
741 } 746 }
747 }
748 //=============== Try to open as PVA file: =================
749 if(file_format == DEMUXER_TYPE_UNKNOWN || file_format==DEMUXER_TYPE_PVA){
750 demuxer=new_demuxer(stream,DEMUXER_TYPE_PVA,audio_id,video_id,dvdsub_id);
751 if(pva_check_file(demuxer)) {
752 mp_msg(MSGT_DEMUXER,MSGL_INFO,"Detected PVA file...\n");
753 file_format=DEMUXER_TYPE_PVA;
754 } else {
755 free_demuxer(demuxer);
756 demuxer=NULL;
757 }
742 } 758 }
743 //=============== Try to open as MPEG-PS file: ================= 759 //=============== Try to open as MPEG-PS file: =================
744 if(file_format==DEMUXER_TYPE_UNKNOWN || file_format==DEMUXER_TYPE_MPEG_PS){ 760 if(file_format==DEMUXER_TYPE_UNKNOWN || file_format==DEMUXER_TYPE_MPEG_PS){
745 int pes=1; 761 int pes=1;
746 int tmp; 762 int tmp;
919 } 935 }
920 case DEMUXER_TYPE_VIVO: { 936 case DEMUXER_TYPE_VIVO: {
921 demux_open_vivo(demuxer); 937 demux_open_vivo(demuxer);
922 break; 938 break;
923 } 939 }
940 case DEMUXER_TYPE_PVA: {
941 demux_open_pva(demuxer);
942 break;
943 }
924 case DEMUXER_TYPE_Y4M: { 944 case DEMUXER_TYPE_Y4M: {
925 demux_open_y4m(demuxer); 945 demux_open_y4m(demuxer);
926 break; 946 break;
927 } 947 }
928 case DEMUXER_TYPE_REAL: { 948 case DEMUXER_TYPE_REAL: {
1067 int demux_seek_film(demuxer_t *demuxer,float rel_seek_secs,int flags); 1087 int demux_seek_film(demuxer_t *demuxer,float rel_seek_secs,int flags);
1068 int demux_seek_mf(demuxer_t *demuxer,float rel_seek_secs,int flags); 1088 int demux_seek_mf(demuxer_t *demuxer,float rel_seek_secs,int flags);
1069 int demux_seek_nuv(demuxer_t *demuxer,float rel_seek_secs,int flags); 1089 int demux_seek_nuv(demuxer_t *demuxer,float rel_seek_secs,int flags);
1070 void demux_seek_mov(demuxer_t *demuxer,float pts,int flags); 1090 void demux_seek_mov(demuxer_t *demuxer,float pts,int flags);
1071 int demux_seek_real(demuxer_t *demuxer,float rel_seek_secs,int flags); 1091 int demux_seek_real(demuxer_t *demuxer,float rel_seek_secs,int flags);
1092 int demux_seek_pva(demuxer_t *demuxer,float rel_seek_secs,int flags);
1093
1072 #ifdef HAVE_LIBDV095 1094 #ifdef HAVE_LIBDV095
1073 int demux_seek_rawdv(demuxer_t *demuxer, float pts, int flags); 1095 int demux_seek_rawdv(demuxer_t *demuxer, float pts, int flags);
1074 #endif 1096 #endif
1075 1097
1076 extern void demux_audio_seek(demuxer_t *demuxer,float rel_seek_secs,int flags); 1098 extern void demux_audio_seek(demuxer_t *demuxer,float rel_seek_secs,int flags);
1138 case DEMUXER_TYPE_Y4M: 1160 case DEMUXER_TYPE_Y4M:
1139 demux_seek_y4m(demuxer,rel_seek_secs,flags); break; 1161 demux_seek_y4m(demuxer,rel_seek_secs,flags); break;
1140 1162
1141 case DEMUXER_TYPE_MF: 1163 case DEMUXER_TYPE_MF:
1142 demux_seek_mf(demuxer,rel_seek_secs,flags); break; 1164 demux_seek_mf(demuxer,rel_seek_secs,flags); break;
1165
1166 case DEMUXER_TYPE_PVA:
1167 demux_seek_pva(demuxer,rel_seek_secs,flags); break;
1143 1168
1144 case DEMUXER_TYPE_FLI: 1169 case DEMUXER_TYPE_FLI:
1145 demux_seek_fli(demuxer,rel_seek_secs,flags); break; 1170 demux_seek_fli(demuxer,rel_seek_secs,flags); break;
1146 case DEMUXER_TYPE_FILM: 1171 case DEMUXER_TYPE_FILM:
1147 demux_seek_film(demuxer,rel_seek_secs,flags); break; 1172 demux_seek_film(demuxer,rel_seek_secs,flags); break;