Krita Source Code Documentation
Loading...
Searching...
No Matches
KisVideoExportOptionsDialog Class Reference

#include <VideoExportOptionsDialog.h>

+ Inheritance diagram for KisVideoExportOptionsDialog:

Classes

struct  Private
 

Public Types

enum  CodecPageIndex {
  CODEC_OPENH264 , CODEC_H264 , CODEC_H265 , CODEC_THEORA ,
  CODEC_VP9 , CODEC_GIF , CODEC_APNG , CODEC_WEBP
}
 
enum  ContainerType {
  DEFAULT = 0 , MP4 = 0 , MKV , WEBM ,
  GIF , APNG , WEBP , OGV ,
  NUM_CONTAINER_TYPE
}
 

Public Member Functions

KisPropertiesConfigurationSP configuration () const override
 
QStringList customUserOptions () const
 
QString customUserOptionsString () const
 
 KisVideoExportOptionsDialog (ContainerType containerType, const QStringList &validEncoders, KisHDRMetadataOptions hdrOptions, QWidget *parent=0)
 
void setConfiguration (const KisPropertiesConfigurationSP config) override
 
void setHDRConfiguration (bool value)
 
void setSupportsHDR (bool value)
 
bool videoConfiguredForHDR () const
 
 ~KisVideoExportOptionsDialog () override
 
- Public Member Functions inherited from KisConfigWidget
virtual KoCanvasResourcesInterfaceSP canvasResourcesInterface () const
 
virtual void setCanvasResourcesInterface (KoCanvasResourcesInterfaceSP canvasResourcesInterface)
 
virtual void setView (KisViewManager *view)
 
 ~KisConfigWidget () override
 

Static Public Member Functions

static QVector< KoIDencoderIdentifiers (ContainerType type)
 
static ContainerType mimeToContainer (const QString &mimeType)
 

Private Slots

void slotBayerFilterSelected (int index)
 
void slotCodecSelected (int index)
 
void slotCustomLineToggled (bool value)
 
void slotH265ProfileChanged (int index)
 
void slotResetCustomLine ()
 
void slotSaveCustomLine ()
 

Private Member Functions

QString currentCodecId () const
 
QStringList generateCustomLine () const
 

Private Attributes

const QScopedPointer< Privatem_d
 
Ui::VideoExportOptionsDialog * ui
 

Additional Inherited Members

- Signals inherited from KisConfigWidget
void sigConfigurationItemChanged ()
 
void sigConfigurationUpdated ()
 
void sigDropLockedConfig (KisPropertiesConfigurationSP p)
 
void sigSaveLockedConfig (KisPropertiesConfigurationSP p)
 
- Protected Member Functions inherited from KisConfigWidget
 KisConfigWidget (QWidget *parent=0, Qt::WindowFlags f=Qt::WindowFlags(), int delay=200)
 

Detailed Description

Definition at line 22 of file VideoExportOptionsDialog.h.

Member Enumeration Documentation

◆ CodecPageIndex

◆ ContainerType

Constructor & Destructor Documentation

◆ KisVideoExportOptionsDialog()

KisVideoExportOptionsDialog::KisVideoExportOptionsDialog ( ContainerType containerType,
const QStringList & validEncoders,
KisHDRMetadataOptions hdrOptions,
QWidget * parent = 0 )
explicit

Definition at line 139 of file VideoExportOptionsDialog.cpp.

