summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libavformat/avformat.h11
-rw-r--r--libavformat/avio.h17
-rw-r--r--libavformat/url.h1
3 files changed, 29 insertions, 0 deletions
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
@@ -36,6 +36,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.
* Removal, reordering and changes to existing fields require a major
@@ -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 {