www.pudn.com > motiotest.rar > tskProcess.c
/* * Copyright 2003 by Texas Instruments Incorporated. * All rights reserved. Property of Texas Instruments Incorporated. * Restricted rights to use, duplicate or disclose this code are * granted through contract. * */ #include#include #include #include #include #include #include #include #include "fvid.h" #include "appmain.h" #include "appThreads.h" #include "tskProcess.h" #include "SobelDetect.h" ScomBufChannels MsgProcess; void tskProcessInit() { tskVideoInputInit(); tskVideoOutputInit(); } unsigned char t1[720*576],t2[720*576],t3[720*576],t4[720*576]; unsigned char SobelData[720*576*2]; /*-------------------------------------------------------*/ /* Create the channel instance : the cell algorithms will*/ /* be instantiated */ /*-------------------------------------------------------*/ void tskProcessStart() { tskVideoInputStart(); tskVideoOutputStart(); } /*-------------------------------------------------------*/ /* The task will handle the processing part : */ /* -Will get the message from the Input task with input */ /* frame pointers */ /* -Will execute the channel to encode followed by decode*/ /* -Will pass the decoded frame pointers to output task */ /*-------------------------------------------------------*/ void tskProcess() { ScomBufChannels *pMsgBuf; int i,q,a,b,c,d,x,y; int flag=1; unsigned char *Input; SCOM_Handle fromInputtoProc,fromProctoInput,\ fromProctoOut, fromOuttoProc; fromInputtoProc = SCOM_open("INTOPROC"); fromProctoInput = SCOM_open("PROCTOIN"); fromProctoOut = SCOM_open("PROCTOOUT"); fromOuttoProc = SCOM_open("OUTTOPROC"); while(1) { /*-----------------------------------------------------------*/ /* Wait for the message from input task to recieve captured */ /* frame to be cycled through encoding and decoding. */ /*-----------------------------------------------------------*/ pMsgBuf = SCOM_getMsg(fromInputtoProc, SYS_FOREVER); Input = pMsgBuf->bufChannel; /*-------------------------------------------------------*/ /* motiontest */ /*-------------------------------------------------------*/ if(flag==1) { for(a=0;a<288;a++) //1/4ΡΉΛυ΅ΔΗ°Φ‘ { for(b=0;b<360;b++) { i=Input[2*a*720+2*b]; q=Input[2*a*720+2*b+1]; c=Input[(2*a+1)*720+2*b]; d=Input[(2*a+1)*720+2*b+1]; t1[a*360+b]=(i+q+c+d)>>2; } } flag=0; SCOM_putMsg(fromProctoInput, NULL); continue; } for(a=0;a<288;a++) //1/4ΡΉΛυ΅ΔΗ°Φ‘ { for(b=0;b<360;b++) { i=Input[2*a*720+2*b]; q=Input[2*a*720+2*b+1]; c=Input[(2*a+1)*720+2*b]; d=Input[(2*a+1)*720+2*b+1]; t2[a*360+b]=(i+q+c+d)>>2; } } for(i=0;i<0x19500;i++) { a=t1[i]; b=t2[i]; if((a-b<0x40)&&(a-b>-0x40)) { t3[i]=0x00; } else { t3[i]=0xff; } } for(i=0;i<287;i++) { for(q=0;q<359;q++) { x=t3[i*360+q]-t3[(i+1)*360+q+1]; y=t3[(i+1)*360+q]-t3[i*360+q+1]; if(x<0){x=-x;} if(y<0){y=-y;} if(x+y>10) //???????? t4[i*360+q]=0xff; else t4[i*360+q]=0x00; } } for(a=0;a<288;a++) { for(b=0;b<360;b++) { i=t4[a*360+b]; SobelData[2*a*720+2*b]=i; SobelData[2*a*720+2*b+1]=i; SobelData[(2*a+1)*720+2*b]=i; SobelData[(2*a+1)*720+2*b+1]=i; SobelData[0x32a00+2*a*720+2*b]=i; SobelData[0x32a00+2*a*720+2*b+1]=i; SobelData[0x32a00+(2*a+1)*720+2*b]=i; SobelData[0x32a00+(2*a+1)*720+2*b+1]=i; } } flag=1; /*-----------------------------------------------------------*/ /* Send the message to the input task to continue with next frame*/ /*-----------------------------------------------------------*/ SCOM_putMsg(fromProctoInput, NULL); /*-----------------------------------------------------------*/ /* Send message to output task with pointers to decoded frame*/ /*-----------------------------------------------------------*/ MsgProcess.bufChannel = SobelData; SCOM_putMsg(fromProctoOut,&MsgProcess); /*-----------------------------------------------------------*/ /* Waiting for display one frame is completed */ /*-----------------------------------------------------------*/ SCOM_getMsg(fromOuttoProc, SYS_FOREVER); } }