mirror of
https://git.ffmpeg.org/ffmpeg.git
synced 2025-01-17 21:00:51 +00:00
lavc/hevcdec: move HEVCContext.tab_ct_depth to HEVCLayerContext
This commit is contained in:
parent
1ca4c2a96d
commit
cf7add8d70
@ -636,10 +636,10 @@ int ff_hevc_pred_mode_decode(HEVCLocalContext *lc)
|
|||||||
return GET_CABAC(PRED_MODE_FLAG_OFFSET);
|
return GET_CABAC(PRED_MODE_FLAG_OFFSET);
|
||||||
}
|
}
|
||||||
|
|
||||||
int ff_hevc_split_coding_unit_flag_decode(HEVCLocalContext *lc, const HEVCSPS *sps,
|
int ff_hevc_split_coding_unit_flag_decode(HEVCLocalContext *lc, uint8_t *tab_ct_depth,
|
||||||
|
const HEVCSPS *sps,
|
||||||
int ct_depth, int x0, int y0)
|
int ct_depth, int x0, int y0)
|
||||||
{
|
{
|
||||||
const HEVCContext *const s = lc->parent;
|
|
||||||
int inc = 0, depth_left = 0, depth_top = 0;
|
int inc = 0, depth_left = 0, depth_top = 0;
|
||||||
int x0b = av_zero_extend(x0, sps->log2_ctb_size);
|
int x0b = av_zero_extend(x0, sps->log2_ctb_size);
|
||||||
int y0b = av_zero_extend(y0, sps->log2_ctb_size);
|
int y0b = av_zero_extend(y0, sps->log2_ctb_size);
|
||||||
@ -647,9 +647,9 @@ int ff_hevc_split_coding_unit_flag_decode(HEVCLocalContext *lc, const HEVCSPS *s
|
|||||||
int y_cb = y0 >> sps->log2_min_cb_size;
|
int y_cb = y0 >> sps->log2_min_cb_size;
|
||||||
|
|
||||||
if (lc->ctb_left_flag || x0b)
|
if (lc->ctb_left_flag || x0b)
|
||||||
depth_left = s->tab_ct_depth[(y_cb) * sps->min_cb_width + x_cb - 1];
|
depth_left = tab_ct_depth[(y_cb) * sps->min_cb_width + x_cb - 1];
|
||||||
if (lc->ctb_up_flag || y0b)
|
if (lc->ctb_up_flag || y0b)
|
||||||
depth_top = s->tab_ct_depth[(y_cb - 1) * sps->min_cb_width + x_cb];
|
depth_top = tab_ct_depth[(y_cb - 1) * sps->min_cb_width + x_cb];
|
||||||
|
|
||||||
inc += (depth_left > ct_depth);
|
inc += (depth_left > ct_depth);
|
||||||
inc += (depth_top > ct_depth);
|
inc += (depth_top > ct_depth);
|
||||||
|
@ -72,7 +72,7 @@ static void pic_arrays_free(HEVCContext *s, HEVCLayerContext *l)
|
|||||||
av_freep(&l->deblock);
|
av_freep(&l->deblock);
|
||||||
|
|
||||||
av_freep(&l->skip_flag);
|
av_freep(&l->skip_flag);
|
||||||
av_freep(&s->tab_ct_depth);
|
av_freep(&l->tab_ct_depth);
|
||||||
|
|
||||||
av_freep(&s->tab_ipm);
|
av_freep(&s->tab_ipm);
|
||||||
av_freep(&s->cbf_luma);
|
av_freep(&s->cbf_luma);
|
||||||
@ -109,8 +109,8 @@ static int pic_arrays_init(HEVCContext *s, HEVCLayerContext *l, const HEVCSPS *s
|
|||||||
goto fail;
|
goto fail;
|
||||||
|
|
||||||
l->skip_flag = av_malloc_array(sps->min_cb_height, sps->min_cb_width);
|
l->skip_flag = av_malloc_array(sps->min_cb_height, sps->min_cb_width);
|
||||||
s->tab_ct_depth = av_malloc_array(sps->min_cb_height, sps->min_cb_width);
|
l->tab_ct_depth = av_malloc_array(sps->min_cb_height, sps->min_cb_width);
|
||||||
if (!l->skip_flag || !s->tab_ct_depth)
|
if (!l->skip_flag || !l->tab_ct_depth)
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|
||||||
s->cbf_luma = av_malloc_array(sps->min_tb_width, sps->min_tb_height);
|
s->cbf_luma = av_malloc_array(sps->min_tb_width, sps->min_tb_height);
|
||||||
@ -2383,7 +2383,7 @@ static int hls_coding_unit(HEVCLocalContext *lc, const HEVCContext *s,
|
|||||||
lc->qPy_pred = lc->qp_y;
|
lc->qPy_pred = lc->qp_y;
|
||||||
}
|
}
|
||||||
|
|
||||||
set_ct_depth(sps, s->tab_ct_depth, x0, y0, log2_cb_size, lc->ct_depth);
|
set_ct_depth(sps, l->tab_ct_depth, x0, y0, log2_cb_size, lc->ct_depth);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -2403,7 +2403,8 @@ static int hls_coding_quadtree(HEVCLocalContext *lc,
|
|||||||
if (x0 + cb_size <= sps->width &&
|
if (x0 + cb_size <= sps->width &&
|
||||||
y0 + cb_size <= sps->height &&
|
y0 + cb_size <= sps->height &&
|
||||||
log2_cb_size > sps->log2_min_cb_size) {
|
log2_cb_size > sps->log2_min_cb_size) {
|
||||||
split_cu = ff_hevc_split_coding_unit_flag_decode(lc, sps, cb_depth, x0, y0);
|
split_cu = ff_hevc_split_coding_unit_flag_decode(lc, l->tab_ct_depth,
|
||||||
|
sps, cb_depth, x0, y0);
|
||||||
} else {
|
} else {
|
||||||
split_cu = (log2_cb_size > sps->log2_min_cb_size);
|
split_cu = (log2_cb_size > sps->log2_min_cb_size);
|
||||||
}
|
}
|
||||||
|
@ -449,6 +449,7 @@ typedef struct HEVCLayerContext {
|
|||||||
|
|
||||||
// CU
|
// CU
|
||||||
uint8_t *skip_flag;
|
uint8_t *skip_flag;
|
||||||
|
uint8_t *tab_ct_depth;
|
||||||
} HEVCLayerContext;
|
} HEVCLayerContext;
|
||||||
|
|
||||||
typedef struct HEVCContext {
|
typedef struct HEVCContext {
|
||||||
@ -506,8 +507,6 @@ typedef struct HEVCContext {
|
|||||||
|
|
||||||
int32_t *tab_slice_address;
|
int32_t *tab_slice_address;
|
||||||
|
|
||||||
// CU
|
|
||||||
uint8_t *tab_ct_depth;
|
|
||||||
// PU
|
// PU
|
||||||
uint8_t *tab_ipm;
|
uint8_t *tab_ipm;
|
||||||
|
|
||||||
@ -584,7 +583,8 @@ int ff_hevc_cu_transquant_bypass_flag_decode(HEVCLocalContext *lc);
|
|||||||
int ff_hevc_skip_flag_decode(HEVCLocalContext *lc, uint8_t *skip_flag,
|
int ff_hevc_skip_flag_decode(HEVCLocalContext *lc, uint8_t *skip_flag,
|
||||||
int x0, int y0, int x_cb, int y_cb, int min_cb_width);
|
int x0, int y0, int x_cb, int y_cb, int min_cb_width);
|
||||||
int ff_hevc_pred_mode_decode(HEVCLocalContext *lc);
|
int ff_hevc_pred_mode_decode(HEVCLocalContext *lc);
|
||||||
int ff_hevc_split_coding_unit_flag_decode(HEVCLocalContext *lc, const HEVCSPS *sps,
|
int ff_hevc_split_coding_unit_flag_decode(HEVCLocalContext *lc, uint8_t *tab_ct_depth,
|
||||||
|
const HEVCSPS *sps,
|
||||||
int ct_depth, int x0, int y0);
|
int ct_depth, int x0, int y0);
|
||||||
int ff_hevc_part_mode_decode(HEVCLocalContext *lc, const HEVCSPS *sps, int log2_cb_size);
|
int ff_hevc_part_mode_decode(HEVCLocalContext *lc, const HEVCSPS *sps, int log2_cb_size);
|
||||||
int ff_hevc_pcm_flag_decode(HEVCLocalContext *lc);
|
int ff_hevc_pcm_flag_decode(HEVCLocalContext *lc);
|
||||||
|
Loading…
Reference in New Issue
Block a user