summaryrefslogtreecommitdiff
path: root/mm-video-v4l2
diff options
context:
space:
mode:
authorLinux Build Service Account <lnxbuild@quicinc.com>2017-09-28 14:31:00 -0700
committerGerrit - the friendly Code Review server <code-review@localhost>2017-09-28 14:30:59 -0700
commitd246bcfd7592838976381c2fdcfbd98018bf14e1 (patch)
tree2cb96974c70f90bf9b1f51e85eade9599384e2a1 /mm-video-v4l2
parentb251817df0ebabd636b4fed34e7a8855a509eaa7 (diff)
parentd355137dd7eb70072fc378e76c91867f82526f9a (diff)
downloadmedia-d246bcfd7592838976381c2fdcfbd98018bf14e1.tar.gz
Merge "mm-video-v4l2: Implement Mirror control"
Diffstat (limited to 'mm-video-v4l2')
-rw-r--r--mm-video-v4l2/vidc/venc/inc/omx_video_base.h1
-rw-r--r--mm-video-v4l2/vidc/venc/inc/video_encoder_device_v4l2.h1
-rw-r--r--mm-video-v4l2/vidc/venc/src/omx_video_base.cpp7
-rw-r--r--mm-video-v4l2/vidc/venc/src/omx_video_encoder.cpp22
-rw-r--r--mm-video-v4l2/vidc/venc/src/video_encoder_device_v4l2.cpp31
5 files changed, 61 insertions, 1 deletions
diff --git a/mm-video-v4l2/vidc/venc/inc/omx_video_base.h b/mm-video-v4l2/vidc/venc/inc/omx_video_base.h
index 9e090257..a474a825 100644
--- a/mm-video-v4l2/vidc/venc/inc/omx_video_base.h
+++ b/mm-video-v4l2/vidc/venc/inc/omx_video_base.h
@@ -686,6 +686,7 @@ class omx_video: public qc_omx_component
OMX_PARAM_BUFFERSUPPLIERTYPE m_sInBufSupplier;
OMX_PARAM_BUFFERSUPPLIERTYPE m_sOutBufSupplier;
OMX_CONFIG_ROTATIONTYPE m_sConfigFrameRotation;
+ OMX_CONFIG_MIRRORTYPE m_sConfigFrameMirror;
OMX_CONFIG_INTRAREFRESHVOPTYPE m_sConfigIntraRefreshVOP;
OMX_U32 m_QPSet;
OMX_VIDEO_PARAM_QUANTIZATIONTYPE m_sSessionQuantization;
diff --git a/mm-video-v4l2/vidc/venc/inc/video_encoder_device_v4l2.h b/mm-video-v4l2/vidc/venc/inc/video_encoder_device_v4l2.h
index 9315fd00..16dd5e7c 100644
--- a/mm-video-v4l2/vidc/venc/inc/video_encoder_device_v4l2.h
+++ b/mm-video-v4l2/vidc/venc/inc/video_encoder_device_v4l2.h
@@ -490,6 +490,7 @@ class venc_dev
bool venc_reconfigure_intra_refresh_period();
bool venc_reconfig_reqbufs();
bool venc_set_vpe_rotation(OMX_S32 rotation_angle);
+ bool venc_set_mirror(OMX_U32 mirror);
bool venc_set_ltrmode(OMX_U32 enable, OMX_U32 count);
bool venc_set_useltr(OMX_U32 frameIdx);
bool venc_set_markltr(OMX_U32 frameIdx);
diff --git a/mm-video-v4l2/vidc/venc/src/omx_video_base.cpp b/mm-video-v4l2/vidc/venc/src/omx_video_base.cpp
index 64bfabc9..958b71ce 100644
--- a/mm-video-v4l2/vidc/venc/src/omx_video_base.cpp
+++ b/mm-video-v4l2/vidc/venc/src/omx_video_base.cpp
@@ -2211,6 +2211,13 @@ OMX_ERRORTYPE omx_video::get_config(OMX_IN OMX_HANDLETYPE hComp,
memcpy(pParam, &m_sConfigFrameRotation, sizeof(m_sConfigFrameRotation));
break;
}
+ case OMX_IndexConfigCommonMirror:
+ {
+ VALIDATE_OMX_PARAM_DATA(configData, OMX_CONFIG_MIRRORTYPE);
+ OMX_CONFIG_MIRRORTYPE* pParam = reinterpret_cast<OMX_CONFIG_MIRRORTYPE*>(configData);
+ memcpy(pParam, &m_sConfigFrameMirror, sizeof(m_sConfigFrameMirror));
+ break;
+ }
case QOMX_IndexConfigVideoIntraperiod:
{
DEBUG_PRINT_LOW("get_config:QOMX_IndexConfigVideoIntraperiod");
diff --git a/mm-video-v4l2/vidc/venc/src/omx_video_encoder.cpp b/mm-video-v4l2/vidc/venc/src/omx_video_encoder.cpp
index 9c0f9fd2..1dcb4c3d 100644
--- a/mm-video-v4l2/vidc/venc/src/omx_video_encoder.cpp
+++ b/mm-video-v4l2/vidc/venc/src/omx_video_encoder.cpp
@@ -195,6 +195,10 @@ OMX_ERRORTYPE omx_venc::component_init(OMX_STRING role)
m_sConfigFrameRotation.nPortIndex = (OMX_U32) PORT_INDEX_OUT;
m_sConfigFrameRotation.nRotation = 0;
+ OMX_INIT_STRUCT(&m_sConfigFrameMirror, OMX_CONFIG_MIRRORTYPE);
+ m_sConfigFrameMirror.nPortIndex = (OMX_U32) PORT_INDEX_OUT;
+ m_sConfigFrameMirror.eMirror = OMX_MirrorNone;
+
OMX_INIT_STRUCT(&m_sConfigAVCIDRPeriod, OMX_VIDEO_CONFIG_AVCINTRAPERIOD);
m_sConfigAVCIDRPeriod.nPortIndex = (OMX_U32) PORT_INDEX_OUT;
@@ -1739,7 +1743,23 @@ OMX_ERRORTYPE omx_venc::set_config(OMX_IN OMX_HANDLETYPE hComp,
break;
}
- case OMX_IndexConfigCommonRotate:
+ case OMX_IndexConfigCommonMirror:
+ {
+ VALIDATE_OMX_PARAM_DATA(configData, OMX_CONFIG_MIRRORTYPE);
+ OMX_CONFIG_MIRRORTYPE *pParam = reinterpret_cast<OMX_CONFIG_MIRRORTYPE*>(configData);
+
+ if (pParam->nPortIndex != PORT_INDEX_OUT) {
+ DEBUG_PRINT_ERROR("ERROR: Unsupported port index: %u", (unsigned int)pParam->nPortIndex);
+ return OMX_ErrorBadPortIndex;
+ }
+ if (handle->venc_set_config(configData,OMX_IndexConfigCommonMirror) != true) {
+ DEBUG_PRINT_ERROR("ERROR: Set OMX_IndexConfigCommonMirror failed");
+ return OMX_ErrorUnsupportedSetting;
+ }
+ m_sConfigFrameMirror.eMirror = pParam->eMirror;
+ break;
+ }
+ case OMX_IndexConfigCommonRotate:
{
VALIDATE_OMX_PARAM_DATA(configData, OMX_CONFIG_ROTATIONTYPE);
OMX_CONFIG_ROTATIONTYPE *pParam =
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 4c0442d9..03de1b95 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
@@ -2712,6 +2712,17 @@ bool venc_dev::venc_set_config(void *configData, OMX_INDEXTYPE index)
break;
}
+ case OMX_IndexConfigCommonMirror:
+ {
+ OMX_CONFIG_MIRRORTYPE *mirror = (OMX_CONFIG_MIRRORTYPE*) configData;
+ DEBUG_PRINT_LOW("venc_set_param: OMX_IndexConfigCommonMirror");
+
+ if (venc_set_mirror(mirror->eMirror) == false) {
+ DEBUG_PRINT_ERROR("ERROR: Setting OMX_IndexConfigCommonMirror failed");
+ return false;
+ }
+ break;
+ }
case OMX_IndexConfigCommonRotate:
{
OMX_CONFIG_ROTATIONTYPE *config_rotation =
@@ -5722,6 +5733,26 @@ bool venc_dev::venc_set_markltr(OMX_U32 frameIdx)
return true;
}
+bool venc_dev::venc_set_mirror(OMX_U32 mirror)
+{
+ DEBUG_PRINT_LOW("venc_set_mirror");
+ int rc = true;
+ struct v4l2_control control;
+
+ control.id = V4L2_CID_MPEG_VIDC_VIDEO_FLIP;
+ control.value = mirror;
+
+ rc = ioctl(m_nDriver_fd, VIDIOC_S_CTRL, &control);
+ if (rc) {
+ DEBUG_PRINT_ERROR("Failed to set mirror %d", rc);
+ return false;
+ }
+
+ DEBUG_PRINT_LOW("Success IOCTL set control for id=%x, val=%d",
+ control.id, control.value);
+ return true;
+}
+
bool venc_dev::venc_set_vpe_rotation(OMX_S32 rotation_angle)
{
DEBUG_PRINT_LOW("venc_set_vpe_rotation: rotation angle = %d", (int)rotation_angle);