summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHubert Figuiere <hub@figuiere.net>2007-12-19 23:20:11 -0500
committerHubert Figuiere <hub@figuiere.net>2007-12-19 23:20:11 -0500
commita08e73a21d1d3980693f7bb0e53472544ce40f54 (patch)
treef58fd5e3110fcfd70cbe37ca9f2bf21ed2cc4f07
parentc354138f988cea7811d7e4f7fffccbec27f71fd1 (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--ChangeLog6
-rw-r--r--NEWS6
-rw-r--r--exempi/exempi.cpp147
-rw-r--r--exempi/tests/test1.cpp44
-rw-r--r--exempi/tests/test1.xmp77
-rw-r--r--exempi/xmp.h46
-rw-r--r--exempi/xmpconsts.h2
7 files changed, 321 insertions, 7 deletions
diff --git a/ChangeLog b/ChangeLog
index fa28387..b757764 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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:
diff --git a/NEWS b/NEWS
index 178eb5e..be5ca06 100644
--- a/NEWS
+++ b/NEWS
@@ -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[];