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