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

DSP编程

开发平台:

C/C++

  1. #include <csl.h>
  2. #include <csl_dat.h>
  3. #include <csl_cache.h>
  4. #pragma DATA_SECTION(int_mem_temp, ".user_data_int");
  5. #pragma DATA_ALIGN(int_mem_temp, 128);
  6. unsigned char int_mem_temp[720];
  7. /* Input for this func will 4:2:2 data. This function
  8.  * will convert the data to 4:2:0 and will also reformat
  9.  * the data to be contiguous at MB level.
  10.  */
  11. void yuv422to420( char *frameIn[], char *frm_out[],
  12.                   int width, int height)
  13. {
  14.     char *pSrcY = frameIn[0];
  15.     char *pSrcU = frameIn[1];
  16.     char *pSrcV = frameIn[2];
  17.     char *pDestY = frm_out[0];
  18.     char *pDestU = frm_out[1];
  19.     char *pDestV = frm_out[2];
  20.     unsigned int id;
  21.     unsigned int i;
  22.     for( i = 0; i < height; i++)
  23.     {
  24.         id = DAT_copy(pSrcY + (i * 720), int_mem_temp, 720);
  25.         id = DAT_copy(int_mem_temp,      pDestY + (i * 720),  720);
  26.         DAT_wait(id);
  27.     }
  28.     for( i = 0; i < (height >> 1); i++)
  29.     {
  30.         id = DAT_copy(pSrcU + (i * 720), int_mem_temp, 360);
  31.         id = DAT_copy(int_mem_temp,      pDestU + (i * 360),  360);
  32.         DAT_wait(id);
  33.     }
  34.     for( i = 0; i < (height >> 1); i++)
  35.     {
  36.         id = DAT_copy(pSrcV + (i * 720), int_mem_temp, 360);
  37.         id = DAT_copy(int_mem_temp,      pDestV + (i * 360),  360);
  38.         DAT_wait(id);
  39.     }
  40.     return ;
  41. }
  42. void yuv420to422( char *frameIn[], char *frm_out[],
  43.                 int width, int height)
  44. {
  45.     char *pSrcY = frameIn[0];
  46.     char *pSrcU = frameIn[1];
  47.     char *pSrcV = frameIn[2];
  48.     char *pDestY = frm_out[0];
  49.     char *pDestU = frm_out[1];
  50.     char *pDestV = frm_out[2];
  51.     unsigned int id;
  52.     unsigned int i;
  53.     for( i = 0; i < height; i++)
  54.     {
  55.         id = DAT_copy(pSrcY + (i * 720), int_mem_temp, 720);
  56.         id = DAT_copy(int_mem_temp,      pDestY + (i * 720),  720);
  57.         DAT_wait(id);
  58.     }
  59.     for( i = 0; i < (height >> 1); i++)
  60.     {
  61.         id = DAT_copy(pSrcU + (i * 360), int_mem_temp, 360);
  62.         id = DAT_copy(int_mem_temp,      pDestU + ((2 * i) * 360),   360);
  63.         id = DAT_copy(int_mem_temp,      pDestU + ((2*i + 1)* 360),  360);
  64.         DAT_wait(id);
  65.     }
  66.     for( i = 0; i < (height >> 1); i++)
  67.     {
  68.         id = DAT_copy(pSrcV + (i * 360), int_mem_temp, 360);
  69.         id = DAT_copy(int_mem_temp,      pDestV + ((2*i) * 360),    360);
  70.         id = DAT_copy(int_mem_temp,      pDestV + ((2*i+1) * 360),  360);
  71.         DAT_wait(id);
  72.     }
  73.    return ;
  74. }