00001 #include <FCam/Dummy.h>
00002 #include <stdio.h>
00003
00004 int main(int argc, char **argv) {
00005
00006 FCam::Dummy::Sensor sensor;
00007
00008 FCam::Dummy::Shot shot;
00009 shot.testPattern = FCam::Dummy::CHECKERBOARD;
00010 shot.exposure = 5000;
00011 shot.gain = 1.0f;
00012 shot.image = FCam::Image(sensor.maxImageSize(), FCam::RAW);
00013 shot.histogram.enabled = true;
00014 shot.histogram.region = FCam::Rect(0,0,sensor.maxImageSize().width, sensor.maxImageSize().height);
00015 shot.sharpness.enabled = false;
00016
00017 sensor.capture(shot);
00018 FCam::Dummy::Frame frame = sensor.getFrame();
00019
00020 FCam::Event e;
00021 bool errors = false;
00022 if (FCam::getNextEvent(&e, FCam::Event::Error)) {
00023 do {
00024 if (e.type == FCam::Event::Error) {
00025 errors = true;
00026 printf("** FCam error [%d] %d at %s: %s\n", e.type, e.data, e.time.toString().c_str(), e.description.c_str());
00027 }
00028 } while (FCam::getNextEvent(&e, FCam::Event::Error));
00029 if (errors) {
00030 printf ("Error capturing a frame\n");
00031 return 1;
00032 }
00033 }
00034
00035 frame["lens.aperture"] = 1.8f;
00036 frame["testInt"] = 1;
00037 frame["testFloat"] = 3.14159;
00038 frame["testTime"] = FCam::Time::now();
00039 std::vector<std::string> testStrings;
00040 testStrings.push_back("string1");
00041 testStrings.push_back("string2");
00042 testStrings.push_back("string3");
00043 testStrings.push_back("string4");
00044 frame["testStrings"] = testStrings;
00045
00046
00047 std::string test1DNGName("testDNG_1.dng");
00048 std::string test1DumpName("testDump_1.tmp");
00049 std::string test2DNGName("testDNG_2.dng");
00050 std::string test2DumpName("testDump_2.tmp");
00051 std::string test2DumpThumbName("testDumpThumb_2.tmp");
00052
00053 FCAM_FRAME_DEBUG(frame);
00054
00055 printf("Saving test frame dump as %s\n", test1DumpName.c_str());
00056 FCam::saveDump(frame, test1DumpName);
00057
00058 printf("Saving test frame DNG as %s\n", test1DNGName.c_str());
00059
00060 FCam::saveDNG(frame, test1DNGName);
00061 if (FCam::getNextEvent(&e, FCam::Event::Error)) {
00062 do {
00063 if (e.type == FCam::Event::Error) {
00064 errors = true;
00065 printf("** FCam error [%d] %d at %s: %s\n", e.type, e.data, e.time.toString().c_str(), e.description.c_str());
00066 }
00067 } while(FCam::getNextEvent(&e, FCam::Event::Error));
00068 if (errors) {
00069 printf("Error saving DNG, exiting.\n");
00070 return 1;
00071 }
00072 }
00073
00074 printf("Loading back DNG\n");
00075 FCam::DNGFrame fLoaded = FCam::loadDNG(test1DNGName);
00076
00077 FCAM_FRAME_DEBUG(fLoaded);
00078
00079 if (!fLoaded.valid()) {
00080 printf("Error loading test DNG file. Listing all errors:\n");
00081
00082 while (FCam::getNextEvent(&e, FCam::Event::Error)) {
00083 printf("** FCam error [%d] %d at %s: %s\n", e.type, e.data, e.time.toString().c_str(), e.description.c_str());
00084 }
00085 return 1;
00086 }
00087
00088 printf("Saving loaded DNG as %s\n", test2DumpName.c_str());
00089 FCam::saveDump(fLoaded, test2DumpName);
00090 if (FCam::getNextEvent(&e, FCam::Event::Error)) {
00091 do {
00092 if (e.type == FCam::Event::Error) {
00093 errors = true;
00094 printf("** FCam error [%d] %d at %s: %s\n", e.type, e.data, e.time.toString().c_str(), e.description.c_str());
00095 }
00096 } while (FCam::getNextEvent(&e, FCam::Event::Error));
00097 if (errors) {
00098 printf ("Error saving JPEG.\n");
00099 return 1;
00100 }
00101 }
00102
00103 printf("Saving loaded DNG thumbnail as %s\n", test2DumpThumbName.c_str());
00104 FCam::saveDump(fLoaded.thumbnail(), test2DumpThumbName);
00105 if (FCam::getNextEvent(&e, FCam::Event::Error)) {
00106 do {
00107 if (e.type == FCam::Event::Error) {
00108 errors = true;
00109 printf("** FCam error [%d] %d at %s: %s\n", e.type, e.data, e.time.toString().c_str(), e.description.c_str());
00110 }
00111 } while (FCam::getNextEvent(&e, FCam::Event::Error));
00112 if (errors) {
00113 printf ("Error saving JPEG.\n");
00114 return 1;
00115 }
00116 }
00117
00118 printf("Saving loaded DNG as %s\n", test2DNGName.c_str());
00119 FCam::saveDNG(fLoaded, test2DNGName);
00120 if (FCam::getNextEvent(&e, FCam::Event::Error)) {
00121
00122 do {
00123 if (e.type == FCam::Event::Error) {
00124 errors = true;
00125 printf("** FCam error [%d] %d at %s: %s\n", e.type, e.data, e.time.toString().c_str(), e.description.c_str());
00126 }
00127 } while (FCam::getNextEvent(&e, FCam::Event::Error));
00128 if (errors) {
00129 printf ("Error saving DNG again.\n");
00130 return 1;
00131 }
00132 }
00133
00134 printf("Done with test. Compare two DNGs for equality.\n");
00135
00136 return 0;
00137 }