lavc: add an option to enable side data-only packets during encoding
authorAnton Khirnov <anton@khirnov.net>
Tue, 29 Apr 2014 13:06:45 +0000 (15:06 +0200)
committerAnton Khirnov <anton@khirnov.net>
Sun, 1 Jun 2014 06:26:43 +0000 (08:26 +0200)
Some encoders (e.g. flac) need to send side data when there is no more
data to be output. This enables them to output a packet with no data in
it, only side data.

doc/APIchanges
libavcodec/avcodec.h
libavcodec/options_table.h
libavcodec/version.h

index 367f8e1dd386c47b24152489ec6685cef56730ab..952ee51556baa6cf9911d718115da4406e3efcf6 100644 (file)
@@ -13,6 +13,11 @@ libavutil:     2013-12-xx
 
 API changes, most recent first:
 
+2014-04-xx - xxxxxxx - lavc 55.54.0 - avcodec.h
+  Add AVCodecContext.side_data_only_packets to allow encoders to output packets
+  with only side data. This option may become mandatory in the future, so all
+  users are recommended to update their code and enable this option.
+
 2014-xx-xx - xxxxxxx - lavu 53.16.0 - frame.h, pixfmt.h
   Move all color-related enums (AVColorPrimaries, AVColorSpace, AVColorRange,
   AVColorTransferCharacteristic, and AVChromaLocation) inside lavu.
index 431041940a1b687cd16bb2f5180e73303c979718..0396ea5614d06d87f5af54023fc0830a44b17426 100644 (file)
@@ -2730,6 +2730,21 @@ typedef struct AVCodecContext {
      * - decoding: unused.
      */
     uint64_t vbv_delay;
+
+    /**
+     * Encoding only. Allow encoders to output packets that do not contain any
+     * encoded data, only side data.
+     *
+     * Some encoders need to output such packets, e.g. to update some stream
+     * parameters at the end of encoding.
+     *
+     * All callers are strongly recommended to set this option to 1 and update
+     * their code to deal with such packets, since this behaviour may become
+     * always enabled in the future (then this option will be deprecated and
+     * later removed). To avoid ABI issues when this happens, the callers should
+     * use AVOptions to set this field.
+     */
+    int side_data_only_packets;
 } AVCodecContext;
 
 /**
index 6825e6274a89041ec7ccddbe43f9afeb45b46298..f018b214d7c7c073ae48cd8cd81574e45cf9a082 100644 (file)
@@ -399,6 +399,7 @@ static const AVOption avcodec_options[] = {
 {"fltp", "32-bit float planar",           0, AV_OPT_TYPE_CONST, {.i64 = AV_SAMPLE_FMT_FLTP }, INT_MIN, INT_MAX, A|D, "request_sample_fmt"},
 {"dblp", "64-bit double planar",          0, AV_OPT_TYPE_CONST, {.i64 = AV_SAMPLE_FMT_DBLP }, INT_MIN, INT_MAX, A|D, "request_sample_fmt"},
 {"refcounted_frames", NULL, OFFSET(refcounted_frames), AV_OPT_TYPE_INT, {.i64 = 0}, 0, 1, A|V|D },
+{"side_data_only_packets", NULL, OFFSET(side_data_only_packets), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 1, A|V|E },
 {NULL},
 };
 
index d72f8eddfabab5e2dee329bb547b28a3a90da720..c02540a7e251db1f4af7666c3ec06a940e6497af 100644 (file)
@@ -29,7 +29,7 @@
 #include "libavutil/version.h"
 
 #define LIBAVCODEC_VERSION_MAJOR 55
-#define LIBAVCODEC_VERSION_MINOR 53
+#define LIBAVCODEC_VERSION_MINOR 54
 #define LIBAVCODEC_VERSION_MICRO  0
 
 #define LIBAVCODEC_VERSION_INT  AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \