Hello everyone,
Now,I want to use select link on DSP,I have a test chains :
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
IpcBitsOutLinkHLOS_CreateParams audio_ipcBitsOutHostPrm;
IpcBitsInLinkRTOS_CreateParams audio_ipcBitsInDspPrm;
SelectLink_CreateParams audio_selectPrm;
MergeLink_CreateParams audio_mergePrm;
IpcBitsOutLinkRTOS_CreateParams audio_ipcBitsOutDspPrm;
IpcBitsInLinkHLOS_CreateParams audio_ipcBitsInHostPrm;
UInt32 audio_ipcBitsOutHostId;
UInt32 audio_ipcBitsInDspId;
UInt32 audio_selectId;
UInt32 algId,audio_ipcBitsOutDspId,audio_ipcBitsInHostId,aacldId;
UInt32 audio_mergeId;
CHAINS_INIT_STRUCT(IpcBitsOutLinkHLOS_CreateParams,audio_ipcBitsOutHostPrm);
CHAINS_INIT_STRUCT(IpcBitsInLinkRTOS_CreateParams,audio_ipcBitsInDspPrm);
CHAINS_INIT_STRUCT(SelectLink_CreateParams,audio_selectPrm);
CHAINS_INIT_STRUCT(IpcBitsOutLinkRTOS_CreateParams,audio_ipcBitsOutDspPrm);
CHAINS_INIT_STRUCT(IpcBitsInLinkHLOS_CreateParams,audio_ipcBitsInHostPrm);
audio_ipcBitsOutHostId = SYSTEM_HOST_LINK_ID_IPC_BITS_OUT_1;
audio_ipcBitsInDspId = SYSTEM_DSP_LINK_ID_IPC_BITS_IN_0;
audio_selectId = SYSTEM_DSP_LINK_ID_SELECT_0;
algId = SYSTEM_LINK_ID_AUDIO_AEC_0;
aacldId = SYSTEM_LINK_ID_AUDIO_ENCAACLD_0;
audio_mergeId = SYSTEM_DSP_LINK_ID_MERGE_0;
audio_ipcBitsOutDspId = SYSTEM_DSP_LINK_ID_IPC_BITS_OUT_0;
audio_ipcBitsInHostId = SYSTEM_HOST_LINK_ID_IPC_BITS_IN_1;
audio_ipcBitsOutHostPrm.inQueInfo.numCh = 2;
int i = 0;
for (i = 0;i < audio_ipcBitsOutHostPrm.inQueInfo.numCh;i++) {
System_LinkChInfo *pChInfo;
pChInfo = &audio_ipcBitsOutHostPrm.inQueInfo.chInfo[i];
pChInfo->bufType = 0; // NOT USED
pChInfo->codingformat = 0; // NOT USED
pChInfo->dataFormat = 0; // NOT USED
pChInfo->memType = 0; // NOT USED
pChInfo->startX = 0; // NOT USED
pChInfo->startY = 0; // NOT USED
pChInfo->width = 352;
pChInfo->height = 288;
pChInfo->pitch[0] = 0; // NOT USED
pChInfo->pitch[1] = 0; // NOT USED
pChInfo->pitch[2] = 0; // NOT USED
pChInfo->scanFormat = SYSTEM_SF_PROGRESSIVE;
//ipcBitsOutHostPrm->maxQueueDepth[i] = MAX_BUFFERING_QUEUE_LEN_PER_CH;
//ipcBitsOutHostPrm->chMaxReqBufSize[i] = 352 * 288;
//numBufPerCh = NUM_BUFS_PER_CH_BITSOUT_AEC;
//ipcBitsOutHostPrm->totalBitStreamBufferSize[i] = ipcBitsOutHostPrm->chMaxReqBufSize[i] * numBufPerCh; } ipcBitsOutHostPrm->baseCreateParams.noNotifyMode = FALSE; ipcBitsOutHostPrm->baseCreateParams.notifyNextLink = TRUE; ipcBitsOutHostPrm->baseCreateParams.numOutQue = 1; ipcBitsOutHostPrm->inQueInfo.numCh = numCh;
}
audio_ipcBitsOutHostPrm.baseCreateParams.numOutQue = 1;
audio_ipcBitsOutHostPrm.baseCreateParams.numChPerOutQue[0] = 2;
audio_ipcBitsOutHostPrm.bufPoolPerCh = 0;
audio_ipcBitsOutHostPrm.numBufPerCh[0] = VIDBITSTREAM_MAX_BITSTREAM_BUFS;
audio_ipcBitsOutHostPrm.baseCreateParams.outQueParams[0].nextLink = audio_ipcBitsInDspId;
audio_ipcBitsOutHostPrm.baseCreateParams.noNotifyMode = FALSE;
audio_ipcBitsOutHostPrm.baseCreateParams.notifyNextLink = TRUE;
audio_ipcBitsOutHostPrm.baseCreateParams.notifyPrevLink = TRUE;
audio_ipcBitsInDspPrm.baseCreateParams.inQueParams.prevLinkId = audio_ipcBitsOutHostId;
audio_ipcBitsInDspPrm.baseCreateParams.inQueParams.prevLinkQueId = 0;
audio_ipcBitsInDspPrm.baseCreateParams.numOutQue = 1;
audio_ipcBitsInDspPrm.baseCreateParams.outQueParams[0].nextLink = audio_selectId;//audio_mergeId;//audio_selectId;//algId;
audio_ipcBitsInDspPrm.baseCreateParams.numChPerOutQue[0] = 2;
audio_ipcBitsInDspPrm.baseCreateParams.noNotifyMode = FALSE;
audio_ipcBitsInDspPrm.baseCreateParams.notifyPrevLink = TRUE;
audio_ipcBitsInDspPrm.baseCreateParams.notifyNextLink = TRUE;
audio_selectPrm.inQueParams.prevLinkId = audio_ipcBitsInDspId;
audio_selectPrm.inQueParams.prevLinkQueId = 0;
audio_selectPrm.numOutQue = 1;
audio_selectPrm.outQueParams[0].nextLink = audio_ipcBitsOutDspId;//audio_mergeId;//audio_mergeId;//algId;
audio_selectPrm.outQueChInfo[0].outQueId = 0;
audio_selectPrm.outQueChInfo[0].numOutCh = 1;
audio_selectPrm.outQueChInfo[0].inChNum[0] = 0;
/*
audio_selectPrm.outQueParams[1].nextLink = audio_ipcBitsOutDspId;//audio_mergeId;
audio_selectPrm.outQueChInfo[1].outQueId = 1;
audio_selectPrm.outQueChInfo[1].numOutCh = 1;
audio_selectPrm.outQueChInfo[1].inChNum[0] = 1;
//audio_selectPrm.outQueChInfo[1].inChNum[1] = 2;
*/
audio_ipcBitsOutDspPrm.baseCreateParams.inQueParams.prevLinkId = audio_selectId;
audio_ipcBitsOutDspPrm.baseCreateParams.inQueParams.prevLinkQueId = 0;
audio_ipcBitsOutDspPrm.baseCreateParams.numOutQue = 1;
audio_ipcBitsOutDspPrm.baseCreateParams.numChPerOutQue[0] = 2;
audio_ipcBitsOutDspPrm.baseCreateParams.outQueParams[0].nextLink = audio_ipcBitsInHostId;
audio_ipcBitsOutDspPrm.baseCreateParams.noNotifyMode = FALSE;
audio_ipcBitsOutDspPrm.baseCreateParams.notifyNextLink = TRUE;
audio_ipcBitsOutDspPrm.baseCreateParams.notifyPrevLink = TRUE;
audio_ipcBitsInHostPrm.baseCreateParams.inQueParams.prevLinkId = audio_ipcBitsOutDspId;
audio_ipcBitsInHostPrm.baseCreateParams.inQueParams.prevLinkQueId = 0;
audio_ipcBitsInHostPrm.baseCreateParams.numOutQue = 1;
audio_ipcBitsInHostPrm.baseCreateParams.numChPerOutQue[0] = 2;
audio_ipcBitsInHostPrm.baseCreateParams.noNotifyMode = FALSE;
audio_ipcBitsInHostPrm.baseCreateParams.notifyNextLink = TRUE;
audio_ipcBitsInHostPrm.baseCreateParams.notifyPrevLink = TRUE;
audio_ipcBitsInHostPrm.baseCreateParams.outQueParams[0].nextLink = SYSTEM_LINK_ID_INVALID;
audio_ipcBitsInHostPrm.cbFxn = audio_CbFxn_IPCBitsInHLOSLINK;
audio_ipcBitsInHostPrm.cbCtx = &semFullIn;
System_linkCreate(audio_ipcBitsOutHostId, &audio_ipcBitsOutHostPrm, sizeof(audio_ipcBitsOutHostPrm));
System_linkCreate(audio_ipcBitsInDspId, &audio_ipcBitsInDspPrm, sizeof(audio_ipcBitsInDspPrm));
System_linkCreate(audio_selectId, &audio_selectPrm, sizeof(audio_selectPrm));
System_linkCreate(audio_ipcBitsOutDspId, &audio_ipcBitsOutDspPrm, sizeof(audio_ipcBitsOutDspPrm));
System_linkCreate(audio_ipcBitsInHostId, &audio_ipcBitsInHostPrm, sizeof(audio_ipcBitsInHostPrm));
System_linkStart(audio_ipcBitsInHostId);
System_linkStart(audio_ipcBitsOutDspId);
System_linkStart(audio_selectId);
System_linkStart(audio_ipcBitsInDspId);
System_linkStart(audio_ipcBitsOutHostId);
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
when it is running,encounter an error:
[c6xdsp ] 19425: Assertion @ Line: 288 in links_common/select/selectLink_tsk.c: pFrame->channelNum < SYSTEM_MAX_CH_PER_OUT_QUE : failed !!!
if any error in my chain,
Looking forward to your reply,thanks.
static void *audio_AEC_Chain(void *arg)
{
IpcBitsOutLinkHLOS_CreateParams audio_ipcBitsOutHostPrm;
IpcBitsInLinkRTOS_CreateParams audio_ipcBitsInDspPrm;
SelectLink_CreateParams audio_selectPrm;
MergeLink_CreateParams audio_mergePrm;
IpcBitsOutLinkRTOS_CreateParams audio_ipcBitsOutDspPrm;
IpcBitsInLinkHLOS_CreateParams audio_ipcBitsInHostPrm;
UInt32 audio_ipcBitsOutHostId;
UInt32 audio_ipcBitsInDspId;
UInt32 audio_selectId;
UInt32 algId,audio_ipcBitsOutDspId,audio_ipcBitsInHostId,aacldId;
UInt32 audio_mergeId;
CHAINS_INIT_STRUCT(IpcBitsOutLinkHLOS_CreateParams,audio_ipcBitsOutHostPrm);
CHAINS_INIT_STRUCT(IpcBitsInLinkRTOS_CreateParams,audio_ipcBitsInDspPrm);
CHAINS_INIT_STRUCT(SelectLink_CreateParams,audio_selectPrm);
CHAINS_INIT_STRUCT(IpcBitsOutLinkRTOS_CreateParams,audio_ipcBitsOutDspPrm);
CHAINS_INIT_STRUCT(IpcBitsInLinkHLOS_CreateParams,audio_ipcBitsInHostPrm);
audio_ipcBitsOutHostId = SYSTEM_HOST_LINK_ID_IPC_BITS_OUT_1;
audio_ipcBitsInDspId = SYSTEM_DSP_LINK_ID_IPC_BITS_IN_0;
audio_selectId = SYSTEM_DSP_LINK_ID_SELECT_0;
algId = SYSTEM_LINK_ID_AUDIO_AEC_0;
aacldId = SYSTEM_LINK_ID_AUDIO_ENCAACLD_0;
audio_mergeId = SYSTEM_DSP_LINK_ID_MERGE_0;
audio_ipcBitsOutDspId = SYSTEM_DSP_LINK_ID_IPC_BITS_OUT_0;
audio_ipcBitsInHostId = SYSTEM_HOST_LINK_ID_IPC_BITS_IN_1;
audio_ipcBitsOutHostPrm.inQueInfo.numCh = 2;
int i = 0;
for (i = 0;i < audio_ipcBitsOutHostPrm.inQueInfo.numCh;i++) {
System_LinkChInfo *pChInfo;
pChInfo = &audio_ipcBitsOutHostPrm.inQueInfo.chInfo[i];
pChInfo->bufType = 0; // NOT USED
pChInfo->codingformat = 0; // NOT USED
pChInfo->dataFormat = 0; // NOT USED
pChInfo->memType = 0; // NOT USED
pChInfo->startX = 0; // NOT USED
pChInfo->startY = 0; // NOT USED
pChInfo->width = 352;
pChInfo->height = 288;
pChInfo->pitch[0] = 0; // NOT USED
pChInfo->pitch[1] = 0; // NOT USED
pChInfo->pitch[2] = 0; // NOT USED
pChInfo->scanFormat = SYSTEM_SF_PROGRESSIVE;
//ipcBitsOutHostPrm->maxQueueDepth[i] = MAX_BUFFERING_QUEUE_LEN_PER_CH;
//ipcBitsOutHostPrm->chMaxReqBufSize[i] = 352 * 288;
//numBufPerCh = NUM_BUFS_PER_CH_BITSOUT_AEC;
//ipcBitsOutHostPrm->totalBitStreamBufferSize[i] = ipcBitsOutHostPrm->chMaxReqBufSize[i] * numBufPerCh; } ipcBitsOutHostPrm->baseCreateParams.noNotifyMode = FALSE; ipcBitsOutHostPrm->baseCreateParams.notifyNextLink = TRUE; ipcBitsOutHostPrm->baseCreateParams.numOutQue = 1; ipcBitsOutHostPrm->inQueInfo.numCh = numCh;
}
audio_ipcBitsOutHostPrm.baseCreateParams.numOutQue = 1;
audio_ipcBitsOutHostPrm.baseCreateParams.numChPerOutQue[0] = 2;
audio_ipcBitsOutHostPrm.bufPoolPerCh = 0;
audio_ipcBitsOutHostPrm.numBufPerCh[0] = VIDBITSTREAM_MAX_BITSTREAM_BUFS;
audio_ipcBitsOutHostPrm.baseCreateParams.outQueParams[0].nextLink = audio_ipcBitsInDspId;
audio_ipcBitsOutHostPrm.baseCreateParams.noNotifyMode = FALSE;
audio_ipcBitsOutHostPrm.baseCreateParams.notifyNextLink = TRUE;
audio_ipcBitsOutHostPrm.baseCreateParams.notifyPrevLink = TRUE;
audio_ipcBitsInDspPrm.baseCreateParams.inQueParams.prevLinkId = audio_ipcBitsOutHostId;
audio_ipcBitsInDspPrm.baseCreateParams.inQueParams.prevLinkQueId = 0;
audio_ipcBitsInDspPrm.baseCreateParams.numOutQue = 1;
audio_ipcBitsInDspPrm.baseCreateParams.outQueParams[0].nextLink = audio_selectId;//audio_mergeId;//audio_selectId;//algId;
audio_ipcBitsInDspPrm.baseCreateParams.numChPerOutQue[0] = 2;
audio_ipcBitsInDspPrm.baseCreateParams.noNotifyMode = FALSE;
audio_ipcBitsInDspPrm.baseCreateParams.notifyPrevLink = TRUE;
audio_ipcBitsInDspPrm.baseCreateParams.notifyNextLink = TRUE;
audio_selectPrm.inQueParams.prevLinkId = audio_ipcBitsInDspId;
audio_selectPrm.inQueParams.prevLinkQueId = 0;
audio_selectPrm.numOutQue = 1;
audio_selectPrm.outQueParams[0].nextLink = audio_ipcBitsOutDspId;//audio_mergeId;//audio_mergeId;//algId;
audio_selectPrm.outQueChInfo[0].outQueId = 0;
audio_selectPrm.outQueChInfo[0].numOutCh = 1;
audio_selectPrm.outQueChInfo[0].inChNum[0] = 0;
/*
audio_selectPrm.outQueParams[1].nextLink = audio_ipcBitsOutDspId;//audio_mergeId;
audio_selectPrm.outQueChInfo[1].outQueId = 1;
audio_selectPrm.outQueChInfo[1].numOutCh = 1;
audio_selectPrm.outQueChInfo[1].inChNum[0] = 1;
//audio_selectPrm.outQueChInfo[1].inChNum[1] = 2;
*/
audio_ipcBitsOutDspPrm.baseCreateParams.inQueParams.prevLinkId = audio_selectId;
audio_ipcBitsOutDspPrm.baseCreateParams.inQueParams.prevLinkQueId = 0;
audio_ipcBitsOutDspPrm.baseCreateParams.numOutQue = 1;
audio_ipcBitsOutDspPrm.baseCreateParams.numChPerOutQue[0] = 2;
audio_ipcBitsOutDspPrm.baseCreateParams.outQueParams[0].nextLink = audio_ipcBitsInHostId;
audio_ipcBitsOutDspPrm.baseCreateParams.noNotifyMode = FALSE;
audio_ipcBitsOutDspPrm.baseCreateParams.notifyNextLink = TRUE;
audio_ipcBitsOutDspPrm.baseCreateParams.notifyPrevLink = TRUE;
audio_ipcBitsInHostPrm.baseCreateParams.inQueParams.prevLinkId = audio_ipcBitsOutDspId;
audio_ipcBitsInHostPrm.baseCreateParams.inQueParams.prevLinkQueId = 0;
audio_ipcBitsInHostPrm.baseCreateParams.numOutQue = 1;
audio_ipcBitsInHostPrm.baseCreateParams.numChPerOutQue[0] = 2;
audio_ipcBitsInHostPrm.baseCreateParams.noNotifyMode = FALSE;
audio_ipcBitsInHostPrm.baseCreateParams.notifyNextLink = TRUE;
audio_ipcBitsInHostPrm.baseCreateParams.notifyPrevLink = TRUE;
audio_ipcBitsInHostPrm.baseCreateParams.outQueParams[0].nextLink = SYSTEM_LINK_ID_INVALID;
audio_ipcBitsInHostPrm.cbFxn = audio_CbFxn_IPCBitsInHLOSLINK;
audio_ipcBitsInHostPrm.cbCtx = &semFullIn;
System_linkCreate(audio_ipcBitsOutHostId, &audio_ipcBitsOutHostPrm, sizeof(audio_ipcBitsOutHostPrm));
System_linkCreate(audio_ipcBitsInDspId, &audio_ipcBitsInDspPrm, sizeof(audio_ipcBitsInDspPrm));
System_linkCreate(audio_selectId, &audio_selectPrm, sizeof(audio_selectPrm));
System_linkCreate(audio_ipcBitsOutDspId, &audio_ipcBitsOutDspPrm, sizeof(audio_ipcBitsOutDspPrm));
System_linkCreate(audio_ipcBitsInHostId, &audio_ipcBitsInHostPrm, sizeof(audio_ipcBitsInHostPrm));
System_linkStart(audio_ipcBitsInHostId);
System_linkStart(audio_ipcBitsOutDspId);
System_linkStart(audio_selectId);
System_linkStart(audio_ipcBitsInDspId);
System_linkStart(audio_ipcBitsOutHostId);
}