diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h index a38b6307e1..9186bf52f3 100644 --- a/libavcodec/avcodec.h +++ b/libavcodec/avcodec.h @@ -31,7 +31,7 @@ #define LIBAVCODEC_VERSION_MAJOR 52 #define LIBAVCODEC_VERSION_MINOR 84 -#define LIBAVCODEC_VERSION_MICRO 2 +#define LIBAVCODEC_VERSION_MICRO 3 #define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ LIBAVCODEC_VERSION_MINOR, \ @@ -3392,15 +3392,14 @@ void avcodec_align_dimensions(AVCodecContext *s, int *width, int *height); void avcodec_align_dimensions2(AVCodecContext *s, int *width, int *height, int linesize_align[4]); +#if LIBAVCODEC_VERSION_MAJOR < 53 /** - * Check if the given dimension of a picture is valid, meaning that all - * bytes of the picture can be addressed with a signed int. - * - * @param[in] w Width of the picture. - * @param[in] h Height of the picture. - * @return Zero if valid, a negative value if invalid. + * @deprecated Deprecated in favor of av_check_image_size(). */ +attribute_deprecated int avcodec_check_dimensions(void *av_log_ctx, unsigned int w, unsigned int h); +#endif + enum PixelFormat avcodec_default_get_format(struct AVCodecContext *s, const enum PixelFormat * fmt); int avcodec_thread_init(AVCodecContext *s, int thread_count); diff --git a/libavcodec/utils.c b/libavcodec/utils.c index 1d12f69db4..693b7d8f45 100644 --- a/libavcodec/utils.c +++ b/libavcodec/utils.c @@ -213,13 +213,11 @@ void avcodec_align_dimensions(AVCodecContext *s, int *width, int *height){ *width=FFALIGN(*width, align); } +#if LIBAVCODEC_VERSION_MAJOR < 53 int avcodec_check_dimensions(void *av_log_ctx, unsigned int w, unsigned int h){ - if((int)w>0 && (int)h>0 && (w+128)*(uint64_t)(h+128) < INT_MAX/8) - return 0; - - av_log(av_log_ctx, AV_LOG_ERROR, "picture size invalid (%ux%u)\n", w, h); - return AVERROR(EINVAL); + return av_check_image_size(w, h, 0, av_log_ctx); } +#endif int avcodec_default_get_buffer(AVCodecContext *s, AVFrame *pic){ int i; diff --git a/libavcore/avcore.h b/libavcore/avcore.h index 5ddb6167aa..cba074ec54 100644 --- a/libavcore/avcore.h +++ b/libavcore/avcore.h @@ -27,7 +27,7 @@ #include #define LIBAVCORE_VERSION_MAJOR 0 -#define LIBAVCORE_VERSION_MINOR 2 +#define LIBAVCORE_VERSION_MINOR 3 #define LIBAVCORE_VERSION_MICRO 0 #define LIBAVCORE_VERSION_INT AV_VERSION_INT(LIBAVCORE_VERSION_MAJOR, \ diff --git a/libavcore/imgutils.c b/libavcore/imgutils.c index 54c10d2d45..350caed3c1 100644 --- a/libavcore/imgutils.c +++ b/libavcore/imgutils.c @@ -95,3 +95,22 @@ int av_fill_image_pointers(uint8_t *data[4], enum PixelFormat pix_fmt, int heigh return total_size; } + +typedef struct ImgUtils { + const AVClass *class; + int log_offset; + void *log_ctx; +} ImgUtils; + +static const AVClass imgutils_class = { "IMGUTILS", av_default_item_name, NULL, LIBAVUTIL_VERSION_INT, offsetof(ImgUtils, log_offset), offsetof(ImgUtils, log_ctx) }; + +int av_check_image_size(unsigned int w, unsigned int h, int log_offset, void *log_ctx) +{ + ImgUtils imgutils = { &imgutils_class, log_offset, log_ctx }; + + if((int)w>0 && (int)h>0 && (w+128)*(uint64_t)(h+128) < INT_MAX/8) + return 0; + + av_log(&imgutils, AV_LOG_ERROR, "picture size invalid (%ux%u)\n", w, h); + return AVERROR(EINVAL); +} diff --git a/libavcore/imgutils.h b/libavcore/imgutils.h index 4a4d6a1521..be6886c38e 100644 --- a/libavcore/imgutils.h +++ b/libavcore/imgutils.h @@ -50,4 +50,16 @@ int av_fill_image_linesizes(int linesizes[4], enum PixelFormat pix_fmt, int widt int av_fill_image_pointers(uint8_t *data[4], enum PixelFormat pix_fmt, int height, uint8_t *ptr, const int linesizes[4]); +/** + * Check if the given dimension of an image is valid, meaning that all + * bytes of the image can be addressed with a signed int. + * + * @param w the width of the picture + * @param h the height of the picture + * @param log_offset the offset to sum to the log level for logging with log_ctx + * @param log_ctx the parent logging context, it may be NULL + * @return >= 0 if valid, a negative error code otherwise + */ +int av_check_image_size(unsigned int w, unsigned int h, int log_offset, void *log_ctx); + #endif /* AVCORE_IMGUTILS_H */