Changeset 1828


Ignore:
Timestamp:
04/25/12 01:20:34 (13 months ago)
Author:
philmoz
Message:

Update to viewport functions and code using them to handle the G1X viewport system.
This is now more flexible by allowing viewport buffer offsets to be seperate from the viewport display offsets, it can handle stitch mode properly. This is also needed for reyalp's new live view system.

Location:
trunk
Files:
25 edited

Legend:

Unmodified
Added
Removed
  • trunk/core/edgeoverlay.c

    r1719 r1828  
    7373    viewport_yscale = vid_get_viewport_yscale(); 
    7474 
    75         viewport_xoffset = vid_get_viewport_xoffset(); 
    76         viewport_yoffset = vid_get_viewport_yoffset(); 
     75        viewport_xoffset = vid_get_viewport_display_xoffset(); 
     76        viewport_yoffset = vid_get_viewport_display_yoffset(); 
    7777 
    7878    slice_height = viewport_height / EDGE_SLICES; 
     
    313313    int conv1, conv2; 
    314314 
    315     const int y_min = viewport_yoffset + camera_screen.edge_hmargin+ slice   *slice_height; 
    316     const int y_max = viewport_yoffset + camera_screen.edge_hmargin+(slice+1)*slice_height; 
    317     const int x_min = viewport_xoffset*3 + 6; 
    318     const int x_max = (viewport_width + viewport_xoffset - 2) * 3; 
     315    const int y_min = camera_screen.edge_hmargin+ slice   *slice_height; 
     316    const int y_max = camera_screen.edge_hmargin+(slice+1)*slice_height; 
     317    const int x_min = 6; 
     318    const int x_max = (viewport_width - 2) * 3; 
     319 
     320    img += vid_get_viewport_image_offset();             // offset into viewport for when image size != viewport size (e.g. 16:9 image on 4:3 LCD) 
    319321 
    320322    xoffset = 0; 
     
    410412            if (conv1 + conv2 > conf.edge_overlay_thresh) 
    411413            { 
    412                 bv_set(edgebuf, (y-viewport_yoffset-camera_screen.edge_hmargin)*viewport_width + xdiv3, 1); 
     414                bv_set(edgebuf, (y-camera_screen.edge_hmargin)*viewport_width + xdiv3, 1); 
    413415            } 
    414416 
     
    440442            if (conv1 + conv2 > conf.edge_overlay_thresh) 
    441443            { 
    442                 bv_set(edgebuf, (y-viewport_yoffset-camera_screen.edge_hmargin)*viewport_width + xdiv3+1, 1); 
     444                bv_set(edgebuf, (y-camera_screen.edge_hmargin)*viewport_width + xdiv3+1, 1); 
    443445            } 
    444446        }   // for x 
     
    516518 
    517519    const color cl = econf.edge_overlay_color; 
    518     const int y_slice_min = viewport_yoffset+camera_screen.edge_hmargin+ slice   *slice_height; 
    519     const int y_slice_max = viewport_yoffset+camera_screen.edge_hmargin+(slice+1)*slice_height; 
    520     const int y_min = viewport_yoffset+camera_screen.edge_hmargin; 
    521     const int y_max = viewport_yoffset+camera_screen.edge_hmargin+viewport_height; 
    522     const int x_min = viewport_xoffset+2; 
    523     const int x_max = (viewport_width + viewport_xoffset - 2); 
     520    const int y_slice_min = camera_screen.edge_hmargin+ slice   *slice_height; 
     521    const int y_slice_max = camera_screen.edge_hmargin+(slice+1)*slice_height; 
     522    const int y_min = camera_screen.edge_hmargin; 
     523    const int y_max = camera_screen.edge_hmargin+viewport_height; 
     524    const int x_min = 2; 
     525    const int x_max = (viewport_width - 2); 
    524526 
    525527    if( !is_buffer_ready() ) return 0; 
     
    544546                    // If there is no edge based on the newest data, but there is one painted on the screen 
    545547                    // from previous calls, delete it from the screen. 
    546                     const int aspect_correct_x_off = x_off; 
    547548                    const int bEdge = bv_get(edgebuf, y_edgebuf + x); 
    548                     const int bDraw = bEdge || (draw_get_pixel(aspect_correct_x_off, y_off) == econf.edge_overlay_color); 
     549                    const int bDraw = bEdge || (draw_get_pixel(x_off+viewport_xoffset, y_off+viewport_yoffset) == econf.edge_overlay_color); 
    549550                    const color cl = bEdge ? econf.edge_overlay_color : 0; 
    550551                    if (bEdge || bDraw) 
    551                         draw_pixel(aspect_correct_x_off, y_off, cl); 
     552                        draw_pixel(x_off+viewport_xoffset, y_off+viewport_yoffset, cl); 
    552553                     
    553554                } 
     
    572573            for (x = x_min_c; x < x_max_c; ++x) 
    573574            { 
    574                 const int aspect_correct_x = x; 
    575                 if (draw_get_pixel(aspect_correct_x, y) == cl)  // if there is an edge drawn on the screen but there is no edge there based on the newest data, delete it from the screen 
    576                     draw_pixel(aspect_correct_x, y, 0 ); 
     575                // if there is an edge drawn on the screen but there is no edge there based on the newest data, delete it from the screen 
     576                if (draw_get_pixel(x+viewport_xoffset, y+viewport_yoffset) == cl) 
     577                    draw_pixel(x+viewport_xoffset, y+viewport_yoffset, 0 ); 
    577578            } 
    578579        } 
     
    590591            for (x = x_min; x < x_max; ++x) 
    591592            { 
    592                 const int aspect_correct_x = x; 
    593                 if (draw_get_pixel(aspect_correct_x, y) == cl)  // if there is an edge drawn on the screen but there is no edge there based on the newest data, delete it from the screen 
    594                     draw_pixel(aspect_correct_x, y, 0 ); 
     593                // if there is an edge drawn on the screen but there is no edge there based on the newest data, delete it from the screen 
     594                if (draw_get_pixel(x+viewport_xoffset, y+viewport_yoffset) == cl) 
     595                    draw_pixel(x+viewport_xoffset, y+viewport_yoffset, 0 ); 
    595596            } 
    596597        } 
     
    632633 
    633634 
    634  
    635635// Main edge overlay function. 
    636636// It works by detecting edges using the Sobel operator 
  • trunk/core/luascript.c

    r1719 r1828  
    17591759 
    17601760    // Populate the above structure with the current default details 
    1761     vid_info.vp_xoffset = vid_get_viewport_xoffset_proper(); 
    1762     vid_info.vp_yoffset = vid_get_viewport_yoffset_proper(); 
     1761    vid_info.vp_xoffset = vid_get_viewport_display_xoffset_proper(); 
     1762    vid_info.vp_yoffset = vid_get_viewport_display_yoffset_proper(); 
    17631763    vid_info.vp_width = vid_get_viewport_width_proper(); 
    17641764    vid_info.vp_height = vid_get_viewport_height_proper(); 
  • trunk/core/module_exportlist.c

    r1719 r1828  
    212212                        vid_get_viewport_width, 
    213213            vid_get_viewport_byte_width, 
    214             vid_get_viewport_xoffset, 
    215             vid_get_viewport_yoffset, 
     214            vid_get_viewport_display_xoffset, 
     215            vid_get_viewport_display_yoffset, 
    216216            vid_get_viewport_image_offset, 
    217217            vid_get_viewport_row_offset, 
  • trunk/core/motion_detector.c

    r1693 r1828  
    553553        } 
    554554 
    555         xoffset = vid_get_viewport_xoffset();   // used when image size != viewport size 
    556         yoffset = vid_get_viewport_yoffset();   // used when image size != viewport size 
     555        xoffset = vid_get_viewport_display_xoffset();   // used when image size != viewport size 
     556        yoffset = vid_get_viewport_display_yoffset();   // used when image size != viewport size 
    557557 
    558558        x_step=(camera_screen.width-xoffset*2)/motion_detector->columns; 
  • trunk/core/zebra.c

    • Property svn:eol-style set to native
    r1621 r1828  
    8686// and image aspect ratio provided the vid_get_viewport_height(),  
    8787// vid_get_viewport_width(), vid_get_viewport_image_offset(), 
    88 // vid_get_viewport_row_offset(), vid_get_viewport_xoffset(), 
    89 // and vid_get_viewport_yoffset() functions have been correctly 
     88// vid_get_viewport_row_offset(), vid_get_viewport_display_xoffset(), 
     89// and vid_get_viewport_display_yoffset() functions have been correctly 
    9090// implemented for the camera. 
    9191 
     
    304304    viewport_image_offset = vid_get_viewport_image_offset();  
    305305    viewport_row_offset = vid_get_viewport_row_offset();  
    306     viewport_xoffset = vid_get_viewport_xoffset(); 
    307     viewport_yoffset = vid_get_viewport_yoffset(); 
     306    viewport_xoffset = vid_get_viewport_display_xoffset(); 
     307    viewport_yoffset = vid_get_viewport_display_yoffset(); 
    308308 
    309309    // if not in no-zebra phase of blink mode zebra, draw zebra to buf[] 
  • trunk/include/platform.h

    r1693 r1828  
    230230extern long vid_get_viewport_height();          // Viewport height in CHDK screen pixels  
    231231extern int vid_get_viewport_width();            // Viewport width in CHDK screen pixels 
    232 extern int vid_get_viewport_xoffset();          // X offset of viewport edge relative to LCD screen (in CHDK screen pixels) 
    233 extern int vid_get_viewport_yoffset();          // Y offset of viewport top relative to LCD screen (in CHDK screen pixels) 
     232extern int vid_get_viewport_xoffset();          // X offset of viewport edge relative to the viewport buffer (in CHDK screen pixels) 
     233extern int vid_get_viewport_yoffset();          // Y offset of viewport top relative to the viewport buffer (in CHDK screen pixels) 
     234extern int vid_get_viewport_display_xoffset();  // X offset of viewport edge relative to LCD screen (in CHDK screen pixels) 
     235extern int vid_get_viewport_display_yoffset();  // Y offset of viewport top relative to LCD screen (in CHDK screen pixels) 
    234236extern int vid_get_viewport_byte_width();       // Physical width of viewport row in bytes 
    235237extern int vid_get_viewport_yscale();           // Y multiplier for cameras with 480 pixel high viewports (CHDK code assumes 240) 
     
    240242// PTP Live View functions 
    241243// These functions return actual size/offset in pixels of the viewport and bitmap buffers 
    242 extern int vid_get_viewport_xoffset_proper();           // X Offset (for variable image size) 
    243 extern int vid_get_viewport_yoffset_proper();           // Y Offset (for variable image size) 
     244extern int vid_get_viewport_display_xoffset_proper();   // X Offset (for variable image size) 
     245extern int vid_get_viewport_display_yoffset_proper();   // Y Offset (for variable image size) 
    244246extern int vid_get_viewport_width_proper();             // Visible viewport width (for variable image size) 
    245247extern int vid_get_viewport_height_proper();            // Visible viewport height (for variable image size) 
  • trunk/platform/g12/lib.c

    r1527 r1828  
    7777void *vid_get_viewport_live_fb() 
    7878{ 
     79    if (MODE_IS_VIDEO(mode_get())) 
     80        return viewport_buffers[0];     // Video only seems to use the first viewport buffer. 
     81 
    7982    // Hopefully return the most recently used viewport buffer so that motion detect, histogram, zebra and edge overly are using current image data 
    8083    return viewport_buffers[(active_viewport_buffer-1)&3]; 
     
    98101int vid_get_viewport_width() 
    99102{ 
    100         // viewport width table for each image size 
    101         // 0 = 4:3, 1 = 16:9, 2 = 3:2, 3 = 1:1, 4 = 4:5 
    102         static long vp_w[5] = { 360, 360, 360, 272, 216 }; 
    103         return vp_w[shooting_get_prop(PROPCASE_ASPECT_RATIO)]; 
     103    if (shooting_get_prop(PROPCASE_SHOOTING_MODE) == 16908) // Stitch mode 
     104    { 
     105        return 180; 
     106    } 
     107    else 
     108    { 
     109            // viewport width table for each image size 
     110            // 0 = 4:3, 1 = 16:9, 2 = 3:2, 3 = 1:1, 4 = 4:5 
     111            static long vp_w[5] = { 360, 360, 360, 272, 216 }; 
     112            return vp_w[shooting_get_prop(PROPCASE_ASPECT_RATIO)]; 
     113    } 
    104114} 
    105115 
    106116int vid_get_viewport_xoffset() 
    107117{ 
    108         // viewport width offset table for each image size 
    109         // 0 = 4:3, 1 = 16:9, 2 = 3:2, 3 = 1:1, 4 = 4:5 
    110         static long vp_w[5] = { 0, 0, 0, 44, 72 };                              // should all be even values for edge overlay 
    111         return vp_w[shooting_get_prop(PROPCASE_ASPECT_RATIO)]; 
     118    if (shooting_get_prop(PROPCASE_SHOOTING_MODE) == 16908) // Stitch mode 
     119    { 
     120        return 0; 
     121    } 
     122    else 
     123    { 
     124            // viewport width offset table for each image size 
     125            // 0 = 4:3, 1 = 16:9, 2 = 3:2, 3 = 1:1, 4 = 4:5 
     126            static long vp_w[5] = { 0, 0, 0, 44, 72 };                          // should all be even values for edge overlay 
     127            return vp_w[shooting_get_prop(PROPCASE_ASPECT_RATIO)]; 
     128    } 
     129} 
     130 
     131int vid_get_viewport_display_xoffset() 
     132{ 
     133    if (shooting_get_prop(PROPCASE_SHOOTING_MODE) == 16908) // Stitch mode 
     134    { 
     135        if (shooting_get_prop(PROPCASE_STITCH_DIRECTION) == 0)      // Direction check 
     136            if (shooting_get_prop(PROPCASE_STITCH_SEQUENCE) == 0)   // Shot already taken? 
     137                return 40; 
     138            else 
     139                return 140; 
     140        else 
     141            if (shooting_get_prop(PROPCASE_STITCH_SEQUENCE) == 0)   // Shot already taken? 
     142                return 140; 
     143            else 
     144                return 40; 
     145    } 
     146    else 
     147    { 
     148        return vid_get_viewport_xoffset(); 
     149    } 
    112150} 
    113151 
    114152long vid_get_viewport_height() 
    115153{ 
    116         // viewport height table for each image size 
    117         // 0 = 4:3, 1 = 16:9, 2 = 3:2, 3 = 1:1, 4 = 4:5 
    118         static long vp_h[5] = { 240, 180, 214, 240, 240 }; 
    119         return vp_h[shooting_get_prop(PROPCASE_ASPECT_RATIO)]; 
     154    if (shooting_get_prop(PROPCASE_SHOOTING_MODE) == 16908) // Stitch mode 
     155    { 
     156        return 120; 
     157    } 
     158    else 
     159    { 
     160            // viewport height table for each image size 
     161            // 0 = 4:3, 1 = 16:9, 2 = 3:2, 3 = 1:1, 4 = 4:5 
     162            static long vp_h[5] = { 240, 180, 214, 240, 240 }; 
     163            return vp_h[shooting_get_prop(PROPCASE_ASPECT_RATIO)]; 
     164    } 
    120165} 
    121166 
    122167int vid_get_viewport_yoffset() 
    123168{ 
    124         // viewport height offset table for each image size 
    125         // 0 = 4:3, 1 = 16:9, 2 = 3:2, 3 = 1:1, 4 = 4:5 
    126         static long vp_h[5] = { 0, 30, 13, 0, 0 }; 
    127         return vp_h[shooting_get_prop(PROPCASE_ASPECT_RATIO)]; 
     169    if (shooting_get_prop(PROPCASE_SHOOTING_MODE) == 16908) // Stitch mode 
     170    { 
     171        return 0; 
     172    } 
     173    else 
     174    { 
     175            // viewport height offset table for each image size 
     176            // 0 = 4:3, 1 = 16:9, 2 = 3:2, 3 = 1:1, 4 = 4:5 
     177            static long vp_h[5] = { 0, 30, 13, 0, 0 }; 
     178            return vp_h[shooting_get_prop(PROPCASE_ASPECT_RATIO)]; 
     179    } 
     180} 
     181 
     182int vid_get_viewport_display_yoffset() 
     183{ 
     184    if (shooting_get_prop(PROPCASE_SHOOTING_MODE) == 16908) // Stitch mode 
     185    { 
     186        return 72; 
     187    } 
     188    else 
     189    { 
     190        return vid_get_viewport_yoffset(); 
     191    } 
    128192} 
    129193 
    130194// Functions for PTP Live View system 
    131195 
    132 int vid_get_viewport_xoffset_proper()           { return vid_get_viewport_xoffset() * 2; } 
    133 int vid_get_viewport_yoffset_proper()           { return vid_get_viewport_yoffset() * 2; } 
     196int vid_get_viewport_display_xoffset_proper()   { return vid_get_viewport_display_xoffset() * 2; } 
     197int vid_get_viewport_display_yoffset_proper()   { return vid_get_viewport_display_yoffset() * 2; } 
    134198int vid_get_viewport_width_proper()             { return vid_get_viewport_width() * 2; } 
    135199int vid_get_viewport_height_proper()            { return vid_get_viewport_height() * 2; } 
  • trunk/platform/g1x/lib.c

    r1810 r1828  
    7676void *vid_get_viewport_live_fb() 
    7777{ 
     78    if (MODE_IS_VIDEO(mode_get()) || (movie_status==VIDEO_RECORD_IN_PROGRESS)) 
     79        return viewport_buffers[0];     // Video only seems to use the first viewport buffer. 
     80 
    7881    // Hopefully return the most recently used viewport buffer so that motion detect, histogram, zebra and edge overly are using current image data 
    7982    return viewport_buffers[(active_viewport_buffer-1)&3]; 
     
    97100int vid_get_viewport_width() 
    98101{ 
    99         // viewport width table for each image size 
    100         // 0 = 4:3, 1 = 16:9, 2 = 3:2, 3 = 1:1, 4 = 4:5 
    101         static long vp_w[5] = { 360, 360, 360, 272, 216 }; 
    102         return vp_w[shooting_get_prop(PROPCASE_ASPECT_RATIO)]; 
    103 } 
    104  
    105 int vid_get_viewport_xoffset() 
    106 { 
    107         // viewport width offset table for each image size 
    108         // 0 = 4:3, 1 = 16:9, 2 = 3:2, 3 = 1:1, 4 = 4:5 
    109         static long vp_w[5] = { 0, 0, 0, 44, 72 };                              // should all be even values for edge overlay 
    110         return vp_w[shooting_get_prop(PROPCASE_ASPECT_RATIO)]; 
     102    if (shooting_get_prop(PROPCASE_SHOOTING_MODE) == 16909) // Stitch mode 
     103    { 
     104        return 180; 
     105    } 
     106    else 
     107    { 
     108            // viewport width table for each image size 
     109            // 0 = 4:3, 1 = 16:9, 2 = 3:2, 3 = 1:1, 4 = 4:5 
     110            static long vp_w[5] = { 360, 360, 360, 272, 216 }; 
     111            return vp_w[shooting_get_prop(PROPCASE_ASPECT_RATIO)]; 
     112    } 
     113} 
     114 
     115int vid_get_viewport_display_xoffset() 
     116{ 
     117    if (shooting_get_prop(PROPCASE_SHOOTING_MODE) == 16909) // Stitch mode 
     118    { 
     119        if (shooting_get_prop(PROPCASE_STITCH_DIRECTION) == 0)      // Direction check 
     120            if (shooting_get_prop(PROPCASE_STITCH_SEQUENCE) == 0)   // Shot already taken? 
     121                return 40; 
     122            else 
     123                return 140; 
     124        else 
     125            if (shooting_get_prop(PROPCASE_STITCH_SEQUENCE) == 0)   // Shot already taken? 
     126                return 140; 
     127            else 
     128                return 40; 
     129    } 
     130    else 
     131    { 
     132            // viewport width offset table for each image size 
     133            // 0 = 4:3, 1 = 16:9, 2 = 3:2, 3 = 1:1, 4 = 4:5 
     134            static long vp_w[5] = { 0, 0, 0, 44, 72 };                          // should all be even values for edge overlay 
     135            return vp_w[shooting_get_prop(PROPCASE_ASPECT_RATIO)]; 
     136    } 
    111137} 
    112138 
    113139long vid_get_viewport_height() 
    114140{ 
    115         // viewport height table for each image size 
    116         // 0 = 4:3, 1 = 16:9, 2 = 3:2, 3 = 1:1, 4 = 4:5 
    117         static long vp_h[5] = { 240, 180, 214, 240, 240 }; 
    118         return vp_h[shooting_get_prop(PROPCASE_ASPECT_RATIO)]; 
     141    if (shooting_get_prop(PROPCASE_SHOOTING_MODE) == 16909) // Stitch mode 
     142    { 
     143        return 120; 
     144    } 
     145    else 
     146    { 
     147            // viewport height table for each image size 
     148            // 0 = 4:3, 1 = 16:9, 2 = 3:2, 3 = 1:1, 4 = 4:5 
     149            static long vp_h[5] = { 240, 180, 214, 240, 240 }; 
     150            return vp_h[shooting_get_prop(PROPCASE_ASPECT_RATIO)]; 
     151    } 
    119152} 
    120153 
    121154int vid_get_viewport_yoffset() 
    122155{ 
    123         // viewport height offset table for each image size 
    124         // 0 = 4:3, 1 = 16:9, 2 = 3:2, 3 = 1:1, 4 = 4:5 
    125         static long vp_h[5] = { 0, 30, 13, 0, 0 }; 
    126         return vp_h[shooting_get_prop(PROPCASE_ASPECT_RATIO)]; 
     156    if (shooting_get_prop(PROPCASE_SHOOTING_MODE) == 16909) // Stitch mode 
     157    { 
     158        return 0; 
     159    } 
     160    else 
     161    { 
     162            // viewport height offset table for each image size 
     163            // 0 = 4:3, 1 = 16:9, 2 = 3:2, 3 = 1:1, 4 = 4:5 
     164            static long vp_h[5] = { 0, 30, 13, 0, 0 }; 
     165            return vp_h[shooting_get_prop(PROPCASE_ASPECT_RATIO)]; 
     166    } 
     167} 
     168 
     169int vid_get_viewport_display_yoffset() 
     170{ 
     171    if (shooting_get_prop(PROPCASE_SHOOTING_MODE) == 16909) // Stitch mode 
     172    { 
     173        return 72; 
     174    } 
     175    else 
     176    { 
     177            // viewport width offset table for each image size 
     178            // 0 = 4:3, 1 = 16:9, 2 = 3:2, 3 = 1:1, 4 = 4:5 
     179            static long vp_h[5] = { 0, 30, 13, 0, 0 }; 
     180            return vp_h[shooting_get_prop(PROPCASE_ASPECT_RATIO)]; 
     181    } 
    127182} 
    128183 
    129184// Functions for PTP Live View system 
    130185 
    131 int vid_get_viewport_xoffset_proper()           { return vid_get_viewport_xoffset() * 2; } 
    132 int vid_get_viewport_yoffset_proper()           { return vid_get_viewport_yoffset(); } 
     186int vid_get_viewport_display_xoffset_proper()   { return vid_get_viewport_display_xoffset() * 2; } 
     187int vid_get_viewport_display_yoffset_proper()   { return vid_get_viewport_display_yoffset() * 2; } 
    133188int vid_get_viewport_width_proper()             { return vid_get_viewport_width() * 2; } 
    134189int vid_get_viewport_height_proper()            { return vid_get_viewport_height() * 2; } 
  • trunk/platform/generic/wrappers.c

    r1689 r1828  
    13631363} 
    13641364 
     1365// viewport display x offset - used when image size != viewport size (zebra, histogram, motion detect & edge overlay) 
     1366int __attribute__((weak)) vid_get_viewport_display_xoffset() { 
     1367        return vid_get_viewport_xoffset(); 
     1368} 
     1369 
     1370// viewport display y offset - used when image size != viewport size (zebra, histogram, motion detect & edge overlay) 
     1371int __attribute__((weak)) vid_get_viewport_display_yoffset() { 
     1372        return vid_get_viewport_yoffset(); 
     1373} 
     1374 
    13651375// viewport image offset - used when image size != viewport size (zebra, histogram, motion detect & edge overlay) 
    13661376// returns the byte offset into the viewport buffer where the image pixels start (to skip any black borders) 
     
    14881498// Override as needed for camera specific variations (see G12/SX30/IXUS310/SX130IS for working examples) 
    14891499 
    1490 int __attribute__((weak)) vid_get_viewport_xoffset_proper()         { return 0; } 
    1491 int __attribute__((weak)) vid_get_viewport_yoffset_proper()         { return 0; } 
     1500int __attribute__((weak)) vid_get_viewport_display_xoffset_proper() { return vid_get_viewport_display_xoffset(); } 
     1501int __attribute__((weak)) vid_get_viewport_display_yoffset_proper() { return vid_get_viewport_display_yoffset(); } 
    14921502int __attribute__((weak)) vid_get_viewport_width_proper()           { return 720; } 
    14931503int __attribute__((weak)) vid_get_viewport_height_proper()          { return 240; } 
  • trunk/platform/ixus1000_sd4500/sub/100d/lib.c

    r1527 r1828  
    7777 
    7878// Live picture buffer (shoot half-pressed) //ASM1989 ixus1000 
    79 //void *vid_get_viewport_fb() 
    80 //{ 
    81 //      return (void*)0x40587700;                              // found by search for VRAM Address @FFB4CB2C 
    82 //} 
    83  
    8479void *vid_get_viewport_fb() 
    8580{ 
    86         if ((mode_get()&MODE_MASK) == MODE_REC) 
    87                 return (void*)(0x40587700-vid_get_viewport_xoffset()*3); 
    8881        return (void*)0x40587700;                              // found by search for VRAM Address @FFB4CB2C 
    8982} 
     
    115108} 
    116109 
    117 int vid_get_viewport_xoffset() 
     110int vid_get_viewport_display_xoffset() 
    118111{ 
    119112    if (movie_status > 1){return 0;} 
  • trunk/platform/ixus1000_sd4500/sub/100f/lib.c

    r1527 r1828  
    158158} 
    159159 
    160 int vid_get_viewport_xoffset() 
     160int vid_get_viewport_display_xoffset() 
    161161{ 
    162162    if (movie_status > 1){return 0;} 
  • trunk/platform/ixus1000_sd4500/sub/102b/lib.c

    r1789 r1828  
    7777 
    7878// Live picture buffer (shoot half-pressed) //ASM1989 ixus1000 
    79 //void *vid_get_viewport_fb() 
    80 //{ 
    81 //      return (void*)0x40587700;                              // found by search for VRAM Address @FFB4CB2C 
    82 //} 
    83  
    8479void *vid_get_viewport_fb() 
    8580{ 
    86         if ((mode_get()&MODE_MASK) == MODE_REC) 
    87                 return (void*)(0x40587700-vid_get_viewport_xoffset()*3); 
    8881        return (void*)0x40587700;                              // found by search for VRAM Address @FFB4CB2C 
    8982} 
     
    115108} 
    116109 
    117 int vid_get_viewport_xoffset() 
     110int vid_get_viewport_display_xoffset() 
    118111{ 
    119112    if (movie_status > 1){return 0;} 
  • trunk/platform/ixus200_sd980/sub/101c/lib.c

    r1527 r1828  
    1717    unsigned char buff = *((unsigned char*)0x4E5C); 
    1818    if (buff == 0) buff = 2;  else buff--; 
    19 //    return fb[buff]; 
    20         if ((mode_get()&MODE_MASK) == MODE_REC) 
    21                 return (void*)(fb[buff]-vid_get_viewport_xoffset()*3); 
    2219        return (void*)fb[buff]; 
    2320} 
     
    3027void *vid_get_viewport_fb() 
    3128{ 
    32 //      return (void*)0x408CB700; 
    33         if ((mode_get()&MODE_MASK) == MODE_REC) 
    34                 return (void*)(0x408CB700-vid_get_viewport_xoffset()*3); 
    3529        return (void*)0x408CB700; 
    3630} 
     
    5650} 
    5751 
    58 int vid_get_viewport_xoffset() 
     52int vid_get_viewport_display_xoffset() 
    5953{ 
    6054        if (shooting_get_prop(PROPCASE_RESOLUTION) == 8)        // widescreen (16:9) image size 
  • trunk/platform/ixus200_sd980/sub/101d/lib.c

    r1527 r1828  
    1717    unsigned char buff = *((unsigned char*)0x4E5C); 
    1818    if (buff == 0) buff = 2;  else buff--; 
    19 //    return fb[buff]; 
    20         if ((mode_get()&MODE_MASK) == MODE_REC) 
    21                 return (void*)(fb[buff]-vid_get_viewport_xoffset()*3); 
    2219        return (void*)fb[buff]; 
    2320} 
     
    3027void *vid_get_viewport_fb() 
    3128{ 
    32 //      return (void*)0x408CB700; 
    33         if ((mode_get()&MODE_MASK) == MODE_REC) 
    34                 return (void*)(0x408CB700-vid_get_viewport_xoffset()*3); 
    3529        return (void*)0x408CB700; 
    3630} 
     
    5650} 
    5751 
    58 int vid_get_viewport_xoffset() 
     52int vid_get_viewport_display_xoffset() 
    5953{ 
    6054        if (shooting_get_prop(PROPCASE_RESOLUTION) == 8)        // widescreen (16:9) image size 
  • trunk/platform/ixus310_elph500hs/lib.c

    r1742 r1828  
    6060    // Return first viewport buffer - for case when vid_get_viewport_live_fb not defined 
    6161    // Offset the return value because the viewport is left justified instead of centered on this camera 
    62     return viewport_buffers[0] - vid_get_viewport_xoffset()*3; 
     62    return viewport_buffers[0]; 
    6363} 
    6464 
    6565void *vid_get_viewport_live_fb() 
    6666{ 
     67    if (MODE_IS_VIDEO(mode_get()) || (movie_status==VIDEO_RECORD_IN_PROGRESS)) 
     68        return viewport_buffers[0];     // Video only seems to use the first viewport buffer. 
     69 
    6770    // Hopefully return the most recently used viewport buffer so that motion detect, histogram, zebra and edge overly are using current image data 
    6871    // Offset the return value because the viewport is left justified instead of centered on this camera 
    69     return viewport_buffers[(active_viewport_buffer-1)&3] - vid_get_viewport_xoffset()*3; 
     72    return viewport_buffers[(active_viewport_buffer-1)&3]; 
    7073} 
    7174 
     
    98101} 
    99102 
    100 int vid_get_viewport_xoffset() 
     103int vid_get_viewport_display_xoffset() 
    101104{ 
    102105        // viewport width offset table for each image size 
     
    110113// Functions for PTP Live View system 
    111114 
    112 int vid_get_viewport_xoffset_proper()           { return vid_get_viewport_xoffset() * 2; } 
    113115int vid_get_viewport_width_proper()             { return vid_get_viewport_width() * 2; } 
     116int vid_get_viewport_display_xoffset_proper()   { return vid_get_viewport_display_xoffset() * 2; } 
    114117int vid_get_viewport_height_proper()            { return 480; } 
    115118int vid_get_viewport_max_width()                { return 960; } 
  • trunk/platform/sx220hs/lib.c

    r1656 r1828  
    7878} 
    7979 
    80 int vid_get_viewport_xoffset() 
     80int vid_get_viewport_display_xoffset() 
    8181{ 
    8282        // viewport width offset table for each image size 
  • trunk/platform/sx220hs/sub/100a/lib.c

    r1230 r1828  
    3737void *vid_get_viewport_live_fb() 
    3838{ 
    39                 if ((mode_get()&MODE_MASK) == MODE_REC) 
    40                 return (void*)((void*)(*(int*)(0x2258))-vid_get_viewport_xoffset()*3); 
    41          
    4239        return (void*)(void*)(*(int*)(0x2258)); 
    4340         
     
    5754void *vid_get_viewport_fb() 
    5855{ 
    59   
    60                 if ((mode_get()&MODE_MASK) == MODE_REC) 
    61                 return (void*)(0x405D7980-vid_get_viewport_xoffset()*3);   //return (void*)(0x405D7980-vid_get_viewport_xoffset()*3) 
    62          
    6356        return (void*)0x405D7980;                                                          // found by search for VRAM Address @FF371E8C 
    6457} 
  • trunk/platform/sx220hs/sub/101a/lib.c

    r1230 r1828  
    3737void *vid_get_viewport_live_fb() 
    3838{ 
    39         if ((mode_get()&MODE_MASK) == MODE_REC) 
    40                 return (void*)((void*)(*(int*)(0x2258))-vid_get_viewport_xoffset()*3); 
    4139        return (void*)(void*)(*(int*)(0x2258)); 
    4240         
     
    5856{ 
    5957        //sx220 or 0x4052ED80 ff050c2c 
    60                  
    61                 if ((mode_get()&MODE_MASK) == MODE_REC) 
    62                 return (void*)(0x405D7980-vid_get_viewport_xoffset()*3);   //return (void*)(0x405D7980-vid_get_viewport_xoffset()*3) 
    63          
    6458        return (void*)0x405D7980;                                                          // found by search for VRAM Address @FF371E8C(v100A) 
    6559 
  • trunk/platform/sx220hs/sub/101b/lib.c

    r1328 r1828  
    3737void *vid_get_viewport_live_fb() 
    3838{ 
    39         if ((mode_get()&MODE_MASK) == MODE_REC) 
    40                 return (void*)((void*)(*(int*)(0x2258))-vid_get_viewport_xoffset()*3); 
    4139        return (void*)(void*)(*(int*)(0x2258)); 
    4240         
     
    5856{ 
    5957        //sx220 or 0x4052ED80 ff050c2c 
    60                  
    61                 if ((mode_get()&MODE_MASK) == MODE_REC) 
    62                 return (void*)(0x405D7980-vid_get_viewport_xoffset()*3);   //return (void*)(0x405D7980-vid_get_viewport_xoffset()*3) 
    63          
    6458        return (void*)0x405D7980;                                                          // found by search for VRAM Address @FF371E8C(v100A) 
    6559 
  • trunk/platform/sx230hs/lib.c

    r1642 r1828  
    8080} 
    8181 
    82 int vid_get_viewport_xoffset() 
     82int vid_get_viewport_display_xoffset() 
    8383{ 
    8484        // viewport width offset table for each image size 
  • trunk/platform/sx230hs/sub/100c/lib.c

    r1675 r1828  
    2929void *vid_get_viewport_live_fb() 
    3030{ 
    31         if ((mode_get()&MODE_MASK) == MODE_REC) 
    32                 return (void*)((void*)(*(int*)(0x225C))-vid_get_viewport_xoffset()*3); 
    33          
    3431        return (void*)(void*)(*(int*)(0x225C)); 
    3532} 
     
    4239void *vid_get_viewport_fb() 
    4340{        
    44         if ((mode_get()&MODE_MASK) == MODE_REC) 
    45                 return (void*)(0x405D7980-vid_get_viewport_xoffset()*3);   
    46  
    4741        return (void*)0x405D7980;                  
    4842} 
  • trunk/platform/sx230hs/sub/101a/lib.c

    r1675 r1828  
    2929void *vid_get_viewport_live_fb() 
    3030{ 
    31         if ((mode_get()&MODE_MASK) == MODE_REC) 
    32                 return (void*)((void*)(*(int*)(0x225C))-vid_get_viewport_xoffset()*3); 
    33          
    3431        return (void*)(void*)(*(int*)(0x225C)); 
    3532} 
     
    4239void *vid_get_viewport_fb() 
    4340{        
    44         if ((mode_get()&MODE_MASK) == MODE_REC) 
    45                 return (void*)(0x405D7980-vid_get_viewport_xoffset()*3);   
    46  
    4741        return (void*)0x405D7980;                  
    4842} 
  • trunk/platform/sx230hs/sub/101b/lib.c

    r1675 r1828  
    2929void *vid_get_viewport_live_fb() 
    3030{ 
    31     if ((mode_get()&MODE_MASK) == MODE_REC) 
    32         return (void*)((void*)(*(int*)(0x225C))-vid_get_viewport_xoffset()*3); 
    33  
    3431    return (void*)(void*)(*(int*)(0x225C)); 
    3532} 
     
    4239void *vid_get_viewport_fb() 
    4340{ 
    44     if ((mode_get()&MODE_MASK) == MODE_REC) 
    45         return (void*)(0x405D7980-vid_get_viewport_xoffset()*3); 
    46  
    4741    return (void*)0x405D7980; 
    4842} 
  • trunk/platform/sx30/lib.c

    r1527 r1828  
    7373void *vid_get_viewport_live_fb() 
    7474{ 
     75    if (MODE_IS_VIDEO(mode_get()) || (movie_status==VIDEO_RECORD_IN_PROGRESS)) 
     76        return viewport_buffers[0];     // Video only seems to use the first viewport buffer. 
     77 
    7578    // Hopefully return the most recently used viewport buffer so that motion detect, histogram, zebra and edge overly are using current image data 
    7679    return viewport_buffers[(active_viewport_buffer-1)&3]; 
     
    8790} 
    8891 
     92int vid_get_viewport_width() 
     93{ 
     94    if (shooting_get_prop(PROPCASE_SHOOTING_MODE) == 16908) // Stitch mode 
     95    { 
     96        return 180; 
     97    } 
     98    else 
     99    { 
     100        return 360; 
     101    } 
     102} 
     103 
     104int vid_get_viewport_display_xoffset() 
     105{ 
     106    if (shooting_get_prop(PROPCASE_SHOOTING_MODE) == 16908) // Stitch mode 
     107    { 
     108        if (shooting_get_prop(PROPCASE_STITCH_DIRECTION) == 0)      // Direction check 
     109            if (shooting_get_prop(PROPCASE_STITCH_SEQUENCE) == 0)   // Shot already taken? 
     110                return 40; 
     111            else 
     112                return 140; 
     113        else 
     114            if (shooting_get_prop(PROPCASE_STITCH_SEQUENCE) == 0)   // Shot already taken? 
     115                return 140; 
     116            else 
     117                return 40; 
     118    } 
     119    else 
     120    { 
     121        return 0; 
     122    } 
     123} 
     124 
    89125long vid_get_viewport_height() 
    90126{ 
    91         if (shooting_get_prop(PROPCASE_ASPECT_RATIO) == 1)      // Wide screen top & bottom 30 pixels not used in viewport 
     127    if (shooting_get_prop(PROPCASE_SHOOTING_MODE) == 16908) // Stitch mode 
     128    { 
     129        return 120; 
     130    } 
     131    else if (shooting_get_prop(PROPCASE_ASPECT_RATIO) == 1)     // Wide screen top & bottom 30 pixels not used in viewport 
    92132                return 180; 
    93133        return 240; 
     
    96136int vid_get_viewport_yoffset() 
    97137{ 
    98         if (shooting_get_prop(PROPCASE_ASPECT_RATIO) == 1)      // Wide screen top & bottom 30 pixels not used in viewport 
     138    if (shooting_get_prop(PROPCASE_SHOOTING_MODE) == 16908) // Stitch mode 
     139    { 
     140        return 0; 
     141    } 
     142    else if (shooting_get_prop(PROPCASE_ASPECT_RATIO) == 1)     // Wide screen top & bottom 30 pixels not used in viewport 
    99143                return 30; 
    100144        return 0; 
    101145} 
    102146 
     147int vid_get_viewport_display_yoffset() 
     148{ 
     149    if (shooting_get_prop(PROPCASE_SHOOTING_MODE) == 16908) // Stitch mode 
     150    { 
     151        return 72; 
     152    } 
     153    else 
     154    { 
     155        return vid_get_viewport_yoffset(); 
     156    } 
     157} 
     158 
    103159// Functions for PTP Live View system 
    104160 
    105 int vid_get_viewport_yoffset_proper()           { return vid_get_viewport_yoffset(); } 
     161int vid_get_viewport_display_xoffset_proper()   { return vid_get_viewport_display_xoffset() * 2; } 
    106162int vid_get_viewport_height_proper()            { return vid_get_viewport_height(); } 
    107163int vid_get_palette_type()                      { return 3; } 
  • trunk/platform/sx40hs/lib.c

    r1527 r1828  
    7474void *vid_get_viewport_live_fb() 
    7575{ 
     76    if (MODE_IS_VIDEO(mode_get()) || (movie_status==VIDEO_RECORD_IN_PROGRESS)) 
     77        return viewport_buffers[0];     // Video only seems to use the first viewport buffer. 
     78 
    7679    // Hopefully return the most recently used viewport buffer so that motion detect, histogram, zebra and edge overly are using current image data 
    7780    return viewport_buffers[(active_viewport_buffer-1)&3]; 
     
    9093int vid_get_viewport_width() 
    9194{ 
    92         // viewport width table for each image size 
    93         // 0 = 4:3, 1 = 16:9, 2 = 3:2, 3 = 1:1 
    94         static long vp_w[5] = { 360, 360, 360, 272 }; 
    95         return vp_w[shooting_get_prop(PROPCASE_ASPECT_RATIO)]; 
     95    if (shooting_get_prop(PROPCASE_SHOOTING_MODE) == 16909) // Stitch mode 
     96    { 
     97        return 180; 
     98    } 
     99    else 
     100    { 
     101            // viewport width table for each image size 
     102            // 0 = 4:3, 1 = 16:9, 2 = 3:2, 3 = 1:1 
     103            static long vp_w[5] = { 360, 360, 360, 272 }; 
     104            return vp_w[shooting_get_prop(PROPCASE_ASPECT_RATIO)]; 
     105    } 
    96106} 
    97107 
    98108int vid_get_viewport_xoffset() 
    99109{ 
    100         // viewport width offset table for each image size 
    101         // 0 = 4:3, 1 = 16:9, 2 = 3:2, 3 = 1:1 
    102         static long vp_w[5] = { 0, 0, 0, 44 };                          // should all be even values for edge overlay 
    103         return vp_w[shooting_get_prop(PROPCASE_ASPECT_RATIO)]; 
     110    if (shooting_get_prop(PROPCASE_SHOOTING_MODE) == 16909) // Stitch mode 
     111    { 
     112        return 0; 
     113    } 
     114    else 
     115    { 
     116            // viewport width offset table for each image size 
     117            // 0 = 4:3, 1 = 16:9, 2 = 3:2, 3 = 1:1 
     118            static long vp_w[5] = { 0, 0, 0, 44 };                              // should all be even values for edge overlay 
     119            return vp_w[shooting_get_prop(PROPCASE_ASPECT_RATIO)]; 
     120    } 
     121} 
     122 
     123int vid_get_viewport_display_xoffset() 
     124{ 
     125    if (shooting_get_prop(PROPCASE_SHOOTING_MODE) == 16909) // Stitch mode 
     126    { 
     127        if (shooting_get_prop(PROPCASE_STITCH_DIRECTION) == 0)      // Direction check 
     128            if (shooting_get_prop(PROPCASE_STITCH_SEQUENCE) == 0)   // Shot already taken? 
     129                return 40; 
     130            else 
     131                return 140; 
     132        else 
     133            if (shooting_get_prop(PROPCASE_STITCH_SEQUENCE) == 0)   // Shot already taken? 
     134                return 140; 
     135            else 
     136                return 40; 
     137    } 
     138    else 
     139    { 
     140        return vid_get_viewport_xoffset(); 
     141    } 
    104142} 
    105143 
    106144long vid_get_viewport_height() 
    107145{ 
    108         // viewport height table for each image size 
    109         // 0 = 4:3, 1 = 16:9, 2 = 3:2, 3 = 1:1 
    110         static long vp_h[5] = { 240, 180, 214, 240 }; 
    111         return vp_h[shooting_get_prop(PROPCASE_ASPECT_RATIO)]; 
     146    if (shooting_get_prop(PROPCASE_SHOOTING_MODE) == 16909) // Stitch mode 
     147    { 
     148        return 120; 
     149    } 
     150    else 
     151    { 
     152            // viewport height table for each image size 
     153            // 0 = 4:3, 1 = 16:9, 2 = 3:2, 3 = 1:1 
     154            static long vp_h[5] = { 240, 180, 214, 240 }; 
     155            return vp_h[shooting_get_prop(PROPCASE_ASPECT_RATIO)]; 
     156    } 
    112157} 
    113158 
    114159int vid_get_viewport_yoffset() 
    115160{ 
    116         // viewport height offset table for each image size 
    117         // 0 = 4:3, 1 = 16:9, 2 = 3:2, 3 = 1:1 
    118         static long vp_h[5] = { 0, 30, 13, 0 }; 
    119         return vp_h[shooting_get_prop(PROPCASE_ASPECT_RATIO)]; 
     161    if (shooting_get_prop(PROPCASE_SHOOTING_MODE) == 16909) // Stitch mode 
     162    { 
     163        return 0; 
     164    } 
     165    else 
     166    { 
     167            // viewport height offset table for each image size 
     168            // 0 = 4:3, 1 = 16:9, 2 = 3:2, 3 = 1:1 
     169            static long vp_h[5] = { 0, 30, 13, 0 }; 
     170            return vp_h[shooting_get_prop(PROPCASE_ASPECT_RATIO)]; 
     171    } 
     172} 
     173 
     174int vid_get_viewport_display_yoffset() 
     175{ 
     176    if (shooting_get_prop(PROPCASE_SHOOTING_MODE) == 16909) // Stitch mode 
     177    { 
     178        return 72; 
     179    } 
     180    else 
     181    { 
     182        return vid_get_viewport_yoffset(); 
     183    } 
    120184} 
    121185 
    122186// Functions for PTP Live View system 
    123187 
    124 int vid_get_viewport_xoffset_proper()           { return vid_get_viewport_xoffset() * 2; } 
    125 int vid_get_viewport_yoffset_proper()           { return vid_get_viewport_yoffset(); } 
     188int vid_get_viewport_display_xoffset_proper()   { return vid_get_viewport_display_xoffset() * 2; } 
    126189int vid_get_viewport_width_proper()             { return vid_get_viewport_width() * 2; } 
    127190int vid_get_viewport_height_proper()            { return vid_get_viewport_height(); } 
Note: See TracChangeset for help on using the changeset viewer.