140 : KisConfigWidget(parent),
141 ui(new Ui::VideoExportOptionsDialog),
142 m_d(new Private(containerType, validEncoders))
143{
144 ui->setupUi(this);
145
146 ui->intOpenH264bitrate->setRange(100, 10000);
147 ui->intOpenH264bitrate->setValue(5000);
148 ui->intOpenH264bitrate->setSuffix(i18nc("kilo-bits-per-second, video bitrate suffix", "kbps"));
149
150 ui->intCRFH264->setRange(0, 51);
151 ui->intCRFH264->setValue(28);
152
153 ui->intCRFH265->setRange(0, 51);
154 ui->intCRFH265->setValue(28);
155
156 populateComboWithKoIds(ui->cmbPresetH264, m_d->presetsXH264, 5);
157 populateComboWithKoIds(ui->cmbPresetH265, m_d->presetsXH264, 5);
158
159 populateComboWithKoIds(ui->cmbProfileH264, m_d->profilesXH264, 0);
160 populateComboWithKoIds(ui->cmbProfileH265, m_d->profilesXH265, 0);
161
162 populateComboWithKoIds(ui->cmbTuneH264, m_d->tuningXH264, 0);
163 populateComboWithKoIds(ui->cmbTuneH265, m_d->tuningXH265, 0);
164
165 ui->intBitrate->setRange(10, 50000);
166 ui->intBitrate->setValue(5000);
167 ui->intBitrate->setSuffix(i18nc("kilo-bits-per-second, video bitrate suffix", "kbps"));
168
169 ui->gifReserveTransparent->setChecked(true);
170 ui->gifLoop->setChecked(true);
171 ui->gifTransDiff->setChecked(true);
172
173 populateComboWithKoIds(ui->cmbPalettegenStatsModeGIF, m_d->paletteGenModeGIF, 0);
174 populateComboWithKoIds(ui->cmbPaletteuseDitherGIF, m_d->paletteDitherGIF, 5);
175 populateComboWithKoIds(ui->cmbPaletteuseDiffModeGIF, m_d->paletteDiffModeGIF, 0);
176
177 ui->intPaletteuseBayerScaleGIF->setRange(0, 5);
178 ui->intPaletteuseBayerScaleGIF->setValue(2);
179
180 ui->apngLoop->setChecked(true);
181
182 populateComboWithKoIds(ui->cmbPredAPNG, m_d->predAPNG, 0);
183
184 ui->intCompressWEBP->setRange(0, 6);
185 ui->intCompressWEBP->setValue(4);
186
187 ui->intQscaleWEBP->setRange(0, 100);
188 ui->intQscaleWEBP->setValue(75);
189
190 populateComboWithKoIds(ui->cmbPresetWEBP, m_d->presetsWEBP, 0);
191
192 ui->webpLoop->setChecked(true);
193
194 populateComboWithKoIds(ui->cmbCodec, m_d->encoders, 0);
195 connect(ui->cmbCodec, SIGNAL(currentIndexChanged(int)), SLOT(slotCodecSelected(int)));
197
198 // TODO: temporarily hidden! Some combinations of 'tune' and
199 // 'profile' options make ffmpeg generate empty file.
200 // We should not let the user shoot into his own foot!
201 ui->cmbTuneH264->setVisible(false);
202 ui->lblTuneH264->setVisible(false);
203
204 ui->cmbTuneH265->setVisible(false);
205 ui->lblTuneH265->setVisible(false);
206
208 connect(ui->chkCustomLine, SIGNAL(toggled(bool)), SLOT(slotCustomLineToggled(bool)));
209 connect(ui->txtCustomLine, SIGNAL(editingFinished()), SLOT(slotSaveCustomLine()));
210 connect(ui->btnResetCustomLine, SIGNAL(clicked()), SLOT(slotResetCustomLine()));
211
212 connect(ui->cmbProfileH265,
213 SIGNAL(currentIndexChanged(int)),
214 SLOT(slotH265ProfileChanged(int)));
215 slotH265ProfileChanged(ui->cmbProfileH265->currentIndex());
216
217
218 connect(ui->cmbPaletteuseDitherGIF,
219 SIGNAL(currentIndexChanged(int)),
220 SLOT(slotBayerFilterSelected(int)));
221
222 slotBayerFilterSelected(ui->cmbPaletteuseDitherGIF->currentIndex());
223
224 setSupportsHDR(false);
225 m_d->hdrMetadataOptions = hdrOptions;
226}
void populateComboWithKoIds(QComboBox *combo, const QVector< KoID > &ids, int defaultIndex)
KisConfigWidget(QWidget *parent=0, Qt::WindowFlags f=Qt::WindowFlags(), int delay=200)
const QScopedPointer< Private > m_d
Ui::VideoExportOptionsDialog * ui

