Index: src/chdk_live_view.h |
diff --git a/src/chdk_live_view.h b/src/chdk_live_view.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..8c2066943ecacc8358f9bd7db25d00fed55009f7 |
--- /dev/null |
+++ b/src/chdk_live_view.h |
@@ -0,0 +1,99 @@ |
+#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 |