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_VIDEO_ENCODER = 104;
40 static constexpr int STATUS_ERROR_START_AUDIO_FORMAT = 107;
41 static constexpr int STATUS_ERROR_START_AUDIO_ENCODER = 108;
42 static constexpr int STATUS_ERROR_DRAIN_VIDEO_MUXER_ADD_TRACK = 404;
43 static constexpr int STATUS_ERROR_DRAIN_AUDIO_MUXER_ADD_TRACK = 704;
44
45 struct EncoderImage;
46 class Format;
47 class Context;
48 class Audio;
49
52 EncodeResult prepare(Context &ctx, bool audio);
53
54 // Returns number of frames drained or one of the DRAIN_* values above.
55 int drainVideo(Context &ctx, long long initialTimeout);
56 int drainAudio(Context &ctx, long long initialTimeout);
57 int drain(Context &ctx, long long initialTimeout, bool audio);
58
59 static bool readEncoderImage(Context &ctx, EncoderImage &outImage);
60 static bool readPlaneBuffer(Context &ctx, int index, uint8_t *&outBuffer);
61 static bool readPlaneRowStride(Context &ctx, int index, int &outRowStride);
62 static bool readPlanePixelStride(Context &ctx, int index, int &outPixelStride);
63 static bool readAudioInputBuffer(Context &ctx, void *&outBuffer, int &outSize);
64
65 static void checkFormatSupport(Context &ctx, int formatId, QVector<KisMediaEncoderFormat *> &outSupportedFormats);
66};
67
69{
70 Q_OBJECT
71public:
72 explicit KisAndroidMediaEncoderPreferencesWidget(const KisMediaEncoderFormat *format, QWidget *parent = nullptr);
73
74 void addVideoEncoderOption(const QString &title, const QString &key);
75 void addAudioEncoderOption(const QString &title, const QString &key);
76
77 QString videoEncoder() const;
78 void setVideoEncoder(const QString &key);
79
80 int videoBitrate() const;
82
83 QString audioEncoder() const;
84 void setAudioEncoder(const QString &key);
85
86 int audioBitrate() const;
88
89private:
94};
95
96#endif
void addAudioEncoderOption(const QString &title, const QString &key)
void addVideoEncoderOption(const QString &title, const QString &key)
KisAndroidMediaEncoderPreferencesWidget(const KisMediaEncoderFormat *format, QWidget *parent=nullptr)
static void checkFormatSupport(Context &ctx, int formatId, QVector< KisMediaEncoderFormat * > &outSupportedFormats)
int drain(Context &ctx, long long initialTimeout, bool audio)
static constexpr int STATUS_ERROR_DRAIN_VIDEO_MUXER_ADD_TRACK
EncodeResult prepare(Context &ctx, bool audio)
static constexpr int STATUS_ERROR_DRAIN_AUDIO_MUXER_ADD_TRACK
static bool readEncoderImage(Context &ctx, EncoderImage &outImage)
static bool readAudioInputBuffer(Context &ctx, void *&outBuffer, int &outSize)
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)
int drainAudio(Context &ctx, long long initialTimeout)
int drainVideo(Context &ctx, long long initialTimeout)
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()