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

Public Member Functions

bool allocateImage (int outputWidth, int outputHeight, AVPixelFormat outputFormat)
 
bool checkException (const QString &title)
 
bool checkObject (const QString &title, QJniObject &obj)
 
bool checkResult (const QString &title, int result)
 
void clearEncoder ()
 
 Context (QString *outErrorMessage=nullptr)
 
QJniObject & encoder ()
 
QJniEnvironment & env ()
 
uint8_t ** imageBuffers ()
 
int imageFormat () const
 
int * imageLinesizes ()
 
void setEncoder (const QJniObject &encoder)
 
 ~Context () override
 
- Public Member Functions inherited from KisLibavEncoderContext
bool convertFrame (QImage &inOutImage, AVPixelFormat &outPixelFormat) const
 
SwsContext * getSwsContextFor (int inputWidth, int inputHeight, AVPixelFormat inputFormat, int outputWidth, int outputHeight, AVPixelFormat outputFormat, int flags)
 
int getSwsFlags (const QString &scaleFilter) const
 
 KisLibavEncoderContext (QString *outErrorMessage=nullptr)
 
void setErrorMessage (const QString &errorMessage)
 
void setInternalErrorMessage (const QString &detail)
 
virtual ~KisLibavEncoderContext ()
 

Static Private Member Functions

static bool isErrorResult (int result)
 

Private Attributes

QJniObject m_encoder
 
QJniEnvironment m_env
 
uint8_t * m_imageBuffers [4] = {nullptr, nullptr, nullptr, nullptr}
 
AVPixelFormat m_imageFormat = AV_PIX_FMT_NONE
 
int m_imageLinesizes [4] = {0, 0, 0, 0}
 

Detailed Description

Definition at line 294 of file KisAndroidMediaEncoderRunnable.cpp.

Constructor & Destructor Documentation

◆ Context()

KisAndroidMediaEncoderRunnable::Context::Context ( QString * outErrorMessage = nullptr)
inlineexplicit

Definition at line 297 of file KisAndroidMediaEncoderRunnable.cpp.

298 : KisLibavEncoderContext(outErrorMessage)
299 {
300 }
KisLibavEncoderContext(QString *outErrorMessage=nullptr)

◆ ~Context()

KisAndroidMediaEncoderRunnable::Context::~Context ( )
inlineoverride

Member Function Documentation

◆ allocateImage()

bool KisAndroidMediaEncoderRunnable::Context::allocateImage ( int outputWidth,
int outputHeight,
AVPixelFormat outputFormat )
inline

Definition at line 401 of file KisAndroidMediaEncoderRunnable.cpp.

402 {
403 // The Android encoder really shouldn't be changing
404 // pixel formats along the way, but just in case.
405 if (m_imageFormat != AV_PIX_FMT_NONE) {
406 m_imageFormat = AV_PIX_FMT_NONE;
407 av_freep(&m_imageBuffers[0]);
408 }
409
410 int result = av_image_alloc(m_imageBuffers, m_imageLinesizes, outputWidth, outputHeight, outputFormat, 32);
411 if (result >= 0) {
412 m_imageFormat = outputFormat;
413 return true;
414 } else {
415 setInternalErrorMessage(QStringLiteral("av_image_alloc error %1").arg(result));
416 return false;
417 }
418 }
void setInternalErrorMessage(const QString &detail)

References m_imageBuffers, m_imageFormat, m_imageLinesizes, and KisLibavEncoderContext::setInternalErrorMessage().

◆ checkException()

bool KisAndroidMediaEncoderRunnable::Context::checkException ( const QString & title)
inline

Definition at line 374 of file KisAndroidMediaEncoderRunnable.cpp.

375 {
376 if (m_env->ExceptionCheck()) {
377 setInternalErrorMessage(QStringLiteral("JNI exception in %1").arg(title));
378 m_env->ExceptionDescribe();
379 m_env->ExceptionClear();
380 return true;
381 } else {
382 return false;
383 }
384 }

References m_env, and KisLibavEncoderContext::setInternalErrorMessage().

◆ checkObject()

bool KisAndroidMediaEncoderRunnable::Context::checkObject ( const QString & title,
QJniObject & obj )
inline

Definition at line 335 of file KisAndroidMediaEncoderRunnable.cpp.

336 {
337 if (checkException(title)) {
338 return true;
339 } else if (!obj.isValid()) {
340 setInternalErrorMessage(QStringLiteral("JNI object %1 invalid").arg(title));
341 return true;
342 } else {
343 return false;
344 }
345 }

References checkException(), and KisLibavEncoderContext::setInternalErrorMessage().

◆ checkResult()

bool KisAndroidMediaEncoderRunnable::Context::checkResult ( const QString & title,
int result )
inline

Definition at line 347 of file KisAndroidMediaEncoderRunnable.cpp.

