Files
BPI-CM9-Linux/aml-comp/multimedia/aml_mp_sdk/utils/AmlMpConfig.cpp
T
2026-08-24 10:03:24 +08:00

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();
}
}