mirror of https://github.com/mpv-player/mpv
Add properties to get/set the stream position and get the stream
start pos, end pos and length. Based on Reimar's patch. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@18227 b3059339-0415-0410-9bf9-f77b7e298cf2
This commit is contained in:
parent
152d7ed02c
commit
44e9960dd0
53
mplayer.c
53
mplayer.c
|
@ -1361,6 +1361,51 @@ static int mp_property_demuxer(m_option_t* prop,int action,void* arg) {
|
||||||
return m_property_string_ro(prop,action,arg,(char*)demuxer->desc->name);
|
return m_property_string_ro(prop,action,arg,(char*)demuxer->desc->name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int mp_property_stream_pos(m_option_t* prop,int action,void* arg) {
|
||||||
|
if (!demuxer || !demuxer->stream) return M_PROPERTY_UNAVAILABLE;
|
||||||
|
if (!arg) return M_PROPERTY_ERROR;
|
||||||
|
switch (action) {
|
||||||
|
case M_PROPERTY_GET:
|
||||||
|
*(off_t*)arg = stream_tell(demuxer->stream);
|
||||||
|
return M_PROPERTY_OK;
|
||||||
|
case M_PROPERTY_SET:
|
||||||
|
M_PROPERTY_CLAMP(prop,*(off_t*)arg);
|
||||||
|
stream_seek(demuxer->stream, *(off_t*)arg);
|
||||||
|
return M_PROPERTY_OK;
|
||||||
|
}
|
||||||
|
return M_PROPERTY_NOT_IMPLEMENTED;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int mp_property_stream_start(m_option_t* prop,int action,void* arg) {
|
||||||
|
if (!demuxer || !demuxer->stream) return M_PROPERTY_UNAVAILABLE;
|
||||||
|
switch (action) {
|
||||||
|
case M_PROPERTY_GET:
|
||||||
|
*(off_t*)arg = demuxer->stream->start_pos;
|
||||||
|
return M_PROPERTY_OK;
|
||||||
|
}
|
||||||
|
return M_PROPERTY_NOT_IMPLEMENTED;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int mp_property_stream_end(m_option_t* prop,int action,void* arg) {
|
||||||
|
if (!demuxer || !demuxer->stream) return M_PROPERTY_UNAVAILABLE;
|
||||||
|
switch (action) {
|
||||||
|
case M_PROPERTY_GET:
|
||||||
|
*(off_t*)arg = demuxer->stream->end_pos;
|
||||||
|
return M_PROPERTY_OK;
|
||||||
|
}
|
||||||
|
return M_PROPERTY_NOT_IMPLEMENTED;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int mp_property_stream_length(m_option_t* prop,int action,void* arg) {
|
||||||
|
if (!demuxer || !demuxer->stream) return M_PROPERTY_UNAVAILABLE;
|
||||||
|
switch (action) {
|
||||||
|
case M_PROPERTY_GET:
|
||||||
|
*(off_t*)arg = demuxer->stream->end_pos - demuxer->stream->start_pos;
|
||||||
|
return M_PROPERTY_OK;
|
||||||
|
}
|
||||||
|
return M_PROPERTY_NOT_IMPLEMENTED;
|
||||||
|
}
|
||||||
|
|
||||||
static int mp_property_length(m_option_t* prop,int action,void* arg) {
|
static int mp_property_length(m_option_t* prop,int action,void* arg) {
|
||||||
double len;
|
double len;
|
||||||
|
|
||||||
|
@ -2009,6 +2054,14 @@ static m_option_t mp_properties[] = {
|
||||||
0, 0, 0, NULL },
|
0, 0, 0, NULL },
|
||||||
{ "demuxer", mp_property_demuxer, CONF_TYPE_STRING,
|
{ "demuxer", mp_property_demuxer, CONF_TYPE_STRING,
|
||||||
0, 0, 0, NULL },
|
0, 0, 0, NULL },
|
||||||
|
{ "stream_pos", mp_property_stream_pos, CONF_TYPE_POSITION,
|
||||||
|
M_OPT_MIN, 0, 0, NULL },
|
||||||
|
{ "stream_start", mp_property_stream_start, CONF_TYPE_POSITION,
|
||||||
|
M_OPT_MIN, 0, 0, NULL },
|
||||||
|
{ "stream_end", mp_property_stream_end, CONF_TYPE_POSITION,
|
||||||
|
M_OPT_MIN, 0, 0, NULL },
|
||||||
|
{ "stream_length", mp_property_stream_length, CONF_TYPE_POSITION,
|
||||||
|
M_OPT_MIN, 0, 0, NULL },
|
||||||
{ "length", mp_property_length, CONF_TYPE_DOUBLE,
|
{ "length", mp_property_length, CONF_TYPE_DOUBLE,
|
||||||
0, 0, 0, NULL },
|
0, 0, 0, NULL },
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue