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