diff options
author | Hubert Figuiere <hub@figuiere.net> | 2007-12-19 23:20:11 -0500 |
---|---|---|
committer | Hubert Figuiere <hub@figuiere.net> | 2007-12-19 23:20:11 -0500 |
commit | a08e73a21d1d3980693f7bb0e53472544ce40f54 (patch) | |
tree | f58fd5e3110fcfd70cbe37ca9f2bf21ed2cc4f07 | |
parent | c354138f988cea7811d7e4f7fffccbec27f71fd1 (diff) |
* exempi/exempi.cpp, exempi/tests/test1.cpp,
exempi/tests/test1.xmp, exempi/xmp.h:
Add setter/getter for int32, int64, bool, float.
* exempi/xmpconsts.h, exempi/exempi.cpp: add ACR schema namespace
-rw-r--r-- | ChangeLog | 6 | ||||
-rw-r--r-- | NEWS | 6 | ||||
-rw-r--r-- | exempi/exempi.cpp | 147 | ||||
-rw-r--r-- | exempi/tests/test1.cpp | 44 | ||||
-rw-r--r-- | exempi/tests/test1.xmp | 77 | ||||
-rw-r--r-- | exempi/xmp.h | 46 | ||||
-rw-r--r-- | exempi/xmpconsts.h | 2 |
7 files changed, 321 insertions, 7 deletions
@@ -1,5 +1,11 @@ 2007-12-19 Hubert Figuiere <hub@figuiere.net> + * exempi/exempi.cpp, exempi/tests/test1.cpp, + exempi/tests/test1.xmp, exempi/xmp.h: + Add setter/getter for int32, int64, bool, float. + + * exempi/xmpconsts.h, exempi/exempi.cpp: add ACR schema namespace + * public/include/TXMPMeta.hpp, public/include/client-glue/TXMPMeta.incl_cpp, samples/source/XMPCoreCoverage.cpp, source/XMPFiles/FormatSupport/ReconcileTIFF.cpp: @@ -1,7 +1,9 @@ 1.99.6 -- New: xmp_get_property_date() / xmp_set_property_date() -- Test: refactor a the tests preparation +- New: API xmp_get_property_date() / xmp_set_property_date() with tests. +- New: API xmp_{get,set]_property_{float,bool,int32,int64}() with tests. +- New: API add ACR schema namespaces. +- Test: refactor a the tests preparation. - Test: add a test for multiple initializations. - Test: use valgrind is available. - Bug: fix configure to allow building on MacOS X. Closes bug #13596 diff --git a/exempi/exempi.cpp b/exempi/exempi.cpp index 3e49bb8..107a096 100644 --- a/exempi/exempi.cpp +++ b/exempi/exempi.cpp @@ -92,6 +92,8 @@ const char NS_DC[] = kXMP_NS_DC; const char NS_EXIF_AUX[] = kXMP_NS_EXIF_Aux; const char NS_CRS[] = kXMP_NS_CameraRaw; const char NS_LIGHTROOM[] = "http://ns.adobe.com/lightroom/1.0/"; +const char NS_CAMERA_RAW_SETTINGS[] = kXMP_NS_CameraRaw; +const char NS_CAMERA_RAW_SAVED_SETTINGS[] = "http://ns.adobe.com/camera-raw-saved-settings/1.0/"; const char NS_PHOTOSHOP[] = kXMP_NS_Photoshop; const char NS_IPTC4XMP[] = kXMP_NS_IPTCCore; const char NS_TPG[] = kXMP_NS_XMP_PagedFile; @@ -429,6 +431,70 @@ bool xmp_get_property_float(XmpPtr xmp, const char *schema, return ret; } +bool xmp_get_property_bool(XmpPtr xmp, const char *schema, + const char *name, bool * property, + uint32_t *propsBits) +{ + CHECK_PTR(xmp, false); + + bool ret = false; + try { + SXMPMeta *txmp = (SXMPMeta *)xmp; + XMP_OptionBits optionBits; + ret = txmp->GetProperty_Bool(schema, name, property, &optionBits); + if(propsBits) { + *propsBits = optionBits; + } + } + catch(const XMP_Error & e) { + set_error(e); + } + return ret; +} + +bool xmp_get_property_int32(XmpPtr xmp, const char *schema, + const char *name, int32_t * property, + uint32_t *propsBits) +{ + CHECK_PTR(xmp, false); + + bool ret = false; + try { + SXMPMeta *txmp = (SXMPMeta *)xmp; + XMP_OptionBits optionBits; + // the long converstion is needed until XMPCore is fixed it use proper types. + ret = txmp->GetProperty_Int(schema, name, property, &optionBits); + if(propsBits) { + *propsBits = optionBits; + } + } + catch(const XMP_Error & e) { + set_error(e); + } + return ret; +} + +bool xmp_get_property_int64(XmpPtr xmp, const char *schema, + const char *name, int64_t * property, + uint32_t *propsBits) +{ + CHECK_PTR(xmp, false); + + bool ret = false; + try { + SXMPMeta *txmp = (SXMPMeta *)xmp; + XMP_OptionBits optionBits; + ret = txmp->GetProperty_Int64(schema, name, property, &optionBits); + if(propsBits) { + *propsBits = optionBits; + } + } + catch(const XMP_Error & e) { + set_error(e); + } + return ret; +} + bool xmp_get_array_item(XmpPtr xmp, const char *schema, @@ -496,6 +562,87 @@ bool xmp_set_property_date(XmpPtr xmp, const char *schema, return ret; } +bool xmp_set_property_float(XmpPtr xmp, const char *schema, + const char *name, double value, + uint32_t optionBits) +{ + CHECK_PTR(xmp, false); + + bool ret = false; + SXMPMeta *txmp = (SXMPMeta *)xmp; + try { + txmp->SetProperty_Float(schema, name, value, optionBits); + ret = true; + } + catch(const XMP_Error & e) { + set_error(e); + } + catch(...) { + } + return ret; +} + + +bool xmp_set_property_bool(XmpPtr xmp, const char *schema, + const char *name, bool value, + uint32_t optionBits) +{ + CHECK_PTR(xmp, false); + + bool ret = false; + SXMPMeta *txmp = (SXMPMeta *)xmp; + try { + txmp->SetProperty_Bool(schema, name, value, optionBits); + ret = true; + } + catch(const XMP_Error & e) { + set_error(e); + } + catch(...) { + } + return ret; +} + + +bool xmp_set_property_int32(XmpPtr xmp, const char *schema, + const char *name, int32_t value, + uint32_t optionBits) +{ + CHECK_PTR(xmp, false); + + bool ret = false; + SXMPMeta *txmp = (SXMPMeta *)xmp; + try { + txmp->SetProperty_Int(schema, name, value, optionBits); + ret = true; + } + catch(const XMP_Error & e) { + set_error(e); + } + catch(...) { + } + return ret; +} + +bool xmp_set_property_int64(XmpPtr xmp, const char *schema, + const char *name, int64_t value, + uint32_t optionBits) +{ + CHECK_PTR(xmp, false); + + bool ret = false; + SXMPMeta *txmp = (SXMPMeta *)xmp; + try { + txmp->SetProperty_Int64(schema, name, value, optionBits); + ret = true; + } + catch(const XMP_Error & e) { + set_error(e); + } + catch(...) { + } + return ret; +} bool xmp_set_array_item(XmpPtr xmp, const char *schema, diff --git a/exempi/tests/test1.cpp b/exempi/tests/test1.cpp index 950af8a..642bcd4 100644 --- a/exempi/tests/test1.cpp +++ b/exempi/tests/test1.cpp @@ -278,6 +278,7 @@ void test_exempi() xmp_string_free(the_prop); + // testing date time get XmpDateTime the_dt; bool ret; BOOST_CHECK(ret = xmp_get_property_date(xmp, NS_EXIF, "DateTimeOriginal", @@ -286,6 +287,49 @@ void test_exempi() BOOST_CHECK(the_dt.minute == 20); BOOST_CHECK(the_dt.tzSign == XMP_TZ_WEST); + + // testing float get set + double float_value = 0.0; + BOOST_CHECK(xmp_get_property_float(xmp, NS_CAMERA_RAW_SETTINGS, + "SharpenRadius", &float_value, NULL)); + BOOST_CHECK_EQUAL(float_value, 1.0); + BOOST_CHECK(xmp_set_property_float(xmp, NS_CAMERA_RAW_SETTINGS, + "SharpenRadius", 2.5, 0)); + BOOST_CHECK(xmp_get_property_float(xmp, NS_CAMERA_RAW_SETTINGS, + "SharpenRadius", &float_value, NULL)); + BOOST_CHECK_EQUAL(float_value, 2.5); + + + // testing bool get set + bool bool_value = true; + BOOST_CHECK(xmp_get_property_bool(xmp, NS_CAMERA_RAW_SETTINGS, + "AlreadyApplied", &bool_value, NULL)); + BOOST_CHECK_EQUAL(bool_value, false); + BOOST_CHECK(xmp_set_property_bool(xmp, NS_CAMERA_RAW_SETTINGS, + "AlreadyApplied", true, NULL)); + BOOST_CHECK(xmp_get_property_bool(xmp, NS_CAMERA_RAW_SETTINGS, + "AlreadyApplied", &bool_value, NULL)); + BOOST_CHECK_EQUAL(bool_value, true); + + // testing int get set + int32_t value = 0; + BOOST_CHECK(xmp_get_property_int32(xmp, NS_EXIF, "MeteringMode", + &value, NULL)); + BOOST_CHECK_EQUAL(value, 5); + BOOST_CHECK(xmp_set_property_int32(xmp, NS_EXIF, "MeteringMode", + 10, NULL)); + int64_t valuelarge = 0; + BOOST_CHECK(xmp_get_property_int64(xmp, NS_EXIF, "MeteringMode", + &valuelarge, NULL)); + BOOST_CHECK_EQUAL(valuelarge, 10); + BOOST_CHECK(xmp_set_property_int64(xmp, NS_EXIF, "MeteringMode", + 32, NULL)); + + BOOST_CHECK(xmp_get_property_int32(xmp, NS_EXIF, "MeteringMode", + &value, NULL)); + BOOST_CHECK_EQUAL(value, 32); + + BOOST_CHECK(xmp_free(xmp)); diff --git a/exempi/tests/test1.xmp b/exempi/tests/test1.xmp index 3774193..527867d 100644 --- a/exempi/tests/test1.xmp +++ b/exempi/tests/test1.xmp @@ -79,7 +79,82 @@ </rdf:Description> <rdf:Description rdf:about="" xmlns:crs="http://ns.adobe.com/camera-raw-settings/1.0/"> - <crs:AlreadyApplied>False</crs:AlreadyApplied> + <crs:AlreadyApplied>False</crs:AlreadyApplied> + <crs:WhiteBalance>As Shot</crs:WhiteBalance> + <crs:Exposure>0.00</crs:Exposure> + <crs:Shadows>5</crs:Shadows> + <crs:Brightness>+50</crs:Brightness> + <crs:Contrast>+25</crs:Contrast> + <crs:Saturation>0</crs:Saturation> + <crs:Sharpness>25</crs:Sharpness> + <crs:LuminanceSmoothing>0</crs:LuminanceSmoothing> + <crs:ColorNoiseReduction>25</crs:ColorNoiseReduction> + <crs:ChromaticAberrationR>0</crs:ChromaticAberrationR> + <crs:ChromaticAberrationB>0</crs:ChromaticAberrationB> + <crs:VignetteAmount>0</crs:VignetteAmount> + <crs:ShadowTint>0</crs:ShadowTint> + <crs:RedHue>0</crs:RedHue> + <crs:RedSaturation>0</crs:RedSaturation> + <crs:GreenHue>0</crs:GreenHue> + <crs:GreenSaturation>0</crs:GreenSaturation> + <crs:BlueHue>0</crs:BlueHue> + <crs:BlueSaturation>0</crs:BlueSaturation> + <crs:FillLight>0</crs:FillLight> + <crs:Vibrance>0</crs:Vibrance> + <crs:HighlightRecovery>0</crs:HighlightRecovery> + <crs:Clarity>0</crs:Clarity> + <crs:Defringe>0</crs:Defringe> + <crs:HueAdjustmentRed>0</crs:HueAdjustmentRed> + <crs:HueAdjustmentOrange>0</crs:HueAdjustmentOrange> + <crs:HueAdjustmentYellow>0</crs:HueAdjustmentYellow> + <crs:HueAdjustmentGreen>0</crs:HueAdjustmentGreen> + <crs:HueAdjustmentAqua>0</crs:HueAdjustmentAqua> + <crs:HueAdjustmentBlue>0</crs:HueAdjustmentBlue> + <crs:HueAdjustmentPurple>0</crs:HueAdjustmentPurple> + <crs:HueAdjustmentMagenta>0</crs:HueAdjustmentMagenta> + <crs:SaturationAdjustmentRed>0</crs:SaturationAdjustmentRed> + <crs:SaturationAdjustmentOrange>0</crs:SaturationAdjustmentOrange> + <crs:SaturationAdjustmentYellow>0</crs:SaturationAdjustmentYellow> + <crs:SaturationAdjustmentGreen>0</crs:SaturationAdjustmentGreen> + <crs:SaturationAdjustmentAqua>0</crs:SaturationAdjustmentAqua> + <crs:SaturationAdjustmentBlue>0</crs:SaturationAdjustmentBlue> + <crs:SaturationAdjustmentPurple>0</crs:SaturationAdjustmentPurple> + <crs:SaturationAdjustmentMagenta>0</crs:SaturationAdjustmentMagenta> + <crs:LuminanceAdjustmentRed>0</crs:LuminanceAdjustmentRed> + <crs:LuminanceAdjustmentOrange>0</crs:LuminanceAdjustmentOrange> + <crs:LuminanceAdjustmentYellow>0</crs:LuminanceAdjustmentYellow> + <crs:LuminanceAdjustmentGreen>0</crs:LuminanceAdjustmentGreen> + <crs:LuminanceAdjustmentAqua>0</crs:LuminanceAdjustmentAqua> + <crs:LuminanceAdjustmentBlue>0</crs:LuminanceAdjustmentBlue> + <crs:LuminanceAdjustmentPurple>0</crs:LuminanceAdjustmentPurple> + <crs:LuminanceAdjustmentMagenta>0</crs:LuminanceAdjustmentMagenta> + <crs:SplitToningShadowHue>0</crs:SplitToningShadowHue> + <crs:SplitToningShadowSaturation>0</crs:SplitToningShadowSaturation> + <crs:SplitToningHighlightHue>0</crs:SplitToningHighlightHue> + <crs:SplitToningHighlightSaturation>0</crs:SplitToningHighlightSaturation> + <crs:SplitToningBalance>0</crs:SplitToningBalance> + <crs:ParametricShadows>0</crs:ParametricShadows> + <crs:ParametricDarks>0</crs:ParametricDarks> + <crs:ParametricLights>0</crs:ParametricLights> + <crs:ParametricHighlights>0</crs:ParametricHighlights> + <crs:ParametricShadowSplit>25</crs:ParametricShadowSplit> + <crs:ParametricMidtoneSplit>50</crs:ParametricMidtoneSplit> + <crs:ParametricHighlightSplit>75</crs:ParametricHighlightSplit> + <crs:SharpenRadius>+1.0</crs:SharpenRadius> + <crs:SharpenDetail>25</crs:SharpenDetail> + <crs:SharpenEdgeMasking>0</crs:SharpenEdgeMasking> + <crs:ConvertToGrayscale>False</crs:ConvertToGrayscale> + <crs:ToneCurveName>Medium Contrast</crs:ToneCurveName> + <crs:ToneCurve> + <rdf:Seq> + <rdf:li>0, 0</rdf:li> + <rdf:li>32, 22</rdf:li> + <rdf:li>64, 56</rdf:li> + <rdf:li>128, 128</rdf:li> + <rdf:li>192, 196</rdf:li> + <rdf:li>255, 255</rdf:li> + </rdf:Seq> + </crs:ToneCurve> </rdf:Description> <rdf:Description rdf:about="" xmlns:crx="http://ns.adobe.com/lightroom-settings-experimental/1.0/"> diff --git a/exempi/xmp.h b/exempi/xmp.h index 47edc4f..fd7de56 100644 --- a/exempi/xmp.h +++ b/exempi/xmp.h @@ -403,9 +403,9 @@ bool xmp_serialize(XmpPtr xmp, XmpStringPtr buffer, uint32_t options, * @return TRUE if success. */ bool xmp_serialize_and_format(XmpPtr xmp, XmpStringPtr buffer, - uint32_t options, - uint32_t padding, const char *newline, - const char *tab, int32_t indent); + uint32_t options, + uint32_t padding, const char *newline, + const char *tab, int32_t indent); /** Get an XMP property and it option bits from the XMP packet @@ -426,6 +426,15 @@ bool xmp_get_property_date(XmpPtr xmp, const char *schema, bool xmp_get_property_float(XmpPtr xmp, const char *schema, const char *name, double * property, uint32_t *propsBits); +bool xmp_get_property_bool(XmpPtr xmp, const char *schema, + const char *name, bool * property, + uint32_t *propsBits); +bool xmp_get_property_int32(XmpPtr xmp, const char *schema, + const char *name, int32_t * property, + uint32_t *propsBits); +bool xmp_get_property_int64(XmpPtr xmp, const char *schema, + const char *name, int64_t * property, + uint32_t *propsBits); /** Get an item frpm an array property * @param xmp the xmp meta @@ -440,7 +449,7 @@ bool xmp_get_array_item(XmpPtr xmp, const char *schema, const char *name, int32_t index, XmpStringPtr property, uint32_t *propsBits); -/** Set an XMP property from the XMP packet +/** Set an XMP property in the XMP packet * @param xmp the XMP packet * @param schema * @param name @@ -452,10 +461,39 @@ bool xmp_set_property(XmpPtr xmp, const char *schema, const char *name, const char *value, uint32_t optionBits); +/** Set a date XMP property in the XMP packet + * @param xmp the XMP packet + * @param schema + * @param name + * @param value the date-time struct + * @param optionBits + * @return false if failure + */ bool xmp_set_property_date(XmpPtr xmp, const char *schema, const char *name, const XmpDateTime *value, uint32_t optionBits); +/** Set a float XMP property in the XMP packet + * @param xmp the XMP packet + * @param schema + * @param name + * @param value the float value + * @param optionBits + * @return false if failure + */ +bool xmp_set_property_float(XmpPtr xmp, const char *schema, + const char *name, double value, + uint32_t optionBits); +bool xmp_set_property_bool(XmpPtr xmp, const char *schema, + const char *name, bool value, + uint32_t optionBits); +bool xmp_set_property_int32(XmpPtr xmp, const char *schema, + const char *name, int32_t value, + uint32_t optionBits); +bool xmp_set_property_int64(XmpPtr xmp, const char *schema, + const char *name, int64_t value, + uint32_t optionBits); + bool xmp_set_array_item(XmpPtr xmp, const char *schema, const char *name, int32_t index, const char *value, uint32_t optionBits); diff --git a/exempi/xmpconsts.h b/exempi/xmpconsts.h index 926e566..d9019da 100644 --- a/exempi/xmpconsts.h +++ b/exempi/xmpconsts.h @@ -54,6 +54,8 @@ extern const char NS_EXIF_AUX[]; extern const char NS_CRS[]; extern const char NS_LIGHTROOM[]; extern const char NS_PHOTOSHOP[]; +extern const char NS_CAMERA_RAW_SETTINGS[]; +extern const char NS_CAMERA_RAW_SAVED_SETTINGS[]; extern const char NS_IPTC4XMP[]; extern const char NS_TPG[]; extern const char NS_DIMENSIONS_TYPE[]; |