mirror of
https://github.com/mpv-player/mpv
synced 2024-11-03 03:19:24 +01:00
-endpos option, patch by Fredrik Kuivinen <freku045@student.liu.se>
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@4160 b3059339-0415-0410-9bf9-f77b7e298cf2
This commit is contained in:
parent
afd9de3d71
commit
6bc31aecea
@ -89,6 +89,8 @@ static config_t mplayer_opts[]={
|
|||||||
/* name, pointer, type, flags, min, max */
|
/* name, pointer, type, flags, min, max */
|
||||||
{"include", cfg_include, CONF_TYPE_FUNC_PARAM, CONF_NOSAVE, 0, 0, NULL}, /* this must be the first!!! */
|
{"include", cfg_include, CONF_TYPE_FUNC_PARAM, CONF_NOSAVE, 0, 0, NULL}, /* this must be the first!!! */
|
||||||
|
|
||||||
|
{"endpos", parse_end_at, CONF_TYPE_FUNC_PARAM, 0, 0, 0, NULL},
|
||||||
|
|
||||||
{"ofps", &force_ofps, CONF_TYPE_FLOAT, CONF_MIN, 0, 0, NULL},
|
{"ofps", &force_ofps, CONF_TYPE_FLOAT, CONF_MIN, 0, 0, NULL},
|
||||||
{"o", &out_filename, CONF_TYPE_STRING, 0, 0, 0, NULL},
|
{"o", &out_filename, CONF_TYPE_STRING, 0, 0, 0, NULL},
|
||||||
|
|
||||||
|
60
mencoder.c
60
mencoder.c
@ -180,6 +180,8 @@ static int cfg_include(struct config *conf, char *filename){
|
|||||||
return m_config_parse_config_file(mconfig, filename);
|
return m_config_parse_config_file(mconfig, filename);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int parse_end_at(struct config *conf, const char* param);
|
||||||
|
|
||||||
#include "get_path.c"
|
#include "get_path.c"
|
||||||
|
|
||||||
#include "cfg-mplayer-def.h"
|
#include "cfg-mplayer-def.h"
|
||||||
@ -305,6 +307,10 @@ int dec_audio(sh_audio_t *sh_audio,unsigned char* buffer,int total){
|
|||||||
static int eof=0;
|
static int eof=0;
|
||||||
static int interrupted=0;
|
static int interrupted=0;
|
||||||
|
|
||||||
|
enum end_at_type_t {END_AT_NONE, END_AT_TIME, END_AT_SIZE};
|
||||||
|
static enum end_at_type_t end_at_type = END_AT_NONE;
|
||||||
|
static int end_at;
|
||||||
|
|
||||||
static void exit_sighandler(int x){
|
static void exit_sighandler(int x){
|
||||||
eof=1;
|
eof=1;
|
||||||
interrupted=1;
|
interrupted=1;
|
||||||
@ -1057,6 +1063,10 @@ while(!eof){
|
|||||||
int in_size;
|
int in_size;
|
||||||
int skip_flag=0; // 1=skip -1=duplicate
|
int skip_flag=0; // 1=skip -1=duplicate
|
||||||
|
|
||||||
|
if((end_at_type == END_AT_SIZE && end_at <= ftell(muxer_f)) ||
|
||||||
|
(end_at_type == END_AT_TIME && end_at < sh_video->timer))
|
||||||
|
break;
|
||||||
|
|
||||||
if(play_n_frames>=0){
|
if(play_n_frames>=0){
|
||||||
--play_n_frames;
|
--play_n_frames;
|
||||||
if(play_n_frames<0) break;
|
if(play_n_frames<0) break;
|
||||||
@ -1357,3 +1367,53 @@ if(stream) free_stream(stream); // kill cache thread
|
|||||||
|
|
||||||
return interrupted;
|
return interrupted;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int parse_end_at(struct config *conf, const char* param)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
end_at_type = END_AT_NONE;
|
||||||
|
|
||||||
|
/* End at size parsing */
|
||||||
|
{
|
||||||
|
char unit[4];
|
||||||
|
|
||||||
|
end_at_type = END_AT_SIZE;
|
||||||
|
|
||||||
|
if(sscanf(param, "%d%3s", &end_at, unit) == 2) {
|
||||||
|
if(!strcasecmp(unit, "b"))
|
||||||
|
;
|
||||||
|
else if(!strcasecmp(unit, "kb"))
|
||||||
|
end_at *= 1024;
|
||||||
|
else if(!strcasecmp(unit, "mb"))
|
||||||
|
end_at *= 1024*1024;
|
||||||
|
else
|
||||||
|
end_at_type = END_AT_NONE;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
end_at_type = END_AT_NONE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* End at time parsing. This has to be last because of
|
||||||
|
* sscanf("%f", ...) below */
|
||||||
|
if(end_at_type == END_AT_NONE)
|
||||||
|
{
|
||||||
|
int a,b; float d;
|
||||||
|
|
||||||
|
end_at_type = END_AT_TIME;
|
||||||
|
|
||||||
|
if (sscanf(param, "%d:%d:%f", &a, &b, &d) == 3)
|
||||||
|
end_at = 3600*a + 60*b + d;
|
||||||
|
else if (sscanf(param, "%d:%f", &a, &d) == 2)
|
||||||
|
end_at = 60*a + d;
|
||||||
|
else if (sscanf(param, "%f", &d) == 1)
|
||||||
|
end_at = d;
|
||||||
|
else
|
||||||
|
end_at_type = END_AT_NONE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(end_at_type == END_AT_NONE)
|
||||||
|
return ERR_FUNC_ERR;
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user