filmout_display/include/dpx.hpp

73 lines
2.5 KiB
C++
Raw Normal View History

2024-11-24 15:38:36 +00:00
/*
#ifndef DPX_HPP
#define DPX_HPP
#include <opencv2/opencv.hpp>
#include <string>
#include <fstream>
#include <vector>
#include <stdexcept>
using namespace std;
using namespace cv;
class DPX {
public:
2024-11-24 15:38:36 +00:00
DPX(const std::string& filepath);
~DPX() = default;
// Get the loaded raw image data
cv::Mat getRawImage() const { return raw; }
2024-11-24 15:38:36 +00:00
// Get image properties
int getBitDepth() const { return bitDepth; }
int getWidth() const { return width; }
int getHeight() const { return height; }
2024-11-24 15:38:36 +00:00
// Convert to 8-bit or 10-bit representation
cv::Mat convertTo8Bit() const;
cv::Mat convertTo10Bit() const;
private:
struct DPXHeader {
2024-11-24 15:38:36 +00:00
uint32_t magic; // Magic number (0x53445058 or 'SDPX')
uint32_t imageOffset; // Offset to image data
2024-11-24 15:38:36 +00:00
uint32_t fileVersion; // Version number of header format
uint32_t fileSize; // Total image file size in bytes
uint16_t dittoKey; // Image content flag
uint16_t headerSize; // Generic header length in bytes
uint32_t industrySize; // Industry specific header length
uint32_t userSize; // User defined data length
uint32_t encryptKey; // Encryption key
};
2024-11-24 15:38:36 +00:00
struct DPXImageElement {
uint32_t dataSign; // Data sign (0 = unsigned, 1 = signed)
uint32_t lowData; // Reference low data code value
uint32_t lowQuantity; // Reference low quantity
uint32_t highData; // Reference high data code value
uint32_t highQuantity; // Reference high quantity
uint8_t descriptor; // Descriptor for image element
uint8_t transfer; // Transfer characteristics
uint8_t colorimetric; // Colorimetric specification
uint8_t bitDepth; // Bit depth
uint16_t packing; // Packing method
uint16_t encoding; // Encoding method
};
2024-11-24 15:38:36 +00:00
cv::Mat raw; // Raw image data
int bitDepth; // Image bit depth
int width; // Image width
int height; // Image height
// Private helper methods
void readHeader(std::ifstream& file);
void readImageData(std::ifstream& file, uint32_t imageOffset);
void processImageData(std::vector<uint8_t>& buffer);
void unpack10BitData(const std::vector<uint8_t>& buffer, cv::Mat& output);
void swapEndianness(uint8_t* data, size_t size);
bool isLittleEndian() const;
};
#endif
2024-11-24 15:38:36 +00:00
*/