348 {
349 if (checkException(title)) {
350 return true;
351 } else if (result == STATUS_ERROR_START_VIDEO_ENCODER) {
352 warnFile << "Start video encoder error" << result;
353 setErrorMessage(i18n("Unsupported video parameters, try lowering the video FPS or size"));
354 return true;
355 } else if (result == STATUS_ERROR_START_AUDIO_FORMAT || result == STATUS_ERROR_START_AUDIO_ENCODER) {
356 warnFile << "Start audio encoder error" << result;
358 i18n("Unsupported audio parameters, try to re-encode your audio file with a more common sample format, "
359 "sampling rate and channel count"));
360 return true;
363 warnFile << "Muxer track error" << result;
364 setErrorMessage(i18n("Unsupported format"));
365 return true;
366 } else if (isErrorResult(result)) {
367 setInternalErrorMessage(QStringLiteral("%1 failed with code %2").arg(title).arg(result));
368 return true;
369 } else {
370 return false;
371 }
372 }
static constexpr int STATUS_ERROR_DRAIN_VIDEO_MUXER_ADD_TRACK
static constexpr int STATUS_ERROR_DRAIN_AUDIO_MUXER_ADD_TRACK
void setErrorMessage(const QString &errorMessage)
#define warnFile
Definition kis_debug.h:99

References checkException(), isErrorResult(), KisLibavEncoderContext::setErrorMessage(), KisLibavEncoderContext::setInternalErrorMessage(), KisAndroidMediaEncoderRunnable::STATUS_ERROR_DRAIN_AUDIO_MUXER_ADD_TRACK, KisAndroidMediaEncoderRunnable::STATUS_ERROR_DRAIN_VIDEO_MUXER_ADD_TRACK, KisAndroidMediaEncoderRunnable::STATUS_ERROR_START_AUDIO_ENCODER, KisAndroidMediaEncoderRunnable::STATUS_ERROR_START_AUDIO_FORMAT, KisAndroidMediaEncoderRunnable::STATUS_ERROR_START_VIDEO_ENCODER, and warnFile.

◆ clearEncoder()

void KisAndroidMediaEncoderRunnable::Context::clearEncoder ( )
inline

Definition at line 322 of file KisAndroidMediaEncoderRunnable.cpp.

323 {
324 if (m_encoder.isValid()) {
325 m_encoder.callMethod<void>("cancel", "()V");
326 m_encoder = QJniObject();
327 if (m_env->ExceptionCheck()) {
328 warnFile << "JNI exception occurred cancelling encoder";
329 m_env->ExceptionDescribe();
330 m_env->ExceptionClear();
331 }
332 }
333 }

References m_encoder, m_env, and warnFile.

◆ encoder()

QJniObject & KisAndroidMediaEncoderRunnable::Context::encoder ( )
inline

Definition at line 312 of file KisAndroidMediaEncoderRunnable.cpp.

313 {
314 return m_encoder;
315 }

References m_encoder.

◆ env()

QJniEnvironment & KisAndroidMediaEncoderRunnable::Context::env ( )
inline

Definition at line 307 of file KisAndroidMediaEncoderRunnable.cpp.

308 {
309 return m_env;
310 }

References m_env.

◆ imageBuffers()

uint8_t ** KisAndroidMediaEncoderRunnable::Context::imageBuffers ( )
inline

Definition at line 391 of file KisAndroidMediaEncoderRunnable.cpp.

392 {
393 return m_imageBuffers;
394 }

References m_imageBuffers.

◆ imageFormat()

int KisAndroidMediaEncoderRunnable::Context::imageFormat ( ) const
inline

Definition at line 386 of file KisAndroidMediaEncoderRunnable.cpp.

387 {
388 return m_imageFormat;
389 }

References m_imageFormat.

◆ imageLinesizes()

int * KisAndroidMediaEncoderRunnable::Context::imageLinesizes ( )
inline

Definition at line 396 of file KisAndroidMediaEncoderRunnable.cpp.

397 {
398 return m_imageLinesizes;
399 }

References m_imageLinesizes.

◆ isErrorResult()

static bool KisAndroidMediaEncoderRunnable::Context::isErrorResult ( int result)
inlinestaticprivate

Definition at line 421 of file KisAndroidMediaEncoderRunnable.cpp.

422 {
423 return result >= 100;
424 }

◆ setEncoder()

void KisAndroidMediaEncoderRunnable::Context::setEncoder ( const QJniObject & encoder)
inline

Definition at line 317 of file KisAndroidMediaEncoderRunnable.cpp.

References encoder(), and m_encoder.

Member Data Documentation

◆ m_encoder

QJniObject KisAndroidMediaEncoderRunnable::Context::m_encoder
private

Definition at line 427 of file KisAndroidMediaEncoderRunnable.cpp.

◆ m_env

QJniEnvironment KisAndroidMediaEncoderRunnable::Context::m_env
private

Definition at line 426 of file KisAndroidMediaEncoderRunnable.cpp.

◆ m_imageBuffers

uint8_t* KisAndroidMediaEncoderRunnable::Context::m_imageBuffers[4] = {nullptr, nullptr, nullptr, nullptr}
private

Definition at line 428 of file KisAndroidMediaEncoderRunnable.cpp.

428{nullptr, nullptr, nullptr, nullptr};

◆ m_imageFormat

AVPixelFormat KisAndroidMediaEncoderRunnable::Context::m_imageFormat = AV_PIX_FMT_NONE
private

Definition at line 430 of file KisAndroidMediaEncoderRunnable.cpp.

◆ m_imageLinesizes

int KisAndroidMediaEncoderRunnable::Context::m_imageLinesizes[4] = {0, 0, 0, 0}
private

Definition at line 429 of file KisAndroidMediaEncoderRunnable.cpp.

429{0, 0, 0, 0};

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