|
|
|
@ -248,19 +248,38 @@ static const AVClass imgutils_class = { |
|
|
|
|
.parent_log_context_offset = offsetof(ImgUtils, log_ctx), |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
int av_image_check_size(unsigned int w, unsigned int h, int log_offset, void *log_ctx) |
|
|
|
|
int av_image_check_size2(unsigned int w, unsigned int h, int64_t max_pixels, enum AVPixelFormat pix_fmt, int log_offset, void *log_ctx) |
|
|
|
|
{ |
|
|
|
|
ImgUtils imgutils = { |
|
|
|
|
.class = &imgutils_class, |
|
|
|
|
.log_offset = log_offset, |
|
|
|
|
.log_ctx = log_ctx, |
|
|
|
|
}; |
|
|
|
|
int64_t stride = av_image_get_linesize(pix_fmt, w, 0); |
|
|
|
|
if (stride <= 0) |
|
|
|
|
stride = 8LL*w; |
|
|
|
|
stride += 128*8; |
|
|
|
|
|
|
|
|
|
if ((int)w>0 && (int)h>0 && (w+128)*(uint64_t)(h+128) < INT_MAX/8) |
|
|
|
|
return 0; |
|
|
|
|
if ((int)w<=0 || (int)h<=0 || stride >= INT_MAX || stride*(uint64_t)(h+128) >= INT_MAX) { |
|
|
|
|
av_log(&imgutils, AV_LOG_ERROR, "Picture size %ux%u is invalid\n", w, h); |
|
|
|
|
return AVERROR(EINVAL); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
av_log(&imgutils, AV_LOG_ERROR, "Picture size %ux%u is invalid\n", w, h); |
|
|
|
|
return AVERROR(EINVAL); |
|
|
|
|
if (max_pixels < INT64_MAX) { |
|
|
|
|
if (w*(int64_t)h > max_pixels) { |
|
|
|
|
av_log(&imgutils, AV_LOG_ERROR, |
|
|
|
|
"Picture size %ux%u exceeds specified max pixel count %"PRId64", see the documentation if you wish to increase it\n", |
|
|
|
|
w, h, max_pixels); |
|
|
|
|
return AVERROR(EINVAL); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
int av_image_check_size(unsigned int w, unsigned int h, int log_offset, void *log_ctx) |
|
|
|
|
{ |
|
|
|
|
return av_image_check_size2(w, h, INT64_MAX, AV_PIX_FMT_NONE, log_offset, log_ctx); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
int av_image_check_sar(unsigned int w, unsigned int h, AVRational sar) |
|
|
|
|