summaryrefslogtreecommitdiff
path: root/src/image.h
blob: d5fd9532fe622e51aca3c6a2b15ccb12fee45ed0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#pragma once

#include <QElapsedTimer>

#include "constants.h"
#include "typedefs.h"

#define USER_PTR

class Pixels;

// TODO: template
struct Image
{
    // Image(Image &other) { std::cerr << __func__ << ": don't copy me please" << std::endl; }
    Image() = default;
    Image(Image &other) = delete;
    Image(Image &&other) = delete;
    Image &operator=(Image &&other) = default;
    // uint8_t data[img_height][img_width] = {{0}};

#ifdef RADXA_ZERO_3E
    using radxa_row_t = std::array<uint8_t, radxa_raw_img_stride>;
    using radxa_data_t = std::array<radxa_row_t, img_height>;
    // using row_t = std::array<uint8_t, radxa_raw_img_stride>;
    using row_t = std::array<uint8_t, img_width>;
    using data_t = std::array<row_t, img_height>;
#else
    using row_t = std::array<uint8_t, img_width>;
    using data_t = std::array<row_t, img_height>;
#endif // RADXA_ZERO_3E
    using rotated_row_t = std::array<uint8_t, img_height>;
    using column_t = rotated_row_t;
    using rotated_data_t = std::array<column_t, img_width>;
    // data_t d;
    alignas(128) data_t data;
    // alignas(128) std::array<uint8_t, 417792> rawData;
    int width{0};
    int height{0};
    // data_t *data;
    // uint8_t *data = {nullptr};
    // uint8_t &dataAt(size_t row, size_t col);
    // uint8_t rotated_cw[img_width][img_height] = {{0}};
    rotated_data_t rotated_cw;
    // size_t dataSize{0};
    // unsigned int stride{0};
    libcamera::PixelFormat pixelFormat{0};
    Counters counters{};
    bool hasInputData{false};
    QElapsedTimer t;

    void rotate();

    std::shared_ptr<Pixels> sharedPixels();
    void copyFromData(const void* src, size_t size);

    static void copy(data_t &dst, const radxa_data_t &src);

private:
    Image &operator=(Image &other) = delete;
};