Skip to content

Commit cc1fd00

Browse files
committed
[10bit] don't overwrite heap
1 parent d008a00 commit cc1fd00

File tree

2 files changed

+48
-5
lines changed

2 files changed

+48
-5
lines changed

Diff for: src/encoder.c

+11-5
Original file line numberDiff line numberDiff line change
@@ -141,12 +141,16 @@ static int get_max_parallelism(const encoder_control_t *const encoder)
141141
static int8_t* derive_chroma_QP_mapping_table(const uvg_config* const cfg, int i)
142142
{
143143
const int MAX_QP = 63;
144+
const int qpBdOffsetC = (cfg->input_bitdepth - 8) * 6;
144145

145146
int8_t qpInVal[16], qpOutVal[16];
146-
int8_t* table = calloc(MAX_QP + 1, sizeof(int8_t));
147-
147+
int8_t* table = calloc(MAX_QP + 1+qpBdOffsetC, sizeof(int8_t));
148+
if (table == NULL) {
149+
fprintf(stderr, "Failed to allocate memory for chroma QP mapping table.\n");
150+
return NULL;
151+
}
152+
table += qpBdOffsetC;
148153

149-
const int qpBdOffsetC = (cfg->input_bitdepth - 8) * 6;
150154
const int numPtsInCQPTableMinus1 = cfg->qp_table_length_minus1[i];
151155

152156
qpInVal[0] = cfg->qp_table_start_minus26[i] + 26;
@@ -652,7 +656,7 @@ encoder_control_t* uvg_encoder_control_init(const uvg_config *const cfg)
652656
} else {
653657
encoder->cfg.vps_period = -1;
654658
}
655-
659+
656660
for (int i = 0; i < cfg->num_used_table; i++) {
657661
encoder->qp_map[i] = derive_chroma_QP_mapping_table(cfg, i);
658662
}
@@ -670,6 +674,7 @@ encoder_control_t* uvg_encoder_control_init(const uvg_config *const cfg)
670674
void uvg_encoder_control_free(encoder_control_t *const encoder)
671675
{
672676
if (!encoder) return;
677+
const int qpBdOffsetC = (encoder->cfg.input_bitdepth - 8) * 6;
673678

674679
//Slices
675680
FREE_POINTER(encoder->slice_addresses_in_ts);
@@ -695,7 +700,8 @@ void uvg_encoder_control_free(encoder_control_t *const encoder)
695700
uvg_threadqueue_free(encoder->threadqueue);
696701
encoder->threadqueue = NULL;
697702
for (int i = 0; i < encoder->cfg.num_used_table; i++) {
698-
if (encoder->qp_map[i]) FREE_POINTER(encoder->qp_map[i]);
703+
int8_t *temp = encoder->qp_map[i] - qpBdOffsetC;
704+
if (encoder->qp_map[i] - qpBdOffsetC) FREE_POINTER(temp);
699705
}
700706

701707
uvg_close_rdcost_outfiles();

Diff for: src/strategies/strategies-picture.h

+37
Original file line numberDiff line numberDiff line change
@@ -207,6 +207,7 @@ int uvg_strategy_register_picture(void* opaque, uint8_t bitdepth);
207207
cost_pixel_nxn_multi_func * uvg_pixels_get_satd_dual_func(unsigned width, unsigned height);
208208
cost_pixel_nxn_multi_func * uvg_pixels_get_sad_dual_func(unsigned width, unsigned height);
209209

210+
#if UVG_BIT_DEPTH == 8
210211
#define STRATEGIES_PICTURE_EXPORTS \
211212
{"crc32c_4x4", (void**) &uvg_crc32c_4x4}, \
212213
{"crc32c_8x8", (void **)&uvg_crc32c_8x8}, \
@@ -242,6 +243,42 @@ cost_pixel_nxn_multi_func * uvg_pixels_get_sad_dual_func(unsigned width, unsigne
242243
{"pixel_var", (void**) &uvg_pixel_var}, \
243244
{"generate_residual", (void**) &uvg_generate_residual}, \
244245

246+
#else
247+
#define STRATEGIES_PICTURE_EXPORTS \
248+
{"reg_sad", (void**) &uvg_reg_sad}, \
249+
{"sad_4x4", (void**) &uvg_sad_4x4}, \
250+
{"sad_8x8", (void**) &uvg_sad_8x8}, \
251+
{"sad_16x16", (void**) &uvg_sad_16x16}, \
252+
{"sad_32x32", (void**) &uvg_sad_32x32}, \
253+
{"sad_64x64", (void**) &uvg_sad_64x64}, \
254+
{"satd_4x4", (void**) &uvg_satd_4x4}, \
255+
{"satd_8x8", (void**) &uvg_satd_8x8}, \
256+
{"satd_16x16", (void**) &uvg_satd_16x16}, \
257+
{"satd_32x32", (void**) &uvg_satd_32x32}, \
258+
{"satd_64x64", (void**) &uvg_satd_64x64}, \
259+
{"satd_any_size", (void**) &uvg_satd_any_size}, \
260+
{"satd_any_size_vtm", (void**) &uvg_satd_any_size_vtm}, \
261+
{"sad_4x4_dual", (void**) &uvg_sad_4x4_dual}, \
262+
{"sad_8x8_dual", (void**) &uvg_sad_8x8_dual}, \
263+
{"sad_16x16_dual", (void**) &uvg_sad_16x16_dual}, \
264+
{"sad_32x32_dual", (void**) &uvg_sad_32x32_dual}, \
265+
{"sad_64x64_dual", (void**) &uvg_sad_64x64_dual}, \
266+
{"satd_4x4_dual", (void**) &uvg_satd_4x4_dual}, \
267+
{"satd_8x8_dual", (void**) &uvg_satd_8x8_dual}, \
268+
{"satd_16x16_dual", (void**) &uvg_satd_16x16_dual}, \
269+
{"satd_32x32_dual", (void**) &uvg_satd_32x32_dual}, \
270+
{"satd_64x64_dual", (void**) &uvg_satd_64x64_dual}, \
271+
{"satd_any_size_quad", (void**) &uvg_satd_any_size_quad}, \
272+
{"pixels_calc_ssd", (void**) &uvg_pixels_calc_ssd}, \
273+
{"bipred_average", (void**) &uvg_bipred_average}, \
274+
{"get_optimized_sad", (void**) &uvg_get_optimized_sad}, \
275+
{"ver_sad", (void**) &uvg_ver_sad}, \
276+
{"hor_sad", (void**) &uvg_hor_sad}, \
277+
{"pixel_var", (void**) &uvg_pixel_var}, \
278+
{"generate_residual", (void**) &uvg_generate_residual}, \
279+
280+
#endif
281+
245282

246283

247284
#endif //STRATEGIES_PICTURE_H_

0 commit comments

Comments
 (0)