kwave
18.07.70
|
#include <OpusEncoder.h>
Public Member Functions | |
OpusEncoder () | |
virtual | ~OpusEncoder () Q_DECL_OVERRIDE |
virtual bool | open (QWidget *widget, const Kwave::FileInfo &info, Kwave::MultiTrackReader &src) Q_DECL_OVERRIDE |
virtual bool | writeHeader (QIODevice &dst) Q_DECL_OVERRIDE |
virtual bool | encode (Kwave::MultiTrackReader &src, QIODevice &dst) Q_DECL_OVERRIDE |
virtual void | close () Q_DECL_OVERRIDE |
![]() | |
virtual | ~OggSubEncoder () |
Private Types | |
enum | { DOWNMIX_OFF = -1, DOWNMIX_AUTO = 0, DOWNMIX_MONO = 1, DOWNMIX_STEREO = 2 } |
Private Member Functions | |
bool | setupDownMix (QWidget *widget, unsigned int tracks, int bitrate) |
bool | setupBitrate (QWidget *widget, unsigned int tracks) |
bool | setupCodingRate (QWidget *widget, unsigned int tracks, double rate) |
bool | setupEncoder (QWidget *widget, unsigned int tracks, double rate) |
bool | setupBitrateMode (QWidget *widget) |
bool | writeOpusHeader (QIODevice &dst) |
bool | writeOpusTags (QIODevice &dst) |
bool | writeOggPage (QIODevice &dst) |
unsigned int | fillInBuffer (Kwave::MultiTrackReader &src) |
Private Attributes | |
Kwave::VorbisCommentMap | m_comments_map |
Kwave::FileInfo | m_info |
ogg_stream_state | m_os |
ogg_page | m_og |
ogg_packet | m_op |
enum Kwave::OpusEncoder:: { ... } | m_downmix |
int | m_bitrate |
int | m_coding_rate |
unsigned int | m_encoder_channels |
Kwave::ChannelMixer * | m_channel_mixer |
Kwave::StreamObject * | m_rate_converter |
unsigned int | m_frame_size |
unsigned int | m_extra_out |
Kwave::opus_header_t | m_opus_header |
unsigned int | m_max_frame_bytes |
unsigned char * | m_packet_buffer |
OpusMSEncoder * | m_encoder |
float * | m_encoder_input |
Kwave::StreamObject * | m_last_queue_element |
Kwave::MultiTrackSink< Kwave::SampleBuffer, true > * | m_buffer |
Definition at line 47 of file OpusEncoder.h.
|
private |
downmix mode: off, automatic, mono or stereo
Enumerator | |
---|---|
DOWNMIX_OFF | no downmixing |
DOWNMIX_AUTO | automatic, based on bitrate |
DOWNMIX_MONO | downmix to mono |
DOWNMIX_STEREO | downmix to stereo |
Definition at line 183 of file OpusEncoder.h.
Kwave::OpusEncoder::OpusEncoder | ( | ) |
Constructor
Definition at line 96 of file OpusEncoder.cpp.
References m_opus_header.
|
virtual |
|
virtual |
finished the encoding, clean up
Implements Kwave::OggSubEncoder.
Definition at line 974 of file OpusEncoder.cpp.
References m_buffer, m_channel_mixer, m_encoder, m_encoder_input, m_last_queue_element, m_os, m_packet_buffer, and m_rate_converter.
|
virtual |
encode received ogg data
src | MultiTrackReader used as source of the audio data |
dst | a QIODevice that receives the raw data |
Implements Kwave::OggSubEncoder.
Definition at line 829 of file OpusEncoder.cpp.
References DBG, fillInBuffer(), Kwave::MultiTrackReader::isCanceled(), Kwave::FileInfo::length(), m_coding_rate, m_encoder, m_encoder_channels, m_encoder_input, m_frame_size, m_info, m_max_frame_bytes, m_og, m_op, m_opus_header, m_os, m_packet_buffer, Kwave::opus_error(), Kwave::FileInfo::rate(), Kwave::toUint(), and writeOggPage().
|
private |
Fill the input buffer of the encoder with samples.
src | MultiTrackReader used as source of the audio data |
Definition at line 772 of file OpusEncoder.cpp.
References Kwave::MultiTrackSink< SINK, INITIALIZE >::at(), Kwave::SampleBuffer::available(), Kwave::MultiTrackReader::eof(), Kwave::SampleBuffer::get(), Kwave::MultiTrackSource< SOURCE, INITIALIZE >::goOn(), m_buffer, m_encoder_channels, m_encoder_input, m_extra_out, m_frame_size, and sample2float().
Referenced by encode().
|
virtual |
parse the header of the stream and initialize the decoder
widget | a QWidget to be used as parent for error messages |
info | reference to a FileInfo to fill |
src | MultiTrackReader used as source of the audio data |
Implements Kwave::OggSubEncoder.
Definition at line 501 of file OpusEncoder.cpp.
References Kwave::FileInfo::bits(), Kwave::connect(), DBG, DEFAULT_COMPLEXITY, DOWNMIX_AUTO, Kwave::MessageBox::error(), m_bitrate, m_buffer, m_coding_rate, m_downmix, m_encoder, m_encoder_channels, m_extra_out, m_frame_size, m_info, m_last_queue_element, m_max_frame_bytes, m_opus_header, m_os, Kwave::opus_error(), Kwave::FileInfo::rate(), setupBitrate(), setupBitrateMode(), setupCodingRate(), setupDownMix(), setupEncoder(), and Kwave::FileInfo::tracks().
|
private |
determine the bitrate to use for encoding
widget | a QWidget to be used as parent for error messages |
tracks | number of tracks |
Definition at line 195 of file OpusEncoder.cpp.
References _, BITRATE_MAX, BITRATE_MIN, Kwave::FileInfo::contains(), Kwave::FileInfo::get(), Kwave::INF_BITRATE_LOWER, Kwave::INF_BITRATE_NOMINAL, Kwave::INF_BITRATE_UPPER, m_bitrate, m_info, Kwave::toInt(), and Kwave::MessageBox::warningContinueCancel().
Referenced by open().
|
private |
set up the bitrate mode, e.g. VBR, CBR etc
widget | a QWidget to be used as parent for error messages |
Definition at line 452 of file OpusEncoder.cpp.
References Kwave::BITRATE_MODE_CBR_HARD, Kwave::MessageBox::error(), Kwave::FileInfo::get(), Kwave::INF_BITRATE_MODE, m_bitrate, m_encoder, m_info, m_opus_header, and Kwave::opus_error().
Referenced by open().
|
private |
determine the sample rate to use for encoding
widget | a QWidget to be used as parent for error messages |
tracks | number of tracks |
rate | sample rate of the original in samples/sec |
Definition at line 238 of file OpusEncoder.cpp.
References Kwave::connect(), m_coding_rate, m_last_queue_element, m_rate_converter, Kwave::opus_next_sample_rate(), SAMPLE_RATE_MAX, SAMPLE_RATE_MIN, Kwave::StreamObject::setAttribute(), Kwave::MessageBox::sorry(), and Kwave::toInt().
Referenced by open().
|
private |
set up the downmixing mode
widget | a QWidget to be used as parent for error messages |
tracks | number of tracks |
bitrate | in bits/sec or -1 for "auto" |
Definition at line 126 of file OpusEncoder.cpp.
References _, Kwave::connect(), DOWNMIX_AUTO, DOWNMIX_MONO, DOWNMIX_OFF, DOWNMIX_STEREO, Kwave::ChannelMixer::init(), m_channel_mixer, m_downmix, m_encoder_channels, m_last_queue_element, Kwave::toInt(), and Kwave::MessageBox::warningContinueCancel().
Referenced by open().
|
private |
set up the encoder, including packet size and channel mapping
widget | a QWidget to be used as parent for error messages |
tracks | number of tracks |
rate | sample rate of the original in samples/sec |
Definition at line 308 of file OpusEncoder.cpp.
References Kwave::FileInfo::contains(), Kwave::MessageBox::error(), Kwave::FileInfo::get(), Kwave::INF_OPUS_FRAME_LEN, m_coding_rate, m_encoder, m_encoder_input, m_frame_size, m_info, m_max_frame_bytes, m_opus_header, m_packet_buffer, Kwave::opus_error(), and Kwave::toUint().
Referenced by open().
|
virtual |
write the header information
dst | a QIODevice that receives the raw data |
Implements Kwave::OggSubEncoder.
Definition at line 733 of file OpusEncoder.cpp.
References writeOpusHeader(), and writeOpusTags().
|
private |
Write the current ogg page to the destination IO device
dst | a QIODevice that receives the raw data |
Definition at line 745 of file OpusEncoder.cpp.
References m_og.
Referenced by encode(), and writeOpusTags().
|
private |
write the Opus header into the Ogg stream
dst | a QIODevice that receives the raw data |
Definition at line 626 of file OpusEncoder.cpp.
References m_og, m_op, m_opus_header, and m_os.
Referenced by writeHeader().
|
private |
write the Opus tags into the Ogg stream
dst | a QIODevice that receives the raw data |
Definition at line 673 of file OpusEncoder.cpp.
References _, _writeInt(), Kwave::FileInfo::contains(), Kwave::FileInfo::get(), Kwave::INF_SOFTWARE, m_comments_map, m_info, m_og, m_op, m_os, and writeOggPage().
Referenced by writeHeader().
|
private |
bitrate in bits/sec
Definition at line 191 of file OpusEncoder.h.
Referenced by open(), setupBitrate(), and setupBitrateMode().
|
private |
multi track buffer, for blockwise reading from the source device
Definition at line 234 of file OpusEncoder.h.
Referenced by close(), fillInBuffer(), and open().
|
private |
channel mixer (if downmixing is required)
Definition at line 200 of file OpusEncoder.h.
Referenced by close(), and setupDownMix().
|
private |
encoding sample rate in bits/sec
Definition at line 194 of file OpusEncoder.h.
Referenced by encode(), open(), setupCodingRate(), and setupEncoder().
|
private |
map for translating Opus comments to Kwave FileInfo
Definition at line 166 of file OpusEncoder.h.
Referenced by writeOpusTags().
enum { ... } Kwave::OpusEncoder::m_downmix |
downmix mode: off, automatic, mono or stereo
Referenced by open(), and setupDownMix().
|
private |
the Opus multistream encoder
Definition at line 221 of file OpusEncoder.h.
Referenced by close(), encode(), open(), setupBitrateMode(), and setupEncoder().
|
private |
number of tracks used for encoding, after downmixing
Definition at line 197 of file OpusEncoder.h.
Referenced by encode(), fillInBuffer(), open(), and setupDownMix().
|
private |
input buffer of the encoder
Definition at line 224 of file OpusEncoder.h.
Referenced by close(), encode(), fillInBuffer(), and setupEncoder().
|
private |
number of samples to pad at the end to compensate preskip
Definition at line 209 of file OpusEncoder.h.
Referenced by fillInBuffer(), and open().
|
private |
frame size in samples
Definition at line 206 of file OpusEncoder.h.
Referenced by encode(), fillInBuffer(), open(), and setupEncoder().
|
private |
file info, set in open(...)
Definition at line 169 of file OpusEncoder.h.
Referenced by encode(), open(), setupBitrate(), setupBitrateMode(), setupEncoder(), and writeOpusTags().
|
private |
end of the queue that possibly consists of a channel mixer (in case of downmixing), a rate converter (if needed) and a buffer (if one of the two objects mentioned before is present).
Definition at line 231 of file OpusEncoder.h.
Referenced by close(), open(), setupCodingRate(), and setupDownMix().
|
private |
maximum number of bytes per frame
Definition at line 215 of file OpusEncoder.h.
Referenced by encode(), open(), and setupEncoder().
|
private |
one Ogg bitstream page. Opus packets are inside
Definition at line 175 of file OpusEncoder.h.
Referenced by encode(), writeOggPage(), writeOpusHeader(), and writeOpusTags().
|
private |
one raw packet of data for decode
Definition at line 178 of file OpusEncoder.h.
Referenced by encode(), writeOpusHeader(), and writeOpusTags().
|
private |
Opus header, including channel map
Definition at line 212 of file OpusEncoder.h.
Referenced by encode(), open(), OpusEncoder(), setupBitrateMode(), setupEncoder(), and writeOpusHeader().
|
private |
take physical pages, weld into a logical stream of packets
Definition at line 172 of file OpusEncoder.h.
Referenced by close(), encode(), open(), writeOpusHeader(), and writeOpusTags().
|
private |
buffer for one packet
Definition at line 218 of file OpusEncoder.h.
Referenced by close(), encode(), and setupEncoder().
|
private |
sample rate converter (if needed)
Definition at line 203 of file OpusEncoder.h.
Referenced by close(), and setupCodingRate().