Spaces:
Runtime error
Runtime error
Ticket Name: TDA2PXEVM: ERROR: No alg create function specified (algId = 2) | |
Query Text: | |
Part Number: TDA2PXEVM Hi, Recently I started working with PSDK Vision. I am trying out my own usecase. This is my usecase, But the output which i see in the console after doing make is, [HOST] [HOST ] ========================================= [HOST] [HOST ] Chains Run-time Codec Type Selection Menu [HOST] [HOST ] ========================================= [HOST] [HOST ] [HOST] [HOST ] Enter '0' for MJPEG [HOST] [HOST ] [HOST] [HOST ] Enter '1' for H.264 [HOST] [HOST ] [HOST] [HOST ] Enter Choice: [HOST] [HOST ] 1 [HOST] [HOST ] 58.511071 s: IPC_OUT_0 : Create in progress !!! [HOST] [HOST ] 58.511132 s: IPC_OUT_0 : Create Done !!! [HOST] [IPU2 ] 58.511285 s: IPC_IN_0 : Create in progress !!! [HOST] [IPU2 ] 58.512444 s: IPC_IN_0 : Create Done !!! [HOST] [IPU2 ] 58.512901 s: DECODE: Create in progress ... !!! [HOST] [IPU2 ] 58.718934 s: DECODE: Creating CH0 of 1280 x 720 [1] [0],target bitrate = 10000 Kbps ... [HOST] [IPU2 ] 58.719758 s: DECODE: All CH Create ... DONE !!! ASSERT (chains_c2g_priv.c|chains_c2g_Create|180) [HOST] [EVE1 ] 58.723174 s: IPC_IN_0 : Create in progress !!! [HOST] [EVE1 ] 58.724242 s: IPC_IN_0 : Create Done !!! [HOST] [EVE1 ] 58.725126 s: ALG: ERROR: No alg create function specified (algId = 2) !!! [HOST] [IPU2 ] 58.721801 s: DECODE: Create ... DONE !!! [HOST] [IPU2 ] 58.722259 s: IPC_OUT_0 : Create in progress !!! [HOST] [IPU2 ] 58.722595 s: IPC_OUT_0 : Create Done !!! I feel that i missed out something in my .c file. Please guide me. My chains_c2g.c file: chains_c2g.c /****************************************************************************** | |
Copyright (c) [2012 - 2017] Texas Instruments Incorporated | |
All rights reserved not granted herein. | |
Limited License. | |
Texas Instruments Incorporated grants a world-wide, royalty-free, non-exclusive | |
license under copyrights and patents it now or hereafter owns or controls to | |
make, have made, use, import, offer to sell and sell ("Utilize") this software | |
subject to the terms herein. With respect to the foregoing patent license, | |
such license is granted solely to the extent that any such patent is necessary | |
to Utilize the software alone. The patent license shall not apply to any | |
combinations which include this software, other than combinations with devices | |
manufactured by or for TI ("TI Devices"). No hardware patent is licensed | |
hereunder. | |
Redistributions must preserve existing copyright notices and reproduce this | |
license (including the above copyright notice and the disclaimer and | |
(if applicable) source code license limitations below) in the documentation | |
and/or other materials provided with the distribution | |
Redistribution and use in binary form, without modification, are permitted | |
provided that the following conditions are met: | |
* No reverse engineering, decompilation, or disassembly of this software | |
is permitted with respect to any software provided in binary form. | |
* Any redistribution and use are licensed by TI for use only with TI Devices. | |
* Nothing shall obligate TI to provide you with source code for the software | |
licensed and provided to you in object code. | |
If software source code is provided to you, modification and redistribution of | |
the source code are permitted provided that the following conditions are met: | |
* Any redistribution and use of the source code, including any resulting | |
derivative works, are licensed by TI for use only with TI Devices. | |
* Any redistribution and use of any object code compiled from the source code | |
and any resulting derivative works, are licensed by TI for use only with TI | |
Devices. | |
Neither the name of Texas Instruments Incorporated nor the names of its | |
suppliers may be used to endorse or promote products derived from this software | |
without specific prior written permission. | |
DISCLAIMER. | |
THIS SOFTWARE IS PROVIDED BY TI AND TIS LICENSORS "AS IS" AND ANY EXPRESS OR | |
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF | |
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. | |
IN NO EVENT SHALL TI AND TIS LICENSORS BE LIABLE FOR ANY DIRECT, INDIRECT, | |
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | |
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR | |
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF | |
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE | |
OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF | |
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |
******************************************************************************/ | |
/******************************************************************************* | |
* INCLUDE FILES | |
******************************************************************************* | |
*/ | |
#include "chains_c2g_priv.h" | |
#include <src/hlos/adas/include/chains.h> | |
#include <src/hlos/common/chains_common.h> | |
#define MAX_NUMBER_OF_CHANNELS (1) | |
#define ENCDEC_MAX_FRAME_WIDTH (1280) | |
#define ENCDEC_MAX_FRAME_HEIGHT (720) | |
/** | |
******************************************************************************* | |
* | |
* \brief Use-case object | |
* | |
* This structure contains all the LinksId's and create Params. | |
* The same is passed to all create, start, stop functions. | |
* | |
******************************************************************************* | |
*/ | |
typedef struct { | |
chains_c2gObj ucObj; | |
UInt32 displayWidth; | |
UInt32 displayHeight; | |
Chains_Ctrl *chainsCfg; | |
UInt32 codecType; | |
} chains_c2gAppObj; | |
Void chains_c2g_SetNullSrcPrms(chains_c2gAppObj *pObj, | |
NullSrcLink_CreateParams *pPrm) | |
{ | |
UInt32 chId; | |
System_LinkChInfo *pChInfo; | |
pPrm->outQueInfo.numCh = 1; | |
pPrm->timerPeriodMilliSecs = 32; | |
for (chId = 0; chId < pPrm->outQueInfo.numCh; chId++) | |
{ | |
pPrm->channelParams[chId].numBuffers = 4; | |
pChInfo = &pPrm->outQueInfo.chInfo[chId]; | |
pChInfo->flags = System_Link_Ch_Info_Set_Flag_Data_Format(pChInfo->flags, | |
SYSTEM_DF_YUV420SP_UV); | |
pChInfo->flags = System_Link_Ch_Info_Set_Flag_Scan_Format(pChInfo->flags, | |
SYSTEM_SF_PROGRESSIVE); | |
pChInfo->flags = System_Link_Ch_Info_Set_Flag_Buf_Type(pChInfo->flags, | |
/*SYSTEM_BUFFER_TYPE_VIDEO_FRAME*/ | |
SYSTEM_BUFFER_TYPE_BITSTREAM); | |
pChInfo->width = ENCDEC_MAX_FRAME_WIDTH;//pObj->displayWidth; | |
pChInfo->height = ENCDEC_MAX_FRAME_HEIGHT;//pObj->displayHeight; | |
pChInfo->startX = 0; | |
pChInfo->startY = 0; | |
pChInfo->pitch[0] = SystemUtils_align(pChInfo->width, 32); | |
pChInfo->pitch[1] = SystemUtils_align(pChInfo->width, 32); | |
pPrm->channelParams[chId].fileReadMode = NULLSRC_LINK_FILEREAD_RUN_TIME; | |
strncpy(pPrm->channelParams[chId].nameDataFile, "/home/1280x720_00.h264", 260); | |
strncpy(pPrm->channelParams[chId].nameIndexFile, "/home/1280x720_00.hdr", 260); | |
} | |
pPrm->dataRxMode = NULLSRC_LINK_DATA_RX_MODE_FILE; | |
} | |
/** | |
******************************************************************************* | |
* | |
* \brief Set Decode Create Parameters | |
* | |
* \param pPrm [IN] DecodeLink_CreateParams | |
* | |
******************************************************************************* | |
*/ | |
static Void chains_c2g_SetDecodePrms( | |
chains_c2gAppObj *pObj, | |
DecLink_CreateParams *pPrm) | |
{ | |
UInt32 chId; | |
DecLink_ChCreateParams *decPrm; | |
for (chId = 0; chId<MAX_NUMBER_OF_CHANNELS; chId++) | |
{ | |
UTILS_assert (chId < DEC_LINK_MAX_CH); | |
decPrm = &pPrm->chCreateParams[chId]; | |
decPrm->dpbBufSizeInFrames = DEC_LINK_DPB_SIZE_IN_FRAMES_DEFAULT; | |
decPrm->algCreateStatus = DEC_LINK_ALG_CREATE_STATUS_CREATE; | |
decPrm->decodeFrameType = DEC_LINK_DECODE_ALL; | |
decPrm->processCallLevel = DEC_LINK_FRAMELEVELPROCESSCALL; | |
decPrm->targetMaxWidth = ENCDEC_MAX_FRAME_WIDTH; | |
decPrm->targetMaxHeight = ENCDEC_MAX_FRAME_HEIGHT; | |
decPrm->numBufPerCh = 6; | |
decPrm->defaultDynamicParams.targetBitRate = 10*1000*1000; | |
decPrm->defaultDynamicParams.targetFrameRate = 30; | |
decPrm->fieldMergeDecodeEnable = FALSE; | |
switch (pObj->codecType) | |
{ | |
case '0': /*MJPEG*/ | |
decPrm->format = SYSTEM_IVIDEO_MJPEG; | |
decPrm->profile = 0; | |
decPrm->displayDelay = 0; | |
break; | |
case '1': /*H264*/ | |
decPrm->format = SYSTEM_IVIDEO_H264HP; | |
decPrm->profile = 3; | |
decPrm->displayDelay = 0; | |
break; | |
default: /*D1*/ | |
printf("\r\nCodec Type: %d, returning \n", pObj->codecType); | |
UTILS_assert(FALSE); | |
break; | |
} | |
} | |
} | |
/** | |
******************************************************************************* | |
* | |
* \brief Set VPE Create Parameters | |
* | |
* \param pPrm [OUT] VpeLink_CreateParams | |
* | |
******************************************************************************* | |
*/ | |
/*static Void chains_nullSrc_Display_SetVPEPrms( | |
VpeLink_CreateParams *pPrm, | |
UInt32 numCh, | |
UInt32 displayWidth, | |
UInt32 displayHeight, | |
UInt32 inputWidth, | |
UInt32 inputHeight | |
) | |
{ | |
UInt16 chId; | |
pPrm->enableOut[0] = TRUE; | |
for(chId = 0; chId < numCh; chId++) | |
{ | |
pPrm->chParams[chId].outParams[0].numBufsPerCh = 4; | |
pPrm->chParams[chId].outParams[0].width = displayWidth; | |
pPrm->chParams[chId].outParams[0].height = displayHeight; | |
pPrm->chParams[chId].outParams[0].dataFormat = SYSTEM_DF_YUV420SP_UV; | |
pPrm->chParams[chId].scCfg.bypass = FALSE; | |
pPrm->chParams[chId].scCfg.nonLinear = FALSE; | |
pPrm->chParams[chId].scCfg.stripSize = 0; | |
pPrm->chParams[chId].scCropCfg.cropStartX = 32; | |
pPrm->chParams[chId].scCropCfg.cropStartY = 24; | |
pPrm->chParams[chId].scCropCfg.cropWidth = inputWidth-32; | |
pPrm->chParams[chId].scCropCfg.cropHeight = inputHeight-24; | |
} | |
}*/ | |
/** | |
******************************************************************************* | |
* | |
* \brief Set Edge Detection Alg parameters | |
* | |
* It is called in Create function. | |
* In this function alg link params are set | |
* The algorithm which is to run on core is set to | |
* baseClassCreate.algId. The input whdth and height to alg are set. | |
* Number of input buffers required by alg are also set here. | |
* | |
* | |
* \param pPrm [IN] AlgorithmLink_EdgeDetectionCreateParams | |
* \param chainsCfg [IN] Chains_Ctrl | |
* | |
******************************************************************************* | |
*/ | |
Void chains_c2g_SetEdgeDetectionAlgPrms( | |
AlgorithmLink_EdgeDetectionCreateParams *pPrm, | |
Chains_Ctrl *chainsCfg) | |
{ | |
pPrm->maxWidth = ENCDEC_MAX_FRAME_WIDTH; | |
pPrm->maxHeight = ENCDEC_MAX_FRAME_HEIGHT; | |
pPrm->numOutputFrames = 3; | |
} | |
/** | |
******************************************************************************* | |
* | |
* \brief Set link Parameters | |
* | |
* It is called in Create function of the auto generated use-case file. | |
* | |
* \param pUcObj [IN] Auto-generated usecase object | |
* \param appObj [IN] Application specific object | |
* | |
******************************************************************************* | |
*/ | |
Void chains_c2g_SetAppPrms(chains_c2gObj *pUcObj, Void *appObj) | |
{ | |
chains_c2gAppObj *pObj | |
= (chains_c2gAppObj*)appObj; | |
ChainsCommon_GetDisplayWidthHeight( | |
pObj->chainsCfg->displayType, | |
&pObj->displayWidth, | |
&pObj->displayHeight | |
); | |
/*pUcObj->IPCIn_EVE1_IPU1_0_0LinkID = | |
SYSTEM_MAKE_LINK_ID(pObj->chainsCfg->algProcId, pUcObj->IPCIn_EVE1_IPU1_0_0LinkID); | |
pUcObj->Alg_EdgeDetectLinkID = | |
SYSTEM_MAKE_LINK_ID(pObj->chainsCfg->algProcId, pUcObj->Alg_EdgeDetectLinkID); | |
pUcObj->IPCOut_EVE1_IPU1_0_0LinkID = | |
SYSTEM_MAKE_LINK_ID(pObj->chainsCfg->algProcId, pUcObj->IPCOut_EVE1_IPU1_0_0LinkID);*/ | |
chains_c2g_SetNullSrcPrms(pObj, &pUcObj->NullSourcePrm); | |
chains_c2g_SetDecodePrms(pObj, &pUcObj->DecodePrm); | |
chains_c2g_SetEdgeDetectionAlgPrms(&pUcObj->Alg_EdgeDetectPrm, | |
pObj->chainsCfg); | |
ChainsCommon_SetDisplayPrms(&pUcObj->DisplayPrm, | |
NULL, | |
pObj->chainsCfg->displayType, | |
pObj->displayWidth, | |
pObj->displayHeight | |
); | |
/*chains_nullSrc_Display_SetVPEPrms( | |
&pUcObj->VPEPrm, | |
1, | |
ENCDEC_MAX_FRAME_WIDTH, | |
ENCDEC_MAX_FRAME_HEIGHT, | |
ENCDEC_MAX_FRAME_WIDTH, | |
ENCDEC_MAX_FRAME_HEIGHT);*/ | |
ChainsCommon_StartDisplayCtrl( | |
pObj->chainsCfg->displayType, | |
pObj->displayWidth, | |
pObj->displayHeight | |
); | |
} | |
/** | |
******************************************************************************* | |
* | |
* \brief Start the capture display Links | |
* | |
* Function sends a control command to capture and display link to | |
* to Start all the required links . Links are started in reverce | |
* order as information of next link is required to connect. | |
* System_linkStart is called with LinkId to start the links. | |
* | |
* \param pObj [IN] Chains_VipSingleCameraViewObj | |
* | |
* \return SYSTEM_LINK_STATUS_SOK on success | |
* | |
******************************************************************************* | |
*/ | |
Void chains_c2g_StartApp(chains_c2gAppObj *pObj) | |
{ | |
ChainsCommon_statCollectorReset(); | |
ChainsCommon_memPrintHeapStatus(); | |
chains_c2g_Start(&pObj->ucObj); | |
ChainsCommon_prfLoadCalcEnable(TRUE, FALSE, FALSE); | |
} | |
/** | |
******************************************************************************* | |
* | |
* \brief Delete the capture display Links | |
* | |
* Function sends a control command to capture and display link to | |
* to delete all the prior created links | |
* System_linkDelete is called with LinkId to delete the links. | |
* | |
* \param pObj [IN] Chains_VipSingleCameraViewObj | |
* | |
******************************************************************************* | |
*/ | |
Void chains_c2g_StopAndDeleteApp(chains_c2gAppObj *pObj) | |
{ | |
chains_c2g_Stop(&pObj->ucObj); | |
chains_c2g_Delete(&pObj->ucObj); | |
ChainsCommon_StopDisplayCtrl(); | |
/* Print the HWI, SWI and all tasks load */ | |
/* Reset the accumulated timer ticks */ | |
ChainsCommon_prfLoadCalcEnable(FALSE, TRUE, TRUE); | |
} | |
/** | |
******************************************************************************* | |
* \brief Run Time Menu string for codec Type Selection. | |
******************************************************************************* | |
*/ | |
char chains_c2g_codecTypeSelect[] = { | |
"\r\n " | |
"\r\n =========================================" | |
"\r\n Chains Run-time Codec Type Selection Menu" | |
"\r\n =========================================" | |
"\r\n " | |
"\r\n Enter '0' for MJPEG " | |
"\r\n " | |
"\r\n Enter '1' for H.264 " | |
"\r\n " | |
"\r\n Enter Choice: " | |
"\r\n " | |
}; | |
/** | |
******************************************************************************* | |
* | |
* \brief Single Channel Capture Display usecase function | |
*` | |
* This functions executes the create, start functions | |
* | |
* Further in a while loop displays run time menu and waits | |
* for user inputs to print the statistics or to end the demo. | |
* | |
* Once the user inputs end of demo stop and delete | |
* functions are executed. | |
* | |
* \param chainsCfg [IN] Chains_Ctrl | |
* | |
******************************************************************************* | |
*/ | |
Void Chains_c2g(Chains_Ctrl *chainsCfg) | |
{ | |
char ch = 'a'; | |
UInt32 done = FALSE; | |
chains_c2gAppObj chainsObj; | |
chainsObj.chainsCfg = chainsCfg; | |
while(!done) | |
{ | |
Vps_printf(chains_c2g_codecTypeSelect); | |
chainsObj.codecType = Chains_readChar(); | |
switch(chainsObj.codecType) | |
{ | |
case '0': | |
done = TRUE; | |
break; | |
case '1': | |
done = TRUE; | |
break; | |
default: | |
Vps_printf("\nUnsupported option '%c'. Please try again\n", | |
chainsObj.codecType); | |
break; | |
} | |
} | |
chains_c2g_Create(&chainsObj.ucObj, &chainsObj); | |
chains_c2g_StartApp(&chainsObj); | |
done = FALSE; | |
while(!done) | |
{ | |
ch = '1'; | |
ch = Chains_menuRunTime(); | |
switch(ch) | |
{ | |
case '0': | |
done = TRUE; | |
break; | |
case 'p': | |
case 'P': | |
ChainsCommon_PrintStatistics(); | |
chains_c2g_printStatistics(&chainsObj.ucObj); | |
break; | |
default: | |
Vps_printf("\nUnsupported option '%c'. Please try again\n", ch); | |
break; | |
} | |
} | |
chains_c2g_StopAndDeleteApp(&chainsObj); | |
} | |
Responses: | |
Hi Sam, Do you have "ALG_edgedetection=yes" in "cfg.mk" of your usecase? Also can you make sure "AlgorithmLink_EdgeDetection_initPlugin()" is called in "App_init()" in vision_sdk/apps/src/common/app_init/app_init_eve.c. You can check this post (it is for adding a new alg plugin, but you can use it as a reference to check if a particular plugin is initialized by the usecase): You can also look at existing vision_sdk/apps/src/rtos/usecases/vip_single_cam_edge_detection usecase as a reference as it is quite similar to your one. Regards, Yordan | |
Hi Yordan, I took help from the usecase mentioned above. Content of cfg.mk ALG_edgedetection=yes NEED_PROC_IPU1_0=yes NEED_PROC_A15_0=yes NEED_PROC_EVE1=yes In app_init_eve.c's App_init() function, #ifdef ALG_edgedetection AlgorithmLink_EdgeDetection_initPlugin(); #endif I searched all files i can, but everything seems OK to me. | |
Hi 1)Please share output of the below command "make showconfig" 2)are you creating usecase using auto-gene-usecase tool ? or manually? 3) Add print statement inside the following function & check this print is coming or not when you run apps.out. AlgorithmLink_EdgeDetection_initPlugin(); Thanks Gaviraju | |