diff options
author | Karthikeyan Periasamy <kperiasa@codeaurora.org> | 2017-05-22 16:35:42 -0700 |
---|---|---|
committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2017-05-31 13:10:00 -0700 |
commit | d29b135298c56f890ded105c4d7c661b03013efe (patch) | |
tree | 3321248352777b4ec864d6c6c3a044782a253b07 /mm-video-v4l2 | |
parent | 0fa84bb7592cb6ead18cf655f88ea77beddf1d6d (diff) | |
download | media-d29b135298c56f890ded105c4d7c661b03013efe.tar.gz |
mm-video-v4l2: Redesign C2D interface
Removed dynamic linking of the intermediate library.
Added more input/output color format support.
CRs-Fixed: 2038471
Change-Id: Idbd6ad8c6f29b8257f8c8ddb5c7c55db4d3b61cb
Diffstat (limited to 'mm-video-v4l2')
-rw-r--r-- | mm-video-v4l2/vidc/common/Android.mk | 1 | ||||
-rw-r--r-- | mm-video-v4l2/vidc/common/inc/vidc_color_converter.h | 55 | ||||
-rw-r--r-- | mm-video-v4l2/vidc/common/src/vidc_color_converter.cpp | 189 | ||||
-rw-r--r-- | mm-video-v4l2/vidc/vdec/Android.mk | 4 | ||||
-rw-r--r-- | mm-video-v4l2/vidc/vdec/inc/omx_vdec.h | 15 | ||||
-rw-r--r-- | mm-video-v4l2/vidc/vdec/src/omx_vdec_v4l2.cpp | 182 | ||||
-rw-r--r-- | mm-video-v4l2/vidc/venc/Android.mk | 8 | ||||
-rw-r--r-- | mm-video-v4l2/vidc/venc/inc/omx_video_base.h | 28 | ||||
-rw-r--r-- | mm-video-v4l2/vidc/venc/src/omx_swvenc_mpeg4.cpp | 10 | ||||
-rw-r--r-- | mm-video-v4l2/vidc/venc/src/omx_video_base.cpp | 212 | ||||
-rw-r--r-- | mm-video-v4l2/vidc/venc/src/omx_video_encoder.cpp | 14 | ||||
-rw-r--r-- | mm-video-v4l2/vidc/venc/src/video_encoder_device_v4l2.cpp | 1 |
12 files changed, 157 insertions, 562 deletions
diff --git a/mm-video-v4l2/vidc/common/Android.mk b/mm-video-v4l2/vidc/common/Android.mk index ee238609..3322a311 100644 --- a/mm-video-v4l2/vidc/common/Android.mk +++ b/mm-video-v4l2/vidc/common/Android.mk @@ -34,7 +34,6 @@ LOCAL_C_INCLUDES := $(libmm-vidc-inc) LOCAL_PRELINK_MODULE := false LOCAL_SHARED_LIBRARIES := liblog libcutils libdl -LOCAL_SRC_FILES += src/vidc_color_converter.cpp LOCAL_SRC_FILES += src/vidc_common.cpp LOCAL_SRC_FILES += src/vidc_vendor_extensions.cpp diff --git a/mm-video-v4l2/vidc/common/inc/vidc_color_converter.h b/mm-video-v4l2/vidc/common/inc/vidc_color_converter.h deleted file mode 100644 index 5361c11c..00000000 --- a/mm-video-v4l2/vidc/common/inc/vidc_color_converter.h +++ /dev/null @@ -1,55 +0,0 @@ -/*-------------------------------------------------------------------------- -Copyright (c) 2012-2013, The Linux Foundation. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of The Linux Foundation nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED -WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT -ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS -BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR -BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, -WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE -OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN -IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ---------------------------------------------------------------------------*/ -#include <dlfcn.h> -#include "C2DColorConverter.h" - -using namespace android; -class omx_c2d_conv -{ - public: - omx_c2d_conv(); - ~omx_c2d_conv(); - bool init(); - void destroy(); - bool open(unsigned int height,unsigned int width, - ColorConvertFormat src, - ColorConvertFormat dest); - bool convert(int src_fd, void *src_base, void *src_viraddr, - int dest_fd, void *dest_base, void *dest_viraddr); - bool get_buffer_size(int port,unsigned int &buf_size); - bool get_output_filled_length(unsigned int &filled_length); - int get_src_format(); - void close(); - private: - C2DColorConverterBase *c2dcc; - void *mLibHandle; - ColorConvertFormat src_format; - createC2DColorConverter_t *mConvertOpen; - destroyC2DColorConverter_t *mConvertClose; -}; diff --git a/mm-video-v4l2/vidc/common/src/vidc_color_converter.cpp b/mm-video-v4l2/vidc/common/src/vidc_color_converter.cpp deleted file mode 100644 index 413b27ba..00000000 --- a/mm-video-v4l2/vidc/common/src/vidc_color_converter.cpp +++ /dev/null @@ -1,189 +0,0 @@ -/*-------------------------------------------------------------------------- -Copyright (c) 2012-2013, The Linux Foundation. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of The Linux Foundation nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED -WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT -ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS -BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR -BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, -WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE -OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN -IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ---------------------------------------------------------------------------*/ -#define LOG_TAG "OMX_C2D" - -#include <utils/Log.h> -#include <gralloc_priv.h> -#include "vidc_color_converter.h" -#include "vidc_debug.h" - -omx_c2d_conv::omx_c2d_conv() -{ - c2dcc = NULL; - mLibHandle = NULL; - mConvertOpen = NULL; - mConvertClose = NULL; - src_format = NV12_2K; -} - -bool omx_c2d_conv::init() -{ - bool status = true; - - if (mLibHandle || mConvertOpen || mConvertClose) { - DEBUG_PRINT_ERROR("omx_c2d_conv::init called twice"); - status = false; - } - - if (status) { - mLibHandle = dlopen("libc2dcolorconvert.so", RTLD_LAZY); - - if (mLibHandle) { - mConvertOpen = (createC2DColorConverter_t *) - dlsym(mLibHandle,"createC2DColorConverter"); - mConvertClose = (destroyC2DColorConverter_t *) - dlsym(mLibHandle,"destroyC2DColorConverter"); - - if (!mConvertOpen || !mConvertClose) - status = false; - } else - status = false; - } - - if (!status && mLibHandle) { - dlclose(mLibHandle); - mLibHandle = NULL; - mConvertOpen = NULL; - mConvertClose = NULL; - } - - return status; -} - -bool omx_c2d_conv::convert(int src_fd, void *src_base, void *src_viraddr, - int dest_fd, void *dest_base, void *dest_viraddr) -{ - int result; - - if (!src_viraddr || !dest_viraddr || !c2dcc || !dest_base || !src_base) { - DEBUG_PRINT_ERROR("Invalid arguments omx_c2d_conv::convert"); - return false; - } - - result = c2dcc->convertC2D(src_fd, src_base, src_viraddr, - dest_fd, dest_base, dest_viraddr); - DEBUG_PRINT_LOW("Color convert status %d",result); - return ((result < 0)?false:true); -} - -bool omx_c2d_conv::open(unsigned int height,unsigned int width, - ColorConvertFormat src, ColorConvertFormat dest) -{ - bool status = false; - - if (!c2dcc) { - c2dcc = mConvertOpen(width, height, width, height, - src,dest,0,0); - - if (c2dcc) { - src_format = src; - status = true; - } else - DEBUG_PRINT_ERROR("mConvertOpen failed"); - } - - return status; -} -void omx_c2d_conv::close() -{ - if (mLibHandle) { - if (mConvertClose && c2dcc) - mConvertClose(c2dcc); - - c2dcc = NULL; - } -} - -void omx_c2d_conv::destroy() -{ - DEBUG_PRINT_HIGH("Destroy C2D instance"); - - if (mLibHandle) { - if (mConvertClose && c2dcc) - mConvertClose(c2dcc); - - dlclose(mLibHandle); - } - - c2dcc = NULL; - mLibHandle = NULL; - mConvertOpen = NULL; - mConvertClose = NULL; -} -omx_c2d_conv::~omx_c2d_conv() -{ - destroy(); -} -int omx_c2d_conv::get_src_format() -{ - int format = -1; - - if (src_format == NV12_2K) { - format = HAL_PIXEL_FORMAT_NV12_ENCODEABLE; - } else if (src_format == RGBA8888) { - format = HAL_PIXEL_FORMAT_RGBA_8888; - } - - return format; -} -bool omx_c2d_conv::get_buffer_size(int port,unsigned int &buf_size) -{ - int cret = 0; - bool ret = false; - C2DBuffReq bufferreq; - - if (c2dcc) { - bufferreq.size = 0; - cret = c2dcc->getBuffReq(port,&bufferreq); - DEBUG_PRINT_LOW("Status of getbuffer is %d", cret); - ret = (cret)?false:true; - buf_size = bufferreq.size; - } - - return ret; -} - -bool omx_c2d_conv::get_output_filled_length(unsigned int &filled_length) -{ - bool ret = false; - C2DBuffReq req; - filled_length = 0; - - if (c2dcc) { - int cret = c2dcc->getBuffReq(C2D_OUTPUT, &req); - DEBUG_PRINT_LOW("Status of getBuffReq is %d", cret); - if (!cret && (req.bpp.denominator > 0)) { - filled_length = (req.stride * req.sliceHeight * req.bpp.numerator); - filled_length /= req.bpp.denominator; - ret = true; - } - } - - return ret; -} diff --git a/mm-video-v4l2/vidc/vdec/Android.mk b/mm-video-v4l2/vidc/vdec/Android.mk index 4be1827e..c245b600 100644 --- a/mm-video-v4l2/vidc/vdec/Android.mk +++ b/mm-video-v4l2/vidc/vdec/Android.mk @@ -103,7 +103,7 @@ LOCAL_ADDITIONAL_DEPENDENCIES := $(libmm-vdec-add-dep) LOCAL_PRELINK_MODULE := false LOCAL_SHARED_LIBRARIES := liblog libcutils libdl - +LOCAL_SHARED_LIBRARIES += libc2dcolorconvert LOCAL_SHARED_LIBRARIES += libqdMetaData LOCAL_SRC_FILES := src/ts_parser.cpp @@ -130,7 +130,7 @@ LOCAL_C_INCLUDES += $(libmm-vdec-inc) LOCAL_ADDITIONAL_DEPENDENCIES := $(libmm-vdec-add-dep) LOCAL_PRELINK_MODULE := false -LOCAL_SHARED_LIBRARIES := liblog libcutils +LOCAL_SHARED_LIBRARIES := liblog libcutils libc2dcolorconvert LOCAL_SHARED_LIBRARIES += libswvdec LOCAL_SRC_FILES := src/omx_swvdec.cpp diff --git a/mm-video-v4l2/vidc/vdec/inc/omx_vdec.h b/mm-video-v4l2/vidc/vdec/inc/omx_vdec.h index 69f40517..03e65066 100644 --- a/mm-video-v4l2/vidc/vdec/inc/omx_vdec.h +++ b/mm-video-v4l2/vidc/vdec/inc/omx_vdec.h @@ -55,6 +55,8 @@ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include <unordered_map> #include <media/msm_media_info.h> +#include "C2DColorConverter.h" + static ptrdiff_t x; extern "C" { @@ -100,7 +102,6 @@ extern "C" { #include "qc_omx_component.h" #include <media/msm_vidc.h> #include "ts_parser.h" -#include "vidc_color_converter.h" #include "vidc_debug.h" #include "vidc_vendor_extensions.h" #ifdef _ANDROID_ @@ -247,6 +248,8 @@ extern "C" { //#define DEFAULT_EXTRADATA (OMX_FRAMEINFO_EXTRADATA|OMX_INTERLACE_EXTRADATA) +using namespace android; + enum port_indexes { OMX_CORE_INPUT_PORT_INDEX =0, OMX_CORE_OUTPUT_PORT_INDEX =1, @@ -295,7 +298,7 @@ enum vdec_codec { VDEC_CODECTYPE_VP9 = 0x10, }; -enum vdec_output_fromat { +enum vdec_output_format { VDEC_YUV_FORMAT_NV12 = 0x1, VDEC_YUV_FORMAT_TILE_4x2 = 0x2, VDEC_YUV_FORMAT_NV12_UBWC = 0x3, @@ -431,7 +434,7 @@ struct extradata_buffer_info { struct video_driver_context { int video_driver_fd; enum vdec_codec decoder_format; - enum vdec_output_fromat output_format; + enum vdec_output_format output_format; enum vdec_interlaced_format interlace; enum vdec_output_order picture_order; struct vdec_framesize frame_size; @@ -497,6 +500,7 @@ struct extradata_info { }; typedef std::unordered_map <int, int> ColorSubMapping; +typedef std::unordered_map <int, ColorSubMapping> DecColorMapping; // OMX video decoder class class omx_vdec: public qc_omx_component @@ -1209,7 +1213,7 @@ class omx_vdec: public qc_omx_component { public: allocate_color_convert_buf(); - ~allocate_color_convert_buf(); + ~allocate_color_convert_buf() {}; void set_vdec_client(void *); void update_client(); bool set_color_format(OMX_COLOR_FORMATTYPE dest_color_format); @@ -1236,7 +1240,7 @@ class omx_vdec: public qc_omx_component bool color_convert_mode; ColorConvertFormat dest_format; ColorConvertFormat src_format; - class omx_c2d_conv c2d; + C2DColorConverter c2dcc; unsigned int allocated_count; unsigned int buffer_size_req; unsigned int buffer_alignment_req; @@ -1246,6 +1250,7 @@ class omx_vdec: public qc_omx_component OMX_QCOM_PLATFORM_PRIVATE_ENTRY m_platform_entry_client[MAX_COUNT]; OMX_QCOM_PLATFORM_PRIVATE_PMEM_INFO m_pmem_info_client[MAX_COUNT]; OMX_BUFFERHEADERTYPE m_out_mem_ptr_client[MAX_COUNT]; + DecColorMapping mMapOutput2DriverColorFormat; ColorSubMapping mMapOutput2Convert; #ifdef USE_ION struct vdec_ion op_buf_ion_info[MAX_COUNT]; diff --git a/mm-video-v4l2/vidc/vdec/src/omx_vdec_v4l2.cpp b/mm-video-v4l2/vidc/vdec/src/omx_vdec_v4l2.cpp index 7af768b3..5761a250 100644 --- a/mm-video-v4l2/vidc/vdec/src/omx_vdec_v4l2.cpp +++ b/mm-video-v4l2/vidc/vdec/src/omx_vdec_v4l2.cpp @@ -115,6 +115,7 @@ extern "C" { #define Log2(number, power) { OMX_U32 temp = number; power = 0; while( (0 == (temp & 0x1)) && power < 16) { temp >>=0x1; power++; } } #define Q16ToFraction(q,num,den) { OMX_U32 power; Log2(q,power); num = q >> power; den = 0x1 << (16 - power); } #define EXTRADATA_IDX(__num_planes) ((__num_planes) ? (__num_planes) - 1 : 0) +#undef ALIGN #define ALIGN(x, to_align) ((((unsigned) x) + (to_align - 1)) & ~(to_align - 1)) #define DEFAULT_EXTRADATA (OMX_INTERLACE_EXTRADATA | OMX_FRAMEPACK_EXTRADATA | OMX_OUTPUTCROP_EXTRADATA \ @@ -146,6 +147,8 @@ extern "C" { #define MIN(x,y) (((x) < (y)) ? (x) : (y)) #define MAX(x,y) (((x) > (y)) ? (x) : (y)) +using namespace android; + static OMX_U32 maxSmoothStreamingWidth = 1920; static OMX_U32 maxSmoothStreamingHeight = 1088; @@ -4175,16 +4178,16 @@ OMX_ERRORTYPE omx_vdec::set_parameter(OMX_IN OMX_HANDLETYPE hComp, DEBUG_PRINT_ERROR("%s: Failed to get format on capture mplane", __func__); return OMX_ErrorBadParameter; } - enum vdec_output_fromat op_format; + enum vdec_output_format op_format; if (portFmt->eColorFormat == (OMX_COLOR_FORMATTYPE) QOMX_COLOR_FORMATYUV420PackedSemiPlanar32m || portFmt->eColorFormat == OMX_COLOR_FormatYUV420SemiPlanar) { - op_format = (enum vdec_output_fromat)VDEC_YUV_FORMAT_NV12; + op_format = (enum vdec_output_format)VDEC_YUV_FORMAT_NV12; fmt.fmt.pix_mp.pixelformat = capture_capability = V4L2_PIX_FMT_NV12; } else if (portFmt->eColorFormat == (OMX_COLOR_FORMATTYPE) QOMX_COLOR_FORMATYUV420PackedSemiPlanar32mCompressed || portFmt->eColorFormat == OMX_COLOR_FormatYUV420Planar) { - op_format = (enum vdec_output_fromat)VDEC_YUV_FORMAT_NV12_UBWC; + op_format = (enum vdec_output_format)VDEC_YUV_FORMAT_NV12_UBWC; fmt.fmt.pix_mp.pixelformat = capture_capability = V4L2_PIX_FMT_NV12_UBWC; } else { eRet = OMX_ErrorBadParameter; @@ -10962,10 +10965,19 @@ omx_vdec::allocate_color_convert_buf::allocate_color_convert_buf() m_c2d_width = 0; m_c2d_height = 0; + mMapOutput2DriverColorFormat[VDEC_YUV_FORMAT_NV12][-1] = + QOMX_COLOR_FORMATYUV420PackedSemiPlanar32m; + mMapOutput2DriverColorFormat[VDEC_YUV_FORMAT_NV12][VDEC_CODECTYPE_MVC] = + QOMX_COLOR_FORMATYUV420PackedSemiPlanar32mMultiView; + mMapOutput2DriverColorFormat[VDEC_YUV_FORMAT_NV12_UBWC][-1] = + QOMX_COLOR_FORMATYUV420PackedSemiPlanar32mCompressed; + mMapOutput2DriverColorFormat[VDEC_YUV_FORMAT_NV12_TP10_UBWC][-1] = + QOMX_COLOR_FORMATYUV420PackedSemiPlanar32m10bitCompressed; + mMapOutput2Convert.insert( { {VDEC_YUV_FORMAT_NV12, NV12_128m}, {VDEC_YUV_FORMAT_NV12_UBWC, NV12_UBWC}, - //TODO: TP10 {VDEC_YUV_FORMAT_NV12_TP10_UBWC, NV12_TP10}, + {VDEC_YUV_FORMAT_NV12_TP10_UBWC, NV12_TP10}, }); } @@ -10991,11 +11003,6 @@ void omx_vdec::allocate_color_convert_buf::init_members() pmem_fd[i] = -1; } -omx_vdec::allocate_color_convert_buf::~allocate_color_convert_buf() -{ - c2d.destroy(); -} - bool omx_vdec::allocate_color_convert_buf::update_buffer_req() { bool status = true; @@ -11010,7 +11017,7 @@ bool omx_vdec::allocate_color_convert_buf::update_buffer_req() } if (!enabled) { DEBUG_PRINT_HIGH("No color conversion required"); - return status; + return true; } pthread_mutex_lock(&omx->c_lock); @@ -11042,46 +11049,58 @@ bool omx_vdec::allocate_color_convert_buf::update_buffer_req() DEBUG_PRINT_ERROR("Cannot change C2D buffer requirements with %d active allocations", allocated_count); status = false; - goto fail_update_buf_req; } } - if (omx->drv_ctx.output_format != VDEC_YUV_FORMAT_NV12 && + if (status != false) { + if (omx->drv_ctx.output_format != VDEC_YUV_FORMAT_NV12 && ColorFormat != OMX_COLOR_FormatYUV420Planar) { - DEBUG_PRINT_ERROR("update_buffer_req: Unsupported color conversion"); - status = false; - goto fail_update_buf_req; - } - c2d.close(); - - DEBUG_PRINT_INFO("%s: Open C2D interface for %#X -> %#X, interlaced (%d)", - __func__, src_format, dest_format, is_interlaced); - status = c2d.open(height, width, src_format, dest_format); - - if (status) { - status = c2d.get_buffer_size(C2D_INPUT,src_size); - if (status) - status = c2d.get_buffer_size(C2D_OUTPUT,destination_size); - } - if (status) { - if (!src_size || src_size > omx->drv_ctx.op_buf.buffer_size || - !destination_size) { - DEBUG_PRINT_ERROR("ERROR: Size mismatch in C2D src_size %d" - "driver size %u destination size %d", - src_size, (unsigned int)omx->drv_ctx.op_buf.buffer_size, - destination_size); + DEBUG_PRINT_ERROR("update_buffer_req: Unsupported color conversion"); status = false; - c2d.close(); - buffer_size_req = 0; - // TODO: make this fatal. Driver is not supposed to quote size - // smaller than what C2D needs !! } else { - buffer_size_req = destination_size; - m_c2d_height = height; - m_c2d_width = width; + ColorSubMapping::const_iterator + found = mMapOutput2Convert.find( + omx->drv_ctx.output_format); + if (found == mMapOutput2Convert.end()) { + src_format = NV12_128m; + } else { + src_format = (ColorConvertFormat) found->second;; + } + + DEBUG_PRINT_INFO("C2D: Set Resolution, Interlace(%d) Convertion(%#X -> %#X)" + " src(%dX%d) dest(%dX%d)", omx->drv_ctx.interlace, + src_format, dest_format, width, + omx->drv_ctx.interlace != + VDEC_InterlaceFrameProgressive?(height+1)/2 : height, + width, height); + status = c2dcc.setResolution(width, + omx->drv_ctx.interlace != + VDEC_InterlaceFrameProgressive? + (height+1)/2 : height, + width, height, + src_format, dest_format, + 0,0); + if (status) { + src_size = c2dcc.getBuffSize(C2D_INPUT); + destination_size = c2dcc.getBuffSize(C2D_OUTPUT); + + if (!src_size || src_size > omx->drv_ctx.op_buf.buffer_size || + !destination_size) { + DEBUG_PRINT_ERROR("ERROR: Size mismatch in C2D src_size %d" + "driver size %u destination size %d", + src_size, (unsigned int)omx->drv_ctx.op_buf.buffer_size, + destination_size); + buffer_size_req = 0; + // TODO: make this fatal. Driver is not supposed to quote size + // smaller than what C2D needs !! + } else { + buffer_size_req = destination_size; + m_c2d_height = height; + m_c2d_width = width; + } + } } } -fail_update_buf_req: pthread_mutex_unlock(&omx->c_lock); return status; } @@ -11097,23 +11116,8 @@ bool omx_vdec::allocate_color_convert_buf::set_color_format( return false; } pthread_mutex_lock(&omx->c_lock); - if (omx->drv_ctx.output_format == VDEC_YUV_FORMAT_NV12) - if (omx->drv_ctx.decoder_format == VDEC_CODECTYPE_MVC) - drv_color_format = (OMX_COLOR_FORMATTYPE) - QOMX_COLOR_FORMATYUV420PackedSemiPlanar32mMultiView; - else - drv_color_format = (OMX_COLOR_FORMATTYPE) - QOMX_COLOR_FORMATYUV420PackedSemiPlanar32m; - else if (omx->drv_ctx.output_format == VDEC_YUV_FORMAT_NV12_UBWC) { - drv_color_format = (OMX_COLOR_FORMATTYPE) - QOMX_COLOR_FORMATYUV420PackedSemiPlanar32mCompressed; - } else if (omx->drv_ctx.output_format == VDEC_YUV_FORMAT_NV12_TP10_UBWC) { - drv_color_format = (OMX_COLOR_FORMATTYPE) - QOMX_COLOR_FORMATYUV420PackedSemiPlanar32m10bitCompressed; - } else { - DEBUG_PRINT_ERROR("Incorrect color format"); - status = false; - } + status = get_color_format (drv_color_format); + drv_colorformat_c2d_enable = (drv_color_format != dest_color_format) && (drv_color_format != (OMX_COLOR_FORMATTYPE) QOMX_COLOR_FORMATYUV420PackedSemiPlanar32mMultiView) && @@ -11131,22 +11135,14 @@ bool omx_vdec::allocate_color_convert_buf::set_color_format( dest_color_format == OMX_COLOR_FormatYUV420SemiPlanar ) { ColorFormat = dest_color_format; dest_format = dest_color_format == OMX_COLOR_FormatYUV420Planar? YCbCr420P: YCbCr420SP; - if (enabled) - c2d.destroy(); - enabled = false; - if (!c2d.init()) { - DEBUG_PRINT_ERROR("open failed for c2d"); - status = false; - } else - enabled = true; + enabled = true; } else { DEBUG_PRINT_ERROR("Unsupported output color format for c2d (%d)", dest_color_format); status = false; + enabled = false; } } else { - if (enabled) - c2d.destroy(); enabled = false; } pthread_mutex_unlock(&omx->c_lock); @@ -11179,13 +11175,17 @@ OMX_BUFFERHEADERTYPE* omx_vdec::allocate_color_convert_buf::get_il_buf_hdr() if (index < omx->drv_ctx.op_buf.actualcount) { m_out_mem_ptr_client[index].nFlags = (bufadd->nFlags & OMX_BUFFERFLAG_EOS); m_out_mem_ptr_client[index].nTimeStamp = bufadd->nTimeStamp; - bool status; + bool status = false; if (!omx->in_reconfig && !omx->output_flush_progress && bufadd->nFilledLen) { pthread_mutex_lock(&omx->c_lock); cache_clean_buffer(index); - status = c2d.convert(omx->drv_ctx.ptr_outputbuffer[index].pmem_fd, - omx->m_out_mem_ptr->pBuffer, bufadd->pBuffer, pmem_fd[index], - pmem_baseaddress[index], pmem_baseaddress[index]); + + DEBUG_PRINT_INFO("C2D: Start color convertion"); + status = c2dcc.convertC2D(omx->drv_ctx.ptr_outputbuffer[index].pmem_fd, + omx->m_out_mem_ptr->pBuffer, bufadd->pBuffer, + pmem_fd[index], pmem_baseaddress[index], + pmem_baseaddress[index]); + if (!status) { DEBUG_PRINT_ERROR("Failed color conversion %d", status); m_out_mem_ptr_client[index].nFilledLen = 0; @@ -11193,7 +11193,7 @@ OMX_BUFFERHEADERTYPE* omx_vdec::allocate_color_convert_buf::get_il_buf_hdr() return &m_out_mem_ptr_client[index]; } else { unsigned int filledLen = 0; - c2d.get_output_filled_length(filledLen); + c2dcc.getBuffFilledLen(C2D_OUTPUT, filledLen); m_out_mem_ptr_client[index].nFilledLen = filledLen; cache_clean_invalidate_buffer(index); } @@ -11231,13 +11231,8 @@ OMX_BUFFERHEADERTYPE* omx_vdec::allocate_color_convert_buf::get_il_buf_hdr() if (!enabled) buffer_size = omx->drv_ctx.op_buf.buffer_size; else { - if (!c2d.get_buffer_size(C2D_OUTPUT,buffer_size)) { - DEBUG_PRINT_ERROR("Get buffer size failed"); - status = false; - goto fail_get_buffer_size; - } + buffer_size = c2dcc.getBuffSize(C2D_OUTPUT); } -fail_get_buffer_size: pthread_mutex_unlock(&omx->c_lock); return status; } @@ -11314,7 +11309,6 @@ OMX_ERRORTYPE omx_vdec::allocate_color_convert_buf::free_output_buffer( allocated_count = 0; if (!allocated_count) { pthread_mutex_lock(&omx->c_lock); - c2d.close(); init_members(); pthread_mutex_unlock(&omx->c_lock); } @@ -11411,18 +11405,22 @@ bool omx_vdec::allocate_color_convert_buf::get_color_format(OMX_COLOR_FORMATTYPE { bool status = true; if (!enabled) { - if (omx->drv_ctx.output_format == VDEC_YUV_FORMAT_NV12) { - if (omx->drv_ctx.decoder_format == VDEC_CODECTYPE_MVC) + for (auto& x: mMapOutput2DriverColorFormat) { + DecColorMapping::const_iterator + found = mMapOutput2DriverColorFormat.find(omx->drv_ctx.output_format); + if (found == mMapOutput2DriverColorFormat.end()) { + status = false; + } else { + ColorSubMapping::const_iterator + subFound = found->second.find(omx->drv_ctx.decoder_format); + if (subFound == found->second.end()) { dest_color_format = (OMX_COLOR_FORMATTYPE) - QOMX_COLOR_FORMATYUV420PackedSemiPlanar32mMultiView; - else - dest_color_format = (OMX_COLOR_FORMATTYPE)QOMX_COLOR_FORMATYUV420PackedSemiPlanar32m; - } else if (omx->drv_ctx.output_format == VDEC_YUV_FORMAT_NV12_UBWC){ - dest_color_format = (OMX_COLOR_FORMATTYPE)QOMX_COLOR_FORMATYUV420PackedSemiPlanar32mCompressed; - } else if (omx->drv_ctx.output_format == VDEC_YUV_FORMAT_NV12_TP10_UBWC){ - dest_color_format = (OMX_COLOR_FORMATTYPE)QOMX_COLOR_FORMATYUV420PackedSemiPlanar32m10bitCompressed; - } else - status = false; + found->second.find(-1)->second; + } else { + dest_color_format = (OMX_COLOR_FORMATTYPE) subFound->second; + } + } + } } else { if (ColorFormat == OMX_COLOR_FormatYUV420Planar || ColorFormat == OMX_COLOR_FormatYUV420SemiPlanar) { diff --git a/mm-video-v4l2/vidc/venc/Android.mk b/mm-video-v4l2/vidc/venc/Android.mk index 3f2a888f..867e0596 100644 --- a/mm-video-v4l2/vidc/venc/Android.mk +++ b/mm-video-v4l2/vidc/venc/Android.mk @@ -94,9 +94,9 @@ LOCAL_ADDITIONAL_DEPENDENCIES := $(libmm-venc-add-dep) LOCAL_PRELINK_MODULE := false LOCAL_SHARED_LIBRARIES := liblog libcutils libdl -ifeq ($(BOARD_USES_ADRENO), true) +# ifeq ($(BOARD_USES_ADRENO), true) LOCAL_SHARED_LIBRARIES += libc2dcolorconvert -endif # ($(BOARD_USES_ADRENO), true) +# endif # ($(BOARD_USES_ADRENO), true) LOCAL_SHARED_LIBRARIES += libqdMetaData LOCAL_STATIC_LIBRARIES := libOmxVidcCommon @@ -126,9 +126,9 @@ LOCAL_ADDITIONAL_DEPENDENCIES := $(libmm-venc-add-dep) LOCAL_PRELINK_MODULE := false LOCAL_SHARED_LIBRARIES := liblog libcutils libdl LOCAL_SHARED_LIBRARIES += libMpeg4SwEncoder -ifeq ($(BOARD_USES_ADRENO), true) +# ifeq ($(BOARD_USES_ADRENO), true) LOCAL_SHARED_LIBRARIES += libc2dcolorconvert -endif # ($(BOARD_USES_ADRENO), true) +# endif # ($(BOARD_USES_ADRENO), true) LOCAL_STATIC_LIBRARIES := libOmxVidcCommon LOCAL_SRC_FILES := src/omx_video_base.cpp 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 b36fd3a1..f1f7c655 100644 --- a/mm-video-v4l2/vidc/venc/inc/omx_video_base.h +++ b/mm-video-v4l2/vidc/venc/inc/omx_video_base.h @@ -42,7 +42,6 @@ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // Include Files ////////////////////////////////////////////////////////////////////////////// -#define LOG_TAG "OMX-VENC" #include <stdlib.h> #include <stdio.h> #include <sys/mman.h> @@ -68,6 +67,9 @@ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include <vector> #include "vidc_vendor_extensions.h" +#undef LOG_TAG +#define LOG_TAG "OMX-VENC" + #ifdef _ANDROID_ using namespace android; #include <utils/Log.h> @@ -233,29 +235,7 @@ class omx_video: public qc_omx_component //intermediate conversion buffer queued to encoder in case of invalid EOS input OMX_BUFFERHEADERTYPE *mEmptyEosBuffer; - class omx_c2d_conv - { - public: - omx_c2d_conv(); - ~omx_c2d_conv(); - bool init(); - bool open(unsigned int height,unsigned int width, - ColorConvertFormat src, ColorConvertFormat dest, - unsigned int src_stride, unsigned int flags); - bool convert(int src_fd, void *src_base, void *src_viraddr, - int dest_fd, void *dest_base, void *dest_viraddr); - bool get_buffer_size(int port,unsigned int &buf_size); - int get_src_format(); - void close(); - private: - C2DColorConverterBase *c2dcc; - pthread_mutex_t c_lock; - void *mLibHandle; - ColorConvertFormat src_format; - createC2DColorConverter_t *mConvertOpen; - destroyC2DColorConverter_t *mConvertClose; - }; - omx_c2d_conv c2d_conv; + C2DColorConverter c2dcc; #endif public: 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 7aee6c72..8610d566 100644 --- a/mm-video-v4l2/vidc/venc/src/omx_swvenc_mpeg4.cpp +++ b/mm-video-v4l2/vidc/venc/src/omx_swvenc_mpeg4.cpp @@ -49,6 +49,7 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #define ENTER_FUNC() DEBUG_PRINT_HIGH("ENTERING: %s",__FUNCTION__) #define EXIT_FUNC() DEBUG_PRINT_HIGH("EXITING: %s",__FUNCTION__) #define RETURN(x) EXIT_FUNC(); return x; +#undef ALIGN #define ALIGN(value,alignment) (((value) + (alignment-1)) & (~(alignment-1))) #define BUFFER_LOG_LOC "/data/misc/media" @@ -715,15 +716,6 @@ OMX_ERRORTYPE omx_venc::set_parameter m_sInPortFormat.eColorFormat = (OMX_COLOR_FORMATTYPE) QOMX_COLOR_FORMATYUV420PackedSemiPlanar32m; color_format = SWVENC_COLOR_FORMAT_NV12; - if (!mUseProxyColorFormat) - { - if (!c2d_conv.init()) - { - DEBUG_PRINT_ERROR("C2D init failed"); - return OMX_ErrorUnsupportedSetting; - } - DEBUG_PRINT_ERROR("C2D init is successful"); - } mUseProxyColorFormat = true; m_input_msg_id = OMX_COMPONENT_GENERATE_ETB_OPQ; } 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 5b2ab4bf..0717b27e 100644 --- a/mm-video-v4l2/vidc/venc/src/omx_video_base.cpp +++ b/mm-video-v4l2/vidc/venc/src/omx_video_base.cpp @@ -78,6 +78,7 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #define SZ_4K 0x1000 #define SZ_1M 0x100000 +#undef ALIGN #define ALIGN(x, to_align) ((((unsigned long) x) + (to_align - 1)) & ~(to_align - 1)) #ifndef ION_FLAG_CP_BITSTREAM @@ -2803,7 +2804,6 @@ OMX_ERRORTYPE omx_video::free_input_buffer(OMX_BUFFERHEADERTYPE *bufferHdr) if (!mUseProxyColorFormat) return OMX_ErrorNone; else { - c2d_conv.close(); opaque_buffer_hdr[index] = NULL; } } @@ -4586,134 +4586,6 @@ void omx_video::omx_release_meta_buffer(OMX_BUFFERHEADERTYPE *buffer) } } #endif -omx_video::omx_c2d_conv::omx_c2d_conv() -{ - c2dcc = NULL; - mLibHandle = NULL; - mConvertOpen = NULL; - mConvertClose = NULL; - src_format = NV12_128m; - pthread_mutex_init(&c_lock, NULL); -} - -bool omx_video::omx_c2d_conv::init() -{ - bool status = true; - if (mLibHandle || mConvertOpen || mConvertClose) { - DEBUG_PRINT_ERROR("omx_c2d_conv::init called twice"); - status = false; - } - if (status) { - mLibHandle = dlopen("libc2dcolorconvert.so", RTLD_LAZY); - if (mLibHandle) { - mConvertOpen = (createC2DColorConverter_t *) - dlsym(mLibHandle,"createC2DColorConverter"); - mConvertClose = (destroyC2DColorConverter_t *) - dlsym(mLibHandle,"destroyC2DColorConverter"); - if (!mConvertOpen || !mConvertClose) - status = false; - } else - status = false; - } - if (!status && mLibHandle) { - dlclose(mLibHandle); - mLibHandle = NULL; - mConvertOpen = NULL; - mConvertClose = NULL; - } - return status; -} - -bool omx_video::omx_c2d_conv::convert(int src_fd, void *src_base, void *src_viraddr, - int dest_fd, void *dest_base, void *dest_viraddr) -{ - int result; - if (!src_viraddr || !dest_viraddr || !c2dcc || !src_base || !dest_base) { - DEBUG_PRINT_ERROR("Invalid arguments omx_c2d_conv::convert"); - return false; - } - pthread_mutex_lock(&c_lock); - result = c2dcc->convertC2D(src_fd, src_base, src_viraddr, - dest_fd, dest_base, dest_viraddr); - pthread_mutex_unlock(&c_lock); - DEBUG_PRINT_LOW("Color convert status %d",result); - return ((result < 0)?false:true); -} - -bool omx_video::omx_c2d_conv::open(unsigned int height,unsigned int width, - ColorConvertFormat src, ColorConvertFormat dest, unsigned int src_stride, - unsigned int flags) -{ - bool status = false; - pthread_mutex_lock(&c_lock); - if (!c2dcc) { - c2dcc = mConvertOpen(width, height, width, height, - src, dest, flags, src_stride); - if (c2dcc) { - src_format = src; - status = true; - } else - DEBUG_PRINT_ERROR("mConvertOpen failed"); - } - pthread_mutex_unlock(&c_lock); - return status; -} - -void omx_video::omx_c2d_conv::close() -{ - if (mLibHandle) { - pthread_mutex_lock(&c_lock); - if (mConvertClose && c2dcc) - mConvertClose(c2dcc); - pthread_mutex_unlock(&c_lock); - c2dcc = NULL; - } -} -omx_video::omx_c2d_conv::~omx_c2d_conv() -{ - DEBUG_PRINT_HIGH("Destroy C2D instance"); - if (mLibHandle) { - if (mConvertClose && c2dcc) { - pthread_mutex_lock(&c_lock); - mConvertClose(c2dcc); - pthread_mutex_unlock(&c_lock); - } - dlclose(mLibHandle); - } - c2dcc = NULL; - mLibHandle = NULL; - mConvertOpen = NULL; - mConvertClose = NULL; - pthread_mutex_destroy(&c_lock); -} - -int omx_video::omx_c2d_conv::get_src_format() -{ - int format = -1; - if (src_format == NV12_128m) { - format = HAL_PIXEL_FORMAT_NV12_ENCODEABLE; - } else if (src_format == RGBA8888) { - format = HAL_PIXEL_FORMAT_RGBA_8888; - } - return format; -} - -bool omx_video::omx_c2d_conv::get_buffer_size(int port,unsigned int &buf_size) -{ - int cret = 0; - bool ret = false; - C2DBuffReq bufferreq; - if (c2dcc) { - bufferreq.size = 0; - pthread_mutex_lock(&c_lock); - cret = c2dcc->getBuffReq(port,&bufferreq); - pthread_mutex_unlock(&c_lock); - DEBUG_PRINT_LOW("Status of getbuffer is %d", cret); - ret = (cret)?false:true; - buf_size = bufferreq.size; - } - return ret; -} bool omx_video::is_conv_needed(int hal_fmt, int hal_flags) { @@ -4795,36 +4667,42 @@ OMX_ERRORTYPE omx_video::empty_this_buffer_opaque(OMX_IN OMX_HANDLETYPE hComp, updated correctly*/ if (buffer->nFilledLen > 0 && handle) { - if (c2d_opened && handle->format != c2d_conv.get_src_format()) { - c2d_conv.close(); - c2d_opened = false; - } - - if (!c2d_opened) { - mUsesColorConversion = is_conv_needed(handle->format, handle->flags); - if (mUsesColorConversion) { - DEBUG_PRINT_INFO("open Color conv forW: %u, H: %u", - (unsigned int)m_sInPortDef.format.video.nFrameWidth, - (unsigned int)m_sInPortDef.format.video.nFrameHeight); - if (!c2d_conv.open(m_sInPortDef.format.video.nFrameHeight, - m_sInPortDef.format.video.nFrameWidth, - RGBA8888, NV12_128m, handle->width, handle->flags)) { - m_pCallbacks.EmptyBufferDone(hComp,m_app_data,buffer); - DEBUG_PRINT_ERROR("Color conv open failed"); - return OMX_ErrorBadParameter; - } - c2d_opened = true; - if (!dev_set_format(NV12_128m)) - DEBUG_PRINT_ERROR("cannot set color format"); - - dev_get_buf_req (&m_sInPortDef.nBufferCountMin, - &m_sInPortDef.nBufferCountActual, - &m_sInPortDef.nBufferSize, - m_sInPortDef.nPortIndex); + mUsesColorConversion = is_conv_needed(handle->format, handle->flags); + if (mUsesColorConversion) { + DEBUG_PRINT_INFO("open Color conv forW: %u, H: %u", + (unsigned int)m_sInPortDef.format.video.nFrameWidth, + (unsigned int)m_sInPortDef.format.video.nFrameHeight); + + ColorConvertFormat c2dSrcFmt = RGBA8888; + ColorConvertFormat c2dDestFmt = NV12_UBWC; + ColorMapping::const_iterator found = + c2dcc.mMapPixelFormat2Covertor.find(handle->format); + + if (found != c2dcc.mMapPixelFormat2Covertor.end()) { + c2dSrcFmt = (ColorConvertFormat)found->second; + } + + if (!c2dcc.setResolution(m_sInPortDef.format.video.nFrameHeight, + m_sInPortDef.format.video.nFrameWidth, + m_sInPortDef.format.video.nFrameHeight, + m_sInPortDef.format.video.nFrameWidth, + c2dSrcFmt, c2dDestFmt, + handle->flags, handle->width)) { + m_pCallbacks.EmptyBufferDone(hComp,m_app_data,buffer); + DEBUG_PRINT_ERROR("SetResolution failed"); + return OMX_ErrorBadParameter; } + if (!dev_set_format(c2dDestFmt)) + DEBUG_PRINT_ERROR("cannot set color format"); + + dev_get_buf_req (&m_sInPortDef.nBufferCountMin, + &m_sInPortDef.nBufferCountActual, + &m_sInPortDef.nBufferSize, + m_sInPortDef.nPortIndex); } } + if (input_flush_progress == true) { m_pCallbacks.EmptyBufferDone(hComp,m_app_data,buffer); DEBUG_PRINT_ERROR("ERROR: ETBProxyA: Input flush in progress"); @@ -4920,22 +4798,22 @@ OMX_ERRORTYPE omx_video::convert_queue_buffer(OMX_HANDLETYPE hComp, if (uva == MAP_FAILED) { ret = OMX_ErrorBadParameter; } else { - if (!c2d_conv.convert(Input_pmem_info.fd, uva, uva, - m_pInput_pmem[index].fd, pdest_frame->pBuffer, pdest_frame->pBuffer)) { + if (!c2dcc.convertC2D(Input_pmem_info.fd, uva, + uva, m_pInput_pmem[index].fd, + pdest_frame->pBuffer, + pdest_frame->pBuffer)) { DEBUG_PRINT_ERROR("Color Conversion failed"); ret = OMX_ErrorBadParameter; } else { unsigned int buf_size = 0; - if (!c2d_conv.get_buffer_size(C2D_OUTPUT,buf_size)) - ret = OMX_ErrorBadParameter; - else { - pdest_frame->nOffset = 0; - pdest_frame->nFilledLen = buf_size; - pdest_frame->nTimeStamp = psource_frame->nTimeStamp; - pdest_frame->nFlags = psource_frame->nFlags; - DEBUG_PRINT_LOW("Buffer header %p Filled len size %u", - pdest_frame, (unsigned int)pdest_frame->nFilledLen); - } + buf_size = c2dcc.getBuffSize(C2D_OUTPUT); + pdest_frame->nOffset = 0; + pdest_frame->nFilledLen = buf_size; + pdest_frame->nTimeStamp = psource_frame->nTimeStamp; + pdest_frame->nFlags = psource_frame->nFlags; + DEBUG_PRINT_LOW("Buffer header %p Filled len size %u", + pdest_frame, + (unsigned int)pdest_frame->nFilledLen); } munmap(uva,Input_pmem_info.size); } 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 17cf246a..41dd5693 100644 --- a/mm-video-v4l2/vidc/venc/src/omx_video_encoder.cpp +++ b/mm-video-v4l2/vidc/venc/src/omx_video_encoder.cpp @@ -634,13 +634,6 @@ OMX_ERRORTYPE omx_venc::set_parameter(OMX_IN OMX_HANDLETYPE hComp, (OMX_COLOR_FORMATTYPE)QOMX_COLOR_FormatAndroidOpaque) { m_sInPortDef.format.video.eColorFormat = (OMX_COLOR_FORMATTYPE) QOMX_DEFAULT_COLOR_FMT; - if (!mUseProxyColorFormat) { - if (!c2d_conv.init()) { - DEBUG_PRINT_ERROR("C2D init failed"); - return OMX_ErrorUnsupportedSetting; - } - DEBUG_PRINT_HIGH("C2D init is successful"); - } mUseProxyColorFormat = true; m_input_msg_id = OMX_COMPONENT_GENERATE_ETB_OPQ; } else @@ -723,13 +716,6 @@ OMX_ERRORTYPE omx_venc::set_parameter(OMX_IN OMX_HANDLETYPE hComp, (OMX_COLOR_FORMATTYPE)QOMX_COLOR_FormatAndroidOpaque) { m_sInPortFormat.eColorFormat = (OMX_COLOR_FORMATTYPE) QOMX_DEFAULT_COLOR_FMT; - if (!mUseProxyColorFormat) { - if (!c2d_conv.init()) { - DEBUG_PRINT_ERROR("C2D init failed"); - return OMX_ErrorUnsupportedSetting; - } - DEBUG_PRINT_HIGH("C2D init is successful"); - } mUseProxyColorFormat = true; m_input_msg_id = OMX_COMPONENT_GENERATE_ETB_OPQ; } else 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 f311571b..6719de0b 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 @@ -55,6 +55,7 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #define YUV_STATS_LIBRARY_NAME "libgpustats.so" // UBWC case: use GPU library +#undef ALIGN #define ALIGN(x, to_align) ((((unsigned long) x) + (to_align - 1)) & ~(to_align - 1)) #define EXTRADATA_IDX(__num_planes) ((__num_planes) ? (__num_planes) - 1 : 0) #define MAXDPB 16 |