Mercurial > mplayer.hg
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: |