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 |