Hi all, due to the recent addition of pict_type in libavfilter/AVFilterBufferRefVideoProps, it makes sense to propose this change.
This breaks ABI as it redefines the previous values (since the first symbol will have a value of 0 rather than 1, consistent with enum definitions and allows the AV_*_NB trick).
>From 0a2a358d0980792b1897a46933269f8d484d199f Mon Sep 17 00:00:00 2001 From: Stefano Sabatini <[email protected]> Date: Sat, 23 Apr 2011 13:38:50 +0200 Subject: [PATCH] lavu: deprecate FF_*_TYPE macros in favor of AV_PICTURE_TYPE_* enums Also deprecate av_get_pict_type_char() in favor of av_get_picture_type_char(). The new enums and av_get_picture_type_char() are defined in libavutil. This allows the use in libavfilter without the need to link against libavcodec. Breaks ABI. Signed-off-by: Stefano Sabatini <[email protected]> --- libavcodec/avcodec.h | 20 +++++++++++--------- libavcodec/utils.c | 11 +---------- libavfilter/avfilter.h | 2 +- libavutil/avutil.h | 20 ++++++++++++++++++++ libavutil/utils.c | 14 ++++++++++++++ 5 files changed, 47 insertions(+), 20 deletions(-) diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h index 10866a1..994a334 100644 --- a/libavcodec/avcodec.h +++ b/libavcodec/avcodec.h @@ -766,7 +766,7 @@ typedef struct AVPanScan{ * - encoding: Set by libavcodec. for coded_picture (and set by user for input).\ * - decoding: Set by libavcodec.\ */\ - int pict_type;\ + enum AVPictureType pict_type;\ \ /**\ * presentation timestamp in time_base units (time when frame should be shown to user)\ @@ -1016,14 +1016,14 @@ typedef struct AVPanScan{ #define FF_BUFFER_TYPE_SHARED 4 ///< Buffer from somewhere else; don't deallocate image (data/base), all other tables are not shared. #define FF_BUFFER_TYPE_COPY 8 ///< Just a (modified) copy of some other buffer, don't deallocate anything. - -#define FF_I_TYPE 1 ///< Intra -#define FF_P_TYPE 2 ///< Predicted -#define FF_B_TYPE 3 ///< Bi-dir predicted -#define FF_S_TYPE 4 ///< S(GMC)-VOP MPEG4 -#define FF_SI_TYPE 5 ///< Switching Intra -#define FF_SP_TYPE 6 ///< Switching Predicted -#define FF_BI_TYPE 7 +/* DEPRECATED, directly use AV_PICTURE_TYPE_* enums */ +#define FF_I_TYPE AV_PICTURE_TYPE_I ///< Intra +#define FF_P_TYPE AV_PICTURE_TYPE_P ///< Predicted +#define FF_B_TYPE AV_PICTURE_TYPE_B ///< Bi-dir predicted +#define FF_S_TYPE AV_PICTURE_TYPE_S ///< S(GMC)-VOP MPEG4 +#define FF_SI_TYPE AV_PICTURE_TYPE_SI ///< Switching Intra +#define FF_SP_TYPE AV_PICTURE_TYPE_SP ///< Switching Predicted +#define FF_BI_TYPE AV_PICTURE_TYPE_BI #define FF_BUFFER_HINTS_VALID 0x01 // Buffer hints value is meaningful (if 0 ignore). #define FF_BUFFER_HINTS_READABLE 0x02 // Codec will read from buffer. @@ -3863,7 +3863,9 @@ void avcodec_default_free_buffers(AVCodecContext *s); * * @param[in] pict_type the picture type * @return A single character representing the picture type. + * @deprecated use av_get_picture_type_char() instead */ +attribute_deprecated char av_get_pict_type_char(int pict_type); /** diff --git a/libavcodec/utils.c b/libavcodec/utils.c index d6b71b4..41356e1 100644 --- a/libavcodec/utils.c +++ b/libavcodec/utils.c @@ -1106,16 +1106,7 @@ void avcodec_default_free_buffers(AVCodecContext *s){ } char av_get_pict_type_char(int pict_type){ - switch(pict_type){ - case FF_I_TYPE: return 'I'; - case FF_P_TYPE: return 'P'; - case FF_B_TYPE: return 'B'; - case FF_S_TYPE: return 'S'; - case FF_SI_TYPE:return 'i'; - case FF_SP_TYPE:return 'p'; - case FF_BI_TYPE:return 'b'; - default: return '?'; - } + return av_get_picture_type_char(pict_type); } int av_get_bits_per_sample(enum CodecID codec_id){ diff --git a/libavfilter/avfilter.h b/libavfilter/avfilter.h index 6525f57..55d3b55 100644 --- a/libavfilter/avfilter.h +++ b/libavfilter/avfilter.h @@ -115,7 +115,7 @@ typedef struct AVFilterBufferRefVideoProps { AVRational pixel_aspect; ///< pixel aspect ratio int interlaced; ///< is frame interlaced int top_field_first; ///< field order - int pict_type; ///< Picture type of the frame + enum AVPictureType pict_type; ///< picture type of the frame int key_frame; ///< 1 -> keyframe, 0-> not } AVFilterBufferRefVideoProps; diff --git a/libavutil/avutil.h b/libavutil/avutil.h index 307a585..2883d0e 100644 --- a/libavutil/avutil.h +++ b/libavutil/avutil.h @@ -97,6 +97,26 @@ enum AVMediaType { #define AV_TIME_BASE 1000000 #define AV_TIME_BASE_Q (AVRational){1, AV_TIME_BASE} +enum AVPictureType { + AV_PICTURE_TYPE_I = 0, ///< Intra + AV_PICTURE_TYPE_P, ///< Predicted + AV_PICTURE_TYPE_B, ///< Bi-dir predicted + AV_PICTURE_TYPE_S, ///< S(GMC)-VOP MPEG4 + AV_PICTURE_TYPE_SI, ///< Switching Intra + AV_PICTURE_TYPE_SP, ///< Switching Predicted + AV_PICTURE_TYPE_BI, ///< BI type + AV_PICTURE_TYPE_NB, ///< number of picture types, DO NOT USE THIS if you want to link with shared libav* because the number of formats might differ between versions +}; + +/** + * Return a single letter to describe the given picture type + * pict_type. + * + * @param[in] pict_type the picture type @return a single character + * representing the picture type, '?' if pict_type is unknown + */ +char av_get_picture_type_char(enum AVPictureType pict_type); + #include "common.h" #include "error.h" #include "mathematics.h" diff --git a/libavutil/utils.c b/libavutil/utils.c index 8a1d32e..c77a060 100644 --- a/libavutil/utils.c +++ b/libavutil/utils.c @@ -39,3 +39,17 @@ const char *avutil_license(void) #define LICENSE_PREFIX "libavutil license: " return LICENSE_PREFIX FFMPEG_LICENSE + sizeof(LICENSE_PREFIX) - 1; } + +char av_get_picture_type_char(enum AVPictureType pict_type) +{ + switch (pict_type) { + case AV_PICTURE_TYPE_I: return 'I'; + case AV_PICTURE_TYPE_P: return 'P'; + case AV_PICTURE_TYPE_B: return 'B'; + case AV_PICTURE_TYPE_S: return 'S'; + case AV_PICTURE_TYPE_SI: return 'i'; + case AV_PICTURE_TYPE_SP: return 'p'; + case AV_PICTURE_TYPE_BI: return 'b'; + default: return '?'; + } +} -- 1.7.2.3
_______________________________________________ libav-devel mailing list [email protected] https://lists.libav.org/mailman/listinfo/libav-devel