References m_d, populateComboWithKoIds(), setSupportsHDR(), slotBayerFilterSelected(), slotCodecSelected(), slotCustomLineToggled(), slotH265ProfileChanged(), slotResetCustomLine(), slotSaveCustomLine(), and ui.

◆ ~KisVideoExportOptionsDialog()

KisVideoExportOptionsDialog::~KisVideoExportOptionsDialog ( )
override

Definition at line 228 of file VideoExportOptionsDialog.cpp.

229{
230 delete ui;
231}

References ui.

Member Function Documentation

◆ configuration()

KisPropertiesConfigurationSP KisVideoExportOptionsDialog::configuration ( ) const
overridevirtual
Returns
the configuration

Implements KisConfigWidget.

Definition at line 239 of file VideoExportOptionsDialog.cpp.

240{
242
243 cfg->setProperty("CodecId", currentCodecId());
244
245 cfg->setProperty("Openh264Bitrate", ui->intOpenH264bitrate->value());
246
247 cfg->setProperty("h264PresetIndex", ui->cmbPresetH264->currentIndex());
248 cfg->setProperty("h264ConstantRateFactor", ui->intCRFH264->value());
249 cfg->setProperty("h264ProfileIndex", ui->cmbProfileH264->currentIndex());
250 cfg->setProperty("h264TuneIndex", ui->cmbTuneH264->currentIndex());
251
252 cfg->setProperty("h265PresetIndex", ui->cmbPresetH265->currentIndex());
253 cfg->setProperty("h265ConstantRateFactor", ui->intCRFH265->value());
254 cfg->setProperty("h265ProfileIndex", ui->cmbProfileH265->currentIndex());
255 cfg->setProperty("h265TuneIndex", ui->cmbTuneH265->currentIndex());
256 cfg->setProperty("h265UseHDRMetadata", ui->chkUseHDRMetadata->isChecked());
257
258 cfg->setProperty("TheoraBitrate", ui->intBitrate->value());
259 cfg->setProperty("CustomLineValue", ui->txtCustomLine->text());
260 cfg->setProperty("customUserOptions", customUserOptions().join(' '));
261
262 cfg->setPrefixedProperties("hdrMetadata/", m_d->hdrMetadataOptions.toProperties());
263
264 return cfg;
265}

References currentCodecId(), customUserOptions(), m_d, and ui.

◆ currentCodecId()

QString KisVideoExportOptionsDialog::currentCodecId ( ) const
private

Definition at line 555 of file VideoExportOptionsDialog.cpp.

556{
557 return m_d->encoders[ui->cmbCodec->currentIndex()].id();
558}

References m_d, and ui.

◆ customUserOptions()

QStringList KisVideoExportOptionsDialog::customUserOptions ( ) const

Definition at line 375 of file VideoExportOptionsDialog.cpp.

376{
377 return ui->chkCustomLine->isChecked() ?
378 ui->txtCustomLine->text().split(" ", Qt::SkipEmptyParts) :
380}

References generateCustomLine(), and ui.

◆ customUserOptionsString()

QString KisVideoExportOptionsDialog::customUserOptionsString ( ) const

Definition at line 382 of file VideoExportOptionsDialog.cpp.

383{
384 return customUserOptions().join(' ');
385}

References customUserOptions().

◆ encoderIdentifiers()

QVector< KoID > KisVideoExportOptionsDialog::encoderIdentifiers ( ContainerType type)
static

Definition at line 284 of file VideoExportOptionsDialog.cpp.

