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);  
 	}	                                                  
}