kwave  18.07.70
Kwave::TrackWriter Class Reference

#include <TrackWriter.h>

Inheritance diagram for Kwave::TrackWriter:
Inheritance graph
Collaboration diagram for Kwave::TrackWriter:
Collaboration graph

Public Member Functions

 TrackWriter (Kwave::Track &track, Kwave::InsertMode mode, sample_index_t left=0, sample_index_t right=0)
 
virtual ~TrackWriter () Q_DECL_OVERRIDE
 
virtual bool write (const Kwave::SampleArray &buffer, unsigned int &count) Q_DECL_OVERRIDE
 
- Public Member Functions inherited from Kwave::Writer
 Writer ()
 
 Writer (Kwave::InsertMode mode, sample_index_t left=0, sample_index_t right=0)
 
virtual ~Writer () Q_DECL_OVERRIDE
 
virtual Writeroperator<< (const Kwave::SampleArray &samples)
 
virtual Writeroperator<< (const sample_t &sample)
 
Writeroperator<< (Writer &(*modifier)(Writer &))
 
Writeroperator<< (Kwave::SampleReader &reader)
 
bool flush ()
 
virtual bool eof () const
 
virtual bool done () const Q_DECL_OVERRIDE
 
sample_index_t first () const
 
sample_index_t last () const
 
sample_index_t position () const
 
Kwave::InsertMode mode () const
 
- Public Member Functions inherited from Kwave::SampleSink
 SampleSink (QObject *parent=Q_NULLPTR)
 
virtual ~SampleSink ()
 
- Public Member Functions inherited from Kwave::StreamObject
 StreamObject (QObject *parent=Q_NULLPTR)
 
virtual ~StreamObject ()
 
virtual unsigned int tracks () const
 
virtual Kwave::StreamObjectoperator[] (unsigned int track)
 
virtual unsigned int tracksOfPort (const char *port) const
 
virtual Kwave::StreamObjectport (const char *port, unsigned int track)
 
virtual unsigned int blockSize () const
 
void setAttribute (const char *attribute, const QVariant &value)
 

Private Attributes

Kwave::Trackm_track
 
QTime m_progress_time
 

Additional Inherited Members

- Public Slots inherited from Kwave::Writer
void input (Kwave::SampleArray data)
 
- Signals inherited from Kwave::Writer
void sigSamplesWritten (sample_index_t)
 
void proceeded ()
 
- Signals inherited from Kwave::StreamObject
void attributeChanged (const QVariant value)
 
- Static Public Member Functions inherited from Kwave::StreamObject
static void setInteractive (bool interactive)
 
- Protected Attributes inherited from Kwave::Writer
sample_index_t m_first
 
sample_index_t m_last
 
Kwave::InsertMode m_mode
 
sample_index_t m_position
 
Kwave::SampleArray m_buffer
 
unsigned int m_buffer_size
 
unsigned int m_buffer_used
 

Detailed Description

Input stream for transferring samples into a Track.

Warning
THIS CLASS IS NOT THREADSAFE! It is intended to be owned by and used from only one thread.

Definition at line 42 of file TrackWriter.h.

Constructor & Destructor Documentation

◆ TrackWriter()

Kwave::TrackWriter::TrackWriter ( Kwave::Track track,
Kwave::InsertMode  mode,
sample_index_t  left = 0,
sample_index_t  right = 0 
)

Constructor, creates a writer for write access to a track.

Parameters
trackreference to the track
modespecifies where and how to insert
leftstart of the input (only useful in insert and overwrite mode)
rightend of the input (only useful with overwrite mode)
See also
InsertMode

Definition at line 32 of file TrackWriter.cpp.

References m_progress_time, m_track, and Kwave::Track::use().

34  :Kwave::Writer(mode, left, right),
35  m_track(track), m_progress_time()
36 {
37  m_track.use();
38  m_progress_time.start();
39 }
Kwave::Track & m_track
Definition: TrackWriter.h:81
void use()
Definition: Track.cpp:763
Kwave::InsertMode mode() const
Definition: Writer.h:125
Here is the call graph for this function:

