command: change stream-pos semantics

Changing the byte stream position without cooperation of the demuxer
seems a bit insane, and is certainly useless. A user should do factor
seeks instead. For formats like ts, this will actually translate to byte
seeks, while treating the rest of the playback chain a bit more
gracefully. With this argument, remove write access to this property.

If someone really complains, proper byte seeks could be added as seek
mode (although I'm going to need a convincing argument for this).

Read access changes too, but in a more subtle way.
This commit is contained in:
wm4 2016-03-09 23:34:04 +01:00
parent 95ca308d44
commit 7387766445
3 changed files with 6 additions and 14 deletions

View File

@ -22,6 +22,7 @@ Interface changes
--- mpv 0.17.0 ---
- deprecate "track-list/N/audio-channels" property (use
"track-list/N/demux-channel-count" instead)
- remove write access to "stream-pos", and change semantics for read access
--- mpv 0.16.0 ---
- change --audio-channels default to stereo (use --audio-channels=auto to
get the old default)

View File

@ -921,8 +921,9 @@ Property list
useless. It looks like this can be different from ``path`` only when
using e.g. ordered chapters.)
``stream-pos`` (RW)
Raw byte position in source stream.
``stream-pos``
Raw byte position in source stream. Technically, this returns the position
of the most recent packet passed to a decoder.
``stream-end``
Raw end position in bytes in source stream.

View File

@ -458,24 +458,14 @@ static int mp_property_file_format(void *ctx, struct m_property *prop,
return m_property_strdup_ro(action, arg, name);
}
/// Position in the stream (RW)
static int mp_property_stream_pos(void *ctx, struct m_property *prop,
int action, void *arg)
{
MPContext *mpctx = ctx;
struct demuxer *demuxer = mpctx->demuxer;
if (!demuxer)
if (!demuxer || demuxer->filepos < 0)
return M_PROPERTY_UNAVAILABLE;
demux_pause(demuxer);
int r;
if (action == M_PROPERTY_SET) {
stream_seek(demuxer->stream, *(int64_t *) arg);
r = M_PROPERTY_OK;
} else {
r = m_property_int64_ro(action, arg, stream_tell(demuxer->stream));
}
demux_unpause(demuxer);
return r;
return m_property_int64_ro(action, arg, demuxer->filepos);
}
/// Stream end offset (RO)