File indexing completed on 2024-04-21 04:48:15

0001 /* AUDEX CDDA EXTRACTOR
0002  * SPDX-FileCopyrightText: Copyright (C) 2007 Marco Nelles
0003  * <https://userbase.kde.org/Audex>
0004  *
0005  * SPDX-License-Identifier: GPL-3.0-or-later
0006  */
0007 
0008 #ifndef ENCODERASSISTANT_H
0009 #define ENCODERASSISTANT_H
0010 
0011 #include <QMap>
0012 #include <QString>
0013 #include <QStringList>
0014 
0015 #include <KLocalizedString>
0016 #include <KProcess>
0017 
0018 #include "utils/parameters.h"
0019 #include "utils/schemeparser.h"
0020 
0021 #define ENCODER_LAME_SUFFIX_KEY "suffix"
0022 #define ENCODER_LAME_PRESET_KEY "preset"
0023 #define ENCODER_LAME_PRESET_MEDIUM 0
0024 #define ENCODER_LAME_PRESET_STANDARD 1
0025 #define ENCODER_LAME_PRESET_EXTREME 2
0026 #define ENCODER_LAME_PRESET_INSANE 3
0027 #define ENCODER_LAME_PRESET_CUSTOM 4
0028 #define ENCODER_LAME_CBR_KEY "cbr"
0029 #define ENCODER_LAME_BITRATE_KEY "bitrate"
0030 #define ENCODER_LAME_EMBED_COVER_KEY "embed_cover"
0031 
0032 #define ENCODER_OGGENC_SUFFIX_KEY "suffix"
0033 #define ENCODER_OGGENC_QUALITY_KEY "quality"
0034 #define ENCODER_OGGENC_MINBITRATE_KEY "minbitrate"
0035 #define ENCODER_OGGENC_MINBITRATE_VALUE_KEY "minbitrate_value"
0036 #define ENCODER_OGGENC_MAXBITRATE_KEY "maxbitrate"
0037 #define ENCODER_OGGENC_MAXBITRATE_VALUE_KEY "maxbitrate_value"
0038 
0039 #define ENCODER_OPUSENC_SUFFIX_KEY "suffix"
0040 #define ENCODER_OPUSENC_BITRATE_KEY "bitrate"
0041 #define ENCODER_OPUSENC_EMBED_COVER_KEY "embed_cover"
0042 
0043 #define ENCODER_FLAC_SUFFIX_KEY "suffix"
0044 #define ENCODER_FLAC_COMPRESSION_KEY "compression"
0045 #define ENCODER_FLAC_EMBED_COVER_KEY "embed_cover"
0046 
0047 #define ENCODER_FAAC_SUFFIX_KEY "suffix"
0048 #define ENCODER_FAAC_QUALITY_KEY "quality"
0049 #define ENCODER_FAAC_EMBED_COVER_KEY "embed_cover"
0050 
0051 #define ENCODER_WAVE_SUFFIX_KEY "suffix"
0052 
0053 #define ENCODER_CUSTOM_SUFFIX_KEY "suffix"
0054 #define ENCODER_CUSTOM_COMMAND_SCHEME_KEY "command_scheme"
0055 
0056 /******************/
0057 /* default values */
0058 /******************/
0059 #define ENCODER_LAME_NAME i18n("MP3")
0060 #define ENCODER_LAME_ENCODER_NAME "LAME"
0061 #define ENCODER_LAME_ICON "audio-mpeg"
0062 #define ENCODER_LAME_BIN "lame"
0063 #define ENCODER_LAME_VERSION_PARA "--version"
0064 #define ENCODER_LAME_SUFFIX "mp3"
0065 #define ENCODER_LAME_MAX_EMBED_COVER_SIZE 128 * 1024
0066 #define ENCODER_LAME_EMBED_COVER true
0067 
0068 /* preset quality */
0069 #define ENCODER_LAME_PRESET 2
0070 #define ENCODER_LAME_CBR false
0071 #define ENCODER_LAME_BITRATE 224
0072 
0073 #define ENCODER_OGGENC_NAME i18n("Ogg Vorbis")
0074 #define ENCODER_OGGENC_ENCODER_NAME "OGGENC"
0075 #define ENCODER_OGGENC_ICON "audio-x-vorbis+ogg"
0076 #define ENCODER_OGGENC_BIN "oggenc"
0077 #define ENCODER_OGGENC_VERSION_PARA "--version"
0078 #define ENCODER_OGGENC_SUFFIX "ogg"
0079 
0080 /* preset quality */
0081 #define ENCODER_OGGENC_QUALITY 6
0082 #define ENCODER_OGGENC_MINBITRATE false
0083 #define ENCODER_OGGENC_MINBITRATE_VALUE 80
0084 #define ENCODER_OGGENC_MAXBITRATE false
0085 #define ENCODER_OGGENC_MAXBITRATE_VALUE 320
0086 
0087 #define ENCODER_OPUSENC_NAME i18n("Opus")
0088 #define ENCODER_OPUSENC_ENCODER_NAME "OPUSENC"
0089 #define ENCODER_OPUSENC_ICON "audio-x-opus"
0090 #define ENCODER_OPUSENC_BIN "opusenc"
0091 #define ENCODER_OPUSENC_VERSION_PARA "--version"
0092 #define ENCODER_OPUSENC_SUFFIX "opus"
0093 #define ENCODER_OPUSENC_EMBED_COVER true
0094 
0095 /* preset quality */
0096 #define ENCODER_OPUSENC_BITRATE 128
0097 
0098 #define ENCODER_FLAC_NAME i18n("FLAC (Lossless)")
0099 #define ENCODER_FLAC_ENCODER_NAME "FLAC"
0100 #define ENCODER_FLAC_ICON "audio-x-flac"
0101 #define ENCODER_FLAC_BIN "flac"
0102 #define ENCODER_FLAC_VERSION_PARA "-v"
0103 #define ENCODER_FLAC_SUFFIX "flac"
0104 
0105 #define ENCODER_FLAC_COMPRESSION 8
0106 #define ENCODER_FLAC_EMBED_COVER true
0107 
0108 #define ENCODER_FAAC_NAME i18n("MP4 (AAC)")
0109 #define ENCODER_FAAC_ENCODER_NAME "FAAC"
0110 #define ENCODER_FAAC_ICON "audio-mp4"
0111 #define ENCODER_FAAC_BIN "faac"
0112 #define ENCODER_FAAC_VERSION_PARA "--help"
0113 #define ENCODER_FAAC_SUFFIX "mp4"
0114 #define ENCODER_FAAC_EMBED_COVER true
0115 
0116 /* preset quality */
0117 #define ENCODER_FAAC_QUALITY 160
0118 
0119 #define ENCODER_WAVE_NAME i18n("WAVE (Raw Uncompressed)")
0120 #define ENCODER_WAVE_ENCODER_NAME "WAVE"
0121 #define ENCODER_WAVE_ICON "audio-x-wav"
0122 #define ENCODER_WAVE_BIN "mv"
0123 #define ENCODER_WAVE_VERSION_PARA "--help"
0124 #define ENCODER_WAVE_SUFFIX "wav"
0125 
0126 #define ENCODER_CUSTOM_NAME i18n("Custom")
0127 #define ENCODER_CUSTOM_ENCODER_NAME i18n("Custom")
0128 #define ENCODER_CUSTOM_ICON "audio-x-generic"
0129 #define ENCODER_CUSTOM_BIN ""
0130 #define ENCODER_CUSTOM_VERSION_PARA ""
0131 #define ENCODER_CUSTOM_SUFFIX ""
0132 #define ENCODER_CUSTOM_COMMAND_SCHEME ""
0133 
0134 #define ENCODER_NUM 6
0135 
0136 namespace EncoderAssistant
0137 {
0138 enum Encoder { LAME = 0, OGGENC, OPUSENC, FLAC, FAAC, WAVE, CUSTOM, NUM };
0139 
0140 const QString name(const Encoder encoder);
0141 const QString encoderName(const Encoder encoder);
0142 const QString icon(const Encoder encoder);
0143 
0144 bool available(const Encoder encoder);
0145 bool canEmbedCover(const Encoder encoder, int *maxCoverSize = nullptr);
0146 const QString version(const Encoder encoder);
0147 long versionNumber(const Encoder encoder);
0148 const QString scheme(const Encoder encoder, const Parameters &parameters);
0149 
0150 Parameters stdParameters(const Encoder encoder);
0151 
0152 const QMap<int, QString> encoderList();
0153 const QMap<int, QString> availableEncoderNameList();
0154 const QMap<int, QString> availableEncoderNameListWithVersions();
0155 
0156 };
0157 
0158 #endif