OLD | NEW |
(Empty) | |
| 1 #ifndef __LIVE_VIEW_H |
| 2 #define __LIVE_VIEW_H |
| 3 |
| 4 // Note: used in modules and platform independent code. |
| 5 // Do not add platform dependent stuff in here (#ifdef/#endif compile options or
camera dependent values) |
| 6 |
| 7 /* |
| 8 Protocol notes: |
| 9 - Unless otherwise specified, all structure values are packed in camera native (
little |
| 10 endian) byte order |
| 11 - Frame buffer and palette data are in native camera formats |
| 12 Some documentation may be found at http://chdk.wikia.com/wiki/Frame_buffers |
| 13 - The frame buffer descriptions returned may not be correct depending on the |
| 14 camera model and various camera settings (shooting mode, digital zoom, aspect
ratio) |
| 15 This may result in partial images, garbage in the "valid" area or incorrect po
sition |
| 16 - In some cases, the requested data may not be available. If this happens, the f
ramebuffer |
| 17 or palette data offset will be zero. |
| 18 - The frame buffer descriptions are returned regardless of whether the data is a
vailable |
| 19 */ |
| 20 // Live View protocol version |
| 21 #define LIVE_VIEW_VERSION_MAJOR 2 // increase only with backwards incompatible
changes (and reset minor) |
| 22 #define LIVE_VIEW_VERSION_MINOR 1 // increase with extensions of functionality |
| 23 |
| 24 /* |
| 25 protocol version history |
| 26 < 2.0 - development versions |
| 27 2.0 - initial release, chdk 1.1 |
| 28 2.1 - added palette type 4 - 16 entry VUYA, 2 bit alpha |
| 29 */ |
| 30 |
| 31 |
| 32 // Control flags for determining which data block to transfer |
| 33 #define LV_TFR_VIEWPORT 0x01 |
| 34 #define LV_TFR_BITMAP 0x04 |
| 35 #define LV_TFR_PALETTE 0x08 |
| 36 |
| 37 enum lv_aspect_rato { |
| 38 LV_ASPECT_4_3, |
| 39 LV_ASPECT_16_9, |
| 40 }; |
| 41 |
| 42 /* |
| 43 Framebuffer types |
| 44 additional values will be added if new data formats appear |
| 45 */ |
| 46 enum lv_fb_type { |
| 47 LV_FB_YUV8, // 8 bit per element UYVYYY, used for live view |
| 48 LV_FB_PAL8, // 8 bit paletted, used for bitmap overlay. Note palette data an
d type sent separately |
| 49 }; |
| 50 |
| 51 /* |
| 52 framebuffer data description |
| 53 NOTE YUV pixels widths are based on the number of Y elements |
| 54 */ |
| 55 typedef struct { |
| 56 int fb_type; // framebuffer type - note future versions might use different
structures depending on type |
| 57 int data_start; // offset of data from start of live view header |
| 58 /* |
| 59 buffer width in pixels |
| 60 data size is always buffer_width*visible_height*(buffer bpp based on type) |
| 61 */ |
| 62 int buffer_width; |
| 63 /* |
| 64 visible size in pixels |
| 65 describes data within the buffer which contains image data to be displayed |
| 66 any offsets within buffer data are added before sending, so the top left |
| 67 pixel is always the first first byte of data. |
| 68 width must always be <= buffer_width |
| 69 if buffer_width is > width, the additional data should be skipped |
| 70 visible_height also defines the number of data rows |
| 71 */ |
| 72 int visible_width; |
| 73 int visible_height; |
| 74 |
| 75 /* |
| 76 margins |
| 77 pixels offsets needed to replicate display position on cameras screen |
| 78 not used for any buffer offsets |
| 79 */ |
| 80 int margin_left; |
| 81 int margin_top; |
| 82 |
| 83 int margin_right; |
| 84 int margin_bot; |
| 85 } lv_framebuffer_desc; |
| 86 |
| 87 typedef struct { |
| 88 // live view sub-protocol version |
| 89 int version_major; |
| 90 int version_minor; |
| 91 int lcd_aspect_ratio; // physical aspect ratio of LCD |
| 92 int palette_type; |
| 93 int palette_data_start; |
| 94 // framebuffer descriptions are given as offsets, to allow expanding the str
uctures in minor protocol changes |
| 95 int vp_desc_start; |
| 96 int bm_desc_start; |
| 97 } lv_data_header; |
| 98 |
| 99 #endif // __LIVE_VIEW_H |
OLD | NEW |