summaryrefslogtreecommitdiffstats
path: root/mm-video-v4l2/vidc/venc/src/video_encoder_device_v4l2.cpp
diff options
context:
space:
mode:
authorYadav Anamika <anamik@codeaurora.org>2015-08-17 16:55:56 +0530
committerYadav Anamika <anamik@codeaurora.org>2015-08-18 14:43:46 +0530
commit72acb7fe9f3d61ae54f62789bcf93b7ac6a01472 (patch)
tree65eb4197056a04a788c7d8c136437e21e5bec6b7 /mm-video-v4l2/vidc/venc/src/video_encoder_device_v4l2.cpp
parent382b5b7c884293b2bececb636e69b5a104f138c7 (diff)
parentb266f81c65e2f4ddacb0c78cb3a49d8121d4574b (diff)
downloadandroid_hardware_qcom_media-72acb7fe9f3d61ae54f62789bcf93b7ac6a01472.tar.gz
android_hardware_qcom_media-72acb7fe9f3d61ae54f62789bcf93b7ac6a01472.tar.bz2
android_hardware_qcom_media-72acb7fe9f3d61ae54f62789bcf93b7ac6a01472.zip
Merge commit 'b266f81c65e2f4ddacb0c78cb3a49d8121d4574b' into remote branch.
Conflicts: mm-core/inc/OMX_QCOMExtns.h Change-Id: I0cf042156b98b4c81876d046404dbf4c13c57e74
Diffstat (limited to 'mm-video-v4l2/vidc/venc/src/video_encoder_device_v4l2.cpp')
-rw-r--r--mm-video-v4l2/vidc/venc/src/video_encoder_device_v4l2.cpp35
1 files changed, 34 insertions, 1 deletions
diff --git a/mm-video-v4l2/vidc/venc/src/video_encoder_device_v4l2.cpp b/mm-video-v4l2/vidc/venc/src/video_encoder_device_v4l2.cpp
index 217d3a07..e5571ca9 100644
--- a/mm-video-v4l2/vidc/venc/src/video_encoder_device_v4l2.cpp
+++ b/mm-video-v4l2/vidc/venc/src/video_encoder_device_v4l2.cpp
@@ -1941,6 +1941,16 @@ bool venc_dev::venc_set_param(void *paramData, OMX_INDEXTYPE index)
}
break;
}
+ case OMX_QcomIndexConfigVideoVencLowLatencyMode:
+ {
+ QOMX_ENABLETYPE *pParam = (QOMX_ENABLETYPE*)paramData;
+
+ if (!venc_set_lowlatency_mode(pParam->bEnable)) {
+ DEBUG_PRINT_ERROR("Setting low latency mode failed");
+ return OMX_ErrorUnsupportedSetting;
+ }
+ break;
+ }
case OMX_IndexParamVideoSliceFMO:
default:
DEBUG_PRINT_ERROR("ERROR: Unsupported parameter in venc_set_param: %u",
@@ -3665,7 +3675,8 @@ bool venc_dev::venc_set_intra_period(OMX_U32 nPFrames, OMX_U32 nBFrames)
DEBUG_PRINT_LOW("Success IOCTL set control for id=%d, value=%lu", control.id, intra_period.num_bframes);
- if (m_sVenc_cfg.codectype == V4L2_PIX_FMT_H264) {
+ if (m_sVenc_cfg.codectype == V4L2_PIX_FMT_H264 ||
+ m_sVenc_cfg.codectype == V4L2_PIX_FMT_HEVC) {
control.id = V4L2_CID_MPEG_VIDC_VIDEO_IDR_PERIOD;
control.value = 1;
@@ -4661,6 +4672,28 @@ bool venc_dev::venc_set_max_hierp(OMX_U32 hierp_layers)
}
}
+bool venc_dev::venc_set_lowlatency_mode(OMX_BOOL enable)
+{
+ int rc = 0;
+ struct v4l2_control control;
+
+ control.id = V4L2_CID_MPEG_VIDC_VIDEO_LOWLATENCY_MODE;
+ if (enable)
+ control.value = V4L2_CID_MPEG_VIDC_VIDEO_LOWLATENCY_ENABLE;
+ else
+ control.value = V4L2_CID_MPEG_VIDC_VIDEO_LOWLATENCY_DISABLE;
+
+ DEBUG_PRINT_LOW("Calling IOCTL set control for id=%x, val=%d", control.id, control.value);
+ rc = ioctl(m_nDriver_fd, VIDIOC_S_CTRL, &control);
+ if (rc) {
+ DEBUG_PRINT_ERROR("Failed to set lowlatency control");
+ return false;
+ }
+ DEBUG_PRINT_LOW("Success IOCTL set control for id=%x, value=%d", control.id, control.value);
+
+ return true;
+}
+
bool venc_dev::venc_set_vui_timing_info(OMX_BOOL enable)
{
struct v4l2_control control;