200 lines
7.5 KiB
C++
200 lines
7.5 KiB
C++
/*
|
|
* 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 <utils/AmlMpLog.h>
|
|
#include "AmlMpConfig.h"
|
|
#include <cutils/properties.h>
|
|
#include <string>
|
|
#include <unistd.h>
|
|
#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 <typename T>
|
|
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 <typename T>
|
|
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();
|
|
}
|
|
|
|
}
|