diff --git a/libavformat/avformat.h b/libavformat/avformat.h index 82d245e688..33e820e4e1 100644 --- a/libavformat/avformat.h +++ b/libavformat/avformat.h @@ -994,6 +994,17 @@ typedef struct AVFormatContext { */ int error_recognition; + /** + * Custom interrupt callbacks for the I/O layer. + * + * decoding: set by the user before avformat_open_input(). + * encoding: set by the user before avformat_write_header() + * (mainly useful for AVFMT_NOFILE formats). The callback + * should also be passed to avio_open2() if it's used to + * open the file. + */ + AVIOInterruptCB interrupt_callback; + /***************************************************************** * All fields below this line are not part of the public API. They * may not be used outside of libavformat and can be changed and diff --git a/libavformat/avio.h b/libavformat/avio.h index be14e3c89d..a4041cb770 100644 --- a/libavformat/avio.h +++ b/libavformat/avio.h @@ -35,6 +35,22 @@ #define AVIO_SEEKABLE_NORMAL 0x0001 /**< Seeking works like for a local file */ +/** + * Callback for checking whether to abort blocking functions. + * AVERROR_EXIT is returned in this case by the interrupted + * function. During blocking operations, callback is called with + * opaque as parameter. If the callback returns 1, the + * blocking operation will be aborted. + * + * No members can be added to this struct without a major bump, if + * new elements have been added after this struct in AVFormatContext + * or AVIOContext. + */ +typedef struct { + int (*callback)(void*); + void *opaque; +} AVIOInterruptCB; + /** * Bytestream IO Context. * New fields can be added to the end with minor version bumps. @@ -109,6 +125,7 @@ typedef struct URLContext { void *priv_data; char *filename; /**< specified URL */ int is_connected; + AVIOInterruptCB interrupt_callback; } URLContext; #define URL_PROTOCOL_FLAG_NESTED_SCHEME 1 /*< The protocol name can be the first part of a nested protocol scheme */ diff --git a/libavformat/url.h b/libavformat/url.h index d69d0bc5c5..c0f532278f 100644 --- a/libavformat/url.h +++ b/libavformat/url.h @@ -42,6 +42,7 @@ typedef struct URLContext { int max_packet_size; /**< if non zero, the stream is packetized with this max packet size */ int is_streamed; /**< true if streamed (no seek possible), default = false */ int is_connected; + AVIOInterruptCB interrupt_callback; } URLContext; typedef struct URLProtocol {