gpsTime_ = null,
userComment_ = null;
- function _validateISOSpeedRatings(v) {
- var valid = false;
- if (type_.isArray(v)) {
- for (var i = 0; i < v.length; i++) {
- var data = v[i]; // todo: uncomment when array conversion is implemented.
- //if (!type_.isNumber(data)) {
- // return false;
- //}
- }
- valid = true;
- }
- return valid;
- }
-
-
var exifInitDict = args.ExifInitDict;
if (exifInitDict) {
if (exifInitDict.uri === null) {
return isoSpeedRatings_;
},
set: function(v) {
- // todo: convert string array into unsigned short array
if (!type_.isUndefined(v)) {
- if (v === null || _validateISOSpeedRatings(v)) isoSpeedRatings_ = v;
+ if (v === null) {
+ isoSpeedRatings_ = null;
+ } else if (type_.isArray(v)) {
+ for (var i = 0; i < v.length; i++) {
+ v[i] = converter_.toUnsignedShort(v[i], false);
+ }
+ isoSpeedRatings_ = v;
+ }
}
},
enumerable: true
}
}
-void ExifInformation::updateAttributesInExifData(ExifData* exif_data) {
+PlatformResult ExifInformation::updateAttributesInExifData(ExifData* exif_data) {
LoggerD("Entered");
+
+ common::PlatformResult ret(common::ErrorCode::NO_ERROR);
+
AssertMsg(exif_data, "exif_data is NULL");
if (isSet(EXIF_INFORMATION_ATTRIBUTE_WIDTH)) {
LoggerD("Saving width: %d", getWidth());
- ExifTagSaver::saveToExif(getWidth(),
- EXIF_TAG_IMAGE_WIDTH, exif_data);
+ ret = ExifTagSaver::saveToExif(getWidth(),
+ EXIF_TAG_IMAGE_WIDTH, exif_data);
+ if (!ret) {
+ return ret;
+ }
}
if (isSet(EXIF_INFORMATION_ATTRIBUTE_HEIGHT)) {
LoggerD("Saving height: %d", getHeight());
- ExifTagSaver::saveToExif(getHeight(),
- EXIF_TAG_IMAGE_LENGTH, exif_data);
+ ret = ExifTagSaver::saveToExif(getHeight(),
+ EXIF_TAG_IMAGE_LENGTH, exif_data);
+ if (!ret) {
+ return ret;
+ }
}
if (isSet(EXIF_INFORMATION_ATTRIBUTE_DEVICE_MAKER)) {
LoggerD("Saving device maker: %s", getDeviceMaker().c_str());
- ExifTagSaver::saveToExif(getDeviceMaker(),
- EXIF_TAG_MAKE, exif_data);
+ ret = ExifTagSaver::saveToExif(getDeviceMaker(),
+ EXIF_TAG_MAKE, exif_data);
+ if (!ret) {
+ return ret;
+ }
}
if (isSet(EXIF_INFORMATION_ATTRIBUTE_ORIENTATION)) {
LoggerD("Saving orientation: %d", static_cast<int>(getOrientation()));
- ExifTagSaver::saveToExif(static_cast<long int>(getOrientation()),
- EXIF_TAG_ORIENTATION, exif_data);
+ ret = ExifTagSaver::saveToExif(static_cast<long int>(getOrientation()),
+ EXIF_TAG_ORIENTATION, exif_data);
+ if (!ret) {
+ return ret;
+ }
}
if (isSet(EXIF_INFORMATION_ATTRIBUTE_EXPOSURE_PROGRAM)) {
LoggerD("Saving exposure program: %d",
static_cast<int>(getExposureProgram()));
- ExifTagSaver::saveToExif(getExposureProgram(),
- EXIF_TAG_EXPOSURE_PROGRAM, exif_data);
+ ret = ExifTagSaver::saveToExif(getExposureProgram(),
+ EXIF_TAG_EXPOSURE_PROGRAM, exif_data);
+ if (!ret) {
+ return ret;
+ }
}
if (isSet(EXIF_INFORMATION_ATTRIBUTE_ISO_SPEED_RATINGS)) {
std::vector<long long int> iso_ratings = getIsoSpeedRatings();
LoggerD("Saving iso speed ratings count:%d", iso_ratings.size());
- ExifTagSaver::saveToExif(iso_ratings, EXIF_FORMAT_SHORT,
- EXIF_TAG_ISO_SPEED_RATINGS, exif_data);
+ ret = ExifTagSaver::saveToExif(iso_ratings, EXIF_FORMAT_SHORT,
+ EXIF_TAG_ISO_SPEED_RATINGS, exif_data);
+ if (!ret) {
+ return ret;
+ }
}
if (isSet(EXIF_INFORMATION_ATTRIBUTE_WHITE_BALANCE)) {
LoggerD("Saving white balance: %d",
static_cast<int>(getWhiteBalanceMode()));
- ExifTagSaver::saveToExif(getWhiteBalanceMode(),
- EXIF_TAG_WHITE_BALANCE, exif_data);
+ ret = ExifTagSaver::saveToExif(getWhiteBalanceMode(),
+ EXIF_TAG_WHITE_BALANCE, exif_data);
+ if (!ret) {
+ return ret;
+ }
}
if (isSet(EXIF_INFORMATION_ATTRIBUTE_DEVICE_MODEL)) {
LoggerD("Saving device model: %s", getDeviceModel().c_str());
- ExifTagSaver::saveToExif(getDeviceModel(),
- EXIF_TAG_MODEL, exif_data);
+ ret = ExifTagSaver::saveToExif(getDeviceModel(),
+ EXIF_TAG_MODEL, exif_data);
+ if (!ret) {
+ return ret;
+ }
}
if (isSet(EXIF_INFORMATION_ATTRIBUTE_ORIGINAL_TIME)) {
const time_t o_time = getOriginalTime();
LoggerD("Saving original time time_t:%d, format:%s",
static_cast<int>(o_time), o_time_str.c_str());
- ExifTagSaver::saveToExif(o_time_str,
- EXIF_TAG_DATE_TIME_ORIGINAL, exif_data);
+ ret = ExifTagSaver::saveToExif(o_time_str,
+ EXIF_TAG_DATE_TIME_ORIGINAL, exif_data);
+ if (!ret) {
+ return ret;
+ }
}
if (isSet(EXIF_INFORMATION_ATTRIBUTE_EXPOSURE_TIME)) {
Rational exposure_time = getExposureTime();
exposure_time.toString().c_str(),
exposure_time.toExposureTimeString().c_str());
- ExifTagSaver::saveToExif(exposure_time,
- EXIF_TAG_EXPOSURE_TIME, exif_data);
+ ret = ExifTagSaver::saveToExif(exposure_time,
+ EXIF_TAG_EXPOSURE_TIME, exif_data);
+ if (!ret) {
+ return ret;
+ }
}
}
if (isSet(EXIF_INFORMATION_ATTRIBUTE_FNUMBER)) {
auto f_number = getFNumber();
LoggerD("Saving f-number: %f (%s)", f_number.toDouble(),
f_number.toString().c_str());
- ExifTagSaver::saveToExif(f_number,
- EXIF_TAG_FNUMBER, exif_data);
+ ret = ExifTagSaver::saveToExif(f_number,
+ EXIF_TAG_FNUMBER, exif_data);
+ if (!ret) {
+ return ret;
+ }
}
if (isSet(EXIF_INFORMATION_ATTRIBUTE_FLASH)) {
LoggerD("Saving flash: %s", getFlash() ? "ON" : "OFF");
- ExifTagSaver::saveToExif(getFlash(),
- EXIF_TAG_FLASH, exif_data);
+ ret = ExifTagSaver::saveToExif(getFlash(),
+ EXIF_TAG_FLASH, exif_data);
+ if (!ret) {
+ return ret;
+ }
}
if (isSet(EXIF_INFORMATION_ATTRIBUTE_FOCAL_LENGTH)) {
auto f_length = getFocalLength();
LoggerD("Saving focal length:%f (%s)", f_length.toDouble(),
f_length.toString().c_str());
- ExifTagSaver::saveToExif(f_length,
- EXIF_TAG_FOCAL_LENGTH, exif_data);
+ ret = ExifTagSaver::saveToExif(f_length,
+ EXIF_TAG_FOCAL_LENGTH, exif_data);
+ if (!ret) {
+ return ret;
+ }
}
if (isSet(EXIF_INFORMATION_ATTRIBUTE_GPS_LOCATION)) {
LoggerD("Saving gps location");
- ExifTagSaver::saveGpsLocationToExif(m_gps_location, exif_data);
+ ret = ExifTagSaver::saveGpsLocationToExif(m_gps_location, exif_data);
+ if (!ret) {
+ return ret;
+ }
}
if (isSet(EXIF_INFORMATION_ATTRIBUTE_GPS_ALTITUDE)) {
LoggerD("Saving gps altitude:%f (%s)", m_gps_altitude.toDouble(),
m_gps_altitude.toString().c_str());
- ExifTagSaver::saveToExif(m_gps_altitude,
- static_cast<ExifTag>(EXIF_TAG_GPS_ALTITUDE), exif_data);
+ ret = ExifTagSaver::saveToExif(m_gps_altitude,
+ static_cast<ExifTag>(EXIF_TAG_GPS_ALTITUDE), exif_data);
+ if (!ret) {
+ return ret;
+ }
}
if (isSet(EXIF_INFORMATION_ATTRIBUTE_GPS_ALTITUDE_REF)) {
// Exif spec:
std::vector<long long int> value = {
static_cast<long long int>(m_gps_altitude_ref)
};
- ExifTagSaver::saveToExif(value, EXIF_FORMAT_BYTE,
- static_cast<ExifTag>(EXIF_TAG_GPS_ALTITUDE_REF), exif_data);
+ ret = ExifTagSaver::saveToExif(value, EXIF_FORMAT_BYTE,
+ static_cast<ExifTag>(EXIF_TAG_GPS_ALTITUDE_REF), exif_data);
+ if (!ret) {
+ return ret;
+ }
}
if (isSet(EXIF_INFORMATION_ATTRIBUTE_GPS_PROCESSING_METHOD)) {
LoggerD("Saving gps processing method: [%s] type:%s",
getGpsProcessingMethod();
LoggerD("joined: [%s]", joined.c_str());
- ExifTagSaver::saveToExif(joined,
- static_cast<ExifTag>(EXIF_TAG_GPS_PROCESSING_METHOD), exif_data,
- EXIF_FORMAT_UNDEFINED, false);
+ ret = ExifTagSaver::saveToExif(joined,
+ static_cast<ExifTag>(EXIF_TAG_GPS_PROCESSING_METHOD), exif_data,
+ EXIF_FORMAT_UNDEFINED, false);
+ if (!ret) {
+ return ret;
+ }
}
if (isSet(EXIF_INFORMATION_ATTRIBUTE_GPS_TIME)) {
const time_t gps_time = getGpsTime();
ExifUtil::timeTToExifGpsDateStamp(gps_time);
LoggerD("Saving gps time stamp time_t: %d", static_cast<int>(gps_time));
- ExifTagSaver::saveToExif(gps_time_vec,
- static_cast<ExifTag>(EXIF_TAG_GPS_TIME_STAMP), exif_data);
+ ret = ExifTagSaver::saveToExif(gps_time_vec,
+ static_cast<ExifTag>(EXIF_TAG_GPS_TIME_STAMP), exif_data);
+ if (!ret) {
+ return ret;
+ }
LoggerD("Saving gps date stamp: %s", gps_date_str.c_str());
- ExifTagSaver::saveToExif(gps_date_str,
- static_cast<ExifTag>(EXIF_TAG_GPS_DATE_STAMP), exif_data,
- EXIF_FORMAT_ASCII, false);
+ ret = ExifTagSaver::saveToExif(gps_date_str,
+ static_cast<ExifTag>(EXIF_TAG_GPS_DATE_STAMP), exif_data,
+ EXIF_FORMAT_ASCII, false);
+ if (!ret) {
+ return ret;
+ }
}
if (isSet(EXIF_INFORMATION_ATTRIBUTE_USER_COMMENT)) {
LoggerD("Saving user comment: %s (type:%s)", getUserComment().c_str(),
const std::string& joined = getUserCommentType() + getUserComment();
LoggerD("joined: [%s]", joined.c_str());
- ExifTagSaver::saveToExif(joined,
- EXIF_TAG_USER_COMMENT, exif_data, EXIF_FORMAT_UNDEFINED, false);
+ ret = ExifTagSaver::saveToExif(joined,
+ EXIF_TAG_USER_COMMENT, exif_data, EXIF_FORMAT_UNDEFINED, false);
+ if (!ret) {
+ return ret;
+ }
}
+
+ return ret;
}
PlatformResult ExifInformation::saveToFile(const std::string& file_path) {
// Remove attributes that have been nulled
removeNulledAttributesFromExifData(exif_data);
}
- updateAttributesInExifData(exif_data);
+ result = updateAttributesInExifData(exif_data);
+ if (!result) {
+ exif_data_unref(exif_data);
+ return result;
+ }
LoggerD("Using JpegFile to save new Exif in: [%s]", file_path.c_str());
if (exif_data_is_new) {
private:
void removeNulledAttributesFromExifData(ExifData* exif_data);
- void updateAttributesInExifData(ExifData* exif_data);
+ common::PlatformResult updateAttributesInExifData(ExifData* exif_data);
std::string m_uri;
unsigned long m_width;
JsonValue result = JsonValue(JsonObject());
PlatformResult status(ErrorCode::NO_ERROR);
- // TODO(r.galka) it can be done on JS side
const std::string &file_path = ExifUtil::convertUriToPath(uri);
LoggerD("file_path = %s", file_path.c_str());
ExifInformationPtr exifInfo(new ExifInformation(args));
const std::string& uri = exifInfo->getUri();
- // TODO(r.galka) it can be done on JS side
const std::string& path = ExifUtil::convertUriToPath(uri);
status = exifInfo->saveToFile(path);
auto get = [=](const std::shared_ptr<JsonValue> &response) -> void {
PlatformResult status(ErrorCode::NO_ERROR);
- // TODO(r.galka) it can be done on JS side
const std::string &file_path = ExifUtil::convertUriToPath(uri);
JsonValue result = JsonValue(JsonObject());
JsonObject &result_obj = result.get<JsonObject>();
exif_content_remove_entry(exif_entry->parent, exif_entry);
}
-void ExifTagSaver::saveToExif(long int value, ExifTag tag,
- ExifData* exif_data) {
+common::PlatformResult ExifTagSaver::saveToExif(long int value, ExifTag tag,
+ ExifData* exif_data) {
LoggerD("Entered");
+
ExifEntry* entry = prepareEntry(exif_data, tag);
if (!entry) {
- // TODO return PlatformResult and handle error
LoggerE("Exif entry is null");
- return;
+ return common::PlatformResult(common::ErrorCode::UNKNOWN_ERR, "Exif entry is null");
}
ExifByteOrder order = exif_data_get_byte_order(exif_data);
}
default: {
LoggerE("Error: wrong format: %d \n", entry->format);
+ return common::PlatformResult(common::ErrorCode::UNKNOWN_ERR, "Wrong format");
}
}
+ return common::PlatformResult(common::ErrorCode::NO_ERROR);
}
-void ExifTagSaver::saveToExif(const std::string& value, ExifTag tag,
- ExifData* exif_data, ExifFormat format,
- bool add_zero_character) {
+common::PlatformResult ExifTagSaver::saveToExif(const std::string& value, ExifTag tag,
+ ExifData* exif_data, ExifFormat format,
+ bool add_zero_character) {
LoggerD("Entered");
ExifEntry* entry = prepareEntry(exif_data, tag);
if (!entry) {
- // TODO return PlatformResult and handle error
LoggerE("Exif entry is null");
- return;
+ return common::PlatformResult(common::ErrorCode::UNKNOWN_ERR, "Exif entry is null");
}
if (!value.empty()) {
entry->data = static_cast<unsigned char*>(malloc(entry->size));
if (entry->data == nullptr) {
LoggerE("Function malloc returned nullptr");
- return;
+ return common::PlatformResult(common::ErrorCode::UNKNOWN_ERR, "Function malloc returned nullptr");
}
memcpy(entry->data, value.c_str(), value.length());
entry->data[value.length()] = '\0';
}
}
+ return common::PlatformResult(common::ErrorCode::NO_ERROR);
}
-void ExifTagSaver::saveToExif(const Rational& value, ExifTag tag,
- ExifData* exif_data) {
+common::PlatformResult ExifTagSaver::saveToExif(const Rational& value, ExifTag tag,
+ ExifData* exif_data) {
LoggerD("Entered");
ExifEntry* entry = prepareEntry(exif_data, tag);
if (!entry) {
- // TODO return PlatformResult and handle error
LoggerE("Exif entry is null");
- return;
+ return common::PlatformResult(common::ErrorCode::UNKNOWN_ERR, "Exif entry is null");
}
entry->format = EXIF_FORMAT_RATIONAL;
entry->data = static_cast<unsigned char*>(malloc(entry->size));
if (entry->data == nullptr) {
LoggerE("Function malloc returned nullptr");
- return;
+ return common::PlatformResult(common::ErrorCode::UNKNOWN_ERR, "Function malloc returned nullptr");
}
memset(entry->data, 0, entry->size);
}
r.numerator = value.nominator;
r.denominator = value.denominator;
exif_set_rational(entry->data, order, r);
+
+ return common::PlatformResult(common::ErrorCode::NO_ERROR);
}
-void ExifTagSaver::saveToExif(const Rationals& value, ExifTag tag,
+common::PlatformResult ExifTagSaver::saveToExif(const Rationals& value, ExifTag tag,
ExifData* exif_data) {
LoggerD("Entered");
ExifEntry* entry = prepareEntry(exif_data, tag);
if (!entry) {
- // TODO return PlatformResult and handle error
LoggerE("Exif entry is null");
- return;
+ return common::PlatformResult(common::ErrorCode::UNKNOWN_ERR, "Exif entry is null");
}
ExifByteOrder order = exif_data_get_byte_order(exif_data);
entry->format = EXIF_FORMAT_RATIONAL;
entry->data = static_cast<unsigned char*>(malloc(entry->size));
if (entry->data == nullptr) {
LoggerE("Function malloc returned nullptr");
- return;
+ return common::PlatformResult(common::ErrorCode::UNKNOWN_ERR, "Function malloc returned nullptr");
}
memset(entry->data, 0, entry->size);
}
r.denominator = value[i].denominator;
exif_set_rational(entry->data + i * ExifTypeInfo::RationalSize, order, r);
}
+
+ return common::PlatformResult(common::ErrorCode::NO_ERROR);
}
-void ExifTagSaver::saveToExif(std::vector<long long int>& value,
- ExifFormat store_as,
- ExifTag tag, ExifData* exif_data) {
+common::PlatformResult ExifTagSaver::saveToExif(std::vector<long long int>& value,
+ ExifFormat store_as,
+ ExifTag tag, ExifData* exif_data) {
LoggerD("Entered");
ExifEntry* entry = prepareEntry(exif_data, tag);
if (!entry) {
- // TODO return PlatformResult and handle error
LoggerE("Exif entry is null");
- return;
+ return common::PlatformResult(common::ErrorCode::UNKNOWN_ERR, "Exif entry is null");
}
const ExifByteOrder order = exif_data_get_byte_order(exif_data);
break;
default:
LoggerE("output ExifFormat: %d is not supported!", store_as);
- return;
+ return common::PlatformResult(common::ErrorCode::UNKNOWN_ERR, "ExifFormat is not supported!");
}
entry->format = store_as;
entry->data = static_cast<unsigned char*>(malloc(entry->size));
if (entry->data == nullptr) {
LoggerE("Function malloc returned nullptr");
- return;
+ return common::PlatformResult(common::ErrorCode::UNKNOWN_ERR, "Function malloc returned nullptr");
}
memset(entry->data, 0, entry->size);
}
LoggerD("entry after save:");
ExifUtil::printExifEntryInfo(entry, exif_data);
+
+ return common::PlatformResult(common::ErrorCode::NO_ERROR);
}
-void ExifTagSaver::saveGpsLocationToExif(const ExifGPSLocation& gps_info,
- ExifData* exif_data) {
+common::PlatformResult ExifTagSaver::saveGpsLocationToExif(const ExifGPSLocation& gps_info,
+ ExifData* exif_data) {
+ common::PlatformResult ret(common::ErrorCode::NO_ERROR);
+
LoggerD("Entered");
if (gps_info.isSet(EXIF_GPS_LOCATION_ATTRIBUTE_LATITUDE)) {
auto latitude = gps_info.getLatitude();
LoggerD("Saving latitude: %s", latitude.toDebugString().c_str());
- saveToExif(latitude.toRationalsVector(),
- static_cast<ExifTag>(EXIF_TAG_GPS_LATITUDE), exif_data);
+ ret = saveToExif(latitude.toRationalsVector(),
+ static_cast<ExifTag>(EXIF_TAG_GPS_LATITUDE), exif_data);
+ if (!ret) {
+ return ret;
+ }
}
if (gps_info.isSet(EXIF_GPS_LOCATION_ATTRIBUTE_LATITUDE_REF)) {
std::string lat_ref =
(gps_info.getLatitudeRef() == GPS_LOCATION_NORTH) ? "N" : "S";
LoggerD("Saving latitude ref: %s", lat_ref.c_str());
- saveToExif(lat_ref, static_cast<ExifTag>(EXIF_TAG_GPS_LATITUDE_REF),
- exif_data, EXIF_FORMAT_ASCII, false);
+ ret = saveToExif(lat_ref, static_cast<ExifTag>(EXIF_TAG_GPS_LATITUDE_REF),
+ exif_data, EXIF_FORMAT_ASCII, false);
+ if (!ret) {
+ return ret;
+ }
}
if (gps_info.isSet(EXIF_GPS_LOCATION_ATTRIBUTE_LONGITUDE)) {
auto longitude = gps_info.getLongitude();
LoggerD("Saving longitude: %s", longitude.toDebugString().c_str());
- saveToExif(longitude.toRationalsVector(),
- static_cast<ExifTag>(EXIF_TAG_GPS_LONGITUDE), exif_data);
+ ret = saveToExif(longitude.toRationalsVector(),
+ static_cast<ExifTag>(EXIF_TAG_GPS_LONGITUDE), exif_data);
+ if (!ret) {
+ return ret;
+ }
}
if (gps_info.isSet(EXIF_GPS_LOCATION_ATTRIBUTE_LONGITUDE_REF)) {
std::string long_ref =
(gps_info.getLongitudeRef() == GPS_LOCATION_WEST) ? "W" : "E";
LoggerD("Saving longitude ref: %s", long_ref.c_str());
- saveToExif(long_ref, static_cast<ExifTag>(EXIF_TAG_GPS_LONGITUDE_REF),
- exif_data, EXIF_FORMAT_ASCII, false);
+ ret = saveToExif(long_ref, static_cast<ExifTag>(EXIF_TAG_GPS_LONGITUDE_REF),
+ exif_data, EXIF_FORMAT_ASCII, false);
+ if (!ret) {
+ return ret;
+ }
}
+
+ return ret;
}
ExifEntry* ExifTagSaver::prepareEntry(ExifData* exif_data, ExifTag tag) {
common::PlatformResult ExifTagSaver::deduceIfdSection(ExifTag tag, ExifIfd* exif_ifd) {
LoggerD("Entered");
- // TODO EXIF_TAG_* and EXIF_TAG_GPS_* are sharing same values,
- // they shouldn't be used in one switch statement.
switch (static_cast<unsigned int>(tag)) {
// Tags in IFD_0 Section
common::PlatformResult ExifTagSaver::deduceDataFormat(ExifTag tag, ExifFormat* exif_format) {
LoggerD("Entered");
- // TODO EXIF_TAG_* and EXIF_TAG_GPS_* are sharing same values,
- // they shouldn't be used in one switch statement.
switch (static_cast<unsigned int>(tag)) {
// Tags with byte type:
public:
static void removeExifEntryWithTag(const ExifTag tag, ExifData* exif_data);
- static void saveToExif(long int value, ExifTag tag, ExifData* exif_data);
- static void saveToExif(const std::string& value, ExifTag tag,
+ static common::PlatformResult saveToExif(long int value, ExifTag tag, ExifData* exif_data);
+ static common::PlatformResult saveToExif(const std::string& value, ExifTag tag,
ExifData* exif_data, ExifFormat format = EXIF_FORMAT_ASCII,
bool add_zero_character = true);
- static void saveToExif(const Rational& value, ExifTag tag,
+ static common::PlatformResult saveToExif(const Rational& value, ExifTag tag,
ExifData* exif_data);
- static void saveToExif(const Rationals& value, ExifTag tag,
+ static common::PlatformResult saveToExif(const Rationals& value, ExifTag tag,
ExifData* exif_data);
- static void saveToExif(std::vector<long long int>& value, ExifFormat store_as,
+ static common::PlatformResult saveToExif(std::vector<long long int>& value, ExifFormat store_as,
ExifTag tag, ExifData* exif_data);
- static void saveGpsLocationToExif(const ExifGPSLocation& gps_info,
+ static common::PlatformResult saveGpsLocationToExif(const ExifGPSLocation& gps_info,
ExifData* exif_data);
private:
PlatformResult GetExifInfo::LoadFromURI(const std::string& uri,
JsonValue* result) {
LoggerD("Entered");
- // TODO(r.galka) it can be done on JS side
const std::string& file_path = ExifUtil::convertUriToPath(uri);
ExifData* ed = exif_data_new_from_file(file_path.c_str());
if (!ed) {
}
if (JPEG_MARKER_APP1 == cur_marker) {
- // TODO(Unknown): verify this
- // -4 --> 0xFF(1 byte)+Marker Number(1 byte)+Data size(2 bytes))
- // const unsigned int exif_data_size = section_length - 4;
-
const unsigned int exif_data_size = total_section_len + 2;
section->exif_data = exif_data_new_from_data(section_begin,
exif_data_size);
return _nullableGeneric(_toUnsignedLongLong, nullable, val);
};
+function _toShort(val) {
+ return ((_toLong(val) + 32768) & 0xFFFF) - 32768;
+}
+
+Converter.prototype.toShort = function(val, nullable) {
+ return _nullableGeneric(_toShort, nullable, val);
+};
+
+function _toUnsignedShort(val) {
+ return (Math.abs(_toLong(val)) & 0xFFFF);
+}
+
+Converter.prototype.toUnsignedShort = function(val, nullable) {
+ return _nullableGeneric(_toUnsignedShort, nullable, val);
+};
+
function _toByte(val) {
return ((_toLong(val) + 128) & 0xFF) - 128;
}