exif_oxide/implementations/
mod.rs

1//! Implementation module for exif-oxide
2//!
3//! This module contains manual implementations of ExifTool's conversion functions.
4//! All implementations are direct translations from ExifTool source code.
5
6pub mod canon;
7pub mod nikon;
8pub mod print_conv;
9pub mod sony;
10pub mod value_conv;
11
12use crate::registry;
13
14/// Register all implemented PrintConv and ValueConv functions
15///
16/// This function should be called during library initialization to populate
17/// the conversion registry with available implementations.
18pub fn register_all_conversions() {
19    // Register PrintConv functions
20    registry::register_print_conv("orientation_print_conv", print_conv::orientation_print_conv);
21    registry::register_print_conv(
22        "resolutionunit_print_conv",
23        print_conv::resolutionunit_print_conv,
24    );
25    registry::register_print_conv(
26        "ycbcrpositioning_print_conv",
27        print_conv::ycbcrpositioning_print_conv,
28    );
29    registry::register_print_conv("gpsaltitude_print_conv", print_conv::gpsaltitude_print_conv);
30    registry::register_print_conv(
31        "gpsaltituderef_print_conv",
32        print_conv::gpsaltituderef_print_conv,
33    );
34    registry::register_print_conv(
35        "gpslatituderef_print_conv",
36        print_conv::gpslatituderef_print_conv,
37    );
38    registry::register_print_conv(
39        "gpslongituderef_print_conv",
40        print_conv::gpslongituderef_print_conv,
41    );
42
43    // Register new Milestone 7 PrintConv implementations
44    registry::register_print_conv("flash_print_conv", print_conv::flash_print_conv);
45    registry::register_print_conv("colorspace_print_conv", print_conv::colorspace_print_conv);
46    registry::register_print_conv(
47        "whitebalance_print_conv",
48        print_conv::whitebalance_print_conv,
49    );
50    registry::register_print_conv(
51        "meteringmode_print_conv",
52        print_conv::meteringmode_print_conv,
53    );
54    registry::register_print_conv(
55        "exposureprogram_print_conv",
56        print_conv::exposureprogram_print_conv,
57    );
58
59    // Register Milestone 8b camera setting PrintConv implementations
60    registry::register_print_conv("fnumber_print_conv", print_conv::fnumber_print_conv);
61    registry::register_print_conv(
62        "exposuretime_print_conv",
63        print_conv::exposuretime_print_conv,
64    );
65    registry::register_print_conv("focallength_print_conv", print_conv::focallength_print_conv);
66    registry::register_print_conv("lensinfo_print_conv", print_conv::lensinfo_print_conv);
67    registry::register_print_conv("iso_print_conv", print_conv::iso_print_conv);
68
69    // Composite tag PrintConv functions
70    registry::register_print_conv(
71        "composite_gps_gpsaltitude_print_conv",
72        print_conv::composite_gps_gpsaltitude_print_conv,
73    );
74
75    // GPS coordinate ValueConv functions - convert to unsigned decimal degrees
76    // Sign handling happens in Composite tags that combine coordinate + ref
77    registry::register_value_conv(
78        "gpslatitude_value_conv",
79        value_conv::gps_coordinate_value_conv,
80    );
81    registry::register_value_conv(
82        "gpslongitude_value_conv",
83        value_conv::gps_coordinate_value_conv,
84    );
85    registry::register_value_conv(
86        "gpsdestlatitude_value_conv",
87        value_conv::gps_coordinate_value_conv,
88    );
89    registry::register_value_conv(
90        "gpsdestlongitude_value_conv",
91        value_conv::gps_coordinate_value_conv,
92    );
93    registry::register_value_conv(
94        "gpstimestamp_value_conv",
95        value_conv::gpstimestamp_value_conv,
96    );
97    registry::register_value_conv(
98        "gpsdatestamp_value_conv",
99        value_conv::gpsdatestamp_value_conv,
100    );
101    registry::register_value_conv(
102        "whitebalance_value_conv",
103        value_conv::whitebalance_value_conv,
104    );
105
106    // APEX ValueConv functions (for APEX values when we identify the tags)
107    registry::register_value_conv(
108        "apex_shutter_speed_value_conv",
109        value_conv::apex_shutter_speed_value_conv,
110    );
111    registry::register_value_conv(
112        "apex_aperture_value_conv",
113        value_conv::apex_aperture_value_conv,
114    );
115    registry::register_value_conv(
116        "apex_exposure_compensation_value_conv",
117        value_conv::apex_exposure_compensation_value_conv,
118    );
119    registry::register_value_conv("fnumber_value_conv", value_conv::fnumber_value_conv);
120    registry::register_value_conv(
121        "exposuretime_value_conv",
122        value_conv::exposuretime_value_conv,
123    );
124    registry::register_value_conv("focallength_value_conv", value_conv::focallength_value_conv);
125}