Update source to Armbian-dev-202610.A311Y3

This commit is contained in:
2026-11-11 08:50:43 +08:00
parent 3428a94f6b
commit f459ef6a9e
12514 changed files with 2264376 additions and 468481 deletions
@@ -148,6 +148,20 @@ AmCasCode_t AmCasLibWrapper<ServiceType>::setPids(int vPid, int aPid)
return AM_CAS_SUCCESS;
}
template <Aml_MP_CASServiceType ServiceType>
AmCasCode_t AmCasLibWrapper<ServiceType>::setPidInfo(AML_CAS_PID_INFO *pidInfo)
{
if (!sCasSymbols.setPidInfo) {
return AM_CAS_ERROR;
}
AmCasStatus_t ret = sCasSymbols.setPidInfo(mCasObj, pidInfo);
if (ret != CAS_STATUS_OK) {
MLOGE("setPidInfo failed");
return AM_CAS_ERROR;
}
return AM_CAS_SUCCESS;
}
template <Aml_MP_CASServiceType ServiceType>
AmCasCode_t AmCasLibWrapper<ServiceType>::selectTrack(int trackType, int trackPid, int trackFormat)
{
@@ -241,6 +255,8 @@ void AmCasLibWrapper<ServiceType>::loadLib(const char *libName)
sCasSymbols.getChipID = lookupSymbol<getChipIDFunc>("getChipID");
sCasSymbols.getCAVersion = lookupSymbol<getCAVersionFunc>("getCAVersion");
sCasSymbols.setCasEventCallback = lookupSymbol<setCasEventCallbackFunc>("setCasEventCallback");
sCasSymbols.setPidInfo = lookupSymbol<setPidInfoFunc>("setPidInfo");
}
template <Aml_MP_CASServiceType ServiceType>
@@ -53,6 +53,22 @@ typedef struct __tagCAS_INIT_HEADERS {
char *content_type;
} CasInitHeaders;
typedef enum {
AML_CAS_PID_TYPE_VIDEO = 0,
AML_CAS_PID_TYPE_AUDIO,
AML_CAS_PID_TYPE_SUBTITLE
} AML_CAS_PID_TYPE;
typedef struct {
AML_CAS_PID_TYPE type;
uint16_t pid;
} AML_CAS_PID_OBJECT;
typedef struct {
uint32_t pid_count;
AML_CAS_PID_OBJECT *pid_objs;
} AML_CAS_PID_INFO;
template <Aml_MP_CASServiceType serviceType>
class AmCasLibWrapper : public AmlMpRefBase
{
@@ -76,7 +92,7 @@ public:
AmCasCode_t getChipID(char* chipid);
const char* getCAVersion();
AmCasCode_t setCasEventCallback(Aml_MP_CAS_EventCallback callback, void* pUserData);
AmCasCode_t setPidInfo(AML_CAS_PID_INFO *pidInfo);
private:
char mName[64];
@@ -102,6 +118,7 @@ private:
typedef const char* (*getCAVersionFunc)(void *casObj);
typedef int (*FCAS_EventFunction_t)(void *pUserData, char *json);
typedef AmCasStatus_t (*setCasEventCallbackFunc)(FCAS_EventFunction_t eventFn, void* pUserData);
typedef AmCasStatus_t (*setPidInfoFunc)(void *casObj, AML_CAS_PID_INFO *pidInfo);
struct CasSymbols
{
@@ -123,6 +140,7 @@ private:
getChipIDFunc getChipID;
getCAVersionFunc getCAVersion;
setCasEventCallbackFunc setCasEventCallback;
setPidInfoFunc setPidInfo;
};
static CasSymbols sCasSymbols;
static void* sCasHandle;
@@ -302,4 +302,11 @@ int AmlCasBase::provision(const Aml_MP_IptvCASParams* params)
return 0;
}
int AmlCasBase::switchSubtitleTrack(Aml_MP_SubtitleParams* params)
{
AML_MP_UNUSED(params);
return 0;
}
}
@@ -75,6 +75,7 @@ public:
}
int getEcmPids(std::vector<int>& ecmPids);
virtual int switchSubtitleTrack(Aml_MP_SubtitleParams *params);
protected:
AmlCasBase(Aml_MP_CASServiceType serviceType);
@@ -388,6 +388,14 @@ int Aml_MP_CAS_ProvisionIPTV(AML_MP_CASSESSION casSession, const Aml_MP_IptvCASP
return casBase->provision(params);
}
int Aml_MP_CAS_SwitchSubtitleTrack(AML_MP_CASSESSION casSession, Aml_MP_SubtitleParams* params)
{
sptr<AmlCasBase> casBase = aml_handle_cast<AmlCasBase>(casSession);
RETURN_IF(-1, casBase == nullptr);
return casBase->switchSubtitleTrack(params);
}
#ifdef __cplusplus
}
#endif
@@ -65,9 +65,12 @@ int AmlVMXIptvCas_V2::startDescrambling(const Aml_MP_IptvCASParams* params)
if (pIptvCas) {
setDscSource(TSN_IPTV);
MLOGI("%s, vpid=0x%x, apid=0x%x, vecm:%#x, acem:%#x", __func__, params->videoPid, params->audioPid,
MLOGI("%s, vpid=0x%x, apid=0x%x, spid=0x%x, vecm:%#x, acem:%#x", __func__, params->videoPid, params->audioPid, params->subtitlePid,
params->ecmPid[1], params->ecmPid[0]);
pIptvCas->setPids(params->videoPid, params->audioPid);
if (params->subtitlePid != 0) {
setPidInfo(params->subtitlePid);
}
ret = pIptvCas->openSession(&sessionId[0]);
}
@@ -314,4 +317,49 @@ int AmlVMXIptvCas_V2::provision(const Aml_MP_IptvCASParams* params)
return ret;
}
int AmlVMXIptvCas_V2::switchSubtitleTrack(Aml_MP_SubtitleParams *params)
{
int ret = 0;
if (pIptvCas) {
setPidInfo(params->pid);
int trackType = 4;
int trackFormat = 0;
MLOGI("selectSubtitleTrack: subtitlePid = %d, ", params->pid);
ret = pIptvCas->selectTrack(trackType, params->pid, trackFormat);
if (ret != 0) {
MLOGI("selectSubtitleTrack failed, ret =%d", ret);
return ret;
}
}
return ret;
}
int AmlVMXIptvCas_V2::setPidInfo(int pid)
{
int ret = 0;
uint32_t dynamic_count = 1;
AML_CAS_PID_OBJECT *dynamic_pid_objs = (AML_CAS_PID_OBJECT*)malloc(dynamic_count * sizeof(AML_CAS_PID_OBJECT));
if (!dynamic_pid_objs) {
return -1;
}
dynamic_pid_objs[0] = (AML_CAS_PID_OBJECT){AML_CAS_PID_TYPE_SUBTITLE, (uint16_t)pid};
AML_CAS_PID_INFO dynamic_pid_info = {
.pid_count = dynamic_count,
.pid_objs = dynamic_pid_objs
};
ret = pIptvCas->setPidInfo(&dynamic_pid_info);
free(dynamic_pid_info.pid_objs);
dynamic_pid_info.pid_objs = NULL;
dynamic_pid_info.pid_count = 0;
if (ret != 0) {
MLOGI("setPidInfo failed, ret =%d", ret);
return ret;
}
return ret;
}
}
@@ -32,7 +32,8 @@ public:
virtual int getChipID(char * chipid, size_t size) override;
virtual const char * getCAVersion() override;
virtual int provision(const Aml_MP_IptvCASParams* params) override;
virtual int switchSubtitleTrack(Aml_MP_SubtitleParams *params);
int setPidInfo(int pid);
private:
char mServerPort[10];
sptr<AmCasLibWrapper<AML_MP_CAS_SERVICE_VERIMATRIX_IPTV>> pIptvCas;
@@ -327,7 +327,7 @@ int AmlWVIptvCas_V3::startDescrambling(const Aml_MP_IptvCASParams* param)
if (NULL != gIptvCas.createCasPlugin) {
ret = gIptvCas.createCasPlugin(&mPluginInfo, &mCasHandle);
MLOGI("createCasPlugin, ret:0x%x, gCasHandle:0x%x", ret, mCasHandle);
MLOGI("createCasPlugin, ret:0x%x, gCasHandle:0x%zx", ret, mCasHandle);
} else {
MLOGE("createCasPlugin is NULL");
return AML_MP_ERROR;
@@ -338,7 +338,7 @@ int AmlWVIptvCas_V3::startDescrambling(const Aml_MP_IptvCASParams* param)
if (NULL != gIptvCas.openCasSession) {
ret = gIptvCas.openCasSession(mCasHandle, &mSessionInfo, &mSessionHandle);
MLOGI("openCasSession, ret:0x%x, mSessionHandle:0x%x", ret, mSessionHandle);
MLOGI("openCasSession, ret:0x%x, mSessionHandle:0x%zx", ret, mSessionHandle);
} else {
MLOGE("openCasSession is NULL");
return AML_MP_ERROR;
@@ -371,21 +371,21 @@ int AmlWVIptvCas_V3::stopDescrambling()
if (NULL != gIptvCas.stopDescrambling) {
ret = gIptvCas.stopDescrambling(mSessionHandle);
MLOGI("stopDescrambling, mSessionHandle:0x%x, ret:0x%x", mSessionHandle, ret);
MLOGI("stopDescrambling, mSessionHandle:0x%zx, ret:0x%x", mSessionHandle, ret);
} else {
MLOGE("stopDescrambling is NULL");
}
if (NULL != gIptvCas.closeCasSession) {
ret = gIptvCas.closeCasSession(mSessionHandle);
MLOGI("closeCasSession, mSessionHandle:0x%x, ret:0x%x", mSessionHandle, ret);
MLOGI("closeCasSession, mSessionHandle:0x%zx, ret:0x%x", mSessionHandle, ret);
} else {
MLOGE("closeCasSession is NULL");
}
if (NULL != gIptvCas.destroyCasPlugin) {
ret = gIptvCas.destroyCasPlugin(mCasHandle);
MLOGI("destroyCasPlugin, mCasHandle:0x%x, ret:0x%x", mCasHandle, ret);
MLOGI("destroyCasPlugin, mCasHandle:0x%zx, ret:0x%x", mCasHandle, ret);
} else {
MLOGE("destroyCasPlugin is NULL");
}
@@ -395,7 +395,7 @@ int AmlWVIptvCas_V3::stopDescrambling()
int AmlWVIptvCas_V3::setPrivateData(const uint8_t* data, size_t size)
{
MLOGI("setPrivateData, data:%p, size:%d", data, size);
MLOGI("setPrivateData, data:%p, size:%zu", data, size);
return AML_MP_OK;
}
@@ -413,7 +413,7 @@ int AmlWVIptvCas_V3::processEcm(bool isSection, int ecmPid, const uint8_t* data,
ecmDataStr.append(hex);
ecmDataStr.append(" ");
}
MLOGI("mSessionHandle:%x, ecmData:%s", mSessionHandle, ecmDataStr.c_str());
MLOGI("mSessionHandle:%zx, ecmData:%s", mSessionHandle, ecmDataStr.c_str());
}
if (NULL != gIptvCas.processEcm) {
ret = gIptvCas.processEcm(mSessionHandle, data, size);
@@ -458,7 +458,7 @@ int AmlWVIptvCas_V3::checkEcmProcess(uint8_t* pBuffer, size_t nSize, uint32_t vE
ecmDataStr.append(hex);
ecmDataStr.append(" ");
}
MLOGI("mSessionHandle:%x, ecmData:%s", mSessionHandle, ecmDataStr.c_str());
MLOGI("mSessionHandle:%zx, ecmData:%s", mSessionHandle, ecmDataStr.c_str());
uint8_t *ecmStartPos = mEcmTsPacket + 5;
uint32_t ecm_data_len = 0;
for (int i = TS_PACKET_SIZE - 1; i > 0; i--) {
@@ -493,7 +493,7 @@ int AmlWVIptvCas_V3::processEmm(bool isSection, int emmPid, const uint8_t* data,
{
AML_MP_UNUSED(isSection);
AML_MP_UNUSED(emmPid);
MLOGI("processEmm, data:%p, size:%d", data, size);
MLOGI("processEmm, data:%p, size:%zu", data, size);
return AML_MP_OK;
}
@@ -443,6 +443,17 @@ const char* Aml_MP_CAS_GetCAVersion(AML_MP_CASSESSION casSession);
*/
int Aml_MP_CAS_ProvisionIPTV(AML_MP_CASSESSION casSession, const Aml_MP_IptvCASParams* params);
/**
* \brief Aml_MP_CAS_SwitchSubtitleTrack
* provision
*
* \param [in] CAS session
* \param [in] params subtitle params
*
* \return 0 if success
*/
int Aml_MP_CAS_SwitchSubtitleTrack(AML_MP_CASSESSION casSession, Aml_MP_SubtitleParams* params);
#ifdef __cplusplus
}
#endif
@@ -312,7 +312,8 @@ typedef struct {
size_t private_size;
Aml_MP_IptvCasHeaders headers;
long reserved[8];
int subtitlePid __AML_MP_RESERVE_ALIGNED;
long reserved[7];
} Aml_MP_IptvCASParams;
////////////////////////////////////////
@@ -273,7 +273,6 @@ bool AmlPlayerBase::constructAmlSubtitleParam(AmlSubtitleParam* amlSubParam, Aml
amlSubParam->compositionPageId = params->compositionPageId;
amlSubParam->flag = params->flag;
amlSubParam->dmxId = params->demuxId;
return ret;
}