comparison libmpdemux/demuxer.c @ 5133:9841a86d66f9

Initial ogg demuxer. No seeking, a/v sync is broken. Support avi with ogg/vorbis audio.
author albeu
date Sat, 16 Mar 2002 14:32:03 +0000
parents 441f62626ff4
children 1b173932dbbb
comparison
equal deleted inserted replaced
5132:cfccb5dbe992 5133:9841a86d66f9
216 extern int demux_open_tv(demuxer_t *demuxer, tvi_handle_t *tvh); 216 extern int demux_open_tv(demuxer_t *demuxer, tvi_handle_t *tvh);
217 #endif 217 #endif
218 int demux_y4m_fill_buffer(demuxer_t *demux); 218 int demux_y4m_fill_buffer(demuxer_t *demux);
219 int demux_audio_fill_buffer(demux_stream_t *ds); 219 int demux_audio_fill_buffer(demux_stream_t *ds);
220 extern int demux_demuxers_fill_buffer(demuxer_t *demux,demux_stream_t *ds); 220 extern int demux_demuxers_fill_buffer(demuxer_t *demux,demux_stream_t *ds);
221 extern int demux_ogg_fill_buffer(demuxer_t *d);
221 222
222 int demux_fill_buffer(demuxer_t *demux,demux_stream_t *ds){ 223 int demux_fill_buffer(demuxer_t *demux,demux_stream_t *ds){
223 // Note: parameter 'ds' can be NULL! 224 // Note: parameter 'ds' can be NULL!
224 // printf("demux->type=%d\n",demux->type); 225 // printf("demux->type=%d\n",demux->type);
225 switch(demux->type){ 226 switch(demux->type){
241 case DEMUXER_TYPE_TV: return demux_tv_fill_buffer(demux, tv_handler); 242 case DEMUXER_TYPE_TV: return demux_tv_fill_buffer(demux, tv_handler);
242 #endif 243 #endif
243 case DEMUXER_TYPE_Y4M: return demux_y4m_fill_buffer(demux); 244 case DEMUXER_TYPE_Y4M: return demux_y4m_fill_buffer(demux);
244 case DEMUXER_TYPE_AUDIO: return demux_audio_fill_buffer(ds); 245 case DEMUXER_TYPE_AUDIO: return demux_audio_fill_buffer(ds);
245 case DEMUXER_TYPE_DEMUXERS: return demux_demuxers_fill_buffer(demux,ds); 246 case DEMUXER_TYPE_DEMUXERS: return demux_demuxers_fill_buffer(demux,ds);
247 case DEMUXER_TYPE_OGG: return demux_ogg_fill_buffer(demux);
246 } 248 }
247 return 0; 249 return 0;
248 } 250 }
249 251
250 // return value: 252 // return value:
432 extern void demux_open_real(demuxer_t *demuxer); 434 extern void demux_open_real(demuxer_t *demuxer);
433 435
434 extern int nuv_check_file(demuxer_t *demuxer); 436 extern int nuv_check_file(demuxer_t *demuxer);
435 extern void demux_open_nuv(demuxer_t *demuxer); 437 extern void demux_open_nuv(demuxer_t *demuxer);
436 extern int demux_audio_open(demuxer_t* demuxer); 438 extern int demux_audio_open(demuxer_t* demuxer);
439 extern int demux_ogg_open(demuxer_t* demuxer);
440
441 extern demuxer_t* init_avi_with_ogg(demuxer_t* demuxer);
437 442
438 443
439 static demuxer_t* demux_open_stream(stream_t *stream,int file_format,int audio_id,int video_id,int dvdsub_id){ 444 static demuxer_t* demux_open_stream(stream_t *stream,int file_format,int audio_id,int video_id,int dvdsub_id){
440 445
441 //int file_format=(*file_format_ptr); 446 //int file_format=(*file_format_ptr);
586 if(file_format==DEMUXER_TYPE_UNKNOWN || file_format==DEMUXER_TYPE_ROQ){ 591 if(file_format==DEMUXER_TYPE_UNKNOWN || file_format==DEMUXER_TYPE_ROQ){
587 demuxer=new_demuxer(stream,DEMUXER_TYPE_ROQ,audio_id,video_id,dvdsub_id); 592 demuxer=new_demuxer(stream,DEMUXER_TYPE_ROQ,audio_id,video_id,dvdsub_id);
588 if(roq_check_file(demuxer)){ 593 if(roq_check_file(demuxer)){
589 mp_msg(MSGT_DEMUXER,MSGL_INFO,MSGTR_DetectedROQfile); 594 mp_msg(MSGT_DEMUXER,MSGL_INFO,MSGTR_DetectedROQfile);
590 file_format=DEMUXER_TYPE_ROQ; 595 file_format=DEMUXER_TYPE_ROQ;
596 } else {
597 free_demuxer(demuxer);
598 demuxer = NULL;
599 }
600 }
601 //=============== Try to open as Ogg file: =================
602 if(file_format==DEMUXER_TYPE_UNKNOWN || file_format==DEMUXER_TYPE_OGG){
603 demuxer=new_demuxer(stream,DEMUXER_TYPE_OGG,audio_id,video_id,dvdsub_id);
604 if(demux_ogg_open(demuxer)){
605 mp_msg(MSGT_DEMUXER,MSGL_INFO,"Detected OGG format\n");
606 file_format=DEMUXER_TYPE_OGG;
591 } else { 607 } else {
592 free_demuxer(demuxer); 608 free_demuxer(demuxer);
593 demuxer = NULL; 609 demuxer = NULL;
594 } 610 }
595 } 611 }
717 // sh_video=d_video->sh;if(sh_video) sh_video->ds=d_video; 733 // sh_video=d_video->sh;if(sh_video) sh_video->ds=d_video;
718 // sh_audio=d_audio->sh;if(sh_audio) sh_audio->ds=d_audio; 734 // sh_audio=d_audio->sh;if(sh_audio) sh_audio->ds=d_audio;
719 break; 735 break;
720 } 736 }
721 case DEMUXER_TYPE_AVI: { 737 case DEMUXER_TYPE_AVI: {
722 return (demuxer_t*) demux_open_avi(demuxer); 738 sh_audio_t* sh_a;
739 demuxer = (demuxer_t*) demux_open_avi(demuxer);
740 sh_a = (sh_audio_t*)demuxer->audio->sh;
741 if(demuxer->audio->id != -2 && sh_a && sh_a->format == 0xFFFE)
742 demuxer = init_avi_with_ogg(demuxer);
743 return demuxer;
723 // break; 744 // break;
724 } 745 }
725 case DEMUXER_TYPE_NUV: { 746 case DEMUXER_TYPE_NUV: {
726 demux_open_nuv(demuxer); 747 demux_open_nuv(demuxer);
727 break; 748 break;