mirror of https://gitee.com/openkylin/linux.git
media: ti-vpe: vpe: Fix Motion Vector vpdma stride
commit3dc2046ca7
("[media] media: ti-vpe: vpe: allow use of user specified stride") and commitda4414eaed
("[media] media: ti-vpe: vpdma: add support for user specified stride") resulted in the Motion Vector stride to be the same as the image stride. This caused memory corruption in the output image as mentioned in commit00db969964
("[media] media: ti-vpe: vpe: Fix line stride for output motion vector"). Fixes:3dc2046ca7
("[media] media: ti-vpe: vpe: allow use of user specified stride") Fixes:da4414eaed
("[media] media: ti-vpe: vpdma: add support for user specified stride") Signed-off-by: Benoit Parrot <bparrot@ti.com> Acked-by: Nikhil Devshatwar <nikhil.nd@ti.com> Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl> Signed-off-by: Mauro Carvalho Chehab <mchehab+samsung@kernel.org>
This commit is contained in:
parent
5139de5d5e
commit
102af9b992
|
@ -1013,11 +1013,14 @@ static void add_out_dtd(struct vpe_ctx *ctx, int port)
|
|||
dma_addr_t dma_addr;
|
||||
u32 flags = 0;
|
||||
u32 offset = 0;
|
||||
u32 stride;
|
||||
|
||||
if (port == VPE_PORT_MV_OUT) {
|
||||
vpdma_fmt = &vpdma_misc_fmts[VPDMA_DATA_FMT_MV];
|
||||
dma_addr = ctx->mv_buf_dma[mv_buf_selector];
|
||||
q_data = &ctx->q_data[Q_DATA_SRC];
|
||||
stride = ALIGN((q_data->width * vpdma_fmt->depth) >> 3,
|
||||
VPDMA_STRIDE_ALIGN);
|
||||
} else {
|
||||
/* to incorporate interleaved formats */
|
||||
int plane = fmt->coplanar ? p_data->vb_part : 0;
|
||||
|
@ -1044,6 +1047,7 @@ static void add_out_dtd(struct vpe_ctx *ctx, int port)
|
|||
}
|
||||
/* Apply the offset */
|
||||
dma_addr += offset;
|
||||
stride = q_data->bytesperline[VPE_LUMA];
|
||||
}
|
||||
|
||||
if (q_data->flags & Q_DATA_FRAME_1D)
|
||||
|
@ -1055,7 +1059,7 @@ static void add_out_dtd(struct vpe_ctx *ctx, int port)
|
|||
MAX_W, MAX_H);
|
||||
|
||||
vpdma_add_out_dtd(&ctx->desc_list, q_data->width,
|
||||
q_data->bytesperline[VPE_LUMA], &q_data->c_rect,
|
||||
stride, &q_data->c_rect,
|
||||
vpdma_fmt, dma_addr, MAX_OUT_WIDTH_REG1,
|
||||
MAX_OUT_HEIGHT_REG1, p_data->channel, flags);
|
||||
}
|
||||
|
@ -1074,10 +1078,13 @@ static void add_in_dtd(struct vpe_ctx *ctx, int port)
|
|||
dma_addr_t dma_addr;
|
||||
u32 flags = 0;
|
||||
u32 offset = 0;
|
||||
u32 stride;
|
||||
|
||||
if (port == VPE_PORT_MV_IN) {
|
||||
vpdma_fmt = &vpdma_misc_fmts[VPDMA_DATA_FMT_MV];
|
||||
dma_addr = ctx->mv_buf_dma[mv_buf_selector];
|
||||
stride = ALIGN((q_data->width * vpdma_fmt->depth) >> 3,
|
||||
VPDMA_STRIDE_ALIGN);
|
||||
} else {
|
||||
/* to incorporate interleaved formats */
|
||||
int plane = fmt->coplanar ? p_data->vb_part : 0;
|
||||
|
@ -1104,6 +1111,7 @@ static void add_in_dtd(struct vpe_ctx *ctx, int port)
|
|||
}
|
||||
/* Apply the offset */
|
||||
dma_addr += offset;
|
||||
stride = q_data->bytesperline[VPE_LUMA];
|
||||
|
||||
if (q_data->flags & Q_DATA_INTERLACED_SEQ_TB) {
|
||||
/*
|
||||
|
@ -1139,10 +1147,10 @@ static void add_in_dtd(struct vpe_ctx *ctx, int port)
|
|||
if (p_data->vb_part && fmt->fourcc == V4L2_PIX_FMT_NV12)
|
||||
frame_height /= 2;
|
||||
|
||||
vpdma_add_in_dtd(&ctx->desc_list, q_data->width,
|
||||
q_data->bytesperline[VPE_LUMA], &q_data->c_rect,
|
||||
vpdma_fmt, dma_addr, p_data->channel, field, flags, frame_width,
|
||||
frame_height, 0, 0);
|
||||
vpdma_add_in_dtd(&ctx->desc_list, q_data->width, stride,
|
||||
&q_data->c_rect, vpdma_fmt, dma_addr,
|
||||
p_data->channel, field, flags, frame_width,
|
||||
frame_height, 0, 0);
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
Loading…
Reference in New Issue