bmp.c
上传用户:jncsjc
上传日期:2022-03-24
资源大小:1k
文件大小:3k
源码类别:

图片显示

开发平台:

C/C++

  1. #include <string.h>
  2. #include "bmp.h"
  3. #include "reg_def.h"
  4. #include "jpeg.h"
  5. #include "cache.h"
  6. #include "gpu.h"
  7. #include "cfg_mem.h"
  8. #include "menu_graph.h"
  9. #include "gpu.h"
  10. #include "file.h"
  11. #include "fat.h"
  12. #include "lut_setting.h"
  13. extern HR_U32 cur_jpg_index ;
  14. extern __u32 cur_jpg_file;
  15. void rgb2yuv(__u8 *srcAddr, __u8 *dstAddrY,__u8 *dstAddrU,__u8 *dstAddrV,__u32 size)
  16. {
  17.     long count,i;
  18.     __u8 y, cb, cr;
  19.     __u8 red, green, blue;
  20.     for(count= 0;count<size/3L/OSD_W_MAX;count++){
  21.         for(i = 0;i < OSD_W_MAX;i++){
  22.             blue = *srcAddr;
  23.             srcAddr = (long)srcAddr+1L;
  24.             green = *srcAddr;
  25.             srcAddr = (long)srcAddr+1L;
  26.             red     = *srcAddr;
  27.             srcAddr = (long)srcAddr+1L;
  28.             
  29.             y  = (16  + ( ((257*(__u32)red)/1000) + ((504*(__u32)green)/1000) + ((98 *(__u32)blue)/1000)));
  30.             cb = (128 + (-((148*(__u32)red)/1000) - ((291*(__u32)green)/1000) + ((439*(__u32)blue)/1000)));
  31.             cr = (128 + ( ((439*(__u32)red)/1000) - ((368*(__u32)green)/1000) - ((71 *(__u32)blue)/1000)));
  32.     
  33.             *dstAddrY  = y;
  34.             *dstAddrU  = cb;
  35.             *dstAddrV  = cr;
  36.             dstAddrY = (long)dstAddrY+1L;
  37.             dstAddrU = (long)dstAddrU+1L;
  38.             dstAddrV = (long)dstAddrV+1L;
  39.         }
  40.         dstAddrY = (long)dstAddrY-OSD_W_MAX*2L;
  41.         dstAddrU = (long)dstAddrU-OSD_W_MAX*2L;
  42.         dstAddrV = (long)dstAddrV-OSD_W_MAX*2L;
  43.     }
  44. }
  45. #include "jpg_player.h"
  46. extern gui_component_t const far gc_logo[GUI_NB];
  47. __u8 deal_bmp(void)//int x, int y, int win_w, int win_h, __u8 mode
  48. {
  49.     hi_file *bmp_file = &cur_jpg_file;
  50.     char bmp_file_flag;
  51.     __u32 readsize;
  52.     __u32 i;
  53.     __u32 bmp_width,bmp_height;
  54.     #define BMP_SHOW_ADDR    OSD_ADDR_0_TEMP
  55.     gui_component_t *gc = gui_get_cur_component(gc_logo );
  56.     destroy_osd1();
  57.     destroy_osd2();
  58.     destroy_osd3();
  59.     destroy_osd4();
  60.     create_osd0((void far *)BMP_SHOW_ADDR,0,0,OSD_W_MAX,OSD_H_MAX);    
  61.     HRJPEG_Enable();
  62.     HRJPEG_Reset();
  63.     test_osd0((void far *)BMP_SHOW_ADDR,0,0,OSD_W_MAX,OSD_H_MAX);
  64.     memcpy((void far *)JPEG_SDRAM_ADDR,gc->dat,gc->size);
  65.     wr_lut(0,0);
  66.     flush_cache();
  67.     HRJpeg_ShowNoScaler((void far *)JPEG_SDRAM_ADDR,0,0);
  68.     HRJPEG_Disable();
  69.     show_osd0();
  70.     bmp_width = 800;
  71.     bmp_height = 600;
  72.     bmp_file_flag=file_open(get_file_item(cur_jpg_file,FILEITEM_INDEX), bmp_file); //cur_jpg_index
  73.     file_setposition(bmp_file, 0x36);
  74.     readsize = (__u32)bmp_width*BmpStep*3L;
  75.     for(i = 0;i<bmp_height-bmp_height%BmpStep;i+=BmpStep){
  76.         file_read(bmp_file, (__u8 far *)BMP_DATA_SDRAM_ADDR, readsize);
  77.         rgb2yuv((__u8 far *)BMP_DATA_SDRAM_ADDR,
  78.             (__u8 far *)(BMP_SHOW_ADDR+(OSD_H_MAX-i-1L)*OSD_W_MAX),
  79.             (__u8 far *)(BMP_SHOW_ADDR+((OSD_H_MAX<<1)-i-1L)*OSD_W_MAX),
  80.             (__u8 far *)(BMP_SHOW_ADDR+(OSD_H_MAX*3L-i-1L)*OSD_W_MAX),
  81.             readsize);
  82.     } 
  83.     if(bmp_height%BmpStep){   
  84.         readsize = bmp_width*(bmp_height%BmpStep)*3L;
  85.         file_read(bmp_file, (__u8 far *)BMP_DATA_SDRAM_ADDR, readsize);
  86.         rgb2yuv(BMP_DATA_SDRAM_ADDR,
  87.             BMP_SHOW_ADDR+(bmp_height%BmpStep)*OSD_W_MAX-OSD_W_MAX,
  88.             BMP_SHOW_ADDR+(bmp_height%BmpStep)*OSD_W_MAX+OSD_W_MAX*OSD_H_MAX-OSD_W_MAX,
  89.             BMP_SHOW_ADDR+(bmp_height%BmpStep)*OSD_W_MAX+OSD_W_MAX*OSD_H_MAX*2L-OSD_W_MAX,
  90.             readsize);
  91.     }
  92. }