285{
286 KIS_ASSERT(type < ContainerType::NUM_CONTAINER_TYPE && type >= ContainerType::DEFAULT);
287 QVector<KoID> encoders;
288 QVector<KoID> h264Encoders = {
289 KoID("libopenh264", i18nc("openh264 codec name", "OpenH264")),
290 KoID("libx264", i18nc("h264 codec name, check simplescreenrecorder for standard translations", "H.264, MPEG-4 Part 10")),
291 KoID("libx265", i18nc("h265 codec name, check simplescreenrecorder for standard translations", "H.265, MPEG-H Part 2 (HEVC)"))
292 };
293
294 KoID vp9Encoder = KoID("libvpx-vp9", i18nc("VP9 codec name", "VP9"));
295
296
297 switch (type) {
299 encoders << KoID("libtheora", i18nc("theora codec name, check simplescreenrecorder for standard translations", "Theora"));
300 break;
302 encoders << KoID("libwebp", i18nc("WEBP codec name", "WEBP"));
303 break;
305 encoders << KoID("apng", i18nc("APNG codec name", "APNG"));
306 break;
308 encoders << KoID("gif", i18nc("GIF codec name", "GIF"));
309 break;
311 encoders << vp9Encoder;
312 break;
315 default:
316 encoders << h264Encoders;
317 encoders << vp9Encoder;
318 break;
319 }
320
321 return encoders;
322}
Definition KoID.h:30
#define KIS_ASSERT(cond)
Definition kis_assert.h:33

References APNG, DEFAULT, GIF, KIS_ASSERT, MKV, MP4, OGV, WEBM, and WEBP.

◆ generateCustomLine()

QStringList KisVideoExportOptionsDialog::generateCustomLine ( ) const
private

Definition at line 449 of file VideoExportOptionsDialog.cpp.

450{
451 QStringList options;
452
453 if (currentCodecId() == "libopenh264") {
454 options << "-c:v" << "libopenh264";
455 options << "-b:v" << QString::number(ui->intOpenH264bitrate->value()) + "k";
456 } else if (currentCodecId() == "libx264") {
457 options << "-crf" << QString::number(ui->intCRFH264->value());
458
459 const int presetIndex = ui->cmbPresetH264->currentIndex();
460 options << "-preset" << m_d->presetsXH264[presetIndex].id();
461
462 const int profileIndex = ui->cmbProfileH264->currentIndex();
463 options << "-profile:v" << m_d->profilesXH264[profileIndex].id();
464
465 if (m_d->profilesXH264[profileIndex].id() == "high422") {
466 options << "-pix_fmt" << "yuv422p";
467 } else if (m_d->profilesXH264[profileIndex].id() == "high444") {
468 options << "-pix_fmt" << "yuv444p";
469 } else {
470 options << "-pix_fmt" << "yuv420p";
471 }
472
473 // Disabled! see the comment in c-tor!
474 //const int tuneIndex = ui->cmbTune->currentIndex();
475 //options << "-tune" << m_d->tunes[tuneIndex].id();
476
477 } else if (currentCodecId() == "libx265") {
478 const bool enableHDR =
479 ui->chkUseHDRMetadata->isEnabled() &&
480 ui->chkUseHDRMetadata->isChecked();
481
482 if (enableHDR) {
483 options << "-colorspace" << "bt2020nc"
484 << "-color_trc" << "smpte2084"
485 << "-color_primaries" << "bt2020";
486 }
487
488 options << "-c:v" << "libx265";
489 options << "-crf" << QString::number(ui->intCRFH265->value());
490
491 const int presetIndex = ui->cmbPresetH265->currentIndex();
492 options << "-preset" << m_d->presetsXH264[presetIndex].id();
493
494 const int profileIndex = ui->cmbProfileH265->currentIndex();
495 options << "-profile:v" << m_d->profilesXH265[profileIndex].id();
496
497 if (m_d->profilesXH265[profileIndex].id() == "main") {
498 options << "-pix_fmt" << "yuv420p";
499 } else if (m_d->profilesXH265[profileIndex].id() == "main10") {
500 options << "-pix_fmt" << "yuv420p10le";
501 } else {
502 KIS_SAFE_ASSERT_RECOVER_NOOP(0 && "Unknown profile selected for h265 encoder");
503 }
504
505 if (enableHDR) {
506 const QString metadataLine = m_d->hdrMetadataOptions.generateFFMpegOptions();
507 options << metadataLine.split(" ");
508 }
509
510 } else if (currentCodecId() == "libtheora") {
511 options << "-b" << QString::number(ui->intBitrate->value()) + "k";
512 } else if (currentCodecId() == "libvpx-vp9") {
513 options << "-c:v" << currentCodecId();
514 if (ui->vp9Lossless->isChecked()) {
515 options << "-lossless" << "1";
516 } else {
517 options << "-b:v" << QString::number(ui->vp9Mbits->value()) + "M";
518 }
519 } else if (currentCodecId() == "gif") {
520 const QString ditherFilterString = m_d->paletteDitherGIF[ ui->cmbPaletteuseDitherGIF->currentIndex() ].id();
521
522 options << "-f" << "gif"
523 << "-loop" << ( ui->gifLoop->isChecked() ? "0":"-1" )
524 << "-gifflags" << ( ui->gifTransDiff->isChecked() ? "+transdiff":"-transdiff" )
525 << "-palettegen" << QString("palettegen=stats_mode=%1%2")
526 .arg(m_d->paletteGenModeGIF[ ui->cmbPalettegenStatsModeGIF->currentIndex() ].id())
527 .arg(":reserve_transparent=" + QString(ui->gifReserveTransparent->isChecked() ? "1":"0"))
528 << "-lavfi" << QString("[0:v][1:v]paletteuse=dither=%1%2%3")
529 .arg(ditherFilterString)
530 .arg(ditherFilterString == "bayer" ? (QString(":bayer_scale=%1").arg(ui->intPaletteuseBayerScaleGIF->value()) ):"" )
531 .arg(":diff_mode=" + m_d->paletteDiffModeGIF[ ui->cmbPaletteuseDiffModeGIF->currentIndex() ].id() );
532
533 } else if (currentCodecId() == "apng") {
534 const int predIndex = ui->cmbPredAPNG->currentIndex();
535
536 options << "-f" << "apng"
537 << "-pred" << m_d->predAPNG[predIndex].id()
538 << "-plays" << ( ui->apngLoop->isChecked() ? "0":"1" );
539
540 } else if (currentCodecId() == "libwebp") {
541 const int presetIndex = ui->cmbPresetWEBP->currentIndex();
542
543 options << "-f" << "webp"
544 << "-lossless" << ( ui->webpLossless->isChecked() ? "1":"0" )
545 << "-compression_level" << QString::number(ui->intCompressWEBP->value())
546 << "-q:v" << QString::number(ui->intQscaleWEBP->value())
547 << "-preset" << m_d->presetsWEBP[presetIndex].id()
548 << "-loop" << ( ui->webpLoop->isChecked() ? "0":"1" );
549
550 }
551
552 return options;
553}
float value(const T *src, size_t ch)
#define KIS_SAFE_ASSERT_RECOVER_NOOP(cond)
Definition kis_assert.h:130

