Add more file formats to the transcoder, and add a function to get a preset by song filetype
This commit is contained in:
parent
d1ae0c8509
commit
3e1e880c19
@ -166,14 +166,41 @@ Transcoder::Transcoder(QObject* parent)
|
|||||||
if (JobFinishedEvent::sEventType == -1)
|
if (JobFinishedEvent::sEventType == -1)
|
||||||
JobFinishedEvent::sEventType = QEvent::registerEventType();
|
JobFinishedEvent::sEventType = QEvent::registerEventType();
|
||||||
|
|
||||||
presets_ << TranscoderPreset("Ogg Vorbis", "ogg", "audio/x-vorbis", "application/ogg");
|
presets_ << PresetForFileType(Song::Type_Flac);
|
||||||
presets_ << TranscoderPreset("Ogg Speex", "spx", "audio/x-speex", "application/ogg");
|
presets_ << PresetForFileType(Song::Type_Mp4);
|
||||||
presets_ << TranscoderPreset("FLAC", "flac", "audio/x-flac");
|
presets_ << PresetForFileType(Song::Type_Mpeg);
|
||||||
presets_ << TranscoderPreset("MP3", "mp3", "audio/mpeg, mpegversion=(int)1, layer=(int)3");
|
presets_ << PresetForFileType(Song::Type_OggVorbis);
|
||||||
presets_ << TranscoderPreset("M4A AAC", "mp4", "audio/mpeg, mpegversion=(int)4", "audio/mp4");
|
presets_ << PresetForFileType(Song::Type_OggFlac);
|
||||||
|
presets_ << PresetForFileType(Song::Type_OggSpeex);
|
||||||
|
presets_ << PresetForFileType(Song::Type_Asf);
|
||||||
|
presets_ << PresetForFileType(Song::Type_Wav);
|
||||||
presets_ << TranscoderPreset("3GP AAC", "3gp", "audio/mpeg, mpegversion=(int)4", "application/x-3gp");
|
presets_ << TranscoderPreset("3GP AAC", "3gp", "audio/mpeg, mpegversion=(int)4", "application/x-3gp");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TranscoderPreset Transcoder::PresetForFileType(Song::FileType type) {
|
||||||
|
switch (type) {
|
||||||
|
case Song::Type_Flac:
|
||||||
|
return TranscoderPreset("FLAC", "flac", "audio/x-flac");
|
||||||
|
case Song::Type_Mp4:
|
||||||
|
return TranscoderPreset("M4A AAC", "mp4", "audio/mpeg, mpegversion=(int)4", "audio/mp4");
|
||||||
|
case Song::Type_Mpeg:
|
||||||
|
return TranscoderPreset("MP3", "mp3", "audio/mpeg, mpegversion=(int)1, layer=(int)3");
|
||||||
|
case Song::Type_OggVorbis:
|
||||||
|
return TranscoderPreset("Ogg Vorbis", "ogg", "audio/x-vorbis", "application/ogg");
|
||||||
|
case Song::Type_OggFlac:
|
||||||
|
return TranscoderPreset("Ogg Flac", "ogg", "audio/x-flac", "application/ogg");
|
||||||
|
case Song::Type_OggSpeex:
|
||||||
|
return TranscoderPreset("Ogg Speex", "spx", "audio/x-speex", "application/ogg");
|
||||||
|
case Song::Type_Asf:
|
||||||
|
return TranscoderPreset("Windows Media audio", "wma", "audio/x-wma", "video/x-ms-asf");
|
||||||
|
case Song::Type_Wav:
|
||||||
|
return TranscoderPreset("Wav", "wav", QString(), "audio/x-wav");
|
||||||
|
default:
|
||||||
|
qWarning() << "Unsupported format in Transcoder::PresetForFileType:" << type;
|
||||||
|
return TranscoderPreset();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void Transcoder::AddJob(const QString& input,
|
void Transcoder::AddJob(const QString& input,
|
||||||
const TranscoderPreset& preset,
|
const TranscoderPreset& preset,
|
||||||
const QString& output) {
|
const QString& output) {
|
||||||
@ -315,7 +342,7 @@ bool Transcoder::StartJob(const Job &job) {
|
|||||||
if (!src || !decode || !convert || !sink)
|
if (!src || !decode || !convert || !sink)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (!codec) {
|
if (!codec && !job.preset.codec_mimetype_.isEmpty()) {
|
||||||
LogLine(tr("Couldn't find an encoder for %1, check you have the correct GStreamer plugins installed"
|
LogLine(tr("Couldn't find an encoder for %1, check you have the correct GStreamer plugins installed"
|
||||||
).arg(job.preset.codec_mimetype_));
|
).arg(job.preset.codec_mimetype_));
|
||||||
return false;
|
return false;
|
||||||
@ -329,10 +356,12 @@ bool Transcoder::StartJob(const Job &job) {
|
|||||||
|
|
||||||
// Join them together
|
// Join them together
|
||||||
gst_element_link(src, decode);
|
gst_element_link(src, decode);
|
||||||
if (muxer)
|
if (codec && muxer)
|
||||||
gst_element_link_many(convert, codec, muxer, sink, NULL);
|
gst_element_link_many(convert, codec, muxer, sink, NULL);
|
||||||
else
|
else if (codec)
|
||||||
gst_element_link_many(convert, codec, sink, NULL);
|
gst_element_link_many(convert, codec, sink, NULL);
|
||||||
|
else if (muxer)
|
||||||
|
gst_element_link_many(convert, muxer, sink, NULL);
|
||||||
|
|
||||||
// Set properties
|
// Set properties
|
||||||
g_object_set(src, "location", job.input.toLocal8Bit().constData(), NULL);
|
g_object_set(src, "location", job.input.toLocal8Bit().constData(), NULL);
|
||||||
|
@ -27,6 +27,8 @@
|
|||||||
#include <boost/shared_ptr.hpp>
|
#include <boost/shared_ptr.hpp>
|
||||||
#include <boost/scoped_ptr.hpp>
|
#include <boost/scoped_ptr.hpp>
|
||||||
|
|
||||||
|
#include "core/song.h"
|
||||||
|
|
||||||
|
|
||||||
struct TranscoderPreset {
|
struct TranscoderPreset {
|
||||||
TranscoderPreset() {}
|
TranscoderPreset() {}
|
||||||
@ -49,6 +51,8 @@ class Transcoder : public QObject {
|
|||||||
public:
|
public:
|
||||||
Transcoder(QObject* parent = 0);
|
Transcoder(QObject* parent = 0);
|
||||||
|
|
||||||
|
static TranscoderPreset PresetForFileType(Song::FileType type);
|
||||||
|
|
||||||
QList<TranscoderPreset> presets() const { return presets_; }
|
QList<TranscoderPreset> presets() const { return presets_; }
|
||||||
int max_threads() const { return max_threads_; }
|
int max_threads() const { return max_threads_; }
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user