Update source to Armbian-dev-202610.A311Y3
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user