References currentCodecId(), KIS_SAFE_ASSERT_RECOVER_NOOP, m_d, and ui.

◆ mimeToContainer()

KisVideoExportOptionsDialog::ContainerType KisVideoExportOptionsDialog::mimeToContainer ( const QString & mimeType)
static

Definition at line 267 of file VideoExportOptionsDialog.cpp.

268{
269 if (mimeType == "video/webm") {
270 return ContainerType::WEBM;
271 } else if (mimeType == "video/ogg") {
272 return ContainerType::OGV;
273 } else if (mimeType == "image/gif") {
274 return ContainerType::GIF;
275 } else if (mimeType == "image/apng") {
276 return ContainerType::APNG;
277 } else if (mimeType == "image/webp") {
278 return ContainerType::WEBP;
279 }
280
282}

References APNG, DEFAULT, GIF, OGV, WEBM, and WEBP.

◆ setConfiguration()

void KisVideoExportOptionsDialog::setConfiguration ( const KisPropertiesConfigurationSP config)
overridevirtual
Parameters
configthe configuration for this configuration widget.

Implements KisConfigWidget.

Definition at line 419 of file VideoExportOptionsDialog.cpp.

420{
421 ui->intOpenH264bitrate->setValue(cfg->getInt("Openh264Bitrate", 5000));
422
423 ui->cmbPresetH264->setCurrentIndex(cfg->getInt("h264PresetIndex", 5));
424 ui->intCRFH264->setValue(cfg->getInt("h264ConstantRateFactor", 23));
425 ui->cmbProfileH264->setCurrentIndex(cfg->getInt("h264ProfileIndex", 0));
426 ui->cmbTuneH264->setCurrentIndex(cfg->getInt("h264TuneIndex", 1));
427
428 ui->cmbPresetH265->setCurrentIndex(cfg->getInt("h265PresetIndex", 5));
429 ui->intCRFH265->setValue(cfg->getInt("h265ConstantRateFactor", 23));
430 ui->cmbProfileH265->setCurrentIndex(cfg->getInt("h265ProfileIndex", 0));
431 ui->cmbTuneH265->setCurrentIndex(cfg->getInt("h265TuneIndex", 1));
432 ui->chkUseHDRMetadata->setChecked(cfg->getBool("h265UseHDRMetadata", false));
433
434 ui->intBitrate->setValue(cfg->getInt("TheoraBitrate", 5000));
435
436 m_d->currentCustomLine = cfg->getString("CustomLineValue", QString());
437 ui->chkCustomLine->setChecked(!m_d->currentCustomLine.isEmpty());
438 slotCustomLineToggled(ui->chkCustomLine->isChecked());
439
440 const QString codecId = cfg->getString("CodecId", "");
441
442 const int index = qMax(0, findIndexById(codecId, m_d->encoders));
443 ui->cmbCodec->setCurrentIndex(index);
444 slotCodecSelected(index);
445
446 slotH265ProfileChanged(ui->cmbProfileH265->currentIndex());
447}
int findIndexById(const QString &id, const QVector< KoID > &ids)

