summaryrefslogtreecommitdiffstats
path: root/demux
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2015-08-18 00:10:54 +0200
committerwm4 <wm4@nowhere>2015-08-18 00:10:54 +0200
commitcf2fa9d3e5bd6b8ca3e1637080b665e896ea60a0 (patch)
tree1de6ea60ee9f38ad5b7b66d7d15ee7a806a1520b /demux
parentbf5eac8dd3f142acd0d506407f1ae853ada3c5bc (diff)
downloadmpv-cf2fa9d3e5bd6b8ca3e1637080b665e896ea60a0.tar.bz2
mpv-cf2fa9d3e5bd6b8ca3e1637080b665e896ea60a0.tar.xz
stream: provide a stream_get_size() convenience function
And use it everywhere, instead of retrieving the size manually. Slight simplification.
Diffstat (limited to 'demux')
-rw-r--r--demux/demux.c3
-rw-r--r--demux/demux_lavf.c7
-rw-r--r--demux/demux_mkv.c16
3 files changed, 9 insertions, 17 deletions
diff --git a/demux/demux.c b/demux/demux.c
index 7d66c56745..d0e44ab363 100644
--- a/demux/demux.c
+++ b/demux/demux.c
@@ -1300,7 +1300,6 @@ static void update_cache(struct demux_internal *in)
// Don't lock while querying the stream.
double time_length = -1;
struct mp_tags *stream_metadata = NULL;
- int64_t stream_size = -1;
int64_t stream_cache_size = -1;
int64_t stream_cache_fill = -1;
int stream_cache_idle = -1;
@@ -1310,8 +1309,8 @@ static void update_cache(struct demux_internal *in)
&time_length);
}
+ int64_t stream_size = stream_get_size(stream);
stream_control(stream, STREAM_CTRL_GET_METADATA, &stream_metadata);
- stream_control(stream, STREAM_CTRL_GET_SIZE, &stream_size);
stream_control(stream, STREAM_CTRL_GET_CACHE_SIZE, &stream_cache_size);
stream_control(stream, STREAM_CTRL_GET_CACHE_FILL, &stream_cache_fill);
stream_control(stream, STREAM_CTRL_GET_CACHE_IDLE, &stream_cache_idle);
diff --git a/demux/demux_lavf.c b/demux/demux_lavf.c
index a765ce8a44..8978ebf69e 100644
--- a/demux/demux_lavf.c
+++ b/demux/demux_lavf.c
@@ -204,8 +204,8 @@ static int64_t mp_seek(void *opaque, int64_t pos, int whence)
int64_t current_pos;
MP_TRACE(demuxer, "mp_seek(%p, %"PRId64", %d)\n", stream, pos, whence);
if (whence == SEEK_END || whence == AVSEEK_SIZE) {
- int64_t end;
- if (stream_control(stream, STREAM_CTRL_GET_SIZE, &end) != STREAM_OK)
+ int64_t end = stream_get_size(stream);
+ if (end < 0)
return -1;
if (whence == AVSEEK_SIZE)
return end;
@@ -917,8 +917,7 @@ static void demux_seek_lavf(demuxer_t *demuxer, double rel_seek_secs, int flags)
if (flags & SEEK_FACTOR) {
struct stream *s = demuxer->stream;
- int64_t end = 0;
- stream_control(s, STREAM_CTRL_GET_SIZE, &end);
+ int64_t end = stream_get_size(s);
if (end > 0 && demuxer->ts_resets_possible &&
!(priv->avif_flags & AVFMT_NO_BYTE_SEEK))
{
diff --git a/demux/demux_mkv.c b/demux/demux_mkv.c
index d1271c2fdd..0457eca675 100644
--- a/demux/demux_mkv.c
+++ b/demux/demux_mkv.c
@@ -1768,9 +1768,7 @@ static int read_mkv_segment_header(demuxer_t *demuxer, int64_t *segment_end)
MP_VERBOSE(demuxer, " (skipping)\n");
if (*segment_end <= 0)
break;
- int64_t end = 0;
- stream_control(s, STREAM_CTRL_GET_SIZE, &end);
- if (*segment_end >= end)
+ if (*segment_end >= stream_get_size(s))
return 0;
if (!stream_seek(s, *segment_end)) {
MP_WARN(demuxer, "Failed to seek in file\n");
@@ -1834,8 +1832,7 @@ static int demux_mkv_open(demuxer_t *demuxer, enum demux_check check)
return -1;
}
- int64_t end = 0;
- stream_control(s, STREAM_CTRL_GET_SIZE, &end);
+ int64_t end = stream_get_size(s);
// Read headers that come after the first cluster (i.e. require seeking).
// Note: reading might increase ->num_headers.
@@ -2800,9 +2797,7 @@ static void demux_mkv_seek(demuxer_t *demuxer, double rel_seek_secs, int flags)
read_deferred_cues(demuxer);
- int64_t size = 0;
- stream_control(s, STREAM_CTRL_GET_SIZE, &size);
-
+ int64_t size = stream_get_size(s);
int64_t target_filepos = size * MPCLAMP(rel_seek_secs, 0, 1);
mkv_index_t *index = NULL;
@@ -2824,7 +2819,7 @@ static void demux_mkv_seek(demuxer_t *demuxer, double rel_seek_secs, int flags)
stream_seek(s, index->filepos);
mkv_d->skip_to_timecode = index->timecode * mkv_d->tc_scale;
} else {
- stream_seek(s, target_filepos);
+ stream_seek(s, MPMAX(target_filepos, 0));
if (ebml_resync_cluster(mp_null_log, s) < 0) {
// Assume EOF
mkv_d->cluster_end = size;
@@ -2877,8 +2872,7 @@ static void probe_last_timestamp(struct demuxer *demuxer)
return;
} else {
// No index -> just try to find a random cluster towards file end.
- int64_t size = 0;
- stream_control(demuxer->stream, STREAM_CTRL_GET_SIZE, &size);
+ int64_t size = stream_get_size(demuxer->stream);
stream_seek(demuxer->stream, MPMAX(size - 10 * 1024 * 1024, 0));
if (ebml_resync_cluster(mp_null_log, demuxer->stream) < 0)
stream_seek(demuxer->stream, old_pos); // full scan otherwise