summaryrefslogtreecommitdiffstats
path: root/stream/stream_lavf.c
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2014-05-24 14:06:13 +0200
committerwm4 <wm4@nowhere>2014-05-24 16:17:52 +0200
commitaa87c143cb369f1448f8d08086b5ef98998b4436 (patch)
treeb3b3a079f5e82f66e62d46fcad1488a59f387d2c /stream/stream_lavf.c
parent80cbb3bac2e2b2a569d5a9a9c6dd5d4f2da04f7c (diff)
downloadmpv-aa87c143cb369f1448f8d08086b5ef98998b4436.tar.bz2
mpv-aa87c143cb369f1448f8d08086b5ef98998b4436.tar.xz
stream: remove chaos related to writeable streams
For some reason, we support writeable streams. (Only encoding uses that, and the use of it looks messy enough that I want to replace it with FILE or avio today.) It's a chaos: most streams do not actually check the mode parameter like they should. Simplify it, and let streams signal availability of write mode by setting a flag in the stream info struct.
Diffstat (limited to 'stream/stream_lavf.c')
-rw-r--r--stream/stream_lavf.c18
1 files changed, 5 insertions, 13 deletions
diff --git a/stream/stream_lavf.c b/stream/stream_lavf.c
index c8281ea389..b8f90cc9b1 100644
--- a/stream/stream_lavf.c
+++ b/stream/stream_lavf.c
@@ -32,7 +32,7 @@
#include "bstr/bstr.h"
#include "talloc.h"
-static int open_f(stream_t *stream, int mode);
+static int open_f(stream_t *stream);
static char **read_icy(stream_t *stream);
static int fill_buffer(stream_t *s, char *buffer, int max_len)
@@ -113,7 +113,7 @@ static int control(stream_t *s, int cmd, void *arg)
// avio doesn't seem to support this - emulate it by reopening
close_f(s);
s->priv = NULL;
- return open_f(s, STREAM_READ);
+ return open_f(s);
}
}
return STREAM_UNSUPPORTED;
@@ -127,10 +127,9 @@ static int interrupt_cb(void *ctx)
static const char * const prefix[] = { "lavf://", "ffmpeg://" };
-static int open_f(stream_t *stream, int mode)
+static int open_f(stream_t *stream)
{
struct MPOpts *opts = stream->opts;
- int flags = 0;
AVIOContext *avio = NULL;
int res = STREAM_ERROR;
AVDictionary *dict = NULL;
@@ -139,15 +138,7 @@ static int open_f(stream_t *stream, int mode)
stream->seek = NULL;
stream->seekable = false;
- if (mode == STREAM_READ)
- flags = AVIO_FLAG_READ;
- else if (mode == STREAM_WRITE)
- flags = AVIO_FLAG_WRITE;
- else {
- MP_ERR(stream, "Unknown open mode %d\n", mode);
- res = STREAM_UNSUPPORTED;
- goto out;
- }
+ int flags = stream->mode == STREAM_WRITE ? AVIO_FLAG_WRITE : AVIO_FLAG_READ;
const char *filename = stream->url;
if (!filename) {
@@ -330,4 +321,5 @@ const stream_info_t stream_info_ffmpeg = {
"rtmpt", "rtmpte", "rtmpts", "srtp", "tcp", "udp", "tls", "unix", "sftp",
"md5",
NULL },
+ .can_write = true,
};