kwave  18.07.70
OpusEncoder.h
Go to the documentation of this file.
1 /*************************************************************************
2  OpusEncoder.h - sub encoder base class for Opus in an Ogg container
3  -------------------
4  begin : Thu Jan 03 2013
5  copyright : (C) 2013 by Thomas Eschenbacher
6  email : Thomas.Eschenbacher@gmx.de
7  ***************************************************************************/
8 
9 /***************************************************************************
10  * *
11  * This program is free software; you can redistribute it and/or modify *
12  * it under the terms of the GNU General Public License as published by *
13  * the Free Software Foundation; either version 2 of the License, or *
14  * (at your option) any later version. *
15  * *
16  ***************************************************************************/
17 
18 #ifndef OPUS_ENCODER_H
19 #define OPUS_ENCODER_H
20 
21 #ifdef HAVE_OGG_OPUS
22 #include "config.h"
23 
24 #include <ogg/ogg.h>
25 #include <opus/opus.h>
26 #include <opus/opus_multistream.h>
27 
28 #include "libkwave/FileInfo.h"
32 
33 #include "OggSubEncoder.h"
34 #include "OpusHeader.h"
35 
36 class QIODevice;
37 class QWidget;
38 
39 namespace Kwave
40 {
41 
42  class ChannelMixer;
43  class FileInfo;
44  class MultiTrackReader;
45  class StreamObject;
46 
48  {
49  public:
50 
54  OpusEncoder();
55 
57  virtual ~OpusEncoder() Q_DECL_OVERRIDE;
58 
66  virtual bool open(QWidget *widget,
67  const Kwave::FileInfo &info,
68  Kwave::MultiTrackReader &src) Q_DECL_OVERRIDE;
69 
75  virtual bool writeHeader(QIODevice &dst) Q_DECL_OVERRIDE;
76 
83  virtual bool encode(Kwave::MultiTrackReader &src,
84  QIODevice &dst) Q_DECL_OVERRIDE;
85 
89  virtual void close() Q_DECL_OVERRIDE;
90 
91  private:
92 
100  bool setupDownMix(QWidget *widget, unsigned int tracks, int bitrate);
101 
108  bool setupBitrate(QWidget *widget, unsigned int tracks);
109 
117  bool setupCodingRate(QWidget *widget, unsigned int tracks, double rate);
118 
126  bool setupEncoder(QWidget *widget, unsigned int tracks, double rate);
127 
133  bool setupBitrateMode(QWidget *widget);
134 
140  bool writeOpusHeader(QIODevice &dst);
141 
147  bool writeOpusTags(QIODevice &dst);
148 
154  bool writeOggPage(QIODevice &dst);
155 
161  unsigned int fillInBuffer(Kwave::MultiTrackReader &src);
162 
163  private:
164 
167 
170 
172  ogg_stream_state m_os;
173 
175  ogg_page m_og;
176 
178  ogg_packet m_op;
179 
183  enum {
184  DOWNMIX_OFF = -1,
188  } m_downmix;
189 
192 
195 
197  unsigned int m_encoder_channels;
198 
201 
204 
206  unsigned int m_frame_size;
207 
209  unsigned int m_extra_out;
210 
212  Kwave::opus_header_t m_opus_header;
213 
215  unsigned int m_max_frame_bytes;
216 
218  unsigned char *m_packet_buffer;
219 
221  OpusMSEncoder *m_encoder;
222 
225 
232 
235  };
236 }
237 
238 #endif /* HAVE_OGG_OPUS */
239 
240 #endif /* OPUS_ENCODER_H */
241 
242 //***************************************************************************
243 //***************************************************************************
Kwave::opus_header_t m_opus_header
Definition: OpusEncoder.h:212
virtual bool writeHeader(QIODevice &dst) Q_DECL_OVERRIDE
unsigned int fillInBuffer(Kwave::MultiTrackReader &src)
Definition: App.h:33
Kwave::StreamObject * m_rate_converter
Definition: OpusEncoder.h:203
Kwave::FileInfo m_info
Definition: OpusEncoder.h:169
bool writeOggPage(QIODevice &dst)
Kwave::VorbisCommentMap m_comments_map
Definition: OpusEncoder.h:166
bool writeOpusTags(QIODevice &dst)
bool setupBitrate(QWidget *widget, unsigned int tracks)
float * m_encoder_input
Definition: OpusEncoder.h:224
unsigned int m_extra_out
Definition: OpusEncoder.h:209
Kwave::MultiTrackSink< Kwave::SampleBuffer, true > * m_buffer
Definition: OpusEncoder.h:234
unsigned int m_encoder_channels
Definition: OpusEncoder.h:197
bool writeOpusHeader(QIODevice &dst)
unsigned int m_max_frame_bytes
Definition: OpusEncoder.h:215
Kwave::ChannelMixer * m_channel_mixer
Definition: OpusEncoder.h:200
virtual bool encode(Kwave::MultiTrackReader &src, QIODevice &dst) Q_DECL_OVERRIDE
bool setupEncoder(QWidget *widget, unsigned int tracks, double rate)
Kwave::StreamObject * m_last_queue_element
Definition: OpusEncoder.h:231
bool setupCodingRate(QWidget *widget, unsigned int tracks, double rate)
unsigned int m_frame_size
Definition: OpusEncoder.h:206
virtual void close() Q_DECL_OVERRIDE
ogg_stream_state m_os
Definition: OpusEncoder.h:172
bool setupDownMix(QWidget *widget, unsigned int tracks, int bitrate)
unsigned char * m_packet_buffer
Definition: OpusEncoder.h:218
OpusMSEncoder * m_encoder
Definition: OpusEncoder.h:221
virtual bool open(QWidget *widget, const Kwave::FileInfo &info, Kwave::MultiTrackReader &src) Q_DECL_OVERRIDE
virtual ~OpusEncoder() Q_DECL_OVERRIDE
bool setupBitrateMode(QWidget *widget)
enum Kwave::OpusEncoder::@12 m_downmix