comparison libmpdemux/demuxer.c @ 10263:0df8816f4665

TiVo demuxer and sub-cc/osd decoder patch by usenet@wingert.org (http://tivo-mplayer.sourceforge.net/releases/MPlayer-20030501-tivo-patch.gz) changes by me: - spit demux_ty to demux_ty and demux_ty_osd (later handles mpeg user-data decoding, ie sub-cc and osd) - removed some cosmetics changes - some compile fixes (gcc3 specific variable decl etc)
author arpi
date Mon, 09 Jun 2003 00:24:49 +0000
parents 75c4595b0ffd
children cd8909001845
comparison
equal deleted inserted replaced
10262:e6f5487b2042 10263:0df8816f4665
135 extern void demux_close_xmms(demuxer_t* demuxer); 135 extern void demux_close_xmms(demuxer_t* demuxer);
136 extern void demux_close_gif(demuxer_t* demuxer); 136 extern void demux_close_gif(demuxer_t* demuxer);
137 extern void demux_close_ts(demuxer_t* demuxer); 137 extern void demux_close_ts(demuxer_t* demuxer);
138 extern void demux_close_mkv(demuxer_t* demuxer); 138 extern void demux_close_mkv(demuxer_t* demuxer);
139 extern void demux_close_ra(demuxer_t* demuxer); 139 extern void demux_close_ra(demuxer_t* demuxer);
140 extern void demux_close_ty(demuxer_t* demuxer);
141
140 142
141 #ifdef USE_TV 143 #ifdef USE_TV
142 #include "tv.h" 144 #include "tv.h"
143 extern int tv_param_on; 145 extern int tv_param_on;
144 146
171 demux_close_bmp(demuxer); break; 173 demux_close_bmp(demuxer); break;
172 case DEMUXER_TYPE_FLI: 174 case DEMUXER_TYPE_FLI:
173 demux_close_fli(demuxer); break; 175 demux_close_fli(demuxer); break;
174 case DEMUXER_TYPE_NUV: 176 case DEMUXER_TYPE_NUV:
175 demux_close_nuv(demuxer); break; 177 demux_close_nuv(demuxer); break;
178 case DEMUXER_TYPE_MPEG_TY:
179 demux_close_ty(demuxer); break;
176 #if defined(USE_TV) && defined(HAVE_TV_V4L) 180 #if defined(USE_TV) && defined(HAVE_TV_V4L)
177 case DEMUXER_TYPE_TV: 181 case DEMUXER_TYPE_TV:
178 demux_close_tv(demuxer); break; 182 demux_close_tv(demuxer); break;
179 #endif 183 #endif
180 #ifdef HAVE_LIBDV095 184 #ifdef HAVE_LIBDV095
276 int demux_film_fill_buffer(demuxer_t *demux); 280 int demux_film_fill_buffer(demuxer_t *demux);
277 int demux_bmp_fill_buffer(demuxer_t *demux); 281 int demux_bmp_fill_buffer(demuxer_t *demux);
278 int demux_fli_fill_buffer(demuxer_t *demux); 282 int demux_fli_fill_buffer(demuxer_t *demux);
279 int demux_mpg_es_fill_buffer(demuxer_t *demux); 283 int demux_mpg_es_fill_buffer(demuxer_t *demux);
280 int demux_mpg_fill_buffer(demuxer_t *demux); 284 int demux_mpg_fill_buffer(demuxer_t *demux);
285 int demux_ty_fill_buffer(demuxer_t *demux);
281 int demux_avi_fill_buffer(demuxer_t *demux); 286 int demux_avi_fill_buffer(demuxer_t *demux);
282 int demux_avi_fill_buffer_ni(demuxer_t *demux,demux_stream_t *ds); 287 int demux_avi_fill_buffer_ni(demuxer_t *demux,demux_stream_t *ds);
283 int demux_avi_fill_buffer_nini(demuxer_t *demux,demux_stream_t *ds); 288 int demux_avi_fill_buffer_nini(demuxer_t *demux,demux_stream_t *ds);
284 int demux_asf_fill_buffer(demuxer_t *demux); 289 int demux_asf_fill_buffer(demuxer_t *demux);
285 int demux_mov_fill_buffer(demuxer_t *demux,demux_stream_t* ds); 290 int demux_mov_fill_buffer(demuxer_t *demux,demux_stream_t* ds);
310 case DEMUXER_TYPE_MF: return demux_mf_fill_buffer(demux); 315 case DEMUXER_TYPE_MF: return demux_mf_fill_buffer(demux);
311 case DEMUXER_TYPE_ROQ: return demux_roq_fill_buffer(demux); 316 case DEMUXER_TYPE_ROQ: return demux_roq_fill_buffer(demux);
312 case DEMUXER_TYPE_FILM: return demux_film_fill_buffer(demux); 317 case DEMUXER_TYPE_FILM: return demux_film_fill_buffer(demux);
313 case DEMUXER_TYPE_BMP: return demux_bmp_fill_buffer(demux); 318 case DEMUXER_TYPE_BMP: return demux_bmp_fill_buffer(demux);
314 case DEMUXER_TYPE_FLI: return demux_fli_fill_buffer(demux); 319 case DEMUXER_TYPE_FLI: return demux_fli_fill_buffer(demux);
320 case DEMUXER_TYPE_MPEG_TY: return demux_ty_fill_buffer( demux );
315 case DEMUXER_TYPE_MPEG4_ES: 321 case DEMUXER_TYPE_MPEG4_ES:
316 case DEMUXER_TYPE_H264_ES: 322 case DEMUXER_TYPE_H264_ES:
317 case DEMUXER_TYPE_MPEG_ES: return demux_mpg_es_fill_buffer(demux); 323 case DEMUXER_TYPE_MPEG_ES: return demux_mpg_es_fill_buffer(demux);
318 case DEMUXER_TYPE_MPEG_PS: return demux_mpg_fill_buffer(demux); 324 case DEMUXER_TYPE_MPEG_PS: return demux_mpg_fill_buffer(demux);
319 case DEMUXER_TYPE_AVI: return demux_avi_fill_buffer(demux); 325 case DEMUXER_TYPE_AVI: return demux_avi_fill_buffer(demux);
878 file_format=DEMUXER_TYPE_MPEG_TS; 884 file_format=DEMUXER_TYPE_MPEG_TS;
879 } else { 885 } else {
880 free_demuxer(demuxer); 886 free_demuxer(demuxer);
881 demuxer=NULL; 887 demuxer=NULL;
882 } 888 }
889 }
890 //=============== Try to open as MPEG-TY file: =================
891 if(file_format==DEMUXER_TYPE_UNKNOWN || file_format==DEMUXER_TYPE_MPEG_TY)
892 {
893 demuxer=new_demuxer(stream,DEMUXER_TYPE_MPEG_TY,audio_id,video_id,dvdsub_id);
894 if(ds_fill_buffer(demuxer->video)){
895 mp_msg(MSGT_DEMUXER,MSGL_INFO,MSGTR_Detected_XXX_FileFormat,"TiVo (DeMuxer By WyngNut)");
896 file_format=DEMUXER_TYPE_MPEG_TY;
897 } else {
898 free_demuxer(demuxer);
899 demuxer = NULL;
900 }
883 } 901 }
884 //=============== Try to open as MPEG-PS file: ================= 902 //=============== Try to open as MPEG-PS file: =================
885 if(file_format==DEMUXER_TYPE_UNKNOWN || file_format==DEMUXER_TYPE_MPEG_PS){ 903 if(file_format==DEMUXER_TYPE_UNKNOWN || file_format==DEMUXER_TYPE_MPEG_PS){
886 int pes=1; 904 int pes=1;
887 int tmp; 905 int tmp;
1185 sh_audio=NULL; // ES streams has no audio channel 1203 sh_audio=NULL; // ES streams has no audio channel
1186 d_video->sh=new_sh_video(demuxer,0); // create dummy video stream header, id=0 1204 d_video->sh=new_sh_video(demuxer,0); // create dummy video stream header, id=0
1187 sh_video=d_video->sh;sh_video->ds=d_video; 1205 sh_video=d_video->sh;sh_video->ds=d_video;
1188 break; 1206 break;
1189 } 1207 }
1190 case DEMUXER_TYPE_MPEG_PS: { 1208
1209 case DEMUXER_TYPE_MPEG_TY: {
1191 sh_video=d_video->sh;sh_video->ds=d_video; 1210 sh_video=d_video->sh;sh_video->ds=d_video;
1192 // if(demuxer->stream->type!=STREAMTYPE_VCD) demuxer->movi_start=0; // for VCD
1193 1211
1194 if(audio_id!=-2) { 1212 if(audio_id!=-2) {
1195 if(!ds_fill_buffer(d_audio)){ 1213 if(!ds_fill_buffer(d_audio)){
1196 mp_msg(MSGT_DEMUXER,MSGL_INFO,"MPEG: " MSGTR_MissingAudioStream); 1214 mp_msg(MSGT_DEMUXER,MSGL_INFO,"MPEG: " MSGTR_MissingAudioStream);
1197 sh_audio=NULL; 1215 sh_audio=NULL;
1205 } 1223 }
1206 } 1224 }
1207 } 1225 }
1208 break; 1226 break;
1209 } 1227 }
1228 case DEMUXER_TYPE_MPEG_PS: {
1229 sh_video=d_video->sh;sh_video->ds=d_video;
1230 // if(demuxer->stream->type!=STREAMTYPE_VCD) demuxer->movi_start=0; // for VCD
1231
1232 if(audio_id!=-2) {
1233 if(!ds_fill_buffer(d_audio)){
1234 mp_msg(MSGT_DEMUXER,MSGL_INFO,"MPEG: " MSGTR_MissingAudioStream);
1235 sh_audio=NULL;
1236 } else {
1237 sh_audio=d_audio->sh;sh_audio->ds=d_audio;
1238 switch(d_audio->id & 0xE0){ // 1110 0000 b (high 3 bit: type low 5: id)
1239 case 0x00: sh_audio->format=0x50;break; // mpeg
1240 case 0xA0: sh_audio->format=0x10001;break; // dvd pcm
1241 case 0x80: sh_audio->format=0x2000;break; // ac3
1242 default: sh_audio=NULL; // unknown type
1243 }
1244 }
1245 }
1246 break;
1247 }
1210 #ifdef USE_TV 1248 #ifdef USE_TV
1211 case DEMUXER_TYPE_TV: { 1249 case DEMUXER_TYPE_TV: {
1212 if (!demux_open_tv(demuxer)) return(NULL); 1250 if (!demux_open_tv(demuxer)) return(NULL);
1213 break; 1251 break;
1214 } 1252 }
1301 } 1339 }
1302 1340
1303 int demux_seek_avi(demuxer_t *demuxer,float rel_seek_secs,int flags); 1341 int demux_seek_avi(demuxer_t *demuxer,float rel_seek_secs,int flags);
1304 int demux_seek_asf(demuxer_t *demuxer,float rel_seek_secs,int flags); 1342 int demux_seek_asf(demuxer_t *demuxer,float rel_seek_secs,int flags);
1305 int demux_seek_mpg(demuxer_t *demuxer,float rel_seek_secs,int flags); 1343 int demux_seek_mpg(demuxer_t *demuxer,float rel_seek_secs,int flags);
1344 int demux_seek_ty(demuxer_t *demuxer,float rel_seek_secs,int flags);
1306 int demux_seek_y4m(demuxer_t *demuxer,float rel_seek_secs,int flags); 1345 int demux_seek_y4m(demuxer_t *demuxer,float rel_seek_secs,int flags);
1307 int demux_seek_fli(demuxer_t *demuxer,float rel_seek_secs,int flags); 1346 int demux_seek_fli(demuxer_t *demuxer,float rel_seek_secs,int flags);
1308 int demux_seek_film(demuxer_t *demuxer,float rel_seek_secs,int flags); 1347 int demux_seek_film(demuxer_t *demuxer,float rel_seek_secs,int flags);
1309 int demux_seek_mf(demuxer_t *demuxer,float rel_seek_secs,int flags); 1348 int demux_seek_mf(demuxer_t *demuxer,float rel_seek_secs,int flags);
1310 int demux_seek_nuv(demuxer_t *demuxer,float rel_seek_secs,int flags); 1349 int demux_seek_nuv(demuxer_t *demuxer,float rel_seek_secs,int flags);
1367 case DEMUXER_TYPE_AVI: 1406 case DEMUXER_TYPE_AVI:
1368 demux_seek_avi(demuxer,rel_seek_secs,flags); break; 1407 demux_seek_avi(demuxer,rel_seek_secs,flags); break;
1369 1408
1370 case DEMUXER_TYPE_ASF: 1409 case DEMUXER_TYPE_ASF:
1371 demux_seek_asf(demuxer,rel_seek_secs,flags); break; 1410 demux_seek_asf(demuxer,rel_seek_secs,flags); break;
1411
1412 case DEMUXER_TYPE_MPEG_TY:
1413 demux_seek_ty(demuxer,rel_seek_secs,flags); break;
1372 1414
1373 case DEMUXER_TYPE_H264_ES: 1415 case DEMUXER_TYPE_H264_ES:
1374 case DEMUXER_TYPE_MPEG4_ES: 1416 case DEMUXER_TYPE_MPEG4_ES:
1375 case DEMUXER_TYPE_MPEG_ES: 1417 case DEMUXER_TYPE_MPEG_ES:
1376 case DEMUXER_TYPE_MPEG_PS: 1418 case DEMUXER_TYPE_MPEG_PS:
1473 } 1515 }
1474 1516
1475 return NULL; 1517 return NULL;
1476 } 1518 }
1477 1519
1520 extern int demux_ty(demuxer_t *demuxer, int cmd, void *arg);
1478 extern int demux_mpg_control(demuxer_t *demuxer, int cmd, void *arg); 1521 extern int demux_mpg_control(demuxer_t *demuxer, int cmd, void *arg);
1479 extern int demux_asf_control(demuxer_t *demuxer, int cmd, void *arg); 1522 extern int demux_asf_control(demuxer_t *demuxer, int cmd, void *arg);
1480 extern int demux_avi_control(demuxer_t *demuxer, int cmd, void *arg); 1523 extern int demux_avi_control(demuxer_t *demuxer, int cmd, void *arg);
1481 extern int demux_xmms_control(demuxer_t *demuxer, int cmd, void *arg); 1524 extern int demux_xmms_control(demuxer_t *demuxer, int cmd, void *arg);
1482 extern int demux_mkv_control(demuxer_t *demuxer, int cmd, void *arg); 1525 extern int demux_mkv_control(demuxer_t *demuxer, int cmd, void *arg);
1483 1526
1484 int demux_control(demuxer_t *demuxer, int cmd, void *arg) { 1527 int demux_control(demuxer_t *demuxer, int cmd, void *arg) {
1485 switch(demuxer->type) { 1528 switch(demuxer->type) {
1529 case DEMUXER_TYPE_MPEG_TY:
1530 return demux_ty_control(demuxer,cmd,arg);
1486 case DEMUXER_TYPE_MPEG4_ES: 1531 case DEMUXER_TYPE_MPEG4_ES:
1487 case DEMUXER_TYPE_MPEG_ES: 1532 case DEMUXER_TYPE_MPEG_ES:
1488 case DEMUXER_TYPE_MPEG_PS: 1533 case DEMUXER_TYPE_MPEG_PS:
1489 return demux_mpg_control(demuxer,cmd,arg); 1534 return demux_mpg_control(demuxer,cmd,arg);
1490 case DEMUXER_TYPE_ASF: 1535 case DEMUXER_TYPE_ASF: