source: extensions/edit_gmaps/admin/include/Makernotes/konica_minolta.php @ 9412

Last change on this file since 9412 was 9412, checked in by cljosse, 13 years ago
File size: 30.8 KB
Line 
1<?php
2
3/******************************************************************************
4*
5* Filename:     konica_minolta.php
6*
7* Description:  Konica/Minolta Makernote Parser
8*               Provides functions to decode an Konica/Minolta EXIF makernote and
9*               to interpret the resulting array into html.
10*
11*               Konica/Minolta Makernote Formats:
12*
13*               Type 1:
14*
15*               Field           Size            Description
16*               ----------------------------------------------------------------
17*               Header          3 Bytes         "MLY"
18*               Unknown Data    Variable        Unknown Data
19*               ----------------------------------------------------------------
20*
21*               Type 2:
22*
23*               Field           Size            Description
24*               ----------------------------------------------------------------
25*               Header          2 Bytes         "KC"
26*               Unknown Data    Variable        Unknown Data
27*               ----------------------------------------------------------------
28*
29*               Type 3:
30*
31*               Field           Size            Description
32*               ----------------------------------------------------------------
33*               Header          8 Bytes         "+M+M+M+M"
34*               Unknown Data    Variable        Unknown Data
35*               ----------------------------------------------------------------
36*
37*               Type 4:
38*
39*               Field           Size            Description
40*               ----------------------------------------------------------------
41*               Header          5 Bytes         "MINOL"
42*               Unknown Data    Variable        Unknown Data
43*               ----------------------------------------------------------------
44*
45*               Type 5:   NO HEADER
46*
47*               Field           Size            Description
48*               ----------------------------------------------------------------
49*               IFD Data        Variable        Standard IFD with Olympus Tags
50*               ----------------------------------------------------------------
51*
52*
53* Author:      Evan Hunter
54*
55* Date:         30/7/2004
56*
57* Project:      JPEG Metadata
58*
59* Revision:     1.00
60*
61* URL:          http://electronics.ozhiker.com
62*
63* Copyright:    Copyright " . $auteur . " 2004
64*               This file may be used freely for non-commercial purposes.For
65*               commercial uses please contact the author: evan@ozhiker.com
66*
67******************************************************************************/
68
69// Konica/Minolta makernote uses Olympus tags - ensure they are included
70
71include_once 'olympus.php';
72
73
74// Add the parser functions to the list of Makernote parsers . (Interpreting done by Olympus script)
75
76$GLOBALS['Makernote_Function_Array']['Read_Makernote_Tag'][] = "get_Minolta_Makernote";
77$GLOBALS['Makernote_Function_Array']['get_Makernote_Text_Value'][] = "get_Minolta_Text_Value";
78
79
80
81/******************************************************************************
82*
83* Function:     get_Minolta_Makernote
84*
85* Description:  Decodes the Makernote tag and returns the new tag with the decoded
86*               information attached. Returns false if this is not a makernote
87*               that can be processed with this script
88*
89* Parameters:   Makernote_Tag - the element of an EXIF array containing the
90*                               makernote, as returned from get_EXIF_JPEG
91*               EXIF_Array - the entire EXIF array containing the
92*                            makernote, as returned from get_EXIF_JPEG, in
93*                            case more information is required for decoding
94*               filehnd - an open file handle for the file containing the
95*                         makernote - does not have to be positioned at the
96*                         start of the makernote
97*               Make_Field - The contents of the EXIF Make field, to aid
98*                            determining whether this script can decode
99*                            the makernote
100*
101*
102* Returns:      Makernote_Tag - the Makernote_Tag from the parameters, but
103*                               modified to contain the decoded information
104*               FALSE - If this script could not decode the makernote, or if
105*                       an error occured in decoding
106*
107******************************************************************************/
108
109function get_Minolta_Makernote( $Makernote_Tag, $EXIF_Array, $filehnd, $Make_Field )
110{
111
112        if ( ( stristr( $Make_Field, "Konica" ) === FALSE ) &&
113             ( stristr( $Make_Field, "Minolta" ) === FALSE ) )
114        {
115                // Not a Konica/Minolta Makernote - Cannot decode it
116                return False;
117        }
118
119        // There are several different headers for a Konica/Minolta Makernote
120        // Unfortunately only one type can be decoded (the one without a header)
121        // Check which header exists (if any)
122        if ( substr( $Makernote_Tag['Data'], 0, 3 ) == "MLY" )
123        {
124                // MLY Header - Can't Decode this
125                return $Makernote_Tag;
126        }
127        else if ( substr( $Makernote_Tag['Data'], 0, 2 ) == "KC" )
128        {
129                // KC Header - Can't Decode this
130                return $Makernote_Tag;
131        }
132        if ( substr( $Makernote_Tag['Data'], 0, 8 ) == "+M+M+M+M" )
133        {
134                // +M+M+M+M Header - Can't Decode this
135                return $Makernote_Tag;
136        }
137        else if ( substr( $Makernote_Tag['Data'], 0, 5 ) == "MINOL" )
138        {
139                // MINOL Header - Can't Decode this
140                return $Makernote_Tag;
141        }
142        else
143        {
144                // No Header - Decode the IFD
145
146                // Seek to the start of the IFD
147                fseek($filehnd, $Makernote_Tag['Tiff Offset'] + $Makernote_Tag['Offset'] );
148
149                // Read the IFD(s) into an array
150                $Makernote_Tag['Decoded Data'] = read_Multiple_IFDs( $filehnd, $Makernote_Tag['Tiff Offset'], $Makernote_Tag['ByteAlign'], "Olympus" );
151
152                // Save some information into the Tag element to aid interpretation
153                $Makernote_Tag['Decoded'] = TRUE;
154                $Makernote_Tag['Makernote Type'] = "Minolta";
155                $Makernote_Tag['Makernote Tags'] = "Olympus";
156
157
158                // Return the new tag
159                return $Makernote_Tag;
160
161        }
162
163
164        // Shouldn't get here
165        return False;
166}
167
168/******************************************************************************
169* End of Function:     get_Minolta_Makernote
170******************************************************************************/
171
172
173
174
175
176
177
178/******************************************************************************
179*
180* Function:     get_Minolta_Text_Value
181*
182* Description:  Provides a text value for any tag marked as special for makernotes
183*               that this script can decode. Returns false if this is not a makernote
184*               that can be processed with this script
185*
186* Parameters:   Exif_Tag - the element of an the Makernote array containing the
187*                          tag in question, as returned from get_Olympus_Makernote
188*               Tag_Definitions_Name - The name of the Tag Definitions group
189*                                      within the global array IFD_Tag_Definitions
190*
191*
192* Returns:      output - the text value for the tag
193*               FALSE - If this script could not decode the makernote, or if
194*                       an error occured in decoding
195*
196******************************************************************************/
197
198function get_Minolta_Text_Value( $Exif_Tag, $Tag_Definitions_Name )
199{
200        // Check that this Tag uses Olympus type tags - otherwise it cannot be processed here
201        if ( $Tag_Definitions_Name !== "Olympus" )
202        {
203                // Not Olympus Tags - cannot be processed here
204                return FALSE;
205        }
206
207
208        // Process the tag acording to it's tag number, to produce a text value
209
210        if ( ( $Exif_Tag['Tag Number'] == 0x0001 ) ||   // Minolta Camera Settings
211             ( $Exif_Tag['Tag Number'] == 0x0003 ) )
212        {
213
214                // Create the output string
215                $output_str = "";
216
217                // Cycle through each camera setting record which are 4 byte Longs
218
219                for ( $i = 1; $i*4 <= strlen( $Exif_Tag['Data'] ); $i++)
220                {
221               
222                        // Exract the current 4 byte Long value (Motorola byte alignment)
223                        $value = get_IFD_Data_Type( substr($Exif_Tag['Data'], ($i-1)*4, 4) , 4, "MM" );
224
225                        // Corrupt settings can cause huge values, which automatically get
226                        // put into floating point variables instead of integer variables
227                        // Hence Check that this is an integer, as problems will occur if it isn't
228                        if ( is_integer( $value ) )
229                        {
230                       
231                                // Check if the current setting number is in the Definitions array
232                                if ( array_key_exists( $i, ($GLOBALS[ "Minolta_Camera_Setting_Definitions" ]) ) === TRUE )
233                                {
234                                        // Setting is in definitions array
235
236                                        // Get some of the information from the settings definitions array
237                                        $tagname = $GLOBALS[ "Minolta_Camera_Setting_Definitions" ][ $i ][ 'Name' ];
238                                        $units = "";
239                                        if ( array_key_exists( 'Units', $GLOBALS[ "Minolta_Camera_Setting_Definitions" ][ $i ] ) )
240                                        {
241                                                $units = $GLOBALS[ "Minolta_Camera_Setting_Definitions" ][ $i ][ 'Units' ];
242                                        }
243                                        // Check what type of field the setting is, and process accordingly
244                                       
245                                        if ( $GLOBALS[ "Minolta_Camera_Setting_Definitions" ][ $i ]['Type'] == "Lookup" )
246                                        {
247                                                // This is a lookup table field
248
249                                                // Check if the value read is in the lookup table
250                                                if ( array_key_exists( $value, $GLOBALS[ "Minolta_Camera_Setting_Definitions" ][ $i ] ) )
251                                                {
252                                                        // Value is in the lookup table - Add it to the text
253                                                        $output_str .= $tagname . ": " . $GLOBALS[ "Minolta_Camera_Setting_Definitions" ][ $i ][ $value ] . "\n";
254                                                }
255                                                else
256                                                {
257                                                        // Value is Not in the lookup table
258                                                        // Add a message if the user has requested to see unknown tags
259                                                        if ( $GLOBALS['HIDE_UNKNOWN_TAGS'] == FALSE )
260                                                        {
261                                                                $output_str .= $tagname . ": Unknown Reserved Value $value\n";
262                                                        }
263
264                                                }
265                                        }
266                                        else if ( $GLOBALS[ "Minolta_Camera_Setting_Definitions" ][ $i ]['Type'] == "Numeric" )
267                                        {
268                                                // This is a numeric type add it as is to the output, with units
269                                                $output_str .= $tagname . ": $value $units\n";
270                                        }
271                                        else if ( $GLOBALS[ "Minolta_Camera_Setting_Definitions" ][ $i ]['Type'] == "Special" )
272                                        {
273                                                // This is a special setting, Process it according to the setting number
274                                                switch ( $i )
275                                                {
276                                                        case 9:         // Apex Film Speed Value
277                                                                $output_str .= $tagname . ": " . ($value/8-1) . " ( ISO " . ((pow(2,($value/8-1)))*3.125) . " )\n";
278                                                                break;
279                                                               
280                                                        case 10:        // Apex Shutter Speed Time Value
281                                                                $output_str .= $tagname . ": " . ($value/8-6);
282                                                                if ( $value == 8 )
283                                                                {
284                                                                        $output_str .=  " ( 30 seconds )\n";
285                                                                }
286                                                                else
287                                                                {
288                                                                        $output_str .=  " ( " . ( pow(2, (48-$value)/8 ) ) . " seconds )\n";
289                                                                }
290                                                                break;
291                                                               
292                                                        case 11:        // Apex Aperture Value
293                                                                $output_str .= $tagname . ": " . ($value/8-1) . " ( F Stop: " . (pow(2,( $value/16-0.5 ))) . " )\n";
294                                                                break;
295                                                               
296                                                        case 14:        // Exposure Compensation
297                                                                $output_str .= $tagname . ": " . ($value/3-2) . " $units\n";
298                                                                break;
299                                                               
300                                                        case 17:        // Interval Length
301                                                                $output_str .= $tagname . ": " . ($value+1) . " $units\n";
302                                                                break;
303                                                               
304                                                        case 19:        // Focal Length
305                                                                $output_str .= $tagname . ": " . ($value/256) . " $units\n";
306                                                                break;
307                                                               
308                                                        case 22:        // Date
309                                                                $output_str .= $tagname . ": " . sprintf( "%d/%d/%d",  ($value%256), floor(($value - floor($value/65536)*65536)/256 ), floor($value/65536) ) . " $units\n";
310                                                                break;
311                                                               
312                                                        case 23:        // Time
313                                                                $output_str .= $tagname . ": " . sprintf( "%2d:%02d:%02d", floor($value/65536), floor(($value - floor($value/65536)*65536)/256 ), ($value%256) ) . " $units\n";
314                                                                break;
315                                                               
316                                                        case 24:        // Max Aperture at this focal length
317                                                                $output_str .= $tagname . ": F" . (pow(2,($value/16-0.5))) ." $units\n";
318                                                                break;
319                                                               
320                                                        case 29:        // White Balance Red
321                                                        case 30:        // White Balance Green
322                                                        case 31:        // White Balance Blue
323                                                                $output_str .= $tagname . ": " . ($value/256) ." $units\n";
324                                                                break;
325                                                               
326                                                        case 32:        // Saturation
327                                                        case 33:        // Contrast
328                                                                $output_str .= $tagname . ": " . ($value-3) ." $units\n";
329                                                                break;
330                                                               
331                                                        case 36:        // Flash Compensation
332                                                                $output_str .= $tagname . ": " . (($value-6)/3) ." $units\n";
333                                                                break;
334                                                               
335                                                        case 42:        // Color Filter
336                                                                $output_str .= $tagname . ": " . ($value-3) ." $units\n";
337                                                                break;
338                                                               
339                                                        case 45:        // Apex Brightness Value
340                                                                $output_str .= $tagname . ": " . ($value/8-6) ." $units\n";
341                                                                break;
342                                                               
343                                                        default:        // Unknown Special Setting
344                                                                // If user has requested to see the unknown tags, then add the setting to the output
345                                                                if ( $GLOBALS['HIDE_UNKNOWN_TAGS'] == FALSE )
346                                                                {
347                                                                        $output_str .= "Unknown Special Tag: $tagname, Value: $value $units\n";
348                                                                }
349                                                                break;
350                                                }
351                                        }
352                                        else
353                                        {
354                                                // Unknown Setting Type
355                                                // If user has requested to see the unknown tags, then add the setting to the output
356                                                if ( $GLOBALS['HIDE_UNKNOWN_TAGS'] == FALSE )
357                                                {
358                                                        $output_str .= "Unknown Tag Type Tag $i, Value: " . $value . "\n";
359                                                }
360                                        }
361
362
363                                }
364                                else
365                                {
366                                        // Unknown Setting
367                                        // If user has requested to see the unknown tags, then add the setting to the output
368                                        if ( $GLOBALS['HIDE_UNKNOWN_TAGS'] == FALSE )
369                                        {
370                                                $output_str .= "Unknown Minolta Camera Setting Tag $i, Value: " . $value . "\n";
371                                        }
372                                }
373                        }
374
375                }
376               
377                // Return the text string
378                return $output_str;
379        }
380        else if ( ( $Exif_Tag['Tag Number'] == 0x0088 ) ||
381                  ( $Exif_Tag['Tag Number'] == 0x0081 ) )
382        {
383                // Konica/Minolta Thumbnail
384                return "Thumbnail";
385        }
386        else
387        {
388                return FALSE;
389        }
390
391}
392
393/******************************************************************************
394* End of Function:     get_Minolta_Text_Value
395******************************************************************************/
396
397
398
399
400
401
402
403/******************************************************************************
404* Global Variable:      Minolta_Camera_Setting_Definitions
405*
406* Contents:     This global variable provides definitions for the fields
407*               contained in the Konica/Minolta Camera Settings Makernote tag,
408*               indexed by their setting number.
409*
410******************************************************************************/
411
412$GLOBALS[ "Minolta_Camera_Setting_Definitions" ] = array(
413
4142 => array ( 'Name' => "Exposure Mode",
415                'Type' => "Lookup",
416                 0 => "P",
417                 1 => "A",
418                 2 => "S",
419                 3 => "M" ),
420
4213 => array (   'Name' => "Flash Mode",
422                'Type' => "Lookup",
423                0 => "Normal",
424                1 => "Red-eye reduction",
425                2 => "Rear flash sync",
426                3 => "Wireless" ),
427
4284 => array (   'Name' => "White Balance",
429                'Type' => "Lookup",
430                0 => "Auto",
431                1 => "Daylight",
432                2 => "Cloudy",
433                3 => "Tungsten",
434                5 => "Custom",
435                7 => "Fluorescent",
436                8 => "Fluorescent 2",
437                11 => "Custom 2",
438                12 => "Custom 3" ),
439
4405 => array (   'Name' => "Image Size",
441                'Type' => "Lookup",
442                0 => "2560 x 1920 (2048x1536 - DiMAGE 5 only)",
443                1 => "1600 x 1200",
444                2 => "1280 x 960",
445                3 => "640 x 480" ),
446
447
4486 => array (   'Name' => "Image Quality",
449                'Type' => "Lookup",
450                0 => "Raw",
451                1 => "Super Fine",
452                2 => "Fine",
453                3 => "Standard",
454                4 => "Economy",
455                5 => "Extra Fine" ),
456
4577 => array (   'Name' => "Shooting Mode",
458                'Type' => "Lookup",
459                0 => "Single",
460                1 => "Continuous",
461                2 => "Self-timer",
462                4 => "Bracketing",
463                5 => "Interval",
464                6 => "UHS Continuous",
465                7 => "HS Continuous" ),
466
467
4688 => array (   'Name' => "Metering Mode",
469                'Type' => "Lookup",
470                0 => "Multi-Segment",
471                1 => "Centre Weighted",
472                2 => "Spot" ),
473
474
4759 => array (   'Name' => "Apex Film Speed Value",
476                'Type' => "Special" ),
477
478// 09 FilmSpeed ,  APEX Film Speed Value ,  Speed value = x/8-1 , ISO= (2^(x/8-1))*3.125
479
480
48110 => array (   'Name' => "Apex Shutter Speed Time Value",
482                'Type' => "Special",
483                'Units' => "Seconds?" ),
484
485//  APEX Time Value ,   Time value = x/8-6 ,  ShutterSpeed = 2^( (48-x)/8 ), ! Due to rounding error x=8 should be displayed as 30 sec.
486
48711 => array (   'Name' => "Apex Aperture Value",
488                'Type' => "Special" ),
489
490// APEX Aperture Value   ApertureValue = x/8-1  , Aperture = 2^( x/16-0.5 )
491
492
49312 => array (   'Name' => "Macro Mode",
494                'Type' => "Lookup",
495                0 => "Off",
496                1 => "On" ),
497
49813 => array (   'Name' => "Digital Zoom",
499                'Type' => "Lookup",
500                0 => "Off",
501                1 => "Electronic magnification was used",
502                2 => "Digital zoom 2x" ),
503
504
50514 => array (   'Name' => "Exposure Compensation",
506                'Type' => "Special",
507                'Units' => "EV" ),
508
509// EV = x/3 -2  Exposure compensation in EV
510
511
51215 => array (   'Name' => "Bracket Step",
513                'Type' => "Lookup",
514                0 => "1/3 EV",
515                1 => "2/3 EV",
516                2 => "1 EV" ),
517
518
51917 => array (   'Name' => "Interval Length",
520                'Type' => "Special",
521                'Units' => "Min" ),
522
523// interval is x+1 min (used with interval mode)
524
525
52618 => array (   'Name' => "Interval Number",
527                'Type' => "Numeric",
528                'Units' => "frames" ),
529
53019 => array (   'Name' => "Focal Length",
531                'Type' => "Special",
532                'Units' => "mm" ),
533
534//   x / 256 is real focal length in mm  ,  x / 256 * 3.9333 is 35-mm equivalent
535
536
53720 => array (   'Name' => "Focus Distance",
538                'Type' => "Numeric",
539                'Units' => "mm  ( 0 = Infinity)" ),
540
541
54221 => array (   'Name' => "Flash Fired",
543                'Type' => "Lookup",
544                0 => "No",
545                1 => "Yes" ),
546
54722 => array (   'Name' => "Date",
548                'Type' => "Special"  ),
549
550// yyyymmdd ,  year = x/65536 , month = x/256-x/65536*256 , day = x%256
551
55223 => array (   'Name' => "Time",
553                'Type' => "Special"  ),
554
555// hhhhmmss , hour = x/65536 , minute = x/256-x/65536*256 , second = x%256
556
557
55824 => array (   'Name' => "Max Aperture at this focal length",
559                'Type' => "Special"  ),
560
561// Fno = 2^(x/16-0.5)
562
563
56427 => array (   'Name' => "File Number Memory",
565                'Type' => "Lookup",
566                0 => "Off",
567                1 => "On" ),
568
56928 => array (   'Name' => "Last File Number",
570                'Type' => "Numeric",
571                'Units' => "  ( 0 = File Number Memory is Off)" ),
572
573
57429 => array (   'Name' => "White Balance Red",
575                'Type' => "Special"  ),
576
577// x/256 - red white balance coefficient used for this picture
578
579
58030 => array (   'Name' => "White Balance Green",
581                'Type' => "Special"  ),
582
583// x/256 - green white balance coefficient used for this picture
584
58531 => array (   'Name' => "White Balance Blue",
586                'Type' => "Special"  ),
587
588// x/256 - blue white balance coefficient used for this picture
589
590
59132 => array (   'Name' => "Saturation",
592                'Type' => "Special"  ),
593
594//  x-3 = saturation
595
596
59733 => array (   'Name' => "Contrast",
598                'Type' => "Special"  ),
599
600// x-3 - contrast
601
602
60334 => array (   'Name' => "Sharpness",
604                'Type' => "Lookup",
605                0 => "Hard",
606                1 => "Normal",
607                2 => "Soft" ),
608
609
61035 => array (   'Name' => "Subject Program",
611                'Type' => "Lookup",
612                0 => "none",
613                1 => "portrait",
614                2 => "text",
615                3 => "night portrait",
616                4 => "sunset",
617                5 => "sports action" ),
618
619
62036 => array (   'Name' => "Flash Compensation",
621                'Type' => "Special",
622                'Units' => "EV"  ),
623
624//  (x-6)/3 = flash compensation in EV
625
626
62737 => array (   'Name' => "ISO Setting",
628                'Type' => "Lookup",
629                0 => "100",
630                1 => "200",
631                2 => "400",
632                3 => "800",
633                4 => "auto",
634                5 => "64" ),
635
636
63738 => array (   'Name' => "Camera Model",
638                'Type' => "Lookup",
639                0 => "DiMAGE 7",
640                1 => "DiMAGE 5",
641                2 => "DiMAGE S304",
642                3 => "DiMAGE S404",
643                4 => "DiMAGE 7i",
644                5 => "DiMAGE 7Hi",
645                6 => "DiMAGE A1",
646                7 => "DiMAGE S414" ),
647
648
64939 => array (   'Name' => "Interval Mode",
650                'Type' => "Lookup",
651                0 => "Still Image",
652                1 => "Time-lapse Movie" ),
653
654
65540 => array (   'Name' => "Folder Name",
656                'Type' => "Lookup",
657                0 => "Standard Form",
658                1 => "Data Form" ),
659
660
66141 => array (   'Name' => "Color Mode",
662                'Type' => "Lookup",
663                0 => "Natural Color",
664                1 => "Black & White",
665                2 => "Vivid Color",
666                3 => "Solarization",
667                4 => "Adobe RGB" ),
668
669
67042 => array (   'Name' => "Color Filter",
671                'Type' => "Special" ),
672
673// x-3 = color filter
674
675
67643 => array (   'Name' => "Black & White Filter",
677                'Type' => "Numeric" ),
678
679
680
68144 => array (   'Name' => "Internal Flash",
682                'Type' => "Lookup",
683                0 => "Not Fired",
684                1 => "Fired" ),
685
686
687
68845 => array (   'Name' => "Apex Brightness Value",
689                'Type' => "Special" ),
690
691// Brightness Value = x/8-6
692
693
694
695
69646 => array (   'Name' => "Spot Focus Point X Coordinate",
697                'Type' => "Numeric" ),
698
699
700
70147 => array (   'Name' => "Spot Focus Point Y Coordinate",
702                'Type' => "Numeric" ),
703
704
705
70648 => array (   'Name' => "Wide Focus Zone",
707                'Type' => "Lookup",
708                0 => "No Zone or AF Failed",
709                1 => "Center Zone (Horizontal Orientation)",
710                2 => "Center Zone (Vertical Orientation)",
711                3 => "Left Zone",
712                4 => "Right Zone" ),
713
714
71549 => array (   'Name' => "Focus Mode",
716                'Type' => "Lookup",
717                0 => "Auto Focus",
718                1 => "Manual Focus" ),
719
720
72150 => array (   'Name' => "Focus Area",
722                'Type' => "Lookup",
723                0 => "Wide Focus (normal)",
724                1 => "Spot Focus" ),
725
726
72751 => array (   'Name' => "DEC Switch Position",
728                'Type' => "Lookup",
729                0 => "Exposure",
730                1 => "Contrast",
731                2 => "Saturation",
732                3 => "Filter" ),
733
734
735
736);
737
738/******************************************************************************
739* End of Global Variable:     Minolta_Camera_Setting_Definitions
740******************************************************************************/
741
742
743
744
745?>
Note: See TracBrowser for help on using the repository browser.