mirror of
https://github.com/mpv-player/mpv
synced 2024-12-23 15:22:09 +00:00
initial seeking (-ss) support in mencoder
make mplayer's default video encoder fallback to libavcodec or raw if divx4 isn't supported git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@4621 b3059339-0415-0410-9bf9-f77b7e298cf2
This commit is contained in:
parent
9a93e7607a
commit
412bac90a8
@ -96,6 +96,8 @@ static config_t mencoder_opts[]={
|
||||
/* name, pointer, type, flags, min, max */
|
||||
{"include", cfg_include, CONF_TYPE_FUNC_PARAM, CONF_NOSAVE, 0, 0, NULL}, /* this must be the first!!! */
|
||||
|
||||
// {"sb", &seek_to_byte, CONF_TYPE_INT, CONF_MIN, 0, 0, NULL},
|
||||
{"ss", &seek_to_sec, CONF_TYPE_STRING, CONF_MIN, 0, 0, NULL},
|
||||
{"endpos", parse_end_at, CONF_TYPE_FUNC_PARAM, 0, 0, 0, NULL},
|
||||
|
||||
{"ofps", &force_ofps, CONF_TYPE_FLOAT, CONF_MIN, 0, 0, NULL},
|
||||
|
32
mencoder.c
32
mencoder.c
@ -125,7 +125,17 @@ int out_audio_codec=ACODEC_VBRMP3;
|
||||
int out_audio_codec=ACODEC_PCM;
|
||||
#endif
|
||||
|
||||
int out_video_codec=VCODEC_DIVX4;
|
||||
int out_video_codec=
|
||||
#ifdef HAVE_DIVX4ENCORE
|
||||
VCODEC_DIVX4;
|
||||
#else
|
||||
#ifdef USE_LIBAVCODEC
|
||||
VCODEC_LIBAVCODEC;
|
||||
#else
|
||||
VCODEC_RAW;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
// audio stream skip/resync functions requires only for seeking.
|
||||
// (they should be implemented in the audio codec layer)
|
||||
@ -198,6 +208,9 @@ static int cfg_include(struct config *conf, char *filename){
|
||||
return m_config_parse_config_file(mconfig, filename);
|
||||
}
|
||||
|
||||
static char *seek_to_sec=NULL;
|
||||
static off_t seek_to_byte=0;
|
||||
|
||||
static int parse_end_at(struct config *conf, const char* param);
|
||||
static uint8_t* flip_upside_down(uint8_t* dst, const uint8_t* src, int width, int height);
|
||||
|
||||
@ -597,7 +610,7 @@ if(!init_video(sh_video,pitches)){
|
||||
|
||||
} // if(out_video_codec)
|
||||
|
||||
if(sh_audio && (out_audio_codec || !sh_audio->wf)){
|
||||
if(sh_audio && (out_audio_codec || seek_to_sec || !sh_audio->wf)){
|
||||
// Go through the codec.conf and find the best codec...
|
||||
sh_audio->codec=NULL;
|
||||
if(audio_family!=-1) mp_msg(MSGT_MENCODER,MSGL_INFO,MSGTR_TryForceAudioFmt,audio_family);
|
||||
@ -622,7 +635,7 @@ if(sh_audio && (out_audio_codec || !sh_audio->wf)){
|
||||
}
|
||||
}
|
||||
|
||||
if(sh_audio && (out_audio_codec || !sh_audio->wf)){
|
||||
if(sh_audio && (out_audio_codec || seek_to_sec || !sh_audio->wf)){
|
||||
mp_msg(MSGT_MENCODER,MSGL_V,"Initializing audio codec...\n");
|
||||
if(!init_audio(sh_audio)){
|
||||
mp_msg(MSGT_MENCODER,MSGL_ERR,MSGTR_CouldntInitAudioCodec);
|
||||
@ -1194,6 +1207,19 @@ signal(SIGTERM,exit_sighandler); // kill
|
||||
|
||||
timer_start=GetTimerMS();
|
||||
|
||||
if (seek_to_sec) {
|
||||
int a,b; float d;
|
||||
|
||||
if (sscanf(seek_to_sec, "%d:%d:%f", &a,&b,&d)==3)
|
||||
d += 3600*a + 60*b;
|
||||
else if (sscanf(seek_to_sec, "%d:%f", &a, &d)==2)
|
||||
d += 60*a;
|
||||
else
|
||||
sscanf(seek_to_sec, "%f", &d);
|
||||
|
||||
demux_seek(demuxer, d, 1);
|
||||
}
|
||||
|
||||
while(!eof){
|
||||
|
||||
float frame_time=0;
|
||||
|
Loading…
Reference in New Issue
Block a user