ICETEK-DM642-C.c
上传用户:dahaojd
上传日期:2008-01-29
资源大小:14357k
文件大小:1k
源码类别:

DSP编程

开发平台:

C/C++

  1. #include "math.h"
  2. #include <csl_cache.h>
  3. #include "ICETEK-DM642-C.h"
  4. //工作变量
  5. unsigned char m_dbFrameY[SIMGWIDTH*SIMGHEIGHT];
  6. unsigned char m_dbFrameU[SIMGWIDTH1*SIMGHEIGHT1];
  7. unsigned char m_dbFrameV[SIMGWIDTH1*SIMGHEIGHT1];
  8. unsigned char m_dbTargetImageR[SIMGWIDTH*SIMGHEIGHT];
  9. unsigned char m_dbTargetImageG[SIMGWIDTH*SIMGHEIGHT];
  10. unsigned char m_dbTargetImageB[SIMGWIDTH*SIMGHEIGHT];
  11. unsigned int m_uVideoStatus,m_bFreeze;
  12. void ICETEKDM642CInit()
  13. {
  14. m_uVideoStatus=m_bFreeze=0;
  15. }
  16. void ICETEKDM642CYUVRGB()
  17. {
  18. int i,j;
  19. int r,g,b,y,u,v;
  20. unsigned char *py,*pu,*pv,*pr,*pg,*pb;
  21. py=m_dbFrameY; pu=m_dbFrameU; pv=m_dbFrameV;
  22. pr=m_dbTargetImageR; pg=m_dbTargetImageG; pb=m_dbTargetImageB;
  23. for ( i=0;i<SIMGHEIGHT;i++ )   
  24. {  
  25. for ( j=0;j<SIMGWIDTH;j+=2 )   //列720点,360个32bit,
  26. {
  27. u=(*pu); v=(*pv); y=(*py);
  28. u-=128; v-=128;
  29. r=y+1.402*u;
  30. g=y-0.34414*u-0.71414*v;
  31. b=y+1.772*v;
  32. if ( r>255 ) r=255;
  33. else if ( r<0 ) r=0;
  34. if ( g>255 ) g=255;
  35. else if ( g<0 ) g=0;
  36. if ( b>255 ) b=255;
  37. else if ( b<0 ) b=0;
  38. (*pr)=r; pr++;
  39. (*pg)=g; pg++;
  40. (*pb)=b; pb++;
  41. py++; y=(*py);
  42. r=y+1.402*u;
  43. g=y-0.34414*u-0.71414*v;
  44. b=y+1.772*v;
  45. if ( r>255 ) r=255;
  46. else if ( r<0 ) r=0;
  47. if ( g>255 ) g=255;
  48. else if ( g<0 ) g=0;
  49. if ( b>255 ) b=255;
  50. else if ( b<0 ) b=0;
  51. (*pr)=r; pr++;
  52. (*pg)=g; pg++;
  53. (*pb)=b; pb++;
  54. py++; pu++; pv++;
  55. }
  56.     }
  57.     CACHE_clean(CACHE_L2ALL, 0, 0);
  58. }