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 libav-devel@libav.org https://lists.libav.org/mailman/listinfo/libav-devel