Because not every side data is handled or extracted
internally by libav, a libavcodec user might need
to attach some extradata and retrieve it in
presentation order after decoding.
Ex: active format data,
unhandled closed captions format
---
libavcodec/avcodec.h | 7 +++++++
libavcodec/utils.c | 1 +
libavfilter/vf_showinfo.c | 3 +++
libavformat/dump.c | 3 +++
libavutil/frame.h | 8 ++++++++
5 files changed, 22 insertions(+)
diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h
index 167525d..8e5408b 100644
--- a/libavcodec/avcodec.h
+++ b/libavcodec/avcodec.h
@@ -1289,6 +1289,13 @@ enum AVPacketSideDataType {
* This side data corresponds to the AVCPBProperties struct.
*/
AV_PKT_DATA_CPB_PROPERTIES,
+
+ /**
+ * This side data format is free to the user.
+ * It will be accessible through AV_FRAME_DATA_CUSTOM on
+ * a corresponding frame in presentation order after decoding.
+ */
+ AV_PKT_DATA_CUSTOM,
};
typedef struct AVPacketSideData {
diff --git a/libavcodec/utils.c b/libavcodec/utils.c
index 837edbd..fd05d17 100644
--- a/libavcodec/utils.c
+++ b/libavcodec/utils.c
@@ -543,6 +543,7 @@ int ff_decode_frame_props(AVCodecContext *avctx, AVFrame
*frame)
{ AV_PKT_DATA_DISPLAYMATRIX, AV_FRAME_DATA_DISPLAYMATRIX },
{ AV_PKT_DATA_STEREO3D, AV_FRAME_DATA_STEREO3D },
{ AV_PKT_DATA_AUDIO_SERVICE_TYPE, AV_FRAME_DATA_AUDIO_SERVICE_TYPE },
+ { AV_PKT_DATA_CUSTOM, AV_FRAME_DATA_CUSTOM },
};
frame->color_primaries = avctx->color_primaries;
diff --git a/libavfilter/vf_showinfo.c b/libavfilter/vf_showinfo.c
index 204ff7a..4bdb3ca 100644
--- a/libavfilter/vf_showinfo.c
+++ b/libavfilter/vf_showinfo.c
@@ -127,6 +127,9 @@ static int filter_frame(AVFilterLink *inlink, AVFrame
*frame)
case AV_FRAME_DATA_AFD:
av_log(ctx, AV_LOG_INFO, "afd: value of %"PRIu8, sd->data[0]);
break;
+ case AV_FRAME_DATA_CUSTOM:
+ av_log(ctx, AV_LOG_INFO, "custom unknown side data");
+ break;
default:
av_log(ctx, AV_LOG_WARNING, "unknown side data type %d (%d bytes)",
sd->type, sd->size);
diff --git a/libavformat/dump.c b/libavformat/dump.c
index 3b50f5d..9891c4c 100644
--- a/libavformat/dump.c
+++ b/libavformat/dump.c
@@ -354,6 +354,9 @@ static void dump_sidedata(void *ctx, AVStream *st, const
char *indent)
av_log(ctx, AV_LOG_INFO, "cpb: ");
dump_cpb(ctx, &sd);
break;
+ case AV_PKT_DATA_CUSTOM:
+ av_log(ctx, AV_LOG_INFO, "custom unknown side data");
+ break;
default:
av_log(ctx, AV_LOG_WARNING,
"unknown side data type %d (%d bytes)", sd.type, sd.size);
diff --git a/libavutil/frame.h b/libavutil/frame.h
index 12624d7..f6a365e 100644
--- a/libavutil/frame.h
+++ b/libavutil/frame.h
@@ -92,6 +92,14 @@ enum AVFrameSideDataType {
* enum AVAudioServiceType defined in avcodec.h.
*/
AV_FRAME_DATA_AUDIO_SERVICE_TYPE,
+
+ /**
+ * This side data corresponds to the custom/private data passed to the
decoder
+ * through AV_PKT_DATA_CUSTOM. It allows to stick custom data to a
compressed
+ * frame and receive it in presentation order after decoding.
+ * It is not used by the library itself.
+ */
+ AV_FRAME_DATA_CUSTOM,
};
enum AVActiveFormatDescription {
--
2.7.4
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel