osd_BmpUI.c
上传用户:caisangzi8
上传日期:2013-10-25
资源大小:15756k
文件大小:39k
源码类别:

DVD

开发平台:

C/C++

  1. /**************************************************************
  2. ** FILE
  3. ** Osd_BmpUI.c
  4. **
  5. ** DESCRIPTION
  6. ** The basic  functions of Setup_Bmp.c, build a new GUI with bmp for setup.
  7. **
  8. **
  9. **   Creator: feeling,suqiaoli
  10. **   Date:    2004-7-7 16:32
  11. ****************************************************************/
  12. #include "config.h"
  13. #include "regmap.h"
  14. #include "global.h"
  15. #include "memmap.h"
  16. #include "func.h"
  17. #include "fsNAV.h"
  18. //#include "stdlib.h"
  19. //#include "cfont.h"
  20. //#include "osd.h"
  21. //#include "osdsup.h"
  22. //#include "osdfont.h"
  23. //#include "osd_str.h"
  24. //#include "user_init.h"
  25. //#include "endian.h"
  26. //#include "user_if.h"
  27. #ifdef OSD_BMP
  28. #include "Osd_Bmp.h"
  29. #include "Osd_BmpUI.h"
  30. //#include "Osd_BmpPalette.h"
  31. extern void ReverseImg(const BYTE ImgOriData[], BYTE ImgTransData[], BYTE iMode);
  32. extern  UINT8   osd_temp_buf[];
  33. #ifdef OSD_BMP_DISPLAY
  34. #define DISP_SHADOW         0x07
  35. #define DISP_SHADOW_CDROM   0
  36. const OSD_BITMAP_LAYOUT_S g_aOsdDispBmp[] =
  37. {
  38.      //{xStart, yStart, Width, Height, xOffset, yOffset, Index in g_aBitmap, Region}
  39.      //display osd :bmp index from 0~15 
  40.      {507, 2,     0,     0,       0,    0,     0,       0}, //angle_16.bmp //0
  41.      {53,    2,     0,     0,      0,    0,     1,       0}, //cd_16.bmp //1
  42.      {53,    2,     0,      0,      0,    0,     2,    0}, //cdrom_16.bmp  //2
  43.      {458,   7,     0,      0,      0,    0,     3,    0}, //clock_icon_16.bmp //3
  44.      {381,   2,     0,      0,      0,    0,     4,    0},//dolby_16.bmp  //4
  45.      {381,  7,     0,     0,      0,    0,     5,    0},//dts_16.bmp  //5
  46.     {53,   2,     0,     0,      0,    0,     6,       0},//dvd_16.bmp  //6
  47.      {143,   7,     0,      0,      0,    0,     7,       0},//language_16.bmp //7
  48.      {404,   7,     0,      0,      0,    0,     8,    0},//mute_icon_16.bmp //8
  49.      {350,  7,     0,      0,      0,    0,     9,       0},//repeat-1_16.bmp  //9
  50.     {350,   7,     0,     0,      0,    0,     10,     0},//repeat-all_16.bmp  //10
  51.      {350,   7,     0,      0,      0,    0,     11,      0},//repeat-close_16.bmp   //11
  52.      {261,   2,    0,      0,      0,    0,     12,     0}, //sub_title_16.bmp //12
  53.      {53,   2,     0,      0,      0,    0,     13,      0}, //svcd_16.bmp  //13
  54.      {53,  2,     0,      0,       0,    0,     14,     0},//vcd_16.bmp //14
  55.      {404,  7,     0,      0,      0,    0,     15,     0},//volume_icon_16.bmp //15
  56. };
  57. #endif
  58. #ifdef OSD_BMP_SOUND
  59. const OSD_BITMAP_LAYOUT_S g_aOsdSoundBmp[] =
  60. {
  61.      //{xStart, yStart, Width, Height, xOffset, yOffset, Index in g_aBitmap, Region}
  62. //sound 3d
  63. {0, 0,     576,    14,     0, 0,      16,     1},//OSD_BG_BMP_A     //0
  64. {16,    0,     144,    14,     134,    0,      17,     1},//OSD_DOWN_BG_BMP_A     //1
  65. {0, 0,     0,   0, 0, 0,     18,     3},//OSD_4_1_BMP_D          //2
  66. {14,    0,     548,    12,     0, 0,     19,     3},//OSD_4_2_BMP_D          //3
  67. {562, 0,     0,     0, 0, 0,     20,     3},//OSD_4_3_BMP_D          //4
  68. {0, 0,     16, 214,  0, 0,     21,     4},//OSD_5_1_BMP_E          //5
  69. {560, 0,     16, 214,    0, 0,     22,     4},//OSD_5_3_BMP_E     //6
  70. {0, 0,     0, 0, 0, 0,     23,     5},//OSD_6_1_BMP_F //7
  71. {14,    0,     546,    20, 0, 0,     24,     5},//OSD_6_2_BMP_F //8
  72. {562, 0,     0, 0, 0, 0,     25,     5},//OSD_6_3_BMP_F //9
  73.     {20,    26,     136,    8,      134,    0,     26,     2},//OSD_CURSOR_1_BMP_B     //10
  74.     {20,    0,     136,    10,     134,    0,     27,     3},//OSD_CURSOR_2_BMP_D //11
  75.     {122,   122, 0,      0,      26,     0,     28,     4},//SOUND_SLIDE_ARROW_SELECTED_BMP_E3 //12
  76.     {122,   122, 0,      0,     26,     0,     29,     4},//SOUND_SLIDE_ARROW_CURSOR_BMP_E3 //13
  77. };
  78. const OSD_LINE_LAYOUT_S g_aOsdSoundLine[] =
  79. {
  80. //{xStart, yStart, Width, Height, xOffset, yOffset, Color,  Region} 
  81. //sound 3d osd
  82. {14,    1,      2,    13,     134,      0,      7,      1},//SOUND_LINE1_A //0
  83. {160,   1,      2,    13,     134,      0,      7,      1},//SOUND_LINE2_A //1
  84. {14,    0,    2,    34,     134,    0,    8,    2},//SOUND_LINE1_B //2
  85. {160,   0,    2,    34,     134,    0,    8,    2},//SOUND_LINE2_B //3
  86. {0,     33, 576,    1,      0,      0,    9,    2},//SOUND_BG_LINE_B //4
  87. {14,    0,    2,    12,     134,    0,    9,    3},//SOUND_LINE1_D //5
  88. {160,   0,    2,    12,     134,    0,    9,    3},//SOUND_LINE2_D //6
  89. {32,   22, 246,    1,      0,        28,    11,  4},//SOUND_CURSOR_UP_LINE_E4 //7
  90. {32,   49, 246,    1,      0,        28,    11,   4},//SOUND_CURSOR_DOWN_LINE_E4 //8
  91. {32,   22, 246,    1,      0,        28,   1,    4},//SOUND_SEL_UP_LINE_E4 //9
  92. {32,   49, 246,    1,      0,        28,    1,   4},//SOUND_SEL_DOWN_LINE_E4 //10
  93. {132, 84,  2,   20,  312, 0,   14,   4},//SOUND_SCALE_N6_LINE_E3 11
  94. {158, 96,  2,   8,    52,   0,   14,   4},//SOUND_SCALE_N6_N4_LINE_E3 12
  95. {184, 92,  2,   12,  52,   0,   14,   4},//SOUND_SCALE_N4_LINE_E3 13
  96. {132, 110, 314, 4,   0,   0,   14,   4},//SOUND_SCALE_LINE_E3
  97. };
  98. const OSD_RECT_LAYOUT_S g_aOsdSoundRect[] =
  99. {
  100. //{xStart, yStart, xLen, yLen, xOffset, yOffset, bgColor, Region}
  101. //sound 3d osd
  102. {162,   1,      8,      13,     134,    0,      0,      1},//SOUND_SHADOW_A //0
  103. {0,     0,    576, 34,     0,       0,    0,    2},//SOUND_RECT_BG_B //1
  104. {16,    0,      144,    34,     134,    0,      4,      2},//SOUND_DOWN_B   //2
  105. {162,   0,      8,      34,     134,    0,      13,     2},//SOUND_SHADOW_B //3
  106. {162,   0,      8,      8,      134,    0,      4,      3},//SOUND_SHADOW_D //4
  107. {16,    0,      144,    12,     134,    0,      0,      3},//SOUND_DOWN_D //5
  108. {32,    23,     246,    26,     0,      28,     12,     4},//SOUND_CURSOR_RECT_E4 //6
  109. {32,    23,     246,    26,     0,      28,     3,      4},//SOUND_SEL_RECT_E4 //7
  110. {32,    22,     246,    28,     0,      28,     0,      4},//SOUND_UNSEL_RECT_E4 //8
  111. {16,    0,      544,    214,    0,      0,      0,      4},//SOUND_BG_RECT_E4 //9
  112. {294,   32,     248,    160,    0,      0,      2,      4},//SOUND_EQ_BG_RECT_E1 //10
  113. {164,   32,     248,    160,    0,      0,      2,      4},//SOUND_BAND_BG_RECT_E1//11
  114. {100,   114,    380,    80,     0,      0,      0,      4},//SOUND_KEY_BG_RECT_E3//12
  115. {432,   6,      110,    26,     0,      0,      2,      4},//SOUND_EQ_POPUP_BG_RECT_E4 //13
  116. {298,   32,     24,     160,    18,     0,      8,      4},//SOUND_EQ_CURSOR_BG_RECT_E4 //14
  117. {298,   32,     24,     160,    18,     0,      2,      4},//SOUND_EQ_UNSEL_BG_RECT_E4 //15
  118. };
  119. const OSD_STR_LAYOUT_S g_aOsdSoundStr[] =
  120. {
  121. //{xStart, yStart, xOffset, yOffset, fontColor, bgColor, region}
  122. //sound 3d osd
  123. {88-32, 0, 134, 0, 8,    0,    2},//SOUND_UNSEL_STR_B //0
  124. {88-32, 0,    134, 0,    7,    4,    2},//SOUND_SEL_STR_B    //1
  125. {42, 24, 0, 28, 14, 0,    4},//SOUND_UNHL_ITEM_STR_E4 //2
  126. {42, 24, 0,    28, 15, 0, 4},//SOUND_HL_ITEM_STR_E4  //3
  127. {436,      8,    0,     0,    8,    2,     4},//SOUND_EQ_STR_E4   4
  128. {92,        86,  378, 0,    14,   0,    4},//SOUND_SCALE_KEY_STR_E3 5
  129. {118,      50,  52,   0,    14,   0,    4},//SOUND_SCALE_N_NUM_STR_E3 6
  130. {280,      50,  52,   0,    14,   0,     4},//SOUND_SCALE_P_NUM_STR_E3 7
  131. };    
  132. #endif    
  133. #ifdef OSD_BMP_PROG
  134. //prog data structure:bmp data,index:0~9
  135. const OSD_BITMAP_LAYOUT_S g_aOsdProgBmp[] =
  136. {
  137.   //{xStart, yStart, Width, Height, xOffset, yOffset, Index in g_aBitmap, Region}
  138. {0,     0,     592,    14,     0,      0,     16,     1},//OSD_BG_BMP_A         //0
  139.     {16,    0,     158,    14,     0,      0,     17,     1},//OSD_DOWN_BG_BMP_A         //1
  140. {0,     0,     0,      0,      0,      0,     18,     3},//OSD_4_1_BMP_D //2
  141.     {14,    0,     564,    12,     0,      0,     19,     3},//OSD_4_2_BMP_D //3
  142.     {576, 0,      0,      0,      0,      0,     20,     3},//OSD_4_3_BMP_D //4
  143. {0,     0,     16,     262,    0,      0,     21,     4},//OSD_5_1_BMP_E             //5
  144.     {576,   0,     16,     262,    0, 0,     22,     4},//OSD_5_3_BMP_E //6
  145. {0,     0,     0,      0,      0, 0,     23,     5},//OSD_6_1_BMP_F //7
  146. {16,    0,     560,    20,     0,      0,     24,     5},//OSD_6_2_BMP_F //8
  147. {576, 0,     0,      0,      0, 0,     25,     5},//OSD_6_3_BMP_F //9
  148.     {60,    8,      0,      0,      140,    0,      30,     4},//PROG_CDROM_FOLDER_BMP_D    //10
  149.     {128,   8,      0,      0,      140,    0,      31,     4},//PROG_CDROM_FILE_BMP_D      //11
  150. };
  151. //prog data structure:line data,index:0~6
  152. const OSD_LINE_LAYOUT_S g_aOsdProgLine[] =
  153. {
  154.   //{xStart, yStart, Width, Height, xOffset, yOffset, Color,  Region} 
  155. {14,    1,    2,    13,     0,    0,    7,    1},//PROG_LINE1_A //0
  156. {174,   1,    2,    13,     0,    0,    7,    1},//PROG_LINE2_A //1
  157. {14,    0,    2,    34,     0,    0,    8,    2},//PROG_LINE1_B //2
  158. {174,   0,    2,    34,     0,    0,    8,    2},//PROG_LINE2_B //3
  159. {0,     33,   592,    1,    0,    0,    9,    2},//PROG_BG_LINE_B //4
  160. {14,    0,    2,    12,     0,    0,    9,    3},//PROG_LINE1_D //5
  161. {174,   0,    2,    12,     0,    0,    9,    3},//PROG_LINE2_D //6
  162. };
  163. //prog data structure:rect data,index:0~8
  164. const OSD_RECT_LAYOUT_S g_aOsdProgRect[] =
  165. {
  166.   //{xStart, yStart, xLen, yLen, xOffset, yOffset, bgColor, Region}
  167. {176,   1,    8,   13,     0,      0,    0,    1},//PROG_SHADOW_A //0
  168. {176,   0,    8,    34,     0,      0,    13,   2},//PROG_SHADOW_B //1
  169. {16,    0,    158,  34,     0,      0,    4,    2},//PROG_DOWN_B //2
  170. {176,   0,    8,    8,      0,      0,    4,    3},//PROG_SHADOW_D //3
  171. {16,    0,    158,  12,     0,      0,    0,    3},//PROG_DOWN_D //4
  172. {16, 226,  560,  1,      0,      0,    15,   4},//PROG_BG2_E          //5 //5
  173. {16, 227,  560,  39,     0,      0,    2,    4}, //PROG_BG3_E //6 //6
  174. {222, 234,  158,  22,     0,      0,    1,    4}, //PROG_PLAY_NORMAL_E  //7 //7
  175. {402, 234,  158,  22,     0,      0,    1,    4}, //PROG_RESET_NORMAL_E  //8 //8
  176. };
  177. //prog data structure:str data,index:0
  178. const OSD_STR_LAYOUT_S g_aOsdProgStr[] =
  179. {
  180.   //{xStart, yStart, xOffset, yOffset, fontColor, bgColor, region}
  181. {18+23,    0,    0,    0,    14,    0,    2},      //PROG_STR_B         //0
  182. {96,       8,    140,  0,    11 ,   0,    4},       //PROG_STR_COLON     //1
  183.     {60,       10,    140,  0,    11 ,   0,    4},       //PROG_DVD_TT        //2
  184.     {112+16,      10,    140,  0,    11 ,    0,    4},      //PROG_DVD_CH        //3       
  185. };
  186. #endif//ifdef OSD_BMP_PROG
  187. #endif //end ifdef OSD_BMP
  188. /*
  189.  *Funciton Description:  
  190.  *  Draw BMP on osd region r with given colors.
  191.  *  The bmp image data and platte was made by image processing software.
  192.  * 
  193.  * NOTE:
  194.  *  It can draw 4/16/256 color bmp.
  195.  *   
  196.  * zhaoyanhua 2004-3-12 14:16
  197.  */
  198. #if defined (OSD_BMP)
  199.  void osd_draw_bmp(int xStart, int yStart,const BYTE* bmp,  BYTE r)
  200. {
  201.   UINT32  iDispLoc;
  202. int     i = 0, j = 0, k = 0;
  203. int     iBmpWidth = 0, iBmpHeight = 0;
  204. int   iRegionWidth = region[r].osd_w;
  205. int  iOsdFormat = region[r].osd_format;
  206. int  iPixPerByte,iBitsPerPix;//Bperpixel: how many bits a pixel need.
  207. //shift_num: get next pixel position
  208. UINT32 uiBit32;
  209.   UINT32 uiPos;
  210.   int iYy = 0;
  211.     UINT32 *pp;
  212.     UINT32 *pTopLine, *pBtmLine;
  213. pTopLine = (UINT32 *)get_osdbuf_region_ptr(r,0);   // region r top
  214. pBtmLine = (UINT32 *)get_osdbuf_region_ptr(r,1);   // region r bot
  215.    
  216. osd_tog_region(r, OSD_ON);
  217. #ifdef OSD_VARIABLE_TEMP_DISPLAY_BUF
  218. OSD_GetTrueDispRegion();
  219. osd_tog_region(temp_region,OSD_OFF);
  220. #endif
  221. iRegionWidth = region[r].osd_w;
  222. switch (iOsdFormat)
  223. {
  224. case OSD_FORMAT_4COLOR://2bit
  225.      iPixPerByte = 4; // 8/2
  226.      iBitsPerPix = 2;
  227.      break;
  228. case OSD_FORMAT_256COLOR://8bit
  229.      iPixPerByte = 1; // 8/8
  230.      iBitsPerPix = 8;
  231.      break;
  232. case OSD_FORMAT_16COLOR://4bit
  233.      iPixPerByte = 2; // 8/4
  234.      iBitsPerPix = 4;
  235.      break;
  236. default:
  237.      iPixPerByte = 2; // 8/4
  238.      iBitsPerPix = 4;
  239.      break;
  240. }
  241. //get Keyboard bmp information
  242. iBmpWidth  = bmp[0];
  243. iBmpHeight   = bmp[1];
  244.     //start to process
  245.     uiPos = 2;    
  246.     
  247.     // write how many pixles one time.
  248. //write 32bit one time.
  249. unsigned uPixPerTime = 32 / iBitsPerPix;
  250. unsigned uExeTimes = iBmpWidth / uPixPerTime;
  251.  
  252. for (j=0; j<iBmpHeight; j++)
  253. {
  254.      unsigned uCurByte;
  255.      iYy = (p_scan) ? yStart : yStart>>1;
  256.         pp = (yStart&1) ? pBtmLine : pTopLine;
  257.     
  258.      //NOTE:
  259.      // the following sentence is to calculate the start position 
  260.      //in OSD buffer with the byte unit.
  261.      iDispLoc = (iYy*iRegionWidth) / 4 + (xStart/iPixPerByte) / 4;
  262.         for (i=0; i<uExeTimes; i++)
  263.         {
  264.     uiBit32 = 0;
  265.     //bmp   :  Byte1 Byte2 Byte3 Byte4      osd buffer
  266.     //         0x12   0x34  0x56  0x78     ------>    0x78563412
  267.             for (k=0;k<4;k++)
  268.             //0x12 0x34 0x56 0x78=>0x78 0x56 0x34 0x12
  269.             {
  270.              unsigned uCurByte = bmp[uiPos++];
  271.             #ifdef OSD_VARIABLE_TEMP_DISPLAY_BUF
  272.             //0 of bmp is display bar's background.
  273.              if((uCurByte == 0)&&((r== disp_region)||(r== temp_region)))
  274.                 {
  275.                  if(OSD_ShowBottomDisp() == 1)
  276.              uCurByte = (DISP_SHADOW_CDROM<<4) | DISP_SHADOW_CDROM;
  277.              else
  278.                         uCurByte = (DISP_SHADOW << 4) | DISP_SHADOW;
  279.                 }
  280.            #endif              
  281.              uiBit32 = uiBit32 | (uCurByte<<8*k);
  282.             }           
  283.                 pp[iDispLoc + i] =  uiBit32;
  284.             }//end for (i=0; i<uExeTimes; i++)
  285.         yStart++; //next line
  286.     }//for bmp height ,end for (j=0; j<iBmpHeight; j++)   
  287. }//end osd_draw_bmp
  288. #endif // #if defined (OSD_BMP)
  289. #ifdef OSD_BMP_DISPLAY//feeling
  290. /*
  291.  *Funciton Description:  
  292.  *  Draw BMP on display with tempbuf operation.
  293.  *  The bmp image data and platte was made by image processing software.
  294.  * 
  295.  * NOTE:
  296.  *  It can draw 4/16/256 color bmp.
  297.  *   
  298.  * feeling  2004-8-19
  299.  */
  300. void osd_draw_bmp_display(int xStart, int yStart,const BYTE* bmp,  BYTE r)
  301. {
  302. UINT32  iDispLoc;
  303. int     i = 0, j = 0, k = 0;
  304. int     iBmpWidth = 0, iBmpHeight = 0;
  305. int   iRegionWidth = region[r].osd_w;
  306. int  iOsdFormat = region[r].osd_format;
  307. int  iPixPerByte,iBitsPerPix;//Bperpixel: how many bits a pixel need.
  308. //shift_num: get next pixel position
  309. UINT32 uiBit32;
  310.   UINT32 uiPos;
  311.  
  312.   UINT32  *buf;
  313.     
  314. osd_tog_region(r, OSD_ON);
  315. iRegionWidth = region[r].osd_w;
  316. switch (iOsdFormat)
  317. {
  318. case OSD_FORMAT_4COLOR://2bit
  319.      iPixPerByte = 4; // 8/2
  320.      iBitsPerPix = 2;
  321.      break;
  322. case OSD_FORMAT_256COLOR://8bit
  323.      iPixPerByte = 1; // 8/8
  324.      iBitsPerPix = 8;
  325.      break;
  326. case OSD_FORMAT_16COLOR://4bit
  327.      iPixPerByte = 2; // 8/4
  328.      iBitsPerPix = 4;
  329.      break;
  330. default:
  331.      iPixPerByte = 2; // 8/4
  332.      iBitsPerPix = 4;
  333.      break;
  334. }
  335. buf = (UINT32 *)(osd_temp_buf);
  336. //get Keyboard bmp information
  337. iBmpWidth  = bmp[0];
  338. iBmpHeight   = bmp[1];
  339.     //start to process
  340.     uiPos = 2;    
  341.     
  342.     // write how many pixles one time.
  343. //write 32bit one time.
  344. unsigned uPixPerTime = 32 / iBitsPerPix;
  345. unsigned uExeTimes = iBmpWidth / uPixPerTime;
  346.  
  347. for (j=0; j<iBmpHeight; j++)
  348. {
  349.      unsigned uCurByte;
  350.     
  351.      //NOTE:
  352.      // the following sentence is to calculate the start position 
  353.      //in OSD buffer with the byte unit.
  354.      iDispLoc = (yStart*iRegionWidth) / 4 + (xStart/iPixPerByte) / 4;
  355.         for (i=0; i<uExeTimes; i++)
  356.         {
  357.         uiBit32 = 0;
  358.         //bmp   :  Byte1 Byte2 Byte3 Byte4      osd buffer
  359.         //         0x12   0x34  0x56  0x78     ------>    0x78563412
  360.             for (k=0;k < 4;k++)//32 bit one time 
  361.             {
  362.                 uCurByte = bmp[uiPos++];
  363.             if(uCurByte == 0)
  364.                 {
  365.                     #ifdef DISP_REGION_BOTTOM
  366.                     //fill background color to transparent area of the bmp icon 
  367.              if(OSD_ShowBottomDisp() == 1)
  368.                         uCurByte = (DISP_SHADOW_CDROM<<4) | DISP_SHADOW_CDROM;
  369.         else
  370.          #endif//DISP_VARIABLE_REGION             
  371.                         uCurByte = (DISP_SHADOW << 4) | DISP_SHADOW;
  372.                 }
  373.                // when high 4bit is 0 and low 4bit is 0 , for bmp matrix date,fill background color to transparent area of the bmp icon , because of 4bit represent a color for 16_color bmp.zhuyf 20/12/2004 15:31
  374.         else if((uCurByte & 0xf0) == 0)
  375.         {                    
  376.             if(OSD_ShowBottomDisp() == 1)
  377.                         uCurByte = (DISP_SHADOW_CDROM<<4) | (uCurByte& 0x0f);
  378.         else
  379.                         uCurByte = (DISP_SHADOW << 4) | (uCurByte& 0x0f);                                         
  380.                 }                   
  381.         else if((uCurByte & 0x0f) == 0)
  382.          {                 
  383.             if(OSD_ShowBottomDisp() == 1)
  384.                         uCurByte = (DISP_SHADOW_CDROM) | (uCurByte& 0xf0);
  385.         else
  386.                         uCurByte = (DISP_SHADOW ) | (uCurByte& 0xf0);                                                       
  387.                 }         
  388.         if(((uCurByte & 0xff) == 0)&&((uCurByte & 0x0f) == 0)&&((uCurByte & 0xf0) == 0))
  389.             continue;
  390.                 //there is error in the underside ,marked ,instead by the above part. zhuyf  20/12/2004 15:33
  391.                 /*
  392.         if((uCurByte & 0xf0) == 0)
  393.                 {
  394.         uiBit32 = (uiBit32 & (~( 0xf0<<k*8))) |(uCurByte<<(k*8));
  395.         }
  396.             else if((uCurByte & 0x0f) == 0)
  397.         {
  398.         uiBit32 = (uiBit32 & (~( 0x0f<<k*8))) |(uCurByte<<(k*8));
  399.         }
  400.         */
  401.         
  402.             else
  403.                 {
  404.                     uiBit32 = (uiBit32 & (~( 0xff <<k*8))) |(uCurByte<<(k*8));
  405.                 }
  406.                 //if curBYTE == 0x00,not dispose it.
  407.             }//end for (k=0;k < 4;k++)
  408.             buf[iDispLoc + i] =  uiBit32;//fill 32bits to osd temp buf
  409.         }//end for (i=0; i<uExeTimes; i++)
  410.     yStart++; //next line
  411. }//for bmp height ,end for (j=0; j<iBmpHeight; j++)
  412. }//end osd_draw_bmp_display()
  413. #endif //OSD_BMP_DISPLAY
  414. #ifdef OSD_BMP
  415. /* 
  416.  *Funciton Description:  
  417.  *  Draw little string on osd
  418.  *  
  419.  * INPUT:
  420.  *   xStart,yStart     --> the start of string,
  421.  *   str               --> string 
  422.  *   fontColor,bkColor --> the string font color and background color
  423.  *   r                 --> region
  424.  * 
  425.  * NOTE:
  426.  *  its size is 1/4 size of normal string
  427.  *  
  428.  *  suqiaoli add 2004-11
  429.  */
  430. void osd_Draw_Bmp_Little_RegionString(UINT32 xStart, UINT32 yStart, const BYTE *str, BYTE fontColor, BYTE bkColor, BYTE r)
  431. {
  432.     BYTE    *pFont, c;
  433.     UINT8  *pTopLine, *pBtmLine;
  434.     UINT32  iDispLoc, iStrLoc;
  435.     int     i, j, k;
  436.     int     iFontWidth, iFontHigh;
  437.     int     iRegionWidth = region[r].osd_w;
  438.     osd_tog_region(r, OSD_ON);  
  439.     
  440. #ifdef OSD_VARIABLE_TEMP_DISPLAY_BUF
  441. OSD_GetTrueDispRegion();
  442. osd_tog_region(temp_region,OSD_OFF);
  443. #endif
  444.     
  445.     //initialize buffer start
  446.     pTopLine = (UINT8 *)get_osdbuf_region_ptr(r,0);
  447.     pBtmLine = (UINT8 *)get_osdbuf_region_ptr(r,1);
  448.     iStrLoc = 0;
  449.        
  450.     if (p_scan==1)
  451.     {
  452. #ifdef NEWSTYLE_WINDOW   //xiongyuyue
  453.         if(full_scrn&MESSAGE)
  454.             iDispLoc = (yStart*iRegionWidth) + (xStart);
  455.         else
  456. #endif
  457.          //iDispLoc = (yStart*iRegionWidth) + (xStart*16/8)+(iRegionWidth/2);
  458.          iDispLoc = yStart*iRegionWidth + xStart/2;
  459.     }
  460.     else
  461.     {
  462. #ifdef NEWSTYLE_WINDOW   //xiongyuyue
  463.     if(full_scrn&MESSAGE)
  464.         iDispLoc = (yStart*iRegionWidth/2) + (xStart);
  465.     else
  466. #endif
  467.   iDispLoc = (yStart*iRegionWidth+xStart)/2;
  468.     }
  469.     
  470.     iDispLoc = iDispLoc*2;
  471.     //skip n blank line on top(in pixel)
  472.     //for interlace mode, we will skip n/2 blank lines, for example 4/2=2
  473.     //iDispLoc += (iRegionWidth/4 * 2);
  474.     
  475.     //process each charactor until string ending('')
  476.     while ( (c = ((BYTE *)str)[iStrLoc]) != '' ) 
  477.     {
  478.         BYTE curByte = 0;
  479.         UINT32 pixel8;
  480.         UINT32 pos;
  481.         
  482.         iStrLoc++;
  483.         
  484.         if (c == 'r') 
  485.         { //prefix characher:to use font_table2
  486.             if ( (c = ((BYTE *)str)[iStrLoc])=='' )
  487.                 break;
  488.             
  489.             iStrLoc++;
  490.             if ((pFont = get_font_entry(1,c))==NULL) continue;
  491.         }
  492. #if defined(NEWSTYLE_WINDOW)||defined(NEW_STYLE_SETUP)  || defined(SUPPORT_REP_READ) //maoyong add 0915
  493.         else if(c == 'a')
  494.         {
  495.             if ( (c=((BYTE *)str)[iStrLoc])=='' ) break;
  496.             
  497.             iStrLoc++;
  498.             if ((pFont = get_font_entry(3,c))==NULL) continue;
  499.         }
  500. #endif 
  501. else if(c>='a' && c<='z')
  502. {
  503.     pFont=get_font_entry(0,c-'a'+0xc0);
  504. }
  505.     else 
  506.          //get current char entry
  507.          pFont = get_font_entry(0,c);
  508.   
  509.     //start to process
  510.     pos = 3;
  511.     //get font information
  512.     iFontWidth = (int)pFont[0];
  513.     iFontHigh = (int)pFont[1];
  514. if(p_scan==0)
  515. iFontHigh>>=1;
  516.           
  517.         //start to draw        
  518. for (j=0; j<iFontHigh; j++) 
  519. {
  520.             //For every string line = 1 blank line(in pixel) + OSD_FONT_HEIGHT-line strings + 1 blank line
  521.             //draw top line
  522.             for (i=0; i<iFontWidth/2; i++) 
  523.             {
  524. BYTE c;
  525. c=pFont[pos+i/4];
  526. pixel8 = pTopLine[iDispLoc+i];//zhao add 2004-2-27 14:41
  527.            switch(i%4)
  528.                {
  529.                case 0:
  530. curByte=(c&0xc0)>>6;
  531. break;
  532. case 1:
  533. curByte=(c&0x30)>>4;
  534.              break;
  535. case 2:
  536.              curByte=(c&0x0c)>>2;
  537.                break;
  538.                case 3:
  539.                curByte=(c&0x03);
  540.                break;
  541.            }
  542.           
  543. for (k=0; k<2; k++) 
  544. {
  545.              if ( (1<<k) & curByte ) 
  546.              {          
  547.              pixel8 = (pixel8 & (~( 0x0f<<k*4))) |(fontColor<<(k*4));//zhao add 2004-2-27 14:41
  548.              } 
  549.              else 
  550.             {
  551.                  if(bkColor != 0)//if color index is 0, no need to change the vlaue fo pixel8
  552.                  pixel8 = (pixel8 & (~( 0x0f<<k*4))) | (bkColor<<(k*4));//zhao add 2004-2-27 14:41
  553.             }
  554. }
  555.             if((i % 2 == 0) &&(j % 2 == 0)) //four dots ---> one dot
  556.                pTopLine[(iDispLoc+i)/2] = pixel8;
  557.             }
  558.          if(iFontWidth%8)
  559. pos=pos+iFontWidth/8+1;
  560.          else
  561.          pos=pos+iFontWidth/8;
  562.       
  563.             if(p_scan==0)
  564.             {
  565.                //draw bottom line
  566.                for (i=0; i<iFontWidth/2; i++) 
  567.                {
  568.                  BYTE c;
  569. c=pFont[pos+i/4];
  570.                  pixel8 = pBtmLine[iDispLoc+i];//zhao add 2004-2-27 14:41
  571. switch(i%4)
  572. {
  573.            case 0:
  574. curByte=(c&0xc0)>>6;
  575. break;
  576. case 1:
  577. curByte=(c&0x30)>>4;
  578.                      break;
  579.                 case 2:
  580.                  curByte=(c&0x0c)>>2;
  581.                break;
  582.                case 3:
  583.                curByte=(c&0x03);
  584.                break;
  585. }
  586. for (k=0; k<2; k++) 
  587. {          
  588. if ( (1<<k) & curByte ) 
  589.                      {
  590.                  pixel8 = (pixel8 & (~( 0x0f<<k*4))) |(fontColor<<(k*4));//zhao add 2004-2-27 14:41
  591.    } else
  592.    {
  593.                          if(bkColor != 0)//if color index is 0, no need to change the vlaue fo pixel8
  594.                          pixel8 = (pixel8 & (~( 0x0f<<k*4))) | (bkColor<<(k*4));//zhao add 2004-2-27 14:41
  595.                      }
  596.                    }
  597.             if((i % 2 == 0) &&(j % 2 == 0)) //four dots ---> one dot
  598.                   pBtmLine[(iDispLoc+i)/2] = pixel8;
  599.                }
  600.             
  601.     if(iFontWidth%8)
  602. pos=pos+iFontWidth/8+1;
  603.          else
  604.          pos=pos+iFontWidth/8;
  605.         
  606.             }
  607.             
  608.             iDispLoc += iRegionWidth;
  609.             
  610.         }//for charactor heigh  
  611.         
  612.          //move to next character and move up to first line of this string
  613.         iDispLoc = iDispLoc + (iFontWidth/2) - (iRegionWidth*iFontHigh);
  614.     
  615.     } // end of while ( (c=((BYTE *)str)[unFontLoc])!='' )
  616.     
  617.     //timeout_osd[r] = 0;//zhaoyanhua mask it. 
  618. }
  619. /*
  620.  *Funciton Description:  
  621.  *  Draw  string on osd
  622.  *  
  623.  * 
  624.  * INPUT:
  625.  *   xStart,yStart     --> the start of string,
  626.  *   str               --> string 
  627.  *   fontColor,bkColor --> the string font color and background color
  628.  *   r                 --> region
  629.  *   
  630.  * suqiaoli add 2004-11
  631.  */
  632. void osd_Draw_Bmp_RegionString(UINT32 xStart, UINT32 yStart, const BYTE *str, BYTE fontColor, BYTE bkColor, BYTE r)
  633. {
  634.     BYTE    *pFont, c;
  635.     UINT8  *pTopLine, *pBtmLine;
  636.     UINT32  iDispLoc, iStrLoc;
  637.     int     i, j, k;
  638.     int     iFontWidth, iFontHigh;
  639.     int     iRegionWidth = region[r].osd_w;
  640.     osd_tog_region(r, OSD_ON);  
  641.     
  642. #ifdef OSD_VARIABLE_TEMP_DISPLAY_BUF
  643. OSD_GetTrueDispRegion();
  644. osd_tog_region(temp_region,OSD_OFF);
  645. #endif 
  646.     
  647.     //initialize buffer start
  648.     pTopLine = (UINT8 *)get_osdbuf_region_ptr(r,0);
  649.     pBtmLine = (UINT8 *)get_osdbuf_region_ptr(r,1);
  650.     iStrLoc = 0;
  651.        
  652.     if (p_scan==1)
  653.     {
  654. #ifdef NEWSTYLE_WINDOW   //xiongyuyue
  655.         if(full_scrn&MESSAGE)
  656.             iDispLoc = (yStart*iRegionWidth) + (xStart);
  657.         else
  658. #endif
  659.             //iDispLoc = (yStart*iRegionWidth) + (xStart*16/8)+(iRegionWidth/2);
  660.             iDispLoc = yStart*iRegionWidth+ xStart/2;
  661.     }
  662.     else
  663.     {
  664. #ifdef NEWSTYLE_WINDOW   //xiongyuyue
  665.     if(full_scrn&MESSAGE)
  666.         iDispLoc = (yStart*iRegionWidth/2) + (xStart);
  667.     else
  668. #endif
  669.     iDispLoc = (yStart*iRegionWidth+xStart)/2;
  670.     }
  671.     //skip n blank line on top(in pixel)
  672.     //for interlace mode, we will skip n/2 blank lines, for example 4/2=2
  673.     //iDispLoc += (iRegionWidth/4 * 2);
  674.     
  675.     //process each charactor until string ending('')
  676.     while ( (c = ((BYTE *)str)[iStrLoc]) != '' ) 
  677.     {
  678.         BYTE curByte = 0;
  679.         UINT32 pixel8;
  680.         UINT32 pos;
  681.         
  682.         iStrLoc++;
  683.         
  684.         if (c == 'r') 
  685.         { //prefix characher:to use font_table2
  686.             if ( (c = ((BYTE *)str)[iStrLoc])=='' )
  687.                 break;
  688.             
  689.             iStrLoc++;
  690.             if ((pFont = get_font_entry(1,c))==NULL) continue;
  691.         }
  692. #if defined(NEWSTYLE_WINDOW)||defined(NEW_STYLE_SETUP)  || defined(SUPPORT_REP_READ) //maoyong add 0915
  693.         else if(c == 'a')
  694.         {
  695.             if ( (c=((BYTE *)str)[iStrLoc])=='' ) break;
  696.             
  697.             iStrLoc++;
  698.             if ((pFont = get_font_entry(3,c))==NULL) continue;
  699.         }
  700. #endif 
  701. else if(c>='a' && c<='z')
  702. pFont=get_font_entry(0,c-'a'+0xc0);
  703.     else
  704.         //get current char entry
  705.         pFont = get_font_entry(0,c);
  706.    
  707.         //start to process
  708.         pos = 3;
  709.         //get font information
  710.         iFontWidth = (int)pFont[0];
  711.         iFontHigh = (int)pFont[1];
  712.         if(p_scan==0)
  713.           iFontHigh>>=1;
  714.           
  715.         //start to draw        
  716.         for (j=0; j<iFontHigh; j++) 
  717.         {
  718.             //For every string line = 1 blank line(in pixel) + OSD_FONT_HEIGHT-line strings + 1 blank line
  719.             //draw top line
  720.             for (i=0; i<iFontWidth/2; i++) 
  721.             {
  722.                 BYTE c;
  723.                 c=pFont[pos+i/4];
  724.                 pixel8 = pTopLine[iDispLoc+i];//zhao add 2004-2-27 14:41
  725.           
  726.            switch(i%4)
  727.                {
  728.                case 0:
  729.     curByte=(c&0xc0)>>6;
  730.     break;
  731.     case 1:
  732.     curByte=(c&0x30)>>4;
  733.                 break;
  734.             case 2:
  735.                 curByte=(c&0x0c)>>2;
  736.                break;
  737.                case 3:
  738.                curByte=(c&0x03);
  739.                break;
  740.            }
  741.           
  742.                 for (k=0; k<2; k++) 
  743.                 {
  744.                 if ( (1<<k) & curByte ) 
  745.                     pixel8 = (pixel8 & (~( 0x0f<<k*4))) |(fontColor<<(k*4));//zhao add 2004-2-27 14:41
  746.                 else 
  747.                 {
  748.                     if(bkColor != 0)//if color index is 0, no need to change the vlaue fo pixel8
  749.                     pixel8 = (pixel8 & (~( 0x0f<<k*4))) | (bkColor<<(k*4));//zhao add 2004-2-27 14:41
  750.                 }
  751.                 }
  752.                 pTopLine[iDispLoc+i] = pixel8;
  753.             }
  754.          if(iFontWidth%8)
  755.     pos=pos+iFontWidth/8+1;
  756.          else
  757.          pos=pos+iFontWidth/8;
  758.       
  759.             if(p_scan==0)
  760.             {
  761.                //draw bottom line
  762.                for (i=0; i<iFontWidth/2; i++) 
  763.                {
  764.                  BYTE c;
  765.         c=pFont[pos+i/4];
  766.                  pixel8 = pBtmLine[iDispLoc+i];//zhao add 2004-2-27 14:41
  767.               
  768.                     switch(i%4)
  769.                     {
  770.                case 0:
  771.          curByte=(c&0xc0)>>6;
  772.          break;
  773.          case 1:
  774.          curByte=(c&0x30)>>4;
  775.                          break;
  776.                      case 2:
  777.                          curByte=(c&0x0c)>>2;
  778.                    break;
  779.                    case 3:
  780.                    curByte=(c&0x03);
  781.                    break;
  782.            }
  783.                     for (k=0; k<2; k++) 
  784.                     {          
  785.                      if ( (1<<k) & curByte ) 
  786.                  pixel8 = (pixel8 & (~( 0x0f<<k*4))) |(fontColor<<(k*4));//zhao add 2004-2-27 14:41
  787.                         else
  788.            {
  789.                             if(bkColor != 0)//if color index is 0, no need to change the vlaue fo pixel8
  790.                          pixel8 = (pixel8 & (~( 0x0f<<k*4))) | (bkColor<<(k*4));//zhao add 2004-2-27 14:41
  791.                         }
  792.                    }
  793.                  pBtmLine[iDispLoc+i] = pixel8;
  794.                 }
  795.             
  796.         if(iFontWidth%8)
  797.     pos=pos+iFontWidth/8+1;
  798.          else
  799.          pos=pos+iFontWidth/8;
  800.             
  801.             }
  802.             
  803.             iDispLoc += iRegionWidth;
  804.             
  805.         }//for charactor heigh  
  806.         
  807.          //move to next character and move up to first line of this string
  808.         iDispLoc = iDispLoc + (iFontWidth/2) - (iRegionWidth*iFontHigh);
  809.    
  810.     } // end of while ( (c=((BYTE *)str)[unFontLoc])!='' )
  811. }
  812. /* 
  813.  * Fuction:
  814.  *   osd_draw_repeat_bmp()
  815.  * Description:
  816.  *      draw the bmp repeatly.
  817.  *
  818.  * INPUT:
  819.  *      uiXStart,uiYStart --> the start of bmp, 
  820.  *      uiXWidth,uiYStart --> the width and height of the needed bmp by repeat line bmp
  821.  *      r----> region
  822.  *CREATOR: feeling
  823.  * DATE: 2004-10-28 
  824.  */
  825. void osd_draw_repeat_bmp(UINT16 uiXStart,UINT16 uiYStart,UINT16 uiXWidth,UINT16 uiYHeight,const BYTE* bmp,BYTE r)
  826. {
  827.     
  828. UINT16 uiXRepeat = 0;
  829. UINT16 uiYRepeat = 0;
  830. UINT16 uiCurX;
  831.      UINT16 uiCurY;
  832.      int i,j;
  833. //the uiXWidth is the demand width that can be seen on the screen, and bmp[0] is the actual size of bmp
  834.      //i.e. uiXWidth = 576, bmp[0] = 2, it means the bmp needs to be drawn for 288 times one by one repeatly
  835. if(uiXWidth % bmp[0])
  836. uiXRepeat = uiXWidth / bmp[0] + 1;
  837. else
  838. uiXRepeat = uiXWidth / bmp[0];
  839. if(uiYHeight % bmp[1])
  840. uiYRepeat = uiYHeight / bmp[1] + 1;
  841. else
  842. uiYRepeat = uiYHeight / bmp[1];
  843. for (j = 0, uiCurY = uiYStart; j < uiYRepeat; j++, uiCurY += bmp[1] )
  844.      {
  845.          for (i = 0,uiCurX = uiXStart; i < uiXRepeat; i++, uiCurX += bmp[0] )
  846.          {
  847.            // printf("uiCurX = %dn",uiCurX);
  848.              osd_draw_bmp(uiCurX, uiCurY, bmp, r);
  849.          }
  850.      }
  851.                 
  852. }
  853. /* 
  854.  * Fuction:
  855.  *   OSD_LayoutBmp()
  856.  * Description:
  857.  *      draw the bmp defined in g_aOsdBitmapLayout[],  according to the index.
  858.  * if offset equals to 0 and uiOffsetIndex also equals to 0 , that means draw a single bitmap.
  859.  * INPUT:
  860.  *      uiLayoutBmpIndex -->index of g_aOsdBitmapLayout[]
  861.  *   uiOffsetIndex --->> the offset index,such as page or level etc.
  862.  * NOTE:
  863.  *      the postion of the bmp is not fixed ,it can be variable,according to the offset.
  864. *
  865.  *CREATOR: feeling
  866.  * DATE: 2004-07-08 15:12
  867.   *modify: feeling 2004-10-25
  868.  */
  869. void OSD_LayoutBmp(UINT8 uiLayBmpIndex,UINT8 uiOffsetIndex)
  870. {
  871. const OSD_BITMAP_LAYOUT_S* pLayout = 0;
  872. const BYTE* bmp;
  873. UINT16 uiXPos = 0;
  874. UINT16 uiYPos = 0;
  875. //select layout bitmap infomation
  876. switch (full_scrn)
  877. {
  878. #ifdef OSD_BMP_SOUND
  879. case SOUND:
  880.     pLayout =  &g_aOsdSoundBmp[uiLayBmpIndex];
  881.     break;
  882. #endif
  883. #ifdef OSD_BMP_PROG
  884. case PROGRAM:
  885.     pLayout =  &g_aOsdProgBmp[uiLayBmpIndex];
  886.     break;
  887. #endif
  888. }
  889. // the actual bmp width and height
  890. bmp = g_aOsdBitmap[pLayout->uiIndex];
  891. //the pos of the bitmap according to the uiPage and offset
  892. uiXPos = pLayout->uiXStart + uiOffsetIndex * pLayout->uiXOffset;
  893. uiYPos = pLayout ->uiYStart + uiOffsetIndex * pLayout ->uiYOffset;
  894. // draw bmp no need repeat
  895. if (((pLayout->uiXWidth == 0) && (pLayout->uiYHeight == 0))//have not fill the width and height in array
  896.     ||((pLayout->uiXWidth == bmp[0]) && (pLayout->uiYHeight == bmp[1])))//fill the width and height in array
  897. {
  898. osd_draw_bmp(uiXPos,
  899.             uiYPos, 
  900.             bmp, 
  901.             pLayout->bRegion);
  902. }
  903. //draw bmp need  repeat
  904. else
  905. {
  906. osd_draw_repeat_bmp(uiXPos, 
  907.     uiYPos,
  908.             pLayout->uiXWidth,
  909.             pLayout->uiYHeight,
  910.             bmp,
  911.             pLayout->bRegion);                     
  912. }//end else
  913. }//end Osd_LayoutBmp
  914. /* 
  915.  * Fuction:
  916.  *   OSD_LayoutLine()
  917.  * Description:
  918.  *      draw the bmp defined in g_aOsdLineLayout[],  according to the index.
  919.  * if offset equals to 0 and uiOffsetIndex also equals to 0 , that means draw a single line.
  920.  * INPUT:
  921.  *      uiLayoutLineIndex --> index of g_aOsdLineLayout[], 
  922.  * uiOffsetIndex --->index of the offset, such as page and level etc.
  923.  *
  924.  *CREATOR: feeling
  925.   *DATE: 2004-10-25
  926.  */
  927. void OSD_LayoutLine(UINT16 uiLayLineIndex, UINT8 uiOffsetIndex)
  928. {
  929. const OSD_LINE_LAYOUT_S* pLayout = 0;
  930. UINT16 uiXPos = 0;
  931. UINT16 uiYPos = 0;
  932. //pick out the layout line infomation
  933. switch (full_scrn)
  934. {
  935. #ifdef OSD_BMP_SOUND
  936. case SOUND:
  937.     pLayout =  &g_aOsdSoundLine[uiLayLineIndex];
  938.     break;
  939. #endif     
  940. #ifdef OSD_BMP_PROG
  941. case PROGRAM:
  942.     pLayout =  &g_aOsdProgLine[uiLayLineIndex];
  943.     break;
  944. #endif     
  945. }
  946. uiXPos = pLayout ->uiXStart + uiOffsetIndex * pLayout->uiXOffset;
  947. uiYPos = pLayout ->uiYStart + uiOffsetIndex * pLayout ->uiYOffset;
  948.     
  949. //draw the line according to its info structure
  950. osd_draw_hline_region(uiXPos, 
  951.     uiXPos + pLayout->uiXLen, 
  952.     uiYPos,
  953.     pLayout->uiColor, 
  954.     pLayout->uiYLen,
  955.     pLayout->bRegion);
  956. }//end OSD_LayouPosVariableLine
  957. /* 
  958.  * Fuction:
  959.  *   OSD_LayoutRect()
  960.  * Description:
  961.  *      draw the bmp defined in g_aOsdRectLayout[],  according to the index.
  962.  *
  963.  * INPUT:
  964.  *      uiLayoutRectIndex --> index of g_aOsdRectLayout[], 
  965.  * uiOffsetIndex ----> the offset index , such as page and level, etc.
  966. *
  967.  *CREATOR: feeling
  968.   *DATE: 2004-10-25
  969.  */
  970. void OSD_LayoutRect(UINT16 uiLayRectIndex, UINT8 uiOffsetIndex)
  971. {
  972. const OSD_RECT_LAYOUT_S* pLayout = 0;
  973. //pick out the layout line infomation
  974. switch (full_scrn)
  975. {
  976. #ifdef OSD_BMP_SOUND
  977. case SOUND:
  978.     pLayout =  &g_aOsdSoundRect[uiLayRectIndex];
  979.     break;
  980. #endif     
  981. #ifdef OSD_BMP_PROG
  982. case PROGRAM:
  983.     pLayout =  &g_aOsdProgRect[uiLayRectIndex];
  984.     break;
  985. #endif    
  986. }
  987. osd_draw_region_rect(pLayout->uiXStart + uiOffsetIndex * pLayout->uiXOffset,
  988.     pLayout->uiYStart + uiOffsetIndex * pLayout ->uiYOffset,
  989.     pLayout->uiXWidth,
  990.         pLayout->uiYHeight,
  991.         pLayout->uiBgColor,
  992.         pLayout->bRegion);
  993. }//end OSD_LayoutRect
  994. /* 
  995.  * Fuction:
  996.  *   OSD_LayoutStr()
  997.  * Description:
  998.  *      draw the bmp defined in g_aOsdStrLayout[],  according to the index.
  999.  *     if offset equals to 0 and uiOffsetIndex also equals to 0 , that means draw a single string.
  1000.  * INPUT:
  1001.  *      uiLayoutStrIndex --> index of g_aOsdStrLayout[], 
  1002.  * str--->the str need to be showed
  1003.  * uiOffsetIndex ----> the offset index , such as page and level, etc.
  1004. *
  1005.  *CREATOR: feeling
  1006.   *DATE: 2004-10-25
  1007.  */
  1008. void OSD_LayoutStr(const BYTE *str, UINT16 uiLayStrIndex, UINT8 uiOffsetIndex)
  1009. {
  1010. const OSD_STR_LAYOUT_S* pLayout = 0;
  1011. //pick out the layout line infomation
  1012. switch (full_scrn)
  1013. {
  1014. #ifdef OSD_BMP_SOUND
  1015. case SOUND:
  1016.     pLayout =  &g_aOsdSoundStr[uiLayStrIndex];
  1017.     break;
  1018. #endif     
  1019. #ifdef OSD_BMP_PROG
  1020. case PROGRAM:
  1021.     pLayout =  &g_aOsdProgStr[uiLayStrIndex];
  1022.     break;
  1023. #endif     
  1024. }
  1025. osd_Draw_Bmp_RegionString(pLayout->uiXStart + uiOffsetIndex * pLayout->uiXOffset,
  1026.     pLayout->uiYStart + uiOffsetIndex * pLayout ->uiYOffset,
  1027.     str,
  1028.     pLayout->uiFontColor,
  1029.     pLayout->uiBgColor,
  1030.     pLayout->bRegion);
  1031. }//end OSD_LayoutStr
  1032. /* 
  1033.  * Fuction:
  1034.  *   OSD_LayoutLittleStr()
  1035.  * Description:
  1036.  *      draw the string defined in g_aOsdStrLayout[],  according to the index.
  1037.  *     if offset equals to 0 and uiOffsetIndex also equals to 0 , that means draw a single string.
  1038.  * INPUT:
  1039.  *      uiLayoutStrIndex --> index of g_aOsdStrLayout[], 
  1040.  * str--->the str need to be showed
  1041.  * uiOffsetIndex ----> the offset index , such as page and level, etc.
  1042.  *
  1043.  * Note:Layout little (1/4 size of normal)string
  1044.  */
  1045. void OSD_LayoutLittleStr(const BYTE *str, UINT16 uiLayStrIndex, UINT8 uiOffsetIndex)
  1046. {
  1047. const OSD_STR_LAYOUT_S* pLayout = 0;
  1048. //pick out the layout line infomation
  1049. switch (full_scrn)
  1050. {
  1051. #ifdef OSD_BMP_SOUND
  1052. case SOUND:
  1053.     pLayout =  &g_aOsdSoundStr[uiLayStrIndex];
  1054.     break;
  1055. #endif     
  1056. #ifdef OSD_BMP_PROG
  1057. case PROGRAM:
  1058.     pLayout =  &g_aOsdProgStr[uiLayStrIndex];
  1059.     break;
  1060. #endif     
  1061. }
  1062.     osd_Draw_Bmp_Little_RegionString(pLayout->uiXStart + uiOffsetIndex * pLayout->uiXOffset,
  1063.     pLayout->uiYStart + uiOffsetIndex * pLayout ->uiYOffset,
  1064.     str,
  1065.     pLayout->uiFontColor,
  1066.     pLayout->uiBgColor,
  1067.     pLayout->bRegion);
  1068. }//end OSD_LayoutStr
  1069. #ifdef OSD_BMP_DISPLAY//feeling
  1070. void OSD_LayoutBmpDisplay(UINT8 uiLayoutIndex)
  1071. {
  1072. const OSD_BITMAP_LAYOUT_S* pLayout = 0;
  1073. //select layout bitmap infomation
  1074. pLayout =  &g_aOsdDispBmp[uiLayoutIndex];
  1075. //only draw bmp no need repeat
  1076. if ((pLayout->uiXWidth!= 0) 
  1077.         ||(pLayout->uiYHeight != 0))
  1078. return;
  1079.  
  1080. #ifdef OSD_VARIABLE_TEMP_DISPLAY_BUF
  1081.      osd_draw_bmp(pLayout->uiXStart, pLayout->uiYStart, 
  1082.               g_aOsdBitmap[pLayout->uiIndex], 
  1083.               temp_region);
  1084. #else
  1085.      osd_draw_bmp_display(pLayout->uiXStart, pLayout->uiYStart, 
  1086.                  g_aOsdBitmap[pLayout->uiIndex], 
  1087.                  disp_region);
  1088.     #endif       
  1089. }//end Osd_LayoutBmpDisplay
  1090. #endif//#ifdef OSD_BMP_DISPLAY
  1091. #endif//ifdef OSD_BMP