Changeset 447


Ignore:
Timestamp:
07/14/08 08:44:42 (5 years ago)
Author:
Jucifer
Message:
Location:
branches/juciphox
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • branches/juciphox/core/curves.c

    r432 r447  
    55#include "curves.h" 
    66 
    7  
     7/* 
     8        Expands curves features 
     9         
     10        RGB curves:     ouput = curve[input] 
     11        L cruves:               output = curve[L] *(input-black) + black 
     12        RGB curves and L curves are 4 colors curves 
     13        L curves contain multiplicator factor (value = multiplicator * 10^12) 
     14         
     15        DR curves:              output = curve[L] *(input-black) + black 
     16        DR curves are gray scale only 
     17        There are 2 DR curves +1EV and +2EV gain 
     18         
     19        Auto DR automatically calculate the +1EV or +2EV base on  
     20        EV under exposure selected by user to avoid highlight burnout  
     21        (using Zebra) 
     22         
     23        External function added:  shooting_get_ev_correction1 (added in generic/shooting) 
     24        Modified gui.c for curve enable 
     25         
     26*/ 
    827unsigned short curve0[CURVE_SIZE]; 
    928unsigned short curve1[CURVE_SIZE]; 
     
    1635#define RBLACK( a ) (((a)>BLACK) ? ((a)-BLACK) : 0) 
    1736 
    18 /* 
    19 #define CURVE0( a, b ) (((((a + b) * curve0[b]) >> 10) + a - b) >> 1) 
    20 #define CURVE1( a, b ) (((((a + b) * curve1[b]) >> 10) + a - b) >> 1) 
    21 #define CURVE2( a, b ) (((((a + b) * curve2[b]) >> 10) + a - b) >> 1) 
    22 #define CURVE3( a, b ) (((((a + b) * curve3[b]) >> 10) + a - b) >> 1) 
    23 */ 
    24  
    25 #define CURVE0( a, b ) (((a) * curve0[b]) >> 10) 
    26 #define CURVE1( a, b ) (((a) * curve1[b]) >> 10) 
    27 #define CURVE2( a, b ) (((a) * curve2[b]) >> 10) 
    28 #define CURVE3( a, b ) (((a) * curve3[b]) >> 10) 
     37#define CURVE0( a, b ) (((a) * curve0[b]) >> 12) 
     38#define CURVE1( a, b ) (((a) * curve1[b]) >> 12) 
     39#define CURVE2( a, b ) (((a) * curve2[b]) >> 12) 
     40#define CURVE3( a, b ) (((a) * curve3[b]) >> 12) 
    2941 
    3042 
    3143unsigned char curve_loaded; 
     44unsigned char drcurve_loaded; 
    3245 
    3346//------------------------------------------------------------------- 
     
    3649        int fd; 
    3750         
    38     if (!fn[0]) { // no curev defined 
     51    if (!fn[0]) { // no curve defined 
    3952                curve_loaded = 0; 
    4053                return; 
     
    5871} 
    5972 
    60 void curve_apply() { 
     73//------------------------------------------------------------------- 
     74// Curve to be loaded upon power up 
     75void drcurve_load(const char *fn) { 
     76        int fd; 
     77 
     78    if (!fn[0]) { // no curve defined 
     79                drcurve_loaded = 0; 
     80                return; 
     81    } else { 
     82        fd = fopen(fn, "r+b"); 
     83        if (!fd) { 
     84                        drcurve_loaded = 0; 
     85                        return; 
     86       } 
     87    } 
     88         
     89        fread(drcurve0, 1, 4*CURVE_SIZE*sizeof(unsigned short), fd); // load a set of 4 curves - only 2 are used 
     90        fclose(fd); 
     91        drcurve_loaded = 1; 
     92} 
     93 
     94 
     95void curveRGB_apply() { 
    6196        short i,j; 
    62         unsigned short pixVal0, pixVal1, pixVal2, y; 
     97        unsigned short pixVal0, pixVal1, pixVal2, col; 
    6398        unsigned char *src; 
    6499         
    65         if (!curve_loaded) return; 
    66         //if (!conf.curve_enable) return; 
    67  
    68100        // Set pointer to picture raw data in memory 
    69101        src = (unsigned char *) hook_raw_image_addr();   
    70102         
    71103        // Loop through picture rows 
    72         for (i=CAM_RAW_ROWS; i;i-=2){ 
     104        col = CAM_RAW_ROWPIX-48; 
     105        src += 8 * (CAM_RAW_ROWPIX * 10 / 8);   // skip 8 first rows 
     106        for (i=CAM_RAW_ROWS - 8; i;i-=2){               // skip 8 first rows 
     107//      for (i=CAM_RAW_ROWS; i;i-=2){   // No skip 8 first rows 
    73108                // Loop through picture columns  
    74                 for (j=CAM_RAW_ROWPIX; j; j-=8, src+=10){ 
     109//              for (j=CAM_RAW_ROWPIX; j; j-=8, src+=10){       // No skip 8 first and 40 last columns 
     110                src += 10;                                                                              // Skip columns 
     111                for (j=col; j; j-=8, src+=10){  // Skip columns 
     112                        //Skip first 8 columns and 40 last columns 
     113                        pixVal0=((0x3fc&(((unsigned short)(src[1]))<<2)) | (src[0] >> 6)); 
     114                        pixVal1=((0x3f0&(((unsigned short)(src[0]))<<4)) | (src[3] >> 4)); 
     115                                pixVal0 = curve0[pixVal0]; 
     116                                pixVal1 = curve1[pixVal1]; 
     117            *(src+1) = (unsigned char) ((pixVal0>>2)); // 0 
     118            *src = (unsigned char) ((pixVal0<<6)|(pixVal1>>4)); //0, 1 
     119 
     120                        pixVal2=((0x3c0&(((unsigned short)(src[3]))<<6)) | (src[2] >> 2)); 
     121                        pixVal0=((0x300&(((unsigned short)(src[2]))<<8)) | (src[5]));  
     122                                pixVal2 = curve0[pixVal2]; 
     123                                pixVal0 = curve1[pixVal0]; 
     124            *(src+3) = (unsigned char) ((pixVal1<<4)|(pixVal2>>6)); //1,2 
     125            *(src+2) = (unsigned char) ((pixVal2<<2)|(pixVal0>>8)); //2,3 =>(2,0) 
     126            *(src+5) = (unsigned char) ((pixVal0)); //3 (=>0) 
     127 
     128                        pixVal0=((0x3fc&(((unsigned short)(src[4]))<<2)) | (src[7] >> 6));  
     129                        pixVal1=((0x3f0&(((unsigned short)(src[7]))<<4)) | (src[6] >> 4));  
     130                                pixVal0 = curve0[pixVal0]; 
     131                                pixVal1 = curve1[pixVal1]; 
     132            *(src+4) = (unsigned char) ((pixVal0>>2)); // 4 => 0 
     133            *(src+7) = (unsigned char) ((pixVal0<<6)|(pixVal1>>4)); // 4,5 => (0,1) 
     134 
     135                        pixVal2=((0x3c0&(((unsigned short)(src[6]))<<6)) | (src[9] >> 2));  
     136                        pixVal0=((0x300&(((unsigned short)(src[9]))<<8)) | (src[8])); 
     137                                pixVal2 = curve0[pixVal2]; 
     138                                pixVal0 = curve1[pixVal0]; 
     139            *(src+6) = (unsigned char) ((pixVal1<<4)|(pixVal2>>6)); // 5,6 => (1,2) 
     140            *(src+9) = (unsigned char) ((pixVal2<<2)|(pixVal0>>8)); // 6,7 =>(2,0) 
     141            *(src+8) = (unsigned char) ((pixVal0)); //7 (=>0)           } 
     142                } 
     143                src += 60;      // skip columns 40+8     
     144//              for (j=CAM_RAW_ROWPIX;j; j-=8, src+=10){        // No skip 
     145                for (j=col; j; j-=8, src+=10){ 
     146                        pixVal0=((0x3fc&(((unsigned short)(src[1]))<<2)) | (src[0] >> 6)); 
     147                        pixVal1=((0x3f0&(((unsigned short)(src[0]))<<4)) | (src[3] >> 4)); 
     148                                pixVal0 = curve2[pixVal0]; 
     149                                pixVal1 = curve3[pixVal1]; 
     150            *(src+1) = (unsigned char) ((pixVal0>>2)); // 0 
     151            *src = (unsigned char) ((pixVal0<<6)|(pixVal1>>4)); //0, 1 
     152 
     153                        pixVal2=((0x3c0&(((unsigned short)(src[3]))<<6)) | (src[2] >> 2)); 
     154                        pixVal0=((0x300&(((unsigned short)(src[2]))<<8)) | (src[5]));  
     155                                pixVal2 = curve2[pixVal2]; 
     156                                pixVal0 = curve3[pixVal0]; 
     157            *(src+3) = (unsigned char) ((pixVal1<<4)|(pixVal2>>6)); //1,2 
     158            *(src+2) = (unsigned char) ((pixVal2<<2)|(pixVal0>>8)); //2,3 =>(2,0) 
     159            *(src+5) = (unsigned char) ((pixVal0)); //3 (=>0) 
     160 
     161                        pixVal0=((0x3fc&(((unsigned short)(src[4]))<<2)) | (src[7] >> 6));  
     162                        pixVal1=((0x3f0&(((unsigned short)(src[7]))<<4)) | (src[6] >> 4));  
     163                                pixVal0 = curve2[pixVal0]; 
     164                                pixVal1 = curve3[pixVal1]; 
     165            *(src+4) = (unsigned char) ((pixVal0>>2)); // 4 => 0 
     166            *(src+7) = (unsigned char) ((pixVal0<<6)|(pixVal1>>4)); // 4,5 => (0,1) 
     167 
     168                        pixVal2=((0x3c0&(((unsigned short)(src[6]))<<6)) | (src[9] >> 2));  
     169                        pixVal0=((0x300&(((unsigned short)(src[9]))<<8)) | (src[8])); 
     170                                pixVal2 = curve2[pixVal2]; 
     171                                pixVal0 = curve3[pixVal0]; 
     172            *(src+6) = (unsigned char) ((pixVal1<<4)|(pixVal2>>6)); // 5,6 => (1,2) 
     173            *(src+9) = (unsigned char) ((pixVal2<<2)|(pixVal0>>8)); // 6,7 =>(2,0) 
     174            *(src+8) = (unsigned char) ((pixVal0)); //7 (=>0) 
     175                } 
     176                src += 50; // skip columns 
     177        } 
     178} 
     179 
     180 
     181void curveL_apply() { 
     182        short i,j; 
     183        unsigned short pixVal0, pixVal1, pixVal2, y, col; 
     184        unsigned char *src; 
     185         
     186        // Set pointer to picture raw data in memory 
     187        src = (unsigned char *) hook_raw_image_addr();   
     188         
     189        // Loop through picture rows 
     190        col = CAM_RAW_ROWPIX-48; 
     191        src += 8 * (CAM_RAW_ROWPIX * 10 / 8);   // skip 8 first rows 
     192        for (i=CAM_RAW_ROWS - 8; i;i-=2){               // skip 8 first rows 
     193//      for (i=CAM_RAW_ROWS; i;i-=2){   // No skip 8 first rows 
     194                // Loop through picture columns  
     195//              for (j=CAM_RAW_ROWPIX; j; j-=8, src+=10){       // No skip 8 first and 40 last columns 
     196                src += 10;                                                                              // Skip columns 
     197                for (j=col; j; j-=8, src+=10){  // Skip columns 
     198                        //Skip first 8 columns and 40 last columns 
    75199                        pixVal0=((0x3fc&(((unsigned short)(src[1]))<<2)) | (src[0] >> 6)); 
    76200                        pixVal1=((0x3f0&(((unsigned short)(src[0]))<<4)) | (src[3] >> 4)); 
     
    123247            *(src+8) = (unsigned char) ((pixVal0)); //7 (=>0)           } 
    124248                } 
    125                  
    126                 for (j=CAM_RAW_ROWPIX; j; j-=8, src+=10){ 
     249                src += 60;      // skip columns 40+8     
     250//              for (j=CAM_RAW_ROWPIX;j; j-=8, src+=10){        // No skip 
     251                for (j=col; j; j-=8, src+=10){ 
    127252                        pixVal0=((0x3fc&(((unsigned short)(src[1]))<<2)) | (src[0] >> 6)); 
    128253                        pixVal1=((0x3f0&(((unsigned short)(src[0]))<<4)) | (src[3] >> 4)); 
     
    175300            *(src+8) = (unsigned char) ((pixVal0)); //7 (=>0) 
    176301                } 
     302                src += 50; // skip columns 
    177303        } 
    178304} 
     305 
     306/* 
     307DR curves 
     308- DR curve unidimension: gray scale only  
     309*/ 
     310#define DRCURVE0( a, b ) (((a) * curve0[b]) >> 12) 
     311#define DRCURVE1( a, b ) (((a) * curve1[b]) >> 12) 
     312#define DRCURVE2( a, b ) (((a) * curve2[b]) >> 12) 
     313#define DRCURVE3( a, b ) (((a) * curve3[b]) >> 12) 
     314 
     315unsigned short drcurve0[DRCURVE_CNT][CURVE_SIZE]; // Dynamic range curves are only gray scale for now... 
     316//unsigned short drcurve1[DRCURVE_CNT][CURVE_SIZE]; 
     317//unsigned short drcurve2[DRCURVE_CNT][CURVE_SIZE]; 
     318//unsigned short drcurve3[DRCURVE_CNT][CURVE_SIZE]; 
     319 
     320void drcurve_apply(const int ci) { 
     321        short i,j; 
     322        unsigned short pixVal0, pixVal1, pixVal2, y, col; 
     323        unsigned char *src; 
     324 
     325        unsigned short *curve0, *curve1, *curve2, *curve3; 
     326         
     327        // select dr curve 
     328        curve0 = drcurve0[ci]; 
     329        curve1 = drcurve0[ci]; 
     330        curve2 = drcurve0[ci]; 
     331        curve3 = drcurve0[ci];   
     332 
     333        // Set pointer to picture raw data in memory 
     334        src = (unsigned char *) hook_raw_image_addr();   
     335         
     336        // Loop through picture rows 
     337        col = CAM_RAW_ROWPIX-48; 
     338        src += 8 * (CAM_RAW_ROWPIX * 10 / 8);   // skip 8 first rows 
     339        for (i=CAM_RAW_ROWS - 8; i;i-=2){               // skip 8 first rows 
     340//      for (i=CAM_RAW_ROWS; i;i-=2){   // No skip 8 first rows 
     341                // Loop through picture columns  
     342//              for (j=CAM_RAW_ROWPIX; j; j-=8, src+=10){       // No skip 8 first and 40 last columns 
     343                src += 10;                                                                              // Skip columns 
     344                for (j=col; j; j-=8, src+=10){  // Skip columns 
     345                        //Skip first 8 columns and 40 last columns 
     346                        pixVal0=((0x3fc&(((unsigned short)(src[1]))<<2)) | (src[0] >> 6)); 
     347                        pixVal1=((0x3f0&(((unsigned short)(src[0]))<<4)) | (src[3] >> 4)); 
     348                                pixVal0 = RBLACK( pixVal0 ); 
     349                                pixVal1 = RBLACK( pixVal1 ); 
     350                                y = LUM(pixVal0,pixVal1); 
     351                                pixVal0 = DRCURVE0( pixVal0, y ) + BLACK; 
     352                                pixVal1 = DRCURVE1( pixVal1, y ) + BLACK; 
     353                                pixVal0 = LIM( pixVal0 ); 
     354                                pixVal1 = LIM( pixVal1 ); 
     355            *(src+1) = (unsigned char) ((pixVal0>>2)); // 0 
     356            *src = (unsigned char) ((pixVal0<<6)|(pixVal1>>4)); //0, 1 
     357 
     358                        pixVal2=((0x3c0&(((unsigned short)(src[3]))<<6)) | (src[2] >> 2)); 
     359                        pixVal0=((0x300&(((unsigned short)(src[2]))<<8)) | (src[5]));  
     360                                pixVal2 = RBLACK( pixVal2 ); 
     361                                pixVal0 = RBLACK( pixVal0 ); 
     362                                y = LUM(pixVal2,pixVal0); 
     363                                pixVal2 = DRCURVE0( pixVal2, y ) + BLACK; 
     364                                pixVal0 = DRCURVE1( pixVal0, y ) + BLACK; 
     365                                pixVal2 = LIM( pixVal2 ); 
     366                                pixVal0 = LIM( pixVal0 ); 
     367            *(src+3) = (unsigned char) ((pixVal1<<4)|(pixVal2>>6)); //1,2 
     368            *(src+2) = (unsigned char) ((pixVal2<<2)|(pixVal0>>8)); //2,3 =>(2,0) 
     369            *(src+5) = (unsigned char) ((pixVal0)); //3 (=>0) 
     370 
     371                        pixVal0=((0x3fc&(((unsigned short)(src[4]))<<2)) | (src[7] >> 6));  
     372                        pixVal1=((0x3f0&(((unsigned short)(src[7]))<<4)) | (src[6] >> 4));  
     373                                pixVal0 = RBLACK( pixVal0 ); 
     374                                pixVal1 = RBLACK( pixVal1 ); 
     375                                y = LUM(pixVal0,pixVal1); 
     376                                pixVal0 = DRCURVE0( pixVal0, y ) + BLACK; 
     377                                pixVal1 = DRCURVE1( pixVal1, y ) + BLACK; 
     378                                pixVal0 = LIM( pixVal0 ); 
     379                                pixVal1 = LIM( pixVal1 ); 
     380            *(src+4) = (unsigned char) ((pixVal0>>2)); // 4 => 0 
     381            *(src+7) = (unsigned char) ((pixVal0<<6)|(pixVal1>>4)); // 4,5 => (0,1) 
     382 
     383                        pixVal2=((0x3c0&(((unsigned short)(src[6]))<<6)) | (src[9] >> 2));  
     384                        pixVal0=((0x300&(((unsigned short)(src[9]))<<8)) | (src[8])); 
     385                                pixVal2 = RBLACK( pixVal2 ); 
     386                                pixVal0 = RBLACK( pixVal0 ); 
     387                                y = LUM(pixVal2,pixVal0); 
     388                                pixVal2 = DRCURVE0( pixVal2, y ) + BLACK; 
     389                                pixVal0 = DRCURVE1( pixVal0, y ) + BLACK; 
     390                                pixVal2 = LIM( pixVal2 ); 
     391                                pixVal0 = LIM( pixVal0 ); 
     392            *(src+6) = (unsigned char) ((pixVal1<<4)|(pixVal2>>6)); // 5,6 => (1,2) 
     393            *(src+9) = (unsigned char) ((pixVal2<<2)|(pixVal0>>8)); // 6,7 =>(2,0) 
     394            *(src+8) = (unsigned char) ((pixVal0)); //7 (=>0)           } 
     395                } 
     396                src += 60;      // skip columns 40+8     
     397//              for (j=CAM_RAW_ROWPIX;j; j-=8, src+=10){        // No skip 
     398                for (j=col; j; j-=8, src+=10){ 
     399                        pixVal0=((0x3fc&(((unsigned short)(src[1]))<<2)) | (src[0] >> 6)); 
     400                        pixVal1=((0x3f0&(((unsigned short)(src[0]))<<4)) | (src[3] >> 4)); 
     401                                pixVal0 = RBLACK( pixVal0 ); 
     402                                pixVal1 = RBLACK( pixVal1 ); 
     403                                y = LUM(pixVal0,pixVal1); 
     404                                pixVal0 = DRCURVE2( pixVal0, y ) + BLACK; 
     405                                pixVal1 = DRCURVE3( pixVal1, y ) + BLACK; 
     406                                pixVal0 = LIM( pixVal0 ); 
     407                                pixVal1 = LIM( pixVal1 ); 
     408            *(src+1) = (unsigned char) ((pixVal0>>2)); // 0 
     409            *src = (unsigned char) ((pixVal0<<6)|(pixVal1>>4)); //0, 1 
     410 
     411                        pixVal2=((0x3c0&(((unsigned short)(src[3]))<<6)) | (src[2] >> 2)); 
     412                        pixVal0=((0x300&(((unsigned short)(src[2]))<<8)) | (src[5]));  
     413                                pixVal2 = RBLACK( pixVal2 ); 
     414                                pixVal0 = RBLACK( pixVal0 ); 
     415                                y = LUM(pixVal2,pixVal0); 
     416                                pixVal2 = DRCURVE2( pixVal2, y ) + BLACK; 
     417                                pixVal0 = DRCURVE3( pixVal0, y ) + BLACK; 
     418                                pixVal2 = LIM( pixVal2 ); 
     419                                pixVal0 = LIM( pixVal0 ); 
     420            *(src+3) = (unsigned char) ((pixVal1<<4)|(pixVal2>>6)); //1,2 
     421            *(src+2) = (unsigned char) ((pixVal2<<2)|(pixVal0>>8)); //2,3 =>(2,0) 
     422            *(src+5) = (unsigned char) ((pixVal0)); //3 (=>0) 
     423 
     424                        pixVal0=((0x3fc&(((unsigned short)(src[4]))<<2)) | (src[7] >> 6));  
     425                        pixVal1=((0x3f0&(((unsigned short)(src[7]))<<4)) | (src[6] >> 4));  
     426                                pixVal0 = RBLACK( pixVal0 ); 
     427                                pixVal1 = RBLACK( pixVal1 ); 
     428                                y = LUM(pixVal0,pixVal1); 
     429                                pixVal0 = DRCURVE2( pixVal0, y ) + BLACK; 
     430                                pixVal1 = DRCURVE3( pixVal1, y ) + BLACK; 
     431                                pixVal0 = LIM( pixVal0 ); 
     432                                pixVal1 = LIM( pixVal1 ); 
     433            *(src+4) = (unsigned char) ((pixVal0>>2)); // 4 => 0 
     434            *(src+7) = (unsigned char) ((pixVal0<<6)|(pixVal1>>4)); // 4,5 => (0,1) 
     435 
     436                        pixVal2=((0x3c0&(((unsigned short)(src[6]))<<6)) | (src[9] >> 2));  
     437                        pixVal0=((0x300&(((unsigned short)(src[9]))<<8)) | (src[8])); 
     438                                pixVal2 = RBLACK( pixVal2 ); 
     439                                pixVal0 = RBLACK( pixVal0 ); 
     440                                y = LUM(pixVal2,pixVal0); 
     441                                pixVal2 = DRCURVE2( pixVal2, y ) + BLACK; 
     442                                pixVal0 = DRCURVE3( pixVal0, y ) + BLACK; 
     443                                pixVal2 = LIM( pixVal2 ); 
     444                                pixVal0 = LIM( pixVal0 ); 
     445            *(src+6) = (unsigned char) ((pixVal1<<4)|(pixVal2>>6)); // 5,6 => (1,2) 
     446            *(src+9) = (unsigned char) ((pixVal2<<2)|(pixVal0>>8)); // 6,7 =>(2,0) 
     447            *(src+8) = (unsigned char) ((pixVal0)); //7 (=>0) 
     448                } 
     449                src += 50; // skip columns 
     450        } 
     451 
     452}        
     453void curve_apply() { 
     454        short EVbias = shooting_get_ev_correction1(); 
     455         
     456        switch(conf.curve_enable) { 
     457                case 0: 
     458                        break; 
     459                case 1:         // Custom 
     460                        if (curve_loaded){ 
     461                                if(curve0[0] > 1023){ // L curve contains multiplicator factors (0 Luminance has factor 1) 
     462                                        curveL_apply(); 
     463                                } else { 
     464                                        curveRGB_apply(); 
     465                                } 
     466                        }; 
     467                        break; 
     468                case 2: 
     469                case 3: // +1EV,  +2EV 
     470                        if (drcurve_loaded) drcurve_apply( conf.curve_enable >> 1 ); 
     471                        break; 
     472                case 4:         // Auto DR 
     473 
     474                        if (drcurve_loaded) { 
     475                                 if (EVbias <-128)  {  // x4 for Bias from "-1 2/3" and below  
     476                                        drcurve_apply(1); 
     477                                } else if(EVbias<-32){ // x2 for Bias from "-1 1/3" to "-2/3" 
     478                                        drcurve_apply(0); 
     479                                } 
     480                        } 
     481                         
     482                        break; 
     483        } 
     484         
     485} 
     486 
  • branches/juciphox/core/curves.h

    r432 r447  
    44#define CURVE_DIR "A/CHDK/CURVES" 
    55#define CURVE_SIZE 1024 
     6#define DRCURVE_CNT 4 
     7 
    68 
    79//------------------------------------------------------------------- 
     10extern unsigned char curve_loaded; 
     11extern unsigned char drcurve_loaded; 
    812extern void curve_load(); 
     13extern void drcurve_load(const char *fn); 
    914extern void curve_apply(); 
     15extern unsigned short drcurve0[][]; 
    1016// extern void default_curve(int n); 
    1117//------------------------------------------------------------------- 
  • branches/juciphox/core/gui.c

    r445 r447  
    177177static const char* gui_script_param_set_enum(int change, int arg); 
    178178static const char* gui_override_disable_enum(int change, int arg); 
     179static const char* gui_conf_curve_enum(int change, int arg); 
    179180void rinit(); 
    180181 
     
    648649 
    649650static CMenuItem curve_submenu_items[] = { 
    650     {0x5c,LANG_MENU_CURVE_ENABLE,        MENUITEM_BOOL,      &conf.curve_enable },     
    651     {0x35,LANG_MENU_CURVE_LOAD,           MENUITEM_PROC,      (int*)gui_load_curve },     
    652     {0x51,LANG_MENU_BACK,                  MENUITEM_UP }, 
     651    {0x5f,LANG_MENU_CURVE_ENABLE,        MENUITEM_ENUM,      (int*)gui_conf_curve_enum },     
     652    {0x35,LANG_MENU_CURVE_LOAD,          MENUITEM_PROC,      (int*)gui_load_curve },     
     653    {0x51,LANG_MENU_BACK,                MENUITEM_UP }, 
    653654    {0} 
    654655}; 
    655 static CMenu curve_submenu = {0x21,LANG_MENU_CURVE_PARAM_TITLE, NULL, curve_submenu_items }; 
     656static CMenu curve_submenu = {0x85,LANG_MENU_CURVE_PARAM_TITLE, NULL, curve_submenu_items }; 
    656657 
    657658static CMenuItem remote_submenu_items[] = { 
     
    664665    {0} 
    665666}; 
    666 static CMenu remote_submenu = {0x21,LANG_MENU_REMOTE_PARAM_TITLE, NULL, remote_submenu_items }; 
     667static CMenu remote_submenu = {0x86,LANG_MENU_REMOTE_PARAM_TITLE, NULL, remote_submenu_items }; 
    667668 
    668669 
     
    756757    if (conf.zebra_restore_osd) 
    757758        conf.zebra_restore_screen = 1; 
     759} 
     760 
     761//------------------------------------------------------------------- 
     762const char* gui_conf_curve_enum(int change, int arg) { 
     763    static const char* modes[]={ "None", "Custom", "+1EV", "+2EV", "Auto DR" }; 
     764 
     765    conf.curve_enable+=change; 
     766    if (conf.curve_enable<0) 
     767        conf.curve_enable=(sizeof(modes)/sizeof(modes[0]))-1; 
     768    else if (conf.curve_enable>=(sizeof(modes)/sizeof(modes[0]))) 
     769        conf.curve_enable=0; 
     770 
     771    return modes[conf.curve_enable]; 
    758772} 
    759773 
     
    15711585    load_bad_pixels_list("A/CHDK/badpixel.txt"); 
    15721586    curve_load(conf.curve_file); // load curve upon init  
     1587    drcurve_load("A/CHDK/SYSCURVES.CVF"); // load system L curves 
    15731588} 
    15741589 
  • branches/juciphox/include/platform.h

    r437 r447  
    495495 
    496496void wait_until_remote_button_is_released(void); 
    497  
     497short shooting_get_ev_correction1(); 
    498498 
    499499#define started() debug_led(1) 
  • branches/juciphox/platform/generic/shooting.c

    r416 r447  
    855855    return v; 
    856856#endif 
     857} 
     858 
     859short shooting_get_ev_correction1() 
     860{ 
     861    short evc1 = 0; 
     862    _GetPropertyCase(PROPCASE_EV_CORRECTION_1, &evc1, sizeof(evc1)); 
     863    return evc1; 
    857864} 
    858865 
Note: See TracChangeset for help on using the changeset viewer.