◆ ~TrackWriter()

Kwave::TrackWriter::~TrackWriter ( )
virtual

Destructor.

Definition at line 42 of file TrackWriter.cpp.

References Kwave::Writer::flush(), m_track, and Kwave::Track::release().

43 {
44  flush();
45  m_track.release();
46 }
Kwave::Track & m_track
Definition: TrackWriter.h:81
bool flush()
Definition: Writer.h:94
void release()
Definition: Track.cpp:769
Here is the call graph for this function:

Member Function Documentation

◆ write()

bool Kwave::TrackWriter::write ( const Kwave::SampleArray buffer,
unsigned int &  count 
)
virtual

Flush the content of a buffer. Normally the buffer is the internal intermediate buffer used for single-sample writes. When using block transfers, the internal buffer is bypassed and the written block is passed instead.

Parameters
bufferreference to the buffer to be flushed
countnumber of samples in the buffer to be flushed, will be internally set to zero if successful
Returns
true if successful, false if failed (e.g. out of memory)

Implements Kwave::Writer.

Definition at line 49 of file TrackWriter.cpp.

References Kwave::Append, Kwave::Insert, Kwave::Writer::m_last, Kwave::Writer::m_mode, Kwave::Writer::m_position, m_progress_time, m_track, MIN_PROGRESS_INTERVAL, Kwave::Overwrite, Kwave::Writer::proceeded(), Kwave::SampleArray::size(), Kwave::toUint(), and Kwave::Track::writeSamples().

51 {
52  if (count == 0) return true; // nothing to write
53 
54  if ((m_mode == Kwave::Overwrite) && (m_position + count > m_last + 1)) {
55  // need clipping
56  count = Kwave::toUint(m_last + 1 - m_position);
57 // qDebug("TrackWriter::write() clipped to count=%u", count);
58  }
59 
60  Q_ASSERT(count <= buffer.size());
61 // qDebug("TrackWriter[%p,%llu...%llu]::write(%llu ... %llu) (total=%llu)",
62 // static_cast<void *>(this),
63 // m_first, m_last,
64 // m_position, m_position + count - 1,
65 // m_position + count - m_first);
66 
67  if (!m_track.writeSamples(m_mode, m_position, buffer, 0, count)) {
68  count = 0;
69  return false; /* out of memory */
70  }
71 
72  m_position += count;
73 
74  // fix m_last, this might be needed in Append and Insert mode
75  Q_ASSERT(m_position >= 1);
76  if ((m_mode == Kwave::Append) || (m_mode == Kwave::Insert)) {
77  if ((m_position - 1) > m_last) m_last = (m_position - 1);
78  }
79  count = 0;
80 
81  // inform others that we proceeded
82  if (m_progress_time.elapsed() > MIN_PROGRESS_INTERVAL) {
83  m_progress_time.restart();
84  emit proceeded();
85  }
86 
87  return true;
88 }
Kwave::Track & m_track
Definition: TrackWriter.h:81
sample_index_t m_last
Definition: Writer.h:152
sample_index_t m_position
Definition: Writer.h:158
bool writeSamples(Kwave::InsertMode mode, sample_index_t offset, const Kwave::SampleArray &buffer, unsigned int buf_offset, unsigned int length)
Definition: Track.cpp:561
void proceeded()
unsigned int size() const
#define MIN_PROGRESS_INTERVAL
Definition: TrackWriter.cpp:29
unsigned int toUint(T x)
Definition: Utils.h:109
Kwave::InsertMode m_mode
Definition: Writer.h:155
Here is the call graph for this function:

Member Data Documentation

◆ m_progress_time

QTime Kwave::TrackWriter::m_progress_time
private

timer for limiting the number of progress signals per second

Definition at line 84 of file TrackWriter.h.

Referenced by TrackWriter(), and write().

◆ m_track

Kwave::Track& Kwave::TrackWriter::m_track
private

the track that receives our data

Definition at line 81 of file TrackWriter.h.

Referenced by TrackWriter(), write(), and ~TrackWriter().


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