summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2014-08-29 11:58:49 +0200
committerwm4 <wm4@nowhere>2014-08-29 11:58:49 +0200
commitac2502141d82bbf4dd25d3bdd33c9d57d79d2d7a (patch)
tree19a8fadb53f73d481d70639a42b3f230a33dac11
parent66f158b89b92c9af9aa8a54fee12a21d74770b6b (diff)
downloadmpv-ac2502141d82bbf4dd25d3bdd33c9d57d79d2d7a.tar.bz2
mpv-ac2502141d82bbf4dd25d3bdd33c9d57d79d2d7a.tar.xz
stream: tweaks to network reconnection code
Don't reconnect to the cache (since the cached stream already handles reconnection). This is necessary, because since commit 0b428e44 the "streaming" field (which also controls whether attempting to reconnect makes sense at all) is inherited to the cache stream wrapper. Also, let the stream reset its own position on reconnect. This removes some assumptions and messy handling from the reconnect function. Make sure the cache is dropped on reconnect. This takes care of readjusting the stream position if necessary. (Also drop the cache on DVB channel switching commands.)
-rw-r--r--stream/cache.c3
-rw-r--r--stream/stream.c4
-rw-r--r--stream/stream_lavf.c2
3 files changed, 6 insertions, 3 deletions
diff --git a/stream/cache.c b/stream/cache.c
index 6bd729c6fa..90683aa6db 100644
--- a/stream/cache.c
+++ b/stream/cache.c
@@ -415,6 +415,9 @@ static bool control_needs_flush(int stream_ctrl)
case STREAM_CTRL_AVSEEK:
case STREAM_CTRL_SET_ANGLE:
case STREAM_CTRL_SET_CURRENT_TITLE:
+ case STREAM_CTRL_RECONNECT:
+ case STREAM_CTRL_DVB_SET_CHANNEL:
+ case STREAM_CTRL_DVB_STEP_CHANNEL:
return true;
}
return false;
diff --git a/stream/stream.c b/stream/stream.c
index 7b8050dec0..e9bbbc8412 100644
--- a/stream/stream.c
+++ b/stream/stream.c
@@ -384,7 +384,7 @@ static int stream_reconnect(stream_t *s)
{
#define MAX_RECONNECT_RETRIES 5
#define RECONNECT_SLEEP_MAX_MS 500
- if (!s->streaming)
+ if (!s->streaming || s->uncached_stream)
return 0;
if (!s->seekable)
return 0;
@@ -404,8 +404,6 @@ static int stream_reconnect(stream_t *s)
return 0;
s->eof = 1;
- s->pos = 0;
- s->buf_pos = s->buf_len = 0;
int r = stream_control(s, STREAM_CTRL_RECONNECT, NULL);
if (r == STREAM_UNSUPPORTED)
diff --git a/stream/stream_lavf.c b/stream/stream_lavf.c
index c84945eba7..afb92f279f 100644
--- a/stream/stream_lavf.c
+++ b/stream/stream_lavf.c
@@ -252,6 +252,8 @@ static int open_f(stream_t *stream)
stream->close = close_f;
// enable cache (should be avoided for files, but no way to detect this)
stream->streaming = true;
+ stream->pos = 0; // reset specifically for STREAM_CTRL_RECONNECT
+ stream->buf_pos = stream->buf_len = 0;
res = STREAM_OK;
out: