root/platform/sx620hs/lib.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. debug_led
  2. hook_raw_image_addr
  3. hook_alt_raw_image_addr
  4. camera_jpeg_count_str
  5. vid_bitmap_refresh
  6. shutdown
  7. get_flash_params_count
  8. camera_set_led
  9. vid_get_bitmap_fb
  10. vid_get_viewport_fb
  11. vid_get_viewport_fb_d
  12. vid_get_viewport_live_fb
  13. vid_get_viewport_yscale
  14. vid_get_viewport_width
  15. vid_get_viewport_height
  16. vid_get_viewport_display_xoffset
  17. vid_get_viewport_yoffset
  18. vid_get_viewport_display_yoffset
  19. vid_get_viewport_display_xoffset_proper
  20. vid_get_viewport_display_yoffset_proper
  21. vid_get_viewport_height_proper
  22. vid_get_viewport_fullscreen_height
  23. vid_get_palette_type
  24. vid_get_palette_size
  25. vid_get_bitmap_active_buffer
  26. vid_get_bitmap_active_palette

   1 #include "platform.h"
   2 #include "platform_palette.h"
   3 #include "lolevel.h"
   4 
   5 #define LED_PR 0xc022d1fc
   6 #define LED_AF 0xc022d200
   7 
   8 void debug_led(int state)
   9 {
  10         *(int*)LED_PR=state ? 0x93d800 : 0x83dc00;
  11 }
  12 
  13 
  14 extern  int     active_raw_buffer;
  15 extern  char*   raw_buffers[];
  16 
  17 char *hook_raw_image_addr()
  18 {
  19     return raw_buffers[active_raw_buffer & 1];
  20 }
  21 
  22 char *hook_alt_raw_image_addr()
  23 {
  24     return raw_buffers[((active_raw_buffer & 1)^1)];
  25 }
  26 
  27 
  28 
  29 char *camera_jpeg_count_str()
  30 {
  31     extern char jpeg_count_str[];
  32     return jpeg_count_str;
  33 }
  34 
  35 void vid_bitmap_refresh()
  36 {
  37     extern int full_screen_refresh;
  38     extern void _ScreenLock();
  39     extern void _ScreenUnlock();
  40 
  41     full_screen_refresh |= 3;
  42     _ScreenLock();
  43     _ScreenUnlock();
  44 }
  45 
  46 
  47 void shutdown()
  48 {
  49     extern void _TurnOffE1(void);
  50     _TurnOffE1();
  51     while(1);
  52 }
  53 
  54 
  55 int get_flash_params_count(void) { return 0xf1; } // Found @0xff23c0f0
  56 
  57 
  58 
  59 void camera_set_led(int led, int state, __attribute__ ((unused))int bright) {
  60     static char led_table[]={0,4}; // status, AF
  61     _LEDDrive(led_table[led%sizeof(led_table)], state<=1 ? !state : state);
  62 }
  63 
  64 
  65 void *vid_get_bitmap_fb()        { return (void*)0x40711000; }  // Found @0xff070014
  66 void *vid_get_viewport_fb()      { return (void*)0x40866b80; }  // Found @0xff4f4188
  67 
  68 void *vid_get_viewport_fb_d()
  69 {
  70     extern char *viewport_fb_d;
  71     return viewport_fb_d;
  72 }
  73 
  74 extern char active_viewport_buffer;
  75 extern void* viewport_buffers[];
  76 
  77 void *vid_get_viewport_live_fb()
  78 {
  79     // camera appears to use 8 buffers
  80     // Hopefully return the most recently used viewport buffer so that motion detect, histogram, zebra and edge overly are using current image data
  81     return viewport_buffers[(active_viewport_buffer-1)&7];
  82 }
  83 
  84 // Y multiplier for cameras with 480 pixel high viewports (CHDK code assumes 240)
  85 // camera appears to use 240 when recording FHD video and Fisheye mode, 480 otherwise
  86 int vid_get_viewport_yscale() {
  87     if (camera_info.state.mode_play) {
  88         return 2;
  89     }
  90     if (is_video_recording()) {
  91         // FHD video
  92         if(shooting_get_prop(PROPCASE_VIDEO_RESOLUTION) == 5) {
  93             return 1;
  94         }
  95         return 2;
  96     }
  97     if (camera_info.state.mode_shooting == MODE_FISHEYE) {
  98         return 1;
  99     }
 100     return 2;
 101 }
 102 
 103 int vid_get_viewport_width()
 104 {
 105     if (camera_info.state.mode_play)
 106     {
 107         return 360;
 108     }
 109     extern int _GetVRAMHPixelsSize();
 110     return _GetVRAMHPixelsSize() >> 1;
 111 }
 112 
 113 long vid_get_viewport_height()
 114 {
 115     if(camera_info.state.mode_play) {
 116         return 240;
 117     }
 118     extern int _GetVRAMVPixelsSize();
 119     // FHD video is apparently 180 on a 240 display
 120     int h = _GetVRAMVPixelsSize();
 121     if (vid_get_viewport_yscale() == 1) {
 122         return h;
 123     }
 124 
 125     return h>>1;
 126 }
 127 
 128 // viewport width offset table for each aspect ratio
 129 // 0 = 4:3, 1 = 16:9, 2 = 3:2, 3 = 1:1
 130 static long vp_xo[4] = { 0, 0, 0, 44 };        // should all be even values for edge overlay
 131 
 132 int vid_get_viewport_display_xoffset()
 133 {
 134     if(camera_info.state.mode_play) {
 135         return 0;
 136     }
 137     int aspect_ratio=shooting_get_prop(PROPCASE_ASPECT_RATIO);
 138 
 139     return (vp_xo[aspect_ratio]);
 140 }
 141 
 142 // viewport height offset table for each image size
 143 // 0 = 4:3, 1 = 16:9, 2 = 3:2, 3 = 1:1
 144 static long vp_yo[5] = { 0, 30, 13, 0 };
 145 
 146 int vid_get_viewport_yoffset()
 147 {
 148     if (camera_info.state.mode_play)
 149     {
 150         return 0;
 151     }
 152     if (is_video_recording())
 153     {
 154         if(shooting_get_prop(PROPCASE_VIDEO_RESOLUTION) == 2) { // 640x480
 155             return 0;// 4:3 video, no offset
 156         } else {
 157             return 30; // 16:9 video
 158         }
 159     }
 160     return vp_yo[shooting_get_prop(PROPCASE_ASPECT_RATIO)];
 161 }
 162 
 163 int vid_get_viewport_display_yoffset()
 164 {
 165     if (camera_info.state.mode_play)
 166     {
 167         return 0;
 168     }
 169     if (is_video_recording())
 170     {
 171         if(shooting_get_prop(PROPCASE_VIDEO_RESOLUTION) == 2) { // 640x480
 172             return 0;// 4:3 video, no offset
 173         } else {
 174             return 30;
 175         }
 176     }
 177     return vp_yo[shooting_get_prop(PROPCASE_ASPECT_RATIO)];
 178 }
 179 
 180 int vid_get_viewport_display_xoffset_proper()   { return vid_get_viewport_display_xoffset()<<1; }
 181 int vid_get_viewport_display_yoffset_proper()   { return vid_get_viewport_display_yoffset() * vid_get_viewport_yscale(); }
 182 int vid_get_viewport_height_proper()            { return vid_get_viewport_height() * vid_get_viewport_yscale(); }
 183 
 184 int vid_get_viewport_fullscreen_height()
 185 {
 186     return 240 * vid_get_viewport_yscale();
 187 }
 188 
 189 
 190 int vid_get_palette_type()                      { return 3; }
 191 int vid_get_palette_size()                      { return 256 * 4; }
 192 
 193 // Defined in stubs_min.S
 194 extern int active_bitmap_buffer;
 195 extern char* bitmap_buffer[];
 196 void *vid_get_bitmap_active_buffer()
 197 {
 198     return bitmap_buffer[active_bitmap_buffer&1];
 199 }
 200 
 201 
 202 void *vid_get_bitmap_active_palette()
 203 {
 204     extern void *palette_buffer_ptr;
 205     return palette_buffer_ptr;
 206 }
 207 
 208 

/* [<][>][^][v][top][bottom][index][help] */