-
Notifications
You must be signed in to change notification settings - Fork 20
Expand file tree
/
Copy pathVideoBuffer.ixx
More file actions
63 lines (53 loc) · 1.17 KB
/
VideoBuffer.ixx
File metadata and controls
63 lines (53 loc) · 1.17 KB
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
62
63
export module VideoBuffer;
export import IVideoBuffer;
import <cstdint>;
import <cassert>;
import <algorithm>;
export class VideoBuffer : public IVideoBuffer
{
public:
VideoBuffer(int largeur, int hauteur) // en pixels
: pixels_(new bool[hauteur * largeur])
, hauteur_{ hauteur }
, largeur_{ largeur }
{
assert(hauteur > 0 && largeur > 0);
reset();
}
~VideoBuffer()
{
delete[] pixels_;
}
public: // IVideo
virtual int hauteur() const
{
return hauteur_;
}
virtual int largeur() const
{
return largeur_;
}
virtual bool pixel(int x, int y) const
{
return pixels_[index(x, y)];
}
virtual void pixelXOR(int x, int y, bool value)
{
pixels_[index(x, y)] = pixels_[index(x, y)] != value;
}
virtual void reset()
{
std::for_each(pixels_, pixels_ + hauteur_ * largeur_, [](bool& pixel) { pixel = false; });
}
protected:
int index(int x, int y) const
{
assert(x >= 0 && x < largeur_);
assert(y >= 0 && y < hauteur_);
return y * largeur_ + x;
}
protected:
bool* pixels_{ nullptr }; // 1 bit par pixel. TODO: convertir en bitarray dynamique.
int hauteur_{ 0 };
int largeur_{ 0 };
};