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*)&current_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);
-
-