summaryrefslogtreecommitdiff
path: root/mm-video-v4l2/vidc/venc/src/omx_swvenc_mpeg4.cpp
diff options
context:
space:
mode:
authorManikanta Sivapala <msivap@codeaurora.org>2016-06-28 19:14:59 +0530
committerGerrit - the friendly Code Review server <code-review@localhost>2016-08-07 22:15:50 -0700
commit920e1c0f8911a29f5a59627795d25b9195488dcc (patch)
treecf17ee1230795bf6faabfe99bbd7686f54df3c74 /mm-video-v4l2/vidc/venc/src/omx_swvenc_mpeg4.cpp
parent91643f854cd42dec4d0a426c80e70bfdfc0581ea (diff)
downloadmedia-920e1c0f8911a29f5a59627795d25b9195488dcc.tar.gz
mm-video: Handle opaque color format for gralloc source.
Handle opaque color format for gralloc source. CRs-Fixed: 1034901 Change-Id: I24949eea8bfc9fc9b26763937606a1e432ee7f25
Diffstat (limited to 'mm-video-v4l2/vidc/venc/src/omx_swvenc_mpeg4.cpp')
-rw-r--r--mm-video-v4l2/vidc/venc/src/omx_swvenc_mpeg4.cpp37
1 files changed, 37 insertions, 0 deletions
diff --git a/mm-video-v4l2/vidc/venc/src/omx_swvenc_mpeg4.cpp b/mm-video-v4l2/vidc/venc/src/omx_swvenc_mpeg4.cpp
index ecf9772a..3afc1471 100644
--- a/mm-video-v4l2/vidc/venc/src/omx_swvenc_mpeg4.cpp
+++ b/mm-video-v4l2/vidc/venc/src/omx_swvenc_mpeg4.cpp
@@ -1799,6 +1799,8 @@ bool omx_venc::dev_empty_buf
SWVENC_IPBUFFER ipbuffer;
OMX_BUFFERHEADERTYPE *bufhdr = (OMX_BUFFERHEADERTYPE *)buffer;
unsigned int size = 0, filled_length, offset = 0;
+ SWVENC_COLOR_FORMAT color_format;
+ SWVENC_PROPERTY prop;
(void)pmem_data_buf;
(void)index;
@@ -1829,9 +1831,44 @@ bool omx_venc::dev_empty_buf
VideoGrallocMetadata *meta_buf = (VideoGrallocMetadata *)bufhdr->pBuffer;
private_handle_t *handle = (private_handle_t *)meta_buf->pHandle;
size = handle->size;
+ if(!format_set)
+ {
+ format_set = true;
+ DEBUG_PRINT_LOW("color format = 0x%x",handle->format);
+ if (((OMX_COLOR_FORMATTYPE)handle->format) != m_sInPortFormat.eColorFormat)
+ {
+ if(handle->format == HAL_PIXEL_FORMAT_NV12_ENCODEABLE)
+ {
+ m_sInPortFormat.eColorFormat = (OMX_COLOR_FORMATTYPE)
+ QOMX_COLOR_FORMATYUV420PackedSemiPlanar32m;
+ color_format = SWVENC_COLOR_FORMAT_NV12;
+ m_sInPortDef.format.video.eColorFormat = m_sInPortFormat.eColorFormat;
+ prop.id = SWVENC_PROPERTY_ID_COLOR_FORMAT;
+ prop.info.color_format = color_format;
+ Ret = swvenc_setproperty(m_hSwVenc, &prop);
+ if (Ret != SWVENC_S_SUCCESS)
+ {
+ DEBUG_PRINT_ERROR("%s, swvenc_setproperty failed (%d)",
+ __FUNCTION__, Ret);
+ RETURN(OMX_ErrorUnsupportedSetting);
+ }
+ }
+ else
+ {
+ DEBUG_PRINT_ERROR("%s: OMX_IndexParamVideoPortFormat 0x%x invalid",
+ __FUNCTION__,handle->format);
+ RETURN(OMX_ErrorBadParameter);
+ }
+ }
+ }
}
}
ipbuffer.p_buffer = (unsigned char *)mmap(NULL, size, PROT_READ|PROT_WRITE,MAP_SHARED, fd, offset);
+ if (ipbuffer.p_buffer == MAP_FAILED)
+ {
+ DEBUG_PRINT_ERROR("mmap() failed for fd %d of size %d",fd,size);
+ RETURN(OMX_ErrorBadParameter);
+ }
ipbuffer.size = size;
ipbuffer.filled_length = size;
}