1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
|
#pragma once
#include "audio/types.h"
#include "encoder/encodercallback.h"
#include "encoder/encoderrecordingsettings.h"
#include "encoder/encodersettings.h"
#include "preferences/usersettings.h"
#include "util/memory.h"
#include "util/types.h"
class Encoder {
public:
class Format {
public:
Format(const QString& labelIn,
const QString& nameIn,
bool losslessIn,
const QString& fileExtIn)
: label(labelIn),
internalName(nameIn),
lossless(losslessIn),
fileExtension(fileExtIn) {
}
QString label;
QString internalName;
bool lossless;
QString fileExtension;
};
Encoder() {}
virtual ~Encoder() = default;
virtual int initEncoder(mixxx::audio::SampleRate sampleRate, QString* pUserErrorMessage) = 0;
// encodes the provided buffer of audio.
virtual void encodeBuffer(const CSAMPLE *samples, const int size) = 0;
// Adds metadata to the encoded audio, i.e., the ID3 tag. Currently only used
// by EngineRecord, ShoutConnection does something different.
virtual void updateMetaData(const QString& artist, const QString& title, const QString& album) = 0;
// called at the end when encoding is finished
virtual void flush() = 0;
// Setup the encoder with the specific settings
virtual void setEncoderSettings(const EncoderSettings& settings) = 0;
};
typedef std::shared_ptr<Encoder> EncoderPointer;
class EncoderFactory {
private:
EncoderFactory();
public:
static const EncoderFactory& getFactory();
const QList<Encoder::Format> getFormats() const;
Encoder::Format getSelectedFormat(UserSettingsPointer pConfig) const;
Encoder::Format getFormatFor(const QString& format) const;
EncoderPointer createRecordingEncoder(
const Encoder::Format& format,
UserSettingsPointer pConfig,
EncoderCallback* pCallback) const;
EncoderPointer createEncoder(
EncoderSettingsPointer pSettings,
EncoderCallback* pCallback) const;
EncoderRecordingSettingsPointer getEncoderRecordingSettings(
Encoder::Format format,
UserSettingsPointer pConfig) const;
private:
static EncoderFactory factory;
QList<Encoder::Format> m_formats;
};
|