Add more file formats to the transcoder, and add a function to get a preset by song filetype

This commit is contained in:
David Sansome 2010-08-29 14:25:33 +00:00
parent d1ae0c8509
commit 3e1e880c19
2 changed files with 41 additions and 8 deletions

View File

@ -166,14 +166,41 @@ Transcoder::Transcoder(QObject* parent)
if (JobFinishedEvent::sEventType == -1)
JobFinishedEvent::sEventType = QEvent::registerEventType();
presets_ << TranscoderPreset("Ogg Vorbis", "ogg", "audio/x-vorbis", "application/ogg");
presets_ << TranscoderPreset("Ogg Speex", "spx", "audio/x-speex", "application/ogg");
presets_ << TranscoderPreset("FLAC", "flac", "audio/x-flac");
presets_ << TranscoderPreset("MP3", "mp3", "audio/mpeg, mpegversion=(int)1, layer=(int)3");
presets_ << TranscoderPreset("M4A AAC", "mp4", "audio/mpeg, mpegversion=(int)4", "audio/mp4");
presets_ << PresetForFileType(Song::Type_Flac);
presets_ << PresetForFileType(Song::Type_Mp4);
presets_ << PresetForFileType(Song::Type_Mpeg);
presets_ << PresetForFileType(Song::Type_OggVorbis);
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");
}
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,
const TranscoderPreset& preset,
const QString& output) {
@ -315,7 +342,7 @@ bool Transcoder::StartJob(const Job &job) {
if (!src || !decode || !convert || !sink)
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"
).arg(job.preset.codec_mimetype_));
return false;
@ -329,10 +356,12 @@ bool Transcoder::StartJob(const Job &job) {
// Join them together
gst_element_link(src, decode);
if (muxer)
if (codec && muxer)
gst_element_link_many(convert, codec, muxer, sink, NULL);
else
else if (codec)
gst_element_link_many(convert, codec, sink, NULL);
else if (muxer)
gst_element_link_many(convert, muxer, sink, NULL);
// Set properties
g_object_set(src, "location", job.input.toLocal8Bit().constData(), NULL);

View File

@ -27,6 +27,8 @@
#include <boost/shared_ptr.hpp>
#include <boost/scoped_ptr.hpp>
#include "core/song.h"
struct TranscoderPreset {
TranscoderPreset() {}
@ -49,6 +51,8 @@ class Transcoder : public QObject {
public:
Transcoder(QObject* parent = 0);
static TranscoderPreset PresetForFileType(Song::FileType type);
QList<TranscoderPreset> presets() const { return presets_; }
int max_threads() const { return max_threads_; }