References findIndexById(), m_d, slotCodecSelected(), slotCustomLineToggled(), slotH265ProfileChanged(), and ui.

◆ setHDRConfiguration()

void KisVideoExportOptionsDialog::setHDRConfiguration ( bool value)

Definition at line 394 of file VideoExportOptionsDialog.cpp.

394 {
395 if (value && currentCodecId() != "libx265") {
396 ui->cmbCodec->setCurrentIndex(m_d->encoders.indexOf(KoID("libx265")));
397 ui->chkUseHDRMetadata->setEnabled(true);
398 }
399
400 //If HDR is enabled && the codec id is correct, we need to use main10.
401 if (value && currentCodecId() == "libx265") {
402 ui->cmbProfileH265->setCurrentIndex(m_d->profilesXH265.indexOf(KoID("main10")));
403 }
404
405 ui->chkUseHDRMetadata->setChecked(value);
406}

References currentCodecId(), m_d, ui, and value().

◆ setSupportsHDR()

void KisVideoExportOptionsDialog::setSupportsHDR ( bool value)

Definition at line 233 of file VideoExportOptionsDialog.cpp.

234{
235 m_d->supportsHDR = value;
236 slotH265ProfileChanged(ui->cmbProfileH265->currentIndex());
237}

References m_d, slotH265ProfileChanged(), ui, and value().

◆ slotBayerFilterSelected

void KisVideoExportOptionsDialog::slotBayerFilterSelected ( int index)
privateslot

Definition at line 580 of file VideoExportOptionsDialog.cpp.

581{
582 const bool enableBayer = m_d->paletteDitherGIF[ index ].id() == "bayer";
583 ui->lblPaletteuseBayerScaleGIF->setEnabled( enableBayer );
584 ui->intPaletteuseBayerScaleGIF->setEnabled( enableBayer );
585}

References m_d, and ui.

◆ slotCodecSelected

void KisVideoExportOptionsDialog::slotCodecSelected ( int index)
privateslot

Definition at line 348 of file VideoExportOptionsDialog.cpp.

