Mercurial > mplayer.hg
diff 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 |
line wrap: on
line diff
--- a/libmpdemux/demuxer.c Sat Mar 16 06:01:13 2002 +0000 +++ b/libmpdemux/demuxer.c Sat Mar 16 14:32:03 2002 +0000 @@ -218,6 +218,7 @@ int demux_y4m_fill_buffer(demuxer_t *demux); int demux_audio_fill_buffer(demux_stream_t *ds); extern int demux_demuxers_fill_buffer(demuxer_t *demux,demux_stream_t *ds); +extern int demux_ogg_fill_buffer(demuxer_t *d); int demux_fill_buffer(demuxer_t *demux,demux_stream_t *ds){ // Note: parameter 'ds' can be NULL! @@ -243,6 +244,7 @@ case DEMUXER_TYPE_Y4M: return demux_y4m_fill_buffer(demux); case DEMUXER_TYPE_AUDIO: return demux_audio_fill_buffer(ds); case DEMUXER_TYPE_DEMUXERS: return demux_demuxers_fill_buffer(demux,ds); + case DEMUXER_TYPE_OGG: return demux_ogg_fill_buffer(demux); } return 0; } @@ -434,6 +436,9 @@ extern int nuv_check_file(demuxer_t *demuxer); extern void demux_open_nuv(demuxer_t *demuxer); extern int demux_audio_open(demuxer_t* demuxer); +extern int demux_ogg_open(demuxer_t* demuxer); + +extern demuxer_t* init_avi_with_ogg(demuxer_t* demuxer); static demuxer_t* demux_open_stream(stream_t *stream,int file_format,int audio_id,int video_id,int dvdsub_id){ @@ -593,6 +598,17 @@ demuxer = NULL; } } +//=============== Try to open as Ogg file: ================= +if(file_format==DEMUXER_TYPE_UNKNOWN || file_format==DEMUXER_TYPE_OGG){ + demuxer=new_demuxer(stream,DEMUXER_TYPE_OGG,audio_id,video_id,dvdsub_id); + if(demux_ogg_open(demuxer)){ + mp_msg(MSGT_DEMUXER,MSGL_INFO,"Detected OGG format\n"); + file_format=DEMUXER_TYPE_OGG; + } else { + free_demuxer(demuxer); + demuxer = NULL; + } +} //=============== Try to open as MPEG-PS file: ================= if(file_format==DEMUXER_TYPE_UNKNOWN || file_format==DEMUXER_TYPE_MPEG_PS){ int pes=1; @@ -719,7 +735,12 @@ break; } case DEMUXER_TYPE_AVI: { - return (demuxer_t*) demux_open_avi(demuxer); + sh_audio_t* sh_a; + demuxer = (demuxer_t*) demux_open_avi(demuxer); + sh_a = (sh_audio_t*)demuxer->audio->sh; + if(demuxer->audio->id != -2 && sh_a && sh_a->format == 0xFFFE) + demuxer = init_avi_with_ogg(demuxer); + return demuxer; // break; } case DEMUXER_TYPE_NUV: {