Sayonara Player
ConverterFactory.h
1/* ConverterFactory.h */
2/*
3 * Copyright (C) 2011-2021 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 : uint8_t
33 {
34 OggVorbis = 0,
35 OggOpus,
36 Lame
37 };
38
39 enum class Bitrate : uint8_t
40 {
41 Constant = 0,
42 Variable
43 };
44
45 ConverterFactory(PlaylistAccessor* playlistAccessor);
47
48 template<ConvertType t, typename...Args>
49 typename std::enable_if<t == ConvertType::OggVorbis, Converter*>::type
50 createConverter(Args&& ...args)
51 {
52 return finalizeConverter(createOggConverter(args...));
53 }
54
55 template<ConvertType t, typename...Args>
56 typename std::enable_if<t == ConvertType::Lame || t == ConvertType::OggOpus, Converter*>::type
57 createConverter(Args&& ...args)
58 {
59 if(t == ConvertType::Lame)
60 {
61 return finalizeConverter(createLameConverter(args...));
62 }
63
64 else if(t == ConvertType::OggOpus)
65 {
66 return finalizeConverter(createOpusConverter(args...));
67 }
68
69 else
70 {
71 return nullptr;
72 }
73 }
74
75 private:
76 Converter* createOggConverter(int quality);
77 Converter* createLameConverter(Bitrate cbr, int quality);
78 Converter* createOpusConverter(Bitrate cbr, int quality);
79
80 Converter* finalizeConverter(Converter* converter);
81};
82
83#endif //SAYONARA_PLAYER_CONVERTERFACTORY_H
Definition: ConverterFactory.h:28
Definition: Converter.h:33
Definition: PlaylistInterface.h:39