Krita Source Code Documentation
Loading...
Searching...
No Matches
KisAndroidMediaEncoderRunnable::Format Class Reference
+ Inheritance diagram for KisAndroidMediaEncoderRunnable::Format:

Classes

struct  Encoder
 

Public Member Functions

int audioSampleRate () const
 
QWidget * createPreferencesWidget (const QVariantMap &preferences) const override
 
QString extension () const override
 
 Format (int formatId, const QVector< Encoder > &videoEncoders, const QVector< Encoder > &audioEncoders)
 
int formatId () const
 
int getAudioBitratePreference (const QVariantMap &preferences) const
 
QString getAudioEncoderPreference (const QVariantMap &preferences) const
 
QVariantMap getPreferencesFromWidget (QWidget *widget) const override
 
int getVideoBitratePreference (const QVariantMap &preferences) const
 
QString getVideoEncoderPreference (const QVariantMap &preferences) const
 
QString key () const override
 
void resetPreferencesWidget (QWidget *widget) const override
 
bool supportsAudio () const override
 
QString title () const override
 
Type type () const override
 
- Public Member Functions inherited from KisMediaEncoderFormat
virtual ~KisMediaEncoderFormat ()=default
 

Private Member Functions

void applyPreferencesToWidget (KisAndroidMediaEncoderPreferencesWidget *pw, const QVariantMap &preferences) const
 

Static Private Member Functions

static int defaultAudioBitrateForFormatId (int formatId)
 
static int defaultVideoBitrateForFormatId (int formatId)
 
static QString extensionForFormatId (int formatId)
 
static void fillEncoders (QVector< Encoder > &outEncoders, const QVector< Encoder > &encoders)
 
static QString keyForFormatId (int formatId)
 
static QString makeEncoderTitle (const Encoder &encoder)
 
static QString titleForFormatId (int formatId)
 

Private Attributes

QVector< Encoderm_audioEncoders
 
int m_formatId
 
QVector< Encoderm_videoEncoders
 

Additional Inherited Members

- Public Types inherited from KisMediaEncoderFormat
enum class  Type { AndroidMediaEncoder , LibavMediaEncoder }
 
- Protected Member Functions inherited from KisMediaEncoderFormat
 KisMediaEncoderFormat ()=default
 

Detailed Description

Definition at line 51 of file KisAndroidMediaEncoderRunnable.cpp.

Constructor & Destructor Documentation

◆ Format()

KisAndroidMediaEncoderRunnable::Format::Format ( int formatId,
const QVector< Encoder > & videoEncoders,
const QVector< Encoder > & audioEncoders )
inline

Member Function Documentation

◆ applyPreferencesToWidget()

void KisAndroidMediaEncoderRunnable::Format::applyPreferencesToWidget ( KisAndroidMediaEncoderPreferencesWidget * pw,
const QVariantMap & preferences ) const
inlineprivate

Definition at line 216 of file KisAndroidMediaEncoderRunnable.cpp.

217 {
220 if (supportsAudio()) {
223 }
224 }
QString getAudioEncoderPreference(const QVariantMap &preferences) const
int getVideoBitratePreference(const QVariantMap &preferences) const
int getAudioBitratePreference(const QVariantMap &preferences) const
QString getVideoEncoderPreference(const QVariantMap &preferences) const

References getAudioBitratePreference(), getAudioEncoderPreference(), getVideoBitratePreference(), getVideoEncoderPreference(), KisAndroidMediaEncoderPreferencesWidget::setAudioBitrate(), KisAndroidMediaEncoderPreferencesWidget::setAudioEncoder(), KisAndroidMediaEncoderPreferencesWidget::setVideoBitrate(), KisAndroidMediaEncoderPreferencesWidget::setVideoEncoder(), and supportsAudio().

◆ audioSampleRate()

int KisAndroidMediaEncoderRunnable::Format::audioSampleRate ( ) const
inline

Definition at line 174 of file KisAndroidMediaEncoderRunnable.cpp.

175 {
176 // While creating an audio track on Android lets you pass it a sample
177 // rate, that doesn't actually give you an audio track with the given
178 // sample rate. For WEBM with Vorbis, you always get a 48kHz track. MP4
179 // with AAC seems more forgiving, but let's go with known good values.
180 switch (m_formatId) {
181 case FORMAT_MP4_H264:
182 case FORMAT_MP4_AV1:
183 return 44100;
184 case FORMAT_WEBM_VP8:
185 return 48000;
186 }
187 return 44100;
188 }

References KisAndroidMediaEncoderRunnable::FORMAT_MP4_AV1, KisAndroidMediaEncoderRunnable::FORMAT_MP4_H264, KisAndroidMediaEncoderRunnable::FORMAT_WEBM_VP8, and m_formatId.

