summaryrefslogtreecommitdiffstats
path: root/mpvcore/resolve_quvi.c
diff options
context:
space:
mode:
Diffstat (limited to 'mpvcore/resolve_quvi.c')
-rw-r--r--mpvcore/resolve_quvi.c22
1 files changed, 20 insertions, 2 deletions
diff --git a/mpvcore/resolve_quvi.c b/mpvcore/resolve_quvi.c
index 9e98f2a992..00279c568f 100644
--- a/mpvcore/resolve_quvi.c
+++ b/mpvcore/resolve_quvi.c
@@ -23,6 +23,17 @@
#include "mpvcore/options.h"
#include "resolve.h"
+static void add_source(struct mp_resolve_result *res, const char *url,
+ const char *encid)
+{
+ struct mp_resolve_src *src = talloc_ptrtype(res, src);
+ *src = (struct mp_resolve_src) {
+ .url = talloc_strdup(src, url),
+ .encid = talloc_strdup(src, encid),
+ };
+ MP_TARRAY_APPEND(res, res->srcs, res->num_srcs, src);
+}
+
struct mp_resolve_result *mp_resolve_quvi(const char *url, struct MPOpts *opts)
{
QUVIcode rc;
@@ -49,14 +60,15 @@ struct mp_resolve_result *mp_resolve_quvi(const char *url, struct MPOpts *opts)
mp_msg(MSGT_OPEN, MSGL_INFO, "[quvi] Checking URL...\n");
+ const char *req_format = opts->quvi_format ? opts->quvi_format : "best";
+
// Can use quvi_query_formats() to get a list of formats like this:
// "fmt05_240p|fmt18_360p|fmt34_360p|fmt35_480p|fmt43_360p|fmt44_480p"
// (This example is youtube specific.)
// That call requires an extra net access. quvi_next_media_url() doesn't
// seem to do anything useful. So we can't really do anything useful
// except pass through the user's format setting.
- quvi_setopt(q, QUVIOPT_FORMAT, opts->quvi_format
- ? opts->quvi_format : "best");
+ quvi_setopt(q, QUVIOPT_FORMAT, req_format);
quvi_media_t m;
rc = quvi_parse(q, (char *)url, &m);
@@ -89,5 +101,11 @@ struct mp_resolve_result *mp_resolve_quvi(const char *url, struct MPOpts *opts)
result = NULL;
}
+ // Useful for quvi-format cycling
+ add_source(result, NULL, "default");
+ add_source(result, NULL, "best");
+ if (strcmp(req_format, "best") != 0 && strcmp(req_format, "default") != 0)
+ add_source(result, NULL, req_format);
+
return result;
}