aboutsummaryrefslogtreecommitdiff
path: root/Src/external_dependencies/openmpt-trunk/mptrack/StreamEncoderSettings.h
blob: c613b9193477a9a68554a1c25905f5cb66f58229 (plain) (blame)
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
/*
 * StreamEncoderSettings.h
 * -----------------------
 * Purpose: Exporting streamed music files.
 * Notes  : none
 * Authors: Joern Heusipp
 *          OpenMPT Devs
 * The OpenMPT source code is released under the BSD license. Read LICENSE for more details.
 */

#pragma once

#include "openmpt/all/BuildSettings.hpp"

#include "StreamEncoder.h"
#include "Settings.h"


OPENMPT_NAMESPACE_BEGIN



template<> inline SettingValue ToSettingValue(const Encoder::Mode &val)
{
	switch(val)
	{
	case Encoder::ModeCBR: return SettingValue(U_("CBR"), "Encoder::Mode"); break;
	case Encoder::ModeABR: return SettingValue(U_("ABR"), "Encoder::Mode"); break;
	case Encoder::ModeVBR: return SettingValue(U_("VBR"), "Encoder::Mode"); break;
	case Encoder::ModeQuality: return SettingValue(U_("Quality"), "Encoder::Mode"); break;
	case Encoder::ModeLossless: return SettingValue(U_("Lossless"), "Encoder::Mode"); break;
	default: return SettingValue(U_("Invalid"), "Encoder::Mode"); break;
	}
}
template<> inline Encoder::Mode FromSettingValue(const SettingValue &val)
{
	ASSERT(val.GetTypeTag() == "Encoder::Mode");
	if(val.as<mpt::ustring>() == U_("")) { return Encoder::ModeInvalid; }
	else if(val.as<mpt::ustring>() == U_("CBR")) { return Encoder::ModeCBR; }
	else if(val.as<mpt::ustring>() == U_("ABR")) { return Encoder::ModeABR; }
	else if(val.as<mpt::ustring>() == U_("VBR")) { return Encoder::ModeVBR; }
	else if(val.as<mpt::ustring>() == U_("Quality")) { return Encoder::ModeQuality; }
	else if(val.as<mpt::ustring>() == U_("Lossless")) { return Encoder::ModeLossless; }
	else { return Encoder::ModeInvalid; }
}


template<> inline SettingValue ToSettingValue(const Encoder::Format &val)
{
	return SettingValue(val.AsInt(), "Encoder::Format");
}
template<> inline Encoder::Format FromSettingValue(const SettingValue &val)
{
	MPT_ASSERT(val.GetTypeTag() == "Encoder::Format");
	return Encoder::Format::FromInt(val.as<int32>());
}


struct StoredTags
{
	Setting<mpt::ustring> artist;
	Setting<mpt::ustring> album;
	Setting<mpt::ustring> trackno;
	Setting<mpt::ustring> year;
	Setting<mpt::ustring> url;

	Setting<mpt::ustring> genre;

	StoredTags(SettingsContainer &conf);

};


struct EncoderSettingsConf
{

	Setting<bool> Cues;
	Setting<bool> Tags;

	Setting<uint32> Samplerate;
	Setting<uint16> Channels;

	Setting<Encoder::Mode> Mode;
	Setting<int> Bitrate;
	Setting<float> Quality;
	Setting<Encoder::Format> Format2;
	Setting<int> Dither;

	EncoderSettingsConf(SettingsContainer &conf, const mpt::ustring &encoderName, bool cues, bool tags, uint32 samplerate, uint16 channels, Encoder::Mode mode, int bitrate, float quality, Encoder::Format format, int dither);

	explicit operator Encoder::Settings() const;

};


struct StreamEncoderSettingsConf
{
	Setting<int32> FLACCompressionLevel;
	Setting<uint32> AUPaddingAlignHint;
	Setting<uint32> MP3ID3v2MinPadding;
	Setting<uint32> MP3ID3v2PaddingAlignHint;
	Setting<bool> MP3ID3v2WriteReplayGainTXXX;
	Setting<int32> MP3LameQuality;
	Setting<bool> MP3LameID3v2UseLame;
	Setting<bool> MP3LameCalculateReplayGain;
	Setting<bool> MP3LameCalculatePeakSample;
	Setting<int32> OpusComplexity;
	StreamEncoderSettingsConf(SettingsContainer &conf, const mpt::ustring &section);
	explicit operator Encoder::StreamSettings() const;
};


OPENMPT_NAMESPACE_END