Ticket Name: Integrating Vision Algorithm on Vision SDK TDA3 Query Text: Other Parts Discussed in Thread: TDA2 In our project, we have algorithm for vision algorithm for adas camera monitoring system using in c. Which is already working in TDA2 EVM board. I need to integrated with framework which is based on Vision SDK provided by Texas Intruments. To under stand Vision SDK completely,i would like to do Image Negative. I have attached the image which was generated by VSDK user case generation Using user case generation, i have generated file adasens_issImageNegative_priv.c adasens_issImageNegative_priv.h My image negative input, output structure and function prototype are below. typedef struct { unsigned char *ptImageInput; //Input Image to unsigned int uiNoRows; unsigned int uiNoCols; }stImageNegativeInput; chains_vipSingleCameraEdgeDetection.c /* ******************************************************************************* * * Copyright (C) 2013 Texas Instruments Incorporated - http://www.ti.com/ * ALL RIGHTS RESERVED * ******************************************************************************* */ /******************************************************************************* * INCLUDE FILES ******************************************************************************* */ #include "chains_vipSingleCameraEdgeDetection_priv.h" #include #define CAPTURE_SENSOR_WIDTH (1280) #define CAPTURE_SENSOR_HEIGHT (720) /** ******************************************************************************* * * \brief SingleCameraEdgeDetectionObject * * This structure contains all the LinksId's and create Params. * The same is passed to all create, start, stop functions. * ******************************************************************************* */ typedef struct { chains_vipSingleCameraEdgeDetectionObj ucObj; UInt32 captureOutWidth; UInt32 captureOutHeight; UInt32 displayWidth; UInt32 displayHeight; Chains_Ctrl *chainsCfg; } Chains_VipSingleCameraEdgeDetectionAppObj; /** ******************************************************************************* * * \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_vipSingleCameraEdgeDetection_SetEdgeDetectionAlgPrms( AlgorithmLink_EdgeDetectionCreateParams *pPrm, Chains_Ctrl *chainsCfg) { pPrm->maxWidth = CAPTURE_SENSOR_WIDTH; pPrm->maxHeight = CAPTURE_SENSOR_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_vipSingleCameraEdgeDetection_SetAppPrms(chains_vipSingleCameraEdgeDetectionObj *pUcObj, Void *appObj) { Chains_VipSingleCameraEdgeDetectionAppObj *pObj = (Chains_VipSingleCameraEdgeDetectionAppObj *)appObj; pObj->captureOutWidth = CAPTURE_SENSOR_WIDTH; pObj->captureOutHeight = CAPTURE_SENSOR_HEIGHT; ChainsCommon_GetDisplayWidthHeight( pObj->chainsCfg->displayType, &pObj->displayWidth, &pObj->displayHeight ); ChainsCommon_SingleCam_SetCapturePrms(&(pUcObj->CapturePrm), CAPTURE_SENSOR_WIDTH, CAPTURE_SENSOR_HEIGHT, pObj->captureOutWidth, pObj->captureOutHeight, pObj->chainsCfg->captureSrc ); ChainsCommon_SetGrpxSrcPrms(&pUcObj->GrpxSrcPrm, pObj->displayWidth, pObj->displayHeight ); ChainsCommon_SetDisplayPrms(&pUcObj->Display_VideoPrm, &pUcObj->Display_GrpxPrm, pObj->chainsCfg->displayType, pObj->displayWidth, pObj->displayHeight ); ChainsCommon_StartDisplayCtrl( pObj->chainsCfg->displayType, pObj->displayWidth, pObj->displayHeight ); chains_vipSingleCameraEdgeDetection_SetEdgeDetectionAlgPrms (&pUcObj->Alg_EdgeDetectPrm, pObj->chainsCfg); } /** ******************************************************************************* * * \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_VipSingleCameraEdgeDetectionAppObj * * \return SYSTEM_LINK_STATUS_SOK on success * ******************************************************************************* */ Void chains_vipSingleCameraEdgeDetection_StartApp(Chains_VipSingleCameraEdgeDetectionAppObj *pObj) { Chains_memPrintHeapStatus(); ChainsCommon_StartDisplayDevice(pObj->chainsCfg->displayType); ChainsCommon_StartCaptureDevice( pObj->chainsCfg->captureSrc, pObj->captureOutWidth, pObj->captureOutHeight,1 ); chains_vipSingleCameraEdgeDetection_Start(&pObj->ucObj); Chains_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_VipSingleCameraEdgeDetectionAppObj * ******************************************************************************* */ Void chains_vipSingleCameraEdgeDetection_StopAndDeleteApp(Chains_VipSingleCameraEdgeDetectionAppObj *pObj) { chains_vipSingleCameraEdgeDetection_Stop(&pObj->ucObj); chains_vipSingleCameraEdgeDetection_Delete(&pObj->ucObj); ChainsCommon_StopDisplayCtrl(); ChainsCommon_StopCaptureDevice(pObj->chainsCfg->captureSrc); ChainsCommon_StopDisplayDevice(pObj->chainsCfg->displayType); /* Print the HWI, SWI and all tasks load */ /* Reset the accumulated timer ticks */ Chains_prfLoadCalcEnable(FALSE, TRUE, TRUE); } /** ******************************************************************************* * * \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_vipSingleCameraEdgeDetection(Chains_Ctrl *chainsCfg) { char ch; UInt32 done = FALSE; Chains_VipSingleCameraEdgeDetectionAppObj chainsObj; chainsObj.chainsCfg = chainsCfg; chains_vipSingleCameraEdgeDetection_Create(&chainsObj.ucObj, &chainsObj); chains_vipSingleCameraEdgeDetection_StartApp(&chainsObj); while(!done) { ch = Chains_menuRunTime(); switch(ch) { case '0': done = TRUE; break; case 'p': case 'P': ChainsCommon_PrintStatistics(); chains_vipSingleCameraEdgeDetection_printStatistics(&chainsObj.ucObj); break; default: Vps_printf("\nUnsupported option '%c'. Please try again\n", ch); break; } } chains_vipSingleCameraEdgeDetection_StopAndDeleteApp(&chainsObj); } typedef struct { unsigned char *ptImageOutput; }stImageNegativeOutput; void ImageNegative(&stImageNegatvieInput,&stImageNegativeOutput); Assume that, chains_vipSingleCameraEdgeDetection.c(attched with this) is performing image negative. I have to call the ImageNegative for each frame. Can you please tell me, where i have to exactly call my ImageNegative fuctions and initialize the input and output structures. Responses: Hi, Algorithm is integrated into Algorithm Link in Vision SDK. You have to create an algorithm link plug-in for your algorithm. Please refer to Chapter 4 in Vision SDK Development Guide. For example, you can refer to ~\VISION_SDK_02_xx_xx_xx\vision_sdk\examples\tda2xx\src\alg_plugins\edgedetection.