Crashes now in kvz_image_free.

This commit is contained in:
Arttu Makinen 2019-08-19 15:08:27 +03:00 committed by Arttu Makinen
parent 05495bb555
commit 2b7a8af23a
4 changed files with 77 additions and 70 deletions

View file

@ -12,31 +12,12 @@
#include "strategies/strategies-sao.h" #include "strategies/strategies-sao.h"
void kvz_alf_init(encoder_state_config_slice_t *slice, void kvz_alf_init(encoder_state_t *const state,
encoder_state_config_slice_t *slice,
alf_info_t *alf) alf_info_t *alf)
{ {
//Slice alf init. Johonkin muualle? //Slice alf init. Johonkin muualle?
/*
slice->aps = malloc(MAX_NUM_APS * sizeof(alf_aps));
for (int i = 0; i < MAX_NUM_APS; i++) {
slice->aps[i].aps_id = -1;
slice->aps[i].num_luma_filters = -1;
slice->aps[i].alf_luma_coeff_delta_flag = 0;
slice->aps[i].alf_luma_coeff_delta_prediction_flag = 0;
slice->aps[i].t_layer = -1;
slice->aps[i].fixed_filter_pattern = -1;
slice->aps[i].fixed_filter_set_index = -1;
}
slice->tile_group_num_aps = -1;
slice->tile_group_luma_aps_id = malloc(MAX_NUM_APS * sizeof(int));
slice->tile_group_chroma_aps_id = -1;
slice->param_set_map = malloc(sizeof(param_set_map) * MAX_NUM_APS);
for (int aps_idx = 0; aps_idx < MAX_NUM_APS; aps_idx++) {
slice->param_set_map[aps_idx].b_changed = 0;
//slice->param_set_map[aps_idx].p_nalu_data = malloc(sizeof(uint8_t));
}
slice->num_of_param_sets = 0;
*/
/* /*
for (int i = 0; i < MAX_NUM_APS; i++) for (int i = 0; i < MAX_NUM_APS; i++)
{ {
@ -711,7 +692,7 @@ void kvz_alf_enc_process(encoder_state_t *const state,
} }
alf_aps* new_aps = &state->slice->aps[31]; alf_aps* new_aps = &state->slice->aps[31];
alf_aps* aps = malloc(sizeof(aps)); alf_aps* aps = malloc(sizeof(alf_aps));
int width = state->tile->frame->width; int width = state->tile->frame->width;
int height = state->tile->frame->height; int height = state->tile->frame->height;
//state->slice->aps = aps; //state->slice->aps = aps;
@ -738,12 +719,12 @@ void kvz_alf_enc_process(encoder_state_t *const state,
aps->num_luma_filters = 1; aps->num_luma_filters = 1;
aps->alf_luma_coeff_delta_flag = false; aps->alf_luma_coeff_delta_flag = false;
aps->alf_luma_coeff_delta_prediction_flag = false; aps->alf_luma_coeff_delta_prediction_flag = false;
aps->t_layer = 0;
memset(aps->new_filter_flag, 0, sizeof(aps->new_filter_flag));
aps->fixed_filter_pattern = 0; aps->fixed_filter_pattern = 0;
memset(aps->fixed_filter_idx, 0, sizeof(aps->fixed_filter_idx)); memset(aps->fixed_filter_idx, 0, sizeof(aps->fixed_filter_idx));
aps->fixed_filter_set_index = 0; aps->fixed_filter_set_index = 0;
//const TempCtx ctxStart(m_CtxCache, AlfCtx(m_CABACEstimator->getCtx())); //const TempCtx ctxStart(m_CtxCache, AlfCtx(m_CABACEstimator->getCtx()));
for (int compIdx = 0; compIdx < MAX_NUM_COMPONENT; compIdx++) for (int compIdx = 0; compIdx < MAX_NUM_COMPONENT; compIdx++)
@ -769,18 +750,17 @@ void kvz_alf_enc_process(encoder_state_t *const state,
// derive classification // derive classification
//kutsutaan suurimmalla blokilla, mahdollisesti siis koko kuvalla //kutsutaan suurimmalla blokilla, mahdollisesti siis koko kuvalla
kvz_alf_derive_classification(state, lcu, width, height, 0, 0); kvz_alf_derive_classification(state, lcu, width, height, 0, 0);
kvz_alf_reset_pcm_blk_class_info(state, lcu, width, height, 0, 0); kvz_alf_reset_pcm_blk_class_info(state, lcu, width, height, 0, 0);
// get CTB stats for filtering // get CTB stats for filtering
kvz_alf_derive_stats_for_filtering(state, lcu); kvz_alf_derive_stats_for_filtering(state, lcu);
// derive filter (luma) // derive filter (luma)
kvz_alf_encoder(state, lcu, aps, CHANNEL_TYPE_LUMA); kvz_alf_encoder(state, lcu, aps, CHANNEL_TYPE_LUMA);
// derive filter (chroma) // derive filter (chroma)
kvz_alf_encoder(state, lcu, aps, CHANNEL_TYPE_CHROMA); kvz_alf_encoder(state, lcu, aps, CHANNEL_TYPE_CHROMA);
//m_CABACEstimator->getCtx() = AlfCtx(ctxStart); //m_CABACEstimator->getCtx() = AlfCtx(ctxStart);
kvz_alf_encoder_ctb(state, lcu, aps); kvz_alf_encoder_ctb(state, lcu, aps); // <----------- ongelma täälä
kvz_alf_reconstructor(state, lcu); kvz_alf_reconstructor(state, lcu);
} }
@ -1241,9 +1221,7 @@ void kvz_alf_encoder_ctb(encoder_state_t *const state,
alf_slice_param_new_filters_best.fixed_filter_pattern = aps->fixed_filter_pattern; alf_slice_param_new_filters_best.fixed_filter_pattern = aps->fixed_filter_pattern;
memcpy(alf_slice_param_new_filters_best.fixed_filter_idx, aps->fixed_filter_idx, sizeof(alf_slice_param_new_filters_best.fixed_filter_idx)); memcpy(alf_slice_param_new_filters_best.fixed_filter_idx, aps->fixed_filter_idx, sizeof(alf_slice_param_new_filters_best.fixed_filter_idx));
alf_slice_param_new_filters_best.fixed_filter_set_index = aps->fixed_filter_set_index; alf_slice_param_new_filters_best.fixed_filter_set_index = aps->fixed_filter_set_index;
alf_aps** apss = &state->slice->aps;
alf_component_id component_id = state->tile->frame->alf_info->component_id; alf_component_id component_id = state->tile->frame->alf_info->component_id;
bool is_luma = component_id == COMPONENT_Y ? true : false; bool is_luma = component_id == COMPONENT_Y ? true : false;
kvz_config cfg = state->encoder_control->cfg; kvz_config cfg = state->encoder_control->cfg;
@ -1605,7 +1583,7 @@ void kvz_alf_encoder_ctb(encoder_state_t *const state,
for (int i = 0; i < state->slice->tile_group_num_aps; i++) for (int i = 0; i < state->slice->tile_group_num_aps; i++)
{ {
//apss[apsIds[i]] = m_apsMap->getPS(apsIds[i]); //apss[apsIds[i]] = m_apsMap->getPS(apsIds[i]);
apss[aps_ids[i]] = &state->slice->param_set_map[aps_ids[i]].parameter_set; state->slice->aps[aps_ids[i]] = state->slice->param_set_map[aps_ids[i]].parameter_set;
} }
} }
@ -1852,20 +1830,20 @@ void kvz_alf_encoder_ctb(encoder_state_t *const state,
} }
//apss[cs.slice->getTileGroupApsIdChroma()] = m_apsMap->getPS(cs.slice->getTileGroupApsIdChroma()); //apss[cs.slice->getTileGroupApsIdChroma()] = m_apsMap->getPS(cs.slice->getTileGroupApsIdChroma());
//apss[state->slice->tile_group_chroma_aps_id] = state->slice->param_set_map[state->slice->tile_group_chroma_aps_id].parameter_set; //apss[state->slice->tile_group_chroma_aps_id] = state->slice->param_set_map[state->slice->tile_group_chroma_aps_id].parameter_set;
apss[state->slice->tile_group_chroma_aps_id]->aps_id = state->slice->param_set_map[state->slice->tile_group_chroma_aps_id].parameter_set.aps_id; state->slice->aps[state->slice->tile_group_chroma_aps_id].aps_id = state->slice->param_set_map[state->slice->tile_group_chroma_aps_id].parameter_set.aps_id;
memcpy(apss[state->slice->tile_group_chroma_aps_id]->enabled_flag, state->slice->param_set_map[state->slice->tile_group_chroma_aps_id].parameter_set.enabled_flag, sizeof(apss[state->slice->tile_group_chroma_aps_id]->enabled_flag)); memcpy(state->slice->aps[state->slice->tile_group_chroma_aps_id].enabled_flag, state->slice->param_set_map[state->slice->tile_group_chroma_aps_id].parameter_set.enabled_flag, sizeof(state->slice->aps[state->slice->tile_group_chroma_aps_id].enabled_flag));
memcpy(apss[state->slice->tile_group_chroma_aps_id]->luma_coeff, state->slice->param_set_map[state->slice->tile_group_chroma_aps_id].parameter_set.luma_coeff, sizeof(apss[state->slice->tile_group_chroma_aps_id]->luma_coeff)); memcpy(state->slice->aps[state->slice->tile_group_chroma_aps_id].luma_coeff, state->slice->param_set_map[state->slice->tile_group_chroma_aps_id].parameter_set.luma_coeff, sizeof(state->slice->aps[state->slice->tile_group_chroma_aps_id].luma_coeff));
memcpy(apss[state->slice->tile_group_chroma_aps_id]->chroma_coeff, state->slice->param_set_map[state->slice->tile_group_chroma_aps_id].parameter_set.chroma_coeff, sizeof(apss[state->slice->tile_group_chroma_aps_id]->chroma_coeff)); memcpy(state->slice->aps[state->slice->tile_group_chroma_aps_id].chroma_coeff, state->slice->param_set_map[state->slice->tile_group_chroma_aps_id].parameter_set.chroma_coeff, sizeof(state->slice->aps[state->slice->tile_group_chroma_aps_id].chroma_coeff));
memcpy(apss[state->slice->tile_group_chroma_aps_id]->filter_coeff_delta_idx, state->slice->param_set_map[state->slice->tile_group_chroma_aps_id].parameter_set.filter_coeff_delta_idx, sizeof(apss[state->slice->tile_group_chroma_aps_id]->filter_coeff_delta_idx)); memcpy(state->slice->aps[state->slice->tile_group_chroma_aps_id].filter_coeff_delta_idx, state->slice->param_set_map[state->slice->tile_group_chroma_aps_id].parameter_set.filter_coeff_delta_idx, sizeof(state->slice->aps[state->slice->tile_group_chroma_aps_id].filter_coeff_delta_idx));
memcpy(apss[state->slice->tile_group_chroma_aps_id]->alf_luma_coeff_flag, state->slice->param_set_map[state->slice->tile_group_chroma_aps_id].parameter_set.alf_luma_coeff_flag, sizeof(apss[state->slice->tile_group_chroma_aps_id]->alf_luma_coeff_flag)); memcpy(state->slice->aps[state->slice->tile_group_chroma_aps_id].alf_luma_coeff_flag, state->slice->param_set_map[state->slice->tile_group_chroma_aps_id].parameter_set.alf_luma_coeff_flag, sizeof(state->slice->aps[state->slice->tile_group_chroma_aps_id].alf_luma_coeff_flag));
apss[state->slice->tile_group_chroma_aps_id]->num_luma_filters = state->slice->param_set_map[state->slice->tile_group_chroma_aps_id].parameter_set.num_luma_filters; state->slice->aps[state->slice->tile_group_chroma_aps_id].num_luma_filters = state->slice->param_set_map[state->slice->tile_group_chroma_aps_id].parameter_set.num_luma_filters;
apss[state->slice->tile_group_chroma_aps_id]->alf_luma_coeff_delta_flag = state->slice->param_set_map[state->slice->tile_group_chroma_aps_id].parameter_set.alf_luma_coeff_delta_flag; state->slice->aps[state->slice->tile_group_chroma_aps_id].alf_luma_coeff_delta_flag = state->slice->param_set_map[state->slice->tile_group_chroma_aps_id].parameter_set.alf_luma_coeff_delta_flag;
apss[state->slice->tile_group_chroma_aps_id]->alf_luma_coeff_delta_prediction_flag = state->slice->param_set_map[state->slice->tile_group_chroma_aps_id].parameter_set.alf_luma_coeff_delta_prediction_flag; state->slice->aps[state->slice->tile_group_chroma_aps_id].alf_luma_coeff_delta_prediction_flag = state->slice->param_set_map[state->slice->tile_group_chroma_aps_id].parameter_set.alf_luma_coeff_delta_prediction_flag;
apss[state->slice->tile_group_chroma_aps_id]->t_layer = state->slice->param_set_map[state->slice->tile_group_chroma_aps_id].parameter_set.t_layer; state->slice->aps[state->slice->tile_group_chroma_aps_id].t_layer = state->slice->param_set_map[state->slice->tile_group_chroma_aps_id].parameter_set.t_layer;
memcpy(apss[state->slice->tile_group_chroma_aps_id]->new_filter_flag, state->slice->param_set_map[state->slice->tile_group_chroma_aps_id].parameter_set.new_filter_flag, sizeof(apss[state->slice->tile_group_chroma_aps_id]->new_filter_flag)); memcpy(state->slice->aps[state->slice->tile_group_chroma_aps_id].new_filter_flag, state->slice->param_set_map[state->slice->tile_group_chroma_aps_id].parameter_set.new_filter_flag, sizeof(state->slice->aps[state->slice->tile_group_chroma_aps_id].new_filter_flag));
apss[state->slice->tile_group_chroma_aps_id]->fixed_filter_pattern = state->slice->param_set_map[state->slice->tile_group_chroma_aps_id].parameter_set.fixed_filter_pattern; state->slice->aps[state->slice->tile_group_chroma_aps_id].fixed_filter_pattern = state->slice->param_set_map[state->slice->tile_group_chroma_aps_id].parameter_set.fixed_filter_pattern;
memcpy(apss[state->slice->tile_group_chroma_aps_id]->fixed_filter_idx, state->slice->param_set_map[state->slice->tile_group_chroma_aps_id].parameter_set.fixed_filter_idx, sizeof(apss[state->slice->tile_group_chroma_aps_id]->fixed_filter_idx)); memcpy(state->slice->aps[state->slice->tile_group_chroma_aps_id].fixed_filter_idx, state->slice->param_set_map[state->slice->tile_group_chroma_aps_id].parameter_set.fixed_filter_idx, sizeof(state->slice->aps[state->slice->tile_group_chroma_aps_id].fixed_filter_idx));
apss[state->slice->tile_group_chroma_aps_id]->fixed_filter_set_index = state->slice->param_set_map[state->slice->tile_group_chroma_aps_id].parameter_set.fixed_filter_set_index; state->slice->aps[state->slice->tile_group_chroma_aps_id].fixed_filter_set_index = state->slice->param_set_map[state->slice->tile_group_chroma_aps_id].parameter_set.fixed_filter_set_index;
} }
} }
@ -1881,7 +1859,23 @@ void kvz_alf_get_avai_aps_ids_luma(encoder_state_t *const state,
for (int i = 0; i < MAX_NUM_APS; i++) for (int i = 0; i < MAX_NUM_APS; i++)
{ {
//apss[i] = m_apsMap->getPS(i); //apss[i] = m_apsMap->getPS(i);
apss[i] = &aps_set[i].parameter_set; state->slice->aps[i] = aps_set[i].parameter_set;
/*
apss[i]->aps_id = aps_set[i].parameter_set->aps_id;
memcpy(apss[i]->enabled_flag, aps_set[i].parameter_set->enabled_flag, sizeof(apss[i]->enabled_flag));
memcpy(apss[i]->luma_coeff, aps_set[i].parameter_set->luma_coeff, sizeof(apss[i]->luma_coeff));
memcpy(apss[i]->chroma_coeff, aps_set[i].parameter_set->chroma_coeff, sizeof(apss[i]->chroma_coeff));
memcpy(apss[i]->filter_coeff_delta_idx, aps_set[i].parameter_set->filter_coeff_delta_idx, sizeof(apss[i]->filter_coeff_delta_idx));
memcpy(apss[i]->alf_luma_coeff_flag, aps_set[i].parameter_set->alf_luma_coeff_flag, sizeof(apss[i]->alf_luma_coeff_flag));
apss[i]->num_luma_filters = aps_set[i].parameter_set->num_luma_filters;
apss[i]->alf_luma_coeff_delta_flag = aps_set[i].parameter_set->alf_luma_coeff_delta_flag;
apss[i]->alf_luma_coeff_delta_prediction_flag = aps_set[i].parameter_set->alf_luma_coeff_delta_prediction_flag;
apss[i]->t_layer = aps_set[i].parameter_set->t_layer;
memcpy(apss[i]->new_filter_flag, aps_set[i].parameter_set->new_filter_flag, sizeof(apss[i]->new_filter_flag));
apss[i]->fixed_filter_pattern = aps_set[i].parameter_set->fixed_filter_pattern;
memcpy(apss[i]->fixed_filter_idx, aps_set[i].parameter_set->fixed_filter_idx, sizeof(apss[i]->fixed_filter_idx));
apss[i]->fixed_filter_set_index = aps_set[i].parameter_set->fixed_filter_set_index;
*/
} }
//std::vector<int> result; //std::vector<int> result;
@ -1918,7 +1912,7 @@ void kvz_alf_get_avai_aps_ids_luma(encoder_state_t *const state,
*newApsId = (int)MAX_NUM_APS - 1; *newApsId = (int)MAX_NUM_APS - 1;
} }
//CHECK(newApsId >= (int)MAX_NUM_APS, "Wrong APS index assignment in getAvaiApsIdsLuma"); assert(*newApsId <= (int)MAX_NUM_APS); //Wrong APS index assignment in getAvaiApsIdsLuma
//return result; //return result;
} }
@ -3212,7 +3206,6 @@ void kvz_alf_process(encoder_state_t const *state,
const lcu_order_element_t const *lcu) const lcu_order_element_t const *lcu)
{ {
enum kvz_chroma_format chroma_fmt = state->encoder_control->chroma_format; enum kvz_chroma_format chroma_fmt = state->encoder_control->chroma_format;
alf_classifier **classifier = state->tile->frame->alf_info->classifier; alf_classifier **classifier = state->tile->frame->alf_info->classifier;
cabac_data_t * const cabac = &state->cabac; cabac_data_t * const cabac = &state->cabac;
//cabac_data_t ctx = &state->cabac.ctx.alf_ctb_enable_flag; //cabac_data_t ctx = &state->cabac.ctx.alf_ctb_enable_flag;
@ -3695,10 +3688,10 @@ void kvz_alf_derive_classification_blk(encoder_state_t * const state,
for (int i = 0; i < height; i += 2) for (int i = 0; i < height; i += 2)
{ {
int yoffset = (i + 1 + start_height) * stride - fl_p1; int yoffset = (i + 1 + start_height) * stride - fl_p1;
const kvz_pixel *src0 = &(kvz_pixel)src[yoffset - stride]; const kvz_pixel *src0 = &src[yoffset - stride];
const kvz_pixel *src1 = &(kvz_pixel)src[yoffset]; const kvz_pixel *src1 = &src[yoffset];
const kvz_pixel *src2 = &(kvz_pixel)src[yoffset + stride]; const kvz_pixel *src2 = &src[yoffset + stride];
const kvz_pixel *src3 = &(kvz_pixel)src[yoffset + stride * 2]; const kvz_pixel *src3 = &src[yoffset + stride * 2];
int *p_y_ver = laplacian[ALF_VER][i]; int *p_y_ver = laplacian[ALF_VER][i];
int *p_y_hor = laplacian[ALF_HOR][i]; int *p_y_hor = laplacian[ALF_HOR][i];

View file

@ -368,11 +368,12 @@ static alf_aps g_alf_slice_aps_temp;
typedef struct param_set_map { typedef struct param_set_map {
bool b_changed; bool b_changed;
uint8_t* p_nalu_data; //uint8_t* p_nalu_data;
alf_aps parameter_set; struct alf_aps parameter_set;
} param_set_map; } param_set_map;
void kvz_alf_init(encoder_state_config_slice_t *slice, void kvz_alf_init(encoder_state_t *const state,
encoder_state_config_slice_t *slice,
alf_info_t *alf); alf_info_t *alf);
//-------------------------help functions--------------------------- //-------------------------help functions---------------------------

View file

@ -197,23 +197,23 @@ static int encoder_state_config_slice_init(encoder_state_t * const state,
state->slice->end_in_rs = state->encoder_control->tiles_ctb_addr_ts_to_rs[end_address_in_ts]; state->slice->end_in_rs = state->encoder_control->tiles_ctb_addr_ts_to_rs[end_address_in_ts];
state->slice->aps = malloc(MAX_NUM_APS * sizeof(alf_aps)); state->slice->aps = malloc(MAX_NUM_APS * sizeof(alf_aps));
for (int i = 0; i < MAX_NUM_APS; i++) { state->slice->param_set_map = malloc(sizeof(param_set_map) * MAX_NUM_APS);
state->slice->aps[i].aps_id = -1; for (int aps_idx = 0; aps_idx < MAX_NUM_APS; aps_idx++) {
state->slice->aps[i].num_luma_filters = -1; state->slice->aps[aps_idx].aps_id = -1;
state->slice->aps[i].alf_luma_coeff_delta_flag = 0; state->slice->aps[aps_idx].num_luma_filters = -1;
state->slice->aps[i].alf_luma_coeff_delta_prediction_flag = 0; state->slice->aps[aps_idx].alf_luma_coeff_delta_flag = 0;
state->slice->aps[i].t_layer = -1; state->slice->aps[aps_idx].alf_luma_coeff_delta_prediction_flag = 0;
state->slice->aps[i].fixed_filter_pattern = -1; state->slice->aps[aps_idx].t_layer = -1;
state->slice->aps[i].fixed_filter_set_index = -1; state->slice->aps[aps_idx].fixed_filter_pattern = -1;
state->slice->aps[aps_idx].fixed_filter_set_index = -1;
state->slice->param_set_map[aps_idx].b_changed = 0;
//state->slice->param_set_map[aps_idx].p_nalu_data = malloc(sizeof(uint8_t));
//state->slice->param_set_map[aps_idx].parameter_set = malloc(sizeof(alf_aps));
} }
state->slice->tile_group_num_aps = -1; state->slice->tile_group_num_aps = -1;
state->slice->tile_group_luma_aps_id = malloc(MAX_NUM_APS * sizeof(int)); state->slice->tile_group_luma_aps_id = malloc(MAX_NUM_APS * sizeof(int));
state->slice->tile_group_chroma_aps_id = -1; state->slice->tile_group_chroma_aps_id = -1;
state->slice->param_set_map = malloc(sizeof(param_set_map) * MAX_NUM_APS);
for (int aps_idx = 0; aps_idx < MAX_NUM_APS; aps_idx++) {
state->slice->param_set_map[aps_idx].b_changed = 0;
state->slice->param_set_map[aps_idx].p_nalu_data = malloc(sizeof(uint8_t));
}
state->slice->num_of_param_sets = 0; state->slice->num_of_param_sets = 0;
return 1; return 1;
@ -747,6 +747,19 @@ void kvz_encoder_state_finalize(encoder_state_t * const state) {
} }
if (!state->parent || (state->parent->slice != state->slice)) { if (!state->parent || (state->parent->slice != state->slice)) {
/*for (int aps_idx = 0; aps_idx < MAX_NUM_APS; aps_idx++) {
FREE_POINTER(state->slice->param_set_map[aps_idx].p_nalu_data);
}*/
if (state->slice->param_set_map && state->slice->param_set_map != NULL) {
FREE_POINTER(state->slice->param_set_map);
}
if (state->slice->aps != NULL) {
FREE_POINTER(state->slice->aps);
}
if (state->slice->tile_group_luma_aps_id != NULL) {
FREE_POINTER(state->slice->tile_group_luma_aps_id);
}
FREE_POINTER(state->slice); FREE_POINTER(state->slice);
} }

View file

@ -671,7 +671,7 @@ static void encoder_state_worker_encode_lcu(void * opaque)
//Tests //Tests
alf_info_t *alf = &frame->alf_info[lcu->position.y * frame->rec->stride + lcu->position.x]; alf_info_t *alf = &frame->alf_info[lcu->position.y * frame->rec->stride + lcu->position.x];
kvz_alf_init(slice, alf); kvz_alf_init(state, slice, alf);
kvz_alf_enc_create(state, lcu); kvz_alf_enc_create(state, lcu);