Merge changes from topic 'vp10-missing-alloc-checks'
* changes: vp10/resize: add missing alloc checks vp10/encoder: add missing alloc checks vp10/decoder,resize_mv_buffer: add missing alloc check vp10_cyclic_refresh_alloc: correct cleanup on error
This commit is contained in:
Коммит
6261fcf307
|
@ -1195,8 +1195,9 @@ static void resize_mv_buffer(VP10_COMMON *cm) {
|
||||||
vpx_free(cm->cur_frame->mvs);
|
vpx_free(cm->cur_frame->mvs);
|
||||||
cm->cur_frame->mi_rows = cm->mi_rows;
|
cm->cur_frame->mi_rows = cm->mi_rows;
|
||||||
cm->cur_frame->mi_cols = cm->mi_cols;
|
cm->cur_frame->mi_cols = cm->mi_cols;
|
||||||
cm->cur_frame->mvs = (MV_REF *)vpx_calloc(cm->mi_rows * cm->mi_cols,
|
CHECK_MEM_ERROR(cm, cm->cur_frame->mvs,
|
||||||
sizeof(*cm->cur_frame->mvs));
|
(MV_REF *)vpx_calloc(cm->mi_rows * cm->mi_cols,
|
||||||
|
sizeof(*cm->cur_frame->mvs)));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void resize_context_buffers(VP10_COMMON *cm, int width, int height) {
|
static void resize_context_buffers(VP10_COMMON *cm, int width, int height) {
|
||||||
|
|
|
@ -64,13 +64,13 @@ CYCLIC_REFRESH *vp10_cyclic_refresh_alloc(int mi_rows, int mi_cols) {
|
||||||
|
|
||||||
cr->map = vpx_calloc(mi_rows * mi_cols, sizeof(*cr->map));
|
cr->map = vpx_calloc(mi_rows * mi_cols, sizeof(*cr->map));
|
||||||
if (cr->map == NULL) {
|
if (cr->map == NULL) {
|
||||||
vpx_free(cr);
|
vp10_cyclic_refresh_free(cr);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
last_coded_q_map_size = mi_rows * mi_cols * sizeof(*cr->last_coded_q_map);
|
last_coded_q_map_size = mi_rows * mi_cols * sizeof(*cr->last_coded_q_map);
|
||||||
cr->last_coded_q_map = vpx_malloc(last_coded_q_map_size);
|
cr->last_coded_q_map = vpx_malloc(last_coded_q_map_size);
|
||||||
if (cr->last_coded_q_map == NULL) {
|
if (cr->last_coded_q_map == NULL) {
|
||||||
vpx_free(cr);
|
vp10_cyclic_refresh_free(cr);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
assert(MAXQ <= 255);
|
assert(MAXQ <= 255);
|
||||||
|
|
|
@ -1665,8 +1665,9 @@ VP10_COMP *vp10_create_compressor(VP10EncoderConfig *oxcf,
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cpi->b_calculate_consistency) {
|
if (cpi->b_calculate_consistency) {
|
||||||
cpi->ssim_vars = vpx_malloc(sizeof(*cpi->ssim_vars) *
|
CHECK_MEM_ERROR(cm, cpi->ssim_vars,
|
||||||
4 * cpi->common.mi_rows * cpi->common.mi_cols);
|
vpx_malloc(sizeof(*cpi->ssim_vars) * 4 *
|
||||||
|
cpi->common.mi_rows * cpi->common.mi_cols));
|
||||||
cpi->worst_consistency = 100.0;
|
cpi->worst_consistency = 100.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2682,16 +2683,16 @@ static void loopfilter_frame(VP10_COMP *cpi, VP10_COMMON *cm) {
|
||||||
vpx_extend_frame_inner_borders(cm->frame_to_show);
|
vpx_extend_frame_inner_borders(cm->frame_to_show);
|
||||||
}
|
}
|
||||||
|
|
||||||
static INLINE void alloc_frame_mvs(const VP10_COMMON *cm,
|
static INLINE void alloc_frame_mvs(VP10_COMMON *const cm,
|
||||||
int buffer_idx) {
|
int buffer_idx) {
|
||||||
RefCntBuffer *const new_fb_ptr = &cm->buffer_pool->frame_bufs[buffer_idx];
|
RefCntBuffer *const new_fb_ptr = &cm->buffer_pool->frame_bufs[buffer_idx];
|
||||||
if (new_fb_ptr->mvs == NULL ||
|
if (new_fb_ptr->mvs == NULL ||
|
||||||
new_fb_ptr->mi_rows < cm->mi_rows ||
|
new_fb_ptr->mi_rows < cm->mi_rows ||
|
||||||
new_fb_ptr->mi_cols < cm->mi_cols) {
|
new_fb_ptr->mi_cols < cm->mi_cols) {
|
||||||
vpx_free(new_fb_ptr->mvs);
|
vpx_free(new_fb_ptr->mvs);
|
||||||
new_fb_ptr->mvs =
|
CHECK_MEM_ERROR(cm, new_fb_ptr->mvs,
|
||||||
(MV_REF *)vpx_calloc(cm->mi_rows * cm->mi_cols,
|
(MV_REF *)vpx_calloc(cm->mi_rows * cm->mi_cols,
|
||||||
sizeof(*new_fb_ptr->mvs));
|
sizeof(*new_fb_ptr->mvs)));
|
||||||
new_fb_ptr->mi_rows = cm->mi_rows;
|
new_fb_ptr->mi_rows = cm->mi_rows;
|
||||||
new_fb_ptr->mi_cols = cm->mi_cols;
|
new_fb_ptr->mi_cols = cm->mi_cols;
|
||||||
}
|
}
|
||||||
|
@ -2729,12 +2730,13 @@ void vp10_scale_references(VP10_COMP *cpi) {
|
||||||
if (force_scaling ||
|
if (force_scaling ||
|
||||||
new_fb_ptr->buf.y_crop_width != cm->width ||
|
new_fb_ptr->buf.y_crop_width != cm->width ||
|
||||||
new_fb_ptr->buf.y_crop_height != cm->height) {
|
new_fb_ptr->buf.y_crop_height != cm->height) {
|
||||||
vpx_realloc_frame_buffer(&new_fb_ptr->buf,
|
if (vpx_realloc_frame_buffer(&new_fb_ptr->buf, cm->width, cm->height,
|
||||||
cm->width, cm->height,
|
|
||||||
cm->subsampling_x, cm->subsampling_y,
|
cm->subsampling_x, cm->subsampling_y,
|
||||||
cm->use_highbitdepth,
|
cm->use_highbitdepth,
|
||||||
VP9_ENC_BORDER_IN_PIXELS, cm->byte_alignment,
|
VP9_ENC_BORDER_IN_PIXELS,
|
||||||
NULL, NULL, NULL);
|
cm->byte_alignment, NULL, NULL, NULL))
|
||||||
|
vpx_internal_error(&cm->error, VPX_CODEC_MEM_ERROR,
|
||||||
|
"Failed to allocate frame buffer");
|
||||||
scale_and_extend_frame(ref, &new_fb_ptr->buf, (int)cm->bit_depth);
|
scale_and_extend_frame(ref, &new_fb_ptr->buf, (int)cm->bit_depth);
|
||||||
cpi->scaled_ref_idx[ref_frame - 1] = new_fb;
|
cpi->scaled_ref_idx[ref_frame - 1] = new_fb;
|
||||||
alloc_frame_mvs(cm, new_fb);
|
alloc_frame_mvs(cm, new_fb);
|
||||||
|
@ -2754,11 +2756,12 @@ void vp10_scale_references(VP10_COMP *cpi) {
|
||||||
if (force_scaling ||
|
if (force_scaling ||
|
||||||
new_fb_ptr->buf.y_crop_width != cm->width ||
|
new_fb_ptr->buf.y_crop_width != cm->width ||
|
||||||
new_fb_ptr->buf.y_crop_height != cm->height) {
|
new_fb_ptr->buf.y_crop_height != cm->height) {
|
||||||
vpx_realloc_frame_buffer(&new_fb_ptr->buf,
|
if (vpx_realloc_frame_buffer(&new_fb_ptr->buf, cm->width, cm->height,
|
||||||
cm->width, cm->height,
|
|
||||||
cm->subsampling_x, cm->subsampling_y,
|
cm->subsampling_x, cm->subsampling_y,
|
||||||
VP9_ENC_BORDER_IN_PIXELS, cm->byte_alignment,
|
VP9_ENC_BORDER_IN_PIXELS,
|
||||||
NULL, NULL, NULL);
|
cm->byte_alignment, NULL, NULL, NULL))
|
||||||
|
vpx_internal_error(&cm->error, VPX_CODEC_MEM_ERROR,
|
||||||
|
"Failed to allocate frame buffer");
|
||||||
scale_and_extend_frame(ref, &new_fb_ptr->buf);
|
scale_and_extend_frame(ref, &new_fb_ptr->buf);
|
||||||
cpi->scaled_ref_idx[ref_frame - 1] = new_fb;
|
cpi->scaled_ref_idx[ref_frame - 1] = new_fb;
|
||||||
alloc_frame_mvs(cm, new_fb);
|
alloc_frame_mvs(cm, new_fb);
|
||||||
|
@ -3047,14 +3050,15 @@ static void set_frame_size(VP10_COMP *cpi) {
|
||||||
alloc_frame_mvs(cm, cm->new_fb_idx);
|
alloc_frame_mvs(cm, cm->new_fb_idx);
|
||||||
|
|
||||||
// Reset the frame pointers to the current frame size.
|
// Reset the frame pointers to the current frame size.
|
||||||
vpx_realloc_frame_buffer(get_frame_new_buffer(cm),
|
if (vpx_realloc_frame_buffer(get_frame_new_buffer(cm), cm->width, cm->height,
|
||||||
cm->width, cm->height,
|
|
||||||
cm->subsampling_x, cm->subsampling_y,
|
cm->subsampling_x, cm->subsampling_y,
|
||||||
#if CONFIG_VP9_HIGHBITDEPTH
|
#if CONFIG_VP9_HIGHBITDEPTH
|
||||||
cm->use_highbitdepth,
|
cm->use_highbitdepth,
|
||||||
#endif
|
#endif
|
||||||
VP9_ENC_BORDER_IN_PIXELS, cm->byte_alignment,
|
VP9_ENC_BORDER_IN_PIXELS, cm->byte_alignment,
|
||||||
NULL, NULL, NULL);
|
NULL, NULL, NULL))
|
||||||
|
vpx_internal_error(&cm->error, VPX_CODEC_MEM_ERROR,
|
||||||
|
"Failed to allocate frame buffer");
|
||||||
|
|
||||||
alloc_util_frame_buffers(cpi);
|
alloc_util_frame_buffers(cpi);
|
||||||
init_motion_estimation(cpi);
|
init_motion_estimation(cpi);
|
||||||
|
@ -3795,12 +3799,14 @@ static void setup_denoiser_buffer(VP10_COMP *cpi) {
|
||||||
VP10_COMMON *const cm = &cpi->common;
|
VP10_COMMON *const cm = &cpi->common;
|
||||||
if (cpi->oxcf.noise_sensitivity > 0 &&
|
if (cpi->oxcf.noise_sensitivity > 0 &&
|
||||||
!cpi->denoiser.frame_buffer_initialized) {
|
!cpi->denoiser.frame_buffer_initialized) {
|
||||||
vp10_denoiser_alloc(&(cpi->denoiser), cm->width, cm->height,
|
if (vp10_denoiser_alloc(&cpi->denoiser, cm->width, cm->height,
|
||||||
cm->subsampling_x, cm->subsampling_y,
|
cm->subsampling_x, cm->subsampling_y,
|
||||||
#if CONFIG_VP9_HIGHBITDEPTH
|
#if CONFIG_VP9_HIGHBITDEPTH
|
||||||
cm->use_highbitdepth,
|
cm->use_highbitdepth,
|
||||||
#endif
|
#endif
|
||||||
VP9_ENC_BORDER_IN_PIXELS);
|
VP9_ENC_BORDER_IN_PIXELS))
|
||||||
|
vpx_internal_error(&cm->error, VPX_CODEC_MEM_ERROR,
|
||||||
|
"Failed to allocate denoiser");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -461,6 +461,7 @@ static void resize_multistep(const uint8_t *const input,
|
||||||
int filteredlength = length;
|
int filteredlength = length;
|
||||||
if (!tmpbuf) {
|
if (!tmpbuf) {
|
||||||
tmpbuf = (uint8_t *)malloc(sizeof(uint8_t) * length);
|
tmpbuf = (uint8_t *)malloc(sizeof(uint8_t) * length);
|
||||||
|
if (tmpbuf == NULL) return;
|
||||||
otmp = tmpbuf;
|
otmp = tmpbuf;
|
||||||
} else {
|
} else {
|
||||||
otmp = buf;
|
otmp = buf;
|
||||||
|
@ -520,6 +521,7 @@ void vp10_resize_plane(const uint8_t *const input,
|
||||||
uint8_t *tmpbuf = (uint8_t *)malloc(sizeof(uint8_t) *
|
uint8_t *tmpbuf = (uint8_t *)malloc(sizeof(uint8_t) *
|
||||||
(width < height ? height : width));
|
(width < height ? height : width));
|
||||||
uint8_t *arrbuf = (uint8_t *)malloc(sizeof(uint8_t) * (height + height2));
|
uint8_t *arrbuf = (uint8_t *)malloc(sizeof(uint8_t) * (height + height2));
|
||||||
|
if (intbuf == NULL || tmpbuf == NULL || arrbuf == NULL) goto Error;
|
||||||
assert(width > 0);
|
assert(width > 0);
|
||||||
assert(height > 0);
|
assert(height > 0);
|
||||||
assert(width2 > 0);
|
assert(width2 > 0);
|
||||||
|
@ -532,6 +534,8 @@ void vp10_resize_plane(const uint8_t *const input,
|
||||||
resize_multistep(arrbuf, height, arrbuf + height, height2, tmpbuf);
|
resize_multistep(arrbuf, height, arrbuf + height, height2, tmpbuf);
|
||||||
fill_arr_to_col(output + i, out_stride, height2, arrbuf + height);
|
fill_arr_to_col(output + i, out_stride, height2, arrbuf + height);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Error:
|
||||||
free(intbuf);
|
free(intbuf);
|
||||||
free(tmpbuf);
|
free(tmpbuf);
|
||||||
free(arrbuf);
|
free(arrbuf);
|
||||||
|
@ -754,6 +758,7 @@ static void highbd_resize_multistep(const uint16_t *const input,
|
||||||
int filteredlength = length;
|
int filteredlength = length;
|
||||||
if (!tmpbuf) {
|
if (!tmpbuf) {
|
||||||
tmpbuf = (uint16_t *)malloc(sizeof(uint16_t) * length);
|
tmpbuf = (uint16_t *)malloc(sizeof(uint16_t) * length);
|
||||||
|
if (tmpbuf == NULL) return;
|
||||||
otmp = tmpbuf;
|
otmp = tmpbuf;
|
||||||
} else {
|
} else {
|
||||||
otmp = buf;
|
otmp = buf;
|
||||||
|
@ -816,6 +821,7 @@ void vp10_highbd_resize_plane(const uint8_t *const input,
|
||||||
uint16_t *tmpbuf = (uint16_t *)malloc(sizeof(uint16_t) *
|
uint16_t *tmpbuf = (uint16_t *)malloc(sizeof(uint16_t) *
|
||||||
(width < height ? height : width));
|
(width < height ? height : width));
|
||||||
uint16_t *arrbuf = (uint16_t *)malloc(sizeof(uint16_t) * (height + height2));
|
uint16_t *arrbuf = (uint16_t *)malloc(sizeof(uint16_t) * (height + height2));
|
||||||
|
if (intbuf == NULL || tmpbuf == NULL || arrbuf == NULL) goto Error;
|
||||||
for (i = 0; i < height; ++i) {
|
for (i = 0; i < height; ++i) {
|
||||||
highbd_resize_multistep(CONVERT_TO_SHORTPTR(input + in_stride * i), width,
|
highbd_resize_multistep(CONVERT_TO_SHORTPTR(input + in_stride * i), width,
|
||||||
intbuf + width2 * i, width2, tmpbuf, bd);
|
intbuf + width2 * i, width2, tmpbuf, bd);
|
||||||
|
@ -827,6 +833,8 @@ void vp10_highbd_resize_plane(const uint8_t *const input,
|
||||||
highbd_fill_arr_to_col(CONVERT_TO_SHORTPTR(output + i), out_stride, height2,
|
highbd_fill_arr_to_col(CONVERT_TO_SHORTPTR(output + i), out_stride, height2,
|
||||||
arrbuf + height);
|
arrbuf + height);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Error:
|
||||||
free(intbuf);
|
free(intbuf);
|
||||||
free(tmpbuf);
|
free(tmpbuf);
|
||||||
free(arrbuf);
|
free(arrbuf);
|
||||||
|
|
Загрузка…
Ссылка в новой задаче