arjun.a
rename files
6c7b14a
raw
history blame
No virus
9.52 kB
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.