summaryrefslogtreecommitdiff
path: root/mm-video-v4l2
diff options
context:
space:
mode:
authorKarthikeyan Periasamy <kperiasa@codeaurora.org>2017-05-22 16:35:42 -0700
committerGerrit - the friendly Code Review server <code-review@localhost>2017-05-31 13:10:00 -0700
commitd29b135298c56f890ded105c4d7c661b03013efe (patch)
tree3321248352777b4ec864d6c6c3a044782a253b07 /mm-video-v4l2
parent0fa84bb7592cb6ead18cf655f88ea77beddf1d6d (diff)
downloadmedia-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.mk1
-rw-r--r--mm-video-v4l2/vidc/common/inc/vidc_color_converter.h55
-rw-r--r--mm-video-v4l2/vidc/common/src/vidc_color_converter.cpp189
-rw-r--r--mm-video-v4l2/vidc/vdec/Android.mk4
-rw-r--r--mm-video-v4l2/vidc/vdec/inc/omx_vdec.h15
-rw-r--r--mm-video-v4l2/vidc/vdec/src/omx_vdec_v4l2.cpp182
-rw-r--r--mm-video-v4l2/vidc/venc/Android.mk8
-rw-r--r--mm-video-v4l2/vidc/venc/inc/omx_video_base.h28
-rw-r--r--mm-video-v4l2/vidc/venc/src/omx_swvenc_mpeg4.cpp10
-rw-r--r--mm-video-v4l2/vidc/venc/src/omx_video_base.cpp212
-rw-r--r--mm-video-v4l2/vidc/venc/src/omx_video_encoder.cpp14
-rw-r--r--mm-video-v4l2/vidc/venc/src/video_encoder_device_v4l2.cpp1
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