|
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 <tda2xx/include/bios_chains_common.h> |
|
|
|
|
|
#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. |
|
|
|
|