Krita Source Code Documentation
Loading...
Searching...
No Matches
kis_buffer_stream.h
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2005-2006 Cyrille Berger <cberger@cberger.net>
3 * SPDX-FileCopyrightText: 2022 L. E. Segovia <amy@amyspark.me>
4 *
5 * SPDX-License-Identifier: GPL-2.0-or-later
6 */
7
8#ifndef _KIS_BUFFER_STREAM_H_
9#define _KIS_BUFFER_STREAM_H_
10
11#include <cstdint>
12
13#include <QSharedPointer>
14#include <QVector>
15
16#include <tiffio.h>
17
19{
20public:
21 KisBufferStreamBase(uint16_t depth) : m_depth(depth) {}
22 virtual ~KisBufferStreamBase() = default;
23 virtual uint32_t nextValue() = 0;
24 virtual void restart() = 0;
25 virtual void moveToLine(tsize_t lineNumber) = 0;
26 virtual void moveToPos(tsize_t x, tsize_t y) = 0;
27 virtual tsize_t x() const = 0;
28 virtual tsize_t y() const = 0;
29 virtual tsize_t width() const = 0;
30
31protected:
32 uint16_t m_depth;
33};
34
36{
37public:
38 KisBufferStreamContigBase(uint8_t *src, uint16_t depth, tsize_t lineSize);
39
40 ~KisBufferStreamContigBase() override = default;
41
42 void restart() override;
43
44 void moveToLine(tsize_t lineNumber) override;
45
46 void moveToPos(tsize_t x, tsize_t y) override;
47
48 tsize_t x() const override;
49
50 tsize_t y() const override;
51
52 tsize_t width() const override;
53
54protected:
55 uint8_t *const m_src;
56 uint8_t *m_srcIt;
57 uint16_t m_posinc = 0;
58 const tsize_t m_lineSize;
59 tsize_t m_lineNumber = 0;
60 tsize_t m_lineOffset = 0;
61};
62
64{
65public:
66 KisBufferStreamContigBelow16(uint8_t *src, uint16_t depth, tsize_t lineSize)
67 : KisBufferStreamContigBase(src, depth, lineSize)
68 {
69 }
70 ~KisBufferStreamContigBelow16() override = default;
71 uint32_t nextValue() override;
72};
73
75{
76public:
77 KisBufferStreamContigBelow32(uint8_t *src, uint16_t depth, tsize_t lineSize)
78 : KisBufferStreamContigBase(src, depth, lineSize)
79 {
80 }
81
82public:
83 ~KisBufferStreamContigBelow32() override = default;
84 uint32_t nextValue() override;
85};
86
88{
89public:
90 KisBufferStreamContigAbove32(uint8_t *src, uint16_t depth, tsize_t lineSize)
91 : KisBufferStreamContigBase(src, depth, lineSize)
92 {
93 }
94
95public:
96 ~KisBufferStreamContigAbove32() override = default;
97 uint32_t nextValue() override;
98};
99
101{
102public:
103 KisBufferStreamSeparate(uint8_t **srcs,
104 uint16_t nb_samples,
105 uint16_t depth,
106 tsize_t *lineSize);
107 ~KisBufferStreamSeparate() override = default;
108
109 uint32_t nextValue() override;
110
111 void restart() override;
112
113 void moveToLine(tsize_t lineNumber) override;
114
115 void moveToPos(tsize_t x, tsize_t y) override;
116
117 tsize_t x() const override;
118
119 tsize_t y() const override;
120
121 tsize_t width() const override;
122
123protected:
125 uint16_t m_current_sample = 0;
126 uint16_t m_nb_samples;
127};
128
130{
131public:
133 uint16_t nb_samples,
134 uint16_t depth,
135 tsize_t *lineSize,
136 uint16_t hsubsample,
137 uint16_t vsubsample);
138
139 uint32_t nextValue() override;
140
141 void moveToPos(tsize_t x, tsize_t y) override;
142
143 tsize_t x() const override;
144
145 tsize_t y() const override;
146
147 tsize_t width() const override
148 {
149 return streams[0]->width();
150 }
151
152 void restart() override
153 {
155 m_currentPlane = 0;
156 }
157
158protected:
160 uint16_t m_currentPlane = 0;
161};
162
163#endif
virtual void restart()=0
virtual void moveToLine(tsize_t lineNumber)=0
KisBufferStreamBase(uint16_t depth)
virtual ~KisBufferStreamBase()=default
virtual tsize_t y() const =0
virtual tsize_t x() const =0
virtual tsize_t width() const =0
virtual void moveToPos(tsize_t x, tsize_t y)=0
virtual uint32_t nextValue()=0
KisBufferStreamContigAbove32(uint8_t *src, uint16_t depth, tsize_t lineSize)
~KisBufferStreamContigAbove32() override=default
void moveToLine(tsize_t lineNumber) override
void moveToPos(tsize_t x, tsize_t y) override
KisBufferStreamContigBase(uint8_t *src, uint16_t depth, tsize_t lineSize)
tsize_t y() const override
~KisBufferStreamContigBase() override=default
tsize_t width() const override
tsize_t x() const override
KisBufferStreamContigBelow16(uint8_t *src, uint16_t depth, tsize_t lineSize)
~KisBufferStreamContigBelow16() override=default
~KisBufferStreamContigBelow32() override=default
KisBufferStreamContigBelow32(uint8_t *src, uint16_t depth, tsize_t lineSize)
void moveToPos(tsize_t x, tsize_t y) override
KisBufferStreamInterleaveUpsample(uint8_t **srcs, uint16_t nb_samples, uint16_t depth, tsize_t *lineSize, uint16_t hsubsample, uint16_t vsubsample)
tsize_t y() const override
uint32_t nextValue() override
void moveToLine(tsize_t lineNumber) override
~KisBufferStreamSeparate() override=default
KisBufferStreamSeparate(uint8_t **srcs, uint16_t nb_samples, uint16_t depth, tsize_t *lineSize)
tsize_t x() const override
QVector< QSharedPointer< KisBufferStreamBase > > streams
tsize_t width() const override
void moveToPos(tsize_t x, tsize_t y) override