hls: read protocol options through the AVIOContext
authorHendrik Leppkes <h.leppkes@gmail.com>
Mon, 14 Mar 2016 10:38:20 +0000 (11:38 +0100)
committerHendrik Leppkes <h.leppkes@gmail.com>
Wed, 16 Mar 2016 09:31:36 +0000 (10:31 +0100)
This reverts commit 9f9ed79d4cb40e5d9093899f8a79086ff23da844.

The hlsopts member was never set anywhere and always NULL, furthermore
the HLS demuxer needs to retrieve the proper options from the underlying
http protocol (cookies, user-agent, etc), so a dummy context won't help.

Instead, use the AVIOContext directly to access the options.

libavformat/avio_internal.h
libavformat/aviobuf.c
libavformat/hls.c

index ba9bd4e2a478dea9d91803bb9299c31d3e786c0c..3867be6e97b73eee4970172c152d0245d8bf047a 100644 (file)
 
 #include "libavutil/log.h"
 
-typedef struct AVIOInternal {
-    URLContext *h;
-    void *hlsopts;
-} AVIOInternal;
-
 extern const AVClass ff_avio_class;
 
 int ffio_init_context(AVIOContext *s,
index 00f7c5a18018fa441f9edb3afce2068f01dae206..f2f03f639f6bc74aac8e8c443fea31b1ea04411f 100644 (file)
  */
 #define SHORT_SEEK_THRESHOLD 4096
 
+typedef struct AVIOInternal {
+    URLContext *h;
+} AVIOInternal;
+
 static void *ff_avio_child_next(void *obj, void *prev)
 {
     AVIOContext *s = obj;
index 61ab5c843509f6001d10ecb0ff11db83246d6da3..714d1e0e9a761958c7205cdf1453db71d781b63e 100644 (file)
@@ -584,7 +584,7 @@ static int ensure_playlist(HLSContext *c, struct playlist **pls, const char *url
 static void update_options(char **dest, const char *name, void *src)
 {
     av_freep(dest);
-    av_opt_get(src, name, 0, (uint8_t**)dest);
+    av_opt_get(src, name, AV_OPT_SEARCH_CHILDREN, (uint8_t**)dest);
     if (*dest && !strlen(*dest))
         av_freep(dest);
 }
@@ -614,8 +614,7 @@ static int open_url(AVFormatContext *s, AVIOContext **pb, const char *url,
     ret = s->io_open(s, pb, url, AVIO_FLAG_READ, &tmp);
     if (ret >= 0) {
         // update cookies on http response with setcookies.
-        AVIOInternal *internal = (s->flags & AVFMT_FLAG_CUSTOM_IO) ? NULL : s->pb->opaque;
-        void *u = internal ? internal->hlsopts : NULL;
+        void *u = (s->flags & AVFMT_FLAG_CUSTOM_IO) ? NULL : s->pb;
         update_options(&c->cookies, "cookies", u);
         av_dict_set(&opts, "cookies", c->cookies, 0);
     }
@@ -1497,8 +1496,7 @@ static int nested_io_open(AVFormatContext *s, AVIOContext **pb, const char *url,
 
 static int hls_read_header(AVFormatContext *s)
 {
-    AVIOInternal *internal = (s->flags & AVFMT_FLAG_CUSTOM_IO) ? NULL : s->pb->opaque;
-    void *u = internal ? internal->hlsopts : NULL;
+    void *u = (s->flags & AVFMT_FLAG_CUSTOM_IO) ? NULL : s->pb;
     HLSContext *c = s->priv_data;
     int ret = 0, i, j, stream_offset = 0;