Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
CyanogenMod DateTime Exif fix for "1970:01:01 02:00:00"
/**
* This is a fix for a bug in CyanogenMod (I think) that causes the DateTime Exif tag
* in photos taken with the camera to be set to "1970:01:01 02:00:00" while the corect
* date is stored in DateTimeOriginal. This causes problems for photo manipulation programs
* like Digikam.
*
* The fix consists in overriding the DateTime tag with the content of DateTimeOriginal if
* the DateTime tag is equal to "1970:01:01 02:00:00".
*
* Compile with: g++ -o cyanogenmod-exif-fix cyanogenmod-exif-fix.cpp -l exiv2
*
* The exiv2 library is required in order to compile and run the program. Most likely
* it is in your distribution repositories.
*
* The files to be 'fixed' are to be provided via command line arguments.
*
* Please note the fix will happen in-place, so make a backup first.
*/
#include <iostream>
#include <exiv2/exiv2.hpp>
using namespace std;
using namespace Exiv2;
int main(int argc, char ** argv) {
std::string wrongDate("1970:01:01 02:00:00");
ExifKey dateTimeOriginalKey("Exif.Image.DateTimeOriginal");
ExifKey dateTimeKey("Exif.Image.DateTime");
for(int i = 1; i < argc; ++i) {
Image::AutoPtr image = ImageFactory::open(argv[i]);
image->readMetadata();
ExifData & exif = image->exifData();
ExifData::iterator it = exif.findKey(dateTimeKey);
// If the image contains the DateTime tag and it is incorrect
if(it != exif.end() && it->toString() == wrongDate) {
ExifData::iterator sit = exif.findKey(dateTimeOriginalKey);
// If the image contains the DateTimeOriginal tag
if(sit != exif.end()) {
// Override DateTime with DateTimeOriginal
(* it) = sit->toString();
image->writeMetadata();
cout << "Fixed: " << argv[i] << "\n";
} else {
cout << "Not fixed: " << argv[i] << "\n";
}
}
}
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.