This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

How to use select link on DSP

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.

5504.test_chains.c
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);

}