fix[mpp_sys_cfg]: Fix stride issue on resolution change

Platform: General
Spec: vp8/vp9/mpeg2

Error case:
Stride information persists incorrectly across
resolution changes, leading to errors.

Solution:
When the stride is not set externally, it needs to
be set to 0 to avoid the stride not being updated
in time when the resolution of the same source
changes. For example, the source:
VP9_crowd_run_2048X1088_60fps_bd8_frm_resize_l41.webm
contains two resolutions: 2048x1088 and 1365x725

Source:
VP9_crowd_run_2048X1088_60fps_bd8_frm_resize_l41.webm

Reported-by: redmine #552464
Change-Id: I0e8f7c77736dbba31ccd98e559e3d7eeac240d97
Signed-off-by: Hongjin Li <vic.hong@rock-chips.com>
This commit is contained in:
Hongjin Li 2025-05-19 14:00:24 +08:00 committed by Herman Chen
parent 6fc495af49
commit 3507338fa6
3 changed files with 6 additions and 0 deletions

View file

@ -1283,6 +1283,8 @@ static MPP_RET m2vd_alloc_frame(M2VDParserContext *ctx)
mpp_frame_set_width(ctx->frame_cur->f, ctx->display_width);
mpp_frame_set_height(ctx->frame_cur->f, ctx->display_height);
mpp_frame_set_hor_stride(ctx->frame_cur->f, 0);
mpp_frame_set_ver_stride(ctx->frame_cur->f, 0);
mpp_frame_set_errinfo(ctx->frame_cur->f, 0);
mpp_frame_set_pts(ctx->frame_cur->f, frm_pts);
ctx->frame_cur->flags = M2V_OUT_FLAG;

View file

@ -626,6 +626,8 @@ static MPP_RET vp8d_alloc_frame(VP8DParserContext_t *p)
if (p->frame_out->slot_index == 0xff) {
mpp_frame_set_width(p->frame_out->f, p->width);
mpp_frame_set_height(p->frame_out->f, p->height);
mpp_frame_set_hor_stride(p->frame_out->f, 0);
mpp_frame_set_ver_stride(p->frame_out->f, 0);
mpp_frame_set_errinfo(p->frame_out->f, 0);
mpp_frame_set_pts(p->frame_out->f, p->pts);
ret = mpp_buf_slot_get_unused(p->frame_slots,

View file

@ -387,6 +387,8 @@ static RK_S32 vp9_alloc_frame(Vp9CodecContext *ctx, VP9Frame *frame)
mpp_frame_set_width(frame->f, ctx->width);
mpp_frame_set_height(frame->f, ctx->height);
mpp_frame_set_hor_stride(frame->f, 0);
mpp_frame_set_ver_stride(frame->f, 0);
mpp_frame_set_errinfo(frame->f, 0);
mpp_frame_set_discard(frame->f, 0);
mpp_frame_set_pts(frame->f, s->pts);