◆ createPreferencesWidget()

QWidget * KisAndroidMediaEncoderRunnable::Format::createPreferencesWidget ( const QVariantMap & preferences) const
inlineoverridevirtual

Implements KisMediaEncoderFormat.

Definition at line 97 of file KisAndroidMediaEncoderRunnable.cpp.

98 {
100
101 for (const Encoder &videoEncoder : m_videoEncoders) {
102 pw->addVideoEncoderOption(makeEncoderTitle(videoEncoder), videoEncoder.name);
103 }
104
105 for (const Encoder &audioEncoder : m_audioEncoders) {
106 pw->addAudioEncoderOption(makeEncoderTitle(audioEncoder), audioEncoder.name);
107 }
108
109 applyPreferencesToWidget(pw, preferences);
110 return pw;
111 }
void addAudioEncoderOption(const QString &title, const QString &key)
void addVideoEncoderOption(const QString &title, const QString &key)
static QString makeEncoderTitle(const Encoder &encoder)
void applyPreferencesToWidget(KisAndroidMediaEncoderPreferencesWidget *pw, const QVariantMap &preferences) const

References KisAndroidMediaEncoderPreferencesWidget::addAudioEncoderOption(), KisAndroidMediaEncoderPreferencesWidget::addVideoEncoderOption(), applyPreferencesToWidget(), m_audioEncoders, m_videoEncoders, and makeEncoderTitle().

◆ defaultAudioBitrateForFormatId()

static int KisAndroidMediaEncoderRunnable::Format::defaultAudioBitrateForFormatId ( int formatId)
inlinestaticprivate

Definition at line 277 of file KisAndroidMediaEncoderRunnable.cpp.

278 {
279 switch (formatId) {
280 case FORMAT_MP4_H264:
281 case FORMAT_MP4_AV1:
282 return 128000;
283 case FORMAT_WEBM_VP8:
284 return 96000;
285 }
286 return 128000;
287 }

References KisAndroidMediaEncoderRunnable::FORMAT_MP4_AV1, KisAndroidMediaEncoderRunnable::FORMAT_MP4_H264, KisAndroidMediaEncoderRunnable::FORMAT_WEBM_VP8, and formatId().

◆ defaultVideoBitrateForFormatId()

static int KisAndroidMediaEncoderRunnable::Format::defaultVideoBitrateForFormatId ( int formatId)
inlinestaticprivate

Definition at line 264 of file KisAndroidMediaEncoderRunnable.cpp.

265 {
266 switch (formatId) {
267 case FORMAT_MP4_H264:
268 return 6000000;
269 case FORMAT_WEBM_VP8:
270 return 7000000;
271 case FORMAT_MP4_AV1:
272 return 3200000;
273 }
274 return 6000000;
275 }

References KisAndroidMediaEncoderRunnable::FORMAT_MP4_AV1, KisAndroidMediaEncoderRunnable::FORMAT_MP4_H264, KisAndroidMediaEncoderRunnable::FORMAT_WEBM_VP8, and formatId().

◆ extension()

QString KisAndroidMediaEncoderRunnable::Format::extension ( ) const
inlineoverridevirtual

Implements KisMediaEncoderFormat.

Definition at line 87 of file KisAndroidMediaEncoderRunnable.cpp.

88 {
90 }

References extensionForFormatId(), and m_formatId.

◆ extensionForFormatId()

static QString KisAndroidMediaEncoderRunnable::Format::extensionForFormatId ( int formatId)
inlinestaticprivate

Definition at line 252 of file KisAndroidMediaEncoderRunnable.cpp.

253 {
254 switch (formatId) {
255 case FORMAT_MP4_H264:
256 case FORMAT_MP4_AV1:
257 return QStringLiteral("mp4");
258 case FORMAT_WEBM_VP8:
259 return QStringLiteral("webm");
260 }
261 return QString();
262 }

References KisAndroidMediaEncoderRunnable::FORMAT_MP4_AV1, KisAndroidMediaEncoderRunnable::FORMAT_MP4_H264, KisAndroidMediaEncoderRunnable::FORMAT_WEBM_VP8, and formatId().

◆ fillEncoders()

static void KisAndroidMediaEncoderRunnable::Format::fillEncoders ( QVector< Encoder > & outEncoders,
const QVector< Encoder > & encoders )
inlinestaticprivate

Definition at line 191 of file KisAndroidMediaEncoderRunnable.cpp.

