23#include "rawspeedconfig.h"
112 virtual void anchor()
const;
122 void poisonPadding();
123 void unpoisonPadding();
129 getU16DataAsCroppedArray2DRef() noexcept;
130 [[nodiscard]]
Array2DRef<
float> getF32DataAsUncroppedArray2DRef() noexcept;
132 getF32DataAsCroppedArray2DRef() noexcept;
136 getByteDataAsUncroppedArray2DRef() noexcept;
140 [[nodiscard]]
iPoint2D RAWSPEED_READONLY getUncroppedDim() const;
141 [[nodiscard]]
iPoint2D RAWSPEED_READONLY getCropOffset() const;
153 void createBadPixelMap();
221 void scaleValues_SSE2(
int start_y,
int end_y);
225 void doLookup(
int start_y,
int end_y)
override;
242 [[noreturn]]
void doLookup(
int start_y,
int end_y)
override;
257 explicit RawImage(std::shared_ptr<RawImageData> p) :
p_(std::move(p)) {}
262 std::shared_ptr<RawImageData>
p_;
268 return RawImage(std::make_shared<RawImageDataU16>());
270 return RawImage(std::make_shared<RawImageDataFloat>());
273 __builtin_unreachable();
280 return RawImage(std::make_shared<RawImageDataU16>(
dim, componentsPerPixel));
283 std::make_shared<RawImageDataFloat>(
dim, componentsPerPixel));
286 __builtin_unreachable();
292 "Attempting to access floating-point buffer as uint16_t.");
293 assert(!
data.empty() &&
"Data not yet allocated.");
294#pragma GCC diagnostic push
295#pragma GCC diagnostic ignored "-Wpragmas"
296#pragma GCC diagnostic ignored "-Wunknown-warning-option"
297#pragma GCC diagnostic ignored "-Wunsafe-buffer-usage"
300#pragma GCC diagnostic pop
312 "Attempting to access integer buffer as float.");
313 assert(!
data.empty() &&
"Data not yet allocated.");
314#pragma GCC diagnostic push
315#pragma GCC diagnostic ignored "-Wpragmas"
316#pragma GCC diagnostic ignored "-Wunknown-warning-option"
317#pragma GCC diagnostic ignored "-Wunsafe-buffer-usage"
320#pragma GCC diagnostic pop
337 __builtin_unreachable();
347 auto* dest =
reinterpret_cast<uint16_t*
>(dst);
348 if (
table ==
nullptr) {
357 uint32_t pix = base + ((delta * (r & 2047) + 1024) >> 12);
358 *random = 15700 * (r & 65535) + (r >> 16);
362 *dest =
table->tables[value];
378 bool uncorrectedRawValues_)
383 (*mRaw)->setTable(
curve,
true);
389 (*mRaw)->setTable(
curve,
false);
391 (*mRaw)->setTable(
nullptr);
iPoint2D dim(rawspeed::implicit_cast< int >(ceil(sqSide *sqARatio)), rawspeed::implicit_cast< int >(ceil(sqSide/sqARatio)))
assert(dim.area() >=area)
RawImage(RawImageData *p)=delete
static RawImage create(RawImageType type=RawImageType::UINT16)
RawImageCurveGuard()=delete
const std::vector< uint16_t > & curve
const bool uncorrectedRawValues
RawImageCurveGuard(RawImageCurveGuard &&) noexcept=delete
RawImageCurveGuard(const RawImageCurveGuard &)=delete
void doLookup(int start_y, int end_y) override
void calculateBlackAreas() override
void fixBadPixel(uint32_t x, uint32_t y, int component=0) override
void setWithLookUp(uint16_t value, std::byte *dst, uint32_t *random) override
void scaleBlackWhite() override
void scaleValues(int start_y, int end_y) override
void fixBadPixels() REQUIRES(!mBadPixelMutex)
rawspeed::RawImageType getDataType() const
std::array< int, 4 > blackLevelSeparateStorage
uint32_t RAWSPEED_READONLY getCpp() const
virtual ~RawImageData()=default
Optional< Array2DRef< int > > blackLevelSeparate
CroppedArray2DRef< float > getF32DataAsCroppedArray2DRef() noexcept
friend class RawImageWorker
std::vector< uint32_t > mBadPixelPositions GUARDED_BY(mBadPixelMutex)
void transferBadPixelsToMap() REQUIRES(!mBadPixelMutex)
virtual void setWithLookUp(uint16_t value, std::byte *dst, uint32_t *random)=0
Optional< int > whitePoint
virtual void fixBadPixel(uint32_t x, uint32_t y, int component=0)=0
Array2DRef< std::byte > getByteDataAsUncroppedArray2DRef() noexcept
virtual void scaleValues(int start_y, int end_y)=0
virtual void anchor() const
Array2DRef< float > getF32DataAsUncroppedArray2DRef() noexcept
void setTable(const std::vector< uint16_t > &table_, bool dither)
virtual void doLookup(int start_y, int end_y)=0
void fixBadPixelsThread(int start_y, int end_y)
std::vector< BlackArea > blackAreas
Array2DRef< uint16_t > getU16DataAsUncroppedArray2DRef() noexcept
uint32_t RAWSPEED_READONLY getBpp() const
std::vector< uint8_t, AlignedAllocator< uint8_t, 16 > > mBadPixelMap
void startWorker(RawImageWorker::RawImageWorkerTask task, bool cropped)
CroppedArray2DRef< uint16_t > getU16DataAsCroppedArray2DRef() noexcept
virtual void calculateBlackAreas()=0
std::unique_ptr< TableLookUp > table
virtual void scaleBlackWhite()=0
uint32_t mBadPixelMapPitch
std::vector< uint8_t, DefaultInitAllocatorAdaptor< uint8_t, AlignedAllocator< uint8_t, 16 > > > data
void scaleBlackWhite() override
void scaleValues_plain(int start_y, int end_y)
void calculateBlackAreas() override
void scaleValues(int start_y, int end_y) override
void doLookup(int start_y, int end_y) override
void fixBadPixel(uint32_t x, uint32_t y, int component=0) override
void setWithLookUp(uint16_t value, std::byte *dst, uint32_t *random) override
RawImage(RawImageData *p)=delete
RawImage(std::shared_ptr< RawImageData > p)
std::shared_ptr< RawImageData > p_
static RawImage create(RawImageType type=RawImageType::UINT16)
RawImageData *RAWSPEED_READONLY operator->() const
RawImageData &RAWSPEED_READONLY operator*() const
void performTask() noexcept
RawImageWorker(RawImageData *img, RawImageWorkerTask task, int start_y, int end_y) noexcept
constexpr RAWSPEED_READNONE Ttgt implicit_cast(Tsrc value)
void writeLog(DEBUG_PRIO priority, const char *format,...)