summaryrefslogtreecommitdiffstats
path: root/stream
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2012-10-13 17:09:35 +0200
committerwm4 <wm4@nowhere>2012-10-14 22:26:41 +0200
commita19f197cb14a0ceec4bc1fe977502b8f8ab8f94e (patch)
treeb4de459e097301d352b6a46e5086c51dfd682231 /stream
parent9dfcd3e9a24a2d88578909233e2db24863f27b89 (diff)
downloadmpv-a19f197cb14a0ceec4bc1fe977502b8f8ab8f94e.tar.bz2
mpv-a19f197cb14a0ceec4bc1fe977502b8f8ab8f94e.tar.xz
core: show quvi page title in window title, clean up libquvi handling
Clean up handling of libquvi (which resolves URLs of streaming sites into URLs to the actual media playable by mpv). Move the code out of open.c to quvi.c, and invoke it explicitly from mplayer.c, instead of trying to resolve every filename passed to open_stream(). This allows easily passing metadata from the quvi context to the frontend. Expose QUVIPROP_PAGETITLE as "media-title" property, and use that instead of "filename" for the mplayer window title. (For YouTube, this is the video title.) It's cleaner too. Handle a potential reliability issue: check quvi_getprop return values. Since open.c contains barely anything but the open_stream() stub, move that to stream.c and delete open.c.
Diffstat (limited to 'stream')
-rw-r--r--stream/open.c132
-rw-r--r--stream/stream.c24
2 files changed, 24 insertions, 132 deletions
diff --git a/stream/open.c b/stream/open.c
deleted file mode 100644
index 91e9ae2956..0000000000
--- a/stream/open.c
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- * This file is part of MPlayer.
- *
- * MPlayer is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * MPlayer is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with MPlayer; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- */
-
-#include <ctype.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <string.h>
-
-#include "config.h"
-#include "mp_msg.h"
-#include "talloc.h"
-
-#ifdef __FreeBSD__
-#include <sys/cdrio.h>
-#endif
-
-#include "m_option.h"
-#include "options.h"
-#include "stream.h"
-#include "libmpdemux/demuxer.h"
-
-
-/// We keep these 2 for the gui atm, but they will be removed.
-int vcd_track=0;
-char* cdrom_device=NULL;
-char* dvd_device=NULL;
-int dvd_title=0;
-
-#ifdef CONFIG_LIBQUVI
-
-#include <quvi/quvi.h>
-
-static const char *resolve_quvi(const char *url, struct MPOpts *opts)
-{
- char *media_title, *media_url;
- quvi_media_t m;
- QUVIcode rc;
- quvi_t q;
-
- rc = quvi_init(&q);
- if (rc != QUVI_OK)
- return NULL;
-
- // Don't try to use quvi on an URL that's not directly supported, since
- // quvi will do a network access anyway in order to check for HTTP
- // redirections etc.
- // The documentation says this will fail on "shortened" URLs.
- if (quvi_supported(q, (char *)url) != QUVI_OK) {
- quvi_close(&q);
- return NULL;
- }
-
- mp_msg(MSGT_OPEN, MSGL_INFO, "[quvi] Checking URL...\n");
-
- // 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");
-
- rc = quvi_parse(q, (char *)url, &m);
- if (rc != QUVI_OK) {
- mp_msg(MSGT_OPEN, MSGL_ERR, "[quvi] %s\n", quvi_strerror(q, rc));
- quvi_close(&q);
- return NULL;
- }
-
- quvi_getprop(m, QUVIPROP_PAGETITLE, &media_title);
- quvi_getprop(m, QUVIPROP_MEDIAURL, &media_url);
-
- mp_msg(MSGT_OPEN, MSGL_INFO, "[quvi] Site media title: '%s'\n",
- media_title);
- media_url = talloc_strdup(NULL, media_url);
-
- quvi_parse_close(&m);
- quvi_close(&q);
-
- return media_url;
-}
-#endif
-
-// Open a new stream (stdin/file/vcd/url)
-
-stream_t* open_stream(const char *filename, struct MPOpts *options,
- int *file_format)
-{
- if (!file_format)
- file_format = &(int){DEMUXER_TYPE_UNKNOWN};
- // Check if playlist or unknown
- if (*file_format != DEMUXER_TYPE_PLAYLIST){
- *file_format=DEMUXER_TYPE_UNKNOWN;
- }
-
-if(!filename) {
- mp_msg(MSGT_OPEN,MSGL_ERR,"NULL filename, report this bug\n");
- return NULL;
-}
-
- const char *resolved = NULL;
-
-#ifdef CONFIG_LIBQUVI
- resolved = resolve_quvi(filename, options);
-#endif
-
- if (resolved)
- filename = resolved;
-
- stream_t *res = open_stream_full(filename,STREAM_READ,options,file_format);
- talloc_free((void *)resolved);
- return res;
-}
diff --git a/stream/stream.c b/stream/stream.c
index d7500cc790..ab0039e581 100644
--- a/stream/stream.c
+++ b/stream/stream.c
@@ -53,6 +53,12 @@
#include "cache2.h"
+/// We keep these 2 for the gui atm, but they will be removed.
+int vcd_track=0;
+char* cdrom_device=NULL;
+char* dvd_device=NULL;
+int dvd_title=0;
+
struct input_ctx;
static int (*stream_check_interrupt_cb)(struct input_ctx *ctx, int time);
static struct input_ctx *stream_check_interrupt_ctx;
@@ -199,6 +205,12 @@ stream_t *open_stream_full(const char *filename, int mode,
stream_t* s;
char *redirected_url = NULL;
+ int dummy;
+ if (!file_format)
+ file_format = &dummy;
+
+ *file_format = DEMUXER_TYPE_UNKNOWN;
+
for(i = 0 ; auto_open_streams[i] ; i++) {
sinfo = auto_open_streams[i];
if(!sinfo->protocols) {
@@ -235,6 +247,18 @@ stream_t *open_stream_full(const char *filename, int mode,
return NULL;
}
+stream_t* open_stream(const char *filename, struct MPOpts *options,
+ int *file_format)
+{
+
+if(!filename) {
+ mp_msg(MSGT_OPEN,MSGL_ERR,"NULL filename, report this bug\n");
+ return NULL;
+}
+
+ return open_stream_full(filename,STREAM_READ,options,file_format);
+}
+
stream_t *open_output_stream(const char *filename, struct MPOpts *options)
{
int file_format; //unused