X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavformat%2Favformat.h;h=719c23b33c561cde872491baa3dc6484bd775b38;hb=049161fb7c66560ac42c91f2affb6c50d794afcc;hp=339ff5291220dab3afe4b55810032a848c4ffaf1;hpb=39e89f521159474a854927840e5a8cc4350ee587;p=ffmpeg diff --git a/libavformat/avformat.h b/libavformat/avformat.h index 339ff529122..719c23b33c5 100644 --- a/libavformat/avformat.h +++ b/libavformat/avformat.h @@ -1237,6 +1237,8 @@ typedef struct AVChapter { typedef int (*av_format_control_message)(struct AVFormatContext *s, int type, void *data, size_t data_size); +typedef int (*AVOpenCallback)(struct AVFormatContext *s, AVIOContext **pb, const char *url, int flags, + const AVIOInterruptCB *int_cb, AVDictionary **options); /** * The duration of a video can be estimated through various ways, and this enum can be used @@ -1780,6 +1782,23 @@ typedef struct AVFormatContext { * Demuxing: Set by user. */ enum AVCodecID data_codec_id; + + /** + * Called to open further IO contexts when needed for demuxing. + * + * This can be set by the user application to perform security checks on + * the URLs before opening them. + * The function should behave like avio_open2(), AVFormatContext is provided + * as contextual information and to reach AVFormatContext.opaque. + * + * If NULL then some simple checks are used together with avio_open2(). + * + * Must not be accessed directly from outside avformat. + * @See av_format_set_open_cb() + * + * Demuxing: Set by user. + */ + int (*open_cb)(struct AVFormatContext *s, AVIOContext **p, const char *url, int flags, const AVIOInterruptCB *int_cb, AVDictionary **options); } AVFormatContext; int av_format_get_probe_score(const AVFormatContext *s); @@ -1797,6 +1816,8 @@ void * av_format_get_opaque(const AVFormatContext *s); void av_format_set_opaque(AVFormatContext *s, void *opaque); av_format_control_message av_format_get_control_message_cb(const AVFormatContext *s); void av_format_set_control_message_cb(AVFormatContext *s, av_format_control_message callback); +AVOpenCallback av_format_get_open_cb(const AVFormatContext *s); +void av_format_set_open_cb(AVFormatContext *s, AVOpenCallback callback); /** * This function will cause global side data to be injected in the next packet