CHDK_DE Vorschauversion  Trunk Rev. 6014
 Alle Datenstrukturen Dateien Funktionen Variablen Typdefinitionen Aufzählungen Aufzählungswerte Makrodefinitionen
live_view.c-Dateireferenz
#include "camera_info.h"
#include "conf.h"
#include "modes.h"
#include "viewport.h"
#include "ptp_chdk.h"
#include "live_view.h"
+ Include-Abhängigkeitsdiagramm für live_view.c:

gehe zum Quellcode dieser Datei

Datenstrukturen

struct  lv_hdr
 

Funktionen

int live_view_get_data (ptp_data *data, int flags)
 

Dokumentation der Funktionen

int live_view_get_data ( ptp_data data,
int  flags 
)

Definiert in Zeile 28 der Datei live_view.c.

29 {
30  lv_hdr lv;
31 
32  // Header
35 
37 
38  lv.lv.vp_desc_start = sizeof(lv_data_header);
40 #ifdef THUMB_FW
42 #else
43  lv.lv.bmo_desc_start = 0;
44 #endif
45 
46  // update camera_screen values to increase chance they will be consistent
47  // with values obtained directly from fw functions
48  mode_get();
49 
50  // Viewport
52 
54 
57 
60 
61  // TODO returning margins from lib.c might be better
62  // can end up with negative if size and offset sources don't update at exactly the same time
65 
66  // Bitmap
67  // TODO maybe should be function like viewport
68 #ifdef THUMB_FW
69  lv.bm.fb_type = LV_FB_YUV8B;
70 #else
71  lv.bm.fb_type = LV_FB_PAL8;
72 #endif
74 
77 
78  lv.bm.margin_left = lv.bm.margin_right = lv.bm.margin_top = lv.bm.margin_bot = 0;
79 
80 #ifdef THUMB_FW
81  // Bitmap opacity
82  lv.bmo.fb_type = LV_FB_OPACITY8;
83  lv.bmo.buffer_width = lv.bm.buffer_width;
84 
85  lv.bmo.visible_width = lv.bm.visible_width;
86  lv.bmo.visible_height = lv.bm.visible_height;
87 
88  lv.bmo.margin_left = lv.bmo.margin_right = lv.bmo.margin_top = lv.bmo.margin_bot = 0;
89 #endif
90 
91  // Calc sizes and get buffer pointers
92  int total_size = sizeof(lv_hdr);
93 
94 #ifndef THUMB_FW
95  int pal_size = 0;
96  char *pal_data = NULL;
97  // determine if we will send palette so it can go in one send
98  if ( flags & LV_TFR_PALETTE ) // bitmap palette
99  {
100  // if no palette defined in port, size will be set to zero
101  pal_size = vid_get_palette_size();
102  if (pal_size)
103  {
104  // palette data may be NULL or a small offset while switching outputs
105  // or due to port bugs or other reasons
106  pal_data = vid_get_bitmap_active_palette();
107  if(pal_data > (char *)0x1000) {
109  lv.lv.palette_data_start = total_size;
110  total_size += pal_size;
111  } else {
112  pal_data = 0;
113  pal_size = 0;
114  }
115  }
116  if (!pal_size) {
117  lv.lv.palette_data_start = lv.lv.palette_type = 0;
118  }
119  }
120  else
121  {
122  lv.lv.palette_data_start = lv.lv.palette_type = 0;
123  }
124 #else
125  lv.lv.palette_data_start = lv.lv.palette_type = 0;
126 #endif
127 
128  int vp_size = 0;
129  void *vp_fb = vid_get_viewport_active_buffer();
130  // Add viewport details if requested, and not null
131  if ( (flags & LV_TFR_VIEWPORT) && vp_fb) // live buffer
132  {
133  lv.vp.data_start = total_size;
134 #ifndef THUMB_FW
135  vp_size = (lv.vp.buffer_width*lv.vp.visible_height*6)/4;
136 #else
137  vp_size = (lv.vp.buffer_width*lv.vp.visible_height*4)/2;
138 #endif
139  total_size += vp_size;
140  // offset to start of actual data
142  }
143  else
144  {
145  lv.vp.data_start = 0;
146  }
147 
148  int bm_size = 0;
149  // Add bitmap details if requested
150  if ( flags & LV_TFR_BITMAP ) // bitmap buffer
151  {
152  lv.bm.data_start = total_size;
153 #ifndef THUMB_FW
154  bm_size = lv.bm.buffer_width*lv.bm.visible_height;
155 #else
156  bm_size = (lv.bm.buffer_width*lv.bm.visible_height*4)/2;
157 #endif
158  total_size += bm_size;
159  }
160  else
161  {
162  lv.bm.data_start = 0;
163  }
164 
165 #ifdef THUMB_FW
166  int bmo_size = 0;
167  // Add bitmap opacity if thumb2 and request
168  if ( flags & LV_TFR_BITMAP_OPACITY ) // bitmap opacity buffer
169  {
170  lv.bmo.data_start = total_size;
171  bmo_size = lv.bmo.buffer_width*lv.bmo.visible_height;
172  total_size += bmo_size;
173  }
174  else
175  {
176  lv.bmo.data_start = 0;
177  }
178 #endif
179 
180  // Send header structure (along with total size to be sent)
181  data->send_data(data->handle,(char*)&lv,sizeof(lv_hdr),total_size,0,0,0);
182 
183 #ifndef THUMB_FW
184  // Send palette data if requested
185  if (pal_size)
186  {
187  data->send_data(data->handle,pal_data,pal_size,0,0,0,0);
188  }
189 #endif
190 
191  // Send viewport data if requested
192  if ( vp_size )
193  {
194  data->send_data(data->handle,vp_fb,vp_size,0,0,0,0);
195  }
196 
197  // Send bitmap data if requested
198  if ( bm_size )
199  {
200  data->send_data(data->handle,vid_get_bitmap_active_buffer(),bm_size,0,0,0,0);
201  }
202 
203 #ifdef THUMB_FW
204  // Send bitmap opacity data if requested
205  if ( bmo_size )
206  {
207  data->send_data(data->handle,vid_get_opacity_active_buffer(),bmo_size,0,0,0,0);
208  }
209 #endif
210 
211  return total_size;
212 }