1
0
mirror of https://github.com/mpv-player/mpv synced 2025-03-31 15:59:34 +00:00

options: remove CONF_TYPE_POSITION

This was the option parser for the off_t C type. These days, off_t is
always int64_t, so replace all its uses by int64_t and CONF_TYPE_INT64.

Fix the --sstep option. It used CONF_TYPE_INT with an off_t variable,
which will result in invalid memory accesses. Make it use type double
instead, which seems to make more sense for this option.
This commit is contained in:
wm4 2012-09-18 11:48:50 +02:00
parent 10437c35df
commit 3d67041089
5 changed files with 16 additions and 47 deletions

View File

@ -381,7 +381,7 @@ const m_option_t common_opts[] = {
{"frames", &play_n_frames_mf, CONF_TYPE_INT, CONF_MIN, 0, 0, NULL},
// seek to byte/seconds position
{"sb", &seek_to_byte, CONF_TYPE_POSITION, CONF_MIN, 0, 0, NULL},
{"sb", &seek_to_byte, CONF_TYPE_INT64, CONF_MIN, 0, 0, NULL},
OPT_TIME("ss", seek_to_sec, 0),
// start paused
@ -678,7 +678,7 @@ const m_option_t mplayer_opts[]={
OPT_STRING("vobsub", vobsub_name, 0),
{"vobsubid", &vobsub_id, CONF_TYPE_INT, CONF_RANGE, 0, 31, NULL},
{"sstep", &step_sec, CONF_TYPE_INT, CONF_MIN, 0, 0, NULL},
{"sstep", &step_sec, CONF_TYPE_DOUBLE, CONF_MIN, 0, 0, NULL},
OPT_CHOICE("framedrop", frame_dropping, 0,
({"no", 0},

View File

@ -261,11 +261,11 @@ static int mp_property_stream_pos(m_option_t *prop, int action, void *arg,
return M_PROPERTY_ERROR;
switch (action) {
case M_PROPERTY_GET:
*(off_t *) arg = stream_tell(stream);
*(int64_t *) arg = stream_tell(stream);
return M_PROPERTY_OK;
case M_PROPERTY_SET:
M_PROPERTY_CLAMP(prop, *(off_t *) arg);
stream_seek(stream, *(off_t *) arg);
M_PROPERTY_CLAMP(prop, *(int64_t *) arg);
stream_seek(stream, *(int64_t *) arg);
return M_PROPERTY_OK;
}
return M_PROPERTY_NOT_IMPLEMENTED;
@ -280,7 +280,7 @@ static int mp_property_stream_start(m_option_t *prop, int action,
return M_PROPERTY_UNAVAILABLE;
switch (action) {
case M_PROPERTY_GET:
*(off_t *) arg = stream->start_pos;
*(int64_t *) arg = stream->start_pos;
return M_PROPERTY_OK;
}
return M_PROPERTY_NOT_IMPLEMENTED;
@ -295,7 +295,7 @@ static int mp_property_stream_end(m_option_t *prop, int action, void *arg,
return M_PROPERTY_UNAVAILABLE;
switch (action) {
case M_PROPERTY_GET:
*(off_t *) arg = stream->end_pos;
*(int64_t *) arg = stream->end_pos;
return M_PROPERTY_OK;
}
return M_PROPERTY_NOT_IMPLEMENTED;
@ -310,7 +310,7 @@ static int mp_property_stream_length(m_option_t *prop, int action,
return M_PROPERTY_UNAVAILABLE;
switch (action) {
case M_PROPERTY_GET:
*(off_t *) arg = stream->end_pos - stream->start_pos;
*(int64_t *) arg = stream->end_pos - stream->start_pos;
return M_PROPERTY_OK;
}
return M_PROPERTY_NOT_IMPLEMENTED;
@ -1650,13 +1650,13 @@ static const m_option_t mp_properties[] = {
0, 0, 0, NULL },
{ "demuxer", mp_property_demuxer, CONF_TYPE_STRING,
0, 0, 0, NULL },
{ "stream-pos", mp_property_stream_pos, CONF_TYPE_POSITION,
{ "stream-pos", mp_property_stream_pos, CONF_TYPE_INT64,
M_OPT_MIN, 0, 0, NULL },
{ "stream-start", mp_property_stream_start, CONF_TYPE_POSITION,
{ "stream-start", mp_property_stream_start, CONF_TYPE_INT64,
M_OPT_MIN, 0, 0, NULL },
{ "stream-end", mp_property_stream_end, CONF_TYPE_POSITION,
{ "stream-end", mp_property_stream_end, CONF_TYPE_INT64,
M_OPT_MIN, 0, 0, NULL },
{ "stream-length", mp_property_stream_length, CONF_TYPE_POSITION,
{ "stream-length", mp_property_stream_length, CONF_TYPE_INT64,
M_OPT_MIN, 0, 0, NULL },
{ "stream-time-pos", mp_property_stream_time_pos, CONF_TYPE_TIME,
M_OPT_MIN, 0, 0, NULL },
@ -2118,7 +2118,7 @@ void run_command(MPContext *mpctx, mp_cmd_t *cmd)
void *arg = NULL;
int r, i;
double d;
off_t o;
int64_t o;
cmd->args[0].v.s = translate_legacy_property(cmd, cmd->args[0].v.s);
if (cmd->args[1].v.f) {
m_option_t *prop;
@ -2135,7 +2135,7 @@ void run_command(MPContext *mpctx, mp_cmd_t *cmd)
else if (prop->type == CONF_TYPE_DOUBLE ||
prop->type == CONF_TYPE_TIME)
d = cmd->args[1].v.f, arg = &d;
else if (prop->type == CONF_TYPE_POSITION)
else if (prop->type == CONF_TYPE_INT64)
o = cmd->args[1].v.f, arg = &o;
else
mp_msg(MSGT_CPLAYER, MSGL_WARN,

View File

@ -423,35 +423,6 @@ const m_option_type_t m_option_type_float = {
.copy = copy_opt,
};
///////////// Position
#undef VAL
#define VAL(x) (*(off_t *)(x))
static int parse_position(const m_option_t *opt, struct bstr name,
struct bstr param, void *dst)
{
long long tmp;
int r = parse_longlong(opt, name, param, &tmp);
if (r >= 0 && dst)
*(off_t *)dst = tmp;
return r;
}
static char *print_position(const m_option_t *opt, const void *val)
{
return talloc_asprintf(NULL, "%"PRId64, (int64_t)VAL(val));
}
const m_option_type_t m_option_type_position = {
// Integer (off_t)
.name = "Position",
.size = sizeof(off_t),
.parse = parse_position,
.print = print_position,
.copy = copy_opt,
};
///////////// String
#undef VAL

View File

@ -43,7 +43,6 @@ extern const m_option_type_t m_option_type_float;
extern const m_option_type_t m_option_type_double;
extern const m_option_type_t m_option_type_string;
extern const m_option_type_t m_option_type_string_list;
extern const m_option_type_t m_option_type_position;
extern const m_option_type_t m_option_type_time;
extern const m_option_type_t m_option_type_time_size;
extern const m_option_type_t m_option_type_choice;
@ -167,7 +166,6 @@ struct m_sub_options {
#define CONF_TYPE_PRINT_FUNC (&m_option_type_print_func)
#define CONF_TYPE_SUBCONFIG (&m_option_type_subconfig)
#define CONF_TYPE_STRING_LIST (&m_option_type_string_list)
#define CONF_TYPE_POSITION (&m_option_type_position)
#define CONF_TYPE_IMGFMT (&m_option_type_imgfmt)
#define CONF_TYPE_AFMT (&m_option_type_afmt)
#define CONF_TYPE_SPAN (&m_option_type_span)

View File

@ -204,8 +204,8 @@ static const char av_desync_help_text[] = _(
static int drop_frame_cnt; // total number of dropped frames
// seek:
static off_t seek_to_byte;
static off_t step_sec;
static int64_t seek_to_byte;
static double step_sec;
static m_time_size_t end_at = { .type = END_AT_NONE, .pos = 0 };