Merge pull request #6997 from Entropy512/fix_demosaiced_dng
Fix regression with demosaiced DNGs caused by 831a9bbd
This commit is contained in:
commit
0bee94e4aa
@ -420,6 +420,16 @@ void transLineD1x(const float* const red, const float* const green, const float*
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool checkRawDataDimensions(const array2D<float> &rawData, const rtengine::RawImage &rawImage, int width, int height)
|
||||||
|
{
|
||||||
|
const int colors = (rawImage.getSensorType() == rtengine::ST_BAYER ||
|
||||||
|
rawImage.getSensorType() == rtengine::ST_FUJI_XTRANS ||
|
||||||
|
rawImage.get_colors() == 1)
|
||||||
|
? 1
|
||||||
|
: 3;
|
||||||
|
return rawData.getHeight() == height && rawData.getWidth() == colors * width;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -744,7 +754,7 @@ void RawImageSource::getWBMults(const ColorTemp &ctemp, const RAWParams &raw, st
|
|||||||
|
|
||||||
void RawImageSource::getImage(const ColorTemp &ctemp, int tran, Imagefloat* image, const PreviewProps &pp, const ToneCurveParams &hrp, const RAWParams &raw)
|
void RawImageSource::getImage(const ColorTemp &ctemp, int tran, Imagefloat* image, const PreviewProps &pp, const ToneCurveParams &hrp, const RAWParams &raw)
|
||||||
{
|
{
|
||||||
assert(rawData.getHeight() == H && rawData.getWidth() == W);
|
assert(checkRawDataDimensions(rawData, *ri, W, H));
|
||||||
|
|
||||||
MyMutex::MyLock lock(getImageMutex);
|
MyMutex::MyLock lock(getImageMutex);
|
||||||
|
|
||||||
@ -1763,7 +1773,7 @@ void RawImageSource::preprocess(const RAWParams &raw, const LensProfParams &lens
|
|||||||
|
|
||||||
void RawImageSource::demosaic(const RAWParams &raw, bool autoContrast, double &contrastThreshold, bool cache)
|
void RawImageSource::demosaic(const RAWParams &raw, bool autoContrast, double &contrastThreshold, bool cache)
|
||||||
{
|
{
|
||||||
assert(rawData.getHeight() == H && rawData.getWidth() == W);
|
assert(checkRawDataDimensions(rawData, *ri, W, H));
|
||||||
|
|
||||||
MyTime t1, t2;
|
MyTime t1, t2;
|
||||||
t1.set();
|
t1.set();
|
||||||
@ -3855,7 +3865,7 @@ void RawImageSource::hlRecovery(const std::string &method, float* red, float* gr
|
|||||||
|
|
||||||
void RawImageSource::getAutoExpHistogram(LUTu & histogram, int& histcompr)
|
void RawImageSource::getAutoExpHistogram(LUTu & histogram, int& histcompr)
|
||||||
{
|
{
|
||||||
assert(rawData.getHeight() == H && rawData.getWidth() == W);
|
assert(checkRawDataDimensions(rawData, *ri, W, H));
|
||||||
|
|
||||||
// BENCHFUN
|
// BENCHFUN
|
||||||
histcompr = 3;
|
histcompr = 3;
|
||||||
@ -7500,7 +7510,7 @@ void RawImageSource::getrgbloc(int begx, int begy, int yEn, int xEn, int cx, int
|
|||||||
|
|
||||||
void RawImageSource::getAutoWBMultipliersitc(bool extra, double & tempref, double & greenref, double & tempitc, double & greenitc, float &temp0, float &delta, int &bia, int &dread, int &kcam, int &nocam, float &studgood, float &minchrom, int &kmin, float &minhist, float &maxhist, int begx, int begy, int yEn, int xEn, int cx, int cy, int bf_h, int bf_w, double & rm, double & gm, double & bm, const WBParams & wbpar, const ColorManagementParams & cmp, const RAWParams & raw, const ToneCurveParams &hrp)
|
void RawImageSource::getAutoWBMultipliersitc(bool extra, double & tempref, double & greenref, double & tempitc, double & greenitc, float &temp0, float &delta, int &bia, int &dread, int &kcam, int &nocam, float &studgood, float &minchrom, int &kmin, float &minhist, float &maxhist, int begx, int begy, int yEn, int xEn, int cx, int cy, int bf_h, int bf_w, double & rm, double & gm, double & bm, const WBParams & wbpar, const ColorManagementParams & cmp, const RAWParams & raw, const ToneCurveParams &hrp)
|
||||||
{
|
{
|
||||||
assert(rawData.getHeight() == H && rawData.getWidth() == W);
|
assert(checkRawDataDimensions(rawData, *ri, W, H));
|
||||||
|
|
||||||
// BENCHFUN
|
// BENCHFUN
|
||||||
constexpr double clipHigh = 64000.0;
|
constexpr double clipHigh = 64000.0;
|
||||||
@ -7726,7 +7736,7 @@ void RawImageSource::getAutoWBMultipliersitc(bool extra, double & tempref, doubl
|
|||||||
|
|
||||||
void RawImageSource::getAutoWBMultipliers(double &rm, double &gm, double &bm)
|
void RawImageSource::getAutoWBMultipliers(double &rm, double &gm, double &bm)
|
||||||
{
|
{
|
||||||
assert(rawData.getHeight() == H && rawData.getWidth() == W);
|
assert(checkRawDataDimensions(rawData, *ri, W, H));
|
||||||
|
|
||||||
// BENCHFUN
|
// BENCHFUN
|
||||||
constexpr double clipHigh = 64000.0;
|
constexpr double clipHigh = 64000.0;
|
||||||
@ -7944,7 +7954,7 @@ void RawImageSource::getAutoWBMultipliers(double &rm, double &gm, double &bm)
|
|||||||
|
|
||||||
ColorTemp RawImageSource::getSpotWB(std::vector<Coord2D> &red, std::vector<Coord2D> &green, std::vector<Coord2D> &blue, int tran, double equal, StandardObserver observer)
|
ColorTemp RawImageSource::getSpotWB(std::vector<Coord2D> &red, std::vector<Coord2D> &green, std::vector<Coord2D> &blue, int tran, double equal, StandardObserver observer)
|
||||||
{
|
{
|
||||||
assert(rawData.getHeight() == H && rawData.getWidth() == W);
|
assert(checkRawDataDimensions(rawData, *ri, W, H));
|
||||||
|
|
||||||
int x;
|
int x;
|
||||||
int y;
|
int y;
|
||||||
@ -8284,7 +8294,7 @@ void RawImageSource::init()
|
|||||||
|
|
||||||
void RawImageSource::getRawValues(int x, int y, int rotate, int &R, int &G, int &B)
|
void RawImageSource::getRawValues(int x, int y, int rotate, int &R, int &G, int &B)
|
||||||
{
|
{
|
||||||
if (rawData.getWidth() != W || rawData.getHeight() != H || d1x) { // Nikon D1x has special sensor. We just skip it
|
if (!checkRawDataDimensions(rawData, *ri, W, H) || d1x) { // Nikon D1x has special sensor. We just skip it
|
||||||
R = G = B = 0;
|
R = G = B = 0;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -8332,7 +8342,7 @@ bool RawImageSource::isGainMapSupported() const
|
|||||||
|
|
||||||
void RawImageSource::applyDngGainMap(const float black[4], const std::vector<GainMap> &gainMaps)
|
void RawImageSource::applyDngGainMap(const float black[4], const std::vector<GainMap> &gainMaps)
|
||||||
{
|
{
|
||||||
assert(rawData.getHeight() == H && rawData.getWidth() == W);
|
assert(checkRawDataDimensions(rawData, *ri, W, H));
|
||||||
|
|
||||||
// now we can apply each gain map to raw_data
|
// now we can apply each gain map to raw_data
|
||||||
array2D<float> mvals[2][2];
|
array2D<float> mvals[2][2];
|
||||||
|
Loading…
x
Reference in New Issue
Block a user