/* * Copyright (c) 2020 Amlogic, Inc. All rights reserved. * * This source code is subject to the terms and conditions defined in the * file 'LICENSE' which is part of this source code package. * * Description: */ #define LOG_TAG "AmlMpConfig" #include #include "AmlMpConfig.h" #include #include #include #include "AmlMpUtils.h" #define PROPERTY_AMP_LOG_DEBUG "vendor.media.amlmp.log-debug" #define PROPERTY_AMP_LOG_MASK "vendor.media.amlmp.log-mask" #define PROPERTY_AMP_TSPLAYER_PIPELINE "vendor.media.amtsplayer.pipeline" #define PROPERTY_AMP_WAITING_ECM_MODE "vendor.media.amlmp.waiting-ecm-mode" #define PROPERTY_AMP_WRITE_BUFFER_SIZE "vendor.media.amlmp.write-buffer-size" #define PROPERTY_AMP_PREFER_TUNERHAL "vendor.media.amlmp.prefer.tuner_hal" #define PROPERTY_AMP_DUMP_PACKTS "vendor.media.enable.dump.packts" #define PROPERTY_AMP_CAS_SUPPORT_PIP "vendor.media.cas.support.pip.function" #define PROPERTY_AMP_CAS_SUPPORT_FCC "vendor.media.cas.support.fcc.function" #define PROPERTY_AMP_SECMEM_SIZE "vendor.media.secmem.size" #define PROPERTY_AMP_CAS_TYPE "vendor.media.cas.type" #define PROPERTY_AMP_DISABLE_SUBTITLE "vendor.media.amlmp.disable.subtitle" #define PROPERTY_AMP_LOG_DEBUG_OLD "vendor.amlmp.log-debug" #define PROPERTY_AMP_LOG_MASK_OLD "vendor.amlmp.log-mask" #define PROPERTY_AMP_TSPLAYER_PIPELINE_OLD "vendor.amtsplayer.pipeline" #define PROPERTY_AMP_WAITING_ECM_MODE_OLD "vendor.amlmp.waiting-ecm-mode" #define PROPERTY_AMP_WRITE_BUFFER_SIZE_OLD "vendor.amlmp.write-buffer-size" #define PROPERTY_AMP_PREFER_TUNERHAL_OLD "vendor.media.amlmp.prefer.tuner_hal" #define PROPERTY_AMP_DUMP_PACKTS_OLD "vendor.enable.dump.packts" #define PROPERTY_AMP_CAS_SUPPORT_PIP_OLD "vendor.cas.support.pip.function" #define PROPERTY_AMP_CAS_SUPPORT_FCC_OLD "vendor.cas.support.fcc.function" #define PROPERTY_AMP_SECMEM_SIZE_OLD "vendor.secmem.size" #define PROPERTY_AMP_CAS_TYPE_OLD "vendor.cas.type" #define PROPERTY_AMP_DISABLE_SUBTITLE_OLD "vendor.amlmp.disable.subtitle" #define PROPERTY_AMP_LOG_DEBUG_LINUX "vendor_amlmp_log_debug" #define PROPERTY_AMP_LOG_MASK_LINUX "vendor_amlmp_log_mask" #define PROPERTY_AMP_TSPLAYER_PIPELINE_LINUX "TSPLAYER_PIPELINE" #define PROPERTY_AMP_WAITING_ECM_MODE_LINUX "vendor_amlmp_waiting_ecm_mode" #define PROPERTY_AMP_WRITE_BUFFER_SIZE_LINUX "vendor_amlmp_write_buffer_size" #define PROPERTY_AMP_PREFER_TUNERHAL_LINUX "vendor_media_amlmp_prefer_tuner_hal" #define PROPERTY_AMP_DUMP_PACKTS_LINUX "vendor_enable_dump_packts" #define PROPERTY_AMP_CAS_SUPPORT_PIP_LINUX "vendor_cas_support_pip_function" #define PROPERTY_AMP_CAS_SUPPORT_FCC_LINUX "vendor_cas_support_fcc_function" #define PROPERTY_AMP_SECMEM_SIZE_LINUX "vendor_secmem_size" #define PROPERTY_AMP_CAS_TYPE_LINUX "vendor_cas_type" #define PROPERTY_AMP_DISABLE_SUBTITLE_LINUX "vendor_amlmp_disable_subtitle" namespace aml_mp { static const char* mName = LOG_TAG; template void AmlMpConfig::initProperty(const char* propertyName, const char* propertyNameOld, T& value) { char bufs[PROP_VALUE_MAX]; memset(bufs, 0, PROP_VALUE_MAX); if (property_get(propertyName, bufs, 0) > 0) { value = strtol(bufs, nullptr, 0); return; } memset(bufs, 0, PROP_VALUE_MAX); if (property_get(propertyNameOld, bufs, 0) > 0) { value = strtol(bufs, nullptr, 0); } } template<> void AmlMpConfig::initProperty(const char* propertyName, const char* propertyNameOld, std::string& value) { char bufs[PROP_VALUE_MAX]; memset(bufs, 0, PROP_VALUE_MAX); if (property_get(propertyName, bufs, 0) > 0) { value = bufs; return; } memset(bufs, 0, PROP_VALUE_MAX); if (property_get(propertyNameOld, bufs, 0) > 0) { value = bufs; } } template void AmlMpConfig::initProperty(const char* propertyName, T& value) { char bufs[PROP_VALUE_MAX]; memset(bufs, 0, PROP_VALUE_MAX); if (property_get(propertyName, bufs, 0) > 0) { value = strtol(bufs, nullptr, 0); } } template<> void AmlMpConfig::initProperty(const char* propertyName, std::string& value) { char bufs[PROP_VALUE_MAX]; memset(bufs, 0, PROP_VALUE_MAX); if (property_get(propertyName, bufs, 0) > 0) { value = bufs; } } void AmlMpConfig::reset() { mLogDebug = 0; mLogMask = 0; mTsPlayerNonTunnel = 0; #if ANDROID_PLATFORM_SDK_VERSION >= 30 mTsPlayerNonTunnel = isSupportMultiHwDemux(); #endif mWaitingEcmMode = 1; mWriteBufferSize = 2; // default write buffer size set to 2MB. mDumpPackts = 0; // android Q is use surface by default in AmTsPlayer #if ANDROID_PLATFORM_SDK_VERSION == 29 mUseVideoTunnel = 0; #else mUseVideoTunnel = 1; #endif mPreferTunerHal = 0; mCasPipSupport = 0; mCasFCCSupport = 0; mSecMemSize = 0; mCasType = "none"; mDisableSubtitle = 0; } void AmlMpConfig::init() { #ifdef __linux__ #ifndef ANDROID return initLinux(); #endif #endif initProperty(PROPERTY_AMP_LOG_DEBUG, PROPERTY_AMP_LOG_DEBUG_OLD, mLogDebug); initProperty(PROPERTY_AMP_LOG_MASK, PROPERTY_AMP_LOG_MASK_OLD, mLogMask); initProperty(PROPERTY_AMP_TSPLAYER_PIPELINE, PROPERTY_AMP_TSPLAYER_PIPELINE_OLD, mTsPlayerNonTunnel); initProperty(PROPERTY_AMP_WAITING_ECM_MODE, PROPERTY_AMP_WAITING_ECM_MODE_OLD, mWaitingEcmMode); initProperty(PROPERTY_AMP_WRITE_BUFFER_SIZE, PROPERTY_AMP_WRITE_BUFFER_SIZE_OLD, mWriteBufferSize); initProperty(PROPERTY_AMP_PREFER_TUNERHAL, PROPERTY_AMP_PREFER_TUNERHAL_OLD, mPreferTunerHal); initProperty(PROPERTY_AMP_DUMP_PACKTS, PROPERTY_AMP_DUMP_PACKTS_OLD, mDumpPackts); initProperty(PROPERTY_AMP_CAS_SUPPORT_PIP, PROPERTY_AMP_CAS_SUPPORT_PIP_OLD, mCasPipSupport); initProperty(PROPERTY_AMP_CAS_SUPPORT_FCC, PROPERTY_AMP_CAS_SUPPORT_FCC_OLD, mCasFCCSupport); initProperty(PROPERTY_AMP_SECMEM_SIZE, PROPERTY_AMP_SECMEM_SIZE_OLD, mSecMemSize); initProperty(PROPERTY_AMP_CAS_TYPE, PROPERTY_AMP_CAS_TYPE_OLD, mCasType); initProperty(PROPERTY_AMP_DISABLE_SUBTITLE, PROPERTY_AMP_DISABLE_SUBTITLE_OLD, mDisableSubtitle); } void AmlMpConfig::initLinux() { mTsPlayerNonTunnel = 0; bool isMultiHwDemux = isSupportMultiHwDemux(); if (isMultiHwDemux) { if ((access("/usr/bin/westeros",F_OK) == 0) || (access("/usr/bin/weston",F_OK) == 0)) { mTsPlayerNonTunnel = 1; MLOGI("is non tunnel mode!"); } } initProperty(PROPERTY_AMP_LOG_DEBUG_LINUX, mLogDebug); initProperty(PROPERTY_AMP_LOG_MASK_LINUX, mLogMask); initProperty(PROPERTY_AMP_TSPLAYER_PIPELINE_LINUX, mTsPlayerNonTunnel); initProperty(PROPERTY_AMP_WAITING_ECM_MODE_LINUX, mWaitingEcmMode); initProperty(PROPERTY_AMP_WRITE_BUFFER_SIZE_LINUX, mWriteBufferSize); initProperty(PROPERTY_AMP_PREFER_TUNERHAL_LINUX, mPreferTunerHal); initProperty(PROPERTY_AMP_DUMP_PACKTS_LINUX, mDumpPackts); initProperty(PROPERTY_AMP_CAS_SUPPORT_PIP_LINUX, mCasPipSupport); initProperty(PROPERTY_AMP_CAS_SUPPORT_FCC_LINUX, mCasFCCSupport); initProperty(PROPERTY_AMP_SECMEM_SIZE_LINUX, mSecMemSize); initProperty(PROPERTY_AMP_CAS_TYPE_LINUX, mCasType); initProperty(PROPERTY_AMP_DISABLE_SUBTITLE_LINUX, mDisableSubtitle); } AmlMpConfig::AmlMpConfig() { reset(); init(); } }