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.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • 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.