Mercurial > mplayer.hg
comparison libmpdemux/demuxer.c @ 10024:c6fab860ab18
Added Matroska demuxing support.
author | mosu |
---|---|
date | Wed, 30 Apr 2003 11:39:32 +0000 |
parents | da775a2145de |
children | 4ecb40d73e24 |
comparison
equal
deleted
inserted
replaced
10023:5a06b5774c00 | 10024:c6fab860ab18 |
---|---|
133 extern void demux_close_pva(demuxer_t* demuxer); | 133 extern void demux_close_pva(demuxer_t* demuxer); |
134 extern void demux_close_smjpeg(demuxer_t* demuxer); | 134 extern void demux_close_smjpeg(demuxer_t* demuxer); |
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 | 139 |
139 #ifdef USE_TV | 140 #ifdef USE_TV |
140 #include "tv.h" | 141 #include "tv.h" |
141 extern int tv_param_on; | 142 extern int tv_param_on; |
142 | 143 |
183 demux_close_audio(demuxer); break; | 184 demux_close_audio(demuxer); break; |
184 #ifdef HAVE_OGGVORBIS | 185 #ifdef HAVE_OGGVORBIS |
185 case DEMUXER_TYPE_OGG: | 186 case DEMUXER_TYPE_OGG: |
186 demux_close_ogg(demuxer); break; | 187 demux_close_ogg(demuxer); break; |
187 #endif | 188 #endif |
189 #ifdef HAVE_MATROSKA | |
190 case DEMUXER_TYPE_MATROSKA: | |
191 demux_close_mkv(demuxer); break; | |
192 #endif | |
188 #ifdef STREAMING_LIVE_DOT_COM | 193 #ifdef STREAMING_LIVE_DOT_COM |
189 case DEMUXER_TYPE_RTP: | 194 case DEMUXER_TYPE_RTP: |
190 demux_close_rtp(demuxer); break; | 195 demux_close_rtp(demuxer); break; |
191 #endif | 196 #endif |
192 case DEMUXER_TYPE_SMJPEG: | 197 case DEMUXER_TYPE_SMJPEG: |
290 extern int demux_demuxers_fill_buffer(demuxer_t *demux,demux_stream_t *ds); | 295 extern int demux_demuxers_fill_buffer(demuxer_t *demux,demux_stream_t *ds); |
291 extern int demux_ogg_fill_buffer(demuxer_t *d); | 296 extern int demux_ogg_fill_buffer(demuxer_t *d); |
292 extern int demux_rawaudio_fill_buffer(demuxer_t* demuxer, demux_stream_t *ds); | 297 extern int demux_rawaudio_fill_buffer(demuxer_t* demuxer, demux_stream_t *ds); |
293 extern int demux_rawvideo_fill_buffer(demuxer_t* demuxer, demux_stream_t *ds); | 298 extern int demux_rawvideo_fill_buffer(demuxer_t* demuxer, demux_stream_t *ds); |
294 extern int demux_smjpeg_fill_buffer(demuxer_t* demux); | 299 extern int demux_smjpeg_fill_buffer(demuxer_t* demux); |
300 extern int demux_mkv_fill_buffer(demuxer_t *d); | |
295 | 301 |
296 int demux_fill_buffer(demuxer_t *demux,demux_stream_t *ds){ | 302 int demux_fill_buffer(demuxer_t *demux,demux_stream_t *ds){ |
297 // Note: parameter 'ds' can be NULL! | 303 // Note: parameter 'ds' can be NULL! |
298 // printf("demux->type=%d\n",demux->type); | 304 // printf("demux->type=%d\n",demux->type); |
299 switch(demux->type){ | 305 switch(demux->type){ |
327 case DEMUXER_TYPE_XMMS: return demux_xmms_fill_buffer(demux,ds); | 333 case DEMUXER_TYPE_XMMS: return demux_xmms_fill_buffer(demux,ds); |
328 #endif | 334 #endif |
329 case DEMUXER_TYPE_DEMUXERS: return demux_demuxers_fill_buffer(demux,ds); | 335 case DEMUXER_TYPE_DEMUXERS: return demux_demuxers_fill_buffer(demux,ds); |
330 #ifdef HAVE_OGGVORBIS | 336 #ifdef HAVE_OGGVORBIS |
331 case DEMUXER_TYPE_OGG: return demux_ogg_fill_buffer(demux); | 337 case DEMUXER_TYPE_OGG: return demux_ogg_fill_buffer(demux); |
338 #endif | |
339 #ifdef HAVE_MATROSKA | |
340 case DEMUXER_TYPE_MATROSKA: return demux_mkv_fill_buffer(demux); | |
332 #endif | 341 #endif |
333 case DEMUXER_TYPE_RAWAUDIO: return demux_rawaudio_fill_buffer(demux,ds); | 342 case DEMUXER_TYPE_RAWAUDIO: return demux_rawaudio_fill_buffer(demux,ds); |
334 case DEMUXER_TYPE_RAWVIDEO: return demux_rawvideo_fill_buffer(demux,ds); | 343 case DEMUXER_TYPE_RAWVIDEO: return demux_rawvideo_fill_buffer(demux,ds); |
335 #ifdef STREAMING_LIVE_DOT_COM | 344 #ifdef STREAMING_LIVE_DOT_COM |
336 case DEMUXER_TYPE_RTP: return demux_rtp_fill_buffer(demux, ds); | 345 case DEMUXER_TYPE_RTP: return demux_rtp_fill_buffer(demux, ds); |
572 extern int bmp_check_file(demuxer_t *demuxer); | 581 extern int bmp_check_file(demuxer_t *demuxer); |
573 extern int demux_xmms_open(demuxer_t* demuxer); | 582 extern int demux_xmms_open(demuxer_t* demuxer); |
574 extern int gif_check_file(demuxer_t *demuxer); | 583 extern int gif_check_file(demuxer_t *demuxer); |
575 extern int demux_open_gif(demuxer_t* demuxer); | 584 extern int demux_open_gif(demuxer_t* demuxer); |
576 extern int ts_check_file(demuxer_t * demuxer); | 585 extern int ts_check_file(demuxer_t * demuxer); |
586 extern int demux_open_mkv(demuxer_t *demuxer); | |
577 | 587 |
578 extern demuxer_t* init_avi_with_ogg(demuxer_t* demuxer); | 588 extern demuxer_t* init_avi_with_ogg(demuxer_t* demuxer); |
579 | 589 |
580 int extension_parsing=1; // 0=off 1=mixed (used only for unstable formats) | 590 int extension_parsing=1; // 0=off 1=mixed (used only for unstable formats) |
581 | 591 |
698 } else { | 708 } else { |
699 free_demuxer(demuxer); | 709 free_demuxer(demuxer); |
700 demuxer = NULL; | 710 demuxer = NULL; |
701 } | 711 } |
702 } | 712 } |
713 #ifdef HAVE_MATROSKA | |
714 //=============== Try to open as Matroska file: ================= | |
715 if(file_format==DEMUXER_TYPE_UNKNOWN || file_format==DEMUXER_TYPE_MATROSKA){ | |
716 demuxer=new_demuxer(stream,DEMUXER_TYPE_MATROSKA,audio_id,video_id,dvdsub_id); | |
717 if(demux_mkv_open(demuxer)){ | |
718 mp_msg(MSGT_DEMUXER,MSGL_INFO,MSGTR_Detected_XXX_FileFormat,"Matroska"); | |
719 file_format=DEMUXER_TYPE_MATROSKA; | |
720 } else { | |
721 free_demuxer(demuxer); | |
722 demuxer = NULL; | |
723 } | |
724 } | |
725 #endif | |
703 | 726 |
704 //=============== Try based on filename EXTENSION: ================= | 727 //=============== Try based on filename EXTENSION: ================= |
705 // Ok. We're over the stable detectable fileformats, the next ones are a bit | 728 // Ok. We're over the stable detectable fileformats, the next ones are a bit |
706 // fuzzy. So by default (extension_parsing==1) try extension-based detection | 729 // fuzzy. So by default (extension_parsing==1) try extension-based detection |
707 // first: | 730 // first: |
1275 extern void demux_demuxers_seek(demuxer_t *demuxer,float rel_seek_secs,int flags); | 1298 extern void demux_demuxers_seek(demuxer_t *demuxer,float rel_seek_secs,int flags); |
1276 extern void demux_ogg_seek(demuxer_t *demuxer,float rel_seek_secs,int flags); | 1299 extern void demux_ogg_seek(demuxer_t *demuxer,float rel_seek_secs,int flags); |
1277 extern void demux_rawaudio_seek(demuxer_t *demuxer,float rel_seek_secs,int flags); | 1300 extern void demux_rawaudio_seek(demuxer_t *demuxer,float rel_seek_secs,int flags); |
1278 extern void demux_rawvideo_seek(demuxer_t *demuxer,float rel_seek_secs,int flags); | 1301 extern void demux_rawvideo_seek(demuxer_t *demuxer,float rel_seek_secs,int flags); |
1279 extern void demux_xmms_seek(demuxer_t *demuxer,float rel_seek_secs,int flags); | 1302 extern void demux_xmms_seek(demuxer_t *demuxer,float rel_seek_secs,int flags); |
1303 extern void demux_mkv_seek(demuxer_t *demuxer,float rel_seek_secs,int flags); | |
1280 | 1304 |
1281 int demux_seek(demuxer_t *demuxer,float rel_seek_secs,int flags){ | 1305 int demux_seek(demuxer_t *demuxer,float rel_seek_secs,int flags){ |
1282 demux_stream_t *d_audio=demuxer->audio; | 1306 demux_stream_t *d_audio=demuxer->audio; |
1283 demux_stream_t *d_video=demuxer->video; | 1307 demux_stream_t *d_video=demuxer->video; |
1284 sh_audio_t *sh_audio=d_audio->sh; | 1308 sh_audio_t *sh_audio=d_audio->sh; |
1364 demux_rawvideo_seek(demuxer,rel_seek_secs,flags); break; | 1388 demux_rawvideo_seek(demuxer,rel_seek_secs,flags); break; |
1365 #ifdef HAVE_XMMS | 1389 #ifdef HAVE_XMMS |
1366 case DEMUXER_TYPE_XMMS: | 1390 case DEMUXER_TYPE_XMMS: |
1367 demux_xmms_seek(demuxer,rel_seek_secs,flags); break; | 1391 demux_xmms_seek(demuxer,rel_seek_secs,flags); break; |
1368 #endif | 1392 #endif |
1393 #ifdef HAVE_MATROSKA | |
1394 case DEMUXER_TYPE_MATROSKA: | |
1395 demux_mkv_seek(demuxer,rel_seek_secs,flags); break; | |
1396 #endif | |
1369 case DEMUXER_TYPE_MPEG_TS: | 1397 case DEMUXER_TYPE_MPEG_TS: |
1370 demux_seek_ts(demuxer,rel_seek_secs,flags); break; | 1398 demux_seek_ts(demuxer,rel_seek_secs,flags); break; |
1371 | 1399 |
1372 } // switch(demuxer->file_format) | 1400 } // switch(demuxer->file_format) |
1373 | 1401 |
1426 | 1454 |
1427 extern int demux_mpg_control(demuxer_t *demuxer, int cmd, void *arg); | 1455 extern int demux_mpg_control(demuxer_t *demuxer, int cmd, void *arg); |
1428 extern int demux_asf_control(demuxer_t *demuxer, int cmd, void *arg); | 1456 extern int demux_asf_control(demuxer_t *demuxer, int cmd, void *arg); |
1429 extern int demux_avi_control(demuxer_t *demuxer, int cmd, void *arg); | 1457 extern int demux_avi_control(demuxer_t *demuxer, int cmd, void *arg); |
1430 extern int demux_xmms_control(demuxer_t *demuxer, int cmd, void *arg); | 1458 extern int demux_xmms_control(demuxer_t *demuxer, int cmd, void *arg); |
1459 extern int demux_mkv_control(demuxer_t *demuxer, int cmd, void *arg); | |
1431 | 1460 |
1432 int demux_control(demuxer_t *demuxer, int cmd, void *arg) { | 1461 int demux_control(demuxer_t *demuxer, int cmd, void *arg) { |
1433 switch(demuxer->type) { | 1462 switch(demuxer->type) { |
1434 case DEMUXER_TYPE_MPEG4_ES: | 1463 case DEMUXER_TYPE_MPEG4_ES: |
1435 case DEMUXER_TYPE_MPEG_ES: | 1464 case DEMUXER_TYPE_MPEG_ES: |
1443 return demux_avi_control(demuxer,cmd,arg); | 1472 return demux_avi_control(demuxer,cmd,arg); |
1444 #ifdef HAVE_XMMS | 1473 #ifdef HAVE_XMMS |
1445 case DEMUXER_TYPE_XMMS: | 1474 case DEMUXER_TYPE_XMMS: |
1446 return demux_xmms_control(demuxer,cmd,arg); | 1475 return demux_xmms_control(demuxer,cmd,arg); |
1447 #endif | 1476 #endif |
1477 #ifdef HAVE_MATROSKA | |
1478 case DEMUXER_TYPE_MATROSKA: | |
1479 return demux_mkv_control(demuxer,cmd,arg); | |
1480 #endif | |
1448 default: | 1481 default: |
1449 return DEMUXER_CTRL_NOTIMPL; | 1482 return DEMUXER_CTRL_NOTIMPL; |
1450 } | 1483 } |
1451 } | 1484 } |
1452 | 1485 |