192 {
193 // Prefer software encoders, because hardware encoders are often busted.
194 outEncoders.reserve(encoders.size());
195 for (const Encoder &encoder : encoders) {
196 if (!encoder.hardware) {
197 outEncoders.append(encoder);
198 }
199 }
200 for (const Encoder &encoder : encoders) {
201 if (encoder.hardware) {
202 outEncoders.append(encoder);
203 }
204 }
205 }
Encoder * encoder(Imf::OutputFile &file, const ExrPaintLayerSaveInfo &info, int width)

References encoder(), and KisAndroidMediaEncoderRunnable::Format::Encoder::hardware.

◆ formatId()

int KisAndroidMediaEncoderRunnable::Format::formatId ( ) const
inline

Definition at line 67 of file KisAndroidMediaEncoderRunnable.cpp.

68 {
69 return m_formatId;
70 }

References m_formatId.

◆ getAudioBitratePreference()

int KisAndroidMediaEncoderRunnable::Format::getAudioBitratePreference ( const QVariantMap & preferences) const
inline

Definition at line 164 of file KisAndroidMediaEncoderRunnable.cpp.

165 {
166 int audioBitrate = preferences.value(QStringLiteral("abitrate")).toInt();
167 if (audioBitrate <= 0) {
169 } else {
170 return audioBitrate;
171 }
172 }
QAction * preferences(const QObject *recvr, const char *slot, QObject *parent)

References defaultAudioBitrateForFormatId(), and m_formatId.

◆ getAudioEncoderPreference()

QString KisAndroidMediaEncoderRunnable::Format::getAudioEncoderPreference ( const QVariantMap & preferences) const
inline

Definition at line 154 of file KisAndroidMediaEncoderRunnable.cpp.

155 {
156 QString audioEncoder = preferences.value(QStringLiteral("aencoder")).toString();
157 if (audioEncoder.isEmpty() && !m_videoEncoders.isEmpty()) {
158 return m_audioEncoders.constFirst().name;
159 } else {
160 return audioEncoder;
161 }
162 }

References m_audioEncoders, and m_videoEncoders.

◆ getPreferencesFromWidget()

QVariantMap KisAndroidMediaEncoderRunnable::Format::getPreferencesFromWidget ( QWidget * widget) const
inlineoverridevirtual

Implements KisMediaEncoderFormat.

Definition at line 120 of file KisAndroidMediaEncoderRunnable.cpp.

121 {
122 QVariantMap preferences;
123 KisAndroidMediaEncoderPreferencesWidget *pw = qobject_cast<KisAndroidMediaEncoderPreferencesWidget *>(widget);
125 preferences.insert(QStringLiteral("encoder"), pw->videoEncoder());
126 preferences.insert(QStringLiteral("bitrate"), pw->videoBitrate());
127 if (supportsAudio()) {
128 preferences.insert(QStringLiteral("aencoder"), pw->audioEncoder());
129 preferences.insert(QStringLiteral("abitrate"), pw->audioBitrate());
130 }
131 return preferences;
132 }
#define KIS_SAFE_ASSERT_RECOVER_RETURN_VALUE(cond, val)
Definition kis_assert.h:129

References KisAndroidMediaEncoderPreferencesWidget::audioBitrate(), KisAndroidMediaEncoderPreferencesWidget::audioEncoder(), KIS_SAFE_ASSERT_RECOVER_RETURN_VALUE, supportsAudio(), KisAndroidMediaEncoderPreferencesWidget::videoBitrate(), and KisAndroidMediaEncoderPreferencesWidget::videoEncoder().

◆ getVideoBitratePreference()

int KisAndroidMediaEncoderRunnable::Format::getVideoBitratePreference ( const QVariantMap & preferences) const
inline

Definition at line 144 of file KisAndroidMediaEncoderRunnable.cpp.

145 {
146 int videoBitrate = preferences.value(QStringLiteral("bitrate")).toInt();
147 if (videoBitrate <= 0) {
149 } else {
150 return videoBitrate;
151 }
152 }

References defaultVideoBitrateForFormatId(), and m_formatId.

◆ getVideoEncoderPreference()

QString KisAndroidMediaEncoderRunnable::Format::getVideoEncoderPreference ( const QVariantMap & preferences) const
inline

Definition at line 134 of file KisAndroidMediaEncoderRunnable.cpp.

135 {
136 QString videoEncoder = preferences.value(QStringLiteral("encoder")).toString();
137 if (videoEncoder.isEmpty() && !m_videoEncoders.isEmpty()) {
138 return m_videoEncoders.constFirst().name;
139 } else {
140 return videoEncoder;
141 }
142 }

References m_videoEncoders.

◆ key()

QString KisAndroidMediaEncoderRunnable::Format::key ( ) const
inlineoverridevirtual

Implements KisMediaEncoderFormat.

Definition at line 77 of file KisAndroidMediaEncoderRunnable.cpp.

