/*
* This file is part of mpv.
*
* mpv is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* mpv 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with mpv. If not, see .
*/
#pragma once
#include
#include "config.h"
#include
struct mpv_global;
struct demuxer;
// Initialize libcurl state, must be called before stream_curl is used.
void mp_curl_global_init(struct mpv_global *global);
// Open `url` via mpv's libcurl backend and wrap it as a fresh AVIOContext.
// On success returns 0, fills *pb_out with the new context, and sets *data to
// an opaque handle that must later be passed to mp_curl_avio_close() to
// release all associated resources.
// Returns AVERROR(ENOSYS) when this backend doesn't handle the URL.
// Returns AVERROR(EINVAL) when the URL's protocol is rejected by
// `whitelist`/`blacklist`.
// `flags` is the AVIO_FLAG_* mask passed to AVFormatContext.io_open.
// If `options` has `protocol_whitelist` or `protocol_blacklist` entries they
// override the explicit `whitelist`/`blacklist` arguments (same as FFmpeg).
int mp_curl_avio_open(struct demuxer *demuxer, AVIOContext **pb_out,
void **data, const char *url, int flags,
AVDictionary **options,
const char *whitelist, const char *blacklist);
// Tear down an AVIOContext previously produced by mp_curl_avio_open().
void mp_curl_avio_close(AVIOContext *pb, void *data);