[UI] Restored audio encoding setting
This commit is contained in:
@@ -91,6 +91,8 @@ class Transcoder
|
|||||||
void process(std::vector<unsigned char>& output, std::size_t maxSize);
|
void process(std::vector<unsigned char>& output, std::size_t maxSize);
|
||||||
bool isComplete(void) { return _isComplete; }
|
bool isComplete(void) { return _isComplete; }
|
||||||
|
|
||||||
|
const TranscodeParameters& getParameters() const { return _parameters; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Transcoder();
|
Transcoder();
|
||||||
|
|
||||||
|
|||||||
@@ -33,9 +33,19 @@
|
|||||||
|
|
||||||
namespace UserInterface {
|
namespace UserInterface {
|
||||||
|
|
||||||
|
|
||||||
|
Av::Encoding
|
||||||
|
AudioPlayer::getBestEncoding() const
|
||||||
|
{
|
||||||
|
// TODO get the supported formats of the player and pick one
|
||||||
|
return Av::Encoding::MP3;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
bool
|
bool
|
||||||
AudioPlayer::loadTrack(Database::Track::id_type trackId)
|
AudioPlayer::loadTrack(Database::Track::id_type trackId)
|
||||||
{
|
{
|
||||||
|
// TODO reduce this scope
|
||||||
Wt::Dbo::Transaction transaction(DboSession());
|
Wt::Dbo::Transaction transaction(DboSession());
|
||||||
|
|
||||||
Database::Track::pointer track = Database::Track::getById(DboSession(), trackId);
|
Database::Track::pointer track = Database::Track::getById(DboSession(), trackId);
|
||||||
@@ -45,6 +55,25 @@ AudioPlayer::loadTrack(Database::Track::id_type trackId)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Database::User::pointer user = CurrentUser();
|
||||||
|
if (!user)
|
||||||
|
{
|
||||||
|
LMS_LOG(UI, ERROR) << "No user found!";
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
Av::Encoding encoding;
|
||||||
|
switch (user->getAudioEncoding())
|
||||||
|
{
|
||||||
|
case Database::AudioEncoding::MP3: encoding = Av::Encoding::MP3; break;
|
||||||
|
case Database::AudioEncoding::OGA: encoding = Av::Encoding::OGA; break;
|
||||||
|
case Database::AudioEncoding::WEBMA: encoding = Av::Encoding::WEBMA; break;
|
||||||
|
case Database::AudioEncoding::AUTO:
|
||||||
|
default:
|
||||||
|
encoding = getBestEncoding();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
bindString("track", Wt::WString::fromUTF8(track->getName()));
|
bindString("track", Wt::WString::fromUTF8(track->getName()));
|
||||||
bindString("artist", Wt::WString::fromUTF8(track->getArtist()->getName()));
|
bindString("artist", Wt::WString::fromUTF8(track->getArtist()->getName()));
|
||||||
_cover->setImageLink(SessionCoverResource()->getTrackUrl(trackId, 64));
|
_cover->setImageLink(SessionCoverResource()->getTrackUrl(trackId, 64));
|
||||||
@@ -75,11 +104,13 @@ AudioPlayer::loadTrack(Database::Track::id_type trackId)
|
|||||||
document.lms.audio.curTime = 0;\
|
document.lms.audio.curTime = 0;\
|
||||||
");
|
");
|
||||||
|
|
||||||
|
LMS_LOG(UI, DEBUG) << "Loading, URL = '" << SessionTranscodeResource()->getUrl(trackId, encoding, 0, streams) << "'";
|
||||||
|
|
||||||
//TODO, try to load everything in JS in order to prevent the WriteError bug?
|
//TODO, try to load everything in JS in order to prevent the WriteError bug?
|
||||||
_audio->pause();
|
_audio->pause();
|
||||||
_audio->clearSources();
|
_audio->clearSources();
|
||||||
//TODO, encoding
|
//TODO, encoding
|
||||||
_audio->addSource(SessionTranscodeResource()->getUrl(trackId, Av::Encoding::MP3, 0, streams));
|
_audio->addSource(SessionTranscodeResource()->getUrl(trackId, encoding, 0, streams));
|
||||||
_audio->setPreloadMode(Wt::WAudio::PreloadAuto);
|
_audio->setPreloadMode(Wt::WAudio::PreloadAuto);
|
||||||
_audio->play();
|
_audio->play();
|
||||||
|
|
||||||
|
|||||||
@@ -24,6 +24,7 @@
|
|||||||
|
|
||||||
#include "common/InputRange.hpp"
|
#include "common/InputRange.hpp"
|
||||||
#include "database/Types.hpp"
|
#include "database/Types.hpp"
|
||||||
|
#include "av/AvTranscoder.hpp"
|
||||||
|
|
||||||
namespace UserInterface {
|
namespace UserInterface {
|
||||||
|
|
||||||
@@ -33,6 +34,7 @@ class AudioPlayer : public Wt::WTemplate
|
|||||||
|
|
||||||
AudioPlayer(Wt::WContainerWidget *parent = 0);
|
AudioPlayer(Wt::WContainerWidget *parent = 0);
|
||||||
|
|
||||||
|
Av::Encoding getBestEncoding() const;
|
||||||
bool loadTrack(Database::Track::id_type trackId);
|
bool loadTrack(Database::Track::id_type trackId);
|
||||||
|
|
||||||
// Signals
|
// Signals
|
||||||
|
|||||||
@@ -130,14 +130,17 @@ TranscodeResource::handleRequest(const Wt::Http::Request& request,
|
|||||||
transcoder = std::make_shared<Av::Transcoder>(track->getPath(), parameters);
|
transcoder = std::make_shared<Av::Transcoder>(track->getPath(), parameters);
|
||||||
}
|
}
|
||||||
|
|
||||||
LMS_LOG(UI, DEBUG) << "Mime type set to '" << Av::encoding_to_mimetype(Av::Encoding::MP3);
|
std::string mimeType = Av::encoding_to_mimetype(transcoder->getParameters().getEncoding());
|
||||||
response.setMimeType( Av::encoding_to_mimetype(Av::Encoding::MP3) );
|
|
||||||
|
LMS_LOG(UI, DEBUG) << "Mime type set to '" << mimeType << "'";
|
||||||
|
response.setMimeType(mimeType);
|
||||||
|
|
||||||
if (!transcoder->start())
|
if (!transcoder->start())
|
||||||
{
|
{
|
||||||
LMS_LOG(UI, ERROR) << "Cannot start transcoder";
|
LMS_LOG(UI, ERROR) << "Cannot start transcoder";
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
LMS_LOG(UI, DEBUG) << "Transcoder started";
|
LMS_LOG(UI, DEBUG) << "Transcoder started";
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -146,21 +149,20 @@ TranscodeResource::handleRequest(const Wt::Http::Request& request,
|
|||||||
std::vector<unsigned char> data;
|
std::vector<unsigned char> data;
|
||||||
data.reserve(_bufferSize);
|
data.reserve(_bufferSize);
|
||||||
|
|
||||||
LMS_LOG(UI, DEBUG) << "Reading data from transcoder";
|
|
||||||
transcoder->process(data, _bufferSize);
|
transcoder->process(data, _bufferSize);
|
||||||
|
|
||||||
response.out().write(reinterpret_cast<char*>(&data[0]), data.size());
|
response.out().write(reinterpret_cast<char*>(&data[0]), data.size());
|
||||||
|
|
||||||
LMS_LOG(UI, DEBUG) << "Written " << data.size() << " bytes! complete = " << std::boolalpha << transcoder->isComplete();
|
LMS_LOG(UI, DEBUG) << "Written " << data.size() << " bytes! complete = " << std::boolalpha << transcoder->isComplete();
|
||||||
|
|
||||||
if (!response.out())
|
if (!response.out())
|
||||||
|
{
|
||||||
LMS_LOG(UI, ERROR) << "Write failed!";
|
LMS_LOG(UI, ERROR) << "Write failed!";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!transcoder->isComplete() && response.out()) {
|
if (!transcoder->isComplete() && response.out()) {
|
||||||
continuation = response.createContinuation();
|
continuation = response.createContinuation();
|
||||||
continuation->setData(transcoder);
|
continuation->setData(transcoder);
|
||||||
LMS_LOG(UI, DEBUG) << "Continuation set to " << continuation;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
LMS_LOG(UI, DEBUG) << "No more data!";
|
LMS_LOG(UI, DEBUG) << "No more data!";
|
||||||
|
|||||||
@@ -64,7 +64,7 @@ class AudioFormModel : public Wt::WFormModel
|
|||||||
initializeModels();
|
initializeModels();
|
||||||
|
|
||||||
addField(BitrateField);
|
addField(BitrateField);
|
||||||
addField(EncodingField, "Session must be reloaded to apply this setting");
|
addField(EncodingField);
|
||||||
|
|
||||||
setValidator(BitrateField, new Wt::WValidator(true)); // mandatory
|
setValidator(BitrateField, new Wt::WValidator(true)); // mandatory
|
||||||
setValidator(EncodingField, new Wt::WValidator(true)); // mandatory
|
setValidator(EncodingField, new Wt::WValidator(true)); // mandatory
|
||||||
|
|||||||
Reference in New Issue
Block a user