On Thu, 6 Apr 2017 22:48:59 -0400 Micah Galizia <micahgali...@gmail.com> wrote:
> Signed-off-by: Micah Galizia <micahgali...@gmail.com> > --- > libavformat/hls.c | 10 ++++++++-- > 1 file changed, 8 insertions(+), 2 deletions(-) > > diff --git a/libavformat/hls.c b/libavformat/hls.c > index bac53a4..ab81863 100644 > --- a/libavformat/hls.c > +++ b/libavformat/hls.c > @@ -630,8 +630,14 @@ 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. > - void *u = (s->flags & AVFMT_FLAG_CUSTOM_IO) ? NULL : s->pb; > - update_options(&c->cookies, "cookies", u); > + char *new_cookies = NULL; > + > + av_opt_get(*pb, "cookies", AV_OPT_SEARCH_CHILDREN, > (uint8_t**)&new_cookies); > + if (new_cookies) { > + av_free(c->cookies); > + c->cookies = new_cookies; > + } > + > av_dict_set(&opts, "cookies", c->cookies, 0); > } > So far, all code is doing the same thing by calling update_options() on pb, or NULL if it's a custom IO context. What you seem to change is always using the pb (even if it's a custom context), duplicating the update_options() code (subtly changing some corner case behavior), and, this is probably the important one, you use *pb instead of s->pb. I suspect the latter is the only change that matters, and you probably want: void *u = (s->flags & AVFMT_FLAG_CUSTOM_IO) ? NULL : *pb; Now I have no idea why it checks "s->flags & AVFMT_FLAG_CUSTOM_IO", or what it means, but it feels very wrong. A common case is probably that the main playlist is accessed through a custom AVIOContext, but further nested playlists or actual .ts data probably use libavformat's code. I'm thinking that all uses of AVFMT_FLAG_CUSTOM_IO anywhere are probably bugs. _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel