| #ifndef __LIVE_VIEW_H |
| #define __LIVE_VIEW_H |
| |
| // Note: used in modules and platform independent code. |
| // Do not add platform dependent stuff in here (#ifdef/#endif compile options or camera dependent values) |
| |
| /* |
| Protocol notes: |
| - Unless otherwise specified, all structure values are packed in camera native (little |
| endian) byte order |
| - Frame buffer and palette data are in native camera formats |
| Some documentation may be found at http://chdk.wikia.com/wiki/Frame_buffers |
| - The frame buffer descriptions returned may not be correct depending on the |
| camera model and various camera settings (shooting mode, digital zoom, aspect ratio) |
| This may result in partial images, garbage in the "valid" area or incorrect position |
| - In some cases, the requested data may not be available. If this happens, the framebuffer |
| or palette data offset will be zero. |
| - The frame buffer descriptions are returned regardless of whether the data is available |
| */ |
| // Live View protocol version |
| #define LIVE_VIEW_VERSION_MAJOR 2 // increase only with backwards incompatible changes (and reset minor) |
| #define LIVE_VIEW_VERSION_MINOR 1 // increase with extensions of functionality |
| |
| /* |
| protocol version history |
| < 2.0 - development versions |
| 2.0 - initial release, chdk 1.1 |
| 2.1 - added palette type 4 - 16 entry VUYA, 2 bit alpha |
| */ |
| |
| |
| // Control flags for determining which data block to transfer |
| #define LV_TFR_VIEWPORT 0x01 |
| #define LV_TFR_BITMAP 0x04 |
| #define LV_TFR_PALETTE 0x08 |
| |
| enum lv_aspect_rato { |
| LV_ASPECT_4_3, |
| LV_ASPECT_16_9, |
| }; |
| |
| /* |
| Framebuffer types |
| additional values will be added if new data formats appear |
| */ |
| enum lv_fb_type { |
| LV_FB_YUV8, // 8 bit per element UYVYYY, used for live view |
| LV_FB_PAL8, // 8 bit paletted, used for bitmap overlay. Note palette data and type sent separately |
| }; |
| |
| /* |
| framebuffer data description |
| NOTE YUV pixels widths are based on the number of Y elements |
| */ |
| typedef struct { |
| int fb_type; // framebuffer type - note future versions might use different structures depending on type |
| int data_start; // offset of data from start of live view header |
| /* |
| buffer width in pixels |
| data size is always buffer_width*visible_height*(buffer bpp based on type) |
| */ |
| int buffer_width; |
| /* |
| visible size in pixels |
| describes data within the buffer which contains image data to be displayed |
| any offsets within buffer data are added before sending, so the top left |
| pixel is always the first first byte of data. |
| width must always be <= buffer_width |
| if buffer_width is > width, the additional data should be skipped |
| visible_height also defines the number of data rows |
| */ |
| int visible_width; |
| int visible_height; |
| |
| /* |
| margins |
| pixels offsets needed to replicate display position on cameras screen |
| not used for any buffer offsets |
| */ |
| int margin_left; |
| int margin_top; |
| |
| int margin_right; |
| int margin_bot; |
| } lv_framebuffer_desc; |
| |
| typedef struct { |
| // live view sub-protocol version |
| int version_major; |
| int version_minor; |
| int lcd_aspect_ratio; // physical aspect ratio of LCD |
| int palette_type; |
| int palette_data_start; |
| // framebuffer descriptions are given as offsets, to allow expanding the structures in minor protocol changes |
| int vp_desc_start; |
| int bm_desc_start; |
| } lv_data_header; |
| |
| #endif // __LIVE_VIEW_H |