diff --git a/libavcodec/hevc.c b/libavcodec/hevc.c index 727f3a5ee2..57e940e8e5 100644 --- a/libavcodec/hevc.c +++ b/libavcodec/hevc.c @@ -97,7 +97,7 @@ static int pic_arrays_init(HEVCContext *s, const HEVCSPS *sps) if (!s->sao || !s->deblock) goto fail; - s->skip_flag = av_malloc(pic_size_in_ctb); + s->skip_flag = av_malloc(sps->min_cb_height * sps->min_cb_width); s->tab_ct_depth = av_malloc_array(sps->min_cb_height, sps->min_cb_width); if (!s->skip_flag || !s->tab_ct_depth) goto fail; @@ -2019,6 +2019,12 @@ static int hls_coding_unit(HEVCContext *s, int x0, int y0, int log2_cb_size) x += min_cb_width; } lc->cu.pred_mode = skip_flag ? MODE_SKIP : MODE_INTER; + } else { + x = y_cb * min_cb_width + x_cb; + for (y = 0; y < length; y++) { + memset(&s->skip_flag[x], 0, length); + x += min_cb_width; + } } if (SAMPLE_CTB(s->skip_flag, x_cb, y_cb)) { diff --git a/libavcodec/hevc_refs.c b/libavcodec/hevc_refs.c index bb55aa8a80..b3a97871d5 100644 --- a/libavcodec/hevc_refs.c +++ b/libavcodec/hevc_refs.c @@ -51,16 +51,11 @@ void ff_hevc_unref_frame(HEVCContext *s, HEVCFrame *frame, int flags) RefPicList *ff_hevc_get_ref_list(HEVCContext *s, HEVCFrame *ref, int x0, int y0) { - if (x0 < 0 || y0 < 0) { - return s->ref->refPicList; - } else { - int x_cb = x0 >> s->sps->log2_ctb_size; - int y_cb = y0 >> s->sps->log2_ctb_size; - int pic_width_cb = (s->sps->width + (1 << s->sps->log2_ctb_size) - 1) >> - s->sps->log2_ctb_size; - int ctb_addr_ts = s->pps->ctb_addr_rs_to_ts[y_cb * pic_width_cb + x_cb]; - return (RefPicList *)ref->rpl_tab[ctb_addr_ts]; - } + int x_cb = x0 >> s->sps->log2_ctb_size; + int y_cb = y0 >> s->sps->log2_ctb_size; + int pic_width_cb = s->sps->ctb_width; + int ctb_addr_ts = s->pps->ctb_addr_rs_to_ts[y_cb * pic_width_cb + x_cb]; + return (RefPicList *)ref->rpl_tab[ctb_addr_ts]; } void ff_hevc_clear_refs(HEVCContext *s)