Merge "Adding OmxCore_headers lib"
am: 4249787054
Change-Id: I0602159061cf2cdc7f842bc7f9c80edc2459538d
diff --git a/Android.mk b/Android.mk
index 7b951b0..af99124 100644
--- a/Android.mk
+++ b/Android.mk
@@ -5,11 +5,11 @@
ifneq ($(filter msm8996, $(TARGET_BOARD_PLATFORM)),)
QCOM_MEDIA_ROOT := $(call my-dir)/msm8996
endif
- ifneq ($(filter msmcobalt, $(TARGET_BOARD_PLATFORM)),)
- QCOM_MEDIA_ROOT := $(call my-dir)/msmcobalt
+ ifneq ($(filter msm8998, $(TARGET_BOARD_PLATFORM)),)
+ QCOM_MEDIA_ROOT := $(call my-dir)/msm8998
endif
- ifneq ($(filter msm8610 msm8226 msm8960 msm8660 msm7627a msm7630_surf msm8084 msm8952 msm8992 msm8994 msm8996 msmcobalt,$(TARGET_BOARD_PLATFORM)),)
+ ifneq ($(filter msm8610 msm8226 msm8960 msm8660 msm7627a msm7630_surf msm8084 msm8952 msm8992 msm8994 msm8996 msm8998,$(TARGET_BOARD_PLATFORM)),)
include $(QCOM_MEDIA_ROOT)/mm-core/Android.mk
include $(QCOM_MEDIA_ROOT)/libstagefrighthw/Android.mk
endif
@@ -18,11 +18,11 @@
include $(QCOM_MEDIA_ROOT)/mm-video-legacy/Android.mk
endif
- ifneq ($(filter msm8610 msm8226 msm8084 msm8952 msm8992 msm8994 msm8996 msmcobalt,$(TARGET_BOARD_PLATFORM)),)
+ ifneq ($(filter msm8610 msm8226 msm8084 msm8952 msm8992 msm8994 msm8996 msm8998,$(TARGET_BOARD_PLATFORM)),)
include $(QCOM_MEDIA_ROOT)/mm-video-v4l2/Android.mk
endif
- ifneq ($(filter msm8610 msm8226 msm8960 msm8084 msm8952 msm8992 msm8994 msm8996 msmcobalt,$(TARGET_BOARD_PLATFORM)),)
+ ifneq ($(filter msm8610 msm8226 msm8960 msm8084 msm8952 msm8992 msm8994 msm8996 msm8998,$(TARGET_BOARD_PLATFORM)),)
include $(QCOM_MEDIA_ROOT)/libc2dcolorconvert/Android.mk
endif
endif
diff --git a/msm8974/mm-video-v4l2/vidc/vdec/src/omx_vdec_msm8974.cpp b/msm8974/mm-video-v4l2/vidc/vdec/src/omx_vdec_msm8974.cpp
index dad7b4a..8b34951 100644
--- a/msm8974/mm-video-v4l2/vidc/vdec/src/omx_vdec_msm8974.cpp
+++ b/msm8974/mm-video-v4l2/vidc/vdec/src/omx_vdec_msm8974.cpp
@@ -5010,6 +5010,12 @@
{
DEBUG_PRINT_LOW("Inside %s, %p", __FUNCTION__, buffer);
OMX_ERRORTYPE eRet = OMX_ErrorNone;
+
+ if (secure_mode) {
+ DEBUG_PRINT_ERROR("use_input_heap_buffers is not allowed in secure mode");
+ return OMX_ErrorUndefined;
+ }
+
if (!m_inp_heap_ptr)
m_inp_heap_ptr = (OMX_BUFFERHEADERTYPE*)
calloc( (sizeof(OMX_BUFFERHEADERTYPE)),
@@ -6278,7 +6284,7 @@
/*for use buffer we need to memcpy the data*/
temp_buffer->buffer_len = buffer->nFilledLen;
- if (input_use_buffer && temp_buffer->bufferaddr) {
+ if (input_use_buffer && temp_buffer->bufferaddr && !secure_mode) {
if (buffer->nFilledLen <= temp_buffer->buffer_len) {
if (arbitrary_bytes) {
memcpy (temp_buffer->bufferaddr, (buffer->pBuffer + buffer->nOffset),buffer->nFilledLen);
diff --git a/msm8996/mm-video-v4l2/vidc/vdec/src/omx_vdec_v4l2.cpp b/msm8996/mm-video-v4l2/vidc/vdec/src/omx_vdec_v4l2.cpp
index ab42445..9d041e9 100644
--- a/msm8996/mm-video-v4l2/vidc/vdec/src/omx_vdec_v4l2.cpp
+++ b/msm8996/mm-video-v4l2/vidc/vdec/src/omx_vdec_v4l2.cpp
@@ -5810,6 +5810,12 @@
{
DEBUG_PRINT_LOW("Inside %s, %p", __FUNCTION__, buffer);
OMX_ERRORTYPE eRet = OMX_ErrorNone;
+
+ if (secure_mode) {
+ DEBUG_PRINT_ERROR("use_input_heap_buffers is not allowed in secure mode");
+ return OMX_ErrorUndefined;
+ }
+
if (!m_inp_heap_ptr)
m_inp_heap_ptr = (OMX_BUFFERHEADERTYPE*)
calloc( (sizeof(OMX_BUFFERHEADERTYPE)),
@@ -7071,7 +7077,7 @@
/*for use buffer we need to memcpy the data*/
temp_buffer->buffer_len = buffer->nFilledLen;
- if (input_use_buffer && temp_buffer->bufferaddr) {
+ if (input_use_buffer && temp_buffer->bufferaddr && !secure_mode) {
if (buffer->nFilledLen <= temp_buffer->buffer_len) {
if (arbitrary_bytes) {
memcpy (temp_buffer->bufferaddr, (buffer->pBuffer + buffer->nOffset),buffer->nFilledLen);
diff --git a/msmcobalt/Android.mk b/msm8998/Android.mk
similarity index 100%
rename from msmcobalt/Android.mk
rename to msm8998/Android.mk
diff --git a/msm8998/Makefile.am b/msm8998/Makefile.am
new file mode 100644
index 0000000..aa14ba8
--- /dev/null
+++ b/msm8998/Makefile.am
@@ -0,0 +1,5 @@
+# Makefile.am - Automake script for mm-omxvideo
+#
+ACLOCAL_AMFLAGS = -I m4
+
+SUBDIRS = mm-core mm-video-v4l2
\ No newline at end of file
diff --git a/msmcobalt/NOTICE b/msm8998/NOTICE
similarity index 100%
rename from msmcobalt/NOTICE
rename to msm8998/NOTICE
diff --git a/msmcobalt/conf_files/config.mk b/msm8998/conf_files/config.mk
similarity index 100%
rename from msmcobalt/conf_files/config.mk
rename to msm8998/conf_files/config.mk
diff --git a/msmcobalt/conf_files/msm8937/media_codecs_8937.xml b/msm8998/conf_files/msm8937/media_codecs_8937.xml
similarity index 100%
rename from msmcobalt/conf_files/msm8937/media_codecs_8937.xml
rename to msm8998/conf_files/msm8937/media_codecs_8937.xml
diff --git a/msmcobalt/conf_files/msm8937/media_codecs_performance_8937.xml b/msm8998/conf_files/msm8937/media_codecs_performance_8937.xml
similarity index 100%
rename from msmcobalt/conf_files/msm8937/media_codecs_performance_8937.xml
rename to msm8998/conf_files/msm8937/media_codecs_performance_8937.xml
diff --git a/msmcobalt/conf_files/msm8937/media_profiles_8937.xml b/msm8998/conf_files/msm8937/media_profiles_8937.xml
similarity index 100%
rename from msmcobalt/conf_files/msm8937/media_profiles_8937.xml
rename to msm8998/conf_files/msm8937/media_profiles_8937.xml
diff --git a/msm8998/configure.ac b/msm8998/configure.ac
new file mode 100644
index 0000000..2228410
--- /dev/null
+++ b/msm8998/configure.ac
@@ -0,0 +1,174 @@
+# -*- Autoconf -*-
+# Process this file with autoconf to produce a configure script.
+
+# Requires autoconf tool later than 2.61
+AC_PREREQ([2.61])
+# Initialize the omxvideo package version 1.0.0
+AC_INIT([omxvideo], 1.0.0)
+# Does not strictly follow GNU Coding standards
+AM_INIT_AUTOMAKE([gnu foreign subdir-objects])
+AM_MAINTAINER_MODE
+# defines some macros variable to be included by source
+AC_CONFIG_HEADER([config.h])
+AC_CONFIG_MACRO_DIR([m4])
+
+# Checks for programs.
+AM_PROG_AR
+AC_PROG_CC
+AC_PROG_CPP
+AC_PROG_CXX
+AM_PROG_CC_C_O
+AC_PROG_LIBTOOL
+AC_PROG_AWK
+AC_PROG_INSTALL
+AC_PROG_LN_S
+AC_PROG_MAKE_SET
+
+PKG_PROG_PKG_CONFIG
+
+AC_ARG_ENABLE([target-msm8953],
+ AC_HELP_STRING([--enable-target-msm8953],
+ [Enable conditional compile for target msm8953 [default=no]]),
+ [target_msm8953="${enableval}"])
+
+AC_ARG_ENABLE([target-msm8996],
+ AC_HELP_STRING([--enable-target-msm8996],
+ [Enable conditional compile for target msm8996 [default=no]]),
+ [target_msm8996="${enableval}"])
+
+AC_ARG_ENABLE([target-msm8610],
+ AC_HELP_STRING([--enable-target-msm8610],
+ [Enable conditional compile for target msm8610 [default=no]]),
+ [target_msm8610="${enableval}"])
+
+AC_ARG_ENABLE([target-msm8226],
+ AC_HELP_STRING([--enable-target-msm8226],
+ [Enable conditional compile for target msm8610 [default=no]]),
+ [target_msm8226="${enableval}"])
+
+AC_ARG_ENABLE([is-ubwc-supported],
+ AC_HELP_STRING([--enable-ubwc-supported],
+ [Enable conditional compile for target msm8953 [default=no]]),
+ [targets_that_support_ubwc="${enableval}"])
+
+AC_ARG_ENABLE([targets-that-support-pq],
+ AC_HELP_STRING([--enable-targets-that-support-pq],
+ [Enable conditional compile for target msm8953 [default=no]]),
+ [targets_that_support_pq="${enableval}"])
+
+AC_ARG_ENABLE([target-uses-ion],
+ AC_HELP_STRING([--enable-target-uses-ion],
+ [Enable conditional compile for target target-uses-ion [default=no]]),
+ [target_uses_ion="${enableval}"])
+
+AC_ARG_ENABLE([targets-that-use-flag-msm8226],
+ AC_HELP_STRING([--enable-targets-that-use-flag-msm8226],
+ [Enable conditional compile for target targets_that_use_flag_msm8226 [default=no]]),
+ [targets_that_use_flag_msm8226="${enableval}"])
+
+AC_ARG_ENABLE([target-uses-media-extensions],
+ AC_HELP_STRING([--enable-target-uses-media-extensions],
+ [Enable conditional compile for target target_uses_media_extensions [default=no]]),
+ [target_uses_media_extensions="${enableval}"])
+
+AC_ARG_ENABLE([master-side-cp-target-list],
+ AC_HELP_STRING([--enable-master-side-cp-target-list],
+ [Enable conditional compile for target master_side_cp_target_list [default=no]]),
+ [master_side_cp_target_list="${enableval}"])
+
+AC_ARG_ENABLE([use-glib],
+ AC_HELP_STRING([--enable-use-glib],
+ [Enable conditional compile for use glib [default=no]]),
+ [use_glib="${enableval}"])
+
+AC_ARG_WITH([sanitized-headers],
+ [AS_HELP_STRING([--with-sanitized-headers=DIR],[location of the sanitized Linux kernel headers])],
+ [CPPFLAGS="$CPPFLAGS -I $withval"])
+
+AC_ARG_WITH([glib-headers],
+ [AS_HELP_STRING([--with-binder-inc=DIR],[location of common headers])],
+ [CPPFLAGS="$CPPFLAGS -I$withval"])
+
+AC_ARG_WITH([utils-headers],
+ [AS_HELP_STRING([--with-utils-inc=DIR],[location of common headers])],
+ [CPPFLAGS="$CPPFLAGS -I$withval"])
+
+AC_ARG_WITH([cutils-headers],
+ [AS_HELP_STRING([--with-cutils-inc=DIR],[location of common headers])],
+ [CPPFLAGS="$CPPFLAGS -I$withval"])
+
+AC_ARG_WITH([kernel-headers],
+ [AS_HELP_STRING([--with-kernel-inc=DIR],[location of common headers])],
+ [CPPFLAGS="$CPPFLAGS -I$withval"])
+
+AC_ARG_WITH([kernel-uapi-headers],
+ [AS_HELP_STRING([--with-kernel-uapi-inc=DIR],[location of common headers])],
+ [CPPFLAGS="$CPPFLAGS -I$withval"])
+
+AC_ARG_WITH([adreno-headers],
+ [AS_HELP_STRING([--with-adreno-inc=DIR],[location of common headers])],
+ [CPPFLAGS="$CPPFLAGS -I$withval"])
+
+AC_ARG_WITH([libgpustats-headers],
+ [AS_HELP_STRING([--with-libgpustats-headers=DIR],[location of common headers])],
+ [CPPFLAGS="$CPPFLAGS -I$withval"])
+
+AC_ARG_WITH([ui-headers],
+ [AS_HELP_STRING([--with-ui-inc=DIR],[location of common headers])],
+ [CPPFLAGS="$CPPFLAGS -I$withval"])
+
+AC_ARG_WITH([android-headers],
+ [AS_HELP_STRING([--with-gralloc-inc=DIR],[location of common headers])],
+ [CPPFLAGS="$CPPFLAGS -I$withval"])
+
+AC_ARG_WITH([gralloc-headers],
+ [AS_HELP_STRING([--with-strcpyincludes-inc=DIR],[location of common headers])],
+ [CPPFLAGS="$CPPFLAGS -I$withval"])
+
+AC_ARG_WITH([binder-headers],
+ [AS_HELP_STRING([--with-binder-inc=DIR],[location of common headers])],
+ [CPPFLAGS="$CPPFLAGS -I$withval"])
+
+AC_ARG_WITH([display-headers],
+ [AS_HELP_STRING([--with-binder-inc=DIR],[location of common headers])],
+ [CPPFLAGS="$CPPFLAGS -I$withval"])
+
+AC_ARG_WITH([glib-lib-dir],
+ [AS_HELP_STRING([--with-binder-inc=DIR],[location of common headers])],
+ [CPPFLAGS="$CPPFLAGS -I$withval"])
+
+AM_CONDITIONAL(TARGET_MSM8953, [test "x$target_msm8953" = "xyes"])
+AM_CONDITIONAL(TARGET_MSM8996, [test "x$target_msm8996" = "xyes"])
+AM_CONDITIONAL(TARGET_MSM8610, [test "x$target_msm8610" = "xyes"])
+AM_CONDITIONAL(TARGET_MSM8226, [test "x$target_msm8226" = "xyes"])
+AM_CONDITIONAL(TARGETS_THAT_SUPPORT_UBWC, [test "x$targets_that_support_ubwc" = "xyes"])
+AM_CONDITIONAL(TARGETS_THAT_SUPPORT_PQ, [test "x$targets_that_support_pq" = "xyes"])
+AM_CONDITIONAL(TARGET_USES_ION, [test "x$target_uses_ion" = "xyes"])
+AM_CONDITIONAL(TARGETS_THAT_USE_FLAG_MSM8226, [test "x$targets_that_use_flag_msm8226" = "xyes"])
+AM_CONDITIONAL(TARGET_USES_MEDIA_EXTENSIONS, [test "x$target_uses_media_extensions" = "xyes"])
+AM_CONDITIONAL(MASTER_SIDE_CP_TARGET_LIST, [test "x$master_side_cp_target_list" = "xyes"])
+AM_CONDITIONAL(USE_GLIB, [test "x$use_glib" = "xyes"])
+
+AC_ARG_WITH([glib],
+ AC_HELP_STRING([--with-glib],
+ [enable glib, building HLOS systems which use glib]))
+
+if (test "x${with_glib}" = "xyes"); then
+ GLIB_CFLAGS="$GLIB_CFLAGS $GTHREAD_CFLAGS"
+ GLIB_LIBS="$GLIB_LIBS $GTHREAD_LIBS"
+
+ AC_SUBST(GLIB_CFLAGS)
+ AC_SUBST(GLIB_LIBS)
+fi
+
+AC_SUBST([CPPFLAGS])
+AC_SUBST([CFLAGS])
+
+AC_CONFIG_FILES([ \
+ Makefile \
+ mm-core/Makefile
+ mm-video-v4l2/Makefile \
+ mm-video-v4l2/vidc/Makefile \
+ mm-video-v4l2/vidc/venc/Makefile \
+ ])
+AC_OUTPUT
diff --git a/msmcobalt/libc2dcolorconvert/Android.mk b/msm8998/libc2dcolorconvert/Android.mk
similarity index 100%
rename from msmcobalt/libc2dcolorconvert/Android.mk
rename to msm8998/libc2dcolorconvert/Android.mk
diff --git a/msmcobalt/libc2dcolorconvert/C2DColorConverter.cpp b/msm8998/libc2dcolorconvert/C2DColorConverter.cpp
similarity index 100%
rename from msmcobalt/libc2dcolorconvert/C2DColorConverter.cpp
rename to msm8998/libc2dcolorconvert/C2DColorConverter.cpp
diff --git a/msmcobalt/libc2dcolorconvert/C2DColorConverter.h b/msm8998/libc2dcolorconvert/C2DColorConverter.h
similarity index 100%
rename from msmcobalt/libc2dcolorconvert/C2DColorConverter.h
rename to msm8998/libc2dcolorconvert/C2DColorConverter.h
diff --git a/msm8998/libc2dcolorconvert/Makefile.am b/msm8998/libc2dcolorconvert/Makefile.am
new file mode 100644
index 0000000..63fd717
--- /dev/null
+++ b/msm8998/libc2dcolorconvert/Makefile.am
@@ -0,0 +1,18 @@
+AM_CFLAGS = -Wall
+AM_CFLAGS += -Wundef
+AM_CFLAGS += -Wstrict-prototypes
+AM_CFLAGS += -Wno-trigraphs
+AM_CFLAGS += -g -O3
+AM_CFLAGS += "-include stdint.h"
+AM_CFLAGS += "-std=c++11"
+
+
+AM_CPPFLAGS = $(CPPFLAGS)
+
+c_sources = C2DColorConverter.cpp
+h_sources = C2DColorConverter.h
+
+lib_LTLIBRARIES = libc2dcolorconvert.la
+libc2dcolorconvert_la_SOURCES = $(c_sources) $(h_sources)
+libc2dcolorconvert_la_CPPFLAGS = $(AM_CFLAGS) $(AM_CPPFLAGS) -fPIC
+libc2dcolorconvert_la_LIBADD = -ldl -lpthread -llog
diff --git a/msmcobalt/libstagefrighthw/Android.mk b/msm8998/libstagefrighthw/Android.mk
similarity index 100%
rename from msmcobalt/libstagefrighthw/Android.mk
rename to msm8998/libstagefrighthw/Android.mk
diff --git a/msmcobalt/libstagefrighthw/MODULE_LICENSE_APACHE2 b/msm8998/libstagefrighthw/MODULE_LICENSE_APACHE2
similarity index 100%
rename from msmcobalt/libstagefrighthw/MODULE_LICENSE_APACHE2
rename to msm8998/libstagefrighthw/MODULE_LICENSE_APACHE2
diff --git a/msmcobalt/libstagefrighthw/NOTICE b/msm8998/libstagefrighthw/NOTICE
similarity index 100%
rename from msmcobalt/libstagefrighthw/NOTICE
rename to msm8998/libstagefrighthw/NOTICE
diff --git a/msmcobalt/libstagefrighthw/QComOMXMetadata.h b/msm8998/libstagefrighthw/QComOMXMetadata.h
similarity index 100%
rename from msmcobalt/libstagefrighthw/QComOMXMetadata.h
rename to msm8998/libstagefrighthw/QComOMXMetadata.h
diff --git a/msmcobalt/libstagefrighthw/QComOMXPlugin.cpp b/msm8998/libstagefrighthw/QComOMXPlugin.cpp
similarity index 100%
rename from msmcobalt/libstagefrighthw/QComOMXPlugin.cpp
rename to msm8998/libstagefrighthw/QComOMXPlugin.cpp
diff --git a/msmcobalt/libstagefrighthw/QComOMXPlugin.h b/msm8998/libstagefrighthw/QComOMXPlugin.h
similarity index 100%
rename from msmcobalt/libstagefrighthw/QComOMXPlugin.h
rename to msm8998/libstagefrighthw/QComOMXPlugin.h
diff --git a/msmcobalt/mm-core/Android.mk b/msm8998/mm-core/Android.mk
similarity index 96%
rename from msmcobalt/mm-core/Android.mk
rename to msm8998/mm-core/Android.mk
index 8934a48..6584953 100644
--- a/msmcobalt/mm-core/Android.mk
+++ b/msm8998/mm-core/Android.mk
@@ -48,8 +48,8 @@
MM_CORE_TARGET = 8952
else ifeq ($(TARGET_BOARD_PLATFORM),msm8953)
MM_CORE_TARGET = msm8953
-else ifeq ($(TARGET_BOARD_PLATFORM),msmcobalt)
-MM_CORE_TARGET = msmcobalt
+else ifeq ($(TARGET_BOARD_PLATFORM),msm8998)
+MM_CORE_TARGET = msm8998
else
MM_CORE_TARGET = default
endif
@@ -102,7 +102,7 @@
LOCAL_SRC_FILES := src/common/omx_core_cmp.cpp
LOCAL_SRC_FILES += src/common/qc_omx_core.c
-ifneq (,$(filter msm8916 msm8994 msm8909 msm8937 msm8996 msm8992 msm8952 msm8953 msmcobalt,$(TARGET_BOARD_PLATFORM)))
+ifneq (,$(filter msm8916 msm8994 msm8909 msm8937 msm8996 msm8992 msm8952 msm8953 msm8998,$(TARGET_BOARD_PLATFORM)))
LOCAL_SRC_FILES += src/$(MM_CORE_TARGET)/registry_table_android.c
else
LOCAL_SRC_FILES += src/$(MM_CORE_TARGET)/qc_registry_table_android.c
@@ -126,7 +126,7 @@
LOCAL_SRC_FILES := src/common/omx_core_cmp.cpp
LOCAL_SRC_FILES += src/common/qc_omx_core.c
-ifneq (,$(filter msm8916 msm8994 msm8909 msm8937 msm8996 msm8992 msm8952 msm8953 msmcobalt,$(TARGET_BOARD_PLATFORM)))
+ifneq (,$(filter msm8916 msm8994 msm8909 msm8937 msm8996 msm8992 msm8952 msm8953 msm8998,$(TARGET_BOARD_PLATFORM)))
LOCAL_SRC_FILES += src/$(MM_CORE_TARGET)/registry_table.c
else
LOCAL_SRC_FILES += src/$(MM_CORE_TARGET)/qc_registry_table.c
diff --git a/msm8998/mm-core/Makefile.am b/msm8998/mm-core/Makefile.am
new file mode 100644
index 0000000..51f68da
--- /dev/null
+++ b/msm8998/mm-core/Makefile.am
@@ -0,0 +1,79 @@
+# sources and intermediate files are separated
+
+#AM_CFLAGS = -Wall
+#AM_CFLAGS += -Wundef
+#AM_CFLAGS += -Wstrict-prototypes
+#AM_CFLAGS += -Wno-trigraphs
+#AM_CFLAGS += -g -O3
+#AM_CFLAGS += -O0 -fno-inline -fno-short-enums
+#AM_CFLAGS += -fPIC
+
+AM_CPPFLAGS = -D__packed__=
+AM_CPPFLAGS += -D_ANDROID_
+AM_CPPFLAGS += -D_ENABLE_QC_MSG_LOG_
+#AM_CPPFLAGS += -g -O3
+#AM_CPPFLAGS += -O0 -fno-inline -fno-short-enums
+AM_CPPFLAGS += -I$(top_srcdir)/mm-core/inc/
+AM_CPPFLAGS += -I$(top_srcdir)/mm-core/src/common/
+AM_CPPFLAGS += "-Dstrlcpy=g_strlcpy"
+AM_CPPFLAGS += "-Dstrlcat=g_strlcat"
+
+h_sources =inc/OMX_Audio.h
+h_sources +=inc/OMX_Component.h
+h_sources +=inc/OMX_ContentPipe.h
+h_sources +=inc/OMX_Core.h
+h_sources +=inc/OMX_Image.h
+h_sources +=inc/OMX_Index.h
+h_sources +=inc/OMX_IVCommon.h
+h_sources +=inc/OMX_Other.h
+h_sources +=inc/OMX_QCOMExtns.h
+h_sources +=inc/OMX_Types.h
+h_sources +=inc/OMX_Video.h
+h_sources +=inc/qc_omx_common.h
+h_sources +=inc/qc_omx_component.h
+h_sources +=inc/qc_omx_msg.h
+h_sources +=inc/QOMX_AudioExtensions.h
+h_sources +=inc/QOMX_AudioIndexExtensions.h
+h_sources +=inc/OMX_CoreExt.h
+h_sources +=inc/QOMX_CoreExtensions.h
+h_sources +=inc/QOMX_FileFormatExtensions.h
+h_sources +=inc/QOMX_IVCommonExtensions.h
+h_sources +=inc/QOMX_SourceExtensions.h
+h_sources +=inc/QOMX_VideoExtensions.h
+h_sources +=inc/OMX_IndexExt.h
+h_sources +=inc/QOMX_StreamingExtensions.h
+
+c_sources =src/common/omx_core_cmp.cpp
+c_sources +=src/common/qc_omx_core.c
+
+if TARGET_MSM8953
+TARGET_REGISTRY = msm8953
+endif
+
+if TARGET_MSM8996
+TARGET_REGISTRY = msm8996
+endif
+
+c_sources +=src/${TARGET_REGISTRY}/registry_table_android.c
+
+lib_LTLIBRARIES = libOmxCore.la
+include_HEADERS = $(h_sources)
+libOmxCore_la_SOURCES = $(c_sources)
+libOmxCore_la_CFLAGS = $(AM_CFLAGS) $(AM_CPPFLAGS) -fPIC
+libOmxCore_la_CPPFLAGS = $(AM_CFLAGS) $(AM_CPPFLAGS) -fPIC
+libOmxCore_la_LDFLAGS = -ldl -lrt -lpthread -lglib-2.0
+libOmxCore_la_LDFLAGS += -shared -version-info 0
+
+lib_LTLIBRARIES += libmm-omxcore.la
+
+c_sources =src/common/omx_core_cmp.cpp
+c_sources +=src/common/qc_omx_core.c
+c_sources +=src/${TARGET_REGISTRY}/registry_table.c
+
+include_HEADERS = $(h_sources)
+libmm_omxcore_la_SOURCES = $(c_sources)
+libmm_omxcore_la_CFLAGS = $(AM_CFLAGS) $(AM_CPPFLAGS) -fPIC
+libmm_omxcore_la_CPPFLAGS = $(AM_CFLAGS) $(AM_CPPFLAGS) -fPIC
+libmm_omxcore_la_LDFLAGS = -ldl -lrt -lpthread -lglib-2.0
+libmm_omxcore_la_LDFLAGS += -shared -version-info 0
+
diff --git a/msmcobalt/mm-core/inc/OMX_Audio.h b/msm8998/mm-core/inc/OMX_Audio.h
similarity index 100%
rename from msmcobalt/mm-core/inc/OMX_Audio.h
rename to msm8998/mm-core/inc/OMX_Audio.h
diff --git a/msmcobalt/mm-core/inc/OMX_Component.h b/msm8998/mm-core/inc/OMX_Component.h
similarity index 100%
rename from msmcobalt/mm-core/inc/OMX_Component.h
rename to msm8998/mm-core/inc/OMX_Component.h
diff --git a/msmcobalt/mm-core/inc/OMX_ContentPipe.h b/msm8998/mm-core/inc/OMX_ContentPipe.h
similarity index 100%
rename from msmcobalt/mm-core/inc/OMX_ContentPipe.h
rename to msm8998/mm-core/inc/OMX_ContentPipe.h
diff --git a/msmcobalt/mm-core/inc/OMX_Core.h b/msm8998/mm-core/inc/OMX_Core.h
similarity index 100%
rename from msmcobalt/mm-core/inc/OMX_Core.h
rename to msm8998/mm-core/inc/OMX_Core.h
diff --git a/msmcobalt/mm-core/inc/OMX_CoreExt.h b/msm8998/mm-core/inc/OMX_CoreExt.h
similarity index 100%
rename from msmcobalt/mm-core/inc/OMX_CoreExt.h
rename to msm8998/mm-core/inc/OMX_CoreExt.h
diff --git a/msmcobalt/mm-core/inc/OMX_IVCommon.h b/msm8998/mm-core/inc/OMX_IVCommon.h
similarity index 100%
rename from msmcobalt/mm-core/inc/OMX_IVCommon.h
rename to msm8998/mm-core/inc/OMX_IVCommon.h
diff --git a/msmcobalt/mm-core/inc/OMX_Image.h b/msm8998/mm-core/inc/OMX_Image.h
similarity index 100%
rename from msmcobalt/mm-core/inc/OMX_Image.h
rename to msm8998/mm-core/inc/OMX_Image.h
diff --git a/msmcobalt/mm-core/inc/OMX_Index.h b/msm8998/mm-core/inc/OMX_Index.h
similarity index 100%
rename from msmcobalt/mm-core/inc/OMX_Index.h
rename to msm8998/mm-core/inc/OMX_Index.h
diff --git a/msmcobalt/mm-core/inc/OMX_IndexExt.h b/msm8998/mm-core/inc/OMX_IndexExt.h
similarity index 100%
rename from msmcobalt/mm-core/inc/OMX_IndexExt.h
rename to msm8998/mm-core/inc/OMX_IndexExt.h
diff --git a/msmcobalt/mm-core/inc/OMX_Other.h b/msm8998/mm-core/inc/OMX_Other.h
similarity index 100%
rename from msmcobalt/mm-core/inc/OMX_Other.h
rename to msm8998/mm-core/inc/OMX_Other.h
diff --git a/msmcobalt/mm-core/inc/OMX_QCOMExtns.h b/msm8998/mm-core/inc/OMX_QCOMExtns.h
similarity index 95%
rename from msmcobalt/mm-core/inc/OMX_QCOMExtns.h
rename to msm8998/mm-core/inc/OMX_QCOMExtns.h
index e27aadb..5d81f1b 100644
--- a/msmcobalt/mm-core/inc/OMX_QCOMExtns.h
+++ b/msm8998/mm-core/inc/OMX_QCOMExtns.h
@@ -326,6 +326,7 @@
QOMX_COLOR_FORMATYUV420PackedSemiPlanar32mCompressed,
QOMX_COLOR_Format32bitRGBA8888,
QOMX_COLOR_Format32bitRGBA8888Compressed,
+ QOMX_COLOR_FORMATYUV420PackedSemiPlanar32m10bitCompressed,
QOMX_COLOR_FormatAndroidOpaque = (OMX_COLOR_FORMATTYPE) OMX_COLOR_FormatVendorStartUnused + 0x789,
};
@@ -626,6 +627,15 @@
OMX_QTIIndexParamVPXColorSpaceExtraData = 0x7F000066,
+ /*"OMX.google.android.index.describeHDRStaticInfo"*/
+ OMX_QTIIndexConfigDescribeHDRColorInfo = 0x7F000067,
+
+ /* Configure to disable PQ*/
+ OMX_QTIIndexParamDisablePQ = 0x7F000068,
+
+ /* Dither control for 10bit */
+ OMX_QTIIndexParamDitherControl = 0x7F000069,
+
};
/**
@@ -1648,6 +1658,12 @@
OMX_BOOL bEnable;
} QOMX_ENABLETYPE;
+typedef struct QOMX_DISABLETYPE {
+ OMX_U32 nSize;
+ OMX_VERSIONTYPE nVersion;
+ OMX_BOOL bDisable;
+} QOMX_DISABLETYPE;
+
typedef enum QOMX_VIDEO_EVENTS {
OMX_EventIndexsettingChanged = OMX_EventVendorStartUnused
} QOMX_VIDEO_EVENTS;
@@ -2016,6 +2032,81 @@
OMX_U32 nExtradataSize;
} QOMX_VIDEO_CLIENT_EXTRADATATYPE;
+#if defined(__cplusplus) && defined(USE_CAMERA_METABUFFER_UTILS)
+
+/**
+ * Camera1 meta-buffer payload create/access/modify utility
+ */
+struct MetaBufferUtil {
+
+ enum {
+ INT_OFFSET = 1,
+ INT_SIZE = 2,
+ INT_USAGE = 3,
+ INT_TIMESTAMP = 4,
+ INT_COLORFORMAT = 5,
+ INT_BUFINDEX = 6,
+ INT_TOTAL = INT_BUFINDEX,
+ };
+
+ static int getNumFdsForBatch(int batchSize) {
+ return batchSize;
+ }
+ static int getNumIntsForBatch(int batchSize) {
+ return batchSize * INT_TOTAL;
+ }
+ static int getBatchSize(const native_handle_t *hnd) {
+ return MetaBufferUtil::isHandleSane(hnd) ? hnd->numFds : -1;
+ }
+
+ /* getters */
+ /* return a fd at index or -1 if index is invalid */
+ static int getFdAt(const native_handle_t *hnd, int index) {
+ return (MetaBufferUtil::isHandleSane(hnd) && (index < hnd->numFds)) ? hnd->data[index] : -1;
+ }
+ /* return a int of type at index or -1 if index or type is invalid */
+ static int getIntAt(const native_handle_t *hnd, int index, int type) {
+ int idx = MetaBufferUtil::getIntIndex(hnd, index, type);
+ return idx < 0 ? -1 : hnd->data[idx];
+ }
+
+ /* setters */
+ /* replace the fd at index and return 0. Return -1 if index is invalid */
+ static int setFdAt(native_handle_t *hnd, int index, int fd) {
+ return (MetaBufferUtil::isHandleSane(hnd) && (index < hnd->numFds)) ? hnd->data[index] = fd, 0 : -1;
+ }
+ /* replace an int of type at index and return 0. Return -1 if index or type is invalid */
+ static int setIntAt(native_handle_t *hnd, int index, int type, int value) {
+ int idx = MetaBufferUtil::getIntIndex(hnd, index, type);
+ return idx < 0 ? -1 : hnd->data[idx] = value, 0;
+ }
+
+private:
+ static bool isHandleSane(const native_handle_t *hnd) {
+ return hnd && hnd->version == sizeof(native_handle_t);
+ }
+
+ static int getIntIndex(const native_handle_t *hnd, int index, int type) {
+ int idx = index + type * MetaBufferUtil::getBatchSize(hnd);
+ return (MetaBufferUtil::isHandleSane(hnd) && (idx < (hnd->numInts + hnd->numFds))) ? idx : -1;
+ }
+};
+
+#endif // __cplusplus
+
+typedef enum QOMX_VIDEO_DITHERTYPE {
+ QOMX_DITHER_DISABLE = 0,
+ QOMX_DITHER_COLORSPACE_EXCEPT_BT2020 = 0x01,
+ QOMX_DITHER_ALL_COLORSPACE = 0x02,
+} QOMX_VIDEO_DITHERTYPE;
+
+typedef struct QOMX_VIDEO_DITHER_CONTROL {
+ OMX_U32 nSize;
+ OMX_VERSIONTYPE nVersion;
+ OMX_U32 nPortIndex;
+ QOMX_VIDEO_DITHERTYPE eDitherType;
+} QOMX_VIDEO_DITHER_CONTROL;
+
#ifdef __cplusplus
}
#endif /* __cplusplus */
diff --git a/msmcobalt/mm-core/inc/OMX_Skype_VideoExtensions.h b/msm8998/mm-core/inc/OMX_Skype_VideoExtensions.h
similarity index 100%
rename from msmcobalt/mm-core/inc/OMX_Skype_VideoExtensions.h
rename to msm8998/mm-core/inc/OMX_Skype_VideoExtensions.h
diff --git a/msmcobalt/mm-core/inc/OMX_Types.h b/msm8998/mm-core/inc/OMX_Types.h
similarity index 100%
rename from msmcobalt/mm-core/inc/OMX_Types.h
rename to msm8998/mm-core/inc/OMX_Types.h
diff --git a/msmcobalt/mm-core/inc/OMX_Video.h b/msm8998/mm-core/inc/OMX_Video.h
similarity index 100%
rename from msmcobalt/mm-core/inc/OMX_Video.h
rename to msm8998/mm-core/inc/OMX_Video.h
diff --git a/msmcobalt/mm-core/inc/OMX_VideoExt.h b/msm8998/mm-core/inc/OMX_VideoExt.h
similarity index 100%
rename from msmcobalt/mm-core/inc/OMX_VideoExt.h
rename to msm8998/mm-core/inc/OMX_VideoExt.h
diff --git a/msmcobalt/mm-core/inc/QCMediaDefs.h b/msm8998/mm-core/inc/QCMediaDefs.h
similarity index 100%
rename from msmcobalt/mm-core/inc/QCMediaDefs.h
rename to msm8998/mm-core/inc/QCMediaDefs.h
diff --git a/msmcobalt/mm-core/inc/QCMetaData.h b/msm8998/mm-core/inc/QCMetaData.h
similarity index 100%
rename from msmcobalt/mm-core/inc/QCMetaData.h
rename to msm8998/mm-core/inc/QCMetaData.h
diff --git a/msmcobalt/mm-core/inc/QOMX_AudioExtensions.h b/msm8998/mm-core/inc/QOMX_AudioExtensions.h
similarity index 100%
rename from msmcobalt/mm-core/inc/QOMX_AudioExtensions.h
rename to msm8998/mm-core/inc/QOMX_AudioExtensions.h
diff --git a/msmcobalt/mm-core/inc/QOMX_AudioIndexExtensions.h b/msm8998/mm-core/inc/QOMX_AudioIndexExtensions.h
similarity index 100%
rename from msmcobalt/mm-core/inc/QOMX_AudioIndexExtensions.h
rename to msm8998/mm-core/inc/QOMX_AudioIndexExtensions.h
diff --git a/msmcobalt/mm-core/inc/QOMX_CoreExtensions.h b/msm8998/mm-core/inc/QOMX_CoreExtensions.h
similarity index 100%
rename from msmcobalt/mm-core/inc/QOMX_CoreExtensions.h
rename to msm8998/mm-core/inc/QOMX_CoreExtensions.h
diff --git a/msmcobalt/mm-core/inc/QOMX_FileFormatExtensions.h b/msm8998/mm-core/inc/QOMX_FileFormatExtensions.h
similarity index 100%
rename from msmcobalt/mm-core/inc/QOMX_FileFormatExtensions.h
rename to msm8998/mm-core/inc/QOMX_FileFormatExtensions.h
diff --git a/msmcobalt/mm-core/inc/QOMX_IVCommonExtensions.h b/msm8998/mm-core/inc/QOMX_IVCommonExtensions.h
similarity index 100%
rename from msmcobalt/mm-core/inc/QOMX_IVCommonExtensions.h
rename to msm8998/mm-core/inc/QOMX_IVCommonExtensions.h
diff --git a/msmcobalt/mm-core/inc/QOMX_SourceExtensions.h b/msm8998/mm-core/inc/QOMX_SourceExtensions.h
similarity index 100%
rename from msmcobalt/mm-core/inc/QOMX_SourceExtensions.h
rename to msm8998/mm-core/inc/QOMX_SourceExtensions.h
diff --git a/msmcobalt/mm-core/inc/QOMX_StreamingExtensions.h b/msm8998/mm-core/inc/QOMX_StreamingExtensions.h
similarity index 100%
rename from msmcobalt/mm-core/inc/QOMX_StreamingExtensions.h
rename to msm8998/mm-core/inc/QOMX_StreamingExtensions.h
diff --git a/msmcobalt/mm-core/inc/QOMX_VideoExtensions.h b/msm8998/mm-core/inc/QOMX_VideoExtensions.h
similarity index 100%
rename from msmcobalt/mm-core/inc/QOMX_VideoExtensions.h
rename to msm8998/mm-core/inc/QOMX_VideoExtensions.h
diff --git a/msmcobalt/mm-core/inc/drmplay_version.h b/msm8998/mm-core/inc/drmplay_version.h
similarity index 100%
rename from msmcobalt/mm-core/inc/drmplay_version.h
rename to msm8998/mm-core/inc/drmplay_version.h
diff --git a/msmcobalt/mm-core/inc/qc_omx_common.h b/msm8998/mm-core/inc/qc_omx_common.h
similarity index 100%
rename from msmcobalt/mm-core/inc/qc_omx_common.h
rename to msm8998/mm-core/inc/qc_omx_common.h
diff --git a/msmcobalt/mm-core/inc/qc_omx_component.h b/msm8998/mm-core/inc/qc_omx_component.h
similarity index 100%
rename from msmcobalt/mm-core/inc/qc_omx_component.h
rename to msm8998/mm-core/inc/qc_omx_component.h
diff --git a/msmcobalt/mm-core/inc/qc_omx_msg.h b/msm8998/mm-core/inc/qc_omx_msg.h
similarity index 100%
rename from msmcobalt/mm-core/inc/qc_omx_msg.h
rename to msm8998/mm-core/inc/qc_omx_msg.h
diff --git a/msmcobalt/mm-core/src/7627A/qc_registry_table.c b/msm8998/mm-core/src/7627A/qc_registry_table.c
similarity index 100%
rename from msmcobalt/mm-core/src/7627A/qc_registry_table.c
rename to msm8998/mm-core/src/7627A/qc_registry_table.c
diff --git a/msmcobalt/mm-core/src/7627A/qc_registry_table_android.c b/msm8998/mm-core/src/7627A/qc_registry_table_android.c
similarity index 100%
rename from msmcobalt/mm-core/src/7627A/qc_registry_table_android.c
rename to msm8998/mm-core/src/7627A/qc_registry_table_android.c
diff --git a/msmcobalt/mm-core/src/7630/qc_registry_table.c b/msm8998/mm-core/src/7630/qc_registry_table.c
similarity index 100%
rename from msmcobalt/mm-core/src/7630/qc_registry_table.c
rename to msm8998/mm-core/src/7630/qc_registry_table.c
diff --git a/msmcobalt/mm-core/src/7630/qc_registry_table_android.c b/msm8998/mm-core/src/7630/qc_registry_table_android.c
similarity index 100%
rename from msmcobalt/mm-core/src/7630/qc_registry_table_android.c
rename to msm8998/mm-core/src/7630/qc_registry_table_android.c
diff --git a/msmcobalt/mm-core/src/8084/qc_registry_table.c b/msm8998/mm-core/src/8084/qc_registry_table.c
similarity index 100%
rename from msmcobalt/mm-core/src/8084/qc_registry_table.c
rename to msm8998/mm-core/src/8084/qc_registry_table.c
diff --git a/msmcobalt/mm-core/src/8084/qc_registry_table_android.c b/msm8998/mm-core/src/8084/qc_registry_table_android.c
similarity index 100%
rename from msmcobalt/mm-core/src/8084/qc_registry_table_android.c
rename to msm8998/mm-core/src/8084/qc_registry_table_android.c
diff --git a/msmcobalt/mm-core/src/8092/qc_registry_table.c b/msm8998/mm-core/src/8092/qc_registry_table.c
similarity index 100%
rename from msmcobalt/mm-core/src/8092/qc_registry_table.c
rename to msm8998/mm-core/src/8092/qc_registry_table.c
diff --git a/msmcobalt/mm-core/src/8092/qc_registry_table_android.c b/msm8998/mm-core/src/8092/qc_registry_table_android.c
similarity index 100%
rename from msmcobalt/mm-core/src/8092/qc_registry_table_android.c
rename to msm8998/mm-core/src/8092/qc_registry_table_android.c
diff --git a/msmcobalt/mm-core/src/8226/qc_registry_table.c b/msm8998/mm-core/src/8226/qc_registry_table.c
similarity index 100%
rename from msmcobalt/mm-core/src/8226/qc_registry_table.c
rename to msm8998/mm-core/src/8226/qc_registry_table.c
diff --git a/msmcobalt/mm-core/src/8226/qc_registry_table_android.c b/msm8998/mm-core/src/8226/qc_registry_table_android.c
similarity index 100%
rename from msmcobalt/mm-core/src/8226/qc_registry_table_android.c
rename to msm8998/mm-core/src/8226/qc_registry_table_android.c
diff --git a/msmcobalt/mm-core/src/8610/qc_registry_table.c b/msm8998/mm-core/src/8610/qc_registry_table.c
similarity index 100%
rename from msmcobalt/mm-core/src/8610/qc_registry_table.c
rename to msm8998/mm-core/src/8610/qc_registry_table.c
diff --git a/msmcobalt/mm-core/src/8610/qc_registry_table_android.c b/msm8998/mm-core/src/8610/qc_registry_table_android.c
similarity index 100%
rename from msmcobalt/mm-core/src/8610/qc_registry_table_android.c
rename to msm8998/mm-core/src/8610/qc_registry_table_android.c
diff --git a/msmcobalt/mm-core/src/8660/qc_registry_table.c b/msm8998/mm-core/src/8660/qc_registry_table.c
similarity index 100%
rename from msmcobalt/mm-core/src/8660/qc_registry_table.c
rename to msm8998/mm-core/src/8660/qc_registry_table.c
diff --git a/msmcobalt/mm-core/src/8660/qc_registry_table_android.c b/msm8998/mm-core/src/8660/qc_registry_table_android.c
similarity index 100%
rename from msmcobalt/mm-core/src/8660/qc_registry_table_android.c
rename to msm8998/mm-core/src/8660/qc_registry_table_android.c
diff --git a/msmcobalt/mm-core/src/8909/registry_table_android.c b/msm8998/mm-core/src/8909/registry_table.c
similarity index 86%
rename from msmcobalt/mm-core/src/8909/registry_table_android.c
rename to msm8998/mm-core/src/8909/registry_table.c
index 226518a..b6b0c0f 100644
--- a/msmcobalt/mm-core/src/8909/registry_table_android.c
+++ b/msm8998/mm-core/src/8909/registry_table.c
@@ -31,31 +31,17 @@
O p e n M A X w r a p p e r s
O p e n M A X C o r e
- This module contains the registry table for the QTI's OpenMAX core.
+ This module contains the registry table for the QTI's OpenMAX core.
*//*========================================================================*/
-
#include "qc_omx_core.h"
omx_core_cb_type core[] =
{
{
- "OMX.ittiam.video.decoder.mpeg4",
- NULL, // Create instance function
- // Unique instance handle
- {
- NULL
- },
- NULL, // Shared object library handle
- "libOmxIttiamVdec.so",
- {
- "video_decoder.mpeg4"
- }
- },
- {
"OMX.qcom.video.decoder.avc",
- NULL, // Create instance function
+ NULL, // Create instance function
// Unique instance handle
{
NULL
@@ -67,6 +53,20 @@
}
},
{
+ "OMX.qcom.file.muxer",
+ NULL, // Create instance function
+ // Unique instance handle
+ {
+ NULL
+ },
+ NULL, // Shared object library handle
+
+ "libOmxMux.so",
+ {
+ "container_muxer.mp2"
+ }
+ },
+ {
"OMX.qcom.video.decoder.hevc",
NULL, // Create instance function
// Unique instance handle
@@ -81,7 +81,7 @@
},
{
"OMX.qcom.video.decoder.vp8",
- NULL, // Create instance function
+ NULL, // Create instance function
// Unique instance handle
{
NULL
@@ -105,32 +105,6 @@
"video_encoder.avc"
}
},
- {
- "OMX.qcom.video.encoder.mpeg4sw",
- NULL, // Create instance function
- // Unique instance handle
- {
- NULL
- },
- NULL, // Shared object library handle
- "libOmxSwVencMpeg4.so",
- {
- "video_encoder.mpeg4"
- }
- },
- {
- "OMX.qcom.video.encoder.h263sw",
- NULL, // Create instance function
- // Unique instance handle
- {
- NULL
- },
- NULL, // Shared object library handle
- "libOmxSwVencMpeg4.so",
- {
- "video_encoder.h263"
- }
- },
{
"OMX.qcom.audio.decoder.Qcelp13",
NULL, // Create instance function
@@ -171,19 +145,6 @@
}
},
{
- "OMX.qcom.audio.decoder.amrwbplus",
- NULL, // Create instance function
- // Unique instance handle
- {
- NULL
- },
- NULL, // Shared object library handle
- "libOmxAmrwbplusDec.so",
- {
- "audio_decoder.awbplus"
- }
- },
- {
"OMX.qcom.audio.decoder.wma10Pro",
NULL, // Create instance function
// Unique instance handle
@@ -197,16 +158,16 @@
}
},
{
- "OMX.qcom.audio.decoder.wmaLossLess",
+ "OMX.qcom.audio.decoder.amrwbplus",
NULL, // Create instance function
// Unique instance handle
{
NULL
},
NULL, // Shared object library handle
- "libOmxWmaDec.so",
+ "libOmxAmrwbplusDec.so",
{
- "audio_decoder.wma"
+ "audio_decoder.awbplus"
}
},
{
@@ -274,7 +235,7 @@
"audio_decoder.aac"
}
},
- {
+ {
"OMX.qcom.audio.decoder.multiaac",
NULL, // Create instance function
// Unique instance handle
@@ -288,29 +249,80 @@
}
},
{
- "AIV.play",
- NULL, // Create instance function
+ "OMX.qti.audio.decoder.alac.sw",
+ NULL, // Create instance function
// Unique instance handle
{
+ NULL,
+ NULL,
+ NULL,
NULL
},
- NULL, // Shared object library handle
- "libAivPlay.so",
+ NULL, // Shared object library handle
+ "libOmxAlacDecSw.so",
{
- "AIV.play.101"
+ "audio_decoder.alac"
}
},
- {
- "OMX.qcom.file.muxer",
- NULL, // Create instance function
+ {
+ "OMX.qcom.audio.decoder.alac",
+ NULL, // Create instance function
// Unique instance handle
{
NULL
},
NULL, // Shared object library handle
- "libOmxMux.so",
+ "libOmxAlacDec.so",
{
- "container_muxer.mp2"
+ "audio_decoder.alac"
+ }
+ },
+ {
+ "OMX.qcom.audio.decoder.ape",
+ NULL, // Create instance function
+ // Unique instance handle
+ {
+ NULL,
+ NULL,
+ NULL,
+ NULL
+ },
+ NULL, // Shared object library handle
+ "libOmxApeDec.so",
+ {
+ "audio_decoder.ape"
+ }
+ },
+ {
+ "OMX.qti.audio.decoder.ape.sw",
+ NULL, // Create instance function
+ // Unique instance handle
+ {
+ NULL,
+ NULL,
+ NULL,
+ NULL
+ },
+ NULL, // Shared object library handle
+ "libOmxApeDecSw.so",
+ {
+ "audio_decoder.ape"
+ }
+ },
+ {
+ "OMX.qti.audio.decoder.flac.sw",
+ NULL, // Create instance function
+ // Unique instance handle
+ {
+ NULL,
+ NULL,
+ NULL,
+ NULL
+ },
+ NULL, // Shared object library handle
+ "libOmxFlacDecSw.so",
+ {
+ "audio_decoder.flac"
}
}
};
diff --git a/msmcobalt/mm-core/src/8909/registry_table_android.c b/msm8998/mm-core/src/8909/registry_table_android.c
similarity index 83%
copy from msmcobalt/mm-core/src/8909/registry_table_android.c
copy to msm8998/mm-core/src/8909/registry_table_android.c
index 226518a..94cbead 100644
--- a/msmcobalt/mm-core/src/8909/registry_table_android.c
+++ b/msm8998/mm-core/src/8909/registry_table_android.c
@@ -312,6 +312,83 @@
{
"container_muxer.mp2"
}
+ },
+ {
+ "OMX.qti.audio.decoder.alac.sw",
+ NULL, // Create instance function
+ // Unique instance handle
+ {
+ NULL,
+ NULL,
+ NULL,
+ NULL
+ },
+ NULL, // Shared object library handle
+ "libOmxAlacDecSw.so",
+ {
+ "audio_decoder.alac"
+ }
+ },
+ {
+ "OMX.qcom.audio.decoder.alac",
+ NULL, // Create instance function
+ // Unique instance handle
+ {
+ NULL
+ },
+ NULL, // Shared object library handle
+ "libOmxAlacDec.so",
+ {
+ "audio_decoder.alac"
+ }
+ },
+ {
+ "OMX.qcom.audio.decoder.ape",
+ NULL, // Create instance function
+ // Unique instance handle
+ {
+ NULL,
+ NULL,
+ NULL,
+ NULL
+ },
+ NULL, // Shared object library handle
+ "libOmxApeDec.so",
+ {
+ "audio_decoder.ape"
+ }
+ },
+ {
+ "OMX.qti.audio.decoder.ape.sw",
+ NULL, // Create instance function
+ // Unique instance handle
+ {
+ NULL,
+ NULL,
+ NULL,
+ NULL
+ },
+ NULL, // Shared object library handle
+ "libOmxApeDecSw.so",
+ {
+ "audio_decoder.ape"
+ }
+ },
+ {
+ "OMX.qti.audio.decoder.flac.sw",
+ NULL, // Create instance function
+ // Unique instance handle
+ {
+ NULL,
+ NULL,
+ NULL,
+ NULL
+ },
+ NULL, // Shared object library handle
+ "libOmxFlacDecSw.so",
+ {
+ "audio_decoder.flac"
+ }
}
};
diff --git a/msmcobalt/mm-core/src/8916/registry_table.c b/msm8998/mm-core/src/8916/registry_table.c
similarity index 100%
rename from msmcobalt/mm-core/src/8916/registry_table.c
rename to msm8998/mm-core/src/8916/registry_table.c
diff --git a/msmcobalt/mm-core/src/8916/registry_table_android.c b/msm8998/mm-core/src/8916/registry_table_android.c
similarity index 100%
rename from msmcobalt/mm-core/src/8916/registry_table_android.c
rename to msm8998/mm-core/src/8916/registry_table_android.c
diff --git a/msmcobalt/mm-core/src/8937/registry_table_android.c b/msm8998/mm-core/src/8937/registry_table.c
similarity index 85%
rename from msmcobalt/mm-core/src/8937/registry_table_android.c
rename to msm8998/mm-core/src/8937/registry_table.c
index 6ecb499..d3aee99 100755
--- a/msmcobalt/mm-core/src/8937/registry_table_android.c
+++ b/msm8998/mm-core/src/8937/registry_table.c
@@ -31,18 +31,17 @@
O p e n M A X w r a p p e r s
O p e n M A X C o r e
- This module contains the registry table for the QTI's OpenMAX core.
+ This module contains the registry table for the QTI's OpenMAX core.
*//*========================================================================*/
-
#include "qc_omx_core.h"
omx_core_cb_type core[] =
{
- {
+ {
"OMX.qcom.video.decoder.avc",
- NULL, // Create instance function
+ NULL, // Create instance function
// Unique instance handle
{
NULL
@@ -68,7 +67,7 @@
},
{
"OMX.qcom.video.decoder.avc.secure",
- NULL, // Create instance function
+ NULL, // Create instance function
// Unique instance handle
{
NULL
@@ -80,6 +79,20 @@
}
},
{
+ "OMX.qcom.file.muxer",
+ NULL, // Create instance function
+ // Unique instance handle
+ {
+ NULL
+ },
+ NULL, // Shared object library handle
+
+ "libOmxMux.so",
+ {
+ "container_muxer.mp2"
+ }
+ },
+ {
"OMX.qcom.video.decoder.hevc",
NULL, // Create instance function
// Unique instance handle
@@ -107,7 +120,7 @@
},
{
"OMX.qcom.video.decoder.vp8",
- NULL, // Create instance function
+ NULL, // Create instance function
// Unique instance handle
{
NULL
@@ -144,7 +157,7 @@
"video_encoder.avc"
}
},
- {
+ {
"OMX.qti.video.decoder.mpeg4sw",
NULL, // Create instance function
// Unique instance handle
@@ -222,6 +235,103 @@
"video_encoder.h263"
}
},
+ {
+ "OMX.qcom.audio.encoder.g711mlaw",
+ NULL, // Create instance function
+ // Unique instance handle
+ {
+ NULL,
+ NULL,
+ NULL,
+ NULL
+ },
+ NULL, // Shared object library handle
+ "libOmxG711Enc.so",
+ {
+ "audio_encoder.g711"
+ }
+ },
+ {
+ "OMX.qcom.audio.encoder.g711alaw",
+ NULL, // Create instance function
+ // Unique instance handle
+ {
+ NULL,
+ NULL,
+ NULL,
+ NULL
+ },
+ NULL, // Shared object library handle
+ "libOmxG711Enc.so",
+ {
+ "audio_encoder.g711"
+ }
+ },
+ {
+ "OMX.qcom.audio.encoder.amrwb",
+ NULL, // Create instance function
+ // Unique instance handle
+ {
+ NULL
+ },
+ NULL, // Shared object library handle
+ "libOmxAmrEnc.so",
+ {
+ "audio_encoder.amrwb"
+ }
+ },
+ {
+ "OMX.qcom.audio.decoder.g711mlaw",
+ NULL, // Create instance function
+ // Unique instance handle
+ {
+ NULL
+ },
+ NULL, // Shared object library handle
+ "libOmxG711Dec.so",
+ {
+ "audio_decoder.g711"
+ }
+ },
+ {
+ "OMX.qcom.audio.decoder.g711alaw",
+ NULL, // Create instance function
+ // Unique instance handle
+ {
+ NULL
+ },
+ NULL, // Shared object library handle
+ "libOmxG711Dec.so",
+ {
+ "audio_decoder.g711"
+ }
+ },
+ {
+ "OMX.qcom.audio.decoder.amrwb",
+ NULL, // Create instance function
+ // Unique instance handle
+ {
+ NULL
+ },
+ NULL, // Shared object library handle
+ "libOmxAmrDec.so",
+ {
+ "audio_decoder.amrwb"
+ }
+ },
+ {
+ "OMX.qcom.audio.decoder.amrnb",
+ NULL, // Create instance function
+ // Unique instance handle
+ {
+ NULL
+ },
+ NULL, // Shared object library handle
+ "libOmxAmrDec.so",
+ {
+ "audio_decoder.amrnb"
+ }
+ },
{
"OMX.qcom.audio.decoder.Qcelp13",
NULL, // Create instance function
@@ -287,38 +397,6 @@
}
},
{
- "OMX.qcom.audio.decoder.wmaLossLess",
- NULL, // Create instance function
- // Unique instance handle
- {
- NULL,
- NULL,
- NULL,
- NULL
- },
- NULL, // Shared object library handle
- "libOmxWmaDec.so",
- {
- "audio_decoder.wma"
- }
- },
- {
- "OMX.qcom.audio.decoder.amrwbplus",
- NULL, // Create instance function
- // Unique instance handle
- {
- NULL,
- NULL,
- NULL,
- NULL
- },
- NULL, // Shared object library handle
- "libOmxAmrwbplusDec.so",
- {
- "audio_decoder.awbplus"
- }
- },
- {
"OMX.qcom.audio.decoder.aac",
NULL, // Create instance function
// Unique instance handle
@@ -477,36 +555,7 @@
{
"audio_decoder.aac"
}
- },
- {
- "OMX.qti.vdec.vpp",
- NULL, // Create instance function
- // Unique instance handle
- {
- NULL,
- NULL,
- NULL,
- NULL
- },
- NULL, // Shared object library handle
- "libOmxVpp.so",
- {
- "video_decoder.vpp"
- }
- },
- {
- "OMX.qcom.file.muxer",
- NULL, // Create instance function
- // Unique instance handle
- {
- NULL
- },
- NULL, // Shared object library handle
- "libOmxMux.so",
- {
- "container_muxer.mp2"
- }
- },
+ }
};
const unsigned int SIZE_OF_CORE = sizeof(core) / sizeof(omx_core_cb_type);
diff --git a/msmcobalt/mm-core/src/8937/registry_table_android.c b/msm8998/mm-core/src/8937/registry_table_android.c
similarity index 85%
copy from msmcobalt/mm-core/src/8937/registry_table_android.c
copy to msm8998/mm-core/src/8937/registry_table_android.c
index 6ecb499..b835af5 100755
--- a/msmcobalt/mm-core/src/8937/registry_table_android.c
+++ b/msm8998/mm-core/src/8937/registry_table_android.c
@@ -222,6 +222,103 @@
"video_encoder.h263"
}
},
+ {
+ "OMX.qcom.audio.encoder.g711mlaw",
+ NULL, // Create instance function
+ // Unique instance handle
+ {
+ NULL,
+ NULL,
+ NULL,
+ NULL
+ },
+ NULL, // Shared object library handle
+ "libOmxG711Enc.so",
+ {
+ "audio_encoder.g711"
+ }
+ },
+ {
+ "OMX.qcom.audio.encoder.g711alaw",
+ NULL, // Create instance function
+ // Unique instance handle
+ {
+ NULL,
+ NULL,
+ NULL,
+ NULL
+ },
+ NULL, // Shared object library handle
+ "libOmxG711Enc.so",
+ {
+ "audio_encoder.g711"
+ }
+ },
+ {
+ "OMX.qcom.audio.encoder.amrwb",
+ NULL, // Create instance function
+ // Unique instance handle
+ {
+ NULL
+ },
+ NULL, // Shared object library handle
+ "libOmxAmrEnc.so",
+ {
+ "audio_encoder.amrwb"
+ }
+ },
+ {
+ "OMX.qcom.audio.decoder.g711mlaw",
+ NULL, // Create instance function
+ // Unique instance handle
+ {
+ NULL
+ },
+ NULL, // Shared object library handle
+ "libOmxG711Dec.so",
+ {
+ "audio_decoder.g711"
+ }
+ },
+ {
+ "OMX.qcom.audio.decoder.g711alaw",
+ NULL, // Create instance function
+ // Unique instance handle
+ {
+ NULL
+ },
+ NULL, // Shared object library handle
+ "libOmxG711Dec.so",
+ {
+ "audio_decoder.g711"
+ }
+ },
+ {
+ "OMX.qcom.audio.decoder.amrwb",
+ NULL, // Create instance function
+ // Unique instance handle
+ {
+ NULL
+ },
+ NULL, // Shared object library handle
+ "libOmxAmrDec.so",
+ {
+ "audio_decoder.amrwb"
+ }
+ },
+ {
+ "OMX.qcom.audio.decoder.amrnb",
+ NULL, // Create instance function
+ // Unique instance handle
+ {
+ NULL
+ },
+ NULL, // Shared object library handle
+ "libOmxAmrDec.so",
+ {
+ "audio_decoder.amrnb"
+ }
+ },
{
"OMX.qcom.audio.decoder.Qcelp13",
NULL, // Create instance function
diff --git a/msmcobalt/mm-core/src/8952/registry_table.c b/msm8998/mm-core/src/8952/registry_table.c
similarity index 100%
rename from msmcobalt/mm-core/src/8952/registry_table.c
rename to msm8998/mm-core/src/8952/registry_table.c
diff --git a/msmcobalt/mm-core/src/8952/registry_table_android.c b/msm8998/mm-core/src/8952/registry_table_android.c
similarity index 100%
rename from msmcobalt/mm-core/src/8952/registry_table_android.c
rename to msm8998/mm-core/src/8952/registry_table_android.c
diff --git a/msmcobalt/mm-core/src/8960/qc_registry_table.c b/msm8998/mm-core/src/8960/qc_registry_table.c
similarity index 100%
rename from msmcobalt/mm-core/src/8960/qc_registry_table.c
rename to msm8998/mm-core/src/8960/qc_registry_table.c
diff --git a/msmcobalt/mm-core/src/8960/qc_registry_table_android.c b/msm8998/mm-core/src/8960/qc_registry_table_android.c
similarity index 100%
rename from msmcobalt/mm-core/src/8960/qc_registry_table_android.c
rename to msm8998/mm-core/src/8960/qc_registry_table_android.c
diff --git a/msmcobalt/mm-core/src/8974/qc_registry_table.c b/msm8998/mm-core/src/8974/qc_registry_table.c
similarity index 100%
rename from msmcobalt/mm-core/src/8974/qc_registry_table.c
rename to msm8998/mm-core/src/8974/qc_registry_table.c
diff --git a/msmcobalt/mm-core/src/8974/qc_registry_table_android.c b/msm8998/mm-core/src/8974/qc_registry_table_android.c
similarity index 100%
rename from msmcobalt/mm-core/src/8974/qc_registry_table_android.c
rename to msm8998/mm-core/src/8974/qc_registry_table_android.c
diff --git a/msmcobalt/mm-core/src/common/omx_core_cmp.cpp b/msm8998/mm-core/src/common/omx_core_cmp.cpp
similarity index 100%
rename from msmcobalt/mm-core/src/common/omx_core_cmp.cpp
rename to msm8998/mm-core/src/common/omx_core_cmp.cpp
diff --git a/msmcobalt/mm-core/src/common/omx_core_cmp.h b/msm8998/mm-core/src/common/omx_core_cmp.h
similarity index 100%
rename from msmcobalt/mm-core/src/common/omx_core_cmp.h
rename to msm8998/mm-core/src/common/omx_core_cmp.h
diff --git a/msmcobalt/mm-core/src/common/qc_omx_core.c b/msm8998/mm-core/src/common/qc_omx_core.c
similarity index 100%
rename from msmcobalt/mm-core/src/common/qc_omx_core.c
rename to msm8998/mm-core/src/common/qc_omx_core.c
diff --git a/msmcobalt/mm-core/src/common/qc_omx_core.h b/msm8998/mm-core/src/common/qc_omx_core.h
similarity index 100%
rename from msmcobalt/mm-core/src/common/qc_omx_core.h
rename to msm8998/mm-core/src/common/qc_omx_core.h
diff --git a/msmcobalt/mm-core/src/default/qc_registry_table.c b/msm8998/mm-core/src/default/qc_registry_table.c
similarity index 100%
rename from msmcobalt/mm-core/src/default/qc_registry_table.c
rename to msm8998/mm-core/src/default/qc_registry_table.c
diff --git a/msmcobalt/mm-core/src/default/qc_registry_table_android.c b/msm8998/mm-core/src/default/qc_registry_table_android.c
similarity index 100%
rename from msmcobalt/mm-core/src/default/qc_registry_table_android.c
rename to msm8998/mm-core/src/default/qc_registry_table_android.c
diff --git a/msmcobalt/mm-core/src/msm8953/registry_table.c b/msm8998/mm-core/src/msm8953/registry_table.c
similarity index 96%
rename from msmcobalt/mm-core/src/msm8953/registry_table.c
rename to msm8998/mm-core/src/msm8953/registry_table.c
index 48831f3..b6ac3ed 100755
--- a/msmcobalt/mm-core/src/msm8953/registry_table.c
+++ b/msm8998/mm-core/src/msm8953/registry_table.c
@@ -274,6 +274,32 @@
"video_decoder.vp9"
}
},
+ {
+ "OMX.qcom.audio.decoder.amrwb",
+ NULL, // Create instance function
+ // Unique instance handle
+ {
+ NULL
+ },
+ NULL, // Shared object library handle
+ "libOmxAmrDec.so",
+ {
+ "audio_decoder.amrwb"
+ }
+ },
+ {
+ "OMX.qcom.audio.decoder.amrnb",
+ NULL, // Create instance function
+ // Unique instance handle
+ {
+ NULL
+ },
+ NULL, // Shared object library handle
+ "libOmxAmrDec.so",
+ {
+ "audio_decoder.amrnb"
+ }
+ },
{
"OMX.qcom.video.encoder.mpeg4",
NULL, // Create instance function
diff --git a/msmcobalt/mm-core/src/msm8953/registry_table_android.c b/msm8998/mm-core/src/msm8953/registry_table_android.c
similarity index 96%
rename from msmcobalt/mm-core/src/msm8953/registry_table_android.c
rename to msm8998/mm-core/src/msm8953/registry_table_android.c
index 0d8c8ca..b5aaa5f 100755
--- a/msmcobalt/mm-core/src/msm8953/registry_table_android.c
+++ b/msm8998/mm-core/src/msm8953/registry_table_android.c
@@ -301,6 +301,32 @@
}
},
{
+ "OMX.qcom.audio.decoder.amrnb",
+ NULL, // Create instance function
+ // Unique instance handle
+ {
+ NULL
+ },
+ NULL, // Shared object library handle
+ "libOmxAmrDec.so",
+ {
+ "audio_decoder.amrnb"
+ }
+ },
+ {
+ "OMX.qcom.audio.decoder.amrwb",
+ NULL, // Create instance function
+ // Unique instance handle
+ {
+ NULL
+ },
+ NULL, // Shared object library handle
+ "libOmxAmrDec.so",
+ {
+ "audio_decoder.amrwb"
+ }
+ },
+ {
"OMX.qcom.video.encoder.mpeg4",
NULL, // Create instance function
// Unique instance handle
diff --git a/msmcobalt/mm-core/src/msm8992/registry_table.c b/msm8998/mm-core/src/msm8992/registry_table.c
similarity index 100%
rename from msmcobalt/mm-core/src/msm8992/registry_table.c
rename to msm8998/mm-core/src/msm8992/registry_table.c
diff --git a/msmcobalt/mm-core/src/msm8992/registry_table_android.c b/msm8998/mm-core/src/msm8992/registry_table_android.c
similarity index 100%
rename from msmcobalt/mm-core/src/msm8992/registry_table_android.c
rename to msm8998/mm-core/src/msm8992/registry_table_android.c
diff --git a/msmcobalt/mm-core/src/msm8994/registry_table.c b/msm8998/mm-core/src/msm8994/registry_table.c
similarity index 100%
rename from msmcobalt/mm-core/src/msm8994/registry_table.c
rename to msm8998/mm-core/src/msm8994/registry_table.c
diff --git a/msmcobalt/mm-core/src/msm8994/registry_table_android.c b/msm8998/mm-core/src/msm8994/registry_table_android.c
similarity index 100%
rename from msmcobalt/mm-core/src/msm8994/registry_table_android.c
rename to msm8998/mm-core/src/msm8994/registry_table_android.c
diff --git a/msmcobalt/mm-core/src/msm8996/registry_table.c b/msm8998/mm-core/src/msm8996/registry_table.c
similarity index 86%
rename from msmcobalt/mm-core/src/msm8996/registry_table.c
rename to msm8998/mm-core/src/msm8996/registry_table.c
index fbfe2c8..914ea3c 100644
--- a/msmcobalt/mm-core/src/msm8996/registry_table.c
+++ b/msm8998/mm-core/src/msm8996/registry_table.c
@@ -518,6 +518,103 @@
"audio_encoder.amrnb"
}
},
+ {
+ "OMX.qcom.audio.encoder.g711mlaw",
+ NULL, // Create instance function
+ // Unique instance handle
+ {
+ NULL,
+ NULL,
+ NULL,
+ NULL
+ },
+ NULL, // Shared object library handle
+ "libOmxG711Enc.so",
+ {
+ "audio_encoder.g711"
+ }
+ },
+ {
+ "OMX.qcom.audio.encoder.g711alaw",
+ NULL, // Create instance function
+ // Unique instance handle
+ {
+ NULL,
+ NULL,
+ NULL,
+ NULL
+ },
+ NULL, // Shared object library handle
+ "libOmxG711Enc.so",
+ {
+ "audio_encoder.g711"
+ }
+ },
+ {
+ "OMX.qcom.audio.encoder.amrwb",
+ NULL, // Create instance function
+ // Unique instance handle
+ {
+ NULL
+ },
+ NULL, // Shared object library handle
+ "libOmxAmrEnc.so",
+ {
+ "audio_encoder.amrwb"
+ }
+ },
+ {
+ "OMX.qcom.audio.decoder.g711mlaw",
+ NULL, // Create instance function
+ // Unique instance handle
+ {
+ NULL
+ },
+ NULL, // Shared object library handle
+ "libOmxG711Dec.so",
+ {
+ "audio_decoder.g711"
+ }
+ },
+ {
+ "OMX.qcom.audio.decoder.g711alaw",
+ NULL, // Create instance function
+ // Unique instance handle
+ {
+ NULL
+ },
+ NULL, // Shared object library handle
+ "libOmxG711Dec.so",
+ {
+ "audio_decoder.g711"
+ }
+ },
+ {
+ "OMX.qcom.audio.decoder.amrwb",
+ NULL, // Create instance function
+ // Unique instance handle
+ {
+ NULL
+ },
+ NULL, // Shared object library handle
+ "libOmxAmrDec.so",
+ {
+ "audio_decoder.amrwb"
+ }
+ },
+ {
+ "OMX.qcom.audio.decoder.amrnb",
+ NULL, // Create instance function
+ // Unique instance handle
+ {
+ NULL
+ },
+ NULL, // Shared object library handle
+ "libOmxAmrDec.so",
+ {
+ "audio_decoder.amrnb"
+ }
+ },
{
"OMX.qcom.audio.decoder.aac",
NULL, // Create instance function
diff --git a/msmcobalt/mm-core/src/msm8996/registry_table_android.c b/msm8998/mm-core/src/msm8996/registry_table_android.c
similarity index 89%
rename from msmcobalt/mm-core/src/msm8996/registry_table_android.c
rename to msm8998/mm-core/src/msm8996/registry_table_android.c
index f574ad4..fdcb1a1 100644
--- a/msmcobalt/mm-core/src/msm8996/registry_table_android.c
+++ b/msm8998/mm-core/src/msm8996/registry_table_android.c
@@ -710,6 +710,103 @@
"audio_encoder.amrnb"
}
},
+ {
+ "OMX.qcom.audio.encoder.g711mlaw",
+ NULL, // Create instance function
+ // Unique instance handle
+ {
+ NULL,
+ NULL,
+ NULL,
+ NULL
+ },
+ NULL, // Shared object library handle
+ "libOmxG711Enc.so",
+ {
+ "audio_encoder.g711"
+ }
+ },
+ {
+ "OMX.qcom.audio.encoder.g711alaw",
+ NULL, // Create instance function
+ // Unique instance handle
+ {
+ NULL,
+ NULL,
+ NULL,
+ NULL
+ },
+ NULL, // Shared object library handle
+ "libOmxG711Enc.so",
+ {
+ "audio_encoder.g711"
+ }
+ },
+ {
+ "OMX.qcom.audio.encoder.amrwb",
+ NULL, // Create instance function
+ // Unique instance handle
+ {
+ NULL
+ },
+ NULL, // Shared object library handle
+ "libOmxAmrEnc.so",
+ {
+ "audio_encoder.amrwb"
+ }
+ },
+ {
+ "OMX.qcom.audio.decoder.g711mlaw",
+ NULL, // Create instance function
+ // Unique instance handle
+ {
+ NULL
+ },
+ NULL, // Shared object library handle
+ "libOmxG711Dec.so",
+ {
+ "audio_decoder.g711"
+ }
+ },
+ {
+ "OMX.qcom.audio.decoder.g711alaw",
+ NULL, // Create instance function
+ // Unique instance handle
+ {
+ NULL
+ },
+ NULL, // Shared object library handle
+ "libOmxG711Dec.so",
+ {
+ "audio_decoder.g711"
+ }
+ },
+ {
+ "OMX.qcom.audio.decoder.amrwb",
+ NULL, // Create instance function
+ // Unique instance handle
+ {
+ NULL
+ },
+ NULL, // Shared object library handle
+ "libOmxAmrDec.so",
+ {
+ "audio_decoder.amrwb"
+ }
+ },
+ {
+ "OMX.qcom.audio.decoder.amrnb",
+ NULL, // Create instance function
+ // Unique instance handle
+ {
+ NULL
+ },
+ NULL, // Shared object library handle
+ "libOmxAmrDec.so",
+ {
+ "audio_decoder.amrnb"
+ }
+ },
{
"OMX.qcom.audio.decoder.aac",
NULL, // Create instance function
diff --git a/msmcobalt/mm-core/src/msmcobalt/registry_table.c b/msm8998/mm-core/src/msm8998/registry_table.c
similarity index 100%
rename from msmcobalt/mm-core/src/msmcobalt/registry_table.c
rename to msm8998/mm-core/src/msm8998/registry_table.c
diff --git a/msmcobalt/mm-core/src/msmcobalt/registry_table_android.c b/msm8998/mm-core/src/msm8998/registry_table_android.c
similarity index 100%
rename from msmcobalt/mm-core/src/msmcobalt/registry_table_android.c
rename to msm8998/mm-core/src/msm8998/registry_table_android.c
diff --git a/msmcobalt/mm-core/src/msm8996/registry_table.c b/msm8998/mm-core/src/msmcobalt/registry_table.c
similarity index 85%
copy from msmcobalt/mm-core/src/msm8996/registry_table.c
copy to msm8998/mm-core/src/msmcobalt/registry_table.c
index fbfe2c8..7381960 100644
--- a/msmcobalt/mm-core/src/msm8996/registry_table.c
+++ b/msm8998/mm-core/src/msmcobalt/registry_table.c
@@ -1,5 +1,5 @@
/*--------------------------------------------------------------------------
-Copyright (c) 2014-2016, The Linux Foundation. All rights reserved.
+Copyright (c) 2016, 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
@@ -409,21 +409,6 @@
}
},
{
- "OMX.qti.audio.decoder.alac.sw",
- NULL, // Create instance function
- {
- NULL,
- NULL,
- NULL,
- NULL
- },
- NULL, // Shared object library handle
- "libOmxAlacDecSw.so",
- {
- "audio_decoder.alac"
- }
- },
- {
"OMX.qcom.audio.decoder.ape",
NULL, // Create instance function
// Unique instance handle
@@ -440,8 +425,9 @@
}
},
{
- "OMX.qti.audio.decoder.ape.sw",
+ "OMX.qti.audio.decoder.dsd",
NULL, // Create instance function
+ // Unique instance handle
{
NULL,
NULL,
@@ -449,9 +435,9 @@
NULL
},
NULL, // Shared object library handle
- "libOmxApeDecSw.so",
+ "libOmxDsdDec.so",
{
- "audio_decoder.ape"
+ "audio_decoder.dsd"
}
},
{
@@ -518,6 +504,103 @@
"audio_encoder.amrnb"
}
},
+ {
+ "OMX.qcom.audio.encoder.g711mlaw",
+ NULL, // Create instance function
+ // Unique instance handle
+ {
+ NULL,
+ NULL,
+ NULL,
+ NULL
+ },
+ NULL, // Shared object library handle
+ "libOmxG711Enc.so",
+ {
+ "audio_encoder.g711"
+ }
+ },
+ {
+ "OMX.qcom.audio.encoder.g711alaw",
+ NULL, // Create instance function
+ // Unique instance handle
+ {
+ NULL,
+ NULL,
+ NULL,
+ NULL
+ },
+ NULL, // Shared object library handle
+ "libOmxG711Enc.so",
+ {
+ "audio_encoder.g711"
+ }
+ },
+ {
+ "OMX.qcom.audio.encoder.amrwb",
+ NULL, // Create instance function
+ // Unique instance handle
+ {
+ NULL
+ },
+ NULL, // Shared object library handle
+ "libOmxAmrEnc.so",
+ {
+ "audio_encoder.amrwb"
+ }
+ },
+ {
+ "OMX.qcom.audio.decoder.g711mlaw",
+ NULL, // Create instance function
+ // Unique instance handle
+ {
+ NULL
+ },
+ NULL, // Shared object library handle
+ "libOmxG711Dec.so",
+ {
+ "audio_decoder.g711"
+ }
+ },
+ {
+ "OMX.qcom.audio.decoder.g711alaw",
+ NULL, // Create instance function
+ // Unique instance handle
+ {
+ NULL
+ },
+ NULL, // Shared object library handle
+ "libOmxG711Dec.so",
+ {
+ "audio_decoder.g711"
+ }
+ },
+ {
+ "OMX.qcom.audio.decoder.amrwb",
+ NULL, // Create instance function
+ // Unique instance handle
+ {
+ NULL
+ },
+ NULL, // Shared object library handle
+ "libOmxAmrDec.so",
+ {
+ "audio_decoder.amrwb"
+ }
+ },
+ {
+ "OMX.qcom.audio.decoder.amrnb",
+ NULL, // Create instance function
+ // Unique instance handle
+ {
+ NULL
+ },
+ NULL, // Shared object library handle
+ "libOmxAmrDec.so",
+ {
+ "audio_decoder.amrnb"
+ }
+ },
{
"OMX.qcom.audio.decoder.aac",
NULL, // Create instance function
diff --git a/msmcobalt/mm-core/src/msm8996/registry_table_android.c b/msm8998/mm-core/src/msmcobalt/registry_table_android.c
similarity index 87%
copy from msmcobalt/mm-core/src/msm8996/registry_table_android.c
copy to msm8998/mm-core/src/msmcobalt/registry_table_android.c
index f574ad4..4997afe 100644
--- a/msmcobalt/mm-core/src/msm8996/registry_table_android.c
+++ b/msm8998/mm-core/src/msmcobalt/registry_table_android.c
@@ -1,5 +1,5 @@
/*--------------------------------------------------------------------------
-Copyright (c) 2014-2016, The Linux Foundation. All rights reserved.
+Copyright (c) 2016, 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
@@ -647,6 +647,22 @@
}
},
{
+ "OMX.qti.audio.decoder.dsd",
+ NULL, // Create instance function
+ // Unique instance handle
+ {
+ NULL,
+ NULL,
+ NULL,
+ NULL
+ },
+ NULL, // Shared object library handle
+ "libOmxDsdDec.so",
+ {
+ "audio_decoder.dsd"
+ }
+ },
+ {
"OMX.qcom.audio.encoder.aac",
NULL, // Create instance function
// Unique instance handle
@@ -710,6 +726,103 @@
"audio_encoder.amrnb"
}
},
+ {
+ "OMX.qcom.audio.encoder.g711mlaw",
+ NULL, // Create instance function
+ // Unique instance handle
+ {
+ NULL,
+ NULL,
+ NULL,
+ NULL
+ },
+ NULL, // Shared object library handle
+ "libOmxG711Enc.so",
+ {
+ "audio_encoder.g711"
+ }
+ },
+ {
+ "OMX.qcom.audio.encoder.g711alaw",
+ NULL, // Create instance function
+ // Unique instance handle
+ {
+ NULL,
+ NULL,
+ NULL,
+ NULL
+ },
+ NULL, // Shared object library handle
+ "libOmxG711Enc.so",
+ {
+ "audio_encoder.g711"
+ }
+ },
+ {
+ "OMX.qcom.audio.encoder.amrwb",
+ NULL, // Create instance function
+ // Unique instance handle
+ {
+ NULL
+ },
+ NULL, // Shared object library handle
+ "libOmxAmrEnc.so",
+ {
+ "audio_encoder.amrwb"
+ }
+ },
+ {
+ "OMX.qcom.audio.decoder.g711mlaw",
+ NULL, // Create instance function
+ // Unique instance handle
+ {
+ NULL
+ },
+ NULL, // Shared object library handle
+ "libOmxG711Dec.so",
+ {
+ "audio_decoder.g711"
+ }
+ },
+ {
+ "OMX.qcom.audio.decoder.g711alaw",
+ NULL, // Create instance function
+ // Unique instance handle
+ {
+ NULL
+ },
+ NULL, // Shared object library handle
+ "libOmxG711Dec.so",
+ {
+ "audio_decoder.g711"
+ }
+ },
+ {
+ "OMX.qcom.audio.decoder.amrwb",
+ NULL, // Create instance function
+ // Unique instance handle
+ {
+ NULL
+ },
+ NULL, // Shared object library handle
+ "libOmxAmrDec.so",
+ {
+ "audio_decoder.amrwb"
+ }
+ },
+ {
+ "OMX.qcom.audio.decoder.amrnb",
+ NULL, // Create instance function
+ // Unique instance handle
+ {
+ NULL
+ },
+ NULL, // Shared object library handle
+ "libOmxAmrDec.so",
+ {
+ "audio_decoder.amrnb"
+ }
+ },
{
"OMX.qcom.audio.decoder.aac",
NULL, // Create instance function
diff --git a/msmcobalt/mm-video-v4l2/Android.mk b/msm8998/mm-video-v4l2/Android.mk
similarity index 100%
rename from msmcobalt/mm-video-v4l2/Android.mk
rename to msm8998/mm-video-v4l2/Android.mk
diff --git a/msm8998/mm-video-v4l2/Makefile.am b/msm8998/mm-video-v4l2/Makefile.am
new file mode 100644
index 0000000..2265df9
--- /dev/null
+++ b/msm8998/mm-video-v4l2/Makefile.am
@@ -0,0 +1,5 @@
+# Makefile.am - Automake script for mm-omxvideo
+#
+ACLOCAL_AMFLAGS = -I m4
+
+SUBDIRS = vidc
diff --git a/msmcobalt/mm-video-v4l2/vidc/Android.mk b/msm8998/mm-video-v4l2/vidc/Android.mk
similarity index 100%
rename from msmcobalt/mm-video-v4l2/vidc/Android.mk
rename to msm8998/mm-video-v4l2/vidc/Android.mk
diff --git a/msm8998/mm-video-v4l2/vidc/Makefile.am b/msm8998/mm-video-v4l2/vidc/Makefile.am
new file mode 100644
index 0000000..4621239
--- /dev/null
+++ b/msm8998/mm-video-v4l2/vidc/Makefile.am
@@ -0,0 +1,5 @@
+# Makefile.am - Automake script for mm-omxvideo
+#
+ACLOCAL_AMFLAGS = -I m4
+
+SUBDIRS = venc
diff --git a/msmcobalt/mm-video-v4l2/vidc/common/Android.mk b/msm8998/mm-video-v4l2/vidc/common/Android.mk
similarity index 100%
rename from msmcobalt/mm-video-v4l2/vidc/common/Android.mk
rename to msm8998/mm-video-v4l2/vidc/common/Android.mk
diff --git a/msmcobalt/mm-video-v4l2/vidc/common/inc/extra_data_handler.h b/msm8998/mm-video-v4l2/vidc/common/inc/extra_data_handler.h
similarity index 100%
rename from msmcobalt/mm-video-v4l2/vidc/common/inc/extra_data_handler.h
rename to msm8998/mm-video-v4l2/vidc/common/inc/extra_data_handler.h
diff --git a/msmcobalt/mm-video-v4l2/vidc/common/inc/vidc_color_converter.h b/msm8998/mm-video-v4l2/vidc/common/inc/vidc_color_converter.h
similarity index 100%
rename from msmcobalt/mm-video-v4l2/vidc/common/inc/vidc_color_converter.h
rename to msm8998/mm-video-v4l2/vidc/common/inc/vidc_color_converter.h
diff --git a/msmcobalt/mm-video-v4l2/vidc/common/inc/vidc_debug.h b/msm8998/mm-video-v4l2/vidc/common/inc/vidc_debug.h
similarity index 79%
rename from msmcobalt/mm-video-v4l2/vidc/common/inc/vidc_debug.h
rename to msm8998/mm-video-v4l2/vidc/common/inc/vidc_debug.h
index 3d5bbb5..3423a35 100644
--- a/msmcobalt/mm-video-v4l2/vidc/common/inc/vidc_debug.h
+++ b/msm8998/mm-video-v4l2/vidc/common/inc/vidc_debug.h
@@ -38,7 +38,9 @@
PRIO_ERROR=0x1,
PRIO_INFO=0x1,
PRIO_HIGH=0x2,
- PRIO_LOW=0x4
+ PRIO_LOW=0x4,
+ PRIO_TRACE_HIGH = 0x10,
+ PRIO_TRACE_LOW = 0x20,
};
extern int debug_level;
@@ -110,4 +112,46 @@
}
};
+#ifdef _ANDROID_
+#define ATRACE_TAG ATRACE_TAG_VIDEO
+#include <utils/Trace.h>
+
+class AutoTracer {
+ int mPrio;
+public:
+ AutoTracer(int prio, const char* msg)
+ : mPrio(prio) {
+ if (debug_level & prio) {
+ ATRACE_BEGIN(msg);
+ }
+ }
+ ~AutoTracer() {
+ if (debug_level & mPrio) {
+ ATRACE_END();
+ }
+ }
+};
+
+#define VIDC_TRACE_NAME_LOW(_name) AutoTracer _tracer(PRIO_TRACE_LOW, _name);
+#define VIDC_TRACE_NAME_HIGH(_name) AutoTracer _tracer(PRIO_TRACE_HIGH, _name);
+
+#define VIDC_TRACE_INT_LOW(_name, _int) \
+ if (debug_level & PRIO_TRACE_LOW) { \
+ ATRACE_INT(_name, _int); \
+ }
+
+#define VIDC_TRACE_INT_HIGH(_name, _int) \
+ if (debug_level & PRIO_TRACE_HIGH) { \
+ ATRACE_INT(_name, _int); \
+ }
+
+#else // _ANDROID_
+
+#define VIDC_TRACE_NAME_LOW(_name)
+#define VIDC_TRACE_NAME_HIGH(_name)
+#define VIDC_TRACE_INT_LOW(_name, _int)
+#define VIDC_TRACE_INT_HIGH(_name, _int)
+
+#endif // !_ANDROID_
+
#endif
diff --git a/msmcobalt/mm-video-v4l2/vidc/common/src/extra_data_handler.cpp b/msm8998/mm-video-v4l2/vidc/common/src/extra_data_handler.cpp
similarity index 100%
rename from msmcobalt/mm-video-v4l2/vidc/common/src/extra_data_handler.cpp
rename to msm8998/mm-video-v4l2/vidc/common/src/extra_data_handler.cpp
diff --git a/msmcobalt/mm-video-v4l2/vidc/common/src/vidc_color_converter.cpp b/msm8998/mm-video-v4l2/vidc/common/src/vidc_color_converter.cpp
similarity index 100%
rename from msmcobalt/mm-video-v4l2/vidc/common/src/vidc_color_converter.cpp
rename to msm8998/mm-video-v4l2/vidc/common/src/vidc_color_converter.cpp
diff --git a/msmcobalt/mm-video-v4l2/vidc/vdec/Android.mk b/msm8998/mm-video-v4l2/vidc/vdec/Android.mk
similarity index 98%
rename from msmcobalt/mm-video-v4l2/vidc/vdec/Android.mk
rename to msm8998/mm-video-v4l2/vidc/vdec/Android.mk
index 287bba7..c29710d 100644
--- a/msmcobalt/mm-video-v4l2/vidc/vdec/Android.mk
+++ b/msm8998/mm-video-v4l2/vidc/vdec/Android.mk
@@ -28,7 +28,7 @@
TARGETS_THAT_USE_HEVC_ADSP_HEAP := msm8226 msm8974
TARGETS_THAT_HAVE_VENUS_HEVC := apq8084 msm8994 msm8996
-TARGETS_THAT_SUPPORT_UBWC := msm8996 msm8953 msmcobalt
+TARGETS_THAT_SUPPORT_UBWC := msm8996 msm8953 msm8998
TARGETS_THAT_NEED_SW_VDEC := msm8937
ifeq ($(call is-board-platform-in-list, $(TARGETS_THAT_USE_HEVC_ADSP_HEAP)),true)
diff --git a/msm8998/mm-video-v4l2/vidc/vdec/Makefile.am b/msm8998/mm-video-v4l2/vidc/vdec/Makefile.am
new file mode 100644
index 0000000..b80e6d2
--- /dev/null
+++ b/msm8998/mm-video-v4l2/vidc/vdec/Makefile.am
@@ -0,0 +1,86 @@
+AM_CFLAGS = -Wall
+AM_CFLAGS += -Wundef
+AM_CFLAGS += -Wstrict-prototypes
+AM_CFLAGS += -Wno-trigraphs
+AM_CFLAGS += -g -O3
+
+AM_CPPFLAGS := -D__alignx\(x\)=__attribute__\(\(__aligned__\(x\)\)\)
+AM_CPPFLAGS += -D__align=__alignx
+AM_CPPFLAGS += -Dinline=__inline
+AM_CPPFLAGS += -DIMAGE_APPS_PROC
+AM_CPPFLAGS += -DCDECL
+AM_CPPFLAGS += -DT_ARM
+AM_CPPFLAGS += -DNO_ARM_CLZ
+AM_CPPFLAGS += -UENABLE_DEBUG_LOW
+AM_CPPFLAGS += -DENABLE_DEBUG_HIGH
+AM_CPPFLAGS += -DENABLE_DEBUG_ERROR
+AM_CPPFLAGS += -UINPUT_BUFFER_LOG
+AM_CPPFLAGS += -UOUTPUT_BUFFER_LOG
+AM_CPPFLAGS += -Wno-parentheses
+AM_CPPFLAGS += -D_ANDROID_ICS_
+AM_CPPFLAGS += -D_MSM8974_
+AM_CPPFLAGS += -DPROCESS_EXTRADATA_IN_OUTPUT_PORT
+AM_CPPFLAGS += -DMAX_RES_1080P
+AM_CPPFLAGS += -DMAX_RES_1080P_EBI
+
+if TARGET_MSM8960
+AM_CPPFLAGS += -DMAX_RES_1080P
+AM_CPPFLAGS += -DMAX_RES_1080P_EBI
+AM_CPPFLAGS += -DPROCESS_EXTRADATA_IN_OUTPUT_PORT
+AM_CPPFLAGS += -DUSE_ION
+endif
+
+if TARGET_B_FAMILY
+AM_CPPFLAGS += -DMAX_RES_1080P
+AM_CPPFLAGS += -DMAX_RES_1080P_EBI
+AM_CPPFLAGS += -DPROCESS_EXTRADATA_IN_OUTPUT_PORT
+AM_CPPFLAGS += -DUSE_ION
+AM_CPPFLAGS += -D_MSM8974_
+#AM_CPPFLAGS += -D_HEVC_USE_ADSP_HEAP_
+endif
+
+AM_CPPFLAGS += -I./inc
+AM_CPPFLAGS += -I../common/inc
+AM_CPPFLAGS += -I../../../libc2dcolorconvert
+AM_CPPFLAGS += -I../../../mm-core/inc
+AM_CPPFLAGS += -I../../../mm-core/src/common
+
+c_sources = src/frameparser.cpp
+c_sources += src/h264_utils.cpp
+c_sources += src/ts_parser.cpp
+c_sources += src/mp4_utils.cpp
+
+if TARGET_MSM8960
+c_sources += src/omx_vdec.cpp
+endif
+
+if TARGET_B_FAMILY
+c_sources += src/omx_vdec_msm8974.cpp
+endif
+
+c_sources += ../common/src/extra_data_handler.cpp
+c_sources += ../common/src/vidc_color_converter.cpp
+
+lib_LTLIBRARIES = libOmxVdec.la
+libOmxVdec_la_SOURCES = $(c_sources)
+libOmxVdec_la_CFLAGS = $(AM_CFLAGS) $(AM_CPPFLAGS) -fPIC
+libOmxVdec_la_CFLAGS += ../libc2d2colorconvert/libc2dcolorconvert.la
+libOmxVdec_la_LDFLAGS = -shared -version-info $(OMXVIDEO_LIBRARY_VERSION)
+
+bin_PROGRAMS = mm-vdec-omx-test
+
+mm_vdec_omx_test_CPPFLAGS = -I./inc
+mm_vdec_omx_test_CPPFLAGS += -I../../../mm-core/inc
+mm_vdec_omx_test_CPPFLAGS += -I../common/inc
+mm_vdec_omx_test_CPPFLAGS += -DUSE_ION
+mm_vdec_omx_test_CPPFLAGS += -D_NOFBMEM_
+
+if TARGET_B_FAMILY
+mm_vdec_omx_test_CPPFLAGS += -D_MSM8974_
+endif
+
+mm_vdec_omx_test_SOURCES := src/queue.c
+mm_vdec_omx_test_SOURCES += test/omx_vdec_test.cpp
+mm_vdec_omx_test_LDADD = -ldl -lpthread -lOmxCore
+mm_vdec_omx_test_LDADD += ./libOmxVdec.la
+
diff --git a/msmcobalt/mm-video-v4l2/vidc/vdec/inc/Map.h b/msm8998/mm-video-v4l2/vidc/vdec/inc/Map.h
similarity index 100%
rename from msmcobalt/mm-video-v4l2/vidc/vdec/inc/Map.h
rename to msm8998/mm-video-v4l2/vidc/vdec/inc/Map.h
diff --git a/msmcobalt/mm-video-v4l2/vidc/vdec/inc/decoder_driver_test.h b/msm8998/mm-video-v4l2/vidc/vdec/inc/decoder_driver_test.h
similarity index 100%
rename from msmcobalt/mm-video-v4l2/vidc/vdec/inc/decoder_driver_test.h
rename to msm8998/mm-video-v4l2/vidc/vdec/inc/decoder_driver_test.h
diff --git a/msmcobalt/mm-video-v4l2/vidc/vdec/inc/frameparser.h b/msm8998/mm-video-v4l2/vidc/vdec/inc/frameparser.h
similarity index 100%
rename from msmcobalt/mm-video-v4l2/vidc/vdec/inc/frameparser.h
rename to msm8998/mm-video-v4l2/vidc/vdec/inc/frameparser.h
diff --git a/msmcobalt/mm-video-v4l2/vidc/vdec/inc/h264_utils.h b/msm8998/mm-video-v4l2/vidc/vdec/inc/h264_utils.h
similarity index 100%
rename from msmcobalt/mm-video-v4l2/vidc/vdec/inc/h264_utils.h
rename to msm8998/mm-video-v4l2/vidc/vdec/inc/h264_utils.h
diff --git a/msmcobalt/mm-video-v4l2/vidc/vdec/inc/hevc_utils.h b/msm8998/mm-video-v4l2/vidc/vdec/inc/hevc_utils.h
similarity index 100%
rename from msmcobalt/mm-video-v4l2/vidc/vdec/inc/hevc_utils.h
rename to msm8998/mm-video-v4l2/vidc/vdec/inc/hevc_utils.h
diff --git a/msmcobalt/mm-video-v4l2/vidc/vdec/inc/message_queue.h b/msm8998/mm-video-v4l2/vidc/vdec/inc/message_queue.h
similarity index 100%
rename from msmcobalt/mm-video-v4l2/vidc/vdec/inc/message_queue.h
rename to msm8998/mm-video-v4l2/vidc/vdec/inc/message_queue.h
diff --git a/msmcobalt/mm-video-v4l2/vidc/vdec/inc/mp4_utils.h b/msm8998/mm-video-v4l2/vidc/vdec/inc/mp4_utils.h
similarity index 100%
rename from msmcobalt/mm-video-v4l2/vidc/vdec/inc/mp4_utils.h
rename to msm8998/mm-video-v4l2/vidc/vdec/inc/mp4_utils.h
diff --git a/msmcobalt/mm-video-v4l2/vidc/vdec/inc/omx_swvdec.h b/msm8998/mm-video-v4l2/vidc/vdec/inc/omx_swvdec.h
similarity index 99%
rename from msmcobalt/mm-video-v4l2/vidc/vdec/inc/omx_swvdec.h
rename to msm8998/mm-video-v4l2/vidc/vdec/inc/omx_swvdec.h
index aaaeae7..3037d8c 100644
--- a/msmcobalt/mm-video-v4l2/vidc/vdec/inc/omx_swvdec.h
+++ b/msm8998/mm-video-v4l2/vidc/vdec/inc/omx_swvdec.h
@@ -56,7 +56,7 @@
using namespace android;
/// OMX SwVdec version date
-#define OMX_SWVDEC_VERSION_DATE "2016-05-05T16:09:40+0530"
+#define OMX_SWVDEC_VERSION_DATE "2016-10-24T17:37:33+0530"
#define OMX_SPEC_VERSION 0x00000101 ///< OMX specification version
diff --git a/msmcobalt/mm-video-v4l2/vidc/vdec/inc/omx_swvdec_utils.h b/msm8998/mm-video-v4l2/vidc/vdec/inc/omx_swvdec_utils.h
similarity index 100%
rename from msmcobalt/mm-video-v4l2/vidc/vdec/inc/omx_swvdec_utils.h
rename to msm8998/mm-video-v4l2/vidc/vdec/inc/omx_swvdec_utils.h
diff --git a/msmcobalt/mm-video-v4l2/vidc/vdec/inc/omx_vdec.h b/msm8998/mm-video-v4l2/vidc/vdec/inc/omx_vdec.h
similarity index 97%
rename from msmcobalt/mm-video-v4l2/vidc/vdec/inc/omx_vdec.h
rename to msm8998/mm-video-v4l2/vidc/vdec/inc/omx_vdec.h
index 2f44cd8..05d6bc7 100644
--- a/msmcobalt/mm-video-v4l2/vidc/vdec/inc/omx_vdec.h
+++ b/msm8998/mm-video-v4l2/vidc/vdec/inc/omx_vdec.h
@@ -204,6 +204,7 @@
#define OMX_VPX_COLORSPACE_INFO_EXTRADATA 0x20000000
#define OMX_VC1_SEQDISP_INFO_EXTRADATA 0x40000000
#define OMX_DISPLAY_INFO_EXTRADATA 0x80000000
+#define OMX_HDR_COLOR_INFO_EXTRADATA 0x100000000
#define DRIVER_EXTRADATA_MASK 0x0000FFFF
#define OMX_INTERLACE_EXTRADATA_SIZE ((sizeof(OMX_OTHER_EXTRADATATYPE) +\
@@ -474,7 +475,7 @@
void buf_ref_remove();
OMX_BUFFERHEADERTYPE* get_omx_output_buffer_header(int index);
OMX_ERRORTYPE set_dpb(bool is_split_mode, int dpb_color_format);
- OMX_ERRORTYPE decide_dpb_buffer_mode(bool force_split_mode);
+ OMX_ERRORTYPE decide_dpb_buffer_mode(bool split_opb_dpb_with_same_color_fmt);
void request_perf_level(enum vidc_perf_level perf_level);
int dpb_bit_depth;
bool async_thread_force_stop;
@@ -482,6 +483,20 @@
struct extradata_info m_extradata_info;
int m_progressive;
+ enum dither_type {
+ DITHER_DISABLE = 0,
+ DITHER_COLORSPACE_EXCEPTBT2020,
+ DITHER_ALL_COLORSPACE
+ };
+ enum dither_type m_dither_config;
+
+ enum color_space_type {
+ BT2020 = 0,
+ EXCEPT_BT2020,
+ UNKNOWN
+ };
+ enum color_space_type m_color_space;
+
private:
// Bit Positions
enum flags_bit_positions {
@@ -682,14 +697,17 @@
void convert_color_space_info(OMX_U32 primaries, OMX_U32 range,
OMX_U32 transfer, OMX_U32 matrix, ColorSpace_t *color_space,
ColorAspects *aspects);
- void handle_color_space_info(void *data, unsigned int buf_index);
+ bool handle_color_space_info(void *data, unsigned int buf_index);
void set_colorspace_in_handle(ColorSpace_t color, unsigned int buf_index);
void print_debug_color_aspects(ColorAspects *aspects, const char *prefix);
+ void print_debug_hdr_color_info(HDRStaticInfo *hdr_info, const char *prefix);
+ bool handle_content_light_level_info(void* data);
+ bool handle_mastering_display_color_info(void* data);
void print_debug_extradata(OMX_OTHER_EXTRADATATYPE *extra);
#ifdef _MSM8974_
void append_interlace_extradata(OMX_OTHER_EXTRADATATYPE *extra,
OMX_U32 interlaced_format_type);
- OMX_ERRORTYPE enable_extradata(OMX_U32 requested_extradata, bool is_internal,
+ OMX_ERRORTYPE enable_extradata(OMX_U64 requested_extradata, bool is_internal,
bool enable = true);
void append_frame_info_extradata(OMX_OTHER_EXTRADATATYPE *extra,
OMX_U32 num_conceal_mb,
@@ -923,6 +941,9 @@
OMX_S64 prev_ts_actual;
bool rst_prev_ts;
OMX_U32 frm_int;
+ OMX_U32 m_fps_received;
+ float m_fps_prev;
+ bool m_drc_enable;
struct vdec_allocatorproperty op_buf_rcnfg;
bool in_reconfig;
@@ -1008,6 +1029,12 @@
DescribeColorAspectsParams m_client_color_space;
DescribeColorAspectsParams m_internal_color_space;
+ // HDRStaticInfo defined in HardwareAPI.h
+ DescribeHDRStaticInfoParams m_client_hdr_info;
+ DescribeHDRStaticInfoParams m_internal_hdr_info;
+ bool m_change_client_hdr_info;
+ pthread_mutex_t m_hdr_info_client_lock;
+
OMX_U32 operating_frame_rate;
bool high_fps;
@@ -1173,8 +1200,8 @@
OMX_COLOR_FORMATTYPE formatsDefault[] = {
[0] = (OMX_COLOR_FORMATTYPE)QOMX_COLOR_FORMATYUV420PackedSemiPlanar32mCompressed,
[1] = (OMX_COLOR_FORMATTYPE)QOMX_COLOR_FORMATYUV420PackedSemiPlanar32m,
- [2] = OMX_COLOR_FormatYUV420Planar,
- [3] = OMX_COLOR_FormatYUV420SemiPlanar,
+ [2] = OMX_COLOR_FormatYUV420SemiPlanar,
+ [3] = OMX_COLOR_FormatYUV420Planar,
[4] = (OMX_COLOR_FORMATTYPE)QOMX_COLOR_FORMATYUV420PackedSemiPlanar32mMultiView,
};
format = (index < sizeof(formatsDefault) / sizeof(OMX_COLOR_FORMATTYPE)) ?
@@ -1182,8 +1209,8 @@
} else {
OMX_COLOR_FORMATTYPE formatsDefault[] = {
[0] = (OMX_COLOR_FORMATTYPE)QOMX_COLOR_FORMATYUV420PackedSemiPlanar32m,
- [1] = OMX_COLOR_FormatYUV420Planar,
- [2] = OMX_COLOR_FormatYUV420SemiPlanar,
+ [1] = OMX_COLOR_FormatYUV420SemiPlanar,
+ [2] = OMX_COLOR_FormatYUV420Planar,
[3] = (OMX_COLOR_FORMATTYPE)QOMX_COLOR_FORMATYUV420PackedSemiPlanar32mMultiView,
};
format = (index < sizeof(formatsDefault) / sizeof(OMX_COLOR_FORMATTYPE)) ?
diff --git a/msmcobalt/mm-video-v4l2/vidc/vdec/inc/omx_vdec_hevc.h b/msm8998/mm-video-v4l2/vidc/vdec/inc/omx_vdec_hevc.h
similarity index 100%
rename from msmcobalt/mm-video-v4l2/vidc/vdec/inc/omx_vdec_hevc.h
rename to msm8998/mm-video-v4l2/vidc/vdec/inc/omx_vdec_hevc.h
diff --git a/msmcobalt/mm-video-v4l2/vidc/vdec/inc/omx_vdec_hevc_swvdec.h b/msm8998/mm-video-v4l2/vidc/vdec/inc/omx_vdec_hevc_swvdec.h
similarity index 100%
rename from msmcobalt/mm-video-v4l2/vidc/vdec/inc/omx_vdec_hevc_swvdec.h
rename to msm8998/mm-video-v4l2/vidc/vdec/inc/omx_vdec_hevc_swvdec.h
diff --git a/msmcobalt/mm-video-v4l2/vidc/vdec/inc/power_module.h b/msm8998/mm-video-v4l2/vidc/vdec/inc/power_module.h
similarity index 100%
rename from msmcobalt/mm-video-v4l2/vidc/vdec/inc/power_module.h
rename to msm8998/mm-video-v4l2/vidc/vdec/inc/power_module.h
diff --git a/msmcobalt/mm-video-v4l2/vidc/vdec/inc/qtypes.h b/msm8998/mm-video-v4l2/vidc/vdec/inc/qtypes.h
similarity index 100%
rename from msmcobalt/mm-video-v4l2/vidc/vdec/inc/qtypes.h
rename to msm8998/mm-video-v4l2/vidc/vdec/inc/qtypes.h
diff --git a/msmcobalt/mm-video-v4l2/vidc/vdec/inc/queue.h b/msm8998/mm-video-v4l2/vidc/vdec/inc/queue.h
similarity index 100%
rename from msmcobalt/mm-video-v4l2/vidc/vdec/inc/queue.h
rename to msm8998/mm-video-v4l2/vidc/vdec/inc/queue.h
diff --git a/msmcobalt/mm-video-v4l2/vidc/vdec/inc/ts_parser.h b/msm8998/mm-video-v4l2/vidc/vdec/inc/ts_parser.h
similarity index 100%
rename from msmcobalt/mm-video-v4l2/vidc/vdec/inc/ts_parser.h
rename to msm8998/mm-video-v4l2/vidc/vdec/inc/ts_parser.h
diff --git a/msmcobalt/mm-video-v4l2/vidc/vdec/src/frameparser.cpp b/msm8998/mm-video-v4l2/vidc/vdec/src/frameparser.cpp
similarity index 100%
rename from msmcobalt/mm-video-v4l2/vidc/vdec/src/frameparser.cpp
rename to msm8998/mm-video-v4l2/vidc/vdec/src/frameparser.cpp
diff --git a/msmcobalt/mm-video-v4l2/vidc/vdec/src/h264_utils.cpp b/msm8998/mm-video-v4l2/vidc/vdec/src/h264_utils.cpp
similarity index 100%
rename from msmcobalt/mm-video-v4l2/vidc/vdec/src/h264_utils.cpp
rename to msm8998/mm-video-v4l2/vidc/vdec/src/h264_utils.cpp
diff --git a/msmcobalt/mm-video-v4l2/vidc/vdec/src/hevc_utils.cpp b/msm8998/mm-video-v4l2/vidc/vdec/src/hevc_utils.cpp
similarity index 100%
rename from msmcobalt/mm-video-v4l2/vidc/vdec/src/hevc_utils.cpp
rename to msm8998/mm-video-v4l2/vidc/vdec/src/hevc_utils.cpp
diff --git a/msmcobalt/mm-video-v4l2/vidc/vdec/src/message_queue.c b/msm8998/mm-video-v4l2/vidc/vdec/src/message_queue.c
similarity index 100%
rename from msmcobalt/mm-video-v4l2/vidc/vdec/src/message_queue.c
rename to msm8998/mm-video-v4l2/vidc/vdec/src/message_queue.c
diff --git a/msmcobalt/mm-video-v4l2/vidc/vdec/src/mp4_utils.cpp b/msm8998/mm-video-v4l2/vidc/vdec/src/mp4_utils.cpp
similarity index 100%
rename from msmcobalt/mm-video-v4l2/vidc/vdec/src/mp4_utils.cpp
rename to msm8998/mm-video-v4l2/vidc/vdec/src/mp4_utils.cpp
diff --git a/msmcobalt/mm-video-v4l2/vidc/vdec/src/omx_swvdec.cpp b/msm8998/mm-video-v4l2/vidc/vdec/src/omx_swvdec.cpp
similarity index 99%
rename from msmcobalt/mm-video-v4l2/vidc/vdec/src/omx_swvdec.cpp
rename to msm8998/mm-video-v4l2/vidc/vdec/src/omx_swvdec.cpp
index 2698d52..eda46e4 100644
--- a/msmcobalt/mm-video-v4l2/vidc/vdec/src/omx_swvdec.cpp
+++ b/msm8998/mm-video-v4l2/vidc/vdec/src/omx_swvdec.cpp
@@ -3213,6 +3213,7 @@
case OMX_COLOR_FormatYUV420SemiPlanar:
{
// do nothing; standard OMX color formats should not be described
+ retval = OMX_ErrorUnsupportedSetting;
break;
}
diff --git a/msmcobalt/mm-video-v4l2/vidc/vdec/src/omx_swvdec_utils.cpp b/msm8998/mm-video-v4l2/vidc/vdec/src/omx_swvdec_utils.cpp
similarity index 91%
rename from msmcobalt/mm-video-v4l2/vidc/vdec/src/omx_swvdec_utils.cpp
rename to msm8998/mm-video-v4l2/vidc/vdec/src/omx_swvdec_utils.cpp
index 56c3f30..d86d395 100644
--- a/msmcobalt/mm-video-v4l2/vidc/vdec/src/omx_swvdec_utils.cpp
+++ b/msm8998/mm-video-v4l2/vidc/vdec/src/omx_swvdec_utils.cpp
@@ -41,6 +41,7 @@
#include <assert.h>
#include <pthread.h>
#include <time.h>
+#include <errno.h>
#include <cutils/properties.h>
@@ -213,54 +214,50 @@
if (m_dump_ip && property_get("omx_swvdec.filename.ip",
property_value,
- filename_ip))
+ filename_ip) && (strlen(property_value) > 0 ) )
{
+ size_t m_filename_ip_size = (strlen(property_value) + 1)*sizeof(char);
m_filename_ip =
- (char *) malloc((strlen(property_value) + 1) * sizeof(char));
-
+ (char *) malloc(m_filename_ip_size);
if (m_filename_ip == NULL)
{
OMX_SWVDEC_LOG_ERROR("failed to allocate %zu bytes for "
"input filename string",
- (strlen(property_value) + 1) * sizeof(char));
+ m_filename_ip_size);
}
else
{
- strlcpy(m_filename_ip, property_value, strlen(m_filename_ip));
-
+ strlcpy(m_filename_ip, property_value,m_filename_ip_size);
OMX_SWVDEC_LOG_HIGH("omx_swvdec.filename.ip: %s", m_filename_ip);
-
if ((m_file_ip = fopen(m_filename_ip, "wb")) == NULL)
{
- OMX_SWVDEC_LOG_ERROR("cannot open input file '%s'",
- m_filename_ip);
+ OMX_SWVDEC_LOG_ERROR("cannot open input file '%s' logging erro is : %d",
+ m_filename_ip,errno);
}
}
}
if (m_dump_op && property_get("omx_swvdec.filename.op",
property_value,
- filename_op))
+ filename_op) && (strlen(property_value) > 0 ))
{
+ size_t m_filename_op_size = (strlen(property_value) + 1)*sizeof(char);
m_filename_op =
- (char *) malloc((strlen(property_value) + 1) * sizeof(char));
-
+ (char *) malloc(m_filename_op_size);
if (m_filename_op == NULL)
{
OMX_SWVDEC_LOG_ERROR("failed to allocate %zu bytes for "
"output filename string",
- (strlen(property_value) + 1) * sizeof(char));
+ m_filename_op_size);
}
else
{
- strlcpy(m_filename_op, property_value, strlen(m_filename_op));
-
+ strlcpy(m_filename_op, property_value,m_filename_op_size);
OMX_SWVDEC_LOG_HIGH("omx_swvdec.filename.op: %s", m_filename_op);
-
if ((m_file_op = fopen(m_filename_op, "wb")) == NULL)
{
- OMX_SWVDEC_LOG_ERROR("cannot open output file '%s'",
- m_filename_op);
+ OMX_SWVDEC_LOG_ERROR("cannot open output file '%s' logging error : %d",
+ m_filename_op,errno);
}
}
}
diff --git a/msmcobalt/mm-video-v4l2/vidc/vdec/src/omx_vdec_hevc.cpp b/msm8998/mm-video-v4l2/vidc/vdec/src/omx_vdec_hevc.cpp
similarity index 100%
rename from msmcobalt/mm-video-v4l2/vidc/vdec/src/omx_vdec_hevc.cpp
rename to msm8998/mm-video-v4l2/vidc/vdec/src/omx_vdec_hevc.cpp
diff --git a/msmcobalt/mm-video-v4l2/vidc/vdec/src/omx_vdec_hevc_swvdec.cpp b/msm8998/mm-video-v4l2/vidc/vdec/src/omx_vdec_hevc_swvdec.cpp
similarity index 100%
rename from msmcobalt/mm-video-v4l2/vidc/vdec/src/omx_vdec_hevc_swvdec.cpp
rename to msm8998/mm-video-v4l2/vidc/vdec/src/omx_vdec_hevc_swvdec.cpp
diff --git a/msmcobalt/mm-video-v4l2/vidc/vdec/src/omx_vdec_v4l2.cpp b/msm8998/mm-video-v4l2/vidc/vdec/src/omx_vdec_v4l2.cpp
similarity index 95%
rename from msmcobalt/mm-video-v4l2/vidc/vdec/src/omx_vdec_v4l2.cpp
rename to msm8998/mm-video-v4l2/vidc/vdec/src/omx_vdec_v4l2.cpp
index a2772bb..99b0c6e 100644
--- a/msmcobalt/mm-video-v4l2/vidc/vdec/src/omx_vdec_v4l2.cpp
+++ b/msm8998/mm-video-v4l2/vidc/vdec/src/omx_vdec_v4l2.cpp
@@ -124,7 +124,8 @@
#define EXTRADATA_IDX(__num_planes) ((__num_planes) ? (__num_planes) - 1 : 0)
#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 | OMX_DISPLAY_INFO_EXTRADATA)
+#define DEFAULT_EXTRADATA (OMX_INTERLACE_EXTRADATA | OMX_FRAMEPACK_EXTRADATA | OMX_OUTPUTCROP_EXTRADATA \
+ | OMX_DISPLAY_INFO_EXTRADATA | OMX_HDR_COLOR_INFO_EXTRADATA)
#define DEFAULT_CONCEAL_COLOR "32784" //0x8010, black by default
#ifndef ION_FLAG_CP_BITSTREAM
@@ -147,6 +148,8 @@
#define SECURE_FLAGS_OUTPUT_BUFFER ION_SECURE
#endif
+#define LUMINANCE_DIV_FACTOR 10000.0
+
static OMX_U32 maxSmoothStreamingWidth = 1920;
static OMX_U32 maxSmoothStreamingHeight = 1088;
@@ -236,6 +239,14 @@
omx->m_progressive = ptr[4];
DEBUG_PRINT_HIGH("VIDC Port Reconfig PicStruct change - %d", ptr[4]);
}
+ if(ptr[2] & V4L2_EVENT_COLOUR_SPACE_FLAG) {
+ if (ptr[5] == MSM_VIDC_BT2020) {
+ omx->m_color_space = omx_vdec::BT2020;
+ } else {
+ omx->m_color_space = omx_vdec::EXCEPT_BT2020;
+ }
+ DEBUG_PRINT_HIGH("VIDC Port Reconfig ColorSpace change - %d", omx->m_color_space);
+ }
if (omx->async_message_process(input,&vdec_msg) < 0) {
DEBUG_PRINT_HIGH("async_message_thread Exited");
break;
@@ -553,6 +564,19 @@
}
#endif
#endif // _ANDROID_
+
+bool is_platform_tp10capture_supported()
+{
+ char platform_name[PROPERTY_VALUE_MAX] = {0};
+ property_get("ro.board.platform", platform_name, "0");
+ if (!strncmp(platform_name, "msm8998", 9)) {
+ DEBUG_PRINT_HIGH("TP10 on capture port is supported");
+ return true;
+ }
+ DEBUG_PRINT_HIGH("TP10 on capture port is not supported");
+ return false;
+}
+
/* ======================================================================
FUNCTION
omx_vdec::omx_vdec
@@ -621,6 +645,9 @@
prev_ts_actual(LLONG_MAX),
rst_prev_ts(true),
frm_int(0),
+ m_fps_received(0),
+ m_fps_prev(0),
+ m_drc_enable(0),
in_reconfig(false),
m_display_id(NULL),
client_extradata(0),
@@ -640,7 +667,7 @@
m_queued_codec_config_count(0),
current_perf_level(V4L2_CID_MPEG_VIDC_PERF_LEVEL_NOMINAL),
secure_scaling_to_non_secure_opb(false),
- m_force_compressed_for_dpb(false),
+ m_force_compressed_for_dpb(true),
m_is_display_session(false)
{
m_pipe_in = -1;
@@ -654,7 +681,7 @@
#ifdef _ANDROID_
char property_value[PROPERTY_VALUE_MAX] = {0};
property_get("vidc.debug.level", property_value, "1");
- debug_level = atoi(property_value);
+ debug_level = strtoul(property_value, NULL, 16);
property_value[0] = '\0';
DEBUG_PRINT_HIGH("In OMX vdec Constructor");
@@ -664,8 +691,8 @@
if (perf_flag) {
DEBUG_PRINT_HIGH("vidc.dec.debug.perf is %d", perf_flag);
dec_time.start();
- proc_frms = latency = 0;
}
+ proc_frms = latency = 0;
prev_n_filled_len = 0;
property_value[0] = '\0';
property_get("vidc.dec.debug.ts", property_value, "0");
@@ -719,6 +746,13 @@
m_disable_dynamic_buf_mode = atoi(property_value);
DEBUG_PRINT_HIGH("vidc.dec.debug.dyn.disabled value is %d",m_disable_dynamic_buf_mode);
+ property_value[0] = '\0';
+ property_get("vidc.dec.drc.enable", property_value, "0");
+ if (atoi(property_value)) {
+ m_drc_enable = true;
+ DEBUG_PRINT_HIGH("DRC enabled");
+ }
+
#ifdef _UBWC_
property_value[0] = '\0';
property_get("debug.gralloc.gfx_ubwc_disable", property_value, "0");
@@ -737,6 +771,8 @@
memset(&m_custom_buffersize, 0, sizeof(m_custom_buffersize));
memset(&m_client_color_space, 0, sizeof(DescribeColorAspectsParams));
memset(&m_internal_color_space, 0, sizeof(DescribeColorAspectsParams));
+ memset(&m_client_hdr_info, 0, sizeof(DescribeHDRStaticInfoParams));
+ memset(&m_internal_hdr_info, 0, sizeof(DescribeHDRStaticInfoParams));
m_demux_entries = 0;
msg_thread_id = 0;
async_thread_id = 0;
@@ -797,6 +833,23 @@
m_internal_color_space.sAspects.mMatrixCoeffs = ColorAspects::MatrixUnspecified;
m_internal_color_space.sAspects.mTransfer = ColorAspects::TransferUnspecified;
m_internal_color_space.nSize = sizeof(DescribeColorAspectsParams);
+
+ m_client_hdr_info.nPortIndex = (OMX_U32)OMX_CORE_INPUT_PORT_INDEX;
+ m_internal_hdr_info.nPortIndex = (OMX_U32)OMX_CORE_OUTPUT_PORT_INDEX;
+ m_change_client_hdr_info = false;
+ pthread_mutex_init(&m_hdr_info_client_lock, NULL);
+
+ char dither_value[PROPERTY_VALUE_MAX] = {0};
+ property_get("vidc.dec.dither", dither_value, "0");
+ if ((atoi(dither_value) > DITHER_ALL_COLORSPACE) ||
+ (atoi(dither_value) < DITHER_DISABLE)) {
+ m_dither_config = DITHER_ALL_COLORSPACE;
+ } else {
+ m_dither_config = is_platform_tp10capture_supported() ? (dither_type)atoi(dither_value) : DITHER_ALL_COLORSPACE;
+ }
+
+ DEBUG_PRINT_HIGH("Dither config is %d", m_dither_config);
+ m_color_space = EXCEPT_BT2020;
}
static const int event_type[] = {
@@ -911,6 +964,7 @@
pthread_mutex_destroy(&c_lock);
pthread_mutex_destroy(&buf_lock);
sem_destroy(&m_cmd_lock);
+ pthread_mutex_destroy(&m_hdr_info_client_lock);
if (perf_flag) {
DEBUG_PRINT_HIGH("--> TOTAL PROCESSING TIME");
dec_time.end();
@@ -951,6 +1005,7 @@
"unknown",
capture_capability == V4L2_PIX_FMT_NV12 ? "nv12":
capture_capability == V4L2_PIX_FMT_NV12_UBWC ? "nv12_ubwc":
+ capture_capability == V4L2_PIX_FMT_NV12_TP10_UBWC ? "nv12_10bit_ubwc":
"unknown");
ctrl[0].id = V4L2_CID_MPEG_VIDC_VIDEO_STREAM_OUTPUT_MODE;
@@ -976,11 +1031,51 @@
}
-OMX_ERRORTYPE omx_vdec::decide_dpb_buffer_mode(bool force_split_mode)
+OMX_ERRORTYPE omx_vdec::decide_dpb_buffer_mode(bool split_opb_dpb_with_same_color_fmt)
{
OMX_ERRORTYPE eRet = OMX_ErrorNone;
struct v4l2_format fmt;
int rc = 0;
+ bool cpu_access = (capture_capability != V4L2_PIX_FMT_NV12_UBWC) &&
+ capture_capability != V4L2_PIX_FMT_NV12_TP10_UBWC;
+ bool tp10_enable = !cpu_access &&
+ dpb_bit_depth == MSM_VIDC_BIT_DEPTH_10;
+ bool dither_enable = true;
+
+ switch (m_dither_config) {
+ case DITHER_DISABLE:
+ dither_enable = false;
+ break;
+ case DITHER_COLORSPACE_EXCEPTBT2020:
+ dither_enable = (m_color_space == EXCEPT_BT2020);
+ break;
+ case DITHER_ALL_COLORSPACE:
+ dither_enable = true;
+ break;
+ default:
+ DEBUG_PRINT_ERROR("Unsupported dither configuration:%d", m_dither_config);
+ }
+
+ if (tp10_enable && !dither_enable) {
+ drv_ctx.output_format = VDEC_YUV_FORMAT_NV12_TP10_UBWC;
+ capture_capability = V4L2_PIX_FMT_NV12_TP10_UBWC;
+
+ memset(&fmt, 0x0, sizeof(struct v4l2_format));
+ fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE;
+ rc = ioctl(drv_ctx.video_driver_fd, VIDIOC_G_FMT, &fmt);
+ if (rc) {
+ DEBUG_PRINT_ERROR("%s: Failed get format on capture mplane", __func__);
+ return OMX_ErrorUnsupportedSetting;
+ }
+ fmt.fmt.pix_mp.pixelformat = capture_capability;
+ rc = ioctl(drv_ctx.video_driver_fd, VIDIOC_S_FMT, &fmt);
+ if (rc) {
+ DEBUG_PRINT_ERROR("%s: Failed set format on capture mplane", __func__);
+ return OMX_ErrorUnsupportedSetting;
+ }
+
+ }
+
if (!BITMASK_PRESENT(&m_flags ,OMX_COMPONENT_IDLE_PENDING) &&
!BITMASK_PRESENT(&m_flags, OMX_COMPONENT_OUTPUT_ENABLE_PENDING)) {
@@ -988,12 +1083,9 @@
return eRet;
}
- bool cpu_access = capture_capability != V4L2_PIX_FMT_NV12_UBWC;
if (cpu_access) {
if (dpb_bit_depth == MSM_VIDC_BIT_DEPTH_8) {
- if ((m_force_compressed_for_dpb || (m_progressive && (eCompressionFormat != OMX_VIDEO_CodingVP9))) &&
- !force_split_mode && !m_disable_split_mode && !drv_ctx.idr_only_decoding) {
/* Disabled split mode for VP9. In split mode the DPB buffers are part of the internal
* scratch buffers and the driver does not does the reference buffer management for
* scratch buffers. In case of VP9 with spatial scalability, when a sequence changed
@@ -1005,10 +1097,23 @@
* and hence the DPB buffers get unmapped. For other codecs it does not matter
* as with the new SPS/PPS, the DPB is flushed.
*/
+ bool is_not_vp9 = eCompressionFormat != OMX_VIDEO_CodingVP9;
+ bool eligible_for_split_dpb_ubwc =
+ m_progressive == MSM_VIDC_PIC_STRUCT_PROGRESSIVE && //@ Due to Venus limitation for Interlaced, Split mode enabled only for Progressive.
+ is_not_vp9 && //@ Split mode disabled for VP9.
+ !drv_ctx.idr_only_decoding && //@ Split mode disabled for Thumbnail usecase.
+ !m_disable_split_mode; //@ Set prop to disable split mode
+
+ //Since opb is linear, dpb should also be linear.
+ if (split_opb_dpb_with_same_color_fmt) {
+ eligible_for_split_dpb_ubwc = false;
+ }
+
+ if (eligible_for_split_dpb_ubwc) {
//split DPB-OPB
//DPB -> UBWC , OPB -> Linear
eRet = set_dpb(true, V4L2_MPEG_VIDC_VIDEO_DPB_COLOR_FMT_UBWC);
- } else if (force_split_mode) {
+ } else if (split_opb_dpb_with_same_color_fmt) {
//DPB -> Linear, OPB -> Linear
eRet = set_dpb(true, V4L2_MPEG_VIDC_VIDEO_DPB_COLOR_FMT_NONE);
} else {
@@ -1022,7 +1127,7 @@
}
} else { //no cpu access
if (dpb_bit_depth == MSM_VIDC_BIT_DEPTH_8) {
- if (force_split_mode) {
+ if (split_opb_dpb_with_same_color_fmt) {
//split DPB-OPB
//DPB -> UBWC, OPB -> UBWC
eRet = set_dpb(true, V4L2_MPEG_VIDC_VIDEO_DPB_COLOR_FMT_UBWC);
@@ -1031,27 +1136,22 @@
eRet = set_dpb(false, V4L2_MPEG_VIDC_VIDEO_DPB_COLOR_FMT_NONE);
}
} else if (dpb_bit_depth == MSM_VIDC_BIT_DEPTH_10) {
- //split DPB-OPB
- //DPB -> UBWC, OPB -> UBWC
- eRet = set_dpb(true, V4L2_MPEG_VIDC_VIDEO_DPB_COLOR_FMT_TP10_UBWC);
+ if (dither_enable) {
+ //split DPB-OPB
+ //DPB -> TP10UBWC, OPB -> UBWC
+ eRet = set_dpb(true, V4L2_MPEG_VIDC_VIDEO_DPB_COLOR_FMT_TP10_UBWC);
+ } else {
+ //combined DPB-OPB
+ //DPB -> TP10UBWC, OPB -> TP10UBWC
+ eRet = set_dpb(false, V4L2_MPEG_VIDC_VIDEO_DPB_COLOR_FMT_TP10_UBWC);
+ }
}
}
if (eRet) {
DEBUG_PRINT_HIGH("Failed to set DPB buffer mode: %d", eRet);
}
- //Restore the capture format again here, because
- //in switching between different DPB-OPB modes, the pixelformat
- //on capture port may be changed. Don't change resolutions.
- memset(&fmt, 0x0, sizeof(struct v4l2_format));
- fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE;
- rc = ioctl(drv_ctx.video_driver_fd, VIDIOC_G_FMT, &fmt);
- fmt.fmt.pix_mp.pixelformat = capture_capability;
- rc = ioctl(drv_ctx.video_driver_fd, VIDIOC_S_FMT, &fmt);
- if (rc) {
- DEBUG_PRINT_ERROR("%s: Failed set format on capture mplane", __func__);
- return OMX_ErrorUnsupportedSetting;
- }
+
return eRet;
}
@@ -1114,6 +1214,15 @@
enum color_fmts color_format;
OMX_U32 width, height;
+ if (capture_capability == V4L2_PIX_FMT_NV12_TP10_UBWC) {
+ rc = disable_downscalar();
+ if (rc) {
+ DEBUG_PRINT_ERROR("Disable downscalar failed!");
+ return rc;
+ }
+ return 0;
+ }
+
if (!m_downscalar_width || !m_downscalar_height) {
DEBUG_PRINT_LOW("%s: downscalar not supported", __func__);
return 0;
@@ -1676,6 +1785,8 @@
pThis->rectangle.nWidth, pThis->rectangle.nHeight);
} else if (p2 == OMX_QTIIndexConfigDescribeColorAspects) {
DEBUG_PRINT_HIGH("Rxd PORT_RECONFIG: OMX_QTIIndexConfigDescribeColorAspects");
+ } else if (p2 == OMX_QTIIndexConfigDescribeHDRColorInfo) {
+ DEBUG_PRINT_HIGH("Rxd PORT_RECONFIG: OMX_QTIIndexConfigDescribeHDRcolorinfo");
} else {
DEBUG_PRINT_ERROR("Rxd Invalid PORT_RECONFIG event (%lu)", p2);
break;
@@ -1771,11 +1882,12 @@
drv_ctx.video_resolution.frame_width = width;
drv_ctx.video_resolution.scan_lines = scan_lines;
drv_ctx.video_resolution.stride = stride;
- if(!is_down_scalar_enabled) {
- rectangle.nLeft = 0;
- rectangle.nTop = 0;
- rectangle.nWidth = drv_ctx.video_resolution.frame_width;
- rectangle.nHeight = drv_ctx.video_resolution.frame_height;
+
+ if (!is_down_scalar_enabled) {
+ rectangle.nLeft = m_extradata_info.output_crop_rect.nLeft;
+ rectangle.nTop = m_extradata_info.output_crop_rect.nTop;
+ rectangle.nWidth = m_extradata_info.output_crop_rect.nWidth;
+ rectangle.nHeight = m_extradata_info.output_crop_rect.nHeight;
}
return format_changed;
}
@@ -1947,7 +2059,8 @@
buf_index = buffer - m_out_mem_ptr;
temp = (char *)drv_ctx.ptr_outputbuffer[buf_index].bufferaddr;
- if (drv_ctx.output_format == VDEC_YUV_FORMAT_NV12_UBWC) {
+ if (drv_ctx.output_format == VDEC_YUV_FORMAT_NV12_UBWC ||
+ drv_ctx.output_format == VDEC_YUV_FORMAT_NV12_TP10_UBWC) {
DEBUG_PRINT_HIGH("Logging UBWC yuv width/height(%u/%u)",
drv_ctx.video_resolution.frame_width,
drv_ctx.video_resolution.frame_height);
@@ -1960,7 +2073,7 @@
unsigned int y_plane, y_meta_plane;
int y_stride = 0, y_sclines = 0;
int y_meta_stride = 0, y_meta_scanlines = 0, uv_meta_stride = 0, uv_meta_scanlines = 0;
- int color_fmt = COLOR_FMT_NV12_UBWC;
+ int color_fmt = (drv_ctx.output_format== VDEC_YUV_FORMAT_NV12_UBWC)? COLOR_FMT_NV12_UBWC: COLOR_FMT_NV12_BPP10_UBWC;
int i;
int bytes_written = 0;
@@ -1988,7 +2101,7 @@
temp += uv_meta_stride;
}
}
- } else if (drv_ctx.output_format == VDEC_YUV_FORMAT_NV12 && m_debug.outfile) {
+ } else if (drv_ctx.output_format == VDEC_YUV_FORMAT_NV12) {
int stride = drv_ctx.video_resolution.stride;
int scanlines = drv_ctx.video_resolution.scan_lines;
if (m_smoothstreaming_mode) {
@@ -2355,7 +2468,12 @@
fdesc.pixelformat, fdesc.flags);
fdesc.index++;
}
+ m_extradata_info.output_crop_rect.nLeft = 0;
+ m_extradata_info.output_crop_rect.nTop = 0;
+ m_extradata_info.output_crop_rect.nWidth = 320;
+ m_extradata_info.output_crop_rect.nHeight = 240;
update_resolution(320, 240, 320, 240);
+
fmt.type = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE;
fmt.fmt.pix_mp.height = drv_ctx.video_resolution.frame_height;
fmt.fmt.pix_mp.width = drv_ctx.video_resolution.frame_width;
@@ -3239,6 +3357,7 @@
m_cb.EmptyBufferDone(&m_cmp ,m_app_data, (OMX_BUFFERHEADERTYPE *)p2);
} else if (ident == OMX_COMPONENT_GENERATE_ETB) {
pending_input_buffers++;
+ VIDC_TRACE_INT_LOW("ETB-pending", pending_input_buffers);
DEBUG_PRINT_LOW("Flush Input OMX_COMPONENT_GENERATE_ETB %p, pending_input_buffers %d",
(OMX_BUFFERHEADERTYPE *)p2, pending_input_buffers);
empty_buffer_done(&m_cmp,(OMX_BUFFERHEADERTYPE *)p2);
@@ -3826,6 +3945,16 @@
eRet = OMX_ErrorNone;
break;
}
+ case OMX_QTIIndexParamDitherControl:
+ {
+ VALIDATE_OMX_PARAM_DATA(paramData, QOMX_VIDEO_DITHER_CONTROL);
+ DEBUG_PRINT_LOW("get_parameter: QOMX_VIDEO_DITHER_CONTROL");
+ QOMX_VIDEO_DITHER_CONTROL *pParam =
+ (QOMX_VIDEO_DITHER_CONTROL *) paramData;
+ pParam->eDitherType = (QOMX_VIDEO_DITHERTYPE) m_dither_config;
+ eRet = OMX_ErrorNone;
+ break;
+ }
default: {
DEBUG_PRINT_ERROR("get_parameter: unknown param %08x", paramIndex);
eRet =OMX_ErrorUnsupportedIndex;
@@ -3981,6 +4110,11 @@
rectangle.nWidth = portDefn->format.video.nFrameWidth;
rectangle.nHeight = portDefn->format.video.nFrameHeight;
+ m_extradata_info.output_crop_rect.nLeft = 0;
+ m_extradata_info.output_crop_rect.nTop = 0;
+ m_extradata_info.output_crop_rect.nWidth = rectangle.nWidth;
+ m_extradata_info.output_crop_rect.nHeight = rectangle.nHeight;
+
eRet = is_video_session_supported();
if (eRet)
break;
@@ -4021,6 +4155,9 @@
} else if (drv_ctx.output_format == VDEC_YUV_FORMAT_NV12_UBWC) {
stride = VENUS_Y_STRIDE(COLOR_FMT_NV12_UBWC, portDefn->format.video.nFrameWidth);
slice = VENUS_Y_SCANLINES(COLOR_FMT_NV12_UBWC, portDefn->format.video.nFrameHeight);
+ } else if (drv_ctx.output_format == VDEC_YUV_FORMAT_NV12_TP10_UBWC) {
+ stride = VENUS_Y_STRIDE(COLOR_FMT_NV12_BPP10_UBWC, portDefn->format.video.nFrameWidth);
+ slice = VENUS_Y_SCANLINES(COLOR_FMT_NV12_BPP10_UBWC, portDefn->format.video.nFrameHeight);
} else {
stride = portDefn->format.video.nFrameWidth;
slice = portDefn->format.video.nFrameHeight;
@@ -4088,6 +4225,7 @@
// Frame rate only should be set if this is a "known value" or to
// activate ts prediction logic (arbitrary mode only) sending input
// timestamps with max value (LLONG_MAX).
+ m_fps_received = portDefn->format.video.xFramerate;
DEBUG_PRINT_HIGH("set_parameter: frame rate set by omx client : %u",
(unsigned int)portDefn->format.video.xFramerate >> 16);
Q16ToFraction(portDefn->format.video.xFramerate, drv_ctx.frame_rate.fps_numerator,
@@ -4143,6 +4281,12 @@
"for adaptive-playback/smooth-streaming",
(unsigned int)frameWidth, (unsigned int)frameHeight);
}
+
+ m_extradata_info.output_crop_rect.nLeft = 0;
+ m_extradata_info.output_crop_rect.nTop = 0;
+ m_extradata_info.output_crop_rect.nWidth = frameWidth;
+ m_extradata_info.output_crop_rect.nHeight = frameHeight;
+
update_resolution(frameWidth, frameHeight,
frameWidth, frameHeight);
eRet = is_video_session_supported();
@@ -4993,7 +5137,22 @@
}
break;
}
-
+ case OMX_QTIIndexParamDitherControl:
+ {
+ VALIDATE_OMX_PARAM_DATA(paramData, QOMX_VIDEO_DITHER_CONTROL);
+ DEBUG_PRINT_LOW("set_parameter: OMX_QTIIndexParamDitherControl");
+ QOMX_VIDEO_DITHER_CONTROL *pParam = (QOMX_VIDEO_DITHER_CONTROL *)paramData;
+ DEBUG_PRINT_LOW("set_parameter: Dither Config from client is: %d", pParam->eDitherType);
+ if (( pParam->eDitherType < QOMX_DITHER_DISABLE ) ||
+ ( pParam->eDitherType > QOMX_DITHER_ALL_COLORSPACE)) {
+ DEBUG_PRINT_ERROR("set_parameter: DitherType outside the range");
+ eRet = OMX_ErrorBadParameter;
+ break;
+ }
+ m_dither_config = is_platform_tp10capture_supported() ? (dither_type)pParam->eDitherType : DITHER_ALL_COLORSPACE;
+ DEBUG_PRINT_LOW("set_parameter: Final Dither Config is: %d", m_dither_config);
+ break;
+ }
default: {
DEBUG_PRINT_ERROR("Setparameter: unknown param %d", paramIndex);
eRet = OMX_ErrorUnsupportedIndex;
@@ -5160,10 +5319,31 @@
break;
}
- default: {
- DEBUG_PRINT_ERROR("get_config: unknown param %d",configIndex);
- eRet = OMX_ErrorBadParameter;
- }
+ case OMX_QTIIndexConfigDescribeHDRColorInfo:
+ {
+ VALIDATE_OMX_PARAM_DATA(configData, DescribeHDRStaticInfoParams);
+ DescribeHDRStaticInfoParams *params = (DescribeHDRStaticInfoParams *)configData;
+ auto_lock lock(m_hdr_info_client_lock);
+
+ print_debug_hdr_color_info(&(m_client_hdr_info.sInfo), "GetConfig Client HDR");
+ print_debug_hdr_color_info(&(m_internal_hdr_info.sInfo), "GetConfig Internal HDR");
+
+ if (m_change_client_hdr_info) {
+ DEBUG_PRINT_LOW("Updating Client's HDR Info with internal");
+ memcpy(&m_client_hdr_info.sInfo,
+ &m_internal_hdr_info.sInfo, sizeof(HDRStaticInfo));
+ m_change_client_hdr_info = false;
+ }
+
+ memcpy(&(params->sInfo), &(m_client_hdr_info.sInfo), sizeof(HDRStaticInfo));
+
+ break;
+ }
+ default:
+ {
+ DEBUG_PRINT_ERROR("get_config: unknown param %d",configIndex);
+ eRet = OMX_ErrorBadParameter;
+ }
}
@@ -5238,7 +5418,9 @@
if (config->nPortIndex == OMX_CORE_INPUT_PORT_INDEX) {
if (config->bEnabled) {
- if ((config->nFps >> 16) > 0) {
+ if ((config->nFps >> 16) > 0 &&
+ (config->nFps >> 16) <= MAX_SUPPORTED_FPS) {
+ m_fps_received = config->nFps;
DEBUG_PRINT_HIGH("set_config: frame rate set by omx client : %u",
(unsigned int)config->nFps >> 16);
Q16ToFraction(config->nFps, drv_ctx.frame_rate.fps_numerator,
@@ -5384,6 +5566,20 @@
print_debug_color_aspects(&(params->sAspects), "Set Config");
memcpy(&m_client_color_space, params, sizeof(DescribeColorAspectsParams));
return ret;
+ } else if ((int)configIndex == (int)OMX_QTIIndexConfigDescribeHDRColorInfo) {
+ VALIDATE_OMX_PARAM_DATA(configData, DescribeHDRStaticInfoParams);
+ DescribeHDRStaticInfoParams *params = (DescribeHDRStaticInfoParams *)configData;
+ if (!DEFAULT_EXTRADATA & OMX_HDR_COLOR_INFO_EXTRADATA) {
+ ret = enable_extradata(OMX_HDR_COLOR_INFO_EXTRADATA, true, true);
+ if (ret != OMX_ErrorNone) {
+ DEBUG_PRINT_ERROR("Failed to enable OMX_HDR_COLOR_INFO_EXTRADATA");
+ return ret;
+ }
+ }
+
+ print_debug_hdr_color_info(&(params->sInfo), "Set Config HDR");
+ memcpy(&m_client_hdr_info, params, sizeof(DescribeHDRStaticInfoParams));
+ return ret;
}
return OMX_ErrorNotImplemented;
@@ -5472,6 +5668,8 @@
*indexType = (OMX_INDEXTYPE)OMX_QTIIndexParamVideoClientExtradata;
} else if (extn_equals(paramName, "OMX.google.android.index.describeColorAspects")) {
*indexType = (OMX_INDEXTYPE)OMX_QTIIndexConfigDescribeColorAspects;
+ } else if (extn_equals(paramName, "OMX.google.android.index.describeHDRStaticInfo")) {
+ *indexType = (OMX_INDEXTYPE)OMX_QTIIndexConfigDescribeHDRColorInfo;
} else {
DEBUG_PRINT_ERROR("Extension: %s not implemented", paramName);
return OMX_ErrorNotImplemented;
@@ -5592,7 +5790,6 @@
close(drv_ctx.extradata_info.ion.fd_ion_data.fd);
free_ion_memory(&drv_ctx.extradata_info.ion);
}
- memset(&drv_ctx.extradata_info, 0, sizeof(drv_ctx.extradata_info));
#endif
if (m_other_extradata) {
free(m_other_extradata);
@@ -5911,6 +6108,12 @@
{
DEBUG_PRINT_LOW("Inside %s, %p", __FUNCTION__, buffer);
OMX_ERRORTYPE eRet = OMX_ErrorNone;
+
+ if (secure_mode) {
+ DEBUG_PRINT_ERROR("use_input_heap_buffers is not allowed in secure mode");
+ return OMX_ErrorUndefined;
+ }
+
if (!m_inp_heap_ptr)
m_inp_heap_ptr = (OMX_BUFFERHEADERTYPE*)
calloc( (sizeof(OMX_BUFFERHEADERTYPE)),
@@ -7111,6 +7314,7 @@
OMX_ERRORTYPE omx_vdec::empty_this_buffer_proxy(OMX_IN OMX_HANDLETYPE hComp,
OMX_IN OMX_BUFFERHEADERTYPE* buffer)
{
+ VIDC_TRACE_NAME_HIGH("ETB");
(void) hComp;
int push_cnt = 0,i=0;
unsigned nPortIndex = 0;
@@ -7135,6 +7339,7 @@
}
pending_input_buffers++;
+ VIDC_TRACE_INT_LOW("ETB-pending", pending_input_buffers);
/* return zero length and not an EOS buffer */
if (!arbitrary_bytes && (buffer->nFilledLen == 0) &&
@@ -7177,11 +7382,13 @@
}
}
+ VIDC_TRACE_INT_LOW("ETB-TS", buffer->nTimeStamp / 1000);
+ VIDC_TRACE_INT_LOW("ETB-size", buffer->nFilledLen);
DEBUG_PRINT_LOW("ETBProxy: bufhdr = %p, bufhdr->pBuffer = %p", buffer, buffer->pBuffer);
/*for use buffer we need to memcpy the data*/
temp_buffer->buffer_len = buffer->nFilledLen;
- if (input_use_buffer && temp_buffer->bufferaddr) {
+ if (input_use_buffer && temp_buffer->bufferaddr && !secure_mode) {
if (buffer->nFilledLen <= temp_buffer->buffer_len) {
if (arbitrary_bytes) {
memcpy (temp_buffer->bufferaddr, (buffer->pBuffer + buffer->nOffset),buffer->nFilledLen);
@@ -7449,6 +7656,7 @@
OMX_IN OMX_HANDLETYPE hComp,
OMX_IN OMX_BUFFERHEADERTYPE* bufferAdd)
{
+ VIDC_TRACE_NAME_HIGH("FTB");
OMX_ERRORTYPE nRet = OMX_ErrorNone;
OMX_BUFFERHEADERTYPE *buffer = bufferAdd;
unsigned nPortIndex = 0;
@@ -7482,6 +7690,7 @@
}
pending_output_buffers++;
+ VIDC_TRACE_INT_LOW("FTB-pending", pending_output_buffers);
buffer = client_buffers.get_dr_buf_hdr(bufferAdd);
if (!buffer) {
DEBUG_PRINT_ERROR("err: client_buffer ptr invalid");
@@ -7497,6 +7706,7 @@
buffer->nFilledLen = 0;
m_cb.FillBufferDone (hComp,m_app_data,buffer);
pending_output_buffers--;
+ VIDC_TRACE_INT_LOW("FTB-pending", pending_output_buffers);
return OMX_ErrorBadParameter;
}
@@ -8107,6 +8317,7 @@
OMX_ERRORTYPE omx_vdec::fill_buffer_done(OMX_HANDLETYPE hComp,
OMX_BUFFERHEADERTYPE * buffer)
{
+ VIDC_TRACE_NAME_HIGH("FBD");
OMX_QCOM_PLATFORM_PRIVATE_PMEM_INFO *pPMEMInfo = NULL;
if (!buffer || (buffer - m_out_mem_ptr) >= (int)drv_ctx.op_buf.actualcount) {
DEBUG_PRINT_ERROR("[FBD] ERROR in ptr(%p)", buffer);
@@ -8138,6 +8349,7 @@
DEBUG_PRINT_LOW("fill_buffer_done: bufhdr = %p, bufhdr->pBuffer = %p, flags: 0x%x, timestamp: %lld",
buffer, buffer->pBuffer, buffer->nFlags, buffer->nTimeStamp);
pending_output_buffers --;
+ VIDC_TRACE_INT_LOW("FTB-pending", pending_output_buffers);
if (buffer->nFlags & OMX_BUFFERFLAG_EOS) {
DEBUG_PRINT_HIGH("Output EOS has been reached");
@@ -8157,47 +8369,6 @@
}
}
- if (!output_flush_progress && (buffer->nFilledLen > 0)) {
- // set the default colorspace advised by client, since the bitstream may be
- // devoid of colorspace-info.
- if (m_enable_android_native_buffers) {
- ColorSpace_t color_space = ITU_R_601;
-
- // Disabled ?
- // WA for VP8. Vp8 encoder does not embed color-info (yet!).
- // Encoding RGBA results in 601-LR for all resolutions.
- // This conflicts with the client't defaults which are based on resolution.
- // Eg: 720p will be encoded as 601-LR. Client will say 709.
- // Re-enable this code once vp8 encoder generates color-info and hence the
- // decoder will be able to override with the correct source color.
-#if 0
- switch (m_client_color_space.sAspects.mPrimaries) {
- case ColorAspects::PrimariesBT601_6_625:
- case ColorAspects::PrimariesBT601_6_525:
- {
- color_space = m_client_color_space.sAspects.mRange == ColorAspects::RangeFull ?
- ITU_R_601_FR : ITU_R_601;
- break;
- }
- case ColorAspects::PrimariesBT709_5:
- {
- color_space = ITU_R_709;
- break;
- }
- default:
- {
- break;
- }
- }
-#endif
- DEBUG_PRINT_LOW("setMetaData for Color Space (client) = 0x%x (601=%u FR=%u 709=%u)",
- color_space, ITU_R_601, ITU_R_601_FR, ITU_R_709);
- set_colorspace_in_handle(color_space, buffer - m_out_mem_ptr);
- }
- DEBUG_PRINT_LOW("Processing extradata");
- handle_extradata(buffer);
- }
-
#ifdef OUTPUT_EXTRADATA_LOG
if (outputExtradataFile) {
int buf_index = buffer - m_out_mem_ptr;
@@ -8260,6 +8431,7 @@
}
}
}
+ VIDC_TRACE_INT_LOW("FBD-TS", buffer->nTimeStamp / 1000);
if (m_cb.FillBufferDone) {
if (buffer->nFilledLen > 0) {
@@ -8268,15 +8440,15 @@
else
set_frame_rate(buffer->nTimeStamp);
+ proc_frms++;
if (perf_flag) {
- if (!proc_frms) {
+ if (1 == proc_frms) {
dec_time.stop();
latency = dec_time.processing_time_us() - latency;
DEBUG_PRINT_HIGH(">>> FBD Metrics: Latency(%.2f)mS", latency / 1e3);
dec_time.start();
fps_metrics.start();
}
- proc_frms++;
if (buffer->nFlags & OMX_BUFFERFLAG_EOS) {
OMX_U64 proc_time = 0;
fps_metrics.stop();
@@ -8284,13 +8456,13 @@
DEBUG_PRINT_HIGH(">>> FBD Metrics: proc_frms(%u) proc_time(%.2f)S fps(%.2f)",
(unsigned int)proc_frms, (float)proc_time / 1e6,
(float)(1e6 * proc_frms) / proc_time);
- proc_frms = 0;
}
}
}
if (buffer->nFlags & OMX_BUFFERFLAG_EOS) {
prev_ts = LLONG_MAX;
rst_prev_ts = true;
+ proc_frms = 0;
}
pPMEMInfo = (OMX_QCOM_PLATFORM_PRIVATE_PMEM_INFO *)
@@ -8333,10 +8505,45 @@
}
// add current framerate to gralloc meta data
- if (m_enable_android_native_buffers && m_out_mem_ptr) {
+ if ((buffer->nFilledLen > 0) && m_enable_android_native_buffers && m_out_mem_ptr) {
+ // If valid fps was received, directly send it to display for the 1st fbd.
+ // Otherwise, calculate fps using fbd timestamps
+ float refresh_rate = m_fps_prev;
+ if (m_fps_received) {
+ if (1 == proc_frms) {
+ refresh_rate = m_fps_received / (float)(1<<16);
+ }
+ } else {
+ // check if dynamic refresh rate change feature enabled or not
+ if (m_drc_enable) {
+ // set coarse fps when 2 fbds received and
+ // set fps again when 30 fbds received as it should be
+ // more accurate than the one set when only 2 fbds received.
+ if (2 == proc_frms || 30 == proc_frms) {
+ if (drv_ctx.frame_rate.fps_denominator) {
+ refresh_rate = drv_ctx.frame_rate.fps_numerator /
+ (float) drv_ctx.frame_rate.fps_denominator;
+ }
+ }
+ } else {
+ // calculate and set refresh rate for every frame from second frame onwards
+ // display will assume the default refresh rate for first frame (which is 60 fps)
+ if (m_fps_prev) {
+ if (drv_ctx.frame_rate.fps_denominator) {
+ refresh_rate = drv_ctx.frame_rate.fps_numerator /
+ (float) drv_ctx.frame_rate.fps_denominator;
+ }
+ }
+ }
+ }
+ if (refresh_rate > 60) {
+ refresh_rate = 60;
+ }
+ DEBUG_PRINT_LOW("frc set refresh_rate %f, frame %d", refresh_rate, proc_frms);
OMX_U32 buf_index = buffer - m_out_mem_ptr;
setMetaData((private_handle_t *)native_buffer[buf_index].privatehandle,
- UPDATE_REFRESH_RATE, (void*)¤t_framerate);
+ UPDATE_REFRESH_RATE, (void*)&refresh_rate);
+ m_fps_prev = refresh_rate;
}
if (buffer->nFilledLen && m_enable_android_native_buffers && m_out_mem_ptr) {
@@ -8405,7 +8612,7 @@
OMX_ERRORTYPE omx_vdec::empty_buffer_done(OMX_HANDLETYPE hComp,
OMX_BUFFERHEADERTYPE* buffer)
{
-
+ VIDC_TRACE_NAME_HIGH("EBD");
int nBufferIndex = buffer - m_inp_mem_ptr;
if (buffer == NULL || (nBufferIndex >= (int)drv_ctx.ip_buf.actualcount)) {
@@ -8416,6 +8623,7 @@
DEBUG_PRINT_LOW("empty_buffer_done: bufhdr = %p, bufhdr->pBuffer = %p, bufhdr->nFlags = 0x%x",
buffer, buffer->pBuffer, buffer->nFlags);
pending_input_buffers--;
+ VIDC_TRACE_INT_LOW("ETB-pending", pending_input_buffers);
if (arbitrary_bytes) {
if (pdest_frame == NULL && input_flush_progress == false) {
@@ -8678,6 +8886,45 @@
}
if (vdec_msg->msgdata.output_frame.len) {
+ if (!omx->output_flush_progress && (omxhdr->nFilledLen > 0)) {
+ // set the default colorspace advised by client, since the bitstream may be
+ // devoid of colorspace-info.
+ if (omx->m_enable_android_native_buffers) {
+ ColorSpace_t color_space = ITU_R_601;
+
+ // Disabled ?
+ // WA for VP8. Vp8 encoder does not embed color-info (yet!).
+ // Encoding RGBA results in 601-LR for all resolutions.
+ // This conflicts with the client't defaults which are based on resolution.
+ // Eg: 720p will be encoded as 601-LR. Client will say 709.
+ // Re-enable this code once vp8 encoder generates color-info and hence the
+ // decoder will be able to override with the correct source color.
+#if 0
+ switch (omx->m_client_color_space.sAspects.mPrimaries) {
+ case ColorAspects::PrimariesBT601_6_625:
+ case ColorAspects::PrimariesBT601_6_525:
+ {
+ color_space = omx->m_client_color_space.sAspects.mRange == ColorAspects::RangeFull ?
+ ITU_R_601_FR : ITU_R_601;
+ break;
+ }
+ case ColorAspects::PrimariesBT709_5:
+ {
+ color_space = ITU_R_709;
+ break;
+ }
+ default:
+ {
+ break;
+ }
+ }
+#endif
+ DEBUG_PRINT_LOW("setMetaData for Color Space (client) = 0x%x (601=%u FR=%u 709=%u)",
+ color_space, ITU_R_601, ITU_R_601_FR, ITU_R_709);
+ omx->set_colorspace_in_handle(color_space, omxhdr - omx->m_out_mem_ptr);
+ }
+ }
+
DEBUG_PRINT_LOW("Processing extradata");
omx->handle_extradata(omxhdr);
@@ -8697,6 +8944,15 @@
vdec_msg->msgdata.output_frame.framesize.bottom = plane[0].reserved[3] + plane[0].reserved[5];
vdec_msg->msgdata.output_frame.picsize.frame_width = plane[0].reserved[6];
vdec_msg->msgdata.output_frame.picsize.frame_height = plane[0].reserved[7];
+
+ /* Copy these values back to OMX internal variables to make both handlign same*/
+
+ omx->m_extradata_info.output_crop_rect.nLeft = vdec_msg->msgdata.output_frame.framesize.left;
+ omx->m_extradata_info.output_crop_rect.nTop = vdec_msg->msgdata.output_frame.framesize.top;
+ omx->m_extradata_info.output_crop_rect.nWidth = vdec_msg->msgdata.output_frame.framesize.right;
+ omx->m_extradata_info.output_crop_rect.nHeight = vdec_msg->msgdata.output_frame.framesize.bottom;
+ omx->m_extradata_info.output_width = vdec_msg->msgdata.output_frame.picsize.frame_width;
+ omx->m_extradata_info.output_height = vdec_msg->msgdata.output_frame.picsize.frame_height;
}
}
@@ -8758,7 +9014,12 @@
VENUS_Y_STRIDE(COLOR_FMT_NV12_UBWC, omx->drv_ctx.video_resolution.frame_width);
omx->drv_ctx.video_resolution.scan_lines =
VENUS_Y_SCANLINES(COLOR_FMT_NV12_UBWC, omx->drv_ctx.video_resolution.frame_height);
- }
+ } else if (omx->drv_ctx.output_format == VDEC_YUV_FORMAT_NV12_TP10_UBWC) {
+ omx->drv_ctx.video_resolution.stride =
+ VENUS_Y_STRIDE(COLOR_FMT_NV12_BPP10_UBWC, omx->drv_ctx.video_resolution.frame_width);
+ omx->drv_ctx.video_resolution.scan_lines =
+ VENUS_Y_SCANLINES(COLOR_FMT_NV12_BPP10_UBWC, omx->drv_ctx.video_resolution.frame_height);
+ }
omx->post_event(OMX_CORE_OUTPUT_PORT_INDEX,
OMX_IndexConfigCommonOutputCrop,
@@ -9927,13 +10188,6 @@
portDefn->nVersion.nVersion = OMX_SPEC_VERSION;
portDefn->nSize = sizeof(OMX_PARAM_PORTDEFINITIONTYPE);
portDefn->eDomain = OMX_PortDomainVideo;
- if (drv_ctx.frame_rate.fps_denominator > 0)
- portDefn->format.video.xFramerate = (drv_ctx.frame_rate.fps_numerator /
- drv_ctx.frame_rate.fps_denominator) << 16; //Q16 format
- else {
- DEBUG_PRINT_ERROR("Error: Divide by zero");
- return OMX_ErrorBadParameter;
- }
memset(&fmt, 0x0, sizeof(struct v4l2_format));
if (0 == portDefn->nPortIndex) {
portDefn->eDir = OMX_DirInput;
@@ -9942,6 +10196,9 @@
portDefn->nBufferSize = drv_ctx.ip_buf.buffer_size;
portDefn->format.video.eColorFormat = OMX_COLOR_FormatUnused;
portDefn->format.video.eCompressionFormat = eCompressionFormat;
+ //for input port, always report the fps value set by client,
+ //to distinguish whether client got valid fps from parser.
+ portDefn->format.video.xFramerate = m_fps_received;
portDefn->bEnabled = m_inp_bEnabled;
portDefn->bPopulated = m_inp_bPopulated;
@@ -9981,6 +10238,13 @@
portDefn->nBufferCountActual = drv_ctx.op_buf.actualcount;
portDefn->nBufferCountMin = drv_ctx.op_buf.mincount;
portDefn->format.video.eCompressionFormat = OMX_VIDEO_CodingUnused;
+ if (drv_ctx.frame_rate.fps_denominator > 0)
+ portDefn->format.video.xFramerate = (drv_ctx.frame_rate.fps_numerator /
+ drv_ctx.frame_rate.fps_denominator) << 16; //Q16 format
+ else {
+ DEBUG_PRINT_ERROR("Error: Divide by zero");
+ return OMX_ErrorBadParameter;
+ }
portDefn->bEnabled = m_out_bEnabled;
portDefn->bPopulated = m_out_bPopulated;
if (!client_buffers.get_color_format(portDefn->format.video.eColorFormat)) {
@@ -10399,7 +10663,7 @@
prefix, aspects->mPrimaries, aspects->mRange, aspects->mTransfer, aspects->mMatrixCoeffs);
}
-void omx_vdec::handle_color_space_info(void *data, unsigned int buf_index)
+bool omx_vdec::handle_color_space_info(void *data, unsigned int buf_index)
{
ColorSpace_t color_space = ITU_R_601;
ColorAspects tempAspects;
@@ -10552,14 +10816,16 @@
memcpy(&(m_internal_color_space.sAspects), aspects, sizeof(ColorAspects));
m_internal_color_space.bDataSpaceChanged = OMX_TRUE;
- DEBUG_PRINT_HIGH("Initiating PORT Reconfig");
+ DEBUG_PRINT_HIGH("Initiating PORT Reconfig due to Color Aspects Change");
print_debug_color_aspects(&(m_internal_color_space.sAspects), "Internal");
print_debug_color_aspects(&(m_client_color_space.sAspects), "Client");
post_event(OMX_CORE_OUTPUT_PORT_INDEX,
OMX_QTIIndexConfigDescribeColorAspects,
OMX_COMPONENT_GENERATE_PORT_RECONFIG);
+ return true;
}
+ return false;
}
void omx_vdec::set_colorspace_in_handle(ColorSpace_t color_space, unsigned int buf_index) {
@@ -10574,6 +10840,83 @@
}
}
+void omx_vdec::print_debug_hdr_color_info(HDRStaticInfo *hdr_info, const char *prefix)
+{
+ if (!hdr_info->mID) {
+ DEBUG_PRINT_LOW("%s : HDRstaticinfo MDC: mR.x = %d mR.y = %d", prefix,
+ hdr_info->sType1.mR.x, hdr_info->sType1.mR.y);
+ DEBUG_PRINT_LOW("%s : HDRstaticinfo MDC: mG.x = %d mG.y = %d", prefix,
+ hdr_info->sType1.mG.x, hdr_info->sType1.mG.y);
+ DEBUG_PRINT_LOW("%s : HDRstaticinfo MDC: mB.x = %d mB.y = %d", prefix,
+ hdr_info->sType1.mB.x, hdr_info->sType1.mB.y);
+ DEBUG_PRINT_LOW("%s : HDRstaticinfo MDC: mW.x = %d mW.y = %d", prefix,
+ hdr_info->sType1.mW.x, hdr_info->sType1.mW.y);
+ DEBUG_PRINT_LOW("%s : HDRstaticinfo MDC: maxDispLum = %d minDispLum = %d", prefix,
+ hdr_info->sType1.mMaxDisplayLuminance, hdr_info->sType1.mMinDisplayLuminance);
+ DEBUG_PRINT_LOW("%s : HDRstaticinfo CLL: CLL = %d FLL = %d", prefix,
+ hdr_info->sType1.mMaxContentLightLevel, hdr_info->sType1.mMaxFrameAverageLightLevel);
+ }
+
+}
+
+
+
+bool omx_vdec::handle_content_light_level_info(void* data)
+{
+ struct msm_vidc_content_light_level_sei_payload *light_level_payload =
+ (msm_vidc_content_light_level_sei_payload*)(data);
+
+ if ((m_internal_hdr_info.sInfo.sType1.mMaxContentLightLevel != light_level_payload->nMaxContentLight) ||
+ (m_internal_hdr_info.sInfo.sType1.mMaxFrameAverageLightLevel != light_level_payload->nMaxPicAverageLight)) {
+ m_internal_hdr_info.sInfo.sType1.mMaxContentLightLevel = light_level_payload->nMaxContentLight;
+ m_internal_hdr_info.sInfo.sType1.mMaxFrameAverageLightLevel = light_level_payload->nMaxPicAverageLight;
+ return true;
+ }
+ return false;
+}
+
+bool omx_vdec::handle_mastering_display_color_info(void* data)
+{
+ struct msm_vidc_mastering_display_colour_sei_payload *mastering_display_payload =
+ (msm_vidc_mastering_display_colour_sei_payload*)(data);
+ HDRStaticInfo* hdr_info = &m_internal_hdr_info.sInfo;
+ bool internal_disp_changed_flag = false;
+
+ internal_disp_changed_flag = (hdr_info->sType1.mR.x != mastering_display_payload->nDisplayPrimariesX[0]) ||
+ (hdr_info->sType1.mR.y != mastering_display_payload->nDisplayPrimariesY[0]);
+ internal_disp_changed_flag |= (hdr_info->sType1.mG.x != mastering_display_payload->nDisplayPrimariesX[1]) ||
+ (hdr_info->sType1.mG.y != mastering_display_payload->nDisplayPrimariesY[1]);
+ internal_disp_changed_flag |= (hdr_info->sType1.mB.x != mastering_display_payload->nDisplayPrimariesX[2]) ||
+ (hdr_info->sType1.mB.y != mastering_display_payload->nDisplayPrimariesY[2]);
+
+ internal_disp_changed_flag |= (hdr_info->sType1.mW.x != mastering_display_payload->nWhitePointX) ||
+ (hdr_info->sType1.mW.y != mastering_display_payload->nWhitePointY);
+
+ /* Maximum Display Luminance from the bitstream is in 0.0001 cd/m2 while the HDRStaticInfo extension
+ requires it in cd/m2, so dividing by 10000 and rounding the value after division
+ */
+ uint16_t max_display_luminance_cd_m2 =
+ static_cast<int>((mastering_display_payload->nMaxDisplayMasteringLuminance / LUMINANCE_DIV_FACTOR) + 0.5);
+ internal_disp_changed_flag |= (hdr_info->sType1.mMaxDisplayLuminance != max_display_luminance_cd_m2) ||
+ (hdr_info->sType1.mMinDisplayLuminance != mastering_display_payload->nMinDisplayMasteringLuminance);
+
+ if (internal_disp_changed_flag) {
+ hdr_info->sType1.mR.x = mastering_display_payload->nDisplayPrimariesX[0];
+ hdr_info->sType1.mR.y = mastering_display_payload->nDisplayPrimariesY[0];
+ hdr_info->sType1.mG.x = mastering_display_payload->nDisplayPrimariesX[1];
+ hdr_info->sType1.mG.y = mastering_display_payload->nDisplayPrimariesY[1];
+ hdr_info->sType1.mB.x = mastering_display_payload->nDisplayPrimariesX[2];
+ hdr_info->sType1.mB.y = mastering_display_payload->nDisplayPrimariesY[2];
+ hdr_info->sType1.mW.x = mastering_display_payload->nWhitePointX;
+ hdr_info->sType1.mW.y = mastering_display_payload->nWhitePointY;
+
+ hdr_info->sType1.mMaxDisplayLuminance = max_display_luminance_cd_m2;
+ hdr_info->sType1.mMinDisplayLuminance = mastering_display_payload->nMinDisplayMasteringLuminance;
+ }
+
+ return internal_disp_changed_flag;
+}
+
void omx_vdec::handle_extradata(OMX_BUFFERHEADERTYPE *p_buf_hdr)
{
OMX_OTHER_EXTRADATATYPE *p_extra = NULL, *p_sei = NULL, *p_vui = NULL, *p_client_extra = NULL;
@@ -10585,7 +10928,8 @@
OMX_U32 num_MB_in_frame;
OMX_U32 recovery_sei_flags = 1;
int enable = OMX_InterlaceFrameProgressive;
-
+ bool internal_hdr_info_changed_flag = false;
+ bool color_event = false;
if (output_flush_progress)
return;
@@ -10785,7 +11129,7 @@
case MSM_VIDC_EXTRADATA_VUI_DISPLAY_INFO:
case MSM_VIDC_EXTRADATA_VC1_SEQDISP:
case MSM_VIDC_EXTRADATA_VPX_COLORSPACE_INFO:
- handle_color_space_info((void *)data->data, buf_index);
+ color_event = handle_color_space_info((void *)data->data, buf_index);
break;
case MSM_VIDC_EXTRADATA_S3D_FRAME_PACKING:
struct msm_vidc_s3d_frame_packing_payload *s3d_frame_packing_payload;
@@ -10866,6 +11210,12 @@
}
}
break;
+ case MSM_VIDC_EXTRADATA_CONTENT_LIGHT_LEVEL_SEI:
+ internal_hdr_info_changed_flag |= handle_content_light_level_info((void*)data->data);
+ break;
+ case MSM_VIDC_EXTRADATA_MASTERING_DISPLAY_COLOUR_SEI:
+ internal_hdr_info_changed_flag |= handle_mastering_display_color_info((void*)data->data);
+ break;
default:
DEBUG_PRINT_LOW("Unrecognized extradata");
goto unrecognized_extradata;
@@ -10896,6 +11246,20 @@
p_client_extra = (OMX_OTHER_EXTRADATATYPE *) (((OMX_U8 *) p_client_extra) + ALIGN(p_client_extra->nSize, 4));
}
}
+
+ if(internal_hdr_info_changed_flag) {
+ print_debug_hdr_color_info(&(m_internal_hdr_info.sInfo), "Internal");
+ print_debug_hdr_color_info(&(m_client_hdr_info.sInfo), "Client");
+ auto_lock lock(m_hdr_info_client_lock);
+ m_change_client_hdr_info = true;
+ if(!color_event) {
+ DEBUG_PRINT_HIGH("Initiating PORT Reconfig due to HDR Info Change");
+ post_event(OMX_CORE_OUTPUT_PORT_INDEX,
+ OMX_QTIIndexConfigDescribeHDRColorInfo,
+ OMX_COMPONENT_GENERATE_PORT_RECONFIG);
+ }
+ }
+
}
unrecognized_extradata:
if (client_extradata && p_extra) {
@@ -10918,7 +11282,7 @@
return;
}
-OMX_ERRORTYPE omx_vdec::enable_extradata(OMX_U32 requested_extradata,
+OMX_ERRORTYPE omx_vdec::enable_extradata(OMX_U64 requested_extradata,
bool is_internal, bool enable)
{
OMX_ERRORTYPE ret = OMX_ErrorNone;
@@ -11070,6 +11434,20 @@
DEBUG_PRINT_HIGH("Failed to set Display info extradata");
}
}
+ if (requested_extradata & OMX_HDR_COLOR_INFO_EXTRADATA) {
+ control.id = V4L2_CID_MPEG_VIDC_VIDEO_EXTRADATA;
+ if (output_capability == V4L2_PIX_FMT_H264 ||
+ output_capability == V4L2_PIX_FMT_HEVC) {
+ control.value = V4L2_MPEG_VIDC_EXTRADATA_DISPLAY_COLOUR_SEI;
+ if (ioctl(drv_ctx.video_driver_fd, VIDIOC_S_CTRL, &control)) {
+ DEBUG_PRINT_HIGH("Failed to set Display Colour SEI extradata");
+ }
+ control.value = V4L2_MPEG_VIDC_EXTRADATA_CONTENT_LIGHT_LEVEL_SEI;
+ if (ioctl(drv_ctx.video_driver_fd, VIDIOC_S_CTRL, &control)) {
+ DEBUG_PRINT_HIGH("Failed to set Content Light Level SEI extradata");
+ }
+ }
+ }
}
ret = get_buffer_req(&drv_ctx.op_buf);
return ret;
@@ -11801,8 +12179,9 @@
bool omx_vdec::allocate_color_convert_buf::set_color_format(
OMX_COLOR_FORMATTYPE dest_color_format)
{
- bool status = true;
- OMX_COLOR_FORMATTYPE drv_color_format;
+ bool status = true, drv_colorformat_c2d_enable = false;
+ bool dest_color_format_c2d_enable = false;
+ OMX_COLOR_FORMATTYPE drv_color_format = OMX_COLOR_FormatUnused;
if (!omx) {
DEBUG_PRINT_ERROR("Invalid client in color convert");
return false;
@@ -11818,18 +12197,27 @@
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;
}
- if (status &&
- drv_color_format != dest_color_format &&
- drv_color_format != (OMX_COLOR_FORMATTYPE)
- QOMX_COLOR_FORMATYUV420PackedSemiPlanar32mMultiView &&
- drv_color_format != (OMX_COLOR_FORMATTYPE)
- QOMX_COLOR_FORMATYUV420PackedSemiPlanar32mCompressed &&
- dest_color_format != (OMX_COLOR_FORMATTYPE)
- QOMX_COLOR_FORMATYUV420PackedSemiPlanar32mCompressed) {
+ drv_colorformat_c2d_enable = (drv_color_format != dest_color_format) &&
+ (drv_color_format != (OMX_COLOR_FORMATTYPE)
+ QOMX_COLOR_FORMATYUV420PackedSemiPlanar32mMultiView) &&
+ (drv_color_format != (OMX_COLOR_FORMATTYPE)
+ QOMX_COLOR_FORMATYUV420PackedSemiPlanar32mCompressed) &&
+ (drv_color_format != (OMX_COLOR_FORMATTYPE)
+ QOMX_COLOR_FORMATYUV420PackedSemiPlanar32m10bitCompressed);
+
+ dest_color_format_c2d_enable = (dest_color_format != (OMX_COLOR_FORMATTYPE)
+ QOMX_COLOR_FORMATYUV420PackedSemiPlanar32mCompressed) &&
+ (dest_color_format != (OMX_COLOR_FORMATTYPE)
+ QOMX_COLOR_FORMATYUV420PackedSemiPlanar32m10bitCompressed);
+
+ if (status && drv_colorformat_c2d_enable && dest_color_format_c2d_enable) {
DEBUG_PRINT_LOW("Enabling C2D");
if ((dest_color_format != OMX_COLOR_FormatYUV420Planar) &&
(dest_color_format != OMX_COLOR_FormatYUV420SemiPlanar)) {
@@ -12134,6 +12522,8 @@
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;
} else {
@@ -12303,6 +12693,7 @@
}
} else {
pending_input_buffers++;
+ VIDC_TRACE_INT_LOW("ETB-pending", pending_input_buffers);
DEBUG_PRINT_LOW("\n Flush Input OMX_COMPONENT_GENERATE_ETB %p, pending_input_buffers %d",
(OMX_BUFFERHEADERTYPE *)p2, pending_input_buffers);
empty_buffer_done(&m_cmp,(OMX_BUFFERHEADERTYPE *)p2);
@@ -12468,6 +12859,11 @@
DEBUG_PRINT_LOW("enable adaptive - upper limit buffer count = %lu for HxW %ux%u",
min_res_buf_count, m_decoder_capability.min_height, m_decoder_capability.min_width);
+ m_extradata_info.output_crop_rect.nLeft = 0;
+ m_extradata_info.output_crop_rect.nTop = 0;
+ m_extradata_info.output_crop_rect.nWidth = m_smoothstreaming_width;
+ m_extradata_info.output_crop_rect.nHeight = m_smoothstreaming_height;
+
update_resolution(m_smoothstreaming_width, m_smoothstreaming_height,
m_smoothstreaming_width, m_smoothstreaming_height);
eRet = is_video_session_supported();
@@ -12622,6 +13018,9 @@
case VDEC_YUV_FORMAT_NV12_UBWC:
color_fmt = COLOR_FMT_NV12_UBWC;
break;
+ case VDEC_YUV_FORMAT_NV12_TP10_UBWC:
+ color_fmt = COLOR_FMT_NV12_BPP10_UBWC;
+ break;
default:
color_fmt = -1;
DEBUG_PRINT_HIGH("Color format : %x not supported for secure memory prefetching\n", drv_ctx.output_format);
@@ -12691,4 +13090,3 @@
free(custom_data);
}
}
-
diff --git a/msmcobalt/mm-video-v4l2/vidc/vdec/src/ts_parser.cpp b/msm8998/mm-video-v4l2/vidc/vdec/src/ts_parser.cpp
similarity index 100%
rename from msmcobalt/mm-video-v4l2/vidc/vdec/src/ts_parser.cpp
rename to msm8998/mm-video-v4l2/vidc/vdec/src/ts_parser.cpp
diff --git a/msmcobalt/mm-video-v4l2/vidc/venc/Android.mk b/msm8998/mm-video-v4l2/vidc/venc/Android.mk
similarity index 96%
rename from msmcobalt/mm-video-v4l2/vidc/venc/Android.mk
rename to msm8998/mm-video-v4l2/vidc/venc/Android.mk
index 06306f8..e1cd555 100644
--- a/msmcobalt/mm-video-v4l2/vidc/venc/Android.mk
+++ b/msm8998/mm-video-v4l2/vidc/venc/Android.mk
@@ -24,9 +24,9 @@
TARGETS_THAT_USE_FLAG_MSM8226 := msm8226 msm8916 msm8909
TARGETS_THAT_NEED_SW_VENC_MPEG4 := msm8909 msm8937
TARGETS_THAT_NEED_SW_VENC_HEVC := msm8992
-TARGETS_THAT_SUPPORT_UBWC := msm8996 msmcobalt
-TARGETS_THAT_SUPPORT_VQZIP := msm8996 msmcobalt
-TARGETS_THAT_SUPPORT_PQ := msm8996 msmcobalt
+TARGETS_THAT_SUPPORT_UBWC := msm8996 msm8998
+TARGETS_THAT_SUPPORT_VQZIP := msm8996 msm8998
+TARGETS_THAT_SUPPORT_PQ := msm8996 msm8998
ifeq ($(TARGET_BOARD_PLATFORM),msm8610)
libmm-venc-def += -DMAX_RES_720P
@@ -72,6 +72,8 @@
libmm-venc-def += -DSUPPORT_CONFIG_INTRA_REFRESH
endif
+libmm-venc-def += -DUSE_CAMERA_METABUFFER_UTILS
+
# Common Includes
libmm-venc-inc := $(LOCAL_PATH)/inc
libmm-venc-inc += $(QCOM_MEDIA_ROOT)/mm-video-v4l2/vidc/common/inc
diff --git a/msm8998/mm-video-v4l2/vidc/venc/Makefile.am b/msm8998/mm-video-v4l2/vidc/venc/Makefile.am
new file mode 100644
index 0000000..22aed6f
--- /dev/null
+++ b/msm8998/mm-video-v4l2/vidc/venc/Makefile.am
@@ -0,0 +1,85 @@
+#AM_CFLAGS = -Wall
+#AM_CFLAGS = -Wundef
+#AM_CFLAGS += -Wstrict-prototypes
+#AM_CFLAGS += -Wno-trigraphs
+#AM_CFLAGS += -Wno-multichar
+
+AM_CPPFLAGS = -D__alignx\(x\)=__attribute__\(\(__aligned__\(x\)\)\)
+AM_CPPFLAGS += -D__align=__alignx
+AM_CPPFLAGS += -Dinline=__inline
+AM_CPPFLAGS += -DIMAGE_APPS_PROC
+AM_CPPFLAGS += -DCDECL
+AM_CPPFLAGS += -DT_ARM
+AM_CPPFLAGS += -DNO_ARM_CLZ
+AM_CPPFLAGS += -D_ANDROID_
+AM_CPPFLAGS += -UENABLE_DEBUG_LOW
+AM_CPPFLAGS += -DENABLE_DEBUG_HIGH
+AM_CPPFLAGS += -DENABLE_DEBUG_ERROR
+AM_CPPFLAGS += -UINPUT_BUFFER_LOG
+AM_CPPFLAGS += -UOUTPUT_BUFFER_LOG
+AM_CPPFLAGS += -Werror
+AM_CPPFLAGS += -D_ANDROID_ICS_
+AM_CPPFLAGS += -D_MSM8974_
+AM_CPPFLAGS += -DUSE_ION
+#AM_CPPFLAGS += "-include stdint.h"
+AM_CPPFLAGS += "-Dstrlcpy=g_strlcpy"
+AM_CPPFLAGS += "-Dstrlcat=g_strlcat"
+AM_CPPFLAGS += "-std=c++11"
+AM_CPPFLAGS += -Wno-undef
+AM_CPPFLAGS += -Wno-multichar
+AM_CPPFLAGS += -g -O3
+
+if USE_GLIB
+AM_CPPFLAGS += -D_USE_GLIB_
+endif
+
+if TARGET_MSM8610
+AM_CPPFLAGS += -DMAX_RES_720P
+AM_CPPFLAGS += -D_MSM8610_
+else
+if TARGET_MSM8226
+AM_CPPFLAGS += -DMAX_RES_1080P
+else
+AM_CPPFLAGS += -DMAX_RES_1080P
+AM_CPPFLAGS += -DMAX_RES_1080P_EBI
+endif
+endif
+
+if TARGETS_THAT_SUPPORT_PQ
+AM_CPPFLAGS += -D_PQ_
+endif
+
+if TARGETS_THAT_USE_FLAG_MSM8226
+AM_CPPFLAGS += -D_MSM8226_
+endif
+
+if TARGET_USES_MEDIA_EXTENSIONS
+AM_CPPFLAGS += -DUSE_NATIVE_HANDLE_SOURCE
+AM_CPPFLAGS += -DSUPPORT_CONFIG_INTRA_REFRESH
+endif
+
+if MASTER_SIDE_CP_TARGET_LIST
+AM_CPPFLAGS += -DMASTER_SIDE_CP
+endif
+
+AM_CPPFLAGS += -I$(top_srcdir)/mm-video-v4l2/vidc/common/inc/
+AM_CPPFLAGS += -I$(top_srcdir)/mm-video-v4l2/vidc/venc/inc/
+AM_CPPFLAGS += -I$(top_srcdir)/libc2dcolorconvert/
+AM_CPPFLAGS += -I$(top_srcdir)/mm-core/inc/
+AM_CPPFLAGS += -I$(top_srcdir)/mm-core/src/common/
+AM_CPPFLAGS += -I$(top_srcdir)/libstagefrighthw/
+
+sources = src/omx_video_base.cpp
+sources += src/omx_video_encoder.cpp
+sources += src/video_encoder_device_v4l2.cpp
+sources += $(top_srcdir)/mm-video-v4l2/vidc/common/src/extra_data_handler.cpp
+sources += $(top_srcdir)/mm-video-v4l2/vidc/common/src/vidc_color_converter.cpp
+
+lib_LTLIBRARIES = libOmxVenc.la
+libOmxVenc_la_SOURCES = $(sources)
+libOmxVenc_la_CFLAGS = $(AM_CFLAGS) $(AM_CPPFLAGS) -fPIC
+#libOmxVenc_la_LDLIBS = ../libc2d2colorconvert/libc2dcolorconvert.la
+#libOmxVenc_la_LIBADD = ../../../mm-core/libOmxCore.la
+libOmxVenc_la_LDFLAGS = -lstdc++ -lpthread -llog -lutils -lbinder -lcutils -lglib-2.0 -lbase -ldl -lpthread -shared
+# -lqdMetaData -lc2d2 -lgui -lOmxCore -lgpustats -ldl -lpthread
+libOmxVenc_la_LDFLAGS += -version-info 0
\ No newline at end of file
diff --git a/msmcobalt/mm-video-v4l2/vidc/venc/inc/camera_test.h b/msm8998/mm-video-v4l2/vidc/venc/inc/camera_test.h
similarity index 100%
rename from msmcobalt/mm-video-v4l2/vidc/venc/inc/camera_test.h
rename to msm8998/mm-video-v4l2/vidc/venc/inc/camera_test.h
diff --git a/msmcobalt/mm-video-v4l2/vidc/venc/inc/fb_test.h b/msm8998/mm-video-v4l2/vidc/venc/inc/fb_test.h
similarity index 100%
rename from msmcobalt/mm-video-v4l2/vidc/venc/inc/fb_test.h
rename to msm8998/mm-video-v4l2/vidc/venc/inc/fb_test.h
diff --git a/msmcobalt/mm-video-v4l2/vidc/venc/inc/omx_swvenc_hevc.h b/msm8998/mm-video-v4l2/vidc/venc/inc/omx_swvenc_hevc.h
similarity index 100%
rename from msmcobalt/mm-video-v4l2/vidc/venc/inc/omx_swvenc_hevc.h
rename to msm8998/mm-video-v4l2/vidc/venc/inc/omx_swvenc_hevc.h
diff --git a/msmcobalt/mm-video-v4l2/vidc/venc/inc/omx_swvenc_mpeg4.h b/msm8998/mm-video-v4l2/vidc/venc/inc/omx_swvenc_mpeg4.h
similarity index 95%
rename from msmcobalt/mm-video-v4l2/vidc/venc/inc/omx_swvenc_mpeg4.h
rename to msm8998/mm-video-v4l2/vidc/venc/inc/omx_swvenc_mpeg4.h
index 0443c80..5971fbc 100644
--- a/msmcobalt/mm-video-v4l2/vidc/venc/inc/omx_swvenc_mpeg4.h
+++ b/msm8998/mm-video-v4l2/vidc/venc/inc/omx_swvenc_mpeg4.h
@@ -1,5 +1,5 @@
/*--------------------------------------------------------------------------
-Copyright (c) 2014, The Linux Foundation. All rights reserved.
+Copyright (c) 2014-2016, 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
@@ -74,7 +74,7 @@
swvenc_video_capability m_capability;
bool m_max_allowed_bitrate_check;
bool m_stopped;
- bool format_set;
+ bool set_format;
int dev_handle_output_extradata(void *, int);
int dev_handle_input_extradata(void *, int, int);
@@ -143,6 +143,8 @@
bool dev_get_output_log_flag();
int dev_output_log_buffers(const char *buffer_addr, int buffer_len);
int dev_extradata_log_buffers(char *buffer);
+ bool swvenc_color_align(OMX_BUFFERHEADERTYPE *buffer, OMX_U32 width,
+ OMX_U32 height);
SWVENC_STATUS swvenc_set_rc_mode(OMX_VIDEO_CONTROLRATETYPE eControlRate);
SWVENC_STATUS swvenc_set_profile_level(OMX_U32 eProfile,OMX_U32 eLevel);
@@ -150,6 +152,7 @@
SWVENC_STATUS swvenc_set_frame_rate(OMX_U32 nFrameRate);
SWVENC_STATUS swvenc_set_bit_rate(OMX_U32 nTargetBitrate);
SWVENC_STATUS swvenc_set_intra_period(OMX_U32 nPFrame,OMX_U32 nBFrame);
+ SWVENC_STATUS swvenc_set_color_format(OMX_COLOR_FORMATTYPE);
SWVENC_STATUS swvenc_get_buffer_req
(
OMX_U32 *min_buff_count,
diff --git a/msmcobalt/mm-video-v4l2/vidc/venc/inc/omx_video_base.h b/msm8998/mm-video-v4l2/vidc/venc/inc/omx_video_base.h
similarity index 100%
rename from msmcobalt/mm-video-v4l2/vidc/venc/inc/omx_video_base.h
rename to msm8998/mm-video-v4l2/vidc/venc/inc/omx_video_base.h
diff --git a/msmcobalt/mm-video-v4l2/vidc/venc/inc/omx_video_common.h b/msm8998/mm-video-v4l2/vidc/venc/inc/omx_video_common.h
similarity index 100%
rename from msmcobalt/mm-video-v4l2/vidc/venc/inc/omx_video_common.h
rename to msm8998/mm-video-v4l2/vidc/venc/inc/omx_video_common.h
diff --git a/msmcobalt/mm-video-v4l2/vidc/venc/inc/omx_video_encoder.h b/msm8998/mm-video-v4l2/vidc/venc/inc/omx_video_encoder.h
similarity index 98%
rename from msmcobalt/mm-video-v4l2/vidc/venc/inc/omx_video_encoder.h
rename to msm8998/mm-video-v4l2/vidc/venc/inc/omx_video_encoder.h
index e648799..fc26690 100644
--- a/msmcobalt/mm-video-v4l2/vidc/venc/inc/omx_video_encoder.h
+++ b/msm8998/mm-video-v4l2/vidc/venc/inc/omx_video_encoder.h
@@ -31,11 +31,7 @@
#include <unistd.h>
#include "omx_video_base.h"
-#ifdef _MSM8974_
#include "video_encoder_device_v4l2.h"
-#else
-#include "video_encoder_device.h"
-#endif
extern "C" {
OMX_API void * get_omx_component_factory_fn(void);
diff --git a/msmcobalt/mm-video-v4l2/vidc/venc/inc/queue.h b/msm8998/mm-video-v4l2/vidc/venc/inc/queue.h
similarity index 100%
rename from msmcobalt/mm-video-v4l2/vidc/venc/inc/queue.h
rename to msm8998/mm-video-v4l2/vidc/venc/inc/queue.h
diff --git a/msmcobalt/mm-video-v4l2/vidc/venc/inc/venc_util.h b/msm8998/mm-video-v4l2/vidc/venc/inc/venc_util.h
similarity index 100%
rename from msmcobalt/mm-video-v4l2/vidc/venc/inc/venc_util.h
rename to msm8998/mm-video-v4l2/vidc/venc/inc/venc_util.h
diff --git a/msmcobalt/mm-video-v4l2/vidc/venc/inc/video_encoder_device.h b/msm8998/mm-video-v4l2/vidc/venc/inc/video_encoder_device.h
similarity index 100%
rename from msmcobalt/mm-video-v4l2/vidc/venc/inc/video_encoder_device.h
rename to msm8998/mm-video-v4l2/vidc/venc/inc/video_encoder_device.h
diff --git a/msmcobalt/mm-video-v4l2/vidc/venc/inc/video_encoder_device_v4l2.h b/msm8998/mm-video-v4l2/vidc/venc/inc/video_encoder_device_v4l2.h
similarity index 96%
rename from msmcobalt/mm-video-v4l2/vidc/venc/inc/video_encoder_device_v4l2.h
rename to msm8998/mm-video-v4l2/vidc/venc/inc/video_encoder_device_v4l2.h
index 43d2705..b13d613 100644
--- a/msmcobalt/mm-video-v4l2/vidc/venc/inc/video_encoder_device_v4l2.h
+++ b/msm8998/mm-video-v4l2/vidc/venc/inc/video_encoder_device_v4l2.h
@@ -32,6 +32,7 @@
#include "OMX_Types.h"
#include "OMX_Core.h"
#include "OMX_VideoExt.h"
+#include "QComOMXMetadata.h"
#include "OMX_QCOMExtns.h"
#include "qc_omx_component.h"
#ifdef _VQZIP_
@@ -397,13 +398,14 @@
venc_dev_pq();
~venc_dev_pq();
bool is_pq_enabled;
+ bool is_pq_force_disable;
bool is_YUV_format_uncertain;
pthread_mutex_t lock;
struct extradata_buffer_info roi_extradata_info;
bool init(unsigned long);
void deinit();
void get_caps();
- int configure();
+ int configure(unsigned long width, unsigned long height);
bool is_pq_handle_valid();
bool is_color_format_supported(unsigned long);
bool reinit(unsigned long);
@@ -428,6 +430,8 @@
unsigned long configured_format;
};
venc_dev_pq m_pq;
+ bool venc_check_for_pq(void);
+ void venc_configure_pq(void);
void venc_try_enable_pq(void);
#endif
struct venc_debug_cap m_debug;
@@ -457,8 +461,9 @@
bool async_thread_created;
bool async_thread_force_stop;
class omx_venc *venc_handle;
- OMX_ERRORTYPE allocate_extradata(struct extradata_buffer_info *extradata_info);
- void free_extradata();
+ OMX_ERRORTYPE allocate_extradata(struct extradata_buffer_info *extradata_info, int flags);
+ void free_extradata_all();
+ void free_extradata(struct extradata_buffer_info *extradata_info);
int append_mbi_extradata(void *, struct msm_vidc_extradata_header*);
bool handle_output_extradata(void *, int);
bool handle_input_extradata(struct v4l2_buffer);
@@ -468,7 +473,6 @@
bool is_gralloc_source_ubwc;
bool is_camera_source_ubwc;
bool is_csc_enabled;
- bool is_pq_force_disable;
OMX_U32 fd_list[64];
private:
@@ -627,16 +631,6 @@
int mBufMap[64]; // Map with slots for each buffer
size_t mNumPending;
- public:
- // utility methods to parse entities in batch
- // payload format for batch of 3
- //| fd0 | fd1 | fd2 | off0 | off1 | off2 | len0 | len1 | len2 | csc0 | csc1 | csc2 | dTS0 | dTS1 | dTS2|
- static inline int getFdAt(native_handle_t *, int index);
- static inline int getOffsetAt(native_handle_t *, int index);
- static inline int getSizeAt(native_handle_t *, int index);
- static inline int getUsageAt(native_handle_t *, int index);
- static inline int getColorFormatAt(native_handle_t *, int index);
- static inline int getTimeStampAt(native_handle_t *, int index);
};
BatchInfo mBatchInfo;
};
diff --git a/msmcobalt/mm-video-v4l2/vidc/venc/inc/video_encoder_test.h b/msm8998/mm-video-v4l2/vidc/venc/inc/video_encoder_test.h
similarity index 100%
rename from msmcobalt/mm-video-v4l2/vidc/venc/inc/video_encoder_test.h
rename to msm8998/mm-video-v4l2/vidc/venc/inc/video_encoder_test.h
diff --git a/msmcobalt/mm-video-v4l2/vidc/venc/src/omx_swvenc_hevc.cpp b/msm8998/mm-video-v4l2/vidc/venc/src/omx_swvenc_hevc.cpp
similarity index 100%
rename from msmcobalt/mm-video-v4l2/vidc/venc/src/omx_swvenc_hevc.cpp
rename to msm8998/mm-video-v4l2/vidc/venc/src/omx_swvenc_hevc.cpp
diff --git a/msmcobalt/mm-video-v4l2/vidc/venc/src/omx_swvenc_mpeg4.cpp b/msm8998/mm-video-v4l2/vidc/venc/src/omx_swvenc_mpeg4.cpp
similarity index 95%
rename from msmcobalt/mm-video-v4l2/vidc/venc/src/omx_swvenc_mpeg4.cpp
rename to msm8998/mm-video-v4l2/vidc/venc/src/omx_swvenc_mpeg4.cpp
index 52d5340..358f797 100644
--- a/msmcobalt/mm-video-v4l2/vidc/venc/src/omx_swvenc_mpeg4.cpp
+++ b/msm8998/mm-video-v4l2/vidc/venc/src/omx_swvenc_mpeg4.cpp
@@ -95,7 +95,7 @@
mUseProxyColorFormat = false;
get_syntaxhdr_enable = false;
m_bSeqHdrRequested = false;
- format_set = false;
+ set_format = false;
EXIT_FUNC();
}
@@ -699,8 +699,8 @@
{
/* meta_mode = 2 (kMetadataBufferTypeGrallocSource) */
m_sInPortFormat.eColorFormat =
- (OMX_COLOR_FORMATTYPE) QOMX_COLOR_FormatYVU420SemiPlanar;
- color_format = SWVENC_COLOR_FORMAT_NV21;
+ (OMX_COLOR_FORMATTYPE) QOMX_COLOR_FORMATYUV420PackedSemiPlanar32m;
+ color_format = SWVENC_COLOR_FORMAT_NV12;
if (!mUseProxyColorFormat)
{
if (!c2d_conv.init())
@@ -737,8 +737,6 @@
m_input_msg_id = OMX_COMPONENT_GENERATE_ETB;
mUseProxyColorFormat = false;
}
- DEBUG_PRINT_LOW("set_parameter: OMX_IndexParamVideoPortFormat %d",
- portFmt->eColorFormat);
m_sInPortDef.format.video.eColorFormat = m_sInPortFormat.eColorFormat;
/* set the input color format */
Prop.id = SWVENC_PROPERTY_ID_COLOR_FORMAT;
@@ -1685,7 +1683,7 @@
__FUNCTION__, Ret);
RETURN(-1);
}
- format_set = false;
+ set_format = false;
m_stopped = true;
/* post STOP_DONE event as start is synchronus */
@@ -1810,6 +1808,11 @@
{
LEGACY_CAM_METADATA_TYPE *meta_buf = NULL;
meta_buf = (LEGACY_CAM_METADATA_TYPE *)bufhdr->pBuffer;
+ if(m_sInPortDef.format.video.eColorFormat == ((OMX_COLOR_FORMATTYPE) QOMX_COLOR_FormatAndroidOpaque))
+ {
+ DEBUG_PRINT_LOW("dev_empty_buf: color_format is QOMX_COLOR_FormatAndroidOpaque");
+ set_format = true;
+ }
if(!meta_buf)
{
if (!bufhdr->nFilledLen && (bufhdr->nFlags & OMX_BUFFERFLAG_EOS))
@@ -1830,15 +1833,9 @@
{
offset = meta_buf->meta_handle->data[1];
size = meta_buf->meta_handle->data[2];
- if (!format_set &&
- (meta_buf->meta_handle->numFds + meta_buf->meta_handle->numInts > 5))
+ if (set_format && (meta_buf->meta_handle->numFds + meta_buf->meta_handle->numInts > 5))
{
- format_set = true;
- if (((OMX_COLOR_FORMATTYPE) meta_buf->meta_handle->data[5]) !=
- m_sInPortFormat.eColorFormat)
- {
- return false;
- }
+ m_sInPortFormat.eColorFormat = (OMX_COLOR_FORMATTYPE)meta_buf->meta_handle->data[5];
}
ipbuffer.p_buffer = (unsigned char *)mmap(NULL, size, PROT_READ|PROT_WRITE,MAP_SHARED, fd, offset);
if (ipbuffer.p_buffer == MAP_FAILED)
@@ -1854,9 +1851,8 @@
VideoGrallocMetadata *meta_buf = (VideoGrallocMetadata *)bufhdr->pBuffer;
private_handle_t *handle = (private_handle_t *)meta_buf->pHandle;
size = handle->size;
- if(!format_set)
+ if(set_format)
{
- format_set = true;
DEBUG_PRINT_LOW("color format = 0x%x",handle->format);
if (((OMX_COLOR_FORMATTYPE)handle->format) != m_sInPortFormat.eColorFormat)
{
@@ -1864,17 +1860,6 @@
{
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
{
@@ -1900,13 +1885,25 @@
ipbuffer.size = bufhdr->nAllocLen;
ipbuffer.filled_length = bufhdr->nFilledLen;
}
+ if (set_format)
+ {
+ set_format = false;
+ m_sInPortDef.format.video.eColorFormat = m_sInPortFormat.eColorFormat;
+ Ret = swvenc_set_color_format(m_sInPortFormat.eColorFormat);
+ if (Ret != SWVENC_S_SUCCESS)
+ {
+ DEBUG_PRINT_ERROR("%s, swvenc_setproperty failed (%d)",
+ __FUNCTION__, Ret);
+ RETURN(OMX_ErrorUnsupportedSetting);
+ }
+ }
}
}
else
{
- ipbuffer.p_buffer = bufhdr->pBuffer;
- ipbuffer.size = bufhdr->nAllocLen;
- ipbuffer.filled_length = bufhdr->nFilledLen;
+ ipbuffer.p_buffer = bufhdr->pBuffer;
+ ipbuffer.size = bufhdr->nAllocLen;
+ ipbuffer.filled_length = bufhdr->nFilledLen;
}
ipbuffer.flags = 0;
if (bufhdr->nFlags & OMX_BUFFERFLAG_EOS)
@@ -2278,16 +2275,11 @@
{
ENTER_FUNC();
- (void)buffer;
- (void)width;
- (void)height;
if(secure_session) {
DEBUG_PRINT_ERROR("Cannot align colors in secure session.");
RETURN(OMX_FALSE);
}
-
- RETURN(true);
- //return handle->venc_color_align(buffer, width,height);
+ return swvenc_color_align(buffer, width,height);
}
bool omx_venc::is_secure_session()
@@ -2387,6 +2379,7 @@
fwrite(temp, width, 1, m_debug.infile);
temp += stride;
}
+ temp = (char*)(buffer + (stride * scanlines));
for(int i = 0; i < height/2; i++)
{
fwrite(temp, width, 1, m_debug.infile);
@@ -2980,3 +2973,77 @@
RETURN(Ret);
}
+
+bool omx_venc::swvenc_color_align(OMX_BUFFERHEADERTYPE *buffer, OMX_U32 width,
+ OMX_U32 height)
+{
+ OMX_U32 y_stride = VENUS_Y_STRIDE(COLOR_FMT_NV12, width),
+ y_scanlines = VENUS_Y_SCANLINES(COLOR_FMT_NV12, height),
+ uv_stride = VENUS_UV_STRIDE(COLOR_FMT_NV12, width),
+ uv_scanlines = VENUS_UV_SCANLINES(COLOR_FMT_NV12, height),
+ src_chroma_offset = width * height;
+
+ if (buffer->nAllocLen >= VENUS_BUFFER_SIZE(COLOR_FMT_NV12, width, height)) {
+ OMX_U8* src_buf = buffer->pBuffer, *dst_buf = buffer->pBuffer;
+ //Do chroma first, so that we can convert it in-place
+ src_buf += width * height;
+ dst_buf += y_stride * y_scanlines;
+ for (int line = height / 2 - 1; line >= 0; --line) {
+ memmove(dst_buf + line * uv_stride,
+ src_buf + line * width,
+ width);
+ }
+
+ dst_buf = src_buf = buffer->pBuffer;
+ //Copy the Y next
+ for (int line = height - 1; line > 0; --line) {
+ memmove(dst_buf + line * y_stride,
+ src_buf + line * width,
+ width);
+ }
+ } else {
+ DEBUG_PRINT_ERROR("Failed to align Chroma. from %u to %u : \
+ Insufficient bufferLen=%u v/s Required=%u",
+ (unsigned int)(width*height), (unsigned int)src_chroma_offset, (unsigned int)buffer->nAllocLen,
+ VENUS_BUFFER_SIZE(COLOR_FMT_NV12, width, height));
+ return false;
+ }
+
+ return true;
+}
+
+SWVENC_STATUS omx_venc::swvenc_set_color_format
+(
+ OMX_COLOR_FORMATTYPE color_format
+)
+{
+ ENTER_FUNC();
+ SWVENC_STATUS Ret = SWVENC_S_SUCCESS;
+ SWVENC_COLOR_FORMAT swvenc_color_format;
+ SWVENC_PROPERTY Prop;
+ if ((color_format == OMX_COLOR_FormatYUV420SemiPlanar) ||
+ (color_format == ((OMX_COLOR_FORMATTYPE) QOMX_COLOR_FORMATYUV420PackedSemiPlanar32m)))
+ {
+ swvenc_color_format = SWVENC_COLOR_FORMAT_NV12;
+ }
+ else if (color_format == ((OMX_COLOR_FORMATTYPE) QOMX_COLOR_FormatYVU420SemiPlanar))
+ {
+ swvenc_color_format = SWVENC_COLOR_FORMAT_NV21;
+ }
+ else
+ {
+ DEBUG_PRINT_ERROR("%s: color_format %d invalid",__FUNCTION__,color_format);
+ RETURN(SWVENC_S_FAILURE);
+ }
+ /* set the input color format */
+ Prop.id = SWVENC_PROPERTY_ID_COLOR_FORMAT;
+ Prop.info.color_format = swvenc_color_format;
+ Ret = swvenc_setproperty(m_hSwVenc, &Prop);
+ if (Ret != SWVENC_S_SUCCESS)
+ {
+ DEBUG_PRINT_ERROR("%s, swvenc_setproperty failed (%d)",
+ __FUNCTION__, Ret);
+ Ret = SWVENC_S_FAILURE;
+ }
+ RETURN(Ret);
+}
diff --git a/msmcobalt/mm-video-v4l2/vidc/venc/src/omx_video_base.cpp b/msm8998/mm-video-v4l2/vidc/venc/src/omx_video_base.cpp
similarity index 98%
rename from msmcobalt/mm-video-v4l2/vidc/venc/src/omx_video_base.cpp
rename to msm8998/mm-video-v4l2/vidc/venc/src/omx_video_base.cpp
index 30fcfcd..7563ae3 100644
--- a/msmcobalt/mm-video-v4l2/vidc/venc/src/omx_video_base.cpp
+++ b/msm8998/mm-video-v4l2/vidc/venc/src/omx_video_base.cpp
@@ -47,11 +47,12 @@
#include <fcntl.h>
#include <unistd.h>
#include <sys/prctl.h>
+#include <sys/ioctl.h>
#ifdef _ANDROID_ICS_
#include <media/hardware/HardwareAPI.h>
#include <gralloc_priv.h>
#endif
-#ifndef _ANDROID_
+#ifdef _USE_GLIB_
#include <glib.h>
#define strlcpy g_strlcpy
#endif
@@ -1300,6 +1301,7 @@
if (ident == OMX_COMPONENT_GENERATE_FTB ) {
pending_output_buffers++;
+ VIDC_TRACE_INT_LOW("FTB-pending", pending_output_buffers);
fill_buffer_done(&m_cmp,(OMX_BUFFERHEADERTYPE *)p2);
} else if (ident == OMX_COMPONENT_GENERATE_FBD) {
fill_buffer_done(&m_cmp,(OMX_BUFFERHEADERTYPE *)p1);
@@ -1342,6 +1344,7 @@
m_etb_q.pop_entry(&p1,&p2,&ident);
if (ident == OMX_COMPONENT_GENERATE_ETB) {
pending_input_buffers++;
+ VIDC_TRACE_INT_LOW("ETB-pending", pending_input_buffers);
empty_buffer_done(&m_cmp,(OMX_BUFFERHEADERTYPE *)p2);
} else if (ident == OMX_COMPONENT_GENERATE_EBD) {
empty_buffer_done(&m_cmp,(OMX_BUFFERHEADERTYPE *)p1);
@@ -1404,6 +1407,7 @@
m_etb_q.pop_entry(&p1,&p2,&ident);
if (ident == OMX_COMPONENT_GENERATE_ETB) {
pending_input_buffers++;
+ VIDC_TRACE_INT_LOW("ETB-pending", pending_input_buffers);
empty_buffer_done(&m_cmp,(OMX_BUFFERHEADERTYPE *)p2);
} else if (ident == OMX_COMPONENT_GENERATE_EBD) {
empty_buffer_done(&m_cmp,(OMX_BUFFERHEADERTYPE *)p1);
@@ -1435,6 +1439,7 @@
if (ident == OMX_COMPONENT_GENERATE_FTB ) {
pending_output_buffers++;
+ VIDC_TRACE_INT_LOW("FTB-pending", pending_output_buffers);
fill_buffer_done(&m_cmp,(OMX_BUFFERHEADERTYPE *)p2);
} else if (ident == OMX_COMPONENT_GENERATE_FBD) {
fill_buffer_done(&m_cmp,(OMX_BUFFERHEADERTYPE *)p1);
@@ -3792,6 +3797,7 @@
OMX_ERRORTYPE omx_video::empty_this_buffer_proxy(OMX_IN OMX_HANDLETYPE hComp,
OMX_IN OMX_BUFFERHEADERTYPE* buffer)
{
+ VIDC_TRACE_NAME_HIGH("ETB");
(void)hComp;
OMX_U8 *pmem_data_buf = NULL;
int push_cnt = 0;
@@ -3836,6 +3842,7 @@
if (media_buffer->meta_handle == NULL)
met_error = true;
else {
+ // TBD: revisit this check !
int nFds = media_buffer->meta_handle->numFds,
nInt = media_buffer->meta_handle->numInts;
met_error = ((nFds == 1 && nInt >= 2) /*normal*/ ||
@@ -3863,6 +3870,7 @@
}
pending_input_buffers++;
+ VIDC_TRACE_INT_LOW("ETB-pending", pending_input_buffers);
if (input_flush_progress == true) {
post_event ((unsigned long)buffer,0,
OMX_COMPONENT_GENERATE_EBD);
@@ -3884,13 +3892,19 @@
}
if (media_buffer->buffer_type == LEGACY_CAM_SOURCE) {
Input_pmem_info.buffer = media_buffer;
- Input_pmem_info.fd = media_buffer->meta_handle->data[0];
+ Input_pmem_info.fd = MetaBufferUtil::getFdAt(media_buffer->meta_handle, 0);
#ifdef _MSM8974_
fd = Input_pmem_info.fd;
#endif
- Input_pmem_info.offset = media_buffer->meta_handle->data[1];
- Input_pmem_info.size = media_buffer->meta_handle->data[2];
- DEBUG_PRINT_LOW("ETB (meta-Camera) fd = %d, offset = %d, size = %d",
+ int offset = MetaBufferUtil::getIntAt(media_buffer->meta_handle, 0, MetaBufferUtil::INT_OFFSET);
+ int size = MetaBufferUtil::getIntAt(media_buffer->meta_handle, 0, MetaBufferUtil::INT_SIZE);
+ if (offset < 0 || size < 0) {
+ DEBUG_PRINT_ERROR("meta-buffer is invalid!");
+ return OMX_ErrorBadParameter;
+ }
+ Input_pmem_info.offset = offset;
+ Input_pmem_info.size = size;
+ DEBUG_PRINT_INFO("ETB (meta-Camera) fd = %d, offset = %d, size = %d",
Input_pmem_info.fd, Input_pmem_info.offset,
Input_pmem_info.size);
} else {
@@ -3956,6 +3970,7 @@
post_event ((unsigned long)buffer,0,OMX_COMPONENT_GENERATE_EBD);
/*Generate an async error and move to invalid state*/
pending_input_buffers--;
+ VIDC_TRACE_INT_LOW("ETB-pending", pending_input_buffers);
if (hw_overload) {
return OMX_ErrorInsufficientResources;
}
@@ -4033,6 +4048,7 @@
OMX_IN OMX_HANDLETYPE hComp,
OMX_IN OMX_BUFFERHEADERTYPE* bufferAdd)
{
+ VIDC_TRACE_NAME_HIGH("FTB");
(void)hComp;
OMX_U8 *pmem_data_buf = NULL;
OMX_ERRORTYPE nRet = OMX_ErrorNone;
@@ -4045,6 +4061,7 @@
}
pending_output_buffers++;
+ VIDC_TRACE_INT_LOW("FTB-pending", pending_output_buffers);
/*Return back the output buffer to client*/
if ( m_sOutPortDef.bEnabled != OMX_TRUE || output_flush_progress == true) {
DEBUG_PRINT_LOW("o/p port is Disabled or Flush in Progress");
@@ -4062,6 +4079,7 @@
DEBUG_PRINT_ERROR("ERROR: dev_fill_buf() Failed");
post_event ((unsigned long)bufferAdd,0,OMX_COMPONENT_GENERATE_FBD);
pending_output_buffers--;
+ VIDC_TRACE_INT_LOW("FTB-pending", pending_output_buffers);
return OMX_ErrorBadParameter;
}
@@ -4432,6 +4450,7 @@
OMX_ERRORTYPE omx_video::fill_buffer_done(OMX_HANDLETYPE hComp,
OMX_BUFFERHEADERTYPE * buffer)
{
+ VIDC_TRACE_NAME_HIGH("FBD");
#ifdef _MSM8974_
int index = buffer - m_out_mem_ptr;
#endif
@@ -4442,6 +4461,9 @@
}
pending_output_buffers--;
+ VIDC_TRACE_INT_LOW("FTB-pending", pending_output_buffers);
+ VIDC_TRACE_INT_LOW("FBD-TS", buffer->nTimeStamp / 1000);
+ VIDC_TRACE_INT_LOW("FBD-size", buffer->nFilledLen);
if (secure_session && m_pCallbacks.FillBufferDone) {
if (buffer->nFilledLen > 0)
@@ -4485,6 +4507,7 @@
OMX_ERRORTYPE omx_video::empty_buffer_done(OMX_HANDLETYPE hComp,
OMX_BUFFERHEADERTYPE* buffer)
{
+ VIDC_TRACE_NAME_HIGH("EBD");
int buffer_index = -1;
buffer_index = buffer - ((mUseProxyColorFormat && !mUsesColorConversion) ? meta_buffer_hdr : m_inp_mem_ptr);
@@ -4496,6 +4519,7 @@
}
pending_input_buffers--;
+ VIDC_TRACE_INT_LOW("ETB-pending", pending_input_buffers);
if (mUseProxyColorFormat &&
(buffer_index >= 0 && (buffer_index < (int)m_sInPortDef.nBufferCountActual))) {
@@ -4853,13 +4877,17 @@
} else {
media_ptr = (LEGACY_CAM_METADATA_TYPE *) buffer->pBuffer;
if (media_ptr && media_ptr->meta_handle) {
- if (media_ptr->buffer_type == LEGACY_CAM_SOURCE &&
- media_ptr->meta_handle->numFds == 1 &&
- media_ptr->meta_handle->numInts >= 2) {
- Input_pmem.fd = media_ptr->meta_handle->data[0];
+ if (media_ptr->buffer_type == LEGACY_CAM_SOURCE) {
Input_pmem.buffer = media_ptr;
- Input_pmem.size = media_ptr->meta_handle->data[2];
- Input_pmem.offset = media_ptr->meta_handle->data[1];
+ Input_pmem.fd = MetaBufferUtil::getFdAt(media_ptr->meta_handle, 0);
+ int size = MetaBufferUtil::getIntAt(media_ptr->meta_handle, 0, MetaBufferUtil::INT_SIZE);
+ int offset = MetaBufferUtil::getIntAt(media_ptr->meta_handle, 0, MetaBufferUtil::INT_OFFSET);
+ if (Input_pmem.fd < 0 || size < 0 || offset < 0) {
+ DEBUG_PRINT_ERROR("Invalid meta buffer");
+ meta_error = true;
+ }
+ Input_pmem.size = size;
+ Input_pmem.offset = offset;
DEBUG_PRINT_LOW("EBD fd = %d, offset = %d, size = %d",Input_pmem.fd,
Input_pmem.offset,
Input_pmem.size);
@@ -5039,6 +5067,7 @@
OMX_ERRORTYPE omx_video::empty_this_buffer_opaque(OMX_IN OMX_HANDLETYPE hComp,
OMX_IN OMX_BUFFERHEADERTYPE* buffer)
{
+ VIDC_TRACE_NAME_LOW("ETB-Opaque");
unsigned nBufIndex = 0;
OMX_ERRORTYPE ret = OMX_ErrorNone;
VideoGrallocMetadata *media_buffer; // This method primarily assumes gralloc-metadata
@@ -5114,6 +5143,12 @@
#ifdef _MSM8974_
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);
+
#endif
}
}
@@ -5297,9 +5332,9 @@
/*Will enable to verify camcorder in current TIPS can be removed*/
if (media_buffer->buffer_type == LEGACY_CAM_SOURCE) {
Input_pmem_info.buffer = media_buffer;
- Input_pmem_info.fd = media_buffer->meta_handle->data[0];
- Input_pmem_info.offset = media_buffer->meta_handle->data[1];
- Input_pmem_info.size = media_buffer->meta_handle->data[2];
+ Input_pmem_info.fd = MetaBufferUtil::getFdAt(media_buffer->meta_handle, 0);
+ Input_pmem_info.offset = MetaBufferUtil::getIntAt(media_buffer->meta_handle, 0, MetaBufferUtil::INT_OFFSET);
+ Input_pmem_info.size = MetaBufferUtil::getIntAt(media_buffer->meta_handle, 0, MetaBufferUtil::INT_SIZE);
m_graphicbuffer_size = Input_pmem_info.size;
DEBUG_PRINT_LOW("ETB fd = %d, offset = %d, size = %d",Input_pmem_info.fd,
Input_pmem_info.offset,
@@ -5398,5 +5433,6 @@
//buffer is sent to the the encoder
m_pCallbacks.EmptyBufferDone(hComp, m_app_data, buffer);
--pending_input_buffers;
+ VIDC_TRACE_INT_LOW("ETB-pending", pending_input_buffers);
return retVal;
}
diff --git a/msmcobalt/mm-video-v4l2/vidc/venc/src/omx_video_encoder.cpp b/msm8998/mm-video-v4l2/vidc/venc/src/omx_video_encoder.cpp
similarity index 98%
rename from msmcobalt/mm-video-v4l2/vidc/venc/src/omx_video_encoder.cpp
rename to msm8998/mm-video-v4l2/vidc/venc/src/omx_video_encoder.cpp
index 6c087ff..d5ac1d9 100644
--- a/msmcobalt/mm-video-v4l2/vidc/venc/src/omx_video_encoder.cpp
+++ b/msm8998/mm-video-v4l2/vidc/venc/src/omx_video_encoder.cpp
@@ -36,7 +36,7 @@
#ifdef _ANDROID_
#include <cutils/properties.h>
#endif
-#ifndef _ANDROID_
+#ifdef _USE_GLIB_
#include <glib.h>
#define strlcpy g_strlcpy
#endif
@@ -44,7 +44,6 @@
extern int m_pipe;
static int bframes;
static int entropy;
-static int perfmode;
static int lowlatency;
// factory function executed by the core to create instances
void *get_omx_component_factory_fn(void)
@@ -140,7 +139,7 @@
bframes = entropy = 0;
char property_value[PROPERTY_VALUE_MAX] = {0};
property_get("vidc.debug.level", property_value, "1");
- debug_level = atoi(property_value);
+ debug_level = strtoul(property_value, NULL, 16);
property_value[0] = '\0';
property_get("vidc.debug.bframes", property_value, "0");
bframes = atoi(property_value);
@@ -148,9 +147,6 @@
property_get("vidc.debug.entropy", property_value, "1");
entropy = !!atoi(property_value);
property_value[0] = '\0';
- property_get("vidc.debug.perf.mode", property_value, "0");
- perfmode = atoi(property_value);
- property_value[0] = '\0';
handle = NULL;
property_get("vidc.debug.lowlatency", property_value, "0");
lowlatency = atoi(property_value);
@@ -608,14 +604,6 @@
}
}
- if (perfmode) {
- QOMX_EXTNINDEX_VIDEO_PERFMODE pParam;
- pParam.nPerfMode = perfmode;
- DEBUG_PRINT_LOW("Perfmode = 0x%x", pParam.nPerfMode);
- if (!handle->venc_set_config(&pParam, (OMX_INDEXTYPE)OMX_QcomIndexConfigVideoVencPerfMode))
- DEBUG_PRINT_ERROR("Failed setting PerfMode to %d", pParam.nPerfMode);
- }
-
if (lowlatency)
{
QOMX_ENABLETYPE low_latency;
@@ -1732,6 +1720,13 @@
OMX_VIDEO_ANDROID_MAXTEMPORALLAYERS * sizeof(OMX_U32));
break;
}
+ case OMX_QTIIndexParamDisablePQ:
+ {
+ VALIDATE_OMX_PARAM_DATA(paramData, QOMX_DISABLETYPE);
+ handle->venc_set_param(paramData,
+ (OMX_INDEXTYPE)OMX_QTIIndexParamDisablePQ);
+ break;
+ }
case OMX_IndexParamVideoSliceFMO:
default:
{
@@ -1901,10 +1896,6 @@
if(hier_b_enabled && m_state == OMX_StateLoaded) {
DEBUG_PRINT_INFO("B-frames setting is supported if HierB is enabled");
}
- else {
- DEBUG_PRINT_HIGH("Dynamically changing B-frames not supported");
- return OMX_ErrorUnsupportedSetting;
- }
}
if (handle->venc_set_config(configData, (OMX_INDEXTYPE) QOMX_IndexConfigVideoIntraperiod) != true) {
DEBUG_PRINT_ERROR("ERROR: Setting QOMX_IndexConfigVideoIntraperiod failed");
@@ -1991,17 +1982,6 @@
DEBUG_PRINT_ERROR("ERROR: Set OMX_IndexConfigCommonRotate failed");
return OMX_ErrorUnsupportedSetting;
}
- if (nRotation == 90 || nRotation == 270) {
- OMX_U32 nFrameWidth;
- OMX_U32 nFrameHeight;
-
- DEBUG_PRINT_HIGH("set_config: updating port Dims Rotation angle = %d",
- pParam->nRotation);
- nFrameWidth = m_sOutPortDef.format.video.nFrameWidth;
- nFrameHeight = m_sOutPortDef.format.video.nFrameHeight;
- m_sOutPortDef.format.video.nFrameWidth = nFrameHeight;
- m_sOutPortDef.format.video.nFrameHeight = nFrameWidth;
- }
m_sConfigFrameRotation.nRotation = pParam->nRotation;
break;
}
diff --git a/msmcobalt/mm-video-v4l2/vidc/venc/src/video_encoder_device.cpp b/msm8998/mm-video-v4l2/vidc/venc/src/video_encoder_device.cpp
similarity index 100%
rename from msmcobalt/mm-video-v4l2/vidc/venc/src/video_encoder_device.cpp
rename to msm8998/mm-video-v4l2/vidc/venc/src/video_encoder_device.cpp
diff --git a/msmcobalt/mm-video-v4l2/vidc/venc/src/video_encoder_device_v4l2.cpp b/msm8998/mm-video-v4l2/vidc/venc/src/video_encoder_device_v4l2.cpp
similarity index 94%
rename from msmcobalt/mm-video-v4l2/vidc/venc/src/video_encoder_device_v4l2.cpp
rename to msm8998/mm-video-v4l2/vidc/venc/src/video_encoder_device_v4l2.cpp
index b2a00cd..73e7cf7 100644
--- a/msmcobalt/mm-video-v4l2/vidc/venc/src/video_encoder_device_v4l2.cpp
+++ b/msm8998/mm-video-v4l2/vidc/venc/src/video_encoder_device_v4l2.cpp
@@ -50,6 +50,9 @@
#include <qdMetaData.h>
+#define ATRACE_TAG ATRACE_TAG_VIDEO
+#include <utils/Trace.h>
+
#define YUV_STATS_LIBRARY_NAME "libgpustats.so" // UBWC case: use GPU library
#define ALIGN(x, to_align) ((((unsigned long) x) + (to_align - 1)) & ~(to_align - 1))
@@ -62,9 +65,6 @@
#define MPEG4_SP_START 0
#define MPEG4_ASP_START (MPEG4_SP_START + 10)
#define H263_BP_START 0
-#define H264_BP_START 0
-#define H264_HP_START (H264_BP_START + 18)
-#define H264_MP_START (H264_BP_START + 36)
#define HEVC_MAIN_START 0
#define HEVC_MAIN10_START (HEVC_MAIN_START + 13)
#define POLL_TIMEOUT 1000
@@ -72,7 +72,6 @@
#define SZ_4K 0x1000
#define SZ_1M 0x100000
-#define MAX_FPS_PQ 60
/* MPEG4 profile and level table*/
static const unsigned int mpeg4_profile_level_table[][MAX_PROFILE_PARAMS]= {
@@ -102,101 +101,26 @@
/* H264 profile and level table*/
static const unsigned int h264_profile_level_table[][MAX_PROFILE_PARAMS]= {
- /*max mb per frame, max mb per sec, max bitrate, level, profile, dpbmbs*/
- {99,1485,64000,OMX_VIDEO_AVCLevel1,OMX_VIDEO_AVCProfileBaseline,396},
- {99,1485,128000,OMX_VIDEO_AVCLevel1b,OMX_VIDEO_AVCProfileBaseline,396},
- {396,3000,192000,OMX_VIDEO_AVCLevel11,OMX_VIDEO_AVCProfileBaseline,900},
- {396,6000,384000,OMX_VIDEO_AVCLevel12,OMX_VIDEO_AVCProfileBaseline,2376},
- {396,11880,768000,OMX_VIDEO_AVCLevel13,OMX_VIDEO_AVCProfileBaseline,2376},
- {396,11880,2000000,OMX_VIDEO_AVCLevel2,OMX_VIDEO_AVCProfileBaseline,2376},
- {792,19800,4000000,OMX_VIDEO_AVCLevel21,OMX_VIDEO_AVCProfileBaseline,4752},
- {1620,20250,4000000,OMX_VIDEO_AVCLevel22,OMX_VIDEO_AVCProfileBaseline,8100},
- {1620,40500,10000000,OMX_VIDEO_AVCLevel3,OMX_VIDEO_AVCProfileBaseline,8100},
- {3600,108000,14000000,OMX_VIDEO_AVCLevel31,OMX_VIDEO_AVCProfileBaseline,18000},
- {5120,216000,20000000,OMX_VIDEO_AVCLevel32,OMX_VIDEO_AVCProfileBaseline,20480},
- {8192,245760,20000000,OMX_VIDEO_AVCLevel4,OMX_VIDEO_AVCProfileBaseline,32768},
- {8192,245760,50000000,OMX_VIDEO_AVCLevel41,OMX_VIDEO_AVCProfileBaseline,32768},
- {8704,522240,50000000,OMX_VIDEO_AVCLevel42,OMX_VIDEO_AVCProfileBaseline,34816},
- {22080,589824,135000000,OMX_VIDEO_AVCLevel5,OMX_VIDEO_AVCProfileBaseline,110400},
- {36864,983040,240000000,OMX_VIDEO_AVCLevel51,OMX_VIDEO_AVCProfileBaseline,184320},
+ /*max mb per frame, max mb per sec, max bitrate, profile, ignore for h264, dpbmbs*/
+ {99,1485,64000,OMX_VIDEO_AVCLevel1,0,396},
+ {99,1485,128000,OMX_VIDEO_AVCLevel1b,0,396},
+ {396,3000,192000,OMX_VIDEO_AVCLevel11,0,900},
+ {396,6000,384000,OMX_VIDEO_AVCLevel12,0,2376},
+ {396,11880,768000,OMX_VIDEO_AVCLevel13,0,2376},
+ {396,11880,2000000,OMX_VIDEO_AVCLevel2,0,2376},
+ {792,19800,4000000,OMX_VIDEO_AVCLevel21,0,4752},
+ {1620,20250,4000000,OMX_VIDEO_AVCLevel22,0,8100},
+ {1620,40500,10000000,OMX_VIDEO_AVCLevel3,0,8100},
+ {3600,108000,14000000,OMX_VIDEO_AVCLevel31,0,18000},
+ {5120,216000,20000000,OMX_VIDEO_AVCLevel32,0,20480},
+ {8192,245760,20000000,OMX_VIDEO_AVCLevel4,0,32768},
+ {8192,245760,50000000,OMX_VIDEO_AVCLevel41,0,32768},
+ {8704,522240,50000000,OMX_VIDEO_AVCLevel42,0,34816},
+ {22080,589824,135000000,OMX_VIDEO_AVCLevel5,0,110400},
+ {36864,983040,240000000,OMX_VIDEO_AVCLevel51,0,184320},
+ {36864,2073600,240000000,OMX_VIDEO_AVCLevel52,0,184320},
/* Please update H264_HP_START accordingly, while adding new element */
{0,0,0,0,0,0},
-
- {99,1485,64000,OMX_VIDEO_AVCLevel1, QOMX_VIDEO_AVCProfileConstrainedBaseline,396},
- {99,1485,128000,OMX_VIDEO_AVCLevel1b, QOMX_VIDEO_AVCProfileConstrainedBaseline,396},
- {396,3000,192000,OMX_VIDEO_AVCLevel11, QOMX_VIDEO_AVCProfileConstrainedBaseline,900},
- {396,6000,384000,OMX_VIDEO_AVCLevel12, QOMX_VIDEO_AVCProfileConstrainedBaseline,2376},
- {396,11880,768000,OMX_VIDEO_AVCLevel13, QOMX_VIDEO_AVCProfileConstrainedBaseline,2376},
- {396,11880,2000000,OMX_VIDEO_AVCLevel2, QOMX_VIDEO_AVCProfileConstrainedBaseline,2376},
- {792,19800,4000000,OMX_VIDEO_AVCLevel21, QOMX_VIDEO_AVCProfileConstrainedBaseline,4752},
- {1620,20250,4000000,OMX_VIDEO_AVCLevel22, QOMX_VIDEO_AVCProfileConstrainedBaseline,8100},
- {1620,40500,10000000,OMX_VIDEO_AVCLevel3, QOMX_VIDEO_AVCProfileConstrainedBaseline,8100},
- {3600,108000,14000000,OMX_VIDEO_AVCLevel31, QOMX_VIDEO_AVCProfileConstrainedBaseline,18000},
- {5120,216000,20000000,OMX_VIDEO_AVCLevel32, QOMX_VIDEO_AVCProfileConstrainedBaseline,20480},
- {8192,245760,20000000,OMX_VIDEO_AVCLevel4, QOMX_VIDEO_AVCProfileConstrainedBaseline,32768},
- {8192,245760,50000000,OMX_VIDEO_AVCLevel41, QOMX_VIDEO_AVCProfileConstrainedBaseline,32768},
- {8704,522240,50000000,OMX_VIDEO_AVCLevel42, QOMX_VIDEO_AVCProfileConstrainedBaseline,34816},
- {22080,589824,135000000,OMX_VIDEO_AVCLevel5, QOMX_VIDEO_AVCProfileConstrainedBaseline,110400},
- {36864,983040,240000000,OMX_VIDEO_AVCLevel51, QOMX_VIDEO_AVCProfileConstrainedBaseline,184320},
- /* Please update H264_HP_START accordingly, while adding new element */
- {0,0,0,0,0,0},
-
- {99,1485,80000,OMX_VIDEO_AVCLevel1,OMX_VIDEO_AVCProfileHigh,396},
- {99,1485,200000,OMX_VIDEO_AVCLevel1b,OMX_VIDEO_AVCProfileHigh,396},
- {396,3000,300000,OMX_VIDEO_AVCLevel11,OMX_VIDEO_AVCProfileHigh,900},
- {396,6000,600000,OMX_VIDEO_AVCLevel12,OMX_VIDEO_AVCProfileHigh,2376},
- {396,11880,1200000,OMX_VIDEO_AVCLevel13,OMX_VIDEO_AVCProfileHigh,2376},
- {396,11880,3125000,OMX_VIDEO_AVCLevel2,OMX_VIDEO_AVCProfileHigh,2376},
- {792,19800,6250000,OMX_VIDEO_AVCLevel21,OMX_VIDEO_AVCProfileHigh,4752},
- {1620,20250,6250000,OMX_VIDEO_AVCLevel22,OMX_VIDEO_AVCProfileHigh,8100},
- {1620,40500,15625000,OMX_VIDEO_AVCLevel3,OMX_VIDEO_AVCProfileHigh,8100},
- {3600,108000,21875000,OMX_VIDEO_AVCLevel31,OMX_VIDEO_AVCProfileHigh,18000},
- {5120,216000,31250000,OMX_VIDEO_AVCLevel32,OMX_VIDEO_AVCProfileHigh,20480},
- {8192,245760,31250000,OMX_VIDEO_AVCLevel4,OMX_VIDEO_AVCProfileHigh,32768},
- {8192,245760,62500000,OMX_VIDEO_AVCLevel41,OMX_VIDEO_AVCProfileHigh,32768},
- {8704,522240,62500000,OMX_VIDEO_AVCLevel42,OMX_VIDEO_AVCProfileHigh,34816},
- {22080,589824,168750000,OMX_VIDEO_AVCLevel5,OMX_VIDEO_AVCProfileHigh,110400},
- {36864,983040,300000000,OMX_VIDEO_AVCLevel51,OMX_VIDEO_AVCProfileHigh,184320},
- /* Please update H264_MP_START accordingly, while adding new element */
- {0,0,0,0,0,0},
-
- {99,1485,80000,OMX_VIDEO_AVCLevel1,QOMX_VIDEO_AVCProfileConstrainedHigh,396},
- {99,1485,200000,OMX_VIDEO_AVCLevel1b, QOMX_VIDEO_AVCProfileConstrainedHigh,396},
- {396,3000,300000,OMX_VIDEO_AVCLevel11, QOMX_VIDEO_AVCProfileConstrainedHigh,900},
- {396,6000,600000,OMX_VIDEO_AVCLevel12, QOMX_VIDEO_AVCProfileConstrainedHigh,2376},
- {396,11880,1200000,OMX_VIDEO_AVCLevel13, QOMX_VIDEO_AVCProfileConstrainedHigh,2376},
- {396,11880,3125000,OMX_VIDEO_AVCLevel2, QOMX_VIDEO_AVCProfileConstrainedHigh,2376},
- {792,19800,6250000,OMX_VIDEO_AVCLevel21, QOMX_VIDEO_AVCProfileConstrainedHigh,4752},
- {1620,20250,6250000,OMX_VIDEO_AVCLevel22, QOMX_VIDEO_AVCProfileConstrainedHigh,8100},
- {1620,40500,15625000,OMX_VIDEO_AVCLevel3, QOMX_VIDEO_AVCProfileConstrainedHigh,8100},
- {3600,108000,21875000,OMX_VIDEO_AVCLevel31, QOMX_VIDEO_AVCProfileConstrainedHigh,18000},
- {5120,216000,31250000,OMX_VIDEO_AVCLevel32, QOMX_VIDEO_AVCProfileConstrainedHigh,20480},
- {8192,245760,31250000,OMX_VIDEO_AVCLevel4, QOMX_VIDEO_AVCProfileConstrainedHigh,32768},
- {8192,245760,62500000,OMX_VIDEO_AVCLevel41, QOMX_VIDEO_AVCProfileConstrainedHigh,32768},
- {8704,522240,62500000,OMX_VIDEO_AVCLevel42, QOMX_VIDEO_AVCProfileConstrainedHigh,34816},
- {22080,589824,168750000,OMX_VIDEO_AVCLevel5, QOMX_VIDEO_AVCProfileConstrainedHigh,110400},
- {36864,983040,300000000,OMX_VIDEO_AVCLevel51, QOMX_VIDEO_AVCProfileConstrainedHigh,184320},
- /* Please update H264_MP_START accordingly, while adding new element */
- {0,0,0,0,0,0},
-
- {99,1485,64000,OMX_VIDEO_AVCLevel1,OMX_VIDEO_AVCProfileMain,396},
- {99,1485,128000,OMX_VIDEO_AVCLevel1b,OMX_VIDEO_AVCProfileMain,396},
- {396,3000,192000,OMX_VIDEO_AVCLevel11,OMX_VIDEO_AVCProfileMain,900},
- {396,6000,384000,OMX_VIDEO_AVCLevel12,OMX_VIDEO_AVCProfileMain,2376},
- {396,11880,768000,OMX_VIDEO_AVCLevel13,OMX_VIDEO_AVCProfileMain,2376},
- {396,11880,2000000,OMX_VIDEO_AVCLevel2,OMX_VIDEO_AVCProfileMain,2376},
- {792,19800,4000000,OMX_VIDEO_AVCLevel21,OMX_VIDEO_AVCProfileMain,4752},
- {1620,20250,4000000,OMX_VIDEO_AVCLevel22,OMX_VIDEO_AVCProfileMain,8100},
- {1620,40500,10000000,OMX_VIDEO_AVCLevel3,OMX_VIDEO_AVCProfileMain,8100},
- {3600,108000,14000000,OMX_VIDEO_AVCLevel31,OMX_VIDEO_AVCProfileMain,18000},
- {5120,216000,20000000,OMX_VIDEO_AVCLevel32,OMX_VIDEO_AVCProfileMain,20480},
- {8192,245760,20000000,OMX_VIDEO_AVCLevel4,OMX_VIDEO_AVCProfileMain,32768},
- {8192,245760,50000000,OMX_VIDEO_AVCLevel41,OMX_VIDEO_AVCProfileMain,32768},
- {8704,522240,50000000,OMX_VIDEO_AVCLevel42,OMX_VIDEO_AVCProfileMain,34816},
- {22080,589824,135000000,OMX_VIDEO_AVCLevel5,OMX_VIDEO_AVCProfileMain,110400},
- {36864,983040,240000000,OMX_VIDEO_AVCLevel51,OMX_VIDEO_AVCProfileMain,184320},
- {0,0,0,0,0,0}
-
};
/* H263 profile and level table*/
@@ -217,36 +141,23 @@
/* HEVC profile and level table*/
static const unsigned int hevc_profile_level_table[][MAX_PROFILE_PARAMS]= {
- /*max mb per frame, max mb per sec, max bitrate, level, profile*/
- {99,1485,128000,OMX_VIDEO_HEVCMainTierLevel1,OMX_VIDEO_HEVCProfileMain,0},
- {396,11880,1500000,OMX_VIDEO_HEVCMainTierLevel2,OMX_VIDEO_HEVCProfileMain,0},
- {900,27000,3000000,OMX_VIDEO_HEVCMainTierLevel21,OMX_VIDEO_HEVCProfileMain,0},
- {2025,60750,6000000,OMX_VIDEO_HEVCMainTierLevel3,OMX_VIDEO_HEVCProfileMain,0},
- {8640,259200,10000000,OMX_VIDEO_HEVCMainTierLevel31,OMX_VIDEO_HEVCProfileMain,0},
- {34560,1166400,12000000,OMX_VIDEO_HEVCMainTierLevel4,OMX_VIDEO_HEVCProfileMain,0},
- {138240,4147200,20000000,OMX_VIDEO_HEVCMainTierLevel41,OMX_VIDEO_HEVCProfileMain,0},
- {138240,8294400,25000000,OMX_VIDEO_HEVCMainTierLevel5,OMX_VIDEO_HEVCProfileMain,0},
- {138240,4147200,40000000,OMX_VIDEO_HEVCMainTierLevel51,OMX_VIDEO_HEVCProfileMain,0},
- {138240,4147200,50000000,OMX_VIDEO_HEVCHighTierLevel41,OMX_VIDEO_HEVCProfileMain,0},
- {138240,4147200,100000000,OMX_VIDEO_HEVCHighTierLevel5,OMX_VIDEO_HEVCProfileMain,0},
- {138240,4147200,160000000,OMX_VIDEO_HEVCHighTierLevel51,OMX_VIDEO_HEVCProfileMain,0},
- {138240,4147200,240000000,OMX_VIDEO_HEVCHighTierLevel52,OMX_VIDEO_HEVCProfileMain,0},
+ /*max mb per frame, max mb per sec, max bitrate, level, ignore profile and dpbmbs for HEVC */
+ {99,1485,128000,OMX_VIDEO_HEVCMainTierLevel1,0,0},
+ {396,11880,1500000,OMX_VIDEO_HEVCMainTierLevel2,0,0},
+ {900,27000,3000000,OMX_VIDEO_HEVCMainTierLevel21,0,0},
+ {2025,60750,6000000,OMX_VIDEO_HEVCMainTierLevel3,0,0},
+ {8640,259200,10000000,OMX_VIDEO_HEVCMainTierLevel31,0,0},
+ {34560,1166400,12000000,OMX_VIDEO_HEVCMainTierLevel4,0,0},
+ {138240,4147200,20000000,OMX_VIDEO_HEVCMainTierLevel41,0,0},
+ {138240,8294400,25000000,OMX_VIDEO_HEVCMainTierLevel5,0,0},
+ {138240,4147200,40000000,OMX_VIDEO_HEVCMainTierLevel51,0,0},
+ {138240,4147200,50000000,OMX_VIDEO_HEVCHighTierLevel41,0,0},
+ {138240,4147200,100000000,OMX_VIDEO_HEVCHighTierLevel5,0,0},
+ {138240,4147200,160000000,OMX_VIDEO_HEVCHighTierLevel51,0,0},
+ {138240,4147200,240000000,OMX_VIDEO_HEVCHighTierLevel52,0,0},
/* Please update HEVC_MAIN_START accordingly, while adding new element */
{0,0,0,0,0},
- {99,1485,128000,OMX_VIDEO_HEVCMainTierLevel1,OMX_VIDEO_HEVCProfileMain10,0},
- {396,11880,1500000,OMX_VIDEO_HEVCMainTierLevel2,OMX_VIDEO_HEVCProfileMain10,0},
- {900,27000,3000000,OMX_VIDEO_HEVCMainTierLevel21,OMX_VIDEO_HEVCProfileMain10,0},
- {2025,60750,6000000,OMX_VIDEO_HEVCMainTierLevel3,OMX_VIDEO_HEVCProfileMain10,0},
- {8640,259200,10000000,OMX_VIDEO_HEVCMainTierLevel31,OMX_VIDEO_HEVCProfileMain10,0},
- {34560,1166400,12000000,OMX_VIDEO_HEVCMainTierLevel4,OMX_VIDEO_HEVCProfileMain10,0},
- {138240,4147200,20000000,OMX_VIDEO_HEVCMainTierLevel41,OMX_VIDEO_HEVCProfileMain10,0},
- {138240,8294400,25000000,OMX_VIDEO_HEVCMainTierLevel5,OMX_VIDEO_HEVCProfileMain10,0},
- {138240,4147200,40000000,OMX_VIDEO_HEVCMainTierLevel51,OMX_VIDEO_HEVCProfileMain10,0},
- {138240,4147200,50000000,OMX_VIDEO_HEVCHighTierLevel41,OMX_VIDEO_HEVCProfileMain10,0},
- {138240,4147200,100000000,OMX_VIDEO_HEVCHighTierLevel5,OMX_VIDEO_HEVCProfileMain10,0},
- {138240,4147200,160000000,OMX_VIDEO_HEVCHighTierLevel51,OMX_VIDEO_HEVCProfileMain10,0},
- {0,0,0,0,0},
};
@@ -346,14 +257,13 @@
is_csc_enabled = 0;
}
- is_pq_force_disable = 0;
#ifdef _PQ_
property_get("vidc.enc.disable.pq", property_value, "0");
if(!(strncmp(property_value, "1", PROPERTY_VALUE_MAX)) ||
!(strncmp(property_value, "true", PROPERTY_VALUE_MAX))) {
- is_pq_force_disable = 1;
+ m_pq.is_pq_force_disable = 1;
} else {
- is_pq_force_disable = 0;
+ m_pq.is_pq_force_disable = 0;
}
#endif // _PQ_
@@ -972,7 +882,7 @@
return rc;
}
-OMX_ERRORTYPE venc_dev::allocate_extradata(struct extradata_buffer_info *extradata_info)
+OMX_ERRORTYPE venc_dev::allocate_extradata(struct extradata_buffer_info *extradata_info, int flags)
{
if (extradata_info->allocated) {
DEBUG_PRINT_HIGH("2nd allocation return for port = %d",extradata_info->port_index);
@@ -993,7 +903,7 @@
extradata_info->ion.ion_device_fd = venc_handle->alloc_map_ion_memory(
extradata_info->size,
&extradata_info->ion.ion_alloc_data,
- &extradata_info->ion.fd_ion_data, 0);
+ &extradata_info->ion.fd_ion_data, flags);
if (extradata_info->ion.ion_device_fd < 0) {
@@ -1020,45 +930,38 @@
return OMX_ErrorNone;
}
-void venc_dev::free_extradata()
+void venc_dev::free_extradata(struct extradata_buffer_info *extradata_info)
{
#ifdef USE_ION
- if (output_extradata_info.uaddr) {
- munmap((void *)output_extradata_info.uaddr, output_extradata_info.size);
- close(output_extradata_info.ion.fd_ion_data.fd);
- venc_handle->free_ion_memory(&output_extradata_info.ion);
- }
- if (output_extradata_info.m_ion_dev)
- close(output_extradata_info.m_ion_dev);
-
- memset(&output_extradata_info, 0, sizeof(output_extradata_info));
- output_extradata_info.ion.fd_ion_data.fd = -1;
-
- if (input_extradata_info.uaddr) {
- munmap((void *)input_extradata_info.uaddr, input_extradata_info.size);
- close(input_extradata_info.ion.fd_ion_data.fd);
- venc_handle->free_ion_memory(&input_extradata_info.ion);
+ if (extradata_info == NULL) {
+ return;
}
- if (input_extradata_info.m_ion_dev)
- close(output_extradata_info.m_ion_dev);
+ if (extradata_info->uaddr) {
+ munmap((void *)extradata_info->uaddr, extradata_info->size);
+ extradata_info->uaddr = NULL;
+ close(extradata_info->ion.fd_ion_data.fd);
+ venc_handle->free_ion_memory(&extradata_info->ion);
+ }
- memset(&input_extradata_info, 0, sizeof(input_extradata_info));
- input_extradata_info.ion.fd_ion_data.fd = -1;
+ if (extradata_info->m_ion_dev)
+ close(extradata_info->m_ion_dev);
+ memset(extradata_info, 0, sizeof(*extradata_info));
+ extradata_info->ion.fd_ion_data.fd = -1;
+ extradata_info->allocated = OMX_FALSE;
+
+#endif // USE_ION
+}
+
+void venc_dev::free_extradata_all()
+{
+ free_extradata(&output_extradata_info);
+ free_extradata(&input_extradata_info);
#ifdef _PQ_
- if (m_pq.roi_extradata_info.uaddr) {
- munmap((void *)m_pq.roi_extradata_info.uaddr, m_pq.roi_extradata_info.size);
- close(m_pq.roi_extradata_info.ion.fd_ion_data.fd);
- venc_handle->free_ion_memory(&m_pq.roi_extradata_info.ion);
- }
-
- memset(&m_pq.roi_extradata_info, 0, sizeof(m_pq.roi_extradata_info));
- m_pq.roi_extradata_info.ion.fd_ion_data.fd = -1;
+ free_extradata(&m_pq.roi_extradata_info);
#endif // _PQ_
-
-#endif
}
bool venc_dev::venc_get_output_log_flag()
@@ -1508,13 +1411,18 @@
}
#ifdef _PQ_
- if (codec == OMX_VIDEO_CodingAVC) {
+ if (codec == OMX_VIDEO_CodingAVC && !m_pq.is_pq_force_disable) {
m_pq.init(V4L2_DEFAULT_OUTPUT_COLOR_FMT);
- allocate_extradata(&m_pq.roi_extradata_info);
m_pq.get_caps();
}
#endif // _PQ_
+ /* Enable Low power mode by default for better power */
+
+ if (venc_set_perf_mode(V4L2_MPEG_VIDC_VIDEO_PERF_POWER_SAVE) == false) {
+ DEBUG_PRINT_HIGH("Failed to set Perf Mode");
+ }
+
input_extradata_info.port_index = OUTPUT_PORT;
output_extradata_info.port_index = CAPTURE_PORT;
@@ -2574,7 +2482,8 @@
}
#ifdef _PQ_
m_pq.pConfig.a_qp.roi_enabled = (OMX_U32)true;
- m_pq.configure();
+ allocate_extradata(&m_pq.roi_extradata_info, ION_FLAG_CACHED);
+ m_pq.configure(m_sVenc_cfg.input_width, m_sVenc_cfg.input_height);
#endif // _PQ_
break;
}
@@ -2597,6 +2506,16 @@
}
break;
}
+ case OMX_QTIIndexParamDisablePQ:
+ {
+ QOMX_DISABLETYPE * pParam = (QOMX_DISABLETYPE *)paramData;
+ DEBUG_PRINT_LOW("venc_set_param: OMX_QTIIndexParamDisablePQ: %d", pParam->bDisable);
+#ifdef _PQ_
+ if (pParam->bDisable)
+ m_pq.is_pq_force_disable = true;
+#endif
+ break;
+ }
case OMX_IndexParamVideoSliceFMO:
default:
DEBUG_PRINT_ERROR("ERROR: Unsupported parameter in venc_set_param: %u",
@@ -2713,12 +2632,6 @@
DEBUG_PRINT_ERROR("ERROR: Rotation is not supported with deinterlacing");
return false;
}
- if (config_rotation->nRotation == 90 || config_rotation->nRotation == 270) {
- DEBUG_PRINT_HIGH("venc_set_config: updating the new Dims");
- nFrameWidth = m_sVenc_cfg.dvs_width;
- m_sVenc_cfg.dvs_width = m_sVenc_cfg.dvs_height;
- m_sVenc_cfg.dvs_height = nFrameWidth;
- }
if(venc_set_vpe_rotation(config_rotation->nRotation) == false) {
DEBUG_PRINT_ERROR("ERROR: Dimension Change for Rotation failed");
return false;
@@ -3154,7 +3067,7 @@
unsigned venc_dev::venc_stop_done(void)
{
struct venc_msg venc_msg;
- free_extradata();
+ free_extradata_all();
venc_msg.msgcode=VEN_MSG_STOP;
venc_msg.statuscode=VEN_S_SUCCESS;
venc_handle->async_message_process(venc_handle,&venc_msg);
@@ -3496,6 +3409,17 @@
struct v4l2_encoder_cmd enc;
DEBUG_PRINT_LOW("in %s", __func__);
+ unsigned int cookie = 0;
+ for (unsigned int i = 0; i < (sizeof(fd_list)/sizeof(fd_list[0])); i++) {
+ cookie = fd_list[i];
+ if (cookie != 0) {
+ if (!ioctl(input_extradata_info.m_ion_dev, ION_IOC_FREE, &cookie)) {
+ DEBUG_PRINT_HIGH("Freed handle = %u", cookie);
+ }
+ fd_list[i] = 0;
+ }
+ }
+
enc.cmd = V4L2_ENC_QCOM_CMD_FLUSH;
enc.flags = V4L2_QCOM_CMD_FLUSH_OUTPUT | V4L2_QCOM_CMD_FLUSH_CAPTURE;
@@ -3528,7 +3452,7 @@
extra_idx = EXTRADATA_IDX(num_input_planes);
if ((num_input_planes > 1) && (extra_idx)) {
- rc = allocate_extradata(&input_extradata_info);
+ rc = allocate_extradata(&input_extradata_info, ION_FLAG_CACHED);
if (rc)
DEBUG_PRINT_ERROR("Failed to allocate extradata: %d\n", rc);
@@ -3573,7 +3497,7 @@
extra_idx = EXTRADATA_IDX(num_output_planes);
if ((num_output_planes > 1) && (extra_idx)) {
- rc = allocate_extradata(&output_extradata_info);
+ rc = allocate_extradata(&output_extradata_info, 0);
if (rc)
DEBUG_PRINT_ERROR("Failed to allocate extradata: %d", rc);
@@ -3818,17 +3742,9 @@
struct v4l2_format fmt;
OMX_COLOR_FORMATTYPE color_format = (OMX_COLOR_FORMATTYPE)QOMX_COLOR_FORMATYUV420PackedSemiPlanar32m;
- if (!mBatchSize && hnd->numFds + hnd->numInts > 5) {
- color_format = (OMX_COLOR_FORMATTYPE)hnd->data[5];
- } else if (mBatchSize) {
- color_format = (OMX_COLOR_FORMATTYPE)BatchInfo::getColorFormatAt(hnd, 0);
- }
-
- if (!mBatchSize && hnd->numFds + hnd->numInts > 3) {
- usage = hnd->data[3];
- } else if (mBatchSize) {
- usage = BatchInfo::getUsageAt(hnd, 0);
- }
+ color_format = (OMX_COLOR_FORMATTYPE)MetaBufferUtil::getIntAt(hnd, 0, MetaBufferUtil::INT_COLORFORMAT);
+ usage = MetaBufferUtil::getIntAt(hnd, 0, MetaBufferUtil::INT_USAGE);
+ usage = usage > 0 ? usage : 0;
memset(&fmt, 0, sizeof(fmt));
if (usage & private_handle_t::PRIV_FLAGS_ITU_R_709 ||
@@ -3860,7 +3776,7 @@
buf.flags = V4L2_MSM_BUF_FLAG_YUV_601_709_CLAMP;
}
- if (!venc_set_color_format(color_format)) {
+ if (color_format > 0 && !venc_set_color_format(color_format)) {
DEBUG_PRINT_ERROR("Failed setting color format in Camerasource %lx", m_sVenc_cfg.inputformat);
return false;
}
@@ -3874,20 +3790,24 @@
// Setting batch mode is sticky. We do not expect camera to change
// between batch and normal modes at runtime.
if (mBatchSize) {
- if ((unsigned)hnd->numFds != mBatchSize) {
+ if ((unsigned int)MetaBufferUtil::getBatchSize(hnd) != mBatchSize) {
DEBUG_PRINT_ERROR("Don't support dynamic batch sizes (changed from %d->%d)",
- mBatchSize, hnd->numFds);
+ mBatchSize, MetaBufferUtil::getBatchSize(hnd));
return false;
}
return venc_empty_batch ((OMX_BUFFERHEADERTYPE*)buffer, index);
}
- if (hnd->numFds + hnd->numInts > 2) {
- plane[0].data_offset = hnd->data[1];
- plane[0].length = hnd->data[2];
- plane[0].bytesused = hnd->data[2];
+ int offset = MetaBufferUtil::getIntAt(hnd, 0, MetaBufferUtil::INT_OFFSET);
+ int length = MetaBufferUtil::getIntAt(hnd, 0, MetaBufferUtil::INT_SIZE);
+ if (offset < 0 || length < 0) {
+ DEBUG_PRINT_ERROR("Invalid meta buffer handle!");
+ return false;
}
+ plane[0].data_offset = offset;
+ plane[0].length = length;
+ plane[0].bytesused = length;
DEBUG_PRINT_LOW("venc_empty_buf: camera buf: fd = %d filled %d of %d flag 0x%x format 0x%lx",
fd, plane[0].bytesused, plane[0].length, buf.flags, m_sVenc_cfg.inputformat);
} else if (meta_buf->buffer_type == kMetadataBufferTypeGrallocSource) {
@@ -4048,13 +3968,15 @@
#ifdef _PQ_
if (!streaming[OUTPUT_PORT]) {
- /*
- * This is the place where all parameters for deciding
- * PQ enablement are aailable. Evaluate PQ for the final time.
- */
m_pq.is_YUV_format_uncertain = false;
- m_pq.reinit(m_sVenc_cfg.inputformat);
- venc_try_enable_pq();
+ if(venc_check_for_pq()) {
+ /*
+ * This is the place where all parameters for deciding
+ * PQ enablement are available. Evaluate PQ for the final time.
+ */
+ m_pq.reinit(m_sVenc_cfg.inputformat);
+ venc_configure_pq();
+ }
}
#endif // _PQ_
@@ -4068,6 +3990,8 @@
handle_input_extradata(buf);
+ VIDC_TRACE_INT_LOW("ETB-TS", bufhdr->nTimeStamp / 1000);
+
if (bufhdr->nFlags & OMX_BUFFERFLAG_EOS)
buf.flags |= V4L2_QCOM_BUF_FLAG_EOS;
@@ -4135,12 +4059,12 @@
if (!hnd) {
DEBUG_PRINT_ERROR("venc_empty_batch: invalid handle !");
return false;
- } else if (hnd->numFds > kMaxBuffersInBatch) {
+ } else if (MetaBufferUtil::getBatchSize(hnd) > kMaxBuffersInBatch) {
DEBUG_PRINT_ERROR("venc_empty_batch: Too many buffers (%d) in batch. "
- "Max = %d", hnd->numFds, kMaxBuffersInBatch);
+ "Max = %d", MetaBufferUtil::getBatchSize(hnd), kMaxBuffersInBatch);
status = false;
}
- DEBUG_PRINT_LOW("venc_empty_batch: Batch of %d bufs", hnd->numFds);
+ DEBUG_PRINT_LOW("venc_empty_batch: Batch of %d bufs", MetaBufferUtil::getBatchSize(hnd));
} else {
DEBUG_PRINT_ERROR("Batch supported for CameraSource buffers only !");
status = false;
@@ -4156,7 +4080,7 @@
if (status) {
OMX_TICKS bufTimeStamp = 0ll;
- int numBufs = hnd->numFds;
+ int numBufs = MetaBufferUtil::getBatchSize(hnd);
int v4l2Ids[kMaxBuffersInBatch] = {-1};
for (int i = 0; i < numBufs; ++i) {
v4l2Ids[i] = mBatchInfo.registerBuffer(index);
@@ -4177,11 +4101,11 @@
buf.index = (unsigned)v4l2Id;
buf.type = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE;
buf.memory = V4L2_MEMORY_USERPTR;
- plane[0].reserved[0] = BatchInfo::getFdAt(hnd, i);
+ plane[0].reserved[0] = MetaBufferUtil::getFdAt(hnd, i);
plane[0].reserved[1] = 0;
- plane[0].data_offset = BatchInfo::getOffsetAt(hnd, i);
+ plane[0].data_offset = MetaBufferUtil::getIntAt(hnd, i, MetaBufferUtil::INT_OFFSET);
plane[0].m.userptr = (unsigned long)meta_buf;
- plane[0].length = plane[0].bytesused = BatchInfo::getSizeAt(hnd, i);
+ plane[0].length = plane[0].bytesused = MetaBufferUtil::getIntAt(hnd, i, MetaBufferUtil::INT_SIZE);
buf.m.planes = plane;
buf.length = num_input_planes;
@@ -4210,8 +4134,10 @@
#ifdef _PQ_
if (!streaming[OUTPUT_PORT]) {
m_pq.is_YUV_format_uncertain = false;
- m_pq.reinit(m_sVenc_cfg.inputformat);
- venc_try_enable_pq();
+ if(venc_check_for_pq()) {
+ m_pq.reinit(m_sVenc_cfg.inputformat);
+ venc_configure_pq();
+ }
}
#endif // _PQ_
@@ -4230,13 +4156,15 @@
}
// timestamp differences from camera are in nano-seconds
- bufTimeStamp = bufhdr->nTimeStamp + BatchInfo::getTimeStampAt(hnd, i) / 1000;
+ bufTimeStamp = bufhdr->nTimeStamp + MetaBufferUtil::getIntAt(hnd, i, MetaBufferUtil::INT_TIMESTAMP) / 1000;
DEBUG_PRINT_LOW(" Q Batch [%d of %d] : buf=%p fd=%d len=%d TS=%lld",
i, numBufs, bufhdr, plane[0].reserved[0], plane[0].length, bufTimeStamp);
buf.timestamp.tv_sec = bufTimeStamp / 1000000;
buf.timestamp.tv_usec = (bufTimeStamp % 1000000);
+ VIDC_TRACE_INT_LOW("ETB-TS", bufTimeStamp / 1000);
+
rc = ioctl(m_nDriver_fd, VIDIOC_QBUF, &buf);
if (rc) {
DEBUG_PRINT_ERROR("%s: Failed to qbuf (etb) to driver", __func__);
@@ -4410,14 +4338,19 @@
fdData.fd = buffer_fd;
if (ion_fd && !ioctl(ion_fd, ION_IOC_IMPORT, &fdData)) {
cookie = fdData.handle;
+ DEBUG_PRINT_HIGH("FD = %u imported handle = %u", fdData.fd, fdData.handle);
}
for (unsigned int i = 0; i < (sizeof(fd_list)/sizeof(fd_list[0])); i++) {
if (fd_list[i] == cookie) {
DEBUG_PRINT_HIGH("FD is present at index = %d", i);
+ if (ion_fd && !ioctl(ion_fd, ION_IOC_FREE, &fdData.handle)) {
+ DEBUG_PRINT_HIGH("freed handle = %u", cookie);
+ }
return i;
}
}
+
for (unsigned int i = 0; i < (sizeof(fd_list)/sizeof(fd_list[0])); i++)
if (fd_list[i] == 0) {
DEBUG_PRINT_HIGH("FD added at index = %d", i);
@@ -4927,12 +4860,10 @@
requested_level.level = V4L2_MPEG_VIDEO_MPEG4_LEVEL_4;
break;
case OMX_VIDEO_MPEG4Level5:
+ case OMX_VIDEO_MPEG4LevelMax:
+ default: //Set max level possible as default so that invalid levels are non-fatal
requested_level.level = V4L2_MPEG_VIDEO_MPEG4_LEVEL_5;
break;
- default:
- return false;
- // TODO update corresponding levels for MPEG4_LEVEL_3b,MPEG4_LEVEL_6
- break;
}
}
} else if (m_sVenc_cfg.codectype == V4L2_PIX_FMT_H263) {
@@ -4995,11 +4926,10 @@
requested_level.level = V4L2_MPEG_VIDC_VIDEO_H263_LEVEL_6_0;
break;
case OMX_VIDEO_H263Level70:
+ case OMX_VIDEO_H263LevelMax:
+ default: //Set max level possible as default so that invalid levels are non-fatal
requested_level.level = V4L2_MPEG_VIDC_VIDEO_H263_LEVEL_7_0;
break;
- default:
- return false;
- break;
}
} else if (m_sVenc_cfg.codectype == V4L2_PIX_FMT_H264) {
if (eProfile == OMX_VIDEO_AVCProfileBaseline) {
@@ -5077,16 +5007,10 @@
requested_level.level = V4L2_MPEG_VIDEO_H264_LEVEL_5_1;
break;
case OMX_VIDEO_AVCLevel52:
- requested_level.level = V4L2_MPEG_VIDEO_H264_LEVEL_5_2;
- break;
case OMX_VIDEO_AVCLevelMax:
+ default: //Set max level possible as default so that invalid levels are non-fatal
requested_level.level = V4L2_MPEG_VIDEO_H264_LEVEL_5_2;
break;
- default :
- DEBUG_PRINT_ERROR("ERROR: Unsupported H.264 level= %lu",
- requested_level.level);
- return false;
- break;
}
} else if (m_sVenc_cfg.codectype == V4L2_PIX_FMT_VP8) {
if (!(eProfile == OMX_VIDEO_VP8ProfileMain)) {
@@ -5101,13 +5025,10 @@
requested_level.level = V4L2_MPEG_VIDC_VIDEO_VP8_VERSION_0;
break;
case OMX_VIDEO_VP8Level_Version1:
+ case OMX_VIDEO_VP8LevelMax:
+ default: //Set max level possible as default so that invalid levels are non-fatal
requested_level.level = V4L2_MPEG_VIDC_VIDEO_VP8_VERSION_1;
break;
- default:
- DEBUG_PRINT_ERROR("ERROR: Unsupported VP8 level= %u",
- (unsigned int)eLevel);
- return false;
- break;
}
} else if (m_sVenc_cfg.codectype == V4L2_PIX_FMT_HEVC) {
if (eProfile == OMX_VIDEO_HEVCProfileMain) {
@@ -5192,12 +5113,10 @@
requested_level.level = V4L2_MPEG_VIDC_VIDEO_HEVC_LEVEL_MAIN_TIER_LEVEL_6_1;
break;
case OMX_VIDEO_HEVCHighTierLevel61:
+ case OMX_VIDEO_HEVCLevelMax:
+ default: //Set max level possible as default so that invalid levels are non-fatal
requested_level.level = V4L2_MPEG_VIDC_VIDEO_HEVC_LEVEL_HIGH_TIER_LEVEL_6_1;
break;
- default :
- DEBUG_PRINT_ERROR("ERROR: Unsupported HEVC level= %lu",
- requested_level.level);
- return false;
}
}
@@ -7391,7 +7310,7 @@
bool venc_dev::venc_validate_profile_level(OMX_U32 *eProfile, OMX_U32 *eLevel)
{
- OMX_U32 new_profile = 0, new_level = 0;
+ OMX_U32 new_level = 0;
unsigned const int *profile_tbl = NULL;
OMX_U32 mb_per_frame, mb_per_sec;
bool profile_level_found = false;
@@ -7480,17 +7399,12 @@
*eLevel = OMX_VIDEO_AVCLevelMax;
}
- if ((*eProfile == OMX_VIDEO_AVCProfileBaseline) ||
- (*eProfile == QOMX_VIDEO_AVCProfileConstrainedBaseline)) {
- profile_tbl = (unsigned int const *)h264_profile_level_table;
- } else if ((*eProfile == OMX_VIDEO_AVCProfileHigh) ||
- (*eProfile == QOMX_VIDEO_AVCProfileConstrainedHigh)) {
- profile_tbl = (unsigned int const *)
- (&h264_profile_level_table[H264_HP_START]);
- } else if (*eProfile == OMX_VIDEO_AVCProfileMain) {
- profile_tbl = (unsigned int const *)
- (&h264_profile_level_table[H264_MP_START]);
- } else {
+ profile_tbl = (unsigned int const *)h264_profile_level_table;
+ if ((*eProfile != OMX_VIDEO_AVCProfileBaseline) &&
+ (*eProfile != QOMX_VIDEO_AVCProfileConstrainedBaseline) &&
+ (*eProfile != OMX_VIDEO_AVCProfileHigh) &&
+ (*eProfile != QOMX_VIDEO_AVCProfileConstrainedHigh) &&
+ (*eProfile != OMX_VIDEO_AVCProfileMain)) {
DEBUG_PRINT_LOW("Unsupported AVC profile type %u", (unsigned int)*eProfile);
return false;
}
@@ -7570,12 +7484,9 @@
*eLevel = OMX_VIDEO_HEVCLevelMax;
}
- if (*eProfile == OMX_VIDEO_HEVCProfileMain) {
- profile_tbl = (unsigned int const *)hevc_profile_level_table;
- } else if (*eProfile == OMX_VIDEO_HEVCProfileMain10) {
- profile_tbl = (unsigned int const *)
- (&hevc_profile_level_table[HEVC_MAIN10_START]);
- } else {
+ profile_tbl = (unsigned int const *)hevc_profile_level_table;
+ if ((*eProfile != OMX_VIDEO_HEVCProfileMain) &&
+ (*eProfile != OMX_VIDEO_HEVCProfileMain10)) {
DEBUG_PRINT_ERROR("Unsupported HEVC profile type %u", (unsigned int)*eProfile);
return false;
}
@@ -7596,7 +7507,6 @@
{
new_level = profile_level.level;
- new_profile = codec_profile.profile;
return true;
}
}
@@ -7632,17 +7542,15 @@
if (h264 && (ltr || hlayers || hybridp)) {
// Update profile and level to adapt to the LTR and Hier-p/Hybrid-HP settings
new_level = (int)profile_tbl[3];
- new_profile = (int)profile_tbl[4];
profile_level_found = true;
DEBUG_PRINT_LOW("Appropriate profile/level for LTR count: %u OR Hier-p: %u is %u/%u, maxDPB: %u",
- ltrinfo.count, hier_layers.numlayers, (int)new_profile, (int)new_level,
+ ltrinfo.count, hier_layers.numlayers, (int)*eProfile, (int)new_level,
MIN((unsigned int) (profile_tbl[5] / mb_per_frame), MAXDPB));
break;
} else {
new_level = (int)profile_tbl[3];
- new_profile = (int)profile_tbl[4];
profile_level_found = true;
- DEBUG_PRINT_LOW("Appropriate profile/level found %u/%u", (int) new_profile, (int) new_level);
+ DEBUG_PRINT_LOW("Appropriate profile/level found %u/%u", (int) *eProfile, (int) new_level);
break;
}
}
@@ -7760,40 +7668,6 @@
return existsId < kMaxBufs;
}
-int venc_dev::BatchInfo::getFdAt(native_handle_t *hnd, int index) {
- int fd = hnd && index < hnd->numFds ? hnd->data[index] : -1;
- return fd;
-}
-
-int venc_dev::BatchInfo::getOffsetAt(native_handle_t *hnd, int index) {
- int off = hnd && index < hnd->numInts ? hnd->data[hnd->numFds + index] : -1;
- return off;
-}
-
-int venc_dev::BatchInfo::getSizeAt(native_handle_t *hnd, int index) {
- int size = hnd && (index + hnd->numFds) < hnd->numInts ?
- hnd->data[2*hnd->numFds + index] : -1;
- return size;
-}
-
-int venc_dev::BatchInfo::getUsageAt(native_handle_t *hnd, int index) {
- int usage = hnd && (index + 2*hnd->numFds) < hnd->numInts ?
- hnd->data[3*hnd->numFds + index] : 0;
- return usage;
-}
-
-int venc_dev::BatchInfo::getColorFormatAt(native_handle_t *hnd, int index) {
- int usage = hnd && (index + 4*hnd->numFds) < hnd->numInts ?
- hnd->data[5*hnd->numFds + index] : 0;
- return usage;
-}
-
-int venc_dev::BatchInfo::getTimeStampAt(native_handle_t *hnd, int index) {
- int size = hnd && (index + 3*hnd->numFds) < hnd->numInts ?
- hnd->data[4*hnd->numFds + index] : -1;
- return size;
-}
-
#ifdef _VQZIP_
venc_dev::venc_dev_vqzip::venc_dev_vqzip()
{
@@ -7879,7 +7753,7 @@
#endif
#ifdef _PQ_
-void venc_dev::venc_try_enable_pq(void)
+bool venc_dev::venc_check_for_pq(void)
{
bool rc_mode_supported = false;
bool codec_supported = false;
@@ -7900,7 +7774,9 @@
resolution_supported = m_sVenc_cfg.input_height * m_sVenc_cfg.input_width <=
m_pq.caps.max_width * m_pq.caps.max_height;
- frame_rate_supported = (m_sVenc_cfg.fps_num / m_sVenc_cfg.fps_den) <= MAX_FPS_PQ;
+ frame_rate_supported =
+ (m_sVenc_cfg.fps_num / m_sVenc_cfg.fps_den) <=
+ (m_pq.caps.max_mb_per_sec / ((m_sVenc_cfg.input_height * m_sVenc_cfg.input_width) / 256));
yuv_format_supported = ((m_sVenc_cfg.inputformat == V4L2_PIX_FMT_NV12 && (m_pq.caps.color_formats & BIT(COLOR_FMT_NV12)))
|| (m_sVenc_cfg.inputformat == V4L2_PIX_FMT_NV21 && (m_pq.caps.color_formats & BIT(COLOR_FMT_NV21)))
@@ -7916,7 +7792,7 @@
/* Add future PQ conditions here */
- enable = (!is_pq_force_disable &&
+ enable = (!m_pq.is_pq_force_disable &&
codec_supported &&
rc_mode_supported &&
resolution_supported &&
@@ -7927,25 +7803,29 @@
is_pq_handle_valid);
DEBUG_PRINT_HIGH("PQ Condition : Force disable = %d Codec = %d, RC = %d, RES = %d, FPS = %d, YUV = %d, Non - Secure = %d, PQ lib = %d Non - VPE = %d PQ enable = %d",
- is_pq_force_disable, codec_supported, rc_mode_supported, resolution_supported, frame_rate_supported, yuv_format_supported,
+ m_pq.is_pq_force_disable, codec_supported, rc_mode_supported, resolution_supported, frame_rate_supported, yuv_format_supported,
is_non_secure_session, is_pq_handle_valid, is_non_vpe_session, enable);
- venc_set_extradata(OMX_ExtraDataEncoderOverrideQPInfo, (OMX_BOOL)enable);
- extradata |= enable;
-
- m_pq.pConfig.algo = ADAPTIVE_QP;
- m_pq.pConfig.height = m_sVenc_cfg.input_height;
- m_pq.pConfig.width = m_sVenc_cfg.input_width;
- m_pq.pConfig.mb_height = 16;
- m_pq.pConfig.mb_width = 16;
- m_pq.pConfig.a_qp.pq_enabled = enable;
- m_pq.pConfig.stride = VENUS_Y_STRIDE(COLOR_FMT_NV12, m_sVenc_cfg.input_width);
- m_pq.configure();
m_pq.is_pq_enabled = enable;
+ return enable;
+}
+
+void venc_dev::venc_configure_pq()
+{
+ venc_set_extradata(OMX_ExtraDataEncoderOverrideQPInfo, (OMX_BOOL)true);
+ extradata |= true;
+ m_pq.configure(m_sVenc_cfg.input_width, m_sVenc_cfg.input_height);
return;
}
+void venc_dev::venc_try_enable_pq(void)
+{
+ if(venc_check_for_pq()) {
+ venc_configure_pq();
+ }
+}
+
venc_dev::venc_dev_pq::venc_dev_pq()
{
mLibHandle = NULL;
@@ -7956,6 +7836,7 @@
mPQConfigure = NULL;
mPQComputeStats = NULL;
configured_format = 0;
+ is_pq_force_disable = 0;
pthread_mutex_init(&lock, NULL);
}
@@ -7980,6 +7861,7 @@
break;
}
+ ATRACE_BEGIN("PQ init");
if (status) {
mLibHandle = dlopen(YUV_STATS_LIBRARY_NAME, RTLD_NOW);
if (mLibHandle) {
@@ -8010,6 +7892,7 @@
}
}
+ ATRACE_END();
if (!status && mLibHandle) {
if (mLibHandle)
@@ -8053,14 +7936,11 @@
{
bool status = false;
- if (configured_format != format) {
+ if ((configured_format != format) && (is_color_format_supported(format))) {
DEBUG_PRINT_HIGH("New format (%lu) is different from configure format (%lu);"
" reinitializing PQ lib", format, configured_format);
deinit();
- if (is_color_format_supported(format)) {
- status = init(format);
- get_caps();
- }
+ status = init(format);
} else {
// ignore if new format is same as configured
}
@@ -8116,9 +7996,16 @@
return support;
}
-int venc_dev::venc_dev_pq::configure()
+int venc_dev::venc_dev_pq::configure(unsigned long width, unsigned long height)
{
if (mPQHandle) {
+ pConfig.algo = ADAPTIVE_QP;
+ pConfig.height = height;
+ pConfig.width = width;
+ pConfig.mb_height = 16;
+ pConfig.mb_width = 16;
+ pConfig.a_qp.pq_enabled = true;
+ pConfig.stride = VENUS_Y_STRIDE(COLOR_FMT_NV12, pConfig.width);
pConfig.a_qp.gain = 1.0397;
pConfig.a_qp.offset = 14.427;
if (pConfig.a_qp.roi_enabled) {
@@ -8149,7 +8036,7 @@
mPQHandle, is_pq_enabled);
return 0;
}
-
+ ATRACE_BEGIN("PQ Compute Stats");
input.fd = buf.m.planes[0].reserved[0];
input.data_offset = buf.m.planes[0].data_offset;
input.alloc_len = buf.m.planes[0].length;
@@ -8176,7 +8063,7 @@
DEBUG_PRINT_HIGH("Output fd = %d, data_offset = %d", output.fd, output.data_offset);
mPQComputeStats(mPQHandle, &input, NULL, &output, NULL, NULL);
}
-
+ ATRACE_END();
DEBUG_PRINT_HIGH("PQ data length = %d", output.filled_len);
return output.filled_len;
}
diff --git a/msmcobalt/videopp/Android.mk b/msm8998/videopp/Android.mk
similarity index 100%
rename from msmcobalt/videopp/Android.mk
rename to msm8998/videopp/Android.mk
diff --git a/msmcobalt/videopp/inc/omx_vdpp.h b/msm8998/videopp/inc/omx_vdpp.h
similarity index 100%
rename from msmcobalt/videopp/inc/omx_vdpp.h
rename to msm8998/videopp/inc/omx_vdpp.h
diff --git a/msmcobalt/videopp/src/omx_vdpp.cpp b/msm8998/videopp/src/omx_vdpp.cpp
similarity index 100%
rename from msmcobalt/videopp/src/omx_vdpp.cpp
rename to msm8998/videopp/src/omx_vdpp.cpp
diff --git a/msmcobalt/mm-core/src/8909/registry_table.c b/msmcobalt/mm-core/src/8909/registry_table.c
deleted file mode 100644
index 4c9924f..0000000
--- a/msmcobalt/mm-core/src/8909/registry_table.c
+++ /dev/null
@@ -1,255 +0,0 @@
-/*--------------------------------------------------------------------------
-Copyright (c) 2014, 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.
-
---------------------------------------------------------------------------*/
-/*============================================================================
- O p e n M A X w r a p p e r s
- O p e n M A X C o r e
-
- This module contains the registry table for the QTI's OpenMAX core.
-
-*//*========================================================================*/
-
-#include "qc_omx_core.h"
-
-omx_core_cb_type core[] =
-{
- {
- "OMX.qcom.video.decoder.avc",
- NULL, // Create instance function
- // Unique instance handle
- {
- NULL
- },
- NULL, // Shared object library handle
- "libOmxVdec.so",
- {
- "video_decoder.avc"
- }
- },
- {
- "OMX.qcom.file.muxer",
- NULL, // Create instance function
- // Unique instance handle
- {
- NULL
- },
- NULL, // Shared object library handle
-
- "libOmxMux.so",
- {
- "container_muxer.mp2"
- }
- },
- {
- "OMX.qcom.video.decoder.hevc",
- NULL, // Create instance function
- // Unique instance handle
- {
- NULL
- },
- NULL, // Shared object library handle
- "libOmxVdec.so",
- {
- "video_decoder.hevc"
- }
- },
- {
- "OMX.qcom.video.decoder.vp8",
- NULL, // Create instance function
- // Unique instance handle
- {
- NULL
- },
- NULL, // Shared object library handle
- "libOmxVdec.so",
- {
- "video_decoder.vp8"
- }
- },
- {
- "OMX.qcom.video.encoder.avc",
- NULL, // Create instance function
- // Unique instance handle
- {
- NULL
- },
- NULL, // Shared object library handle
- "libOmxVenc.so",
- {
- "video_encoder.avc"
- }
- },
- {
- "OMX.qcom.audio.decoder.Qcelp13",
- NULL, // Create instance function
- // Unique instance handle
- {
- NULL
- },
- NULL, // Shared object library handle
- "libOmxQcelp13Dec.so",
- {
- "audio_decoder.Qcelp13"
- }
- },
- {
- "OMX.qcom.audio.decoder.evrc",
- NULL, // Create instance function
- // Unique instance handle
- {
- NULL
- },
- NULL, // Shared object library handle
- "libOmxEvrcDec.so",
- {
- "audio_decoder.evrc"
- }
- },
- {
- "OMX.qcom.audio.decoder.wma",
- NULL, // Create instance function
- // Unique instance handle
- {
- NULL
- },
- NULL, // Shared object library handle
- "libOmxWmaDec.so",
- {
- "audio_decoder.wma"
- }
- },
- {
- "OMX.qcom.audio.decoder.wma10Pro",
- NULL, // Create instance function
- // Unique instance handle
- {
- NULL
- },
- NULL, // Shared object library handle
- "libOmxWmaDec.so",
- {
- "audio_decoder.wma"
- }
- },
- {
- "OMX.qcom.audio.decoder.amrwbplus",
- NULL, // Create instance function
- // Unique instance handle
- {
- NULL
- },
- NULL, // Shared object library handle
- "libOmxAmrwbplusDec.so",
- {
- "audio_decoder.awbplus"
- }
- },
- {
- "OMX.qcom.audio.encoder.aac",
- NULL, // Create instance function
- // Unique instance handle
- {
- NULL
- },
- NULL, // Shared object library handle
- "libOmxAacEnc.so",
- {
- "audio_encoder.aac"
- }
- },
- {
- "OMX.qcom.audio.encoder.qcelp13",
- NULL, // Create instance function
- // Unique instance handle
- {
- NULL
- },
- NULL, // Shared object library handle
- "libOmxQcelp13Enc.so",
- {
- "audio_encoder.qcelp13"
- }
- },
- {
- "OMX.qcom.audio.encoder.evrc",
- NULL, // Create instance function
- // Unique instance handle
- {
- NULL
- },
- NULL, // Shared object library handle
- "libOmxEvrcEnc.so",
- {
- "audio_encoder.evrc"
- }
- },
- {
- "OMX.qcom.audio.encoder.amrnb",
- NULL, // Create instance function
- // Unique instance handle
- {
- NULL
- },
- NULL, // Shared object library handle
- "libOmxAmrEnc.so",
- {
- "audio_encoder.amrnb"
- }
- },
- {
- "OMX.qcom.audio.decoder.aac",
- NULL, // Create instance function
- // Unique instance handle
- {
- NULL
- },
- NULL, // Shared object library handle
- "libOmxAacDec.so",
- {
- "audio_decoder.aac"
- }
- },
- {
- "OMX.qcom.audio.decoder.multiaac",
- NULL, // Create instance function
- // Unique instance handle
- {
- NULL
- },
- NULL, // Shared object library handle
- "libOmxAacDec.so",
- {
- "audio_decoder.aac"
- }
- },
-};
-
-const unsigned int SIZE_OF_CORE = sizeof(core) / sizeof(omx_core_cb_type);
-
-
diff --git a/msmcobalt/mm-core/src/8937/registry_table.c b/msmcobalt/mm-core/src/8937/registry_table.c
deleted file mode 100755
index ce928db..0000000
--- a/msmcobalt/mm-core/src/8937/registry_table.c
+++ /dev/null
@@ -1,466 +0,0 @@
-/*--------------------------------------------------------------------------
-Copyright (c) 2014-16, 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.
-
---------------------------------------------------------------------------*/
-/*============================================================================
- O p e n M A X w r a p p e r s
- O p e n M A X C o r e
-
- This module contains the registry table for the QTI's OpenMAX core.
-
-*//*========================================================================*/
-
-#include "qc_omx_core.h"
-
-omx_core_cb_type core[] =
-{
- {
- "OMX.qcom.video.decoder.avc",
- NULL, // Create instance function
- // Unique instance handle
- {
- NULL
- },
- NULL, // Shared object library handle
- "libOmxVdec.so",
- {
- "video_decoder.avc"
- }
- },
- {
- "OMX.qcom.video.decoder.avc.dsmode",
- NULL, // Create instance function
- // Unique instance handle
- {
- NULL
- },
- NULL, // Shared object library handle
- "libOmxVideoDSMode.so",
- {
- "video_decoder.avc"
- }
- },
- {
- "OMX.qcom.video.decoder.avc.secure",
- NULL, // Create instance function
- // Unique instance handle
- {
- NULL
- },
- NULL, // Shared object library handle
- "libOmxVdec.so",
- {
- "video_decoder.avc"
- }
- },
- {
- "OMX.qcom.file.muxer",
- NULL, // Create instance function
- // Unique instance handle
- {
- NULL
- },
- NULL, // Shared object library handle
-
- "libOmxMux.so",
- {
- "container_muxer.mp2"
- }
- },
- {
- "OMX.qcom.video.decoder.hevc",
- NULL, // Create instance function
- // Unique instance handle
- {
- NULL
- },
- NULL, // Shared object library handle
- "libOmxVdec.so",
- {
- "video_decoder.hevc"
- }
- },
- {
- "OMX.qcom.video.decoder.hevc.secure",
- NULL, // Create instance function
- // Unique instance handle
- {
- NULL
- },
- NULL, // Shared object library handle
- "libOmxVdec.so",
- {
- "video_decoder.hevc"
- }
- },
- {
- "OMX.qcom.video.decoder.vp8",
- NULL, // Create instance function
- // Unique instance handle
- {
- NULL
- },
- NULL, // Shared object library handle
- "libOmxVdec.so",
- {
- "video_decoder.vp8"
- }
- },
- {
- "OMX.qcom.video.encoder.avc",
- NULL, // Create instance function
- // Unique instance handle
- {
- NULL
- },
- NULL, // Shared object library handle
- "libOmxVenc.so",
- {
- "video_encoder.avc"
- }
- },
- {
- "OMX.qcom.video.encoder.avc.secure",
- NULL, // Create instance function
- // Unique instance handle
- {
- NULL
- },
- NULL, // Shared object library handle
- "libOmxVenc.so",
- {
- "video_encoder.avc"
- }
- },
- {
- "OMX.qti.video.decoder.mpeg4sw",
- NULL, // Create instance function
- // Unique instance handle
- {
- NULL
- },
- NULL, // Shared object library handle
- "libOmxSwVdec.so",
- {
- "video_decoder.mpeg4"
- }
- },
- {
- "OMX.qti.video.decoder.h263sw",
- NULL, // Create instance function
- // Unique instance handle
- {
- NULL
- },
- NULL, // Shared object library handle
- "libOmxSwVdec.so",
- {
- "video_decoder.h263"
- }
- },
- {
- "OMX.qti.video.decoder.divxsw",
- NULL, // Create instance function
- // Unique instance handle
- {
- NULL
- },
- NULL, // Shared object library handle
- "libOmxSwVdec.so",
- {
- "video_decoder.divx"
- }
- },
- {
- "OMX.qti.video.decoder.divx4sw",
- NULL, // Create instance function
- // Unique instance handle
- {
- NULL
- },
- NULL, // Shared object library handle
- "libOmxSwVdec.so",
- {
- "video_decoder.divx"
- }
- },
- {
- "OMX.qcom.video.encoder.mpeg4sw",
- NULL, // Create instance function
- // Unique instance handle
- {
- NULL
- },
- NULL, // Shared object library handle
- "libOmxSwVencMpeg4.so",
- {
- "video_encoder.mpeg4"
- }
- },
- {
- "OMX.qcom.video.encoder.h263sw",
- NULL, // Create instance function
- // Unique instance handle
- {
- NULL
- },
- NULL, // Shared object library handle
- "libOmxSwVencMpeg4.so",
- {
- "video_encoder.h263"
- }
- },
- {
- "OMX.qcom.audio.decoder.Qcelp13",
- NULL, // Create instance function
- // Unique instance handle
- {
- NULL,
- NULL,
- NULL,
- NULL
- },
- NULL, // Shared object library handle
- "libOmxQcelp13Dec.so",
- {
- "audio_decoder.Qcelp13"
- }
- },
- {
- "OMX.qcom.audio.decoder.evrc",
- NULL, // Create instance function
- // Unique instance handle
- {
- NULL,
- NULL,
- NULL,
- NULL
- },
- NULL, // Shared object library handle
- "libOmxEvrcDec.so",
- {
- "audio_decoder.evrc"
- }
- },
- {
- "OMX.qcom.audio.decoder.wma",
- NULL, // Create instance function
- // Unique instance handle
- {
- NULL,
- NULL,
- NULL,
- NULL
- },
- NULL, // Shared object library handle
- "libOmxWmaDec.so",
- {
- "audio_decoder.wma"
- }
- },
- {
- "OMX.qcom.audio.decoder.wma10Pro",
- NULL, // Create instance function
- // Unique instance handle
- {
- NULL,
- NULL,
- NULL,
- NULL
- },
- NULL, // Shared object library handle
- "libOmxWmaDec.so",
- {
- "audio_decoder.wma"
- }
- },
- {
- "OMX.qcom.audio.decoder.aac",
- NULL, // Create instance function
- // Unique instance handle
- {
- NULL,
- NULL,
- NULL,
- NULL
- },
- NULL, // Shared object library handle
- "libOmxAacDec.so",
- {
- "audio_decoder.aac"
- }
- },
- {
- "OMX.qcom.audio.decoder.alac",
- NULL, // Create instance function
- // Unique instance handle
- {
- NULL,
- NULL,
- NULL,
- NULL
- },
- NULL, // Shared object library handle
- "libOmxAlacDec.so",
- {
- "audio_decoder.alac"
- }
- },
- {
- "OMX.qti.audio.decoder.alac.sw",
- NULL, // Create instance function
- // Unique instance handle
- {
- NULL,
- NULL,
- NULL,
- NULL
- },
- NULL, // Shared object library handle
- "libOmxAlacDecSw.so",
- {
- "audio_decoder.alac"
- }
- },
- {
- "OMX.qcom.audio.decoder.ape",
- NULL, // Create instance function
- // Unique instance handle
- {
- NULL,
- NULL,
- NULL,
- NULL
- },
- NULL, // Shared object library handle
- "libOmxApeDec.so",
- {
- "audio_decoder.ape"
- }
- },
- {
- "OMX.qti.audio.decoder.ape.sw",
- NULL, // Create instance function
- // Unique instance handle
- {
- NULL,
- NULL,
- NULL,
- NULL
- },
- NULL, // Shared object library handle
- "libOmxApeDecSw.so",
- {
- "audio_decoder.ape"
- }
- },
- {
- "OMX.qcom.audio.encoder.aac",
- NULL, // Create instance function
- // Unique instance handle
- {
- NULL,
- NULL,
- NULL,
- NULL
- },
- NULL, // Shared object library handle
- "libOmxAacEnc.so",
- {
- "audio_encoder.aac"
- }
- },
- {
- "OMX.qcom.audio.encoder.qcelp13",
- NULL, // Create instance function
- // Unique instance handle
- {
- NULL,
- NULL,
- NULL,
- NULL
- },
- NULL, // Shared object library handle
- "libOmxQcelp13Enc.so",
- {
- "audio_encoder.qcelp13"
- }
- },
- {
- "OMX.qcom.audio.encoder.evrc",
- NULL, // Create instance function
- // Unique instance handle
- {
- NULL,
- NULL,
- NULL,
- NULL
- },
- NULL, // Shared object library handle
- "libOmxEvrcEnc.so",
- {
- "audio_encoder.evrc"
- }
- },
- {
- "OMX.qcom.audio.encoder.amrnb",
- NULL, // Create instance function
- // Unique instance handle
- {
- NULL,
- NULL,
- NULL,
- NULL
- },
- NULL, // Shared object library handle
- "libOmxAmrEnc.so",
- {
- "audio_encoder.amrnb"
- }
- },
- {
- "OMX.qcom.audio.decoder.multiaac",
- NULL, // Create instance function
- // Unique instance handle
- {
- NULL,
- NULL,
- NULL,
- NULL
- },
- NULL, // Shared object library handle
- "libOmxAacDec.so",
- {
- "audio_decoder.aac"
- }
- }
-};
-
-const unsigned int SIZE_OF_CORE = sizeof(core) / sizeof(omx_core_cb_type);
-
-