349{
350 const QString codec = m_d->encoders[index].id();
351 if (codec == "libopenh264") {
352 ui->stackedWidget->setCurrentIndex(CODEC_OPENH264);
353 } else if (codec == "libx264") {
354 ui->stackedWidget->setCurrentIndex(CODEC_H264);
355 } else if (codec == "libx265") {
356 ui->stackedWidget->setCurrentIndex(CODEC_H265);
357 } else if (codec == "libtheora") {
358 ui->stackedWidget->setCurrentIndex(CODEC_THEORA);
359 } else if (codec == "libvpx-vp9") {
360 ui->stackedWidget->setCurrentIndex(CODEC_VP9);
361 } else if (codec == "gif") {
362 ui->stackedWidget->setCurrentIndex(CODEC_GIF);
363 } else if (codec == "apng") {
364 ui->stackedWidget->setCurrentIndex(CODEC_APNG);
365 } else if (codec == "libwebp") {
366 ui->stackedWidget->setCurrentIndex(CODEC_WEBP);
367 }
368}

References CODEC_APNG, CODEC_GIF, CODEC_H264, CODEC_H265, CODEC_OPENH264, CODEC_THEORA, CODEC_VP9, CODEC_WEBP, m_d, and ui.

◆ slotCustomLineToggled

void KisVideoExportOptionsDialog::slotCustomLineToggled ( bool value)
privateslot

Definition at line 324 of file VideoExportOptionsDialog.cpp.

325{
326 QString customLine = m_d->currentCustomLine;
327
328 if (m_d->currentCustomLine.isEmpty() && value) {
329 customLine = generateCustomLine().join(" ");
330 } else if (!value) {
331 customLine = QString();
332 m_d->currentCustomLine = QString();
333 }
334
335 ui->txtCustomLine->setText(customLine);
336
337 ui->stackedWidget->setEnabled(!value);
338 ui->txtCustomLine->setEnabled(value);
339 ui->btnResetCustomLine->setEnabled(value);
340}

References generateCustomLine(), m_d, ui, and value().

◆ slotH265ProfileChanged

void KisVideoExportOptionsDialog::slotH265ProfileChanged ( int index)
privateslot

Definition at line 560 of file VideoExportOptionsDialog.cpp.

561{
562 const bool enableHDR =
563 m_d->supportsHDR &&
564 index >= 0 &&
565 m_d->profilesXH265[index].id() == "main10";
566
567 ui->chkUseHDRMetadata->setEnabled(enableHDR);
568
569 QString hdrToolTip;
570
571 if (!m_d->supportsHDR) {
572 hdrToolTip = i18nc("@info:tooltip", "Exported animation format does not support HDR");
573 } else if (!enableHDR) {
574 hdrToolTip = i18nc("@info:tooltip", "HDR metadata available only with \"main10\" profile");
575 }
576
577 ui->chkUseHDRMetadata->setToolTip(hdrToolTip);
578}

References m_d, and ui.

◆ slotResetCustomLine

void KisVideoExportOptionsDialog::slotResetCustomLine ( )
privateslot

Definition at line 342 of file VideoExportOptionsDialog.cpp.

343{
344 ui->txtCustomLine->setText(generateCustomLine().join(" "));
346}

References generateCustomLine(), slotSaveCustomLine(), and ui.

◆ slotSaveCustomLine

void KisVideoExportOptionsDialog::slotSaveCustomLine ( )
privateslot

Definition at line 370 of file VideoExportOptionsDialog.cpp.

371{
372 m_d->currentCustomLine = ui->txtCustomLine->text();
373}

References m_d, and ui.

◆ videoConfiguredForHDR()

bool KisVideoExportOptionsDialog::videoConfiguredForHDR ( ) const

Definition at line 387 of file VideoExportOptionsDialog.cpp.

388{
389 return currentCodecId() == "libx265" &&
390 ui->chkUseHDRMetadata->isEnabled() &&
391 ui->chkUseHDRMetadata->isChecked();
392}

References currentCodecId(), and ui.

Member Data Documentation

◆ m_d

const QScopedPointer<Private> KisVideoExportOptionsDialog::m_d
private

Definition at line 87 of file VideoExportOptionsDialog.h.

◆ ui

Ui::VideoExportOptionsDialog* KisVideoExportOptionsDialog::ui
private

Definition at line 78 of file VideoExportOptionsDialog.h.


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