According to msm_media_info.h the correct alignment for the stride of P010 buffers is 128. Signed-off-by: Fritz Koenig <frkoenig@xxxxxxxxxxxx> --- The change to vdec.c isn't the most ideal. It would be great if there was a way to check the bitdepth of a format, or retrieve the stride from hfi. There is a facility to store the stride for encoding, but currently nothing for retrieving. drivers/media/platform/qcom/venus/helpers.c | 4 ++-- drivers/media/platform/qcom/venus/vdec.c | 7 ++++++- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/drivers/media/platform/qcom/venus/helpers.c b/drivers/media/platform/qcom/venus/helpers.c index ab6a29ffc81e2..a2ceab7f9ddbf 100644 --- a/drivers/media/platform/qcom/venus/helpers.c +++ b/drivers/media/platform/qcom/venus/helpers.c @@ -988,8 +988,8 @@ static u32 get_framesize_raw_p010(u32 width, u32 height) { u32 y_plane, uv_plane, y_stride, uv_stride, y_sclines, uv_sclines; - y_stride = ALIGN(width * 2, 256); - uv_stride = ALIGN(width * 2, 256); + y_stride = ALIGN(width * 2, 128); + uv_stride = ALIGN(width * 2, 128); y_sclines = ALIGN(height, 32); uv_sclines = ALIGN((height + 1) >> 1, 16); y_plane = y_stride * y_sclines; diff --git a/drivers/media/platform/qcom/venus/vdec.c b/drivers/media/platform/qcom/venus/vdec.c index 4ceaba37e2e57..3aaac480c9839 100644 --- a/drivers/media/platform/qcom/venus/vdec.c +++ b/drivers/media/platform/qcom/venus/vdec.c @@ -204,8 +204,13 @@ vdec_try_fmt_common(struct venus_inst *inst, struct v4l2_format *f) pixmp->height); if (f->type == V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE) { + unsigned int stride = pixmp->width; + + if (pixmp->pixelformat == V4L2_PIX_FMT_P010) + stride *= 2; + pfmt[0].sizeimage = szimage; - pfmt[0].bytesperline = ALIGN(pixmp->width, 128); + pfmt[0].bytesperline = ALIGN(stride, 128); } else { pfmt[0].sizeimage = clamp_t(u32, pfmt[0].sizeimage, 0, SZ_8M); pfmt[0].sizeimage = max(pfmt[0].sizeimage, szimage); -- 2.39.1.581.gbfd45094c4-goog