From c2f3236d3b89fc037c263c0b2b32f32a43f9bf49 Mon Sep 17 00:00:00 2001 From: Herman Chen Date: Thu, 31 Mar 2022 19:42:18 +0800 Subject: [PATCH] [mpp_dec]: increase fbc ver_stride Change-Id: Id56ee95567ea869624f783602e0a9e10ec5dc367 Signed-off-by: Herman Chen --- mpp/codec/dec/av1/av1d_parser.c | 1 + mpp/codec/dec/h264/h264d_init.c | 9 +++++++-- mpp/codec/dec/h265/h265d_refs.c | 1 + 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/mpp/codec/dec/av1/av1d_parser.c b/mpp/codec/dec/av1/av1d_parser.c index 8913f91d..d0ebe506 100644 --- a/mpp/codec/dec/av1/av1d_parser.c +++ b/mpp/codec/dec/av1/av1d_parser.c @@ -612,6 +612,7 @@ static MPP_RET get_current_frame(Av1CodecContext *ctx) mpp_frame_set_fmt(frame->f, ctx->pix_fmt | ((s->cfg->base.out_fmt & (MPP_FRAME_FBC_MASK)))); mpp_frame_set_offset_x(frame->f, 0); mpp_frame_set_offset_y(frame->f, 8); + mpp_frame_set_ver_stride(frame->f, MPP_ALIGN(ctx->height, 8) + 16); } else mpp_frame_set_fmt(frame->f, ctx->pix_fmt); diff --git a/mpp/codec/dec/h264/h264d_init.c b/mpp/codec/dec/h264/h264d_init.c index f234d468..7c1c6057 100755 --- a/mpp/codec/dec/h264/h264d_init.c +++ b/mpp/codec/dec/h264/h264d_init.c @@ -438,8 +438,6 @@ static MPP_RET dpb_mark_malloc(H264dVideoCtx_t *p_Vid, H264_StorePic_t *dec_pic) */ if (p_Vid->frame_mbs_only_flag || p_Vid->bit_depth_luma == 10) { mpp_slots_set_prop(p_Dec->frame_slots, SLOTS_HOR_ALIGN, hor_align_64); - impl->offset_x = 0; - impl->offset_y = 4; fmt |= (out_fmt & MPP_FRAME_FBC_MASK); } p_Dec->cfg->base.out_fmt = fmt; @@ -451,6 +449,13 @@ static MPP_RET dpb_mark_malloc(H264dVideoCtx_t *p_Vid, H264_StorePic_t *dec_pic) /* Before cropping */ impl->hor_stride = hor_stride; impl->ver_stride = ver_stride; + + if (MPP_FRAME_FMT_IS_FBC(out_fmt)) { + impl->offset_x = 0; + impl->offset_y = 4; + impl->ver_stride += 16; + } + /* After cropped */ impl->width = p_Vid->width_after_crop; impl->height = p_Vid->height_after_crop; diff --git a/mpp/codec/dec/h265/h265d_refs.c b/mpp/codec/dec/h265/h265d_refs.c index 38c6c0b4..e93483bb 100644 --- a/mpp/codec/dec/h265/h265d_refs.c +++ b/mpp/codec/dec/h265/h265d_refs.c @@ -98,6 +98,7 @@ static HEVCFrame *alloc_frame(HEVCContext *s) mpp_slots_set_prop(s->slots, SLOTS_HOR_ALIGN, hor_align_64); mpp_frame_set_offset_x(frame->frame, 0); mpp_frame_set_offset_y(frame->frame, 4); + mpp_frame_set_ver_stride(frame->frame, s->h265dctx->coded_height + 16); } mpp_frame_set_errinfo(frame->frame, 0);