CHDK_DE Vorschauversion  Trunk Rev. 5715
 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  // determine if we will send palette so it can go in one send
97  if ( flags & LV_TFR_PALETTE ) // bitmap palette
98  {
99  // if no palette, will be set to zero
100  pal_size = vid_get_palette_size();
101  if (pal_size)
102  {
104  lv.lv.palette_data_start = total_size;
105  total_size += pal_size;
106  }
107  }
108  else
109  {
110  lv.lv.palette_data_start = lv.lv.palette_type = 0;
111  }
112 #else
113  lv.lv.palette_data_start = lv.lv.palette_type = 0;
114 #endif
115 
116  int vp_size = 0;
117  void *vp_fb = vid_get_viewport_active_buffer();
118  // Add viewport details if requested, and not null
119  if ( (flags & LV_TFR_VIEWPORT) && vp_fb) // live buffer
120  {
121  lv.vp.data_start = total_size;
122 #ifndef THUMB_FW
123  vp_size = (lv.vp.buffer_width*lv.vp.visible_height*6)/4;
124 #else
125  vp_size = (lv.vp.buffer_width*lv.vp.visible_height*4)/2;
126 #endif
127  total_size += vp_size;
128  // offset to start of actual data
130  }
131  else
132  {
133  lv.vp.data_start = 0;
134  }
135 
136  int bm_size = 0;
137  // Add bitmap details if requested
138  if ( flags & LV_TFR_BITMAP ) // bitmap buffer
139  {
140  lv.bm.data_start = total_size;
141 #ifndef THUMB_FW
142  bm_size = lv.bm.buffer_width*lv.bm.visible_height;
143 #else
144  bm_size = (lv.bm.buffer_width*lv.bm.visible_height*4)/2;
145 #endif
146  total_size += bm_size;
147  }
148  else
149  {
150  lv.bm.data_start = 0;
151  }
152 
153 #ifdef THUMB_FW
154  int bmo_size = 0;
155  // Add bitmap opacity if thumb2 and request
156  if ( flags & LV_TFR_BITMAP_OPACITY ) // bitmap opacity buffer
157  {
158  lv.bmo.data_start = total_size;
159  bmo_size = lv.bmo.buffer_width*lv.bmo.visible_height;
160  total_size += bmo_size;
161  }
162  else
163  {
164  lv.bmo.data_start = 0;
165  }
166 #endif
167 
168  // Send header structure (along with total size to be sent)
169  data->send_data(data->handle,(char*)&lv,sizeof(lv_hdr),total_size,0,0,0);
170 
171 #ifndef THUMB_FW
172  // Send palette data if requested
173  if (pal_size)
174  {
175  data->send_data(data->handle,vid_get_bitmap_active_palette(),pal_size,0,0,0,0);
176  }
177 #endif
178 
179  // Send viewport data if requested
180  if ( vp_size )
181  {
182  data->send_data(data->handle,vp_fb,vp_size,0,0,0,0);
183  }
184 
185  // Send bitmap data if requested
186  if ( bm_size )
187  {
188  data->send_data(data->handle,vid_get_bitmap_active_buffer(),bm_size,0,0,0,0);
189  }
190 
191 #ifdef THUMB_FW
192  // Send bitmap opacity data if requested
193  if ( bmo_size )
194  {
195  data->send_data(data->handle,vid_get_opacity_active_buffer(),bmo_size,0,0,0,0);
196  }
197 #endif
198 
199  return total_size;
200 }