Sayonara Player
Loading...
Searching...
No Matches
ConverterFactory.h
1/* ConverterFactory.h */
2/*
3 * Copyright (C) 2011-2024 Michael Lugmair
4 *
5 * This file is part of sayonara player
6 *
7 * This program is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * (at your option) any later version.
11
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16
17 * You should have received a copy of the GNU General Public License
18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
19 */
20#ifndef SAYONARA_PLAYER_CONVERTERFACTORY_H
21#define SAYONARA_PLAYER_CONVERTERFACTORY_H
22
23#include "Utils/Pimpl.h"
24
26class Converter;
28{
29 PIMPL(ConverterFactory)
30
31 public:
32 enum class ConvertType :
33 uint8_t
34 {
35 OggVorbis = 0,
36 OggOpus,
37 Lame
38 };
39
40 enum class Bitrate :
41 uint8_t
42 {
43 Constant = 0,
44 Variable
45 };
46
47 ConverterFactory(PlaylistAccessor* playlistAccessor);
49
50 template<ConvertType t, typename...Args>
51 typename std::enable_if<t == ConvertType::OggVorbis, Converter*>::type
52 createConverter(Args&& ...args)
53 {
54 return finalizeConverter(createOggConverter(args...));
55 }
56
57 template<ConvertType t, typename...Args>
58 typename std::enable_if<t == ConvertType::Lame || t == ConvertType::OggOpus, Converter*>::type
59 createConverter(Args&& ...args)
60 {
61 if(t == ConvertType::Lame)
62 {
63 return finalizeConverter(createLameConverter(args...));
64 }
65
66 else if(t == ConvertType::OggOpus)
67 {
68 return finalizeConverter(createOpusConverter(args...));
69 }
70
71 else
72 {
73 return nullptr;
74 }
75 }
76
77 private:
78 Converter* createOggConverter(int quality);
79 Converter* createLameConverter(Bitrate cbr, int quality);
80 Converter* createOpusConverter(Bitrate cbr, int quality);
81
82 Converter* finalizeConverter(Converter* converter);
83};
84
85#endif //SAYONARA_PLAYER_CONVERTERFACTORY_H
Definition ConverterFactory.h:28
Definition Converter.h:33
Definition PlaylistInterface.h:40