summaryrefslogtreecommitdiffstats
path: root/stream/stream.h
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2019-06-19 16:48:46 +0200
committerwm4 <wm4@nowhere>2019-09-19 20:37:05 +0200
commite40885d963f8b60d83aa5ea8104985dd20af262f (patch)
tree82c2fd8284e9a81a211dc7755f5e40e97926cd6e /stream/stream.h
parentde3ecc60cb5ac39e727d8bd1fe4f9e3499f8e672 (diff)
downloadmpv-e40885d963f8b60d83aa5ea8104985dd20af262f.tar.bz2
mpv-e40885d963f8b60d83aa5ea8104985dd20af262f.tar.xz
stream: create memory streams in more straightforward way
Instead of having to rely on the protocol matching, make a function that creates a stream from a stream_info_t directly. Instead of going through a weird indirection with STREAM_CTRL, add a direct argument for non-text arguments to the open callback. Instead of creating a weird dummy mpv_global, just pass an existing one from all callers. (The latter one is just an artifact from the past, where mpv_global wasn't available everywhere.) Actually I just wanted a function that creates a stream without any of that bullshit. This goal was slightly missed, since you still need this heavy "constructor" just to setup a shitty struct with some shitty callbacks.
Diffstat (limited to 'stream/stream.h')
-rw-r--r--stream/stream.h13
1 files changed, 9 insertions, 4 deletions
diff --git a/stream/stream.h b/stream/stream.h
index 8bd8ecfc01..4bd6a7b713 100644
--- a/stream/stream.h
+++ b/stream/stream.h
@@ -37,6 +37,7 @@
// flags for stream_open_ext (this includes STREAM_READ and STREAM_WRITE)
#define STREAM_SAFE_ONLY 4
#define STREAM_NETWORK_ONLY 8
+#define STREAM_SILENT 16
#define STREAM_UNSAFE -3
#define STREAM_NO_MATCH -2
@@ -47,9 +48,6 @@
enum stream_ctrl {
STREAM_CTRL_GET_SIZE = 1,
- // stream_memory.c
- STREAM_CTRL_SET_CONTENTS,
-
// Certain network protocols
STREAM_CTRL_AVSEEK,
STREAM_CTRL_HAS_AVSEEK,
@@ -72,6 +70,8 @@ typedef struct stream_info_st {
const char *name;
// opts is set from ->opts
int (*open)(struct stream *st);
+ // Alternative to open(). Only either open() or open2() can be set.
+ int (*open2)(struct stream *st, void *arg);
const char *const *protocols;
bool can_write; // correctly checks for READ/WRITE modes
bool is_safe; // opening is no security issue, even with remote provided URLs
@@ -165,15 +165,20 @@ struct bstr stream_read_file(const char *filename, void *talloc_ctx,
struct mpv_global *global, int max_size);
int stream_control(stream_t *s, int cmd, void *arg);
void free_stream(stream_t *s);
+int stream_create_instance(const stream_info_t *sinfo, const char *url, int flags,
+ struct mp_cancel *c, struct mpv_global *global,
+ void *arg, struct stream **ret);
struct stream *stream_create(const char *url, int flags,
struct mp_cancel *c, struct mpv_global *global);
struct stream *stream_open(const char *filename, struct mpv_global *global);
stream_t *open_output_stream(const char *filename, struct mpv_global *global);
-stream_t *open_memory_stream(void *data, int len);
void mp_url_unescape_inplace(char *buf);
char *mp_url_escape(void *talloc_ctx, const char *s, const char *ok);
+// stream_memory.c
+struct stream *stream_memory_open(struct mpv_global *global, void *data, int len);
+
// stream_file.c
char *mp_file_url_to_filename(void *talloc_ctx, bstr url);
char *mp_file_get_path(void *talloc_ctx, bstr url);