diff options
author | Vittorio Giovara <vittorio.giovara@gmail.com> | 2015-10-14 11:33:28 +0200 |
---|---|---|
committer | Vittorio Giovara <vittorio.giovara@gmail.com> | 2015-10-22 13:32:15 +0200 |
commit | dca23ffbc7568c9af5c5fbaa86e6a0761ecae50c (patch) | |
tree | af7dc53eee966b592c4d01c17675b51e4d293dc2 | |
parent | 3ee2c60cc296eee3f63d7b5fee9b4332eeeac9fa (diff) | |
download | ffmpeg-dca23ffbc7568c9af5c5fbaa86e6a0761ecae50c.tar.gz |
lavc: Deprecate AVPicture structure and related functions
This structure served as a bridge between data pointers and frames,
but it suffers from several limitations:
- it is not refcounted and data must be copied to every time
- it cannot be expanded without ABI break due to being used on the stack
- its functions are just wrappers to imgutils which add a layer of
unneeded indirection, and maintenance burden
- it allows hacks like embedding uncompressed data in packets
- its use is often confusing to our users
AVFrame provides a much better API, and, if a full blown frame is not
needed, it is just as simple and more straightfoward to use data and
linesize arrays directly.
Signed-off-by: Vittorio Giovara <vittorio.giovara@gmail.com>
-rw-r--r-- | libavcodec/avcodec.h | 50 | ||||
-rw-r--r-- | libavcodec/avpicture.c | 3 | ||||
-rw-r--r-- | libavcodec/imgconvert.c | 2 |
3 files changed, 25 insertions, 30 deletions
diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h index 42f90d5c70..0876343862 100644 --- a/libavcodec/avcodec.h +++ b/libavcodec/avcodec.h @@ -3165,6 +3165,7 @@ typedef struct AVHWAccel { * @} */ +#if FF_API_AVPICTURE /** * @defgroup lavc_picture AVPicture * @@ -3176,6 +3177,7 @@ typedef struct AVHWAccel { * four components are given, that's all. * the last component is alpha */ +attribute_deprecated typedef struct AVPicture { uint8_t *data[AV_NUM_DATA_POINTERS]; int linesize[AV_NUM_DATA_POINTERS]; ///< number of bytes per line @@ -3184,6 +3186,7 @@ typedef struct AVPicture { /** * @} */ +#endif #define AVPALETTE_SIZE 1024 #define AVPALETTE_COUNT 256 @@ -4132,81 +4135,70 @@ int avcodec_encode_subtitle(AVCodecContext *avctx, uint8_t *buf, int buf_size, * @} */ +#if FF_API_AVPICTURE /** * @addtogroup lavc_picture * @{ */ /** - * Allocate memory for a picture. Call avpicture_free() to free it. - * - * @see avpicture_fill() - * - * @param picture the picture to be filled in - * @param pix_fmt the format of the picture - * @param width the width of the picture - * @param height the height of the picture - * @return zero if successful, a negative value if not + * @deprecated unused */ +attribute_deprecated int avpicture_alloc(AVPicture *picture, enum AVPixelFormat pix_fmt, int width, int height); /** - * Free a picture previously allocated by avpicture_alloc(). - * The data buffer used by the AVPicture is freed, but the AVPicture structure - * itself is not. - * - * @param picture the AVPicture to be freed + * @deprecated unused */ +attribute_deprecated void avpicture_free(AVPicture *picture); /** - * Fill in the AVPicture fields, always assume a linesize alignment of 1. - * - * @see av_image_fill_arrays(). + * @deprecated use av_image_fill_arrays() instead. */ +attribute_deprecated int avpicture_fill(AVPicture *picture, uint8_t *ptr, enum AVPixelFormat pix_fmt, int width, int height); /** - * Copy pixel data from an AVPicture into a buffer, always assume a - * linesize alignment of 1. - * - * @see av_image_copy_to_buffer(). + * @deprecated use av_image_copy_to_buffer() instead. */ +attribute_deprecated int avpicture_layout(const AVPicture* src, enum AVPixelFormat pix_fmt, int width, int height, unsigned char *dest, int dest_size); /** - * Calculate the size in bytes that a picture of the given width and height - * would occupy if stored in the given picture format. - * Always assume a linesize alignment of 1. - * - * @see av_image_get_buffer_size(). + * @deprecated use av_image_get_buffer_size() instead. */ +attribute_deprecated int avpicture_get_size(enum AVPixelFormat pix_fmt, int width, int height); /** - * Copy image src to dst. Wraps av_picture_data_copy() above. + * @deprecated av_image_copy() instead. */ +attribute_deprecated void av_picture_copy(AVPicture *dst, const AVPicture *src, enum AVPixelFormat pix_fmt, int width, int height); /** - * Crop image top and left side. + * @deprecated unused */ +attribute_deprecated int av_picture_crop(AVPicture *dst, const AVPicture *src, enum AVPixelFormat pix_fmt, int top_band, int left_band); /** - * Pad image. + * @deprecated unused */ +attribute_deprecated int av_picture_pad(AVPicture *dst, const AVPicture *src, int height, int width, enum AVPixelFormat pix_fmt, int padtop, int padbottom, int padleft, int padright, int *color); /** * @} */ +#endif /** * @defgroup lavc_misc Utility functions diff --git a/libavcodec/avpicture.c b/libavcodec/avpicture.c index 6bde0f8445..eaa5c2614e 100644 --- a/libavcodec/avpicture.c +++ b/libavcodec/avpicture.c @@ -31,6 +31,7 @@ #include "libavutil/imgutils.h" #include "libavutil/colorspace.h" +#if FF_API_AVPICTURE int avpicture_fill(AVPicture *picture, uint8_t *ptr, enum AVPixelFormat pix_fmt, int width, int height) { @@ -76,4 +77,4 @@ void av_picture_copy(AVPicture *dst, const AVPicture *src, av_image_copy(dst->data, dst->linesize, src->data, src->linesize, pix_fmt, width, height); } - +#endif /* FF_API_AVPICTURE */ diff --git a/libavcodec/imgconvert.c b/libavcodec/imgconvert.c index 53e7df810a..55a9213a92 100644 --- a/libavcodec/imgconvert.c +++ b/libavcodec/imgconvert.c @@ -252,6 +252,7 @@ static inline int is_yuv_planar(const AVPixFmtDescriptor *desc) (desc->flags & AV_PIX_FMT_FLAG_PLANAR)); } +#if FF_API_AVPICTURE int av_picture_crop(AVPicture *dst, const AVPicture *src, enum AVPixelFormat pix_fmt, int top_band, int left_band) { @@ -335,3 +336,4 @@ int av_picture_pad(AVPicture *dst, const AVPicture *src, int height, int width, } return 0; } +#endif /* FF_API_AVPICTURE */ |