Krita Source Code Documentation
Loading...
Searching...
No Matches
KisBufferStreamInterleaveUpsample Class Reference

#include <kis_buffer_stream.h>

+ Inheritance diagram for KisBufferStreamInterleaveUpsample:

Public Member Functions

 KisBufferStreamInterleaveUpsample (uint8_t **srcs, uint16_t nb_samples, uint16_t depth, tsize_t *lineSize, uint16_t hsubsample, uint16_t vsubsample)
 
void moveToPos (tsize_t x, tsize_t y) override
 
uint32_t nextValue () override
 
void restart () override
 
tsize_t width () const override
 
tsize_t x () const override
 
tsize_t y () const override
 
- Public Member Functions inherited from KisBufferStreamSeparate
 KisBufferStreamSeparate (uint8_t **srcs, uint16_t nb_samples, uint16_t depth, tsize_t *lineSize)
 
void moveToLine (tsize_t lineNumber) override
 
void moveToPos (tsize_t x, tsize_t y) override
 
uint32_t nextValue () override
 
void restart () override
 
tsize_t width () const override
 
tsize_t x () const override
 
tsize_t y () const override
 
 ~KisBufferStreamSeparate () override=default
 
- Public Member Functions inherited from KisBufferStreamBase
 KisBufferStreamBase (uint16_t depth)
 
virtual ~KisBufferStreamBase ()=default
 

Protected Attributes

uint16_t m_currentPlane = 0
 
uint16_t m_hsubsample
 
uint16_t m_vsubsample
 
- Protected Attributes inherited from KisBufferStreamSeparate
uint16_t m_current_sample = 0
 
uint16_t m_nb_samples
 
QVector< QSharedPointer< KisBufferStreamBase > > streams
 
- Protected Attributes inherited from KisBufferStreamBase
uint16_t m_depth
 

Detailed Description

Definition at line 129 of file kis_buffer_stream.h.

Constructor & Destructor Documentation

◆ KisBufferStreamInterleaveUpsample()

KisBufferStreamInterleaveUpsample::KisBufferStreamInterleaveUpsample ( uint8_t ** srcs,
uint16_t nb_samples,
uint16_t depth,
tsize_t * lineSize,
uint16_t hsubsample,
uint16_t vsubsample )

Definition at line 212 of file kis_buffer_stream.cc.

219 : KisBufferStreamSeparate(srcs, nb_samples, depth, lineSize)
220 , m_hsubsample(hsubsample)
221 , m_vsubsample(vsubsample)
222{
223}
KisBufferStreamSeparate(uint8_t **srcs, uint16_t nb_samples, uint16_t depth, tsize_t *lineSize)

Member Function Documentation

◆ moveToPos()

void KisBufferStreamInterleaveUpsample::moveToPos ( tsize_t x,
tsize_t y )
overridevirtual

Implements KisBufferStreamBase.

Definition at line 266 of file kis_buffer_stream.cc.

267{
268 // Needs to subsample
269 for (uint16_t i = 0; i < m_nb_samples; i++) {
270 const tsize_t realX = i == 0 ? x : x / m_hsubsample;
271 const tsize_t realY = i == 0 ? y : y / m_vsubsample;
272 streams.at(i)->moveToPos(realX, realY);
273 }
274}
QVector< QSharedPointer< KisBufferStreamBase > > streams

References m_hsubsample, KisBufferStreamSeparate::m_nb_samples, m_vsubsample, KisBufferStreamSeparate::streams, x(), and y().

◆ nextValue()

uint32_t KisBufferStreamInterleaveUpsample::nextValue ( )
overridevirtual

Implements KisBufferStreamBase.

Definition at line 225 of file kis_buffer_stream.cc.

226{
227 uint32_t value = streams[m_currentPlane]->nextValue();
228 if (m_currentPlane == 0) {
230 if (m_current_sample % m_hsubsample == 0) {
232 // Fix up the position of the luminance plane
233 // If it's already 0, the cursor has already looped (correctly)
234 // to the next line
235 if (streams[m_currentPlane]->x() != 0) {
236 streams[m_currentPlane]->moveToPos(
239 }
240 // Move to Cb/Cr
241 m_currentPlane += 1;
243 } else {
244 // Go to next line
245 // If the position is already 0, we need to correct the row
246 // AND column
247 if (streams[m_currentPlane]->x() != 0) {
248 streams[m_currentPlane]->moveToPos(
250 streams[m_currentPlane]->y() + 1);
251 } else {
252 streams[m_currentPlane]->moveToPos(
255 }
256 }
257 }
258 } else if (m_currentPlane < m_nb_samples - 1) {
259 m_currentPlane += 1;
260 } else {
261 m_currentPlane = 0;
262 }
263 return value;
264}
float value(const T *src, size_t ch)

References KisBufferStreamSeparate::m_current_sample, m_currentPlane, m_hsubsample, KisBufferStreamSeparate::m_nb_samples, m_vsubsample, KisBufferStreamSeparate::nextValue(), KisBufferStreamSeparate::streams, value(), width(), x(), and y().

◆ restart()

void KisBufferStreamInterleaveUpsample::restart ( )
inlineoverridevirtual

Implements KisBufferStreamBase.

Definition at line 152 of file kis_buffer_stream.h.

References m_currentPlane, and KisBufferStreamSeparate::restart().

◆ width()

tsize_t KisBufferStreamInterleaveUpsample::width ( ) const
inlineoverridevirtual

Implements KisBufferStreamBase.

Definition at line 147 of file kis_buffer_stream.h.

148 {
149 return streams[0]->width();
150 }

References KisBufferStreamSeparate::streams.

◆ x()

tsize_t KisBufferStreamInterleaveUpsample::x ( ) const
overridevirtual

Implements KisBufferStreamBase.

Definition at line 276 of file kis_buffer_stream.cc.

277{
278 return streams[0]->x();
279}

References KisBufferStreamSeparate::streams.

◆ y()

tsize_t KisBufferStreamInterleaveUpsample::y ( ) const
overridevirtual

Implements KisBufferStreamBase.

Definition at line 281 of file kis_buffer_stream.cc.

282{
283 return streams[0]->y();
284}

References KisBufferStreamSeparate::streams.

Member Data Documentation

◆ m_currentPlane

uint16_t KisBufferStreamInterleaveUpsample::m_currentPlane = 0
protected

Definition at line 160 of file kis_buffer_stream.h.

◆ m_hsubsample

uint16_t KisBufferStreamInterleaveUpsample::m_hsubsample
protected

Definition at line 159 of file kis_buffer_stream.h.

◆ m_vsubsample

uint16_t KisBufferStreamInterleaveUpsample::m_vsubsample
protected

Definition at line 159 of file kis_buffer_stream.h.


The documentation for this class was generated from the following files: