diff options
author | Davide Garberi <dade.garberi@gmail.com> | 2018-01-17 16:25:28 +0100 |
---|---|---|
committer | Davide Garberi <dade.garberi@gmail.com> | 2018-01-19 14:10:46 +0100 |
commit | 31906b4768868460b57a12a97ccf3537003073db (patch) | |
tree | bb55ea08a1694fb3e0a00e8cca9e97f1ec823a19 /camera | |
parent | c2dcff351ddcee3324230a47ccf1e05ec4e80cc2 (diff) |
msm8996-common: camera: Update to LA.HB.1.3.2-40600-8x96.0
* The kernel camera driver is currently updated to this tag, so it should be just better to update the HAL too
Signed-off-by: Davide Garberi <dade.garberi@gmail.com>
Diffstat (limited to 'camera')
-rw-r--r-- | camera/QCamera2/HAL/QCamera2HWI.cpp | 2 | ||||
-rwxr-xr-x | camera/QCamera2/HAL/QCameraMem.cpp | 2 | ||||
-rw-r--r-- | camera/QCamera2/HAL/QCameraStream.cpp | 3 | ||||
-rw-r--r-- | camera/QCamera2/stack/common/mm_camera_interface.h | 3 | ||||
-rw-r--r-- | camera/QCamera2/stack/mm-camera-interface/src/mm_camera_stream.c | 138 |
5 files changed, 112 insertions, 36 deletions
diff --git a/camera/QCamera2/HAL/QCamera2HWI.cpp b/camera/QCamera2/HAL/QCamera2HWI.cpp index 1e6f310..bc97c07 100644 --- a/camera/QCamera2/HAL/QCamera2HWI.cpp +++ b/camera/QCamera2/HAL/QCamera2HWI.cpp @@ -6828,7 +6828,7 @@ int32_t QCamera2HardwareInterface::addStreamToChannel(QCameraChannel *pChannel, } else { padding_info = gCamCapability[mCameraId]->padding_info; - if (streamType == CAM_STREAM_TYPE_PREVIEW) { + if (streamType == CAM_STREAM_TYPE_PREVIEW || streamType == CAM_STREAM_TYPE_POSTVIEW) { padding_info.width_padding = mSurfaceStridePadding; padding_info.height_padding = CAM_PAD_TO_2; } diff --git a/camera/QCamera2/HAL/QCameraMem.cpp b/camera/QCamera2/HAL/QCameraMem.cpp index 00f1548..f4c239a 100755 --- a/camera/QCamera2/HAL/QCameraMem.cpp +++ b/camera/QCamera2/HAL/QCameraMem.cpp @@ -1289,7 +1289,7 @@ QCameraVideoMemory::QCameraVideoMemory(camera_request_memory memory, mMetaBufCount = 0; mBufType = bufType; //Set Default color conversion format - mUsage = private_handle_t::PRIV_FLAGS_ITU_R_601_FR; + mUsage = private_handle_t::PRIV_FLAGS_ITU_R_709; //Set Default frame format mFormat = OMX_COLOR_FormatYUV420SemiPlanar; diff --git a/camera/QCamera2/HAL/QCameraStream.cpp b/camera/QCamera2/HAL/QCameraStream.cpp index cbe8a6a..7817009 100644 --- a/camera/QCamera2/HAL/QCameraStream.cpp +++ b/camera/QCamera2/HAL/QCameraStream.cpp @@ -798,8 +798,9 @@ int32_t QCameraStream::calcOffset(cam_stream_info_t *streamInfo) &streamInfo->buf_planes); break; case CAM_STREAM_TYPE_POSTVIEW: - rc = mm_stream_calc_offset_post_view(streamInfo->fmt, + rc = mm_stream_calc_offset_post_view(streamInfo, &dim, + &mPaddingInfo, &streamInfo->buf_planes); break; case CAM_STREAM_TYPE_SNAPSHOT: diff --git a/camera/QCamera2/stack/common/mm_camera_interface.h b/camera/QCamera2/stack/common/mm_camera_interface.h index 40bd6d3..f3c7ce4 100644 --- a/camera/QCamera2/stack/common/mm_camera_interface.h +++ b/camera/QCamera2/stack/common/mm_camera_interface.h @@ -883,8 +883,9 @@ int32_t mm_stream_calc_offset_preview(cam_stream_info_t *stream_info, cam_padding_info_t *padding, cam_stream_buf_plane_info_t *buf_planes); -int32_t mm_stream_calc_offset_post_view(cam_format_t fmt, +int32_t mm_stream_calc_offset_post_view(cam_stream_info_t *stream_info, cam_dimension_t *dim, + cam_padding_info_t *padding, cam_stream_buf_plane_info_t *buf_planes); int32_t mm_stream_calc_offset_snapshot(cam_format_t fmt, diff --git a/camera/QCamera2/stack/mm-camera-interface/src/mm_camera_stream.c b/camera/QCamera2/stack/mm-camera-interface/src/mm_camera_stream.c index 13a01d5..a1958f0 100644 --- a/camera/QCamera2/stack/mm-camera-interface/src/mm_camera_stream.c +++ b/camera/QCamera2/stack/mm-camera-interface/src/mm_camera_stream.c @@ -83,8 +83,9 @@ int32_t mm_stream_calc_offset_preview(cam_stream_info_t *stream_info, cam_dimension_t *dim, cam_padding_info_t *padding, cam_stream_buf_plane_info_t *buf_planes); -int32_t mm_stream_calc_offset_post_view(cam_format_t fmt, +int32_t mm_stream_calc_offset_post_view(cam_stream_info_t *stream_info, cam_dimension_t *dim, + cam_padding_info_t *padding, cam_stream_buf_plane_info_t *buf_planes); int32_t mm_stream_calc_offset_snapshot(cam_format_t fmt, @@ -2681,22 +2682,27 @@ int32_t mm_stream_calc_offset_preview(cam_stream_info_t *stream_info, * padding information * * PARAMETERS : - * @fmt : image format + * @stream_info : Stream information * @dim : image dimension + * @padding : Padding info * @buf_planes : [out] buffer plane information * * RETURN : int32_t type of status * 0 -- success * -1 -- failure *==========================================================================*/ -int32_t mm_stream_calc_offset_post_view(cam_format_t fmt, +int32_t mm_stream_calc_offset_post_view(cam_stream_info_t *stream_info, cam_dimension_t *dim, + cam_padding_info_t *padding, cam_stream_buf_plane_info_t *buf_planes) { int32_t rc = 0; int stride = 0, scanline = 0; - switch (fmt) { + uint32_t width_padding = 0; + uint32_t height_padding = 0; + + switch (stream_info->fmt) { case CAM_FORMAT_YUV_420_NV12: case CAM_FORMAT_YUV_420_NV21: case CAM_FORMAT_Y_ONLY: @@ -2706,8 +2712,16 @@ int32_t mm_stream_calc_offset_post_view(cam_format_t fmt, /* 2 planes: Y + CbCr */ buf_planes->plane_info.num_planes = 2; - stride = PAD_TO_SIZE(dim->width, CAM_PAD_TO_64); - scanline = PAD_TO_SIZE(dim->height, CAM_PAD_TO_64); + if (stream_info->stream_type != CAM_STREAM_TYPE_OFFLINE_PROC) { + width_padding = padding->width_padding; + height_padding = CAM_PAD_TO_2; + } else { + width_padding = padding->width_padding; + height_padding = padding->height_padding; + } + + stride = PAD_TO_SIZE(dim->width, width_padding); + scanline = PAD_TO_SIZE(dim->height, height_padding); buf_planes->plane_info.mp[0].offset = 0; buf_planes->plane_info.mp[0].len = (uint32_t)(stride * scanline); buf_planes->plane_info.mp[0].offset_x = 0; @@ -2717,8 +2731,8 @@ int32_t mm_stream_calc_offset_post_view(cam_format_t fmt, buf_planes->plane_info.mp[0].width = dim->width; buf_planes->plane_info.mp[0].height = dim->height; - stride = PAD_TO_SIZE(dim->width, CAM_PAD_TO_64); - scanline = PAD_TO_SIZE(dim->height / 2, CAM_PAD_TO_64); + stride = PAD_TO_SIZE(dim->width, width_padding); + scanline = PAD_TO_SIZE(dim->height / 2, height_padding); buf_planes->plane_info.mp[1].offset = 0; buf_planes->plane_info.mp[1].len = (uint32_t)(stride * scanline); @@ -2738,8 +2752,16 @@ int32_t mm_stream_calc_offset_post_view(cam_format_t fmt, /* 2 planes: Y + CbCr */ buf_planes->plane_info.num_planes = 2; - stride = PAD_TO_SIZE(dim->width, CAM_PAD_TO_32); - scanline = PAD_TO_SIZE(dim->height, CAM_PAD_TO_32); + if (stream_info->stream_type != CAM_STREAM_TYPE_OFFLINE_PROC) { + width_padding = CAM_PAD_TO_32; + height_padding = CAM_PAD_TO_32; + } else { + width_padding = padding->width_padding; + height_padding = padding->height_padding; + } + + stride = PAD_TO_SIZE(dim->width, width_padding); + scanline = PAD_TO_SIZE(dim->height, height_padding); buf_planes->plane_info.mp[0].offset = 0; buf_planes->plane_info.mp[0].len = PAD_TO_SIZE((uint32_t)(stride * scanline), CAM_PAD_TO_4K); @@ -2750,8 +2772,8 @@ int32_t mm_stream_calc_offset_post_view(cam_format_t fmt, buf_planes->plane_info.mp[0].width = dim->width; buf_planes->plane_info.mp[0].height = dim->height; - stride = PAD_TO_SIZE(dim->width / 2, CAM_PAD_TO_32) * 2; - scanline = PAD_TO_SIZE(dim->height / 2, CAM_PAD_TO_32); + stride = PAD_TO_SIZE(dim->width / 2, width_padding) * 2; + scanline = PAD_TO_SIZE(dim->height / 2, height_padding); buf_planes->plane_info.mp[1].offset = 0; buf_planes->plane_info.mp[1].len = PAD_TO_SIZE((uint32_t)(stride * scanline), CAM_PAD_TO_4K); @@ -2771,8 +2793,16 @@ int32_t mm_stream_calc_offset_post_view(cam_format_t fmt, /* 3 planes: Y + Cr + Cb */ buf_planes->plane_info.num_planes = 3; - stride = PAD_TO_SIZE(dim->width, CAM_PAD_TO_16); - scanline = PAD_TO_SIZE(dim->height, CAM_PAD_TO_2); + if (stream_info->stream_type != CAM_STREAM_TYPE_OFFLINE_PROC) { + width_padding = CAM_PAD_TO_16; + height_padding = CAM_PAD_TO_2; + } else { + width_padding = padding->width_padding; + height_padding = padding->height_padding; + } + + stride = PAD_TO_SIZE(dim->width, width_padding); + scanline = PAD_TO_SIZE(dim->height, height_padding); buf_planes->plane_info.mp[0].offset = 0; buf_planes->plane_info.mp[0].len = (uint32_t)(stride * scanline); buf_planes->plane_info.mp[0].offset_x = 0; @@ -2782,8 +2812,8 @@ int32_t mm_stream_calc_offset_post_view(cam_format_t fmt, buf_planes->plane_info.mp[0].width = dim->width; buf_planes->plane_info.mp[0].height = dim->height; - stride = PAD_TO_SIZE(stride / 2, CAM_PAD_TO_16); - scanline = scanline / 2; + stride = PAD_TO_SIZE(stride / 2, width_padding); + scanline = PAD_TO_SIZE(stride / 2, height_padding); buf_planes->plane_info.mp[1].offset = 0; buf_planes->plane_info.mp[1].len = (uint32_t)(stride * scanline); @@ -2815,8 +2845,13 @@ int32_t mm_stream_calc_offset_post_view(cam_format_t fmt, /* 2 planes: Y + CbCr */ buf_planes->plane_info.num_planes = 2; - stride = PAD_TO_SIZE(dim->width, CAM_PAD_TO_16); - scanline = dim->height; + if (stream_info->stream_type != CAM_STREAM_TYPE_OFFLINE_PROC) { + stride = PAD_TO_SIZE(dim->width, CAM_PAD_TO_16); + scanline = dim->height; + } else { + stride = PAD_TO_SIZE(dim->width, padding->width_padding); + scanline = PAD_TO_SIZE(dim->height, padding->height_padding); + } buf_planes->plane_info.mp[0].offset = 0; buf_planes->plane_info.mp[0].len = (uint32_t)(stride * scanline); buf_planes->plane_info.mp[0].offset_x = 0; @@ -2843,11 +2878,16 @@ int32_t mm_stream_calc_offset_post_view(cam_format_t fmt, case CAM_FORMAT_YUV_420_NV12_VENUS: #ifdef VENUS_PRESENT // using Venus - stride = VENUS_Y_STRIDE(COLOR_FMT_NV12, dim->width); - scanline = VENUS_Y_SCANLINES(COLOR_FMT_NV12, dim->height); + if (stream_info->stream_type != CAM_STREAM_TYPE_OFFLINE_PROC) { + stride = VENUS_Y_STRIDE(COLOR_FMT_NV12, dim->width); + scanline = VENUS_Y_SCANLINES(COLOR_FMT_NV12, dim->height); + } else { + stride = PAD_TO_SIZE(dim->width, padding->width_padding); + scanline = PAD_TO_SIZE(dim->height, padding->height_padding); + } buf_planes->plane_info.frame_len = - VENUS_BUFFER_SIZE(COLOR_FMT_NV12, dim->width, dim->height); + VENUS_BUFFER_SIZE(COLOR_FMT_NV12, stride, scanline); buf_planes->plane_info.num_planes = 2; buf_planes->plane_info.mp[0].len = (uint32_t)(stride * scanline); buf_planes->plane_info.mp[0].offset = 0; @@ -2857,8 +2897,13 @@ int32_t mm_stream_calc_offset_post_view(cam_format_t fmt, buf_planes->plane_info.mp[0].scanline = scanline; buf_planes->plane_info.mp[0].width = dim->width; buf_planes->plane_info.mp[0].height = dim->height; - stride = VENUS_UV_STRIDE(COLOR_FMT_NV12, dim->width); - scanline = VENUS_UV_SCANLINES(COLOR_FMT_NV12, dim->height); + if (stream_info->stream_type != CAM_STREAM_TYPE_OFFLINE_PROC) { + stride = VENUS_UV_STRIDE(COLOR_FMT_NV12, dim->width); + scanline = VENUS_UV_SCANLINES(COLOR_FMT_NV12, dim->height); + } else { + stride = PAD_TO_SIZE(dim->width, padding->width_padding); + scanline = PAD_TO_SIZE(dim->height, padding->height_padding); + } buf_planes->plane_info.mp[1].len = buf_planes->plane_info.frame_len - buf_planes->plane_info.mp[0].len; buf_planes->plane_info.mp[1].offset = 0; @@ -2876,8 +2921,13 @@ int32_t mm_stream_calc_offset_post_view(cam_format_t fmt, case CAM_FORMAT_YUV_420_NV21_VENUS: #ifdef VENUS_PRESENT // using Venus - stride = VENUS_Y_STRIDE(COLOR_FMT_NV21, dim->width); - scanline = VENUS_Y_SCANLINES(COLOR_FMT_NV21, dim->height); + if (stream_info->stream_type != CAM_STREAM_TYPE_OFFLINE_PROC) { + stride = VENUS_Y_STRIDE(COLOR_FMT_NV21, dim->width); + scanline = VENUS_Y_SCANLINES(COLOR_FMT_NV21, dim->height); + } else { + stride = PAD_TO_SIZE(dim->width, padding->width_padding); + scanline = PAD_TO_SIZE(dim->height, padding->height_padding); + } buf_planes->plane_info.frame_len = VENUS_BUFFER_SIZE(COLOR_FMT_NV21, dim->width, dim->height); buf_planes->plane_info.num_planes = 2; @@ -2889,8 +2939,13 @@ int32_t mm_stream_calc_offset_post_view(cam_format_t fmt, buf_planes->plane_info.mp[0].scanline = scanline; buf_planes->plane_info.mp[0].width = dim->width; buf_planes->plane_info.mp[0].height = dim->height; - stride = VENUS_UV_STRIDE(COLOR_FMT_NV21, dim->width); - scanline = VENUS_UV_SCANLINES(COLOR_FMT_NV21, dim->height); + if (stream_info->stream_type != CAM_STREAM_TYPE_OFFLINE_PROC) { + stride = VENUS_UV_STRIDE(COLOR_FMT_NV21, dim->width); + scanline = VENUS_UV_SCANLINES(COLOR_FMT_NV21, dim->height); + } else { + stride = PAD_TO_SIZE(dim->width, padding->width_padding); + scanline = PAD_TO_SIZE(dim->height, padding->height_padding); + } buf_planes->plane_info.mp[1].len = buf_planes->plane_info.frame_len - buf_planes->plane_info.mp[0].len; buf_planes->plane_info.mp[1].offset = 0; @@ -2910,8 +2965,13 @@ int32_t mm_stream_calc_offset_post_view(cam_format_t fmt, { int meta_stride = 0,meta_scanline = 0; // using UBWC - stride = VENUS_Y_STRIDE(COLOR_FMT_NV12_UBWC, dim->width); - scanline = VENUS_Y_SCANLINES(COLOR_FMT_NV12_UBWC, dim->height); + if (stream_info->stream_type != CAM_STREAM_TYPE_OFFLINE_PROC) { + stride = VENUS_Y_STRIDE(COLOR_FMT_NV12_UBWC, dim->width); + scanline = VENUS_Y_SCANLINES(COLOR_FMT_NV12_UBWC, dim->height); + } else { + stride = PAD_TO_SIZE(dim->width, padding->width_padding); + scanline = PAD_TO_SIZE(dim->height, padding->height_padding); + } meta_stride = VENUS_Y_META_STRIDE(COLOR_FMT_NV12_UBWC, dim->width); meta_scanline = VENUS_Y_META_SCANLINES(COLOR_FMT_NV12_UBWC, dim->height); @@ -2958,7 +3018,7 @@ int32_t mm_stream_calc_offset_post_view(cam_format_t fmt, break; default: LOGE("Invalid cam_format for preview %d", - fmt); + stream_info->fmt); rc = -1; break; } @@ -4210,8 +4270,9 @@ int32_t mm_stream_calc_offset_postproc(cam_stream_info_t *stream_info, plns); break; case CAM_STREAM_TYPE_POSTVIEW: - rc = mm_stream_calc_offset_post_view(stream_info->fmt, + rc = mm_stream_calc_offset_post_view(stream_info, &stream_info->dim, + padding, plns); break; case CAM_STREAM_TYPE_SNAPSHOT: @@ -4311,6 +4372,7 @@ uint32_t mm_stream_calc_lcm(int32_t num1, int32_t num2) int32_t mm_stream_calc_offset(mm_stream_t *my_obj) { int32_t rc = 0; + uint32_t i; cam_dimension_t dim = my_obj->stream_info->dim; if (my_obj->stream_info->pp_config.feature_mask & CAM_QCOM_FEATURE_ROTATION && @@ -4331,8 +4393,9 @@ int32_t mm_stream_calc_offset(mm_stream_t *my_obj) &my_obj->stream_info->buf_planes); break; case CAM_STREAM_TYPE_POSTVIEW: - rc = mm_stream_calc_offset_post_view(my_obj->stream_info->fmt, + rc = mm_stream_calc_offset_post_view(my_obj->stream_info, &dim, + &my_obj->padding_info, &my_obj->stream_info->buf_planes); break; case CAM_STREAM_TYPE_SNAPSHOT: @@ -4376,6 +4439,17 @@ int32_t mm_stream_calc_offset(mm_stream_t *my_obj) } my_obj->frame_offset = my_obj->stream_info->buf_planes.plane_info; + LOGH("Stream type %d num_planes %d", my_obj->stream_info->stream_type, + my_obj->frame_offset.num_planes); + for (i = 0; i < my_obj->frame_offset.num_planes; i++) { + LOGH("Plane %d, stride %d, scanline %d, width %d, height %d, \ + length %d", i, my_obj->frame_offset.mp[i].stride, + my_obj->frame_offset.mp[i].scanline, + my_obj->frame_offset.mp[i].width, + my_obj->frame_offset.mp[i].height, + my_obj->frame_offset.mp[i].len); + } + return rc; } |