Krita Source Code Documentation
Loading...
Searching...
No Matches
KisAndroidMediaEncoderRunnable.h
Go to the documentation of this file.
1/*
2 * SPDX-License-Identifier: GPL-3.0-or-later
3 */
4#ifndef KISANDROIDMEDIAENCODERRUNNABLE
5#define KISANDROIDMEDIAENCODERRUNNABLE
6
8#include <QWidget>
9
10class QComboBox;
11class QSpinBox;
12
14{
15public:
17 QObject *parent = nullptr);
18
19 static void getSupportedFormats(QVector<KisMediaEncoderFormat *> &outSupportedFormats);
20
21protected:
23
24 EncodeResult encode(QString &outErrorMessage) override;
25
26private:
27 static constexpr int DRAIN_END_OF_STREAM = -1;
28 static constexpr int DRAIN_ERROR = -2;
29 static constexpr int DRAIN_CANCELLED = -3;
30 // Keep these formats in sync with VideoEncoder.java!
31 static constexpr int FORMAT_MP4_H264 = 0;
32 static constexpr int FORMAT_WEBM_VP8 = 1;
33 static constexpr int FORMAT_MP4_AV1 = 2;
34 // These statuses too!
35 static constexpr int STATUS_OK = 0;
36 static constexpr int STATUS_TIMEOUT = 1;
37 static constexpr int STATUS_END_OF_STREAM = 2;
38 static constexpr int STATUS_NEEDS_COPY = 3;
39 static constexpr int STATUS_ERROR_START_ENCODER = 104;
40 static constexpr int STATUS_ERROR_DRAIN_MUXER_ADD_TRACK = 404;
41
42 struct EncoderImage;
43 class Format;
44 class Context;
45
47
48 // Returns number of frames drained or one of the DRAIN_* values above.
49 int drain(Context &ctx, long long initialTimeout);
50
51 bool copyTemporaryToOutputFile(Context &ctx, const QString &tempPath, const QString &outputPath);
52
53 static bool readEncoderImage(Context &ctx, EncoderImage &outImage);
54 static bool readPlaneBuffer(Context &ctx, int index, uint8_t *&outBuffer);
55 static bool readPlaneRowStride(Context &ctx, int index, int &outRowStride);
56 static bool readPlanePixelStride(Context &ctx, int index, int &outPixelStride);
57
58 static void checkFormatSupport(Context &ctx, int formatId, QVector<KisMediaEncoderFormat *> &outSupportedFormats);
59};
60
62{
63 Q_OBJECT
64public:
65 explicit KisAndroidMediaEncoderPreferencesWidget(QWidget *parent = nullptr);
66
67 void addEncoderOption(const QString &title, const QString &key);
68
69 QString encoder() const;
70 void setEncoder(const QString &key);
71
72 int bitrate() const;
73 void setBitrate(int bitrate);
74
75private:
76 QComboBox *m_cmbEncoder;
77 QSpinBox *m_intBitrate;
78};
79
80#endif
void addEncoderOption(const QString &title, const QString &key)
static void checkFormatSupport(Context &ctx, int formatId, QVector< KisMediaEncoderFormat * > &outSupportedFormats)
int drain(Context &ctx, long long initialTimeout)
static bool readEncoderImage(Context &ctx, EncoderImage &outImage)
bool copyTemporaryToOutputFile(Context &ctx, const QString &tempPath, const QString &outputPath)
static void getSupportedFormats(QVector< KisMediaEncoderFormat * > &outSupportedFormats)
static bool readPlaneBuffer(Context &ctx, int index, uint8_t *&outBuffer)
KisAndroidMediaEncoderRunnable(const KisMediaEncoderWrapperSettings &settings, QObject *parent)
static bool readPlaneRowStride(Context &ctx, int index, int &outRowStride)
static KisAndroidMediaEncoderRunnable * create(const KisMediaEncoderWrapperSettings &settings, QObject *parent=nullptr)
static bool readPlanePixelStride(Context &ctx, int index, int &outPixelStride)
EncodeResult encode(QString &outErrorMessage) override
const KisMediaEncoderWrapperSettings settings()