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;
CameraConst::CameraConst()
CameraConst::CameraConst() : pdafOffset(0)
{
memset(dcraw_matrix, 0, sizeof(dcraw_matrix));
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;
parse_error:
@@ -345,6 +374,18 @@ CameraConst::get_dcrawMatrix()
return dcraw_matrix;
}
bool
CameraConst::has_pdafPattern()
{
return pdafPattern.size() > 0;
}
void
CameraConst::get_pdafPattern(std::vector<int> &pattern)
{
pattern = pdafPattern;
}
bool
CameraConst::has_rawCrop()
{

View File

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

View File

@@ -2235,7 +2235,11 @@ Camera constants:
"make_model": "Sony ILCE-6000",
"dcraw_matrix": [ 5991,-1456,-455,-4764,12135,2980,-707,1425,6701 ], // adobe dcp d65
"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
@@ -2251,6 +2255,18 @@ Camera constants:
"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
"make_model": "Sony ILCE-7R",
"dcraw_matrix": [ 4913,-541,-202,-6130,13513,2906,-1564,2151,7183 ],
@@ -2269,7 +2285,12 @@ Camera constants:
"make_model": "Sony ILCE-9",
"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
"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

View File

@@ -21,6 +21,7 @@
#include "pdaflinesfilter.h"
#include "settings.h"
#include <iostream>
#include "camconst.h"
namespace rtengine {
@@ -129,33 +130,13 @@ PDAFLinesFilter::PDAFLinesFilter(RawImage *ri):
{
gthresh_ = new PDAFGreenEqulibrateThreshold(W_, H_);
if (ri_->get_maker() == "Sony") {
if (ri_->get_model() == "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
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;
CameraConstantsStore* ccs = CameraConstantsStore::getInstance();
CameraConst *cc = ccs->get(ri_->get_maker().c_str(), ri_->get_model().c_str());
if (cc) {
cc->get_pdafPattern(pattern_);
if(!pattern_.empty()) {
offset_ = cc->get_pdafOffset();
}
}
}