diff options
-rw-r--r-- | conf_files/sdm845/system_properties.xml | 1 | ||||
-rw-r--r-- | libplatformconfig/PlatformConfig.h | 2 | ||||
-rwxr-xr-x | mm-core/Android.mk | 6 | ||||
-rw-r--r-- | mm-core/src/msmpeafowl/registry_table.c | 531 | ||||
-rw-r--r-- | mm-core/src/msmpeafowl/registry_table_android.c | 736 | ||||
-rw-r--r-- | mm-core/src/sdm845/registry_table_android.c | 58 | ||||
-rwxr-xr-x | mm-video-v4l2/vidc/vdec/Android.mk | 4 | ||||
-rw-r--r-- | mm-video-v4l2/vidc/vdec/src/omx_vdec_v4l2.cpp | 21 | ||||
-rwxr-xr-x | mm-video-v4l2/vidc/venc/Android.mk | 4 | ||||
-rwxr-xr-x | mm-video-v4l2/vidc/venc/inc/video_encoder_device_v4l2.h | 2 | ||||
-rw-r--r-- | mm-video-v4l2/vidc/venc/src/video_encoder_device_v4l2.cpp | 40 |
11 files changed, 1362 insertions, 43 deletions
diff --git a/conf_files/sdm845/system_properties.xml b/conf_files/sdm845/system_properties.xml index 0d557244..31f1fea1 100644 --- a/conf_files/sdm845/system_properties.xml +++ b/conf_files/sdm845/system_properties.xml @@ -32,4 +32,5 @@ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. <property name="vidc_dec_log_out" value="0"/> <property name="vidc_enc_log_in" value="0"/> <property name="vidc_enc_log_out" value="0"/> + <property name="vidc_enc_csc_custom_matrix" value="0"/> </configs> diff --git a/libplatformconfig/PlatformConfig.h b/libplatformconfig/PlatformConfig.h index ebe27e40..7cfcc608 100644 --- a/libplatformconfig/PlatformConfig.h +++ b/libplatformconfig/PlatformConfig.h @@ -56,6 +56,7 @@ typedef enum { vidc_enc_log_out, vidc_dec_conceal_color_8bit, vidc_dec_conceal_color_10bit, + vidc_enc_csc_custom_matrix, } Config_t; struct configStr { @@ -70,6 +71,7 @@ static const struct configStr configStrMap[] = { {vidc_enc_log_out, "vidc_enc_log_out"}, {vidc_dec_conceal_color_8bit, "vidc_dec_conceal_color_8bit"}, {vidc_dec_conceal_color_10bit, "vidc_dec_conceal_color_10bit"}, + {vidc_enc_csc_custom_matrix, "vidc_enc_csc_custom_matrix"}, }; class Config { diff --git a/mm-core/Android.mk b/mm-core/Android.mk index cb301509..f9a867ca 100755 --- a/mm-core/Android.mk +++ b/mm-core/Android.mk @@ -14,6 +14,8 @@ OMXCORE_CFLAGS += -U_ENABLE_QC_MSG_LOG_ ifeq ($(filter $(TARGET_BOARD_PLATFORM), sdm845),$(TARGET_BOARD_PLATFORM)) MM_CORE_TARGET = sdm845 +else ifeq ($(filter $(TARGET_BOARD_PLATFORM), msmpeafowl),$(TARGET_BOARD_PLATFORM)) +MM_CORE_TARGET = msmpeafowl else MM_CORE_TARGET = default endif @@ -67,7 +69,7 @@ LOCAL_CFLAGS := $(OMXCORE_CFLAGS) LOCAL_SRC_FILES := src/common/omx_core_cmp.cpp LOCAL_SRC_FILES += src/common/qc_omx_core.c -ifneq (,$(filter sdm845,$(TARGET_BOARD_PLATFORM))) +ifneq (,$(filter sdm845 msmpeafowl,$(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 @@ -93,7 +95,7 @@ LOCAL_CFLAGS := $(OMXCORE_CFLAGS) LOCAL_SRC_FILES := src/common/omx_core_cmp.cpp LOCAL_SRC_FILES += src/common/qc_omx_core.c -ifneq (,$(filter sdm845,$(TARGET_BOARD_PLATFORM))) +ifneq (,$(filter sdm845 msmpeafowl,$(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/mm-core/src/msmpeafowl/registry_table.c b/mm-core/src/msmpeafowl/registry_table.c new file mode 100644 index 00000000..1170fa1b --- /dev/null +++ b/mm-core/src/msmpeafowl/registry_table.c @@ -0,0 +1,531 @@ +/*-------------------------------------------------------------------------- +Copyright (c) 2016 - 2017, 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 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, + NULL, + 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, + NULL, + NULL + }, + NULL, // Shared object library handle + "libOmxVideoDSMode.so", + { + "video_decoder.avc" + } + }, + { + "OMX.qti.video.decoder.vc1sw", + NULL, // Create instance function + // Unique instance handle + { + NULL, + NULL, + NULL, + NULL + }, + NULL, // Shared object library handle + "libOmxSwVdec.so", + { + "video_decoder.vc1" + } + }, + { + "OMX.qti.video.decoder.wmvsw", + NULL, // Create instance function + // Unique instance handle + { + NULL, + NULL, + NULL, + NULL + }, + NULL, // Shared object library handle + "libOmxSwVdec.so", + { + "video_decoder.vc1" + } + }, + { + "OMX.qcom.file.muxer", + NULL, // Create instance function + // Unique instance handle + { + NULL, + NULL, + NULL, + 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, + NULL, + 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, + NULL, + NULL + }, + NULL, // Shared object library handle + "libOmxVdec.so", + { + "video_decoder.vp8" + } + }, + { + "OMX.qcom.video.decoder.vp9", + NULL, // Create instance function + // Unique instance handle + { + NULL, + NULL, + NULL, + NULL + }, + NULL, // Shared object library handle + "libOmxVdec.so", + { + "video_decoder.vp9" + } + }, + { + "OMX.qti.video.decoder.mpeg4sw", + NULL, // Create instance function + // Unique instance handle + { + NULL, + NULL, + NULL, + NULL + }, + NULL, // Shared object library handle + "libOmxSwVdec.so", + { + "video_decoder.mpeg4" + } + }, + { + "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.qti.video.decoder.h263sw", + NULL, // Create instance function + // Unique instance handle + { + NULL + }, + NULL, // Shared object library handle + "libOmxSwVdec.so", + { + "video_decoder.h263" + } + }, + { + "OMX.qcom.video.encoder.mpeg4sw", + NULL, // Create instance function + // Unique instance handle + { + NULL, + NULL, + NULL, + 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.video.encoder.avc", + NULL, // Create instance function + // Unique instance handle + { + NULL, + NULL, + NULL, + NULL + }, + NULL, // Shared object library handle + "libOmxVenc.so", + { + "video_encoder.avc" + } + }, + { + "OMX.qcom.video.encoder.vp8", + NULL, // Create instance function + // Unique instance handle + { + NULL, + NULL, + NULL, + NULL + }, + NULL, // Shared object library handle + "libOmxVenc.so", + { + "video_encoder.vp8", + } + }, + { + "OMX.qcom.video.encoder.hevc", + NULL, // Create instance function + // Unique instance handle + { + NULL, + NULL, + NULL, + NULL + }, + NULL, // Shared object library handle + "libOmxVenc.so", + { + "video_encoder.hevc" + } + }, + { + "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.alac", + NULL, // Create instance function + // Unique instance handle + { + NULL, + NULL, + NULL, + 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.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 + { + 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.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.multiaac", + NULL, // Create instance function + // Unique instance handle + { + NULL, + NULL, + NULL, + NULL + }, + NULL, // Shared object library handle + "libOmxAacDec.so", + { + "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" + } + } +}; + +const unsigned int SIZE_OF_CORE = sizeof(core) / sizeof(omx_core_cb_type); + + diff --git a/mm-core/src/msmpeafowl/registry_table_android.c b/mm-core/src/msmpeafowl/registry_table_android.c new file mode 100644 index 00000000..fbc2b9c2 --- /dev/null +++ b/mm-core/src/msmpeafowl/registry_table_android.c @@ -0,0 +1,736 @@ +/*-------------------------------------------------------------------------- +Copyright (c) 2016-2017, 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 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, + NULL, + NULL + }, + NULL, // Shared object library handle + "libOmxVdec.so", + { + "video_decoder.avc" + } + }, + { + "OMX.qcom.video.decoder.avc.secure", + NULL, // Create instance function + // Unique instance handle + { + NULL, + NULL, + NULL, + NULL + }, + NULL, // Shared object library handle + "libOmxVdec.so", + { + "video_decoder.avc" + } + }, + { + "OMX.qcom.video.decoder.mpeg2", + NULL, // Create instance function + // Unique instance handle + { + NULL, + NULL, + NULL, + NULL + }, + NULL, // Shared object library handle + "libOmxVdec.so", + { + "video_decoder.mpeg2" + } + }, + { + "OMX.qcom.video.decoder.mpeg2.secure", + NULL, // Create instance function + // Unique instance handle + { + NULL, + NULL, + NULL, + NULL + }, + NULL, // Shared object library handle + "libOmxVdec.so", + { + "video_decoder.mpeg2" + } + }, + { + "OMX.qti.video.decoder.vc1sw", + NULL, // Create instance function + // Unique instance handle + { + NULL, + NULL, + NULL, + NULL + }, + NULL, // Shared object library handle + "libOmxSwVdec.so", + { + "video_decoder.vc1" + } + }, + { + "OMX.qcom.video.decoder.hevc", + NULL, // Create instance function + // Unique instance handle + { + NULL, + NULL, + NULL, + 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, + NULL, + 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, + NULL, + NULL + }, + NULL, // Shared object library handle + "libOmxVdec.so", + { + "video_decoder.vp8" + } + }, + { + "OMX.qcom.video.decoder.vp9", + NULL, // Create instance function + // Unique instance handle + { + NULL, + NULL, + NULL, + NULL + }, + NULL, // Shared object library handle + "libOmxVdec.so", + { + "video_decoder.vp9" + } + }, + { + "OMX.qcom.video.decoder.vp9.secure", + NULL, // Create instance function + // Unique instance handle + { + NULL, + NULL, + NULL, + NULL + }, + NULL, // Shared object library handle + "libOmxVdec.so", + { + "video_decoder.vp9" + } + }, + { + "OMX.qti.video.decoder.mpeg4sw", + NULL, // Create instance function + // Unique instance handle + { + NULL, + NULL, + NULL, + NULL + }, + NULL, // Shared object library handle + "libOmxSwVdec.so", + { + "video_decoder.mpeg4" + } + }, + { + "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.qti.video.decoder.h263sw", + NULL, // Create instance function + // Unique instance handle + { + NULL + }, + NULL, // Shared object library handle + "libOmxSwVdec.so", + { + "video_decoder.h263" + } + }, + { + "OMX.qcom.video.encoder.mpeg4sw", + NULL, // Create instance function + // Unique instance handle + { + NULL, + NULL, + NULL, + 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.video.encoder.avc", + NULL, // Create instance function + // Unique instance handle + { + NULL, + NULL, + NULL, + 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, + NULL, + NULL + }, + NULL, // Shared object library handle + "libOmxVenc.so", + { + "video_encoder.avc" + } + }, + { + "OMX.qcom.video.encoder.vp8", + NULL, // Create instance function + // Unique instance handle + { + NULL, + NULL, + NULL, + NULL + }, + NULL, // Shared object library handle + "libOmxVenc.so", + { + "video_encoder.vp8" + } + }, + { + "OMX.qcom.video.encoder.hevc", + NULL, // Create instance function + // Unique instance handle + { + NULL, + NULL, + NULL, + NULL + }, + NULL, // Shared object library handle + "libOmxVenc.so", + { + "video_encoder.hevc" + } + }, + { + "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.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.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 + { + 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 + { + NULL, + NULL, + NULL, + NULL + }, + NULL, // Shared object library handle + "libOmxApeDecSw.so", + { + "audio_decoder.ape" + } + }, + { + "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 + { + 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.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.multiaac", + NULL, // Create instance function + // Unique instance handle + { + NULL, + NULL, + NULL, + NULL + }, + NULL, // Shared object library handle + "libOmxAacDec.so", + { + "audio_decoder.aac" + } + }, + { + "AIV.play.generic", + NULL, // Create instance function + // Unique instance handle + { + NULL, + NULL, + NULL, + NULL + }, + NULL, // Shared object library handle + "libAivPlay.so", + { + "AIV.play.role.generic" + } + }, + { + "OMX.qcom.file.muxer", + NULL, // Create instance function + // Unique instance handle + { + NULL, + NULL, + NULL, + NULL + }, + NULL, // Shared object library handle + "libOmxMux.so", + { + "container_muxer.mp2" + } + }, + { + "OMX.QCOM.CUST.COMP.START", + NULL, //Create instance function + //Unique instance handle + { + NULL, + NULL, + NULL, + NULL + }, + NULL, + NULL, // Shared object library handle + { + NULL + } + }, + { + "OMX.qcom.video.decoder.avc.secure.dsmode", + NULL, // Create instance function + // Unique instance handle + { + NULL, + NULL, + NULL, + NULL + }, + NULL, // Shared object library handle + "libOmxVideoDSMode.so", + { + "video_decoder.avc" + } + }, + { + "OMX.qcom.video.decoder.avc.dsmode", + NULL, // Create instance function + // Unique instance handle + { + NULL, + NULL, + NULL, + NULL + }, + NULL, // Shared object library handle + "libOmxVideoDSMode.so", + { + "video_decoder.avc" + } + }, + { + "OMX.qcom.video.encoder.hevc.secure", + NULL, // Create instance function + // Unique instance handle + { + NULL, + NULL, + NULL, + NULL + }, + NULL, // Shared object library handle + "libOmxVenc.so", + { + "video_encoder.hevc" + } + }, + { + "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" + } + } +}; + +const unsigned int SIZE_OF_CORE = sizeof(core) / sizeof(omx_core_cb_type); + + diff --git a/mm-core/src/sdm845/registry_table_android.c b/mm-core/src/sdm845/registry_table_android.c index 41c3addc..cde73ed7 100644 --- a/mm-core/src/sdm845/registry_table_android.c +++ b/mm-core/src/sdm845/registry_table_android.c @@ -601,9 +601,9 @@ omx_core_cb_type core[] = "audio_encoder.amrnb" } }, - { - "OMX.qcom.audio.decoder.aac", - NULL, // Create instance function + { + "AIV.play.generic", + NULL, // Create instance function // Unique instance handle { NULL, @@ -611,15 +611,15 @@ omx_core_cb_type core[] = NULL, NULL }, - NULL, // Shared object library handle - "libOmxAacDec.so", + NULL, // Shared object library handle + "libAivPlay.so", { - "audio_decoder.aac" + "AIV.play.role.generic" } }, - { - "OMX.qcom.audio.decoder.multiaac", - NULL, // Create instance function + { + "OMX.qcom.file.muxer", + NULL, // Create instance function // Unique instance handle { NULL, @@ -628,13 +628,13 @@ omx_core_cb_type core[] = NULL }, NULL, // Shared object library handle - "libOmxAacDec.so", + "libOmxMux.so", { - "audio_decoder.aac" + "container_muxer.mp2" } }, { - "AIV.play.generic", + "OMX.qti.vdec.vpp", NULL, // Create instance function // Unique instance handle { @@ -643,31 +643,31 @@ omx_core_cb_type core[] = NULL, NULL }, - NULL, // Shared object library handle - "libAivPlay.so", + NULL, // Shared object library handle + "libOmxVpp.so", { - "AIV.play.role.generic" + "iv_processor.yuv" } }, { - "OMX.qcom.file.muxer", - NULL, // Create instance function - // Unique instance handle + "OMX.QCOM.CUST.COMP.START", + NULL, //Create instance function + //Unique instance handle { NULL, NULL, NULL, NULL }, + NULL, NULL, // Shared object library handle - "libOmxMux.so", { - "container_muxer.mp2" + NULL } }, { - "OMX.qti.vdec.vpp", - NULL, // Create instance function + "OMX.qcom.audio.decoder.aac", + NULL, // Create instance function // Unique instance handle { NULL, @@ -676,25 +676,25 @@ omx_core_cb_type core[] = NULL }, NULL, // Shared object library handle - "libOmxVpp.so", + "libOmxAacDec.so", { - "iv_processor.yuv" + "audio_decoder.aac" } }, { - "OMX.QCOM.CUST.COMP.START", - NULL, //Create instance function - //Unique instance handle + "OMX.qcom.audio.decoder.multiaac", + NULL, // Create instance function + // Unique instance handle { NULL, NULL, NULL, NULL }, - NULL, NULL, // Shared object library handle + "libOmxAacDec.so", { - NULL + "audio_decoder.aac" } }, { diff --git a/mm-video-v4l2/vidc/vdec/Android.mk b/mm-video-v4l2/vidc/vdec/Android.mk index d5f9436c..5bf27175 100755 --- a/mm-video-v4l2/vidc/vdec/Android.mk +++ b/mm-video-v4l2/vidc/vdec/Android.mk @@ -24,8 +24,8 @@ libmm-vdec-def += -D_ANDROID_ICS_ libmm-vdec-def += -DPROCESS_EXTRADATA_IN_OUTPUT_PORT TARGETS_THAT_HAVE_VENUS_HEVC := apq8084 msm8994 msm8996 -TARGETS_THAT_SUPPORT_UBWC := msm8996 msm8953 msm8998 sdm660 sdm845 -TARGETS_THAT_NEED_SW_VDEC := msm8937 sdm845 +TARGETS_THAT_SUPPORT_UBWC := msm8996 msm8953 msm8998 sdm660 sdm845 msmpeafowl +TARGETS_THAT_NEED_SW_VDEC := msm8937 sdm845 msmpeafowl ifeq ($(call is-board-platform-in-list, $(TARGETS_THAT_HAVE_VENUS_HEVC)),true) libmm-vdec-def += -DVENUS_HEVC diff --git a/mm-video-v4l2/vidc/vdec/src/omx_vdec_v4l2.cpp b/mm-video-v4l2/vidc/vdec/src/omx_vdec_v4l2.cpp index 819509a9..b0b0dbf3 100644 --- a/mm-video-v4l2/vidc/vdec/src/omx_vdec_v4l2.cpp +++ b/mm-video-v4l2/vidc/vdec/src/omx_vdec_v4l2.cpp @@ -2412,6 +2412,9 @@ OMX_ERRORTYPE omx_vdec::component_init(OMX_STRING role) m_decoder_capability.max_height = frmsize.stepwise.max_height; } + /* Based on UBWC enable, decide split mode to driver before calling S_FMT */ + eRet = set_dpb(m_disable_ubwc_mode, V4L2_MPEG_VIDC_VIDEO_DPB_COLOR_FMT_UBWC); + memset(&fmt, 0x0, sizeof(struct v4l2_format)); fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE; fmt.fmt.pix_mp.height = drv_ctx.video_resolution.frame_height; @@ -6919,10 +6922,10 @@ OMX_ERRORTYPE omx_vdec::empty_this_buffer_proxy(OMX_IN OMX_HANDLETYPE hComp, memset( (void *)&plane, 0, sizeof(plane)); int rc; unsigned long print_count; - if (temp_buffer->buffer_len == 0 || (buffer->nFlags & OMX_BUFFERFLAG_EOS)) { + if (temp_buffer->buffer_len == 0 && (buffer->nFlags & OMX_BUFFERFLAG_EOS)) { struct v4l2_decoder_cmd dec; - DEBUG_PRINT_HIGH("INPUT EOS reached") ; + DEBUG_PRINT_HIGH("Input EOS reached. Converted to STOP command") ; memset(&dec, 0, sizeof(dec)); dec.cmd = V4L2_DEC_CMD_STOP; rc = ioctl(drv_ctx.video_driver_fd, VIDIOC_DECODER_CMD, &dec); @@ -6934,6 +6937,13 @@ OMX_ERRORTYPE omx_vdec::empty_this_buffer_proxy(OMX_IN OMX_HANDLETYPE hComp, } return OMX_ErrorNone; } + + if (buffer->nFlags & OMX_BUFFERFLAG_EOS) { + DEBUG_PRINT_HIGH("Input EOS reached") ; + buf.flags = V4L2_QCOM_BUF_FLAG_EOS; + } + + OMX_ERRORTYPE eRet = OMX_ErrorNone; buf.index = nPortIndex; buf.type = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE; @@ -9735,8 +9745,9 @@ void omx_vdec::handle_extradata(OMX_BUFFERHEADERTYPE *p_buf_hdr) struct msm_vidc_interlace_payload *payload; payload = (struct msm_vidc_interlace_payload *)(void *)data->data; if (payload) { + DEBUG_PRINT_LOW("Interlace format %#x", payload->format); enable = OMX_InterlaceFrameProgressive; - switch (payload->format) { + switch (payload->format & 0x1F) { case MSM_VIDC_INTERLACE_FRAME_PROGRESSIVE: drv_ctx.interlace = VDEC_InterlaceFrameProgressive; break; @@ -9771,10 +9782,10 @@ void omx_vdec::handle_extradata(OMX_BUFFERHEADERTYPE *p_buf_hdr) } if (client_extradata & OMX_INTERLACE_EXTRADATA) { - append_interlace_extradata(p_extra, payload->format); + append_interlace_extradata(p_extra, (payload->format & 0x1F)); p_extra = (OMX_OTHER_EXTRADATATYPE *) (((OMX_U8 *) p_extra) + ALIGN(p_extra->nSize, 4)); if (p_client_extra) { - append_interlace_extradata(p_client_extra, payload->format); + append_interlace_extradata(p_client_extra, (payload->format & 0x1F)); p_client_extra = (OMX_OTHER_EXTRADATATYPE *) (((OMX_U8 *)p_client_extra) + ALIGN(p_client_extra->nSize, 4)); } diff --git a/mm-video-v4l2/vidc/venc/Android.mk b/mm-video-v4l2/vidc/venc/Android.mk index 6ad18e76..af597c2c 100755 --- a/mm-video-v4l2/vidc/venc/Android.mk +++ b/mm-video-v4l2/vidc/venc/Android.mk @@ -21,9 +21,9 @@ libmm-venc-def += -Werror libmm-venc-def += -D_ANDROID_ICS_ TARGETS_THAT_USE_FLAG_MSM8226 := msm8226 msm8916 msm8909 -TARGETS_THAT_NEED_SW_VENC_MPEG4 := msm8909 msm8937 sdm845 +TARGETS_THAT_NEED_SW_VENC_MPEG4 := msm8909 msm8937 sdm845 msmpeafowl TARGETS_THAT_NEED_SW_VENC_HEVC := msm8992 -TARGETS_THAT_SUPPORT_UBWC := msm8996 msm8998 sdm845 +TARGETS_THAT_SUPPORT_UBWC := msm8996 msm8998 sdm845 msmpeafowl TARGETS_THAT_SUPPORT_VQZIP := msm8996 msm8998 ifeq ($(TARGET_BOARD_PLATFORM),msm8610) diff --git a/mm-video-v4l2/vidc/venc/inc/video_encoder_device_v4l2.h b/mm-video-v4l2/vidc/venc/inc/video_encoder_device_v4l2.h index 770cc6a9..b161037b 100755 --- a/mm-video-v4l2/vidc/venc/inc/video_encoder_device_v4l2.h +++ b/mm-video-v4l2/vidc/venc/inc/video_encoder_device_v4l2.h @@ -423,7 +423,7 @@ class venc_dev bool hw_overload; bool is_gralloc_source_ubwc; bool is_camera_source_ubwc; - bool is_csc_enabled; + bool is_csc_custom_matrix_enabled; OMX_U32 fd_list[64]; private: diff --git a/mm-video-v4l2/vidc/venc/src/video_encoder_device_v4l2.cpp b/mm-video-v4l2/vidc/venc/src/video_encoder_device_v4l2.cpp index 70907e78..3dfd26b3 100644 --- a/mm-video-v4l2/vidc/venc/src/video_encoder_device_v4l2.cpp +++ b/mm-video-v4l2/vidc/venc/src/video_encoder_device_v4l2.cpp @@ -154,6 +154,8 @@ venc_dev::venc_dev(class omx_venc *venc_class) (int32_t *)&m_debug.in_buffer_log, 0); Platform::Config::getInt32(Platform::vidc_enc_log_out, (int32_t *)&m_debug.out_buffer_log, 0); + Platform::Config::getInt32(Platform::vidc_enc_csc_custom_matrix, + (int32_t *)&is_csc_custom_matrix_enabled, 0); char property_value[PROPERTY_VALUE_MAX] = {0}; @@ -178,8 +180,6 @@ venc_dev::venc_dev(class omx_venc *venc_class) #else is_gralloc_source_ubwc = 0; #endif - // TODO: Support in XML - is_csc_enabled = 0; property_value[0] = '\0'; property_get("vendor.vidc.log.loc", property_value, BUFFER_LOG_LOC); @@ -3669,6 +3669,7 @@ bool venc_dev::venc_empty_buf(void *buffer, void *pmem_data_buf, unsigned index, if (!streaming[OUTPUT_PORT] && !(m_sVenc_cfg.inputformat == V4L2_PIX_FMT_RGB32 || m_sVenc_cfg.inputformat == V4L2_PIX_FMT_RGBA8888_UBWC)) { + unsigned int is_csc_enabled = 0; struct v4l2_format fmt; OMX_COLOR_FORMATTYPE color_format = (OMX_COLOR_FORMATTYPE)QOMX_COLOR_FORMATYUV420PackedSemiPlanar32m; @@ -3760,6 +3761,7 @@ bool venc_dev::venc_empty_buf(void *buffer, void *pmem_data_buf, unsigned index, } if (!streaming[OUTPUT_PORT]) { + unsigned int is_csc_enabled = 0; ColorMetaData colorData= {}; // Moment of truth... actual colorspace is known here.. if (getMetaData(handle, GET_COLOR_METADATA, &colorData) == 0) { @@ -3803,14 +3805,48 @@ bool venc_dev::venc_empty_buf(void *buffer, void *pmem_data_buf, unsigned index, } } + DEBUG_PRINT_INFO("color_space.primaries %d colorData.colorPrimaries %d, is_csc_custom_matrix_enabled=%d", + color_space.primaries, colorData.colorPrimaries, is_csc_custom_matrix_enabled); + + bool is_color_space_601fr = (colorData.colorPrimaries == ColorPrimaries_BT601_6_525) && + (colorData.range == Range_Full) && + (colorData.transfer == Transfer_SMPTE_170M) && + (colorData.matrixCoefficients == MatrixCoEff_BT601_6_525); + + if (is_color_space_601fr && + color_space.primaries == ColorPrimaries_BT709_5) + { + DEBUG_PRINT_INFO("Enable CSC from BT601 to BT709 supported."); + is_csc_enabled = 1; + } + // If CSC is enabled, then set control with colorspace from gralloc metadata if (is_csc_enabled) { struct v4l2_control control; + + /* Set 601FR as the Color Space. When we set CSC, this will be passed to + fimrware as the InputPrimaries */ + venc_set_colorspace(colorData.colorPrimaries, colorData.range, + colorData.transfer, colorData.matrixCoefficients); + control.id = V4L2_CID_MPEG_VIDC_VIDEO_VPE_CSC; control.value = V4L2_CID_MPEG_VIDC_VIDEO_VPE_CSC_ENABLE; if (ioctl(m_nDriver_fd, VIDIOC_S_CTRL, &control)) { DEBUG_PRINT_ERROR("venc_empty_buf: Failed to set VPE CSC"); } + if (is_csc_custom_matrix_enabled) { + control.id = V4L2_CID_MPEG_VIDC_VIDEO_VPE_CSC_CUSTOM_MATRIX; + control.value = 1; + if (ioctl(m_nDriver_fd, VIDIOC_S_CTRL, &control)) { + DEBUG_PRINT_ERROR("venc_empty_buf: Failed to enable VPE CSC custom matrix"); + } else { + DEBUG_PRINT_INFO("venc_empty_buf: Enabled VPE CSC custom matrix"); + colorData.colorPrimaries = ColorPrimaries_BT709_5; + colorData.range = Range_Limited; + colorData.transfer = Transfer_sRGB; + colorData.matrixCoefficients = MatrixCoEff_BT709_5; + } + } } /* Enum values from gralloc ColorMetaData matches with the driver values |