Changeset 1008


Ignore:
Timestamp:
01/01/11 22:51:22 (2 years ago)
Author:
reyalP
Message:

sx30 100e, 100h, 100l and g12 100c support from from philmoz in http://chdk.setepontos.com/index.php?topic=650.msg59036#msg59036
not added to autobuild yet

Location:
trunk
Files:
86 added
11 edited

Legend:

Unmodified
Added
Removed
  • trunk/core/edgeoverlay.c

    r955 r1008  
    4242#if CAM_USES_ASPECT_CORRECTION//nandoide sept-2009 get the viewport dimensions, not the screen dimensions, on sx200is they aren't the same. 
    4343    viewport_height = vid_get_viewport_height()-EDGE_HMARGIN*2; //don't trace bottom lines 
     44#if defined (CAM_VIEWPORT_BUFFER_WIDTH_FIX) // buffer is wider than viewport on G12 
     45    viewportw = vid_get_viewport_width(); 
     46    viewport_width = vid_get_viewport_buffer_width() * 3; 
     47#else 
    4448    viewportw = vid_get_viewport_width(); 
    4549    viewport_width = viewportw * 3; 
     50#endif 
    4651#else 
    4752    viewport_height = screen_height;//vid_get_viewport_height(); 
  • trunk/core/gui.c

    r999 r1008  
    7474 // KEY_LEFT/KEY_RIGHT is used for gui_subj_dist_override_value_enum (because of no separate ZOOM_IN/OUT) 
    7575  
    76 #elif defined(CAMERA_g7) || defined(CAMERA_sx10) || defined(CAMERA_sx1) || defined(CAMERA_sx20) 
     76#elif defined(CAMERA_g7) || defined(CAMERA_sx10) || defined(CAMERA_sx1) || defined(CAMERA_sx20) || defined(CAMERA_sx30) 
    7777//Alt mode 
    7878 #define SHORTCUT_TOGGLE_RAW          KEY_ERASE 
     
    12611261    static const char* names[]={ "Print", "Face"}; 
    12621262    static const int keys[]={ KEY_PRINT, KEY_FACE }; 
    1263 #elif defined(CAMERA_sx10) || defined(CAMERA_sx1) || defined(CAMERA_sx20) 
     1263#elif defined(CAMERA_sx10) || defined(CAMERA_sx1) || defined(CAMERA_sx20) || defined(CAMERA_sx30) 
    12641264    static const char* names[]={ "Shrtcut", "Flash", "Video"}; 
    12651265    static const int keys[]={ KEY_PRINT, KEY_FLASH, KEY_VIDEO }; 
     
    15381538  
    15391539const char* gui_video_af_key_enum(int change, int arg){  
     1540#if CAMERA_g12 
     1541    static const char* names[]={ "", "Shutter", "Set", "AE Lock"};  
     1542    static const int keys[]={0, KEY_SHOOT_HALF, KEY_SET, KEY_AE_LOCK };  
     1543#else 
    15401544    static const char* names[]={ "", "Shutter", "Set"};  
    15411545    static const int keys[]={0, KEY_SHOOT_HALF, KEY_SET };  
     1546#endif 
    15421547    int i;  
    15431548  
     
    22692274#if defined (CAMERA_s90) 
    22702275          if (x==0) zoom_status=ZOOM_OPTICAL_MAX; //ERR99: No zoom back from digital to optical zoom possible if set to medium 
     2276#elif defined (CAMERA_sx30)     || defined (CAMERA_g12)         // can't find, crashes camera ******* 
    22712277#else 
    22722278          if (x==0) zoom_status=ZOOM_OPTICAL_MEDIUM; 
  • trunk/core/gui_osd.c

    r935 r1008  
    497497                    if (mrec) { 
    498498                    } 
    499                 } 
     499                                } 
     500#if defined(CAM_VIEWPORT_BUFFER_WIDTH_FIX) 
     501                                v += ((vid_get_viewport_buffer_width() - viewport_width) * 3);  // buffer is wider than viewport on G12 
     502#endif 
    500503            } 
    501504        if (!zebra_drawn) f=0; 
  • trunk/core/histogram.c

    r977 r1008  
    6666    int i, hi, c; 
    6767    int y, v, u; 
     68#if defined (CAM_VIEWPORT_BUFFER_WIDTH_FIX) 
     69        static int x, vp_w, vp_bw; 
     70#endif 
    6871    static int viewport_size; 
    6972    unsigned int histo_fill[5]; 
     
    7679                  img = vid_get_viewport_fb(); 
    7780                    } 
     81#if defined (CAM_VIEWPORT_BUFFER_WIDTH_FIX) 
     82                        vp_w = vid_get_viewport_width(); 
     83                        vp_bw = vid_get_viewport_buffer_width(); 
     84            viewport_size = vid_get_viewport_height() * vp_bw; 
     85#else 
    7886            viewport_size = vid_get_viewport_height() * vid_get_viewport_width(); 
     87#endif 
    7988            for (c=0; c<5; ++c) { 
    8089                for (i=0; i<HISTO_WIDTH; ++i) { 
     
    9099        case 2: 
    91100        case 3: 
     101#if defined (CAM_VIEWPORT_BUFFER_WIDTH_FIX) 
     102                        x = 0; 
     103#endif 
    92104            for (i=(histogram_stage-1)*6; i<viewport_size*3; i+=6*3*2) { 
    93105                y = img[i+1]; 
     
    105117                hi = clip(((y<<12) + u*7258          + 2048)/4096)*HISTO_WIDTH/256; // B 
    106118                ++histogram_proc[HISTO_B][hi]; 
    107             } 
     119 
     120#if defined (CAM_VIEWPORT_BUFFER_WIDTH_FIX) 
     121                                x++; 
     122                                if (x == vp_w) 
     123                                { 
     124                                        i += ((vp_bw - vp_w) * 3); 
     125                                        x = 0; 
     126                                } 
     127#endif 
     128                        } 
    108129 
    109130            ++histogram_stage; 
  • trunk/core/kbd.c

    r1000 r1008  
    6565#endif 
    6666 
     67#if defined(CAMERA_sx30) 
     68#define ZSTEP_TABLE_SIZE 11 
     69static int nTxtbl[]={0,20,40,60,80,100,120,140,160,180,200}; 
     70#endif 
     71 
    6772#if defined(CAMERA_tx1) 
    6873#define ZSTEP_TABLE_SIZE 8 
     
    106111#endif 
    107112 
    108 #if defined(CAMERA_g11) 
     113#if defined(CAMERA_g11) || defined(CAMERA_g12) 
    109114#define ZSTEP_TABLE_SIZE 14 
    110115static int nTxtbl[]={0,1,2,3,4,5,6,7,8,9,10,11,12,13}; 
  • trunk/core/motion_detector.c

    r1000 r1008  
    421421 
    422422        vp_h=vid_get_viewport_height(); 
     423#if defined(CAM_VIEWPORT_BUFFER_WIDTH_FIX) 
     424        vp_w=vid_get_viewport_buffer_width(); 
     425 
     426        x_step=vid_get_viewport_width()/motion_detector->columns; 
     427        y_step=vp_h/motion_detector->rows; 
     428#else 
    423429        vp_w=vid_get_viewport_width(); 
    424430 
     
    426432        x_step=vp_w/motion_detector->columns; 
    427433        y_step=vp_h/motion_detector->rows; 
    428  
     434#endif 
    429435 
    430436        for(row=0, col=0; row < motion_detector->rows ; ){ 
  • trunk/core/raw.c

    r979 r1008  
    4242 else return (char*) ((int)hook_raw_image_addr()&~CAM_UNCACHED_BIT); 
    4343} 
     44 
     45#if DNG_DOUBLE_BUF 
     46char* get_alt_raw_image_addr(void){     // return inactive buffer 
     47 if (!conf.raw_cache) return hook_alt_raw_image_addr(); 
     48 else return (char*) ((int)hook_alt_raw_image_addr()&~CAM_UNCACHED_BIT); 
     49} 
     50#endif     
    4451 
    4552//------------------------------------------------------------------- 
     
    6774 int i; 
    6875 if (gamma[255]) return; 
     76#if defined(CAMERA_sx30) || defined(CAMERA_g12) 
     77 for (i=0; i<12; i++) gamma[i]=255*pow(i/255.0, 0.5); 
     78 for (i=12; i<64; i++) gamma[i]=255*pow(i/255.0, 0.4); 
     79 for (i=64; i<=255; i++) gamma[i]=255*pow(i/255.0, 0.25); 
     80#else 
    6981 for (i=0; i<=255; i++) gamma[i]=255*pow(i/255.0, 0.5); 
     82#endif 
    7083} 
    7184 
     
    107120    if (state_kbd_script_run && shot_histogram_isenabled()) build_shot_histogram(); 
    108121 
     122#if DNG_DOUBLE_BUF 
     123        char* rawadr = get_raw_image_addr(); 
     124        char* altrawadr = get_alt_raw_image_addr(); 
     125#endif     
     126 
    109127    // ! ! ! exclusively for special script which creates badpixel.bin ! ! ! 
    110128    if (conf.save_raw==255) conf.save_raw=get_bad_count_and_write_file("A/CHDK/bad_tmp.bin"); 
     
    156174 
    157175        mkdir("A/DCIM"); 
     176#if defined(CAM_DATE_FOLDER_NAMING) 
     177                if (conf.raw_in_dir) 
     178                        get_target_dir_name(dir); 
     179                else 
     180                        sprintf(dir, RAW_TARGET_DIRECTORY, 100); 
     181#else 
    158182        sprintf(dir, RAW_TARGET_DIRECTORY, (conf.raw_in_dir)?get_target_dir_num():100); 
     183#endif 
    159184        mkdir(dir); 
    160185 
     
    178203               write(fd, get_dng_header(), get_dng_header_size()); 
    179204               write(fd, thumbnail_buf, DNG_TH_WIDTH*DNG_TH_HEIGHT*3); 
     205#if DNG_DOUBLE_BUF 
     206               reverse_bytes_order2(rawadr, altrawadr, hook_raw_size()); 
     207#else 
    180208               reverse_bytes_order(get_raw_image_addr(), hook_raw_size()); 
     209#endif 
    181210             } 
    182211            } 
    183212#endif 
     213#if DNG_DOUBLE_BUF 
     214            if (conf.dng_raw) { 
     215                        write(fd, (char*)(((unsigned long)altrawadr)|CAM_UNCACHED_BIT), hook_raw_size()); 
     216                        } 
     217                        else 
     218                        { 
     219                    write(fd, (char*)(((unsigned long)rawadr)|CAM_UNCACHED_BIT), hook_raw_size()); 
     220                        } 
     221#else 
    184222            write(fd, get_raw_image_addr(), hook_raw_size()); 
     223#endif 
    185224            close(fd); 
    186225            utime(fn, &t); 
     
    188227            if (conf.dng_raw) { 
    189228             if (get_dng_header() && thumbnail_buf) { 
     229#if !DNG_DOUBLE_BUF 
    190230              reverse_bytes_order(get_raw_image_addr(), hook_raw_size()); 
     231#endif 
    191232          //   unpatch_bad_pixels_b(); 
    192233              } 
  • trunk/include/keyboard.h

    r994 r1008  
    2626#define KEY_DUMMY         23    // dummy key for pressing to disable energy saving in alt mode 
    2727 
     28// SX30 
     29#define KEY_ZOOM_IN1      24    // SX30 has three zoom speeds each way 
     30#define KEY_ZOOM_IN2      25 
     31#define KEY_ZOOM_IN3      26 
     32#define KEY_ZOOM_OUT1     27 
     33#define KEY_ZOOM_OUT2     28 
     34#define KEY_ZOOM_OUT3     29 
     35#define KEY_ZOOM_ASSIST   30    // SX30 new button 
     36 
     37// G12 
     38#define KEY_AE_LOCK               31    // G12 AE/FE Lock button 
     39#define KEY_METERING      32    // G12 metering mode button 
     40 
    2841#define JOGDIAL_LEFT      100 
    2942#define JOGDIAL_RIGHT     101 
  • trunk/include/modelist.h

    r994 r1008  
    9898    MODE_LOWLIGHT           , // g11 
    9999    MODE_SCN_NOSTALGIC      , // s90 
     100        MODE_SCN_SMART_SHUTTER  , // sx30 
     101        MODE_SCN_LOWLIGHT               , // sx30 
     102        MODE_SCN_SUPER_VIVID    , // sx30 
     103        MODE_SCN_POSTER_EFFECT  , // sx30 
     104        MODE_SCN_FISHEYE                , // sx30 
     105        MODE_SCN_MINIATURE              , // sx30 
     106        MODE_SCN_HDR                    , // g12 
    100107}; 
    101108 
  • trunk/makefile.inc

    r957 r1008  
    265265PLATFORM=ixus95_sd1200 
    266266PLATFORMSUB=100c 
     267 
     268#PLATFORM=sx30 
     269#PLATFORMSUB=100h 
     270 
     271#PLATFORM=g12 
     272#PLATFORMSUB=100c 
    267273 
    268274#PLATFORM=a430 
  • trunk/platform/generic/wrappers.c

    r957 r1008  
    126126        newpt = zoom_points-1; 
    127127    } 
     128#if defined(CAMERA_sx30) 
     129// SX30 - Can't find zoom_status, _MoveZoomLensWithPoint crashes camera 
     130        extern void _PT_MoveOpticalZoomAt(long*); 
     131        if (lens_get_zoom_point() != newpt) 
     132                _PT_MoveOpticalZoomAt(&newpt); 
     133#elif defined(CAMERA_g12) 
     134// G12 - Can't find zoom_status, _MoveZoomLensWithPoint works anyway, and updates PROPCASE_OPTICAL_ZOOM_POSITION; but doesn't wait for zoom to finish 
     135        if (lens_get_zoom_point() != newpt) 
     136            _MoveZoomLensWithPoint((short*)&newpt); 
     137#else 
    128138    _MoveZoomLensWithPoint((short*)&newpt); 
    129139    while (zoom_busy); 
     
    132142    else zoom_status=ZOOM_OPTICAL_MEDIUM;  
    133143    _SetPropertyCase(PROPCASE_OPTICAL_ZOOM_POSITION, &newpt, sizeof(newpt)); 
     144#endif 
    134145} 
    135146 
     
    679690static unsigned long drive_sectors; 
    680691 
     692int is_mbr_loaded() 
     693{ 
     694        return (mbr_buf == (void*)0) ? 0 : 1; 
     695} 
     696 
     697#ifndef CAM_DRYOS 
     698 
    681699int mbr_read(char* mbr_sector, unsigned long drive_total_sectors, unsigned long *part_start_sector,  unsigned long *part_length){ 
    682700// return value: 1 - success, 0 - fail 
     
    711729} 
    712730 
     731#else 
    713732 
    714733int mbr_read_dryos(unsigned long drive_total_sectors, char* mbr_sector ){ 
     
    725744 int i; 
    726745 int count=0; 
    727  for (i=0; i<=1;i++){ 
    728   part_start_sector=(*(unsigned short*)(mbr_buf+i*16+0x1C8)<<16) | *(unsigned short*)(mbr_buf+i*16+0x1C6);  
    729   part_length=(*(unsigned short*)(mbr_buf+i*16+0x1CC)<<16) | *(unsigned short*)(mbr_buf+i*16+0x1CA);  
    730   part_status=mbr_buf[i*16+0x1BE]; 
    731   part_type=mbr_buf[0x1C2+i*16]; 
    732   if ( part_start_sector && part_length && part_type && ((part_status==0) || (part_status==0x80)) ) count++; 
     746 if (is_mbr_loaded()) 
     747 { 
     748         for (i=0; i<=1;i++){ 
     749          part_start_sector=(*(unsigned short*)(mbr_buf+i*16+0x1C8)<<16) | *(unsigned short*)(mbr_buf+i*16+0x1C6);  
     750          part_length=(*(unsigned short*)(mbr_buf+i*16+0x1CC)<<16) | *(unsigned short*)(mbr_buf+i*16+0x1CA);  
     751          part_status=mbr_buf[i*16+0x1BE]; 
     752          part_type=mbr_buf[0x1C2+i*16]; 
     753          if ( part_start_sector && part_length && part_type && ((part_status==0) || (part_status==0x80)) ) count++; 
     754         } 
    733755 } 
    734756 return count; 
    735757} 
    736758 
     759#endif 
     760 
    737761void swap_partitions(void){ 
    738  int i; 
    739  char c; 
    740  for(i=0;i<16;i++){ 
    741   c=mbr_buf[i+0x1BE]; 
    742   mbr_buf[i+0x1BE]=mbr_buf[i+0x1CE]; 
    743   mbr_buf[i+0x1CE]=c; 
    744  } 
    745  _WriteSDCard(0,0,1,mbr_buf); 
     762        if (is_mbr_loaded()) 
     763        { 
     764         int i; 
     765         char c; 
     766         for(i=0;i<16;i++){ 
     767          c=mbr_buf[i+0x1BE]; 
     768          mbr_buf[i+0x1BE]=mbr_buf[i+0x1CE]; 
     769          mbr_buf[i+0x1CE]=c; 
     770         } 
     771         _WriteSDCard(0,0,1,mbr_buf); 
     772        } 
    746773} 
    747774 
    748775void create_partitions(void){ 
    749  unsigned long start, length; 
    750  char type; 
    751  
    752  _memset(mbr_buf,0,SECTOR_SIZE); 
    753   
    754  start=1; length=2*1024*1024/SECTOR_SIZE; //2 Mb 
    755  type=1; // FAT primary 
    756  mbr_buf[0x1BE + 4]=type; 
    757  mbr_buf[0x1BE + 8]=start;   mbr_buf[0x1BE + 9]=start>>8;   mbr_buf[0x1BE + 10]=start>>16;  mbr_buf[0x1BE + 11]=start>>24; 
    758  mbr_buf[0x1BE + 12]=length; mbr_buf[0x1BE + 13]=length>>8; mbr_buf[0x1BE + 14]=length>>16; mbr_buf[0x1BE + 15]=length>>24; 
    759  
    760  start=start+length; length=drive_sectors-start-1;  
    761  type=0x0B;  //FAT32 primary; 
    762  mbr_buf[0x1CE + 4]=type; 
    763  mbr_buf[0x1CE + 8]=start;   mbr_buf[0x1CE + 9]=start>>8;   mbr_buf[0x1CE + 10]=start>>16;  mbr_buf[0x1CE + 11]=start>>24; 
    764  mbr_buf[0x1CE + 12]=length; mbr_buf[0x1CE + 13]=length>>8; mbr_buf[0x1CE + 14]=length>>16; mbr_buf[0x1CE + 15]=length>>24; 
    765  
    766  mbr_buf[0x1FE]=0x55; mbr_buf[0x1FF]=0xAA; // signature; 
    767  
    768  _WriteSDCard(0,0,1,mbr_buf); 
     776        if (is_mbr_loaded()) 
     777        { 
     778         unsigned long start, length; 
     779         char type; 
     780 
     781         _memset(mbr_buf,0,SECTOR_SIZE); 
     782          
     783         start=1; length=2*1024*1024/SECTOR_SIZE; //2 Mb 
     784         type=1; // FAT primary 
     785         mbr_buf[0x1BE + 4]=type; 
     786         mbr_buf[0x1BE + 8]=start;   mbr_buf[0x1BE + 9]=start>>8;   mbr_buf[0x1BE + 10]=start>>16;  mbr_buf[0x1BE + 11]=start>>24; 
     787         mbr_buf[0x1BE + 12]=length; mbr_buf[0x1BE + 13]=length>>8; mbr_buf[0x1BE + 14]=length>>16; mbr_buf[0x1BE + 15]=length>>24; 
     788 
     789         start=start+length; length=drive_sectors-start-1;  
     790         type=0x0B;  //FAT32 primary; 
     791         mbr_buf[0x1CE + 4]=type; 
     792         mbr_buf[0x1CE + 8]=start;   mbr_buf[0x1CE + 9]=start>>8;   mbr_buf[0x1CE + 10]=start>>16;  mbr_buf[0x1CE + 11]=start>>24; 
     793         mbr_buf[0x1CE + 12]=length; mbr_buf[0x1CE + 13]=length>>8; mbr_buf[0x1CE + 14]=length>>16; mbr_buf[0x1CE + 15]=length>>24; 
     794 
     795         mbr_buf[0x1FE]=0x55; mbr_buf[0x1FF]=0xAA; // signature; 
     796 
     797         _WriteSDCard(0,0,1,mbr_buf); 
     798        } 
    769799} 
    770800 
Note: See TracChangeset for help on using the changeset viewer.