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

DSP编程

开发平台:

C/C++

  1. #include <csl_cache.h>
  2. #include "ICETEK-DM642-C.h"
  3. //工作变量
  4. #pragma DATA_SECTION(nMemTemp, ".INTPROCBUFF");
  5. #pragma DATA_ALIGN(nMemTemp,128);
  6. unsigned char nMemTemp[720];
  7. #pragma DATA_SECTION(cLines, ".INTPROCBUFF");
  8. #pragma DATA_ALIGN(cLines,128);
  9. unsigned char cLines[MWIDTH*3];
  10. #pragma DATA_SECTION(nUV, ".INTPROCBUFF");
  11. unsigned char nUV[720];
  12. int mi,mj,m_nWork1;
  13. unsigned int m_nWork,*pWork,m_nOffset1,m_nOffset2,m_nOffset3;
  14. unsigned char *pImg1,*pImg2,*pImg3;
  15. unsigned char x1,x2,x3,x4,x5,x6,x7,x8,x9;
  16. #pragma DATA_SECTION(cBuffer, ".INTPROCBUFF");
  17. #pragma DATA_ALIGN(cBuffer,128);
  18. unsigned char cBuffer[9],cWork;
  19. void ICETEKDM642CInit()
  20. {
  21. m_nOffset1=0;
  22. m_nOffset2=MWIDTH;
  23. m_nOffset3=MWIDTH*2;
  24. for ( mi=0;mi<720;mi++ )
  25. nUV[mi]=0x80;
  26. for ( mi=0;mi<MWIDTH*2;mi++ )
  27. cLines[mi]=0;
  28. }
  29. #pragma CODE_SECTION(ICETEKDM642CMedianFilter,".text1")
  30. void ICETEKDM642CMedianFilter()
  31. {
  32. unsigned int m_nID;
  33.     m_nID=DAT_copy(nMemTemp,cLines+m_nOffset3,MWIDTH);
  34. pImg1=cLines; pImg1+=m_nOffset1;
  35. pImg2=cLines; pImg2+=m_nOffset2;
  36. pImg3=cLines; pImg3+=m_nOffset3;
  37. x1=(*pImg1); pImg1++; x2=(*pImg1); pImg1++;
  38. x4=(*pImg2); pImg2++; x5=(*pImg2); pImg2++;
  39. x7=(*pImg3); pImg3++; x8=(*pImg3); pImg3++;
  40. for ( mi=2;mi<MWIDTH;mi++,pImg1++,pImg2++,pImg3++ )
  41. {
  42. x3=(*pImg1); x6=(*pImg2); x9=(*pImg3);
  43. nMemTemp[mi]=GetMiddleValue();
  44. x1=x2; x2=x3;
  45. x4=x5; x5=x6;
  46. x7=x8; x8=x9;
  47. }
  48. nMemTemp[mi]=0;
  49. m_nWork=m_nOffset1; m_nOffset1=m_nOffset2;
  50. m_nOffset2=m_nOffset3; m_nOffset3=m_nWork;
  51. CACHE_clean(CACHE_L2ALL, 0, 0);
  52. }
  53. #pragma CODE_SECTION(GetMiddleValue,".text1")
  54. unsigned char GetMiddleValue()
  55. {
  56. int i,j;
  57. cBuffer[0]=x1; cBuffer[1]=x2; cBuffer[2]=x3;
  58. cBuffer[3]=x4; cBuffer[4]=x5; cBuffer[5]=x6;
  59. cBuffer[6]=x7; cBuffer[7]=x8; cBuffer[8]=x9;
  60. for ( i=0;i<8;i++ )
  61. for ( j=i;j<9;j++ )
  62. if ( cBuffer[i]>cBuffer[j] )
  63. {
  64. cWork=cBuffer[i];
  65. cBuffer[i]=cBuffer[j];
  66. cBuffer[j]=cWork;
  67. }
  68. return cBuffer[5];
  69. }