38#ifdef RS_CAMERAS_XML_PATH
39 if (
static const char* set_camfile = RS_CAMERAS_XML_PATH;
40 stat(set_camfile, &statbuf)) {
41 fprintf(stderr,
"WARNING: Couldn't find cameras.xml in '%s'\n",
48 const std::string self(argv0);
52 const std::size_t lastslash = self.find_last_of(R
"(/\)");
53 const std::string bindir(self.substr(0, lastslash));
55 std::string found_camfile(bindir +
56 "/../share/darktable/rawspeed/cameras.xml");
58 if (stat(found_camfile.c_str(), &statbuf)) {
60 fprintf(stderr,
"WARNING: Couldn't find cameras.xml in '%s'\n",
61 found_camfile.c_str());
63 fprintf(stderr,
"WARNING: Couldn't find cameras.xml in '%s'\n",
64 found_camfile.c_str());
66 bindir +
"/../Resources/share/darktable/rawspeed/cameras.xml";
67 if (stat(found_camfile.c_str(), &statbuf)) {
68 fprintf(stderr,
"WARNING: Couldn't find cameras.xml in '%s'\n",
69 found_camfile.c_str());
74#ifdef RAWSPEED_STANDALONE_BUILD
76 found_camfile = std::string(RAWSPEED_SOURCE_DIR
"/data/cameras.xml");
79 if (stat(found_camfile.c_str(), &statbuf)) {
81 fprintf(stderr,
"ERROR: Couldn't find cameras.xml in '%s'\n",
82 found_camfile.c_str());
85 fprintf(stderr,
"WARNING: Couldn't find cameras.xml in '%s'\n",
86 found_camfile.c_str());
88 bindir +
"/../Resources/share/darktable/rawspeed/cameras.xml";
89 if (stat(found_camfile.c_str(), &statbuf)) {
90 fprintf(stderr,
"ERROR: Couldn't find cameras.xml in '%s'\n",
91 found_camfile.c_str());
112using rawspeed::identify::find_cameras_xml;
115int main(
int argc_,
char* argv_[]) {
118 if (argv.size() != 2) {
119 fprintf(stderr,
"Usage: darktable-rs-identify <file>\n");
123 const std::string camfile = find_cameras_xml(argv(0));
124 if (camfile.empty()) {
131 std::unique_ptr<const CameraMetaData> meta;
134 meta = std::make_unique<CameraMetaData>(camfile.c_str());
136 meta = std::make_unique<CameraMetaData>();
140 fprintf(stderr,
"ERROR: Couldn't get a CameraMetaData instance\n");
144 fprintf(stderr,
"Loading file: \"%s\"\n", argv(1));
155 fprintf(stderr,
"ERROR: Couldn't get a RawDecoder instance\n");
159 d->applyCrop =
false;
160 d->failOnUnknown =
true;
164 d->decodeMetaData(meta.get());
166 fprintf(stdout,
"make: %s\n", r->
metadata.
make.c_str());
170 fprintf(stdout,
"canonical_model: %s\n",
172 fprintf(stdout,
"canonical_alias: %s\n",
175 d->checkSupport(meta.get());
177 d->decodeMetaData(meta.get());
180 for (
const auto errors = r->
getErrors();
const auto& error : errors)
181 fprintf(stderr,
"WARNING: [rawspeed] %s\n", error.c_str());
183 fprintf(stdout,
"blackLevel: %d\n", r->
blackLevel);
185 fprintf(stdout,
"whitePoint: ");
187 fprintf(stdout,
"unknown");
190 fprintf(stdout,
"\n");
192 fprintf(stdout,
"blackLevelSeparate: ");
194 fprintf(stdout,
"none");
199 blackLevelSeparate1D && blackLevelSeparate1D->size() != 0) {
200 for (
auto l : *blackLevelSeparate1D)
201 fprintf(stdout,
" %d", l);
204 fprintf(stdout,
"\n");
206 fprintf(stdout,
"wbCoeffs:");
208 fprintf(stdout,
" (none)");
213 fprintf(stdout,
"\n");
215 fprintf(stdout,
"isCFA: %d\n", r->
isCFA);
217 fprintf(stdout,
"filters: %u (0x%x)\n", filters, filters);
219 fprintf(stdout,
"bpp: %u\n", bpp);
221 fprintf(stdout,
"cpp: %u\n", cpp);
222 fprintf(stdout,
"dataType: %u\n",
static_cast<unsigned>(r->
getDataType()));
226 fprintf(stdout,
"dimUncropped: %dx%d\n", dimUncropped.
x, dimUncropped.
y);
230 fprintf(stdout,
"dimCropped: %dx%d\n", dimCropped.
x, dimCropped.
y);
234 fprintf(stdout,
"cropOffset: %dx%d\n", cropTL.
x, cropTL.
y);
241#pragma omp parallel for default(none) firstprivate(dimUncropped, raw, bpp) \
242 schedule(static) reduction(+ : sum)
244 for (
int y = 0;
y < dimUncropped.
y; ++
y) {
246 (*raw)->getByteDataAsUncroppedArray2DRef();
247 for (
unsigned x = 0;
x < bpp * dimUncropped.
x; ++
x)
248 sum +=
static_cast<double>(img(
y,
x));
250 fprintf(stdout,
"Image byte sum: %lf\n", sum);
251 fprintf(stdout,
"Image byte avg: %lf\n",
252 sum /
static_cast<double>(dimUncropped.
y * dimUncropped.
x * bpp));
258#pragma omp parallel for default(none) firstprivate(dimUncropped, raw, cpp) \
259 schedule(static) reduction(+ : sum)
261 for (
int y = 0;
y < dimUncropped.
y; ++
y) {
263 (*raw)->getF32DataAsUncroppedArray2DRef();
264 for (
unsigned x = 0;
x < cpp * dimUncropped.
x; ++
x)
265 sum +=
static_cast<double>(img(
y,
x));
268 fprintf(stdout,
"Image float sum: %lf\n", sum);
269 fprintf(stdout,
"Image float avg: %lf\n",
270 sum /
static_cast<double>(dimUncropped.
y * dimUncropped.
x));
275#pragma omp parallel for default(none) firstprivate(dimUncropped, raw, cpp) \
276 schedule(static) reduction(+ : sum)
278 for (
int y = 0;
y < dimUncropped.
y; ++
y) {
280 (*raw)->getU16DataAsUncroppedArray2DRef();
281 for (
unsigned x = 0;
x < cpp * dimUncropped.
x; ++
x)
282 sum +=
static_cast<double>(img(
y,
x));
285 fprintf(stdout,
"Image uint16_t sum: %lf\n", sum);
286 fprintf(stdout,
"Image uint16_t avg: %lf\n",
287 sum /
static_cast<double>(dimUncropped.
y * dimUncropped.
x));
290 fprintf(stderr,
"ERROR: [rawspeed] %s\n", e.what());
uint32_t getDcrawFilter() const
std::vector< std::string > && getErrors() REQUIRES(!mutex)
std::pair< std::unique_ptr< std::vector< uint8_t, DefaultInitAllocatorAdaptor< uint8_t, AlignedAllocator< uint8_t, 16 > > > >, Buffer > readFile() const
rawspeed::RawImageType getDataType() const
uint32_t RAWSPEED_READONLY getCpp() const
Optional< Array2DRef< int > > blackLevelSeparate
iPoint2D RAWSPEED_READONLY getCropOffset() const
iPoint2D RAWSPEED_READONLY getUncroppedDim() const
Optional< int > whitePoint
uint32_t RAWSPEED_READONLY getBpp() const
virtual std::unique_ptr< RawDecoder > getDecoder(const CameraMetaData *meta=nullptr)
std::string find_cameras_xml(const char *argv0)
constexpr RAWSPEED_READNONE Ttgt implicit_cast(Tsrc value)
Array1DRef(T *data_, int numElts_) -> Array1DRef< T >
constexpr RAWSPEED_READNONE Ttgt implicit_cast(Tsrc value)