Get pdaf data from camconst.json

This commit is contained in:
heckflosse
2018-03-09 20:18:37 +01:00
parent a6c86b2bcf
commit ba22027b2f
4 changed files with 79 additions and 32 deletions

View File

@@ -19,7 +19,7 @@ namespace rtengine
extern const Settings* settings; extern const Settings* settings;
CameraConst::CameraConst() CameraConst::CameraConst() : pdafOffset(0)
{ {
memset(dcraw_matrix, 0, sizeof(dcraw_matrix)); memset(dcraw_matrix, 0, sizeof(dcraw_matrix));
memset(raw_crop, 0, sizeof(raw_crop)); memset(raw_crop, 0, sizeof(raw_crop));
@@ -310,6 +310,35 @@ CameraConst::parseEntry(void *cJSON_, const char *make_model)
} }
} }
ji = cJSON_GetObjectItem(js, "pdafPattern");
if (ji) {
if (ji->type != cJSON_Array) {
fprintf(stderr, "\"pdafPattern\" must be an array\n");
goto parse_error;
}
for (ji = ji->child; ji != nullptr; ji = ji->next) {
if (ji->type != cJSON_Number) {
fprintf(stderr, "\"pdafPattern\" array must contain numbers\n");
goto parse_error;
}
cc->pdafPattern.push_back(ji->valueint);
}
}
ji = cJSON_GetObjectItem(js, "pdafOffset");
if (ji) {
if (ji->type != cJSON_Number) {
fprintf(stderr, "\"pdafOffset\" must contain a number\n");
goto parse_error;
}
cc->pdafOffset = ji->valueint;
}
return cc; return cc;
parse_error: parse_error:
@@ -345,6 +374,18 @@ CameraConst::get_dcrawMatrix()
return dcraw_matrix; return dcraw_matrix;
} }
bool
CameraConst::has_pdafPattern()
{
return pdafPattern.size() > 0;
}
void
CameraConst::get_pdafPattern(std::vector<int> &pattern)
{
pattern = pdafPattern;
}
bool bool
CameraConst::has_rawCrop() CameraConst::has_rawCrop()
{ {

View File

@@ -24,7 +24,8 @@ private:
int white_max; int white_max;
std::map<int, struct camera_const_levels> mLevels[2]; std::map<int, struct camera_const_levels> mLevels[2];
std::map<float, float> mApertureScaling; std::map<float, float> mApertureScaling;
std::vector<int> pdafPattern;
int pdafOffset;
CameraConst(); CameraConst();
static bool parseLevels(CameraConst *cc, int bw, void *ji); static bool parseLevels(CameraConst *cc, int bw, void *ji);
static bool parseApertureScaling(CameraConst *cc, void *ji); static bool parseApertureScaling(CameraConst *cc, void *ji);
@@ -33,8 +34,11 @@ private:
public: public:
static CameraConst *parseEntry(void *cJSON, const char *make_model); static CameraConst *parseEntry(void *cJSON, const char *make_model);
bool has_dcrawMatrix(void); bool has_dcrawMatrix(void);
bool has_pdafPattern(void);
void update_dcrawMatrix(const short *other); void update_dcrawMatrix(const short *other);
const short *get_dcrawMatrix(void); const short *get_dcrawMatrix(void);
void get_pdafPattern(std::vector<int> &pattern);
int get_pdafOffset() {return pdafOffset;}
bool has_rawCrop(void); bool has_rawCrop(void);
void get_rawCrop(int& left_margin, int& top_margin, int& width, int& height); void get_rawCrop(int& left_margin, int& top_margin, int& width, int& height);
bool has_rawMask(int idx); bool has_rawMask(int idx);

View File

@@ -2235,7 +2235,11 @@ Camera constants:
"make_model": "Sony ILCE-6000", "make_model": "Sony ILCE-6000",
"dcraw_matrix": [ 5991,-1456,-455,-4764,12135,2980,-707,1425,6701 ], // adobe dcp d65 "dcraw_matrix": [ 5991,-1456,-455,-4764,12135,2980,-707,1425,6701 ], // adobe dcp d65
"raw_crop": [ 0, 0, 6024, 4024 ], "raw_crop": [ 0, 0, 6024, 4024 ],
"ranges": { "black": 512, "white": 16300 } "ranges": { "black": 512, "white": 16300 },
// detected by hand, using the picture from https://www.dpreview.com/forums/thread/3923513
// P 11 P 23 P 17 P 17 P 17 P 23 P 11 P 17 P 17 P 17 P 23 P 11 P 23 P 11 P 17 P 23 P 11 P 17 P 17 P 23 P 17 P 11 P 17 P 17 P 17 P 23 P 17 P 11 P 17 P 17 P 23 P 11 P 17 P 11 P 23
"pdafPattern" : [ 0,12,36,54,72,90,114,126,144,162,180,204,216,240,252,270,294,306,324,342,366,384,396,414,432,450,474,492,504,522,540,564,576,594,606,630 ],
"pdafOffset" : 3
}, },
{ // Quality A { // Quality A
@@ -2251,6 +2255,18 @@ Camera constants:
"ranges": { "black": 512, "white": 16300 } "ranges": { "black": 512, "white": 16300 }
}, },
{ // Quality C, only pdaf data
"make_model": "Sony ILCE-7M3",
// A7III, from https://www.dpreview.com/forums/post/60843139
// in the original post:
// P 5 P 17 P 11 P 11 P 17 P 11 P 5 P 11 P 11 P 11 P 17 P 11 P 5 P 11 P 11 P 17 P 5 P 11 P 17 P 5 P 17 P 5 P 11 P 11 P 11 P 17 P 5 P 11 P 11 P 11 P 5 P 17 P 5 P 17 P 11
//
// rotated to match the start of the frame
// P 11 P 11 P 11 P 17 P 11 P 5 P 11 P 11 P 17 P 5 P 11 P 17 P 5 P 17 P 5 P 11 P 11 P 11 P 17 P 5 P 11 P 11 P 11 P 5 P 17 P 5 P 17 P 11 P 5 P 17 P 11 P 11 P 17 P 11 P 5
"pdafPattern" : [ 0,12,24,36,54,66,72,84,96,114,120,132,150,156,174,180,192,204,216,234,240,252,264,276,282,300,306,324,336,342,360,372,384,402,414,420],
"pdafOffset" : 9
},
{ // Quality A, correction for frame width { // Quality A, correction for frame width
"make_model": "Sony ILCE-7R", "make_model": "Sony ILCE-7R",
"dcraw_matrix": [ 4913,-541,-202,-6130,13513,2906,-1564,2151,7183 ], "dcraw_matrix": [ 4913,-541,-202,-6130,13513,2906,-1564,2151,7183 ],
@@ -2269,7 +2285,12 @@ Camera constants:
"make_model": "Sony ILCE-9", "make_model": "Sony ILCE-9",
"dcraw_matrix": [ 6389,-1703,-378,-4562,12265,2587,-670,1489,6550 ], // DNG_v9.12 D65 "dcraw_matrix": [ 6389,-1703,-378,-4562,12265,2587,-670,1489,6550 ], // DNG_v9.12 D65
"raw_crop": [ 8, 8, 6008, 4008 ], // full raw frame 6048x4024 Dcraw auto identify 6024x4024, jpeg 12,12,6000x4000 "raw_crop": [ 8, 8, 6008, 4008 ], // full raw frame 6048x4024 Dcraw auto identify 6024x4024, jpeg 12,12,6000x4000
"ranges": { "black": 512, "white": 16300 } "ranges": { "black": 512, "white": 16300 },
// the A9 is the same as the A7III, rotated of 1 position
// source: https://www.dpreview.com/forums/post/60857788
// P 11 P 11 P 11 P 17 P 11 P 5 P 11 P 11 P 17 P 5 P 11 P 17 P 5 P 17 P 5 P 11 P 11 P 11 P 17 P 5 P 11 P 11 P 11 P 5 P 17 P 5 P 17 P 11 P 5 P 17 P 11 P 11 P 17 P 11 P 5
"pdafPattern" : [ 0,12,24,36,54,66,72,84,96,114,120,132,150,156,174,180,192,204,216,234,240,252,264,276,282,300,306,324,336,342,360,372,384,402,414,420 ],
"pdafOffset" : -7
}, },
{ // Quality B, correction for frame width { // Quality B, correction for frame width

View File

@@ -21,6 +21,7 @@
#include "pdaflinesfilter.h" #include "pdaflinesfilter.h"
#include "settings.h" #include "settings.h"
#include <iostream> #include <iostream>
#include "camconst.h"
namespace rtengine { namespace rtengine {
@@ -128,34 +129,14 @@ PDAFLinesFilter::PDAFLinesFilter(RawImage *ri):
H_(ri->get_height()) H_(ri->get_height())
{ {
gthresh_ = new PDAFGreenEqulibrateThreshold(W_, H_); gthresh_ = new PDAFGreenEqulibrateThreshold(W_, H_);
if (ri_->get_maker() == "Sony") { CameraConstantsStore* ccs = CameraConstantsStore::getInstance();
if (ri_->get_model() == "ILCE-7M3") { CameraConst *cc = ccs->get(ri_->get_maker().c_str(), ri_->get_model().c_str());
// A7III, from https://www.dpreview.com/forums/post/60843139
// in the original post: if (cc) {
// P 5 P 17 P 11 P 11 P 17 P 11 P 5 P 11 P 11 P 11 P 17 P 11 P 5 P 11 P 11 P 17 P 5 P 11 P 17 P 5 P 17 P 5 P 11 P 11 P 11 P 17 P 5 P 11 P 11 P 11 P 5 P 17 P 5 P 17 P 11 cc->get_pdafPattern(pattern_);
// if(!pattern_.empty()) {
// rotated to match the start of the frame offset_ = cc->get_pdafOffset();
// P 11 P 11 P 11 P 17 P 11 P 5 P 11 P 11 P 17 P 5 P 11 P 17 P 5 P 17 P 5 P 11 P 11 P 11 P 17 P 5 P 11 P 11 P 11 P 5 P 17 P 5 P 17 P 11 P 5 P 17 P 11 P 11 P 17 P 11 P 5
pattern_ = {
0, 12, 24, 36, 54, 66, 72, 84, 96, 114, 120, 132, 150, 156, 174, 180, 192, 204, 216, 234, 240, 252, 264, 276, 282, 300, 306, 324, 336, 342, 360, 372, 384, 402, 414, 420
};
offset_ = 9;
} else if (ri_->get_model() == "ILCE-6000") {
// detected by hand, using the picture from https://www.dpreview.com/forums/thread/3923513
// P 11 P 23 P 17 P 17 P 17 P 23 P 11 P 17 P 17 P 17 P 23 P 11 P 23 P 11 P 17 P 23 P 11 P 17 P 17 P 23 P 17 P 11 P 17 P 17 P 17 P 23 P 17 P 11 P 17 P 17 P 23 P 11 P 17 P 11 P 23
pattern_ = {
0, 12, 36, 54, 72, 90, 114, 126, 144, 162, 180, 204, 216, 240, 252, 270, 294, 306, 324, 342, 366, 384, 396, 414, 432, 450, 474, 492, 504, 522, 540, 564, 576, 594, 606, 630
};
offset_ = 3;
} else if (ri_->get_model() == "ILCE-9") {
// the A9 is the same as the A7III, rotated of 1 position
// source: https://www.dpreview.com/forums/post/60857788
// P 11 P 11 P 11 P 17 P 11 P 5 P 11 P 11 P 17 P 5 P 11 P 17 P 5 P 17 P 5 P 11 P 11 P 11 P 17 P 5 P 11 P 11 P 11 P 5 P 17 P 5 P 17 P 11 P 5 P 17 P 11 P 11 P 17 P 11 P 5
pattern_ = {
0, 12, 24, 36, 54, 66, 72, 84, 96, 114, 120, 132, 150, 156, 174, 180, 192, 204, 216, 234, 240, 252, 264, 276, 282, 300, 306, 324, 336, 342, 360, 372, 384, 402, 414, 420
};
offset_ = -7;
} }
} }
} }