From eb7a9bfa4caf5a24afc6e67a44107a45d0848104 Mon Sep 17 00:00:00 2001 From: Jim Broadus Date: Sun, 31 Jan 2021 00:10:17 -0800 Subject: [PATCH] transcoder: Show options based on encode element Instead of assuming a specific set of options based on a format, determine which encoder element will actually be used in the pipeline. --- src/transcoder/transcoder.cpp | 6 ++ src/transcoder/transcoder.h | 1 + src/transcoder/transcoderoptionsdialog.cpp | 65 ++++++++++++---------- src/transcoder/transcoderoptionsdialog.ui | 6 ++ 4 files changed, 49 insertions(+), 29 deletions(-) diff --git a/src/transcoder/transcoder.cpp b/src/transcoder/transcoder.cpp index 48168b85a..997e26458 100644 --- a/src/transcoder/transcoder.cpp +++ b/src/transcoder/transcoder.cpp @@ -190,6 +190,12 @@ GstElement* Transcoder::CreateElementForMimeType(const QString& element_type, } } +QString Transcoder::GetEncoderFactoryForMimeType(const QString& mime_type) { + SuitableElement best = + FindBestElementForMimeType("Codec/Encoder/Audio", mime_type); + return best.name_; +} + Transcoder::JobFinishedEvent::JobFinishedEvent(JobState* state, bool success) : QEvent(QEvent::Type(sEventType)), state_(state), success_(success) {} diff --git a/src/transcoder/transcoder.h b/src/transcoder/transcoder.h index 6d44ed443..c7165973d 100644 --- a/src/transcoder/transcoder.h +++ b/src/transcoder/transcoder.h @@ -71,6 +71,7 @@ class Transcoder : public QObject { void Cancel(); void DumpGraph(int id); + static QString GetEncoderFactoryForMimeType(const QString& mime_type); signals: void JobComplete(const QString& input, const QString& output, bool success); void LogLine(const QString& message); diff --git a/src/transcoder/transcoderoptionsdialog.cpp b/src/transcoder/transcoderoptionsdialog.cpp index 0dc81c68d..4531085d2 100644 --- a/src/transcoder/transcoderoptionsdialog.cpp +++ b/src/transcoder/transcoderoptionsdialog.cpp @@ -17,6 +17,8 @@ #include "transcoderoptionsdialog.h" +#include "core/logging.h" +#include "core/utilities.h" #include "transcoder.h" #include "transcoderoptionsaac.h" #include "transcoderoptionsflac.h" @@ -32,39 +34,44 @@ TranscoderOptionsDialog::TranscoderOptionsDialog(const TranscoderPreset& preset, : QDialog(parent), ui_(new Ui_TranscoderOptionsDialog), options_(nullptr) { ui_->setupUi(this); - switch (preset.type_) { - case Song::Type_Flac: - case Song::Type_OggFlac: - options_ = new TranscoderOptionsFlac(this); - break; - case Song::Type_Mp4: - options_ = new TranscoderOptionsAAC(this); - break; - case Song::Type_Mpeg: - options_ = new TranscoderOptionsMP3(this); - break; - case Song::Type_OggVorbis: - options_ = new TranscoderOptionsVorbis(this); - break; - case Song::Type_OggOpus: - options_ = new TranscoderOptionsOpus(this); - break; - case Song::Type_OggSpeex: - options_ = new TranscoderOptionsSpeex(this); - break; - case Song::Type_Asf: - options_ = new TranscoderOptionsWma(this); - break; - default: - ui_->errorMessage->setText( - tr("Unknown encoder type: %1").arg(preset.name_)); - break; + QString element = + Transcoder::GetEncoderFactoryForMimeType(preset.codec_mimetype_); + + qLog(Debug) << "Options for element" << element; + if (element == "flacenc") { + options_ = new TranscoderOptionsFlac(this); + } else if (element == "faac") { + options_ = new TranscoderOptionsAAC(this); + } else if (element == "lamemp3enc") { + options_ = new TranscoderOptionsMP3(this); + } else if (element == "vorbisenc") { + options_ = new TranscoderOptionsVorbis(this); + } else if (element == "opusenc") { + options_ = new TranscoderOptionsOpus(this); + } else if (element == "speexenc") { + options_ = new TranscoderOptionsSpeex(this); + } else if (element == "ffenc_wmav2") { + options_ = new TranscoderOptionsWma(this); + } else if (element.isEmpty()) { + ui_->errorMessage->setText(tr("Could not find a suitable encoder element " + "for %1.") + .arg(preset.name_)); + } else { + QString url = Utilities::MakeBugReportUrl( + QString("transcoder settings: Unknown encoder element: ") + element); + ui_->errorMessage->setText(tr("No settings page available for encoder " + "element %1. " + "Please report this issue:
" + "%2") + .arg(element) + .arg(url)); } + setWindowTitle(tr("Transcoding options - %1").arg(preset.name_)); + + // Show options widget if available. if (options_) { ui_->errorMessage->setVisible(false); - setWindowTitle(tr("Transcoding options - %1") - .arg(Song::TextForFiletype(preset.type_))); options_->layout()->setContentsMargins(0, 0, 0, 0); ui_->verticalLayout->insertWidget(0, options_); resize(width(), minimumHeight()); diff --git a/src/transcoder/transcoderoptionsdialog.ui b/src/transcoder/transcoderoptionsdialog.ui index a052241a4..59ec70cf2 100644 --- a/src/transcoder/transcoderoptionsdialog.ui +++ b/src/transcoder/transcoderoptionsdialog.ui @@ -25,6 +25,12 @@ Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop + + true + + + true +