[UI] User can now force the audio encoding to be used

This commit is contained in:
emeric
2015-03-22 20:45:39 +01:00
parent 21c858562e
commit 0378c242b6
17 changed files with 223 additions and 58 deletions
+6 -7
View File
@@ -32,7 +32,7 @@ namespace UserInterface {
namespace Desktop {
Wt::WMediaPlayer::Encoding
AudioMediaPlayer::getEncoding()
AudioMediaPlayer::getBestEncoding()
{
const Wt::WEnvironment& env = Wt::WApplication::instance()->environment();
@@ -42,9 +42,10 @@ AudioMediaPlayer::getEncoding()
return Wt::WMediaPlayer::OGA;
}
AudioMediaPlayer::AudioMediaPlayer( Wt::WContainerWidget *parent)
AudioMediaPlayer::AudioMediaPlayer( Wt::WMediaPlayer::Encoding encoding, Wt::WContainerWidget *parent)
: Wt::WContainerWidget(parent),
_mediaResource(nullptr)
_mediaResource(nullptr),
_encoding(encoding)
{
this->setStyleClass("mediaplayer");
this->setHeight(90);
@@ -112,7 +113,7 @@ AudioMediaPlayer::AudioMediaPlayer( Wt::WContainerWidget *parent)
controlsLayout->addWidget(shuffle);
_mediaPlayer = new Wt::WMediaPlayer( Wt::WMediaPlayer::Audio, btnContainer );
_mediaPlayer->addSource( getEncoding(), "" );
_mediaPlayer->addSource( _encoding, "" );
_mediaPlayer->ended().connect(this, &AudioMediaPlayer::handleTrackEnded);
_mediaPlayer->setControlsWidget( 0 );
@@ -148,15 +149,13 @@ AudioMediaPlayer::loadPlayer(void)
{
_mediaPlayer->clearSources();
_mediaInternalLink.setResource( nullptr );
if (_mediaResource)
delete _mediaResource;
assert( _currentParameters );
_mediaResource = new AvConvTranscodeStreamResource( *_currentParameters, this );
_mediaInternalLink.setResource( _mediaResource );
_mediaPlayer->addSource( getEncoding(), _mediaInternalLink );
_mediaPlayer->addSource( getEncoding(), Wt::WLink(_mediaResource));
}
void
+7 -6
View File
@@ -26,7 +26,6 @@
#include <Wt/WPushButton>
#include <Wt/WContainerWidget>
#include <Wt/WMediaPlayer>
#include <Wt/WLink>
#include <Wt/WText>
#include "transcode/Parameters.hpp"
@@ -38,14 +37,15 @@ namespace Desktop {
class AudioMediaPlayer : public Wt::WContainerWidget
{
public:
static Wt::WMediaPlayer::Encoding getBestEncoding();
// Encoding is set based on environment
static Wt::WMediaPlayer::Encoding getEncoding();
AudioMediaPlayer( Wt::WContainerWidget *parent = 0);
AudioMediaPlayer( Wt::WMediaPlayer::Encoding encoding, Wt::WContainerWidget *parent = 0);
void load(const Transcode::Parameters& parameters);
// Accessors
Wt::WMediaPlayer::Encoding getEncoding() const { return _encoding; }
// Signal slots
Wt::Signal<void>& playbackEnded() {return _playbackEnded;}
Wt::Signal<void>& playNext() {return _playNext;}
@@ -53,6 +53,7 @@ class AudioMediaPlayer : public Wt::WContainerWidget
Wt::Signal<bool>& shuffle() {return _shuffle;}
Wt::Signal<bool>& loop() {return _loop;}
private:
void handlePlayOffset(int offsetSecs);
@@ -76,7 +77,7 @@ class AudioMediaPlayer : public Wt::WContainerWidget
// Core
Wt::WMediaPlayer* _mediaPlayer;
AvConvTranscodeStreamResource* _mediaResource;
Wt::WLink _mediaInternalLink;
Wt::WMediaPlayer::Encoding _encoding;
// Controls
std::shared_ptr<Transcode::Parameters> _currentParameters;
+19 -3
View File
@@ -110,13 +110,28 @@ _playQueue(nullptr)
// Playlist/PlayQueue
{
Wt::Dbo::Transaction transaction(_db.getSession());
Database::User::pointer user = _db.getCurrentUser();
Wt::WContainerWidget* playQueueContainer = new Wt::WContainerWidget();
playQueueContainer->setStyleClass("playqueue");
Wt::WVBoxLayout* playQueueLayout = new Wt::WVBoxLayout();
playQueueContainer->setLayout(playQueueLayout);
_mediaPlayer = new AudioMediaPlayer();
// Determine the encoding to be used
Wt::WMediaPlayer::Encoding encoding;
switch (user->getAudioEncoding())
{
case Database::AudioEncoding::MP3: encoding = Wt::WMediaPlayer::MP3; break;
case Database::AudioEncoding::WEBMA: encoding = Wt::WMediaPlayer::WEBMA; break;
case Database::AudioEncoding::OGA: encoding = Wt::WMediaPlayer::OGA; break;
case Database::AudioEncoding::FLA: encoding = Wt::WMediaPlayer::FLA; break;
case Database::AudioEncoding::AUTO:
default:
encoding = AudioMediaPlayer::getBestEncoding();
}
LMS_LOG(MOD_UI, SEV_INFO) << "Audio player using encoding " << encoding;
_mediaPlayer = new AudioMediaPlayer(encoding);
playQueueLayout->addWidget(_mediaPlayer);
playQueueLayout->addWidget( _playQueue, 1);
@@ -505,11 +520,12 @@ Audio::playTrack(boost::filesystem::path p)
// Determine the output format using the encoding of the player
Transcode::Format::Encoding encoding;
switch(AudioMediaPlayer::getEncoding())
switch (_mediaPlayer->getEncoding())
{
case Wt::WMediaPlayer::MP3: encoding = Transcode::Format::MP3; break;
case Wt::WMediaPlayer::M4A: encoding = Transcode::Format::M4A; break;
case Wt::WMediaPlayer::FLA: encoding = Transcode::Format::FLA; break;
case Wt::WMediaPlayer::OGA: encoding = Transcode::Format::OGA; break;
case Wt::WMediaPlayer::WEBMA: encoding = Transcode::Format::WEBMA; break;
default:
encoding = Transcode::Format::MP3;
}
-1
View File
@@ -22,7 +22,6 @@
#include <Wt/WApplication>
#include <Wt/WImage>
#include <Wt/WLink>
#include <Wt/WItemDelegate>
#include <Wt/WStandardItem>
#include <Wt/WFileResource>
+20 -3
View File
@@ -63,7 +63,23 @@ _db(db)
Wt::WTemplate* playerTemplate = new Wt::WTemplate(this);
playerTemplate->setTemplateText(Wt::WString::tr("mobile-audio-player"));
AudioMediaPlayer* mediaPlayer = new AudioMediaPlayer();
Wt::Dbo::Transaction transaction(_db.getSession());
Database::User::pointer user = _db.getCurrentUser();
// Determine the encoding to be used
Wt::WMediaPlayer::Encoding encoding;
switch (user->getAudioEncoding())
{
case Database::AudioEncoding::MP3: encoding = Wt::WMediaPlayer::MP3; break;
case Database::AudioEncoding::WEBMA: encoding = Wt::WMediaPlayer::WEBMA; break;
case Database::AudioEncoding::OGA: encoding = Wt::WMediaPlayer::OGA; break;
case Database::AudioEncoding::FLA: encoding = Wt::WMediaPlayer::FLA; break;
case Database::AudioEncoding::AUTO:
default:
encoding = AudioMediaPlayer::getBestEncoding();
}
AudioMediaPlayer* mediaPlayer = new AudioMediaPlayer(encoding);
playerTemplate->bindWidget("player", mediaPlayer);
edit->changed().connect(std::bind([=] () {
@@ -177,11 +193,12 @@ _db(db)
{
// Determine the output format using the encoding of the player
Transcode::Format::Encoding encoding;
switch(AudioMediaPlayer::getEncoding())
switch(mediaPlayer->getEncoding())
{
case Wt::WMediaPlayer::MP3: encoding = Transcode::Format::MP3; break;
case Wt::WMediaPlayer::M4A: encoding = Transcode::Format::M4A; break;
case Wt::WMediaPlayer::FLA: encoding = Transcode::Format::FLA; break;
case Wt::WMediaPlayer::OGA: encoding = Transcode::Format::OGA; break;
case Wt::WMediaPlayer::WEBMA: encoding = Transcode::Format::WEBMA; break;
default:
encoding = Transcode::Format::MP3;
}
@@ -28,7 +28,7 @@ namespace UserInterface {
namespace Mobile {
Wt::WMediaPlayer::Encoding
AudioMediaPlayer::getEncoding()
AudioMediaPlayer::getBestEncoding()
{
const Wt::WEnvironment& env = Wt::WApplication::instance()->environment();
@@ -38,20 +38,24 @@ AudioMediaPlayer::getEncoding()
return Wt::WMediaPlayer::OGA;
}
AudioMediaPlayer::AudioMediaPlayer(Wt::WContainerWidget *parent)
: Wt::WContainerWidget(parent)
AudioMediaPlayer::AudioMediaPlayer(Wt::WMediaPlayer::Encoding encoding, Wt::WContainerWidget *parent)
:
Wt::WContainerWidget(parent),
_player(nullptr),
_encoding(encoding)
{
_player = new Wt::WMediaPlayer(Wt::WMediaPlayer::Audio, this);
_player->addSource( getEncoding(), "" );
_player->addSource( _encoding, "" );
}
void
AudioMediaPlayer::play(const Transcode::Parameters& parameters)
{
// FIXME memleak here
AvConvTranscodeStreamResource *resource = new AvConvTranscodeStreamResource( parameters, this );
_player->clearSources();
_player->addSource( getEncoding(), Wt::WLink(resource));
_player->addSource( _encoding, Wt::WLink(resource));
_player->play();
}
@@ -32,15 +32,18 @@ class AudioMediaPlayer : public Wt::WContainerWidget
{
public:
static Wt::WMediaPlayer::Encoding getEncoding();
static Wt::WMediaPlayer::Encoding getBestEncoding();
AudioMediaPlayer(Wt::WContainerWidget *parent = 0);
AudioMediaPlayer(Wt::WMediaPlayer::Encoding encoding, Wt::WContainerWidget *parent = 0);
void play(const Transcode::Parameters& parameters);
Wt::WMediaPlayer::Encoding getEncoding() const { return _encoding; }
private:
Wt::WMediaPlayer *_player;
Wt::WMediaPlayer::Encoding _encoding;
};