Mercurial > mplayer.hg
diff libmpdemux/demuxer.c @ 12164:77ff303c0eaa
demux_lavf
author | michael |
---|---|
date | Sun, 11 Apr 2004 14:26:04 +0000 |
parents | c43d654a1f45 |
children | da8e39bfe121 |
line wrap: on
line diff
--- a/libmpdemux/demuxer.c Fri Apr 09 22:58:41 2004 +0000 +++ b/libmpdemux/demuxer.c Sun Apr 11 14:26:04 2004 +0000 @@ -139,6 +139,7 @@ extern void demux_close_mkv(demuxer_t* demuxer); extern void demux_close_ra(demuxer_t* demuxer); extern void demux_close_ty(demuxer_t* demuxer); +extern void demux_close_lavf(demuxer_t* demuxer); #ifdef USE_TV @@ -223,7 +224,10 @@ demux_close_ts(demuxer); break; case DEMUXER_TYPE_REALAUDIO: demux_close_ra(demuxer); break; - +#ifdef USE_LIBAVFORMAT + case DEMUXER_TYPE_LAVF: + demux_close_lavf(demuxer); break; +#endif } // free streams: for(i=0;i<256;i++){ @@ -313,6 +317,7 @@ extern int demux_smjpeg_fill_buffer(demuxer_t* demux); extern int demux_lmlm4_fill_buffer(demuxer_t* demux); extern int demux_mkv_fill_buffer(demuxer_t *d); +extern int demux_lavf_fill_buffer(demuxer_t *d); int demux_fill_buffer(demuxer_t *demux,demux_stream_t *ds){ // Note: parameter 'ds' can be NULL! @@ -369,6 +374,9 @@ case DEMUXER_TYPE_MPEG4_IN_TS: return demux_ts_fill_buffer(demux); case DEMUXER_TYPE_REALAUDIO: return demux_ra_fill_buffer(demux); +#ifdef USE_LIBAVFORMAT + case DEMUXER_TYPE_LAVF: return demux_lavf_fill_buffer(demux); +#endif } return 0; } @@ -612,6 +620,8 @@ #ifdef HAVE_MATROSKA extern int demux_mkv_open(demuxer_t *demuxer); #endif +extern int lavf_check_file(demuxer_t *demuxer); +extern int demux_open_lavf(demuxer_t* demuxer); extern demuxer_t* init_avi_with_ogg(demuxer_t* demuxer); @@ -1078,6 +1088,19 @@ if(file_format==DEMUXER_TYPE_RTP) { demuxer=new_demuxer(stream,DEMUXER_TYPE_RTP,audio_id,video_id,dvdsub_id); } +//=============== Try to open with LAVF: ================= +#ifdef USE_LIBAVFORMAT + if(file_format==DEMUXER_TYPE_UNKNOWN || file_format==DEMUXER_TYPE_LAVF){ + demuxer=new_demuxer(stream,DEMUXER_TYPE_LAVF,audio_id,video_id,dvdsub_id); + if(lavf_check_file(demuxer)){ + mp_msg(MSGT_DEMUXER,MSGL_INFO,MSGTR_Detected_XXX_FileFormat,"libavformat"); //FIXME print format + file_format=DEMUXER_TYPE_LAVF; + } else { + free_demuxer(demuxer); + demuxer = NULL; + } +} +#endif //=============== Unknown, exiting... =========================== if(file_format==DEMUXER_TYPE_UNKNOWN || demuxer == NULL){ //mp_msg(MSGT_DEMUXER,MSGL_ERR,MSGTR_FormatNotRecognized); // will be done by mplayer.c after fallback to playlist-parsing @@ -1311,6 +1334,12 @@ if (!demux_open_ra(demuxer)) return NULL; break; } +#ifdef USE_LIBAVFORMAT + case DEMUXER_TYPE_LAVF: { + if (!demux_open_lavf(demuxer)) return NULL; + break; + } +#endif } // switch(file_format) pts_from_bps=0; // !!! return demuxer; @@ -1397,6 +1426,7 @@ int demux_seek_real(demuxer_t *demuxer,float rel_seek_secs,int flags); int demux_seek_pva(demuxer_t *demuxer,float rel_seek_secs,int flags); int demux_seek_ts(demuxer_t *demuxer,float rel_seek_secs,int flags); +int demux_seek_lavf(demuxer_t *demuxer,float rel_seek_secs,int flags); #ifdef HAVE_LIBDV095 int demux_seek_rawdv(demuxer_t *demuxer, float pts, int flags); @@ -1508,6 +1538,10 @@ case DEMUXER_TYPE_MPEG_TS: case DEMUXER_TYPE_MPEG4_IN_TS: demux_seek_ts(demuxer,rel_seek_secs,flags); break; + #ifdef USE_LIBAVFORMAT + case DEMUXER_TYPE_LAVF: + demux_seek_lavf(demuxer,rel_seek_secs,flags); break; + #endif } // switch(demuxer->file_format) @@ -1573,6 +1607,7 @@ extern int demux_audio_control(demuxer_t *demuxer, int cmd, void *arg); extern int demux_ogg_control(demuxer_t *demuxer, int cmd, void *arg); extern int demux_real_control(demuxer_t *demuxer, int cmd, void *arg); +extern int demux_lavf_control(demuxer_t *demuxer, int cmd, void *arg); int demux_control(demuxer_t *demuxer, int cmd, void *arg) { switch(demuxer->type) { @@ -1606,6 +1641,10 @@ #endif case DEMUXER_TYPE_REAL: return demux_real_control(demuxer, cmd, arg); +#ifdef USE_LIBAVFORMAT + case DEMUXER_TYPE_LAVF: + return demux_lavf_control(demuxer, cmd, arg); +#endif default: return DEMUXER_CTRL_NOTIMPL;