78 {
80 }

References keyForFormatId(), and m_formatId.

◆ keyForFormatId()

static QString KisAndroidMediaEncoderRunnable::Format::keyForFormatId ( int formatId)
inlinestaticprivate

Definition at line 226 of file KisAndroidMediaEncoderRunnable.cpp.

227 {
228 switch (formatId) {
229 case FORMAT_MP4_H264:
230 return QStringLiteral("android:mp4:h264");
231 case FORMAT_WEBM_VP8:
232 return QStringLiteral("android:webm:vp8");
233 case FORMAT_MP4_AV1:
234 return QStringLiteral("android:mp4:av1");
235 }
236 return QString();
237 }

References KisAndroidMediaEncoderRunnable::FORMAT_MP4_AV1, KisAndroidMediaEncoderRunnable::FORMAT_MP4_H264, KisAndroidMediaEncoderRunnable::FORMAT_WEBM_VP8, and formatId().

◆ makeEncoderTitle()

static QString KisAndroidMediaEncoderRunnable::Format::makeEncoderTitle ( const Encoder & encoder)
inlinestaticprivate

Definition at line 207 of file KisAndroidMediaEncoderRunnable.cpp.

208 {
209 if (encoder.hardware) {
210 return i18n("%1 (hardware)", encoder.name);
211 } else {
212 return i18n("%1 (software)", encoder.name);
213 }
214 }

References encoder(), KisAndroidMediaEncoderRunnable::Format::Encoder::hardware, and KisAndroidMediaEncoderRunnable::Format::Encoder::name.

◆ resetPreferencesWidget()

void KisAndroidMediaEncoderRunnable::Format::resetPreferencesWidget ( QWidget * widget) const
inlineoverridevirtual

Implements KisMediaEncoderFormat.

Definition at line 113 of file KisAndroidMediaEncoderRunnable.cpp.

114 {
115 KisAndroidMediaEncoderPreferencesWidget *pw = qobject_cast<KisAndroidMediaEncoderPreferencesWidget *>(widget);
117 applyPreferencesToWidget(pw, QVariantMap());
118 }
#define KIS_SAFE_ASSERT_RECOVER_RETURN(cond)
Definition kis_assert.h:128

References applyPreferencesToWidget(), and KIS_SAFE_ASSERT_RECOVER_RETURN.

◆ supportsAudio()

bool KisAndroidMediaEncoderRunnable::Format::supportsAudio ( ) const
inlineoverridevirtual

Implements KisMediaEncoderFormat.

Definition at line 92 of file KisAndroidMediaEncoderRunnable.cpp.

93 {
94 return !m_audioEncoders.isEmpty();
95 }

References m_audioEncoders.

◆ title()

QString KisAndroidMediaEncoderRunnable::Format::title ( ) const
inlineoverridevirtual

Implements KisMediaEncoderFormat.

Definition at line 82 of file KisAndroidMediaEncoderRunnable.cpp.

83 {
84 return i18n("Android: %1", titleForFormatId(m_formatId));
85 }

References m_formatId, and titleForFormatId().

◆ titleForFormatId()

static QString KisAndroidMediaEncoderRunnable::Format::titleForFormatId ( int formatId)
inlinestaticprivate

Definition at line 239 of file KisAndroidMediaEncoderRunnable.cpp.

240 {
241 switch (formatId) {
242 case FORMAT_MP4_H264:
243 return QStringLiteral("MP4/H.264");
244 case FORMAT_WEBM_VP8:
245 return QStringLiteral("WEBM/VP8");
246 case FORMAT_MP4_AV1:
247 return QStringLiteral("MP4/AV1");
248 }
249 return QString();
250 }

References KisAndroidMediaEncoderRunnable::FORMAT_MP4_AV1, KisAndroidMediaEncoderRunnable::FORMAT_MP4_H264, KisAndroidMediaEncoderRunnable::FORMAT_WEBM_VP8, and formatId().

◆ type()

Type KisAndroidMediaEncoderRunnable::Format::type ( ) const
inlineoverridevirtual

Member Data Documentation

◆ m_audioEncoders

QVector<Encoder> KisAndroidMediaEncoderRunnable::Format::m_audioEncoders
private

Definition at line 290 of file KisAndroidMediaEncoderRunnable.cpp.

◆ m_formatId

int KisAndroidMediaEncoderRunnable::Format::m_formatId
private

Definition at line 291 of file KisAndroidMediaEncoderRunnable.cpp.

◆ m_videoEncoders

QVector<Encoder> KisAndroidMediaEncoderRunnable::Format::m_videoEncoders
private

Definition at line 289 of file KisAndroidMediaEncoderRunnable.cpp.


The documentation for this class was generated from the following file: