From afb146951b471aaac1fefd72bff89492a0aaff3b Mon Sep 17 00:00:00 2001 From: Surajit Podder Date: Tue, 15 Sep 2015 19:03:54 +0530 Subject: mm-video-v4l2: Fix downscalar issue With downscalar enabled, the output resolution is hardcoded to 2560x1600, which can cause upscaling of one the dimensions Ensure no dimension is upscaled with downscalar enabled, changing width/height to the original resolution as applicable. Change-Id: I334c20bbcc197817a03aec9166f25d78f6ada5d7 --- mm-video-v4l2/vidc/vdec/src/omx_vdec_msm8974.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) (limited to 'mm-video-v4l2/vidc/vdec') diff --git a/mm-video-v4l2/vidc/vdec/src/omx_vdec_msm8974.cpp b/mm-video-v4l2/vidc/vdec/src/omx_vdec_msm8974.cpp index c3a7f1af..a60000cd 100644 --- a/mm-video-v4l2/vidc/vdec/src/omx_vdec_msm8974.cpp +++ b/mm-video-v4l2/vidc/vdec/src/omx_vdec_msm8974.cpp @@ -937,14 +937,20 @@ int omx_vdec::decide_downscalar() rc = enable_downscalar(); if (rc < 0) return rc; - rc = update_resolution(m_downscalar_width, m_downscalar_height, m_downscalar_width, m_downscalar_height); + OMX_U32 width = m_downscalar_width > fmt.fmt.pix_mp.width ? + fmt.fmt.pix_mp.width : m_downscalar_width; + OMX_U32 height = m_downscalar_height > fmt.fmt.pix_mp.height ? + fmt.fmt.pix_mp.height : m_downscalar_height; + rc = update_resolution(width, height, + VENUS_Y_STRIDE(COLOR_FMT_NV12, width), VENUS_Y_SCANLINES(COLOR_FMT_NV12, height)); if (rc < 0) return rc; } else { rc = disable_downscalar(); if (rc < 0) return rc; - rc = update_resolution(fmt.fmt.pix_mp.width, fmt.fmt.pix_mp.height, fmt.fmt.pix_mp.plane_fmt[0].bytesperline, fmt.fmt.pix_mp.plane_fmt[0].reserved[0]); + rc = update_resolution(fmt.fmt.pix_mp.width, fmt.fmt.pix_mp.height, + fmt.fmt.pix_mp.plane_fmt[0].bytesperline, fmt.fmt.pix_mp.plane_fmt[0].reserved[0]); if (rc < 0) return rc; } -- cgit v1.2.3