summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLuca Stefani <luca.stefani.ge1@gmail.com>2020-03-07 13:24:08 +0100
committerLuca Stefani <luca.stefani.ge1@gmail.com>2020-03-07 13:24:23 +0100
commite484f0ede93c09a9de49b991cc06aec03c496ee6 (patch)
treefc9818f16c9002157b8b6920c28375adee0fe353
parent261987cd6d779fa7ca814ee5d3df2241206063c1 (diff)
parentd8b6bd826c60ce8880b3b04f7e14b15e705b8ca5 (diff)
downloadandroid_hardware_qcom_media-e484f0ede93c09a9de49b991cc06aec03c496ee6.tar.gz
android_hardware_qcom_media-e484f0ede93c09a9de49b991cc06aec03c496ee6.tar.bz2
android_hardware_qcom_media-e484f0ede93c09a9de49b991cc06aec03c496ee6.zip
Merge tag 'android-10.0.0_r31' into lineage-17.1-android-10.0.0_r31
Android 10.0.0 release 31 * tag 'android-10.0.0_r31': mm-video-v4l2: venc: revert add support for handling EOS buffer mm-video-v4l2: venc: Check private handle->flags changed in empty_this_buffer_opaque mm-video-v4l2: venc: Set 601-Limited colorspace for color-converted buffers Change-Id: I70b5378f9c46d53355c065f499da98b7b5a4d899
-rw-r--r--msm8996/libc2dcolorconvert/Android.mk2
-rw-r--r--msm8996/libc2dcolorconvert/C2DColorConverter.cpp3
-rw-r--r--msm8996/mm-video-v4l2/vidc/venc/inc/omx_video_base.h9
-rw-r--r--msm8996/mm-video-v4l2/vidc/venc/src/omx_video_base.cpp35
-rw-r--r--msm8996/mm-video-v4l2/vidc/venc/src/video_encoder_device_v4l2.cpp7
-rw-r--r--msm8998/mm-video-v4l2/vidc/venc/inc/omx_video_base.h2
-rw-r--r--msm8998/mm-video-v4l2/vidc/venc/src/omx_video_base.cpp9
7 files changed, 46 insertions, 21 deletions
diff --git a/msm8996/libc2dcolorconvert/Android.mk b/msm8996/libc2dcolorconvert/Android.mk
index ec302802..f549450d 100644
--- a/msm8996/libc2dcolorconvert/Android.mk
+++ b/msm8996/libc2dcolorconvert/Android.mk
@@ -15,7 +15,7 @@ LOCAL_C_INCLUDES += $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr/include
endif
LOCAL_SHARED_LIBRARIES := liblog libdl
-LOCAL_HEADER_LIBRARIES := copybit_headers
+LOCAL_HEADER_LIBRARIES := copybit_headers gralloc_headers
LOCAL_MODULE_TAGS := optional
diff --git a/msm8996/libc2dcolorconvert/C2DColorConverter.cpp b/msm8996/libc2dcolorconvert/C2DColorConverter.cpp
index a9761719..5cafc10c 100644
--- a/msm8996/libc2dcolorconvert/C2DColorConverter.cpp
+++ b/msm8996/libc2dcolorconvert/C2DColorConverter.cpp
@@ -38,6 +38,7 @@
#include <errno.h>
#include <unistd.h>
#include <media/msm_media_info.h>
+#include <gralloc_priv.h>
#undef LOG_TAG
#define LOG_TAG "C2DColorConvert"
@@ -337,6 +338,8 @@ void* C2DColorConverter::getDummySurfaceDef(ColorConvertFormat format, size_t wi
} else {
C2D_RGB_SURFACE_DEF * surfaceDef = new C2D_RGB_SURFACE_DEF;
surfaceDef->format = getC2DFormat(format);
+ if (mFlags & private_handle_t::PRIV_FLAGS_UBWC_ALIGNED)
+ surfaceDef->format |= C2D_FORMAT_UBWC_COMPRESSED;
surfaceDef->width = width;
surfaceDef->height = height;
surfaceDef->buffer = (void *)0xaaaaaaaa;
diff --git a/msm8996/mm-video-v4l2/vidc/venc/inc/omx_video_base.h b/msm8996/mm-video-v4l2/vidc/venc/inc/omx_video_base.h
index 61aee806..faa14e8f 100644
--- a/msm8996/mm-video-v4l2/vidc/venc/inc/omx_video_base.h
+++ b/msm8996/mm-video-v4l2/vidc/venc/inc/omx_video_base.h
@@ -176,13 +176,14 @@ class omx_video: public qc_omx_component
~omx_c2d_conv();
bool init();
bool open(unsigned int height,unsigned int width,
- ColorConvertFormat src,
- ColorConvertFormat dest,unsigned int src_stride);
+ 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();
+ bool isUBWCChanged(unsigned int flags);
private:
C2DColorConverterBase *c2dcc;
pthread_mutex_t c_lock;
@@ -190,6 +191,7 @@ class omx_video: public qc_omx_component
ColorConvertFormat src_format;
createC2DColorConverter_t *mConvertOpen;
destroyC2DColorConverter_t *mConvertClose;
+ unsigned int mFlags = 0;
};
omx_c2d_conv c2d_conv;
#endif
@@ -564,7 +566,7 @@ class omx_video: public qc_omx_component
}
void complete_pending_buffer_done_cbs();
- bool is_conv_needed(int, int);
+ bool is_conv_needed(int);
void print_debug_color_aspects(ColorAspects *aspects, const char *prefix);
OMX_ERRORTYPE get_vendor_extension_config(
@@ -692,7 +694,6 @@ class omx_video: public qc_omx_component
OMX_U8 m_cRole[OMX_MAX_STRINGNAME_SIZE];
extra_data_handler extra_data_handle;
bool hw_overload;
- OMX_U32 m_graphicBufferSize;
};
#endif // __OMX_VIDEO_BASE_H__
diff --git a/msm8996/mm-video-v4l2/vidc/venc/src/omx_video_base.cpp b/msm8996/mm-video-v4l2/vidc/venc/src/omx_video_base.cpp
index 62fd5d82..b9a90c45 100644
--- a/msm8996/mm-video-v4l2/vidc/venc/src/omx_video_base.cpp
+++ b/msm8996/mm-video-v4l2/vidc/venc/src/omx_video_base.cpp
@@ -302,8 +302,7 @@ omx_video::omx_video():
m_etb_count(0),
m_fbd_count(0),
m_event_port_settings_sent(false),
- hw_overload(false),
- m_graphicBufferSize(0)
+ hw_overload(false)
{
DEBUG_PRINT_HIGH("omx_video(): Inside Constructor()");
memset(&m_cmp,0,sizeof(m_cmp));
@@ -4908,16 +4907,18 @@ bool omx_video::omx_c2d_conv::convert(int src_fd, void *src_base, void *src_vira
}
bool omx_video::omx_c2d_conv::open(unsigned int height,unsigned int width,
- ColorConvertFormat src, ColorConvertFormat dest,unsigned int src_stride)
+ 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,0,src_stride);
+ src, dest, flags, src_stride);
if (c2dcc) {
src_format = src;
status = true;
+ mFlags = flags;
} else
DEBUG_PRINT_ERROR("mConvertOpen failed");
}
@@ -4980,11 +4981,16 @@ bool omx_video::omx_c2d_conv::get_buffer_size(int port,unsigned int &buf_size)
}
return ret;
}
+bool omx_video::omx_c2d_conv::isUBWCChanged(unsigned int flags)
+{
+ return (mFlags & private_handle_t::PRIV_FLAGS_UBWC_ALIGNED) !=
+ (flags & private_handle_t::PRIV_FLAGS_UBWC_ALIGNED);
+}
-bool omx_video::is_conv_needed(int hal_fmt, int hal_flags)
+bool omx_video::is_conv_needed(int hal_fmt)
{
- bool bRet = hal_fmt == HAL_PIXEL_FORMAT_RGBA_8888 &&
- !(hal_flags & private_handle_t::PRIV_FLAGS_UBWC_ALIGNED);
+ bool bRet = hal_fmt == HAL_PIXEL_FORMAT_RGBA_8888;
+
#ifdef _HW_RGBA
bRet = false;
#endif
@@ -5036,20 +5042,21 @@ 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()) {
+ if (c2d_opened && (handle->format != c2d_conv.get_src_format() ||
+ c2d_conv.isUBWCChanged(handle->flags))) {
c2d_conv.close();
c2d_opened = false;
}
if (!c2d_opened) {
- mUsesColorConversion = is_conv_needed(handle->format, handle->flags);
+ mUsesColorConversion = is_conv_needed(handle->format);
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)) {
+ 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;
@@ -5254,8 +5261,7 @@ OMX_ERRORTYPE omx_video::push_input_buffer(OMX_HANDLETYPE hComp)
Input_pmem_info.fd = handle->fd;
Input_pmem_info.offset = 0;
Input_pmem_info.size = handle->size;
- m_graphicBufferSize = handle->size;
- if (is_conv_needed(handle->format, handle->flags))
+ if (is_conv_needed(handle->format))
ret = convert_queue_buffer(hComp,Input_pmem_info,index);
else if (handle->format == HAL_PIXEL_FORMAT_NV12_ENCODEABLE ||
handle->format == QOMX_COLOR_FORMATYUV420PackedSemiPlanar32m ||
@@ -5323,10 +5329,9 @@ OMX_ERRORTYPE omx_video::push_empty_eos_buffer(OMX_HANDLETYPE hComp,
emptyEosBufHdr.nTimeStamp = buffer->nTimeStamp;
emptyEosBufHdr.nFlags = buffer->nFlags;
emptyEosBufHdr.pBuffer = NULL;
- if (!mUsesColorConversion && !mUseProxyColorFormat)
+ if (!mUsesColorConversion)
emptyEosBufHdr.nAllocLen = m_sInPortDef.nBufferSize;
- else if (mUseProxyColorFormat)
- emptyEosBufHdr.nAllocLen = m_graphicBufferSize > 0 ? m_graphicBufferSize : m_sInPortDef.nBufferSize;
+
if (dev_empty_buf(&emptyEosBufHdr, 0, index, m_pInput_pmem[index].fd) != true) {
DEBUG_PRINT_ERROR("ERROR: in dev_empty_buf for empty eos buffer");
dev_free_buf(&Input_pmem_info, PORT_INDEX_IN);
diff --git a/msm8996/mm-video-v4l2/vidc/venc/src/video_encoder_device_v4l2.cpp b/msm8996/mm-video-v4l2/vidc/venc/src/video_encoder_device_v4l2.cpp
index 4250d8e2..ebce90a6 100644
--- a/msm8996/mm-video-v4l2/vidc/venc/src/video_encoder_device_v4l2.cpp
+++ b/msm8996/mm-video-v4l2/vidc/venc/src/video_encoder_device_v4l2.cpp
@@ -3651,6 +3651,13 @@ bool venc_dev::venc_empty_buf(void *buffer, void *pmem_data_buf, unsigned index,
": filled %d of %d format 0x%lx", fd, plane[0].bytesused, plane[0].length, m_sVenc_cfg.inputformat);
}
} else {
+ // color_format == 1 ==> RGBA to YUV Color-converted buffer
+ // Buffers color-converted via C2D have 601-Limited color
+ if (!streaming[OUTPUT_PORT]) {
+ DEBUG_PRINT_HIGH("Setting colorspace 601-L for Color-converted buffer");
+ venc_set_colorspace(MSM_VIDC_BT601_6_625, 0 /*range-limited*/,
+ MSM_VIDC_TRANSFER_601_6_525, MSM_VIDC_MATRIX_601_6_525);
+ }
plane[0].m.userptr = (unsigned long) bufhdr->pBuffer;
plane[0].data_offset = bufhdr->nOffset;
plane[0].length = bufhdr->nAllocLen;
diff --git a/msm8998/mm-video-v4l2/vidc/venc/inc/omx_video_base.h b/msm8998/mm-video-v4l2/vidc/venc/inc/omx_video_base.h
index 7ea8fd79..c15a1b1c 100644
--- a/msm8998/mm-video-v4l2/vidc/venc/inc/omx_video_base.h
+++ b/msm8998/mm-video-v4l2/vidc/venc/inc/omx_video_base.h
@@ -195,6 +195,7 @@ class omx_video: public qc_omx_component
bool get_buffer_size(int port,unsigned int &buf_size);
int get_src_format();
void close();
+ bool isUBWCChanged(unsigned int flags);
private:
C2DColorConverterBase *c2dcc;
pthread_mutex_t c_lock;
@@ -202,6 +203,7 @@ class omx_video: public qc_omx_component
ColorConvertFormat src_format;
createC2DColorConverter_t *mConvertOpen;
destroyC2DColorConverter_t *mConvertClose;
+ unsigned int mFlags = 0;
};
omx_c2d_conv c2d_conv;
#endif
diff --git a/msm8998/mm-video-v4l2/vidc/venc/src/omx_video_base.cpp b/msm8998/mm-video-v4l2/vidc/venc/src/omx_video_base.cpp
index d1c8d971..8756c097 100644
--- a/msm8998/mm-video-v4l2/vidc/venc/src/omx_video_base.cpp
+++ b/msm8998/mm-video-v4l2/vidc/venc/src/omx_video_base.cpp
@@ -5069,6 +5069,7 @@ bool omx_video::omx_c2d_conv::open(unsigned int height,unsigned int width,
if (c2dcc) {
src_format = src;
status = true;
+ mFlags = flags;
} else
DEBUG_PRINT_ERROR("mConvertOpen failed");
}
@@ -5131,6 +5132,11 @@ bool omx_video::omx_c2d_conv::get_buffer_size(int port,unsigned int &buf_size)
}
return ret;
}
+bool omx_video::omx_c2d_conv::isUBWCChanged(unsigned int flags)
+{
+ return (mFlags & private_handle_t::PRIV_FLAGS_UBWC_ALIGNED) !=
+ (flags & private_handle_t::PRIV_FLAGS_UBWC_ALIGNED);
+}
bool omx_video::is_conv_needed(int hal_fmt, int hal_flags)
{
@@ -5212,7 +5218,8 @@ 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()) {
+ if (c2d_opened && (handle->format != c2d_conv.get_src_format() ||
+ c2d_conv.isUBWCChanged(handle->flags))) {
c2d_conv.close();
c2d_opened = false;
}