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

DSP编程

开发平台:

C/C++

  1. /*
  2.  *  Copyright 2003 by Texas Instruments Incorporated.
  3.  *  All rights reserved. Property of Texas Instruments Incorporated.
  4.  *  Restricted rights to use, duplicate or disclose this code are
  5.  *  granted through contract.
  6.  *  
  7.  */
  8. /* "@(#) DDK 1.10.00.23 07-02-03 (ddk-b12)" */
  9. #include <std.h>
  10. #include <csl_cache.h>
  11. #include <fvid.h>
  12. #include <csl_dat.h>   
  13. #include "colorbar.h"   
  14. /* static function declaration */
  15. static void generateColorBar(Uint8* y, Uint8* cb, Uint8* cr, Int lineSize);
  16. #define WHITE_Y        180
  17. #define WHITE_CB       128
  18. #define WHITE_CR       128
  19. #define YELLOW_Y       162
  20. #define YELLOW_CB      44
  21. #define YELLOW_CR      142
  22. #define CYAN_Y         131
  23. #define CYAN_CB        156
  24. #define CYAN_CR        44
  25. #define GREEN_Y        112
  26. #define GREEN_CB       72
  27. #define GREEN_CR       58
  28. #define MAGENTA_Y       84
  29. #define MAGENTA_CB     184
  30. #define MAGENTA_CR     198
  31. #define RED_Y          65
  32. #define RED_CB         100
  33. #define RED_CR         212
  34. #define BLUE_Y          35
  35. #define BLUE_CB        212
  36. #define BLUE_CR        114
  37. #define BLACK_Y        16
  38. #define BLACK_CB       129
  39. #define BLACK_CR       129
  40. /* defines arrays to hold a line of image for color bar generating */
  41. #pragma DATA_ALIGN(imgLineY, 8);
  42. #pragma DATA_ALIGN(imgLineCb, 8);
  43. #pragma DATA_ALIGN(imgLineCr, 8);
  44. static Uint8 imgLineY[1920 * 3];
  45. static Uint8 imgLineCb[960 * 3];
  46. static Uint8 imgLineCr[960 * 3];
  47. /*
  48.  * ======== fillFrmBuf ========
  49.  * This function fill a frame with color bar of Y/Cb/Cr format.
  50.  */
  51. void fillFrmBuf(FVID_IFrame* frame, Int lineSz, Int numLines, Int offset )
  52. {
  53.     Int i;
  54.     static Int init = 0;
  55.     Int id;
  56.     if(!init) {
  57.         generateColorBar(imgLineY, imgLineCb, imgLineCr, lineSz);
  58.         CACHE_clean(CACHE_L2ALL, NULL, NULL);
  59.         init = 1;
  60.     }    
  61.     for(i = 0; i < numLines; i ++) {        
  62.         DAT_copy(imgLineY + offset * 2, frame->y1 + lineSz * i, lineSz);
  63.         DAT_copy(imgLineCb + offset, frame->cb1 + (lineSz >> 1) * i, 
  64.             (lineSz >> 1));
  65.         id = DAT_copy(imgLineCr + offset, frame->cr1+(lineSz >> 1) * i, 
  66.             (lineSz >> 1));
  67.     }             
  68.     DAT_wait(id);         
  69. }          
  70. /*
  71.  * ======== generateColorBar ========
  72.  * This function generates a line of color bar with y/cb/cr format.
  73.  */
  74. static void generateColorBar(Uint8* y, Uint8* cb, Uint8* cr, Int lineSize)
  75. {
  76.     Int i;   
  77.     Int fillSize = lineSize >> 3;
  78.     Int k;
  79.     
  80.     if(fillSize & 0x1) {
  81.         fillSize ++;
  82.     }
  83.     /* white bar */
  84.     for(k = 0; k < 3; k ++) {
  85.         for(i = 0; i<(fillSize >> 1); i++) {
  86.             y[2 * i] = WHITE_Y;
  87.             y[2 * i + 1] = WHITE_Y;
  88.             cb[i] = WHITE_CR;
  89.             cr[i] = WHITE_CB;
  90.             y[fillSize * 1 + 2 * i] = YELLOW_Y;
  91.             y[fillSize * 1 + 2 * i + 1] = YELLOW_Y;
  92.             cb[(fillSize >> 1) * 1 + i] = YELLOW_CB;
  93.             cr[(fillSize >> 1) * 1 + i] = YELLOW_CR;
  94.             y[fillSize * 2 + 2 * i] = CYAN_Y;
  95.             y[fillSize * 2 + 2 * i + 1] = CYAN_Y;
  96.             cb[(fillSize >> 1) * 2 + i] = CYAN_CB;
  97.             cr[(fillSize >> 1) * 2 + i] = CYAN_CR;
  98.             y[fillSize * 3 + 2 * i] = GREEN_Y;
  99.             y[fillSize * 3 + 2 * i + 1] = GREEN_Y;
  100.             cb[(fillSize >> 1) * 3 + i] = GREEN_CB;
  101.             cr[(fillSize >> 1) * 3 + i] = GREEN_CR;
  102.             y[fillSize * 4 + 2 * i] = MAGENTA_Y;
  103.             y[fillSize * 4 + 2 * i + 1] = MAGENTA_Y;
  104.             cb[(fillSize >> 1) * 4 + i] = MAGENTA_CB;
  105.             cr[(fillSize >> 1) * 4 + i] = MAGENTA_CR;
  106.             y[fillSize * 5 + 2 * i] = RED_Y;
  107.             y[fillSize * 5 + 2 * i + 1] = RED_Y;
  108.             cb[(fillSize >> 1) * 5 + i] = RED_CB;
  109.             cr[(fillSize >> 1) * 5 + i] = RED_CR;
  110.  
  111.             y[fillSize * 6 + 2 * i] = BLUE_Y;
  112.             y[fillSize * 6 + 2 * i + 1] = BLUE_Y;
  113.             cb[(fillSize >> 1) * 6 + i] = BLUE_CB;
  114.             cr[(fillSize >> 1) * 6 + i] = BLUE_CR;
  115.             y[fillSize * 7 + 2 * i] = BLACK_Y;
  116.             y[fillSize * 7 + 2 * i + 1] = BLACK_Y;
  117.             cb[(fillSize >> 1) * 7 + i] = BLACK_CB;
  118.             cr[(fillSize >> 1) * 7 + i] = BLACK_CR;
  119.         }    
  120.         y  += lineSize;
  121.         cb += lineSize >> 1;
  122.         cr += lineSize >> 1;
  123.     }
  124. }