File Coverage

blib/lib/Image/ExifTool/Qualcomm.pm
Criterion Covered Total %
statement 48 55 87.2
branch 6 14 42.8
condition 1 3 33.3
subroutine 5 5 100.0
pod 0 2 0.0
total 60 79 75.9


line stmt bran cond sub pod time code
1             #------------------------------------------------------------------------------
2             # File: Qualcomm.pm
3             #
4             # Description: Read Qualcomm APP7 meta information
5             #
6             # Revisions: 2012/02/14 - P. Harvey Created
7             #------------------------------------------------------------------------------
8              
9             package Image::ExifTool::Qualcomm;
10              
11 4     4   31 use strict;
  4         10  
  4         153  
12 4     4   25 use vars qw($VERSION);
  4         24  
  4         230  
13 4     4   28 use Image::ExifTool qw(:DataAccess :Utils);
  4         14  
  4         13927  
14              
15             $VERSION = '1.01';
16              
17             sub ProcessQualcomm($$$);
18             sub MakeNameAndDesc($$);
19              
20             # Qualcomm format codes (ref PH (NC))
21             my @qualcommFormat = (
22             'int8u', 'int8s', 'int16u', 'int16s',
23             'int32u', 'int32s', 'float', 'double',
24             );
25              
26             # information found in JPEG APP7 Qualcomm Camera Attributes segment
27             %Image::ExifTool::Qualcomm::Main = (
28             PROCESS_PROC => \&ProcessQualcomm,
29             GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
30             VARS => { NO_ID => 1, NO_LOOKUP => 1 }, # too long, too many, and too obscure
31             NOTES => q{
32             The tags below have been observed in the JPEG APP7 "Qualcomm Camera
33             Attributes" segment written by some cameras such as the HP iPAQ Voice
34             Messenger. ExifTool will extract any information found from this segment,
35             even if it is not listed in this table.
36             },
37             'aec_current_sensor_luma' => { },
38             'af_position' => { },
39             'aec_current_exp_index' => { },
40             'awb_sample_decision' => { },
41             'asf5_enable' => { },
42             'asf5_filter_mode' => { },
43             'asf5_exposure_index_1' => { },
44             'asf5_exposure_index_2' => { },
45             'asf5_max_exposure_index' => { },
46             'asf5_luma_filter[0]' => { },
47             'asf5_luma_filter[1]' => { },
48             'asf5_luma_filter[2]' => { },
49             'asf5_luma_filter[3]' => { },
50             'asf5_luma_filter[4]' => { },
51             'asf5_luma_filter[5]' => { },
52             'asf5_luma_filter[6]' => { },
53             'asf5_luma_filter[7]' => { },
54             'asf5_luma_filter[8]' => { },
55             'asf5_filter1_a11' => { },
56             'asf5_filter1_a12' => { },
57             'asf5_filter1_a13' => { },
58             'asf5_filter1_a14' => { },
59             'asf5_filter1_a15' => { },
60             'asf5_filter1_a21' => { },
61             'asf5_filter1_a22' => { },
62             'asf5_filter1_a23' => { },
63             'asf5_filter1_a24' => { },
64             'asf5_filter1_a25' => { },
65             'asf5_filter1_a31' => { },
66             'asf5_filter1_a32' => { },
67             'asf5_filter1_a33' => { },
68             'asf5_filter1_a34' => { },
69             'asf5_filter1_a35' => { },
70             'asf5_filter1_a41' => { },
71             'asf5_filter1_a42' => { },
72             'asf5_filter1_a43' => { },
73             'asf5_filter1_a44' => { },
74             'asf5_filter1_a45' => { },
75             'asf5_filter1_a51' => { },
76             'asf5_filter1_a52' => { },
77             'asf5_filter1_a53' => { },
78             'asf5_filter1_a54' => { },
79             'asf5_filter1_a55' => { },
80             'asf5_filter2_a11' => { },
81             'asf5_filter2_a12' => { },
82             'asf5_filter2_a13' => { },
83             'asf5_filter2_a14' => { },
84             'asf5_filter2_a15' => { },
85             'asf5_filter2_a21' => { },
86             'asf5_filter2_a22' => { },
87             'asf5_filter2_a23' => { },
88             'asf5_filter2_a24' => { },
89             'asf5_filter2_a25' => { },
90             'asf5_filter2_a31' => { },
91             'asf5_filter2_a32' => { },
92             'asf5_filter2_a33' => { },
93             'asf5_filter2_a34' => { },
94             'asf5_filter2_a35' => { },
95             'asf5_filter2_a41' => { },
96             'asf5_filter2_a42' => { },
97             'asf5_filter2_a43' => { },
98             'asf5_filter2_a44' => { },
99             'asf5_filter2_a45' => { },
100             'asf5_filter2_a51' => { },
101             'asf5_filter2_a52' => { },
102             'asf5_filter2_a53' => { },
103             'asf5_filter2_a54' => { },
104             'asf5_filter2_a55' => { },
105             'asf5_nrmize_factor1' => { },
106             'asf5_nrmize_factor2' => { },
107             'asf5_low_lo_thres' => { },
108             'asf5_low_up_thres' => { },
109             'asf5_low_shrp_deg_f1' => { },
110             'asf5_low_shrp_deg_f2' => { },
111             'asf5_low_smth_prcnt' => { },
112             'asf5_nrm_lo_thres' => { },
113             'asf5_nrm_up_thres' => { },
114             'asf5_nrm_shrp_deg_f1' => { },
115             'asf5_nrm_shrp_deg_f2' => { },
116             'asf5_nrm_smth_prcnt' => { },
117             'asf5_brt_lo_thres' => { },
118             'asf5_brt_up_thres' => { },
119             'asf5_brt_shrp_deg_f1' => { },
120             'asf5_brt_shrp_deg_f2' => { },
121             'asf5_brt_smth_percent' => { },
122             'asf3_enable' => { },
123             'asf3_edge_filter_a11' => { },
124             'asf3_edge_filter_a12' => { },
125             'asf3_edge_filter_a13' => { },
126             'asf3_edge_filter_a21' => { },
127             'asf3_edge_filter_a22' => { },
128             'asf3_edge_filter_a23' => { },
129             'asf3_edge_filter_a31' => { },
130             'asf3_edge_filter_a32' => { },
131             'asf3_edge_filter_a33' => { },
132             'asf3_noise_filter_a11' => { },
133             'asf3_noise_filter_a12' => { },
134             'asf3_noise_filter_a13' => { },
135             'asf3_noise_filter_a21' => { },
136             'asf3_noise_filter_a22' => { },
137             'asf3_noise_filter_a23' => { },
138             'asf3_noise_filter_a31' => { },
139             'asf3_noise_filter_a32' => { },
140             'asf3_noise_filter_a33' => { },
141             'asf3_lower_threshold' => { },
142             'asf3_upper_threshold' => { },
143             'asf3_edge_detect' => { },
144             'aec_enable' => { },
145             'aec_mode' => { },
146             'aec_aggressiveness' => { },
147             'aec_luma_target' => { },
148             'aec_luma_tolerance' => { },
149             'aec_indoor_idx' => { },
150             'aec_odoor_idx' => { },
151             'aec_exposure_index_adj_step' => { },
152             'aec_outdoor_gamma_index' => { },
153             'aec_vfe_luma' => { },
154             'aec_high_luma_region_threshold' => { },
155             'aec_snapshot_sensor_gain' => { },
156             'aec_snapshot_digital_gain' => { },
157             'aec_snapshot_line_count' => { },
158             'aec_snapshot_exposure_time_ms' => { },
159             'aec_outdoor_bright_enable' => { },
160             'aec_outdoor_bright_reduction' => { },
161             'aec_outdoor_bright_threshold_LO' => { },
162             'aec_outdoor_bright_threshold_HI' => { },
163             'aec_outdoor_bright_discarded' => { },
164             'aec_high_luma_region_count' => { },
165             'antibanding_enable' => { },
166             'anti_bading_pixel_clk' => { },
167             'anti_bading_pixel_clk_per_line' => { },
168             'afr_enable' => { },
169             'afr_faster_0_trigger' => { },
170             'afr_slower_0_trigger' => { },
171             'afr_faster_0_exp_mod' => { },
172             'afr_slower_0_exp_mod' => { },
173             'afr_faster_1_trigger' => { },
174             'afr_slower_1_trigger' => { },
175             'afr_faster_1_exp_mod' => { },
176             'afr_slower_1_exp_mod' => { },
177             'afr_faster_2_trigger' => { },
178             'afr_slower_2_trigger' => { },
179             'afr_faster_2_exp_mod' => { },
180             'afr_slower_2_exp_mod' => { },
181             'afr_faster_3_trigger' => { },
182             'afr_slower_3_trigger' => { },
183             'afr_faster_3_exp_mod' => { },
184             'afr_slower_3_exp_mod' => { },
185             'afr_faster_4_trigger' => { },
186             'afr_slower_4_trigger' => { },
187             'afr_faster_4_exp_mod' => { },
188             'afr_slower_4_exp_mod' => { },
189             'afr_possible_frame_cnt' => { },
190             'af_enable' => { },
191             'af_steps_near_far' => { },
192             'af_steps_near_infinity' => { },
193             'af_gross_step' => { },
194             'af_fine_step' => { },
195             'af_fine_srch_points' => { },
196             'af_process' => { },
197             'af_mode' => { },
198             'af_near_end' => { },
199             'af_boundary' => { },
200             'af_far_end' => { },
201             'af_collect_end_stat' => { },
202             'af_test_mode' => { },
203             'af_undershoot_protect' => { },
204             'af_reset_lens_after_snap' => { },
205             'clip_to_af_rato' => { },
206             'af_pos_def_macro' => { },
207             'af_pos_def_norm' => { },
208             'af_vfe_vert_offset' => { },
209             'af_vfe_horz_offset' => { },
210             'af_vfe_vert_height' => { },
211             'af_vfe_horz_width' => { },
212             'af_vfe_metric_max' => { },
213             'af_trace_positions[0]' => { },
214             'af_trace_positions[1]' => { },
215             'af_trace_positions[2]' => { },
216             'af_trace_positions[3]' => { },
217             'af_trace_positions[4]' => { },
218             'af_trace_positions[5]' => { },
219             'af_trace_positions[6]' => { },
220             'af_trace_positions[7]' => { },
221             'af_trace_positions[8]' => { },
222             'af_trace_positions[9]' => { },
223             'af_trace_positions[10]' => { },
224             'af_trace_positions[11]' => { },
225             'af_trace_positions[12]' => { },
226             'af_trace_positions[13]' => { },
227             'af_trace_positions[14]' => { },
228             'af_trace_positions[15]' => { },
229             'af_trace_positions[16]' => { },
230             'af_trace_positions[17]' => { },
231             'af_trace_positions[18]' => { },
232             'af_trace_positions[19]' => { },
233             'af_trace_positions[20]' => { },
234             'af_trace_positions[21]' => { },
235             'af_trace_positions[22]' => { },
236             'af_trace_positions[23]' => { },
237             'af_trace_positions[24]' => { },
238             'af_trace_positions[25]' => { },
239             'af_trace_positions[26]' => { },
240             'af_trace_positions[27]' => { },
241             'af_trace_positions[28]' => { },
242             'af_trace_positions[29]' => { },
243             'af_trace_positions[30]' => { },
244             'af_trace_positions[31]' => { },
245             'af_trace_positions[32]' => { },
246             'af_trace_positions[33]' => { },
247             'af_trace_positions[34]' => { },
248             'af_trace_positions[35]' => { },
249             'af_trace_positions[36]' => { },
250             'af_trace_positions[37]' => { },
251             'af_trace_positions[38]' => { },
252             'af_trace_positions[39]' => { },
253             'af_trace_positions[40]' => { },
254             'af_trace_positions[41]' => { },
255             'af_trace_positions[42]' => { },
256             'af_trace_positions[43]' => { },
257             'af_trace_positions[44]' => { },
258             'af_trace_positions[45]' => { },
259             'af_trace_positions[46]' => { },
260             'af_trace_positions[47]' => { },
261             'af_trace_positions[48]' => { },
262             'af_trace_positions[49]' => { },
263             'af_trace_stats[0]' => { },
264             'af_trace_stats[1]' => { },
265             'af_trace_stats[2]' => { },
266             'af_trace_stats[3]' => { },
267             'af_trace_stats[4]' => { },
268             'af_trace_stats[5]' => { },
269             'af_trace_stats[6]' => { },
270             'af_trace_stats[7]' => { },
271             'af_trace_stats[8]' => { },
272             'af_trace_stats[9]' => { },
273             'af_trace_stats[10]' => { },
274             'af_trace_stats[11]' => { },
275             'af_trace_stats[12]' => { },
276             'af_trace_stats[13]' => { },
277             'af_trace_stats[14]' => { },
278             'af_trace_stats[15]' => { },
279             'af_trace_stats[16]' => { },
280             'af_trace_stats[17]' => { },
281             'af_trace_stats[18]' => { },
282             'af_trace_stats[19]' => { },
283             'af_trace_stats[20]' => { },
284             'af_trace_stats[21]' => { },
285             'af_trace_stats[22]' => { },
286             'af_trace_stats[23]' => { },
287             'af_trace_stats[24]' => { },
288             'af_trace_stats[25]' => { },
289             'af_trace_stats[26]' => { },
290             'af_trace_stats[27]' => { },
291             'af_trace_stats[28]' => { },
292             'af_trace_stats[29]' => { },
293             'af_trace_stats[30]' => { },
294             'af_trace_stats[31]' => { },
295             'af_trace_stats[32]' => { },
296             'af_trace_stats[33]' => { },
297             'af_trace_stats[34]' => { },
298             'af_trace_stats[35]' => { },
299             'af_trace_stats[36]' => { },
300             'af_trace_stats[37]' => { },
301             'af_trace_stats[38]' => { },
302             'af_trace_stats[39]' => { },
303             'af_trace_stats[40]' => { },
304             'af_trace_stats[41]' => { },
305             'af_trace_stats[42]' => { },
306             'af_trace_stats[43]' => { },
307             'af_trace_stats[44]' => { },
308             'af_trace_stats[45]' => { },
309             'af_trace_stats[46]' => { },
310             'af_trace_stats[47]' => { },
311             'af_trace_stats[48]' => { },
312             'af_trace_stats[49]' => { },
313             'af_focus_time' => { },
314             'awb_enable' => { },
315             'awb_algorithm' => { },
316             'awb_aggressiveness' => { },
317             'awb_red_gain_ref1' => { },
318             'awb_blue_gain_ref1' => { },
319             'awb_red_gain_adj_ref1' => { },
320             'awb_blue_gain_adj_ref1' => { },
321             'awb_red_gain_ref2' => { },
322             'awb_blue_gain_ref2' => { },
323             'awb_red_gain_adj_ref2' => { },
324             'awb_blue_gain_adj_ref2' => { },
325             'awb_red_gain_ref3' => { },
326             'awb_blue_gain_ref3' => { },
327             'awb_red_gain_adj_ref3' => { },
328             'awb_blue_gain_adj_ref3' => { },
329             'awb_red_gain_ref4' => { },
330             'awb_blue_gain_ref4' => { },
331             'awb_red_gain_adj_ref4' => { },
332             'awb_blue_gain_adj_ref4' => { },
333             'awb_red_gain_ref5' => { },
334             'awb_blue_gain_ref5' => { },
335             'awb_red_gain_adj_ref5' => { },
336             'awb_blue_gain_adj_ref5' => { },
337             'awb_red_gain_ref6' => { },
338             'awb_blue_gain_ref6' => { },
339             'awb_red_gain_adj_ref6' => { },
340             'awb_blue_gain_adj_ref6' => { },
341             'awb_red_gain_ref7' => { },
342             'awb_blue_gain_ref7' => { },
343             'awb_red_gain_adj_ref7' => { },
344             'awb_blue_gain_adj_ref7' => { },
345             'awb_red_gain_ref8' => { },
346             'awb_blue_gain_ref8' => { },
347             'awb_red_gain_adj_ref8' => { },
348             'awb_blue_gain_adj_ref8' => { },
349             'awb_lo_vfe_max_y' => { },
350             'awb_lo_vfe_min_y' => { },
351             'awb_lo_vfe_m1' => { },
352             'awb_lo_vfe_m2' => { },
353             'awb_lo_vfe_m3' => { },
354             'awb_lo_vfe_m4' => { },
355             'awb_lo_vfe_c1' => { },
356             'awb_lo_vfe_c2' => { },
357             'awb_lo_vfe_c3' => { },
358             'awb_lo_vfe_c4' => { },
359             'awb_norm_vfe_max_y' => { },
360             'awb_norm_vfe_min_y' => { },
361             'awb_norm_vfe_m1' => { },
362             'awb_norm_vfe_m2' => { },
363             'awb_norm_vfe_m3' => { },
364             'awb_norm_vfe_m4' => { },
365             'awb_norm_vfe_c1' => { },
366             'awb_norm_vfe_c2' => { },
367             'awb_norm_vfe_c3' => { },
368             'awb_norm_vfe_c4' => { },
369             'awb_oudor_vfe_max_y' => { },
370             'awb_oudor_vfe_min_y' => { },
371             'awb_oudor_vfe_m1' => { },
372             'awb_oudor_vfe_m2' => { },
373             'awb_oudor_vfe_m3' => { },
374             'awb_oudor_vfe_m4' => { },
375             'awb_oudor_vfe_c1' => { },
376             'awb_oudor_vfe_c2' => { },
377             'awb_oudor_vfe_c3' => { },
378             'awb_oudor_vfe_c4' => { },
379             'awb_cc_bias' => { },
380             'awb_min_r_gain' => { },
381             'awb_min_g_gain' => { },
382             'awb_min_b_gain' => { },
383             'awb_max_r_gain' => { },
384             'awb_max_g_gain' => { },
385             'awb_max_b_gain' => { },
386             'awb_outdoor_sample_influence' => { },
387             'awb_indoor_sample_influence' => { },
388             'awb_low_lig_col_cor_ena' => { },
389             'awb_agw_grid_dist_2_thresh' => { },
390             'awb_ave_rg_ratio' => { },
391             'awb_ave_bg_ratio' => { },
392             'awb_compact_cluster_R2' => { },
393             'outlier_distance' => { },
394             'awb_green_offset_rg' => { },
395             'awb_green_offset_bg' => { },
396             'awb_prev_wb_rgain' => { },
397             'awb_prev_wb_ggain' => { },
398             'awb_prev_wb_bgain' => { },
399             'awb_snapshot_r_gain' => { },
400             'awb_snapshot_b_gain' => { },
401             'rolloff_enable' => { },
402             'r2_tl84_cx' => { },
403             'r2_tl84_cy' => { },
404             'r2_tl84_width' => { },
405             'r2_tl84_height' => { },
406             'r2_tl84_intervals' => { },
407             'r2_tl84_tbl[0]' => { },
408             'r2_tl84_tbl[1]' => { },
409             'r2_tl84_tbl[2]' => { },
410             'r2_tl84_tbl[3]' => { },
411             'r2_tl84_tbl[4]' => { },
412             'r2_tl84_tbl[5]' => { },
413             'r2_tl84_tbl[6]' => { },
414             'r2_tl84_tbl[7]' => { },
415             'r2_tl84_tbl[8]' => { },
416             'r2_tl84_tbl[9]' => { },
417             'r2_tl84_tbl[10]' => { },
418             'r2_tl84_tbl[11]' => { },
419             'r2_tl84_tbl[12]' => { },
420             'r2_tl84_tbl[13]' => { },
421             'r2_tl84_tbl[14]' => { },
422             'r2_tl84_tbl[15]' => { },
423             'r2_tl84_tbl[16]' => { },
424             'r2_tl84_tbl[17]' => { },
425             'r2_tl84_tbl[18]' => { },
426             'r2_tl84_tbl[19]' => { },
427             'r2_tl84_tbl[20]' => { },
428             'r2_tl84_tbl[21]' => { },
429             'r2_tl84_tbl[22]' => { },
430             'r2_tl84_tbl[23]' => { },
431             'r2_tl84_tbl[24]' => { },
432             'r2_tl84_tbl[25]' => { },
433             'r2_tl84_tbl[26]' => { },
434             'r2_tl84_tbl[27]' => { },
435             'r2_tl84_tbl[28]' => { },
436             'r2_tl84_tbl[29]' => { },
437             'r2_tl84_tbl[30]' => { },
438             'r2_tl84_tbl[31]' => { },
439             'r2_tl84_red_ctbl[0]' => { },
440             'r2_tl84_red_ctbl[1]' => { },
441             'r2_tl84_red_ctbl[2]' => { },
442             'r2_tl84_red_ctbl[3]' => { },
443             'r2_tl84_red_ctbl[4]' => { },
444             'r2_tl84_red_ctbl[5]' => { },
445             'r2_tl84_red_ctbl[6]' => { },
446             'r2_tl84_red_ctbl[7]' => { },
447             'r2_tl84_red_ctbl[8]' => { },
448             'r2_tl84_red_ctbl[9]' => { },
449             'r2_tl84_red_ctbl[10]' => { },
450             'r2_tl84_red_ctbl[11]' => { },
451             'r2_tl84_red_ctbl[12]' => { },
452             'r2_tl84_red_ctbl[13]' => { },
453             'r2_tl84_red_ctbl[14]' => { },
454             'r2_tl84_red_ctbl[15]' => { },
455             'r2_tl84_red_ctbl[16]' => { },
456             'r2_tl84_red_ctbl[17]' => { },
457             'r2_tl84_red_ctbl[18]' => { },
458             'r2_tl84_red_ctbl[19]' => { },
459             'r2_tl84_red_ctbl[20]' => { },
460             'r2_tl84_red_ctbl[21]' => { },
461             'r2_tl84_red_ctbl[22]' => { },
462             'r2_tl84_red_ctbl[23]' => { },
463             'r2_tl84_red_ctbl[24]' => { },
464             'r2_tl84_red_ctbl[25]' => { },
465             'r2_tl84_red_ctbl[26]' => { },
466             'r2_tl84_red_ctbl[27]' => { },
467             'r2_tl84_red_ctbl[28]' => { },
468             'r2_tl84_red_ctbl[29]' => { },
469             'r2_tl84_red_ctbl[30]' => { },
470             'r2_tl84_red_ctbl[31]' => { },
471             'r2_tl84_green_ctbl[0]' => { },
472             'r2_tl84_green_ctbl[1]' => { },
473             'r2_tl84_green_ctbl[2]' => { },
474             'r2_tl84_green_ctbl[3]' => { },
475             'r2_tl84_green_ctbl[4]' => { },
476             'r2_tl84_green_ctbl[5]' => { },
477             'r2_tl84_green_ctbl[6]' => { },
478             'r2_tl84_green_ctbl[7]' => { },
479             'r2_tl84_green_ctbl[8]' => { },
480             'r2_tl84_green_ctbl[9]' => { },
481             'r2_tl84_green_ctbl[10]' => { },
482             'r2_tl84_green_ctbl[11]' => { },
483             'r2_tl84_green_ctbl[12]' => { },
484             'r2_tl84_green_ctbl[13]' => { },
485             'r2_tl84_green_ctbl[14]' => { },
486             'r2_tl84_green_ctbl[15]' => { },
487             'r2_tl84_green_ctbl[16]' => { },
488             'r2_tl84_green_ctbl[17]' => { },
489             'r2_tl84_green_ctbl[18]' => { },
490             'r2_tl84_green_ctbl[19]' => { },
491             'r2_tl84_green_ctbl[20]' => { },
492             'r2_tl84_green_ctbl[21]' => { },
493             'r2_tl84_green_ctbl[22]' => { },
494             'r2_tl84_green_ctbl[23]' => { },
495             'r2_tl84_green_ctbl[24]' => { },
496             'r2_tl84_green_ctbl[25]' => { },
497             'r2_tl84_green_ctbl[26]' => { },
498             'r2_tl84_green_ctbl[27]' => { },
499             'r2_tl84_green_ctbl[28]' => { },
500             'r2_tl84_green_ctbl[29]' => { },
501             'r2_tl84_green_ctbl[30]' => { },
502             'r2_tl84_green_ctbl[31]' => { },
503             'r2_tl84_blue_ctbl[0]' => { },
504             'r2_tl84_blue_ctbl[1]' => { },
505             'r2_tl84_blue_ctbl[2]' => { },
506             'r2_tl84_blue_ctbl[3]' => { },
507             'r2_tl84_blue_ctbl[4]' => { },
508             'r2_tl84_blue_ctbl[5]' => { },
509             'r2_tl84_blue_ctbl[6]' => { },
510             'r2_tl84_blue_ctbl[7]' => { },
511             'r2_tl84_blue_ctbl[8]' => { },
512             'r2_tl84_blue_ctbl[9]' => { },
513             'r2_tl84_blue_ctbl[10]' => { },
514             'r2_tl84_blue_ctbl[11]' => { },
515             'r2_tl84_blue_ctbl[12]' => { },
516             'r2_tl84_blue_ctbl[13]' => { },
517             'r2_tl84_blue_ctbl[14]' => { },
518             'r2_tl84_blue_ctbl[15]' => { },
519             'r2_tl84_blue_ctbl[16]' => { },
520             'r2_tl84_blue_ctbl[17]' => { },
521             'r2_tl84_blue_ctbl[18]' => { },
522             'r2_tl84_blue_ctbl[19]' => { },
523             'r2_tl84_blue_ctbl[20]' => { },
524             'r2_tl84_blue_ctbl[21]' => { },
525             'r2_tl84_blue_ctbl[22]' => { },
526             'r2_tl84_blue_ctbl[23]' => { },
527             'r2_tl84_blue_ctbl[24]' => { },
528             'r2_tl84_blue_ctbl[25]' => { },
529             'r2_tl84_blue_ctbl[26]' => { },
530             'r2_tl84_blue_ctbl[27]' => { },
531             'r2_tl84_blue_ctbl[28]' => { },
532             'r2_tl84_blue_ctbl[29]' => { },
533             'r2_tl84_blue_ctbl[30]' => { },
534             'r2_tl84_blue_ctbl[31]' => { },
535             'r2_tl84_red_stbl[0]' => { },
536             'r2_tl84_red_stbl[1]' => { },
537             'r2_tl84_red_stbl[2]' => { },
538             'r2_tl84_red_stbl[3]' => { },
539             'r2_tl84_red_stbl[4]' => { },
540             'r2_tl84_red_stbl[5]' => { },
541             'r2_tl84_red_stbl[6]' => { },
542             'r2_tl84_red_stbl[7]' => { },
543             'r2_tl84_red_stbl[8]' => { },
544             'r2_tl84_red_stbl[9]' => { },
545             'r2_tl84_red_stbl[10]' => { },
546             'r2_tl84_red_stbl[11]' => { },
547             'r2_tl84_red_stbl[12]' => { },
548             'r2_tl84_red_stbl[13]' => { },
549             'r2_tl84_red_stbl[14]' => { },
550             'r2_tl84_red_stbl[15]' => { },
551             'r2_tl84_red_stbl[16]' => { },
552             'r2_tl84_red_stbl[17]' => { },
553             'r2_tl84_red_stbl[18]' => { },
554             'r2_tl84_red_stbl[19]' => { },
555             'r2_tl84_red_stbl[20]' => { },
556             'r2_tl84_red_stbl[21]' => { },
557             'r2_tl84_red_stbl[22]' => { },
558             'r2_tl84_red_stbl[23]' => { },
559             'r2_tl84_red_stbl[24]' => { },
560             'r2_tl84_red_stbl[25]' => { },
561             'r2_tl84_red_stbl[26]' => { },
562             'r2_tl84_red_stbl[27]' => { },
563             'r2_tl84_red_stbl[28]' => { },
564             'r2_tl84_red_stbl[29]' => { },
565             'r2_tl84_red_stbl[30]' => { },
566             'r2_tl84_red_stbl[31]' => { },
567             'r2_tl84_blue_stbl[0]' => { },
568             'r2_tl84_blue_stbl[1]' => { },
569             'r2_tl84_blue_stbl[2]' => { },
570             'r2_tl84_blue_stbl[3]' => { },
571             'r2_tl84_blue_stbl[4]' => { },
572             'r2_tl84_blue_stbl[5]' => { },
573             'r2_tl84_blue_stbl[6]' => { },
574             'r2_tl84_blue_stbl[7]' => { },
575             'r2_tl84_blue_stbl[8]' => { },
576             'r2_tl84_blue_stbl[9]' => { },
577             'r2_tl84_blue_stbl[10]' => { },
578             'r2_tl84_blue_stbl[11]' => { },
579             'r2_tl84_blue_stbl[12]' => { },
580             'r2_tl84_blue_stbl[13]' => { },
581             'r2_tl84_blue_stbl[14]' => { },
582             'r2_tl84_blue_stbl[15]' => { },
583             'r2_tl84_blue_stbl[16]' => { },
584             'r2_tl84_blue_stbl[17]' => { },
585             'r2_tl84_blue_stbl[18]' => { },
586             'r2_tl84_blue_stbl[19]' => { },
587             'r2_tl84_blue_stbl[20]' => { },
588             'r2_tl84_blue_stbl[21]' => { },
589             'r2_tl84_blue_stbl[22]' => { },
590             'r2_tl84_blue_stbl[23]' => { },
591             'r2_tl84_blue_stbl[24]' => { },
592             'r2_tl84_blue_stbl[25]' => { },
593             'r2_tl84_blue_stbl[26]' => { },
594             'r2_tl84_blue_stbl[27]' => { },
595             'r2_tl84_blue_stbl[28]' => { },
596             'r2_tl84_blue_stbl[29]' => { },
597             'r2_tl84_blue_stbl[30]' => { },
598             'r2_tl84_blue_stbl[31]' => { },
599             'r2_tl84_green_stbl[0]' => { },
600             'r2_tl84_green_stbl[1]' => { },
601             'r2_tl84_green_stbl[2]' => { },
602             'r2_tl84_green_stbl[3]' => { },
603             'r2_tl84_green_stbl[4]' => { },
604             'r2_tl84_green_stbl[5]' => { },
605             'r2_tl84_green_stbl[6]' => { },
606             'r2_tl84_green_stbl[7]' => { },
607             'r2_tl84_green_stbl[8]' => { },
608             'r2_tl84_green_stbl[9]' => { },
609             'r2_tl84_green_stbl[10]' => { },
610             'r2_tl84_green_stbl[11]' => { },
611             'r2_tl84_green_stbl[12]' => { },
612             'r2_tl84_green_stbl[13]' => { },
613             'r2_tl84_green_stbl[14]' => { },
614             'r2_tl84_green_stbl[15]' => { },
615             'r2_tl84_green_stbl[16]' => { },
616             'r2_tl84_green_stbl[17]' => { },
617             'r2_tl84_green_stbl[18]' => { },
618             'r2_tl84_green_stbl[19]' => { },
619             'r2_tl84_green_stbl[20]' => { },
620             'r2_tl84_green_stbl[21]' => { },
621             'r2_tl84_green_stbl[22]' => { },
622             'r2_tl84_green_stbl[23]' => { },
623             'r2_tl84_green_stbl[24]' => { },
624             'r2_tl84_green_stbl[25]' => { },
625             'r2_tl84_green_stbl[26]' => { },
626             'r2_tl84_green_stbl[27]' => { },
627             'r2_tl84_green_stbl[28]' => { },
628             'r2_tl84_green_stbl[29]' => { },
629             'r2_tl84_green_stbl[30]' => { },
630             'r2_tl84_green_stbl[31]' => { },
631             'r2_d65_cx' => { },
632             'r2_d65_cy' => { },
633             'r2_d65_width' => { },
634             'r2_d65_height' => { },
635             'r2_d65_intervals' => { },
636             'r2_d65_tbl[0]' => { },
637             'r2_d65_tbl[1]' => { },
638             'r2_d65_tbl[2]' => { },
639             'r2_d65_tbl[3]' => { },
640             'r2_d65_tbl[4]' => { },
641             'r2_d65_tbl[5]' => { },
642             'r2_d65_tbl[6]' => { },
643             'r2_d65_tbl[7]' => { },
644             'r2_d65_tbl[8]' => { },
645             'r2_d65_tbl[9]' => { },
646             'r2_d65_tbl[10]' => { },
647             'r2_d65_tbl[11]' => { },
648             'r2_d65_tbl[12]' => { },
649             'r2_d65_tbl[13]' => { },
650             'r2_d65_tbl[14]' => { },
651             'r2_d65_tbl[15]' => { },
652             'r2_d65_tbl[16]' => { },
653             'r2_d65_tbl[17]' => { },
654             'r2_d65_tbl[18]' => { },
655             'r2_d65_tbl[19]' => { },
656             'r2_d65_tbl[20]' => { },
657             'r2_d65_tbl[21]' => { },
658             'r2_d65_tbl[22]' => { },
659             'r2_d65_tbl[23]' => { },
660             'r2_d65_tbl[24]' => { },
661             'r2_d65_tbl[25]' => { },
662             'r2_d65_tbl[26]' => { },
663             'r2_d65_tbl[27]' => { },
664             'r2_d65_tbl[28]' => { },
665             'r2_d65_tbl[29]' => { },
666             'r2_d65_tbl[30]' => { },
667             'r2_d65_tbl[31]' => { },
668             'r2_d65_red_ctbl[0]' => { },
669             'r2_d65_red_ctbl[1]' => { },
670             'r2_d65_red_ctbl[2]' => { },
671             'r2_d65_red_ctbl[3]' => { },
672             'r2_d65_red_ctbl[4]' => { },
673             'r2_d65_red_ctbl[5]' => { },
674             'r2_d65_red_ctbl[6]' => { },
675             'r2_d65_red_ctbl[7]' => { },
676             'r2_d65_red_ctbl[8]' => { },
677             'r2_d65_red_ctbl[9]' => { },
678             'r2_d65_red_ctbl[10]' => { },
679             'r2_d65_red_ctbl[11]' => { },
680             'r2_d65_red_ctbl[12]' => { },
681             'r2_d65_red_ctbl[13]' => { },
682             'r2_d65_red_ctbl[14]' => { },
683             'r2_d65_red_ctbl[15]' => { },
684             'r2_d65_red_ctbl[16]' => { },
685             'r2_d65_red_ctbl[17]' => { },
686             'r2_d65_red_ctbl[18]' => { },
687             'r2_d65_red_ctbl[19]' => { },
688             'r2_d65_red_ctbl[20]' => { },
689             'r2_d65_red_ctbl[21]' => { },
690             'r2_d65_red_ctbl[22]' => { },
691             'r2_d65_red_ctbl[23]' => { },
692             'r2_d65_red_ctbl[24]' => { },
693             'r2_d65_red_ctbl[25]' => { },
694             'r2_d65_red_ctbl[26]' => { },
695             'r2_d65_red_ctbl[27]' => { },
696             'r2_d65_red_ctbl[28]' => { },
697             'r2_d65_red_ctbl[29]' => { },
698             'r2_d65_red_ctbl[30]' => { },
699             'r2_d65_red_ctbl[31]' => { },
700             'r2_d65_green_ctbl[0]' => { },
701             'r2_d65_green_ctbl[1]' => { },
702             'r2_d65_green_ctbl[2]' => { },
703             'r2_d65_green_ctbl[3]' => { },
704             'r2_d65_green_ctbl[4]' => { },
705             'r2_d65_green_ctbl[5]' => { },
706             'r2_d65_green_ctbl[6]' => { },
707             'r2_d65_green_ctbl[7]' => { },
708             'r2_d65_green_ctbl[8]' => { },
709             'r2_d65_green_ctbl[9]' => { },
710             'r2_d65_green_ctbl[10]' => { },
711             'r2_d65_green_ctbl[11]' => { },
712             'r2_d65_green_ctbl[12]' => { },
713             'r2_d65_green_ctbl[13]' => { },
714             'r2_d65_green_ctbl[14]' => { },
715             'r2_d65_green_ctbl[15]' => { },
716             'r2_d65_green_ctbl[16]' => { },
717             'r2_d65_green_ctbl[17]' => { },
718             'r2_d65_green_ctbl[18]' => { },
719             'r2_d65_green_ctbl[19]' => { },
720             'r2_d65_green_ctbl[20]' => { },
721             'r2_d65_green_ctbl[21]' => { },
722             'r2_d65_green_ctbl[22]' => { },
723             'r2_d65_green_ctbl[23]' => { },
724             'r2_d65_green_ctbl[24]' => { },
725             'r2_d65_green_ctbl[25]' => { },
726             'r2_d65_green_ctbl[26]' => { },
727             'r2_d65_green_ctbl[27]' => { },
728             'r2_d65_green_ctbl[28]' => { },
729             'r2_d65_green_ctbl[29]' => { },
730             'r2_d65_green_ctbl[30]' => { },
731             'r2_d65_green_ctbl[31]' => { },
732             'r2_d65_blue_ctbl[0]' => { },
733             'r2_d65_blue_ctbl[1]' => { },
734             'r2_d65_blue_ctbl[2]' => { },
735             'r2_d65_blue_ctbl[3]' => { },
736             'r2_d65_blue_ctbl[4]' => { },
737             'r2_d65_blue_ctbl[5]' => { },
738             'r2_d65_blue_ctbl[6]' => { },
739             'r2_d65_blue_ctbl[7]' => { },
740             'r2_d65_blue_ctbl[8]' => { },
741             'r2_d65_blue_ctbl[9]' => { },
742             'r2_d65_blue_ctbl[10]' => { },
743             'r2_d65_blue_ctbl[11]' => { },
744             'r2_d65_blue_ctbl[12]' => { },
745             'r2_d65_blue_ctbl[13]' => { },
746             'r2_d65_blue_ctbl[14]' => { },
747             'r2_d65_blue_ctbl[15]' => { },
748             'r2_d65_blue_ctbl[16]' => { },
749             'r2_d65_blue_ctbl[17]' => { },
750             'r2_d65_blue_ctbl[18]' => { },
751             'r2_d65_blue_ctbl[19]' => { },
752             'r2_d65_blue_ctbl[20]' => { },
753             'r2_d65_blue_ctbl[21]' => { },
754             'r2_d65_blue_ctbl[22]' => { },
755             'r2_d65_blue_ctbl[23]' => { },
756             'r2_d65_blue_ctbl[24]' => { },
757             'r2_d65_blue_ctbl[25]' => { },
758             'r2_d65_blue_ctbl[26]' => { },
759             'r2_d65_blue_ctbl[27]' => { },
760             'r2_d65_blue_ctbl[28]' => { },
761             'r2_d65_blue_ctbl[29]' => { },
762             'r2_d65_blue_ctbl[30]' => { },
763             'r2_d65_blue_ctbl[31]' => { },
764             'r2_d65_red_stbl[0]' => { },
765             'r2_d65_red_stbl[1]' => { },
766             'r2_d65_red_stbl[2]' => { },
767             'r2_d65_red_stbl[3]' => { },
768             'r2_d65_red_stbl[4]' => { },
769             'r2_d65_red_stbl[5]' => { },
770             'r2_d65_red_stbl[6]' => { },
771             'r2_d65_red_stbl[7]' => { },
772             'r2_d65_red_stbl[8]' => { },
773             'r2_d65_red_stbl[9]' => { },
774             'r2_d65_red_stbl[10]' => { },
775             'r2_d65_red_stbl[11]' => { },
776             'r2_d65_red_stbl[12]' => { },
777             'r2_d65_red_stbl[13]' => { },
778             'r2_d65_red_stbl[14]' => { },
779             'r2_d65_red_stbl[15]' => { },
780             'r2_d65_red_stbl[16]' => { },
781             'r2_d65_red_stbl[17]' => { },
782             'r2_d65_red_stbl[18]' => { },
783             'r2_d65_red_stbl[19]' => { },
784             'r2_d65_red_stbl[20]' => { },
785             'r2_d65_red_stbl[21]' => { },
786             'r2_d65_red_stbl[22]' => { },
787             'r2_d65_red_stbl[23]' => { },
788             'r2_d65_red_stbl[24]' => { },
789             'r2_d65_red_stbl[25]' => { },
790             'r2_d65_red_stbl[26]' => { },
791             'r2_d65_red_stbl[27]' => { },
792             'r2_d65_red_stbl[28]' => { },
793             'r2_d65_red_stbl[29]' => { },
794             'r2_d65_red_stbl[30]' => { },
795             'r2_d65_red_stbl[31]' => { },
796             'r2_d65_blue_stbl[0]' => { },
797             'r2_d65_blue_stbl[1]' => { },
798             'r2_d65_blue_stbl[2]' => { },
799             'r2_d65_blue_stbl[3]' => { },
800             'r2_d65_blue_stbl[4]' => { },
801             'r2_d65_blue_stbl[5]' => { },
802             'r2_d65_blue_stbl[6]' => { },
803             'r2_d65_blue_stbl[7]' => { },
804             'r2_d65_blue_stbl[8]' => { },
805             'r2_d65_blue_stbl[9]' => { },
806             'r2_d65_blue_stbl[10]' => { },
807             'r2_d65_blue_stbl[11]' => { },
808             'r2_d65_blue_stbl[12]' => { },
809             'r2_d65_blue_stbl[13]' => { },
810             'r2_d65_blue_stbl[14]' => { },
811             'r2_d65_blue_stbl[15]' => { },
812             'r2_d65_blue_stbl[16]' => { },
813             'r2_d65_blue_stbl[17]' => { },
814             'r2_d65_blue_stbl[18]' => { },
815             'r2_d65_blue_stbl[19]' => { },
816             'r2_d65_blue_stbl[20]' => { },
817             'r2_d65_blue_stbl[21]' => { },
818             'r2_d65_blue_stbl[22]' => { },
819             'r2_d65_blue_stbl[23]' => { },
820             'r2_d65_blue_stbl[24]' => { },
821             'r2_d65_blue_stbl[25]' => { },
822             'r2_d65_blue_stbl[26]' => { },
823             'r2_d65_blue_stbl[27]' => { },
824             'r2_d65_blue_stbl[28]' => { },
825             'r2_d65_blue_stbl[29]' => { },
826             'r2_d65_blue_stbl[30]' => { },
827             'r2_d65_blue_stbl[31]' => { },
828             'r2_d65_green_stbl[0]' => { },
829             'r2_d65_green_stbl[1]' => { },
830             'r2_d65_green_stbl[2]' => { },
831             'r2_d65_green_stbl[3]' => { },
832             'r2_d65_green_stbl[4]' => { },
833             'r2_d65_green_stbl[5]' => { },
834             'r2_d65_green_stbl[6]' => { },
835             'r2_d65_green_stbl[7]' => { },
836             'r2_d65_green_stbl[8]' => { },
837             'r2_d65_green_stbl[9]' => { },
838             'r2_d65_green_stbl[10]' => { },
839             'r2_d65_green_stbl[11]' => { },
840             'r2_d65_green_stbl[12]' => { },
841             'r2_d65_green_stbl[13]' => { },
842             'r2_d65_green_stbl[14]' => { },
843             'r2_d65_green_stbl[15]' => { },
844             'r2_d65_green_stbl[16]' => { },
845             'r2_d65_green_stbl[17]' => { },
846             'r2_d65_green_stbl[18]' => { },
847             'r2_d65_green_stbl[19]' => { },
848             'r2_d65_green_stbl[20]' => { },
849             'r2_d65_green_stbl[21]' => { },
850             'r2_d65_green_stbl[22]' => { },
851             'r2_d65_green_stbl[23]' => { },
852             'r2_d65_green_stbl[24]' => { },
853             'r2_d65_green_stbl[25]' => { },
854             'r2_d65_green_stbl[26]' => { },
855             'r2_d65_green_stbl[27]' => { },
856             'r2_d65_green_stbl[28]' => { },
857             'r2_d65_green_stbl[29]' => { },
858             'r2_d65_green_stbl[30]' => { },
859             'r2_d65_green_stbl[31]' => { },
860             'r2_a_cx' => { },
861             'r2_a_cy' => { },
862             'r2_a_width' => { },
863             'r2_a_height' => { },
864             'r2_a_intervals' => { },
865             'r2_a_tbl[0]' => { },
866             'r2_a_tbl[1]' => { },
867             'r2_a_tbl[2]' => { },
868             'r2_a_tbl[3]' => { },
869             'r2_a_tbl[4]' => { },
870             'r2_a_tbl[5]' => { },
871             'r2_a_tbl[6]' => { },
872             'r2_a_tbl[7]' => { },
873             'r2_a_tbl[8]' => { },
874             'r2_a_tbl[9]' => { },
875             'r2_a_tbl[10]' => { },
876             'r2_a_tbl[11]' => { },
877             'r2_a_tbl[12]' => { },
878             'r2_a_tbl[13]' => { },
879             'r2_a_tbl[14]' => { },
880             'r2_a_tbl[15]' => { },
881             'r2_a_tbl[16]' => { },
882             'r2_a_tbl[17]' => { },
883             'r2_a_tbl[18]' => { },
884             'r2_a_tbl[19]' => { },
885             'r2_a_tbl[20]' => { },
886             'r2_a_tbl[21]' => { },
887             'r2_a_tbl[22]' => { },
888             'r2_a_tbl[23]' => { },
889             'r2_a_tbl[24]' => { },
890             'r2_a_tbl[25]' => { },
891             'r2_a_tbl[26]' => { },
892             'r2_a_tbl[27]' => { },
893             'r2_a_tbl[28]' => { },
894             'r2_a_tbl[29]' => { },
895             'r2_a_tbl[30]' => { },
896             'r2_a_tbl[31]' => { },
897             'r2_a_red_ctbl[0]' => { },
898             'r2_a_red_ctbl[1]' => { },
899             'r2_a_red_ctbl[2]' => { },
900             'r2_a_red_ctbl[3]' => { },
901             'r2_a_red_ctbl[4]' => { },
902             'r2_a_red_ctbl[5]' => { },
903             'r2_a_red_ctbl[6]' => { },
904             'r2_a_red_ctbl[7]' => { },
905             'r2_a_red_ctbl[8]' => { },
906             'r2_a_red_ctbl[9]' => { },
907             'r2_a_red_ctbl[10]' => { },
908             'r2_a_red_ctbl[11]' => { },
909             'r2_a_red_ctbl[12]' => { },
910             'r2_a_red_ctbl[13]' => { },
911             'r2_a_red_ctbl[14]' => { },
912             'r2_a_red_ctbl[15]' => { },
913             'r2_a_red_ctbl[16]' => { },
914             'r2_a_red_ctbl[17]' => { },
915             'r2_a_red_ctbl[18]' => { },
916             'r2_a_red_ctbl[19]' => { },
917             'r2_a_red_ctbl[20]' => { },
918             'r2_a_red_ctbl[21]' => { },
919             'r2_a_red_ctbl[22]' => { },
920             'r2_a_red_ctbl[23]' => { },
921             'r2_a_red_ctbl[24]' => { },
922             'r2_a_red_ctbl[25]' => { },
923             'r2_a_red_ctbl[26]' => { },
924             'r2_a_red_ctbl[27]' => { },
925             'r2_a_red_ctbl[28]' => { },
926             'r2_a_red_ctbl[29]' => { },
927             'r2_a_red_ctbl[30]' => { },
928             'r2_a_red_ctbl[31]' => { },
929             'r2_a_green_ctbl[0]' => { },
930             'r2_a_green_ctbl[1]' => { },
931             'r2_a_green_ctbl[2]' => { },
932             'r2_a_green_ctbl[3]' => { },
933             'r2_a_green_ctbl[4]' => { },
934             'r2_a_green_ctbl[5]' => { },
935             'r2_a_green_ctbl[6]' => { },
936             'r2_a_green_ctbl[7]' => { },
937             'r2_a_green_ctbl[8]' => { },
938             'r2_a_green_ctbl[9]' => { },
939             'r2_a_green_ctbl[10]' => { },
940             'r2_a_green_ctbl[11]' => { },
941             'r2_a_green_ctbl[12]' => { },
942             'r2_a_green_ctbl[13]' => { },
943             'r2_a_green_ctbl[14]' => { },
944             'r2_a_green_ctbl[15]' => { },
945             'r2_a_green_ctbl[16]' => { },
946             'r2_a_green_ctbl[17]' => { },
947             'r2_a_green_ctbl[18]' => { },
948             'r2_a_green_ctbl[19]' => { },
949             'r2_a_green_ctbl[20]' => { },
950             'r2_a_green_ctbl[21]' => { },
951             'r2_a_green_ctbl[22]' => { },
952             'r2_a_green_ctbl[23]' => { },
953             'r2_a_green_ctbl[24]' => { },
954             'r2_a_green_ctbl[25]' => { },
955             'r2_a_green_ctbl[26]' => { },
956             'r2_a_green_ctbl[27]' => { },
957             'r2_a_green_ctbl[28]' => { },
958             'r2_a_green_ctbl[29]' => { },
959             'r2_a_green_ctbl[30]' => { },
960             'r2_a_green_ctbl[31]' => { },
961             'r2_a_blue_ctbl[0]' => { },
962             'r2_a_blue_ctbl[1]' => { },
963             'r2_a_blue_ctbl[2]' => { },
964             'r2_a_blue_ctbl[3]' => { },
965             'r2_a_blue_ctbl[4]' => { },
966             'r2_a_blue_ctbl[5]' => { },
967             'r2_a_blue_ctbl[6]' => { },
968             'r2_a_blue_ctbl[7]' => { },
969             'r2_a_blue_ctbl[8]' => { },
970             'r2_a_blue_ctbl[9]' => { },
971             'r2_a_blue_ctbl[10]' => { },
972             'r2_a_blue_ctbl[11]' => { },
973             'r2_a_blue_ctbl[12]' => { },
974             'r2_a_blue_ctbl[13]' => { },
975             'r2_a_blue_ctbl[14]' => { },
976             'r2_a_blue_ctbl[15]' => { },
977             'r2_a_blue_ctbl[16]' => { },
978             'r2_a_blue_ctbl[17]' => { },
979             'r2_a_blue_ctbl[18]' => { },
980             'r2_a_blue_ctbl[19]' => { },
981             'r2_a_blue_ctbl[20]' => { },
982             'r2_a_blue_ctbl[21]' => { },
983             'r2_a_blue_ctbl[22]' => { },
984             'r2_a_blue_ctbl[23]' => { },
985             'r2_a_blue_ctbl[24]' => { },
986             'r2_a_blue_ctbl[25]' => { },
987             'r2_a_blue_ctbl[26]' => { },
988             'r2_a_blue_ctbl[27]' => { },
989             'r2_a_blue_ctbl[28]' => { },
990             'r2_a_blue_ctbl[29]' => { },
991             'r2_a_blue_ctbl[30]' => { },
992             'r2_a_blue_ctbl[31]' => { },
993             'r2_a_red_stbl[0]' => { },
994             'r2_a_red_stbl[1]' => { },
995             'r2_a_red_stbl[2]' => { },
996             'r2_a_red_stbl[3]' => { },
997             'r2_a_red_stbl[4]' => { },
998             'r2_a_red_stbl[5]' => { },
999             'r2_a_red_stbl[6]' => { },
1000             'r2_a_red_stbl[7]' => { },
1001             'r2_a_red_stbl[8]' => { },
1002             'r2_a_red_stbl[9]' => { },
1003             'r2_a_red_stbl[10]' => { },
1004             'r2_a_red_stbl[11]' => { },
1005             'r2_a_red_stbl[12]' => { },
1006             'r2_a_red_stbl[13]' => { },
1007             'r2_a_red_stbl[14]' => { },
1008             'r2_a_red_stbl[15]' => { },
1009             'r2_a_red_stbl[16]' => { },
1010             'r2_a_red_stbl[17]' => { },
1011             'r2_a_red_stbl[18]' => { },
1012             'r2_a_red_stbl[19]' => { },
1013             'r2_a_red_stbl[20]' => { },
1014             'r2_a_red_stbl[21]' => { },
1015             'r2_a_red_stbl[22]' => { },
1016             'r2_a_red_stbl[23]' => { },
1017             'r2_a_red_stbl[24]' => { },
1018             'r2_a_red_stbl[25]' => { },
1019             'r2_a_red_stbl[26]' => { },
1020             'r2_a_red_stbl[27]' => { },
1021             'r2_a_red_stbl[28]' => { },
1022             'r2_a_red_stbl[29]' => { },
1023             'r2_a_red_stbl[30]' => { },
1024             'r2_a_red_stbl[31]' => { },
1025             'r2_a_blue_stbl[0]' => { },
1026             'r2_a_blue_stbl[1]' => { },
1027             'r2_a_blue_stbl[2]' => { },
1028             'r2_a_blue_stbl[3]' => { },
1029             'r2_a_blue_stbl[4]' => { },
1030             'r2_a_blue_stbl[5]' => { },
1031             'r2_a_blue_stbl[6]' => { },
1032             'r2_a_blue_stbl[7]' => { },
1033             'r2_a_blue_stbl[8]' => { },
1034             'r2_a_blue_stbl[9]' => { },
1035             'r2_a_blue_stbl[10]' => { },
1036             'r2_a_blue_stbl[11]' => { },
1037             'r2_a_blue_stbl[12]' => { },
1038             'r2_a_blue_stbl[13]' => { },
1039             'r2_a_blue_stbl[14]' => { },
1040             'r2_a_blue_stbl[15]' => { },
1041             'r2_a_blue_stbl[16]' => { },
1042             'r2_a_blue_stbl[17]' => { },
1043             'r2_a_blue_stbl[18]' => { },
1044             'r2_a_blue_stbl[19]' => { },
1045             'r2_a_blue_stbl[20]' => { },
1046             'r2_a_blue_stbl[21]' => { },
1047             'r2_a_blue_stbl[22]' => { },
1048             'r2_a_blue_stbl[23]' => { },
1049             'r2_a_blue_stbl[24]' => { },
1050             'r2_a_blue_stbl[25]' => { },
1051             'r2_a_blue_stbl[26]' => { },
1052             'r2_a_blue_stbl[27]' => { },
1053             'r2_a_blue_stbl[28]' => { },
1054             'r2_a_blue_stbl[29]' => { },
1055             'r2_a_blue_stbl[30]' => { },
1056             'r2_a_blue_stbl[31]' => { },
1057             'r2_a_green_stbl[0]' => { },
1058             'r2_a_green_stbl[1]' => { },
1059             'r2_a_green_stbl[2]' => { },
1060             'r2_a_green_stbl[3]' => { },
1061             'r2_a_green_stbl[4]' => { },
1062             'r2_a_green_stbl[5]' => { },
1063             'r2_a_green_stbl[6]' => { },
1064             'r2_a_green_stbl[7]' => { },
1065             'r2_a_green_stbl[8]' => { },
1066             'r2_a_green_stbl[9]' => { },
1067             'r2_a_green_stbl[10]' => { },
1068             'r2_a_green_stbl[11]' => { },
1069             'r2_a_green_stbl[12]' => { },
1070             'r2_a_green_stbl[13]' => { },
1071             'r2_a_green_stbl[14]' => { },
1072             'r2_a_green_stbl[15]' => { },
1073             'r2_a_green_stbl[16]' => { },
1074             'r2_a_green_stbl[17]' => { },
1075             'r2_a_green_stbl[18]' => { },
1076             'r2_a_green_stbl[19]' => { },
1077             'r2_a_green_stbl[20]' => { },
1078             'r2_a_green_stbl[21]' => { },
1079             'r2_a_green_stbl[22]' => { },
1080             'r2_a_green_stbl[23]' => { },
1081             'r2_a_green_stbl[24]' => { },
1082             'r2_a_green_stbl[25]' => { },
1083             'r2_a_green_stbl[26]' => { },
1084             'r2_a_green_stbl[27]' => { },
1085             'r2_a_green_stbl[28]' => { },
1086             'r2_a_green_stbl[29]' => { },
1087             'r2_a_green_stbl[30]' => { },
1088             'r2_a_green_stbl[31]' => { },
1089             'def_cor_c0' => { },
1090             'def_cor_c1' => { },
1091             'def_cor_c2' => { },
1092             'def_cor_c3' => { },
1093             'def_cor_c4' => { },
1094             'def_cor_c5' => { },
1095             'def_cor_c6' => { },
1096             'def_cor_c7' => { },
1097             'def_cor_c8' => { },
1098             'def_cor_k0' => { },
1099             'def_cor_k1' => { },
1100             'def_cor_k2' => { },
1101             'yhi_ylo_cor_c0' => { },
1102             'yhi_ylo_cor_c1' => { },
1103             'yhi_ylo_cor_c2' => { },
1104             'yhi_ylo_cor_c3' => { },
1105             'yhi_ylo_cor_c4' => { },
1106             'yhi_ylo_cor_c5' => { },
1107             'yhi_ylo_cor_c6' => { },
1108             'yhi_ylo_cor_c7' => { },
1109             'yhi_ylo_cor_c8' => { },
1110             'yhi_ylo_cor_k0' => { },
1111             'yhi_ylo_cor_k1' => { },
1112             'yhi_ylo_cor_k2' => { },
1113             'def_conv_chrm_a_m' => { },
1114             'def_conv_chrm_a_p' => { },
1115             'def_conv_chrm_b_m' => { },
1116             'def_conv_chrm_b_p' => { },
1117             'def_conv_chrm_c_m' => { },
1118             'def_conv_chrm_c_p' => { },
1119             'def_conv_chrm_d_m' => { },
1120             'def_conv_chrm_d_p' => { },
1121             'def_conv_chrm_k_cb' => { },
1122             'def_conv_chrm_k_cr' => { },
1123             'def_conv_luma_v0' => { },
1124             'def_conv_luma_v1' => { },
1125             'def_conv_luma_v2' => { },
1126             'def_conv_luma_k' => { },
1127             'tl84_conv_chrm_a_m' => { },
1128             'tl84_conv_chrm_a_p' => { },
1129             'tl84_conv_chrm_b_m' => { },
1130             'tl84_conv_chrm_b_p' => { },
1131             'tl84_conv_chrm_c_m' => { },
1132             'tl84_conv_chrm_c_p' => { },
1133             'tl84_conv_chrm_d_m' => { },
1134             'tl84_conv_chrm_d_p' => { },
1135             'tl84_conv_chrm_k_cb' => { },
1136             'tl84_conv_chrm_k_cr' => { },
1137             'tl84_conv_luma_v0' => { },
1138             'tl84_conv_luma_v1' => { },
1139             'tl84_conv_luma_v2' => { },
1140             'tl84_conv_luma_k' => { },
1141             'incand_conv_chrm_a_m' => { },
1142             'incand_conv_chrm_a_p' => { },
1143             'incand_conv_chrm_b_m' => { },
1144             'incand_conv_chrm_b_p' => { },
1145             'incand_conv_chrm_c_m' => { },
1146             'incand_conv_chrm_c_p' => { },
1147             'incand_conv_chrm_d_m' => { },
1148             'incand_conv_chrm_d_p' => { },
1149             'incand_conv_chrm_k_cb' => { },
1150             'incand_conv_chrm_k_cr' => { },
1151             'incand_conv_luma_v0' => { },
1152             'incand_conv_luma_v1' => { },
1153             'incand_conv_luma_v2' => { },
1154             'incand_conv_luma_k' => { },
1155             'daylt_conv_chrm_a_m' => { },
1156             'daylt_conv_chrm_a_p' => { },
1157             'daylt_conv_chrm_b_m' => { },
1158             'daylt_conv_chrm_b_p' => { },
1159             'daylt_conv_chrm_c_m' => { },
1160             'daylt_conv_chrm_c_p' => { },
1161             'daylt_conv_chrm_d_m' => { },
1162             'daylt_conv_chrm_d_p' => { },
1163             'daylt_conv_chrm_k_cb' => { },
1164             'daylt_conv_chrm_k_cr' => { },
1165             'daylt_conv_luma_v0' => { },
1166             'daylt_conv_luma_v1' => { },
1167             'daylt_conv_luma_v2' => { },
1168             'daylt_conv_luma_k' => { },
1169             'yhi_ylo_conv_chrm_a_m' => { },
1170             'yhi_ylo_conv_chrm_a_p' => { },
1171             'yhi_ylo_conv_chrm_b_m' => { },
1172             'yhi_ylo_conv_chrm_b_p' => { },
1173             'yhi_ylo_conv_chrm_c_m' => { },
1174             'yhi_ylo_conv_chrm_c_p' => { },
1175             'yhi_ylo_conv_chrm_d_m' => { },
1176             'yhi_ylo_conv_chrm_d_p' => { },
1177             'yhi_ylo_conv_chrm_k_cb' => { },
1178             'yhi_ylo_conv_chrm_k_cr' => { },
1179             'yhi_ylo_conv_luma_v0' => { },
1180             'yhi_ylo_conv_luma_v1' => { },
1181             'yhi_ylo_conv_luma_v2' => { },
1182             'yhi_ylo_conv_luma_k' => { },
1183             'gamma_enable' => { },
1184             'def_luma_gamma_mode' => { },
1185             'def_rgb_gamma_mode' => { },
1186             'blck_lvl_even_cols' => { },
1187             'blck_lvl_odd_cols' => { },
1188             'defect_pix_min_thresh' => { },
1189             'defect_pix_max_thresh' => { },
1190             'defect_pix_cor_enable' => { },
1191             'prview_resol' => { },
1192             'snapshot_resol' => { },
1193             'curr_resol' => { },
1194             'sensor_fmt' => { },
1195             'discard_frst_frm' => { },
1196             'frm_skip_pttrn' => { },
1197             'sensor_type' => { },
1198             'max_video_fps' => { },
1199             'video_fps' => { },
1200             'max_prview_fps' => { },
1201             'prview_fps' => { },
1202             'nghtsht_fps' => { },
1203             'sensr_ful_wdth' => { },
1204             'sensr_ful_hght' => { },
1205             'sensr_qtr_wdth' => { },
1206             'sensr_qtr_hght' => { },
1207             'nightshot_mode' => { },
1208             'pclk_invert' => { },
1209             'cam_mclk_hz' => { },
1210             'chrom_supress' => { },
1211             'chro_sup_luma_thres_1' => { },
1212             'chro_sup_luma_thres_2' => { },
1213             'chro_sup_luma_thres_3' => { },
1214             'chro_sup_luma_thres_4' => { },
1215             'chro_sup_chro_thres_1' => { },
1216             'chro_sup_chro_thres_2' => { },
1217             'la_detect' => { },
1218             'la_enable' => { },
1219             'HJR_enable' => { },
1220             'HJR_max_num_frames' => { },
1221             'HJR_one_to_two_offset' => { },
1222             'HJR_n_reduction_flat' => { },
1223             'HJR_n_reduction_texture' => { },
1224             'HJR_texture_threshold' => { },
1225             );
1226              
1227             # generate tag names and descriptions
1228             {
1229             local $_;
1230             my $table = \%Image::ExifTool::Qualcomm::Main;
1231             MakeNameAndDesc($_, $$table{$_}) foreach TagTableKeys($table);
1232             }
1233              
1234             #------------------------------------------------------------------------------
1235             # Generate tag Name and Description from a Qualcomm tag ID
1236             # Inputs: 0) tag ID, 1) tagInfo ref
1237             # Returns: true on success
1238             sub MakeNameAndDesc($$)
1239             {
1240 4752     4752 0 7769 local $_ = shift;
1241 4752         6123 my $tagInfo = shift;
1242             # capitalize various leading acronyms or just first letter...
1243 4752 100       17819 s/^(asf|awb|aec|afr|af_|la_|r2_tl|tl)/\U$1/ or $_ = ucfirst;
1244 4752         26977 s/_([a-z])/_\u$1/g; # capitalize first letter of each word
1245 4752         13719 s/\[(\d+)\]$/sprintf("_%.2d",$1)/e; # use 2-digit subscripts (and remove brackets)
  3124         11053  
1246 4752         8579 tr/-_a-zA-Z0-9//dc; # delete invalid characters
1247 4752         7441 my $desc = $_;
1248             # convert underlines to spaces in description
1249 4752 50       10416 if ($desc =~ tr/_/ /) {
1250             # remove unnecessary underlines from tag name...
1251 4752         21040 s/_([A-Z][a-z])/$1/g;
1252 4752         18592 s/([a-z0-9])_([A-Z])/$1$2/g;
1253 4752         14733 s/([A-Za-z])_(\d)/$1$2/g;
1254             }
1255 4752 50       9963 return 0 unless length;
1256 4752         11373 $$tagInfo{Name} = $_;
1257 4752         8430 $$tagInfo{Description} = $desc;
1258 4752         12905 return 1;
1259             }
1260              
1261             #------------------------------------------------------------------------------
1262             # Process Qualcomm APP7 metadata (ref PH)
1263             # Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref
1264             # Returns: 1 on success
1265             sub ProcessQualcomm($$$)
1266             {
1267 19     19 0 81 my ($et, $dirInfo, $tagTablePtr) = @_;
1268 19         61 my $dataPt = $$dirInfo{DataPt};
1269 19         85 my $dataPos = $$dirInfo{DataPos};
1270 19         60 my $pos = $$dirInfo{DirStart};
1271 19         58 my $dirEnd = $pos + $$dirInfo{DirLen};
1272              
1273 19         144 $et->VerboseDir('Qualcomm', undef, $$dirInfo{DirLen});
1274 19         86 SetByteOrder('II');
1275              
1276 19         186 while ($pos + 3 < $dirEnd) {
1277 171         445 my $valLen = Get16u($dataPt, $pos);
1278 171         482 my $tagLen = Get8u($dataPt, $pos + 2);
1279 171 50       589 last if $pos + 8 + $tagLen + $valLen > $dirEnd;
1280 171         433 my $tag = substr($$dataPt, $pos + 3, $tagLen);
1281 171         302 $pos += 3 + $tagLen; # point to format byte
1282 171         385 my $fmt = Get8u($dataPt, $pos);
1283             # (not sure what these counts are for -- both are always 1 in my samples)
1284             #my $cnt1 = Get16u($dataPt, $pos + 1);
1285             #my $cnt2 = Get16u($dataPt, $pos + 3);
1286 171         296 $pos += 5; # point to start of value data
1287 171         285 my ($val, $format);
1288 171 50       368 if ($fmt <= 7) {
1289 171         384 $format = $qualcommFormat[$fmt];
1290 171         427 $val = ReadValue($dataPt, $pos, $format, undef, $valLen);
1291             } else {
1292 0         0 $format = "format $fmt";
1293 0         0 my $value = substr($$dataPt, $pos, $valLen);
1294 0         0 $val = \$value;
1295             }
1296 171 0 33     903 unless (defined $$tagTablePtr{$tag} or $Image::ExifTool::specialTags{$tag}) {
1297 0         0 my %tagInfo;
1298 0 0       0 if (MakeNameAndDesc($tag, \%tagInfo)) {
1299 0         0 $et->VPrint(0, $$et{INDENT}, "[adding Qualcomm:$tagInfo{Name}]\n");
1300 0         0 AddTagToTable($tagTablePtr, $tag, \%tagInfo);
1301             }
1302             }
1303 171         652 $et->HandleTag($tagTablePtr, $tag, $val,
1304             DataPt => $dataPt,
1305             DataPos => $dataPos,
1306             Start => $pos,
1307             Size => $valLen,
1308             Format => $format,
1309             );
1310 171         533 $pos += $valLen; # point to start of next entry
1311             }
1312 19         125 return 1;
1313             }
1314              
1315             1; # end
1316              
1317             __END__