[AV] Removed unused code, merged av and transcode

This commit is contained in:
epoupon
2015-09-11 13:56:41 +02:00
parent 65a8e4ba09
commit c94c859f68
49 changed files with 1050 additions and 1895 deletions
+7 -2
View File
@@ -36,7 +36,9 @@
#include "auth/LmsAuth.hpp"
#include "audio/desktop/DesktopAudio.hpp"
#include "audio/mobile/MobileAudio.hpp"
#if HAVE_VIDEO
#include "video/VideoWidget.hpp"
#endif
#include "common/LineEdit.hpp"
#include "LmsApplication.hpp"
@@ -196,10 +198,13 @@ LmsApplication::handleAuthEvent(void)
else
audio = new Desktop::Audio();
VideoWidget *videoWidget = new VideoWidget();
leftMenu->addItem("Audio", audio);
#if defined HAVE_VIDEO
VideoWidget *videoWidget = new VideoWidget();
leftMenu->addItem("Video", videoWidget);
#endif
leftMenu->addItem("Settings", new Settings::Settings());
// Setup a Right-aligned menu.
+69 -65
View File
@@ -172,85 +172,92 @@ AudioMediaPlayer::AudioMediaPlayer(Wt::WContainerWidget *parent)
}
void
AudioMediaPlayer::loadPlayer(void)
AudioMediaPlayer::loadPlayer(boost::filesystem::path filePath, Av::TranscodeParameters& parameters)
{
_currentFile = filePath;
_currentParameters = parameters;
_mediaPlayer->clearSources();
if (_mediaResource)
delete _mediaResource;
assert( _currentParameters );
_mediaResource = new AvConvTranscodeStreamResource( *_currentParameters, this );
_mediaResource = new AvConvTranscodeStreamResource( filePath, parameters, this );
_mediaPlayer->addSource( getEncoding(), Wt::WLink(_mediaResource));
}
void
AudioMediaPlayer::load(Database::Track::id_type trackId)
{
std::size_t bitrate = 0;
boost::filesystem::path trackPath;
{
Wt::Dbo::Transaction transaction(DboSession());
Database::Track::pointer track = Database::Track::getById(DboSession(), trackId);
bitrate = CurrentUser()->getAudioBitrate();
trackPath = track->getPath();
_mediaTitle->setText ( Wt::WString::fromUTF8(track->getName()) );
_mediaArtistRelease->setText ( Wt::WString::fromUTF8(track->getArtist()->getName()) + " - " + Wt::WString::fromUTF8(track->getRelease()->getName()) );
_mediaCover->setImageLink( Wt::WLink (LmsApplication::instance()->getCoverResource()->getTrackUrl(trackId, 72)));
}
Transcode::Format::Encoding encoding;
switch (_encoding)
{
case Wt::WMediaPlayer::MP3: encoding = Transcode::Format::MP3; 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;
}
_timeSlider->setDisabled(false);
try
{
Transcode::Parameters parameters(trackPath, Transcode::Format::get(encoding));
parameters.setBitrate(Transcode::Stream::Audio, bitrate);
_currentParameters = std::make_shared<Transcode::Parameters>( parameters );
}
catch(std::exception &e)
{
LMS_LOG(MOD_UI, SEV_ERROR) << "Cannot load input file '" << trackPath << "'";
return;
}
loadPlayer();
_timeSlider->setRange(0, _currentParameters->getInputMediaFile().getDuration().total_seconds() );
_timeSlider->setValue(0);
_duration->setText( boost::posix_time::to_simple_string( _currentParameters->getInputMediaFile().getDuration() ));
// Auto play
_mediaPlayer->play();
}
void
AudioMediaPlayer::load(Database::Track::id_type trackId)
{
Av::TranscodeParameters parameters;
boost::filesystem::path path;
boost::posix_time::time_duration duration;
{
Wt::Dbo::Transaction transaction(DboSession());
Database::Track::pointer track = Database::Track::getById(DboSession(), trackId);
path = track->getPath();
parameters.setBitrate(Av::Stream::Type::Audio, CurrentUser()->getAudioBitrate() );
duration = track->getDuration();
_mediaTitle->setText ( Wt::WString::fromUTF8(track->getName()) );
_mediaArtistRelease->setText ( Wt::WString::fromUTF8(track->getArtist()->getName()) + " - " + Wt::WString::fromUTF8(track->getRelease()->getName()) );
_mediaCover->setImageLink( Wt::WLink (LmsApplication::instance()->getCoverResource()->getTrackUrl(trackId, 72)));
}
Av::MediaFile mediaFile(path);
if (!mediaFile.open())
{
// No longer exist ? TODO next?
LMS_LOG(MOD_UI, SEV_INFO) << "Cannot open file '" << path << "'";
return;
}
// It seems to be far better to manually map the streams
// otherwise, some files may have to be fully transcoded to be played by browser...
int audioBestStreamId = mediaFile.getBestStreamId(Av::Stream::Type::Audio);
if (audioBestStreamId != -1)
parameters.addStream(audioBestStreamId);
Av::Encoding encoding;
switch (_encoding)
{
case Wt::WMediaPlayer::MP3: encoding = Av::Encoding::MP3; break;
case Wt::WMediaPlayer::FLA: encoding = Av::Encoding::FLA; break;
case Wt::WMediaPlayer::OGA: encoding = Av::Encoding::OGA; break;
case Wt::WMediaPlayer::WEBMA: encoding = Av::Encoding::WEBMA; break;
default:
encoding = Av::Encoding::MP3;
}
parameters.setEncoding(encoding);
_timeSlider->setDisabled(false);
_timeSlider->setRange(0, duration.total_seconds() );
_timeSlider->setValue(0);
_duration->setText( boost::posix_time::to_simple_string( duration ));
loadPlayer(path, parameters);
}
void
AudioMediaPlayer::handlePlayOffset(int offsetSecs)
{
if (!_currentParameters)
return;
Av::TranscodeParameters parameters = _currentParameters;
_currentParameters->setOffset( boost::posix_time::seconds(offsetSecs) );
parameters.setOffset( boost::posix_time::seconds(offsetSecs) );
loadPlayer();
_mediaPlayer->play();
loadPlayer(_currentFile, parameters);
}
void
@@ -262,10 +269,7 @@ AudioMediaPlayer::handleTrackEnded(void)
void
AudioMediaPlayer::handleTimeUpdated(void)
{
if (!_currentParameters)
return;
boost::posix_time::time_duration currentTime ( boost::posix_time::seconds( _mediaPlayer->currentTime() + _currentParameters->getOffset().total_seconds()));
boost::posix_time::time_duration currentTime ( boost::posix_time::seconds( _mediaPlayer->currentTime() + _currentParameters.getOffset().total_seconds()));
_timeSlider->setValue( currentTime.total_seconds() );
_curTime->setText( boost::posix_time::to_simple_string( currentTime) );
+6 -3
View File
@@ -31,7 +31,7 @@
#include "database/Types.hpp"
#include "transcode/Parameters.hpp"
#include "av/AvTranscoder.hpp"
#include "resource/AvConvTranscodeStreamResource.hpp"
#include "resource/CoverResource.hpp"
@@ -70,7 +70,7 @@ class AudioMediaPlayer : public Wt::WContainerWidget
void handleVolumeSliderMoved(int value);
void loadPlayer(void);
void loadPlayer(boost::filesystem::path filePath, Av::TranscodeParameters& parameters);
// Signals
Wt::Signal<void> _playbackEnded;
@@ -90,7 +90,6 @@ class AudioMediaPlayer : public Wt::WContainerWidget
Wt::WText* _mediaArtistRelease;
// Controls
std::shared_ptr<Transcode::Parameters> _currentParameters;
Wt::WPushButton* _playBtn;
Wt::WPushButton* _pauseBtn;
Wt::WSlider* _timeSlider;
@@ -98,6 +97,10 @@ class AudioMediaPlayer : public Wt::WContainerWidget
Wt::WText* _curTime;
Wt::WText* _duration;
// Transcode
boost::filesystem::path _currentFile;
Av::TranscodeParameters _currentParameters;
};
} // namespace Desktop
+12 -10
View File
@@ -164,21 +164,23 @@ Audio::Audio(Wt::WContainerWidget *parent)
if (track)
{
Av::TranscodeParameters parameters;
// Determine the output format using the encoding of the player
Transcode::Format::Encoding encoding;
Av::Encoding encoding;
switch(mediaPlayer->getEncoding())
{
case Wt::WMediaPlayer::MP3: encoding = Transcode::Format::MP3; 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;
case Wt::WMediaPlayer::MP3: encoding = Av::Encoding::MP3; break;
case Wt::WMediaPlayer::FLA: encoding = Av::Encoding::FLA; break;
case Wt::WMediaPlayer::OGA: encoding = Av::Encoding::OGA; break;
case Wt::WMediaPlayer::WEBMA: encoding = Av::Encoding::WEBMA; break;
default:
encoding = Transcode::Format::MP3;
encoding = Av::Encoding::MP3;
}
// TODO compute parameters using user s profile
Transcode::InputMediaFile inputFile(track->getPath());
Transcode::Parameters parameters(inputFile, Transcode::Format::get(encoding));
parameters.setBitrate(Transcode::Stream::Audio, 96000);
parameters.setEncoding(encoding);
// TODO compute parameters using user's profile
parameters.setBitrate(Av::Stream::Type::Audio, 96000);
mediaPlayer->play(track.id(), parameters);
}
+14 -10
View File
@@ -80,17 +80,9 @@ _encoding(encoding)
}
void
AudioMediaPlayer::play(Database::Track::id_type trackId, const Transcode::Parameters& parameters)
AudioMediaPlayer::play(Database::Track::id_type trackId, Av::TranscodeParameters parameters)
{
// FIXME memleak here
AvConvTranscodeStreamResource *resource = new AvConvTranscodeStreamResource( parameters, this );
_player->clearSources();
_player->addSource( _encoding, Wt::WLink(resource));
_player->play();
_cover->setImageLink( Wt::WLink (LmsApplication::instance()->getCoverResource()->getTrackUrl(trackId, 48)));
boost::filesystem::path path;
{
Wt::Dbo::Transaction transaction(DboSession());
@@ -99,7 +91,19 @@ AudioMediaPlayer::play(Database::Track::id_type trackId, const Transcode::Parame
_track->setText( Wt::WString::fromUTF8(track->getName() ));
_artistRelease->setText( Wt::WString::fromUTF8(track->getArtist()->getName()) );
path = track->getPath();
}
// FIXME memleak here
AvConvTranscodeStreamResource *resource = new AvConvTranscodeStreamResource( path, parameters, this );
_player->clearSources();
_player->addSource( _encoding, Wt::WLink(resource));
_player->play();
_cover->setImageLink( Wt::WLink (LmsApplication::instance()->getCoverResource()->getTrackUrl(trackId, 48)));
}
} // namespace UserInterface
@@ -25,7 +25,7 @@
#include <Wt/WImage>
#include "database/DatabaseHandler.hpp"
#include "transcode/Parameters.hpp"
#include "av/AvTranscoder.hpp"
namespace UserInterface {
namespace Mobile {
@@ -38,7 +38,7 @@ class AudioMediaPlayer : public Wt::WContainerWidget
AudioMediaPlayer(Wt::WMediaPlayer::Encoding encoding, Wt::WContainerWidget *parent = 0);
void play(Database::Track::id_type trackId, const Transcode::Parameters& parameters);
void play(Database::Track::id_type trackId, Av::TranscodeParameters parameters);
Wt::WMediaPlayer::Encoding getEncoding() const { return _encoding; }
@@ -27,9 +27,10 @@
namespace UserInterface {
AvConvTranscodeStreamResource::AvConvTranscodeStreamResource(const Transcode::Parameters& parameters, Wt::WObject *parent)
AvConvTranscodeStreamResource::AvConvTranscodeStreamResource(boost::filesystem::path p, Av::TranscodeParameters parameters, Wt::WObject *parent)
: Wt::WResource(parent),
_parameters( parameters )
_filePath(p),
_parameters( parameters )
{
LMS_LOG(MOD_UI, SEV_DEBUG) << "CONSTRUCTING RESOURCE";
}
@@ -49,17 +50,23 @@ AvConvTranscodeStreamResource::handleRequest(const Wt::Http::Request& request,
LMS_LOG(MOD_UI, SEV_DEBUG) << "Handling new request. Continuation = " << continuation;
std::shared_ptr<Transcode::AvConvTranscoder> transcoder;
std::shared_ptr<Av::Transcoder> transcoder;
if (continuation)
transcoder = boost::any_cast<std::shared_ptr<Transcode::AvConvTranscoder> >(continuation->data());
transcoder = boost::any_cast<std::shared_ptr<Av::Transcoder> >(continuation->data());
if (!transcoder)
{
LMS_LOG(MOD_UI, SEV_DEBUG) << "Launching transcoder";
transcoder = std::make_shared<Transcode::AvConvTranscoder>( _parameters);
transcoder = std::make_shared<Av::Transcoder>( _filePath, _parameters);
LMS_LOG(MOD_UI, SEV_DEBUG) << "Mime type set to '" << _parameters.getOutputFormat().getMimeType() << "'";
response.setMimeType(_parameters.getOutputFormat().getMimeType());
LMS_LOG(MOD_UI, SEV_DEBUG) << "Mime type set to '" << Av::encoding_to_mimetype(_parameters.getEncoding());
response.setMimeType( Av::encoding_to_mimetype(_parameters.getEncoding()) );
if (!transcoder->start())
{
LMS_LOG(MOD_UI, SEV_ERROR) << "Cannot start transcoder";
return;
}
}
if (!transcoder->isComplete())
@@ -72,7 +79,7 @@ AvConvTranscodeStreamResource::handleRequest(const Wt::Http::Request& request,
// Give the client all the output data
response.out().write(reinterpret_cast<char*>(&data[0]), data.size());
LMS_LOG(MOD_UI, SEV_DEBUG) << "Written " << data.size() << " bytes! complete = " << std::boolalpha << transcoder->isComplete() << ", produced bytes = " << transcoder->getOutputBytes();
LMS_LOG(MOD_UI, SEV_DEBUG) << "Written " << data.size() << " bytes! complete = " << std::boolalpha << transcoder->isComplete();
if (!response.out())
LMS_LOG(MOD_UI, SEV_ERROR) << "Write failed!";
@@ -25,23 +25,22 @@
#include <Wt/WResource>
#include "transcode/AvConvTranscoder.hpp"
#include "transcode/Parameters.hpp"
#include "av/AvTranscoder.hpp"
namespace UserInterface {
class AvConvTranscodeStreamResource : public Wt::WResource
{
public:
AvConvTranscodeStreamResource(const Transcode::Parameters& parameters, Wt::WObject *parent = 0);
AvConvTranscodeStreamResource(boost::filesystem::path p, Av::TranscodeParameters parameters, Wt::WObject *parent = 0);
~AvConvTranscodeStreamResource();
void handleRequest(const Wt::Http::Request& request,
Wt::Http::Response& response);
private:
Transcode::Parameters _parameters;
std::shared_ptr<Transcode::AvConvTranscoder> _transcoder;
boost::filesystem::path _filePath;
Av::TranscodeParameters _parameters;
static const std::size_t _bufferSize = 8192*16;
};
+24 -22
View File
@@ -29,25 +29,25 @@
namespace UserInterface {
Wt::WMediaPlayer::Encoding
convert(Transcode::Format format)
AvEncoding_to_WtEncoding(Av::Encoding encoding)
{
switch( format.getEncoding() )
switch( encoding )
{
case Transcode::Format::OGA: return Wt::WMediaPlayer::OGA;
case Transcode::Format::OGV: return Wt::WMediaPlayer::OGV;
case Transcode::Format::MP3: return Wt::WMediaPlayer::MP3;
case Transcode::Format::WEBMA: return Wt::WMediaPlayer::WEBMA;
case Transcode::Format::WEBMV: return Wt::WMediaPlayer::WEBMV;
case Transcode::Format::FLA: return Wt::WMediaPlayer::FLA;
case Transcode::Format::FLV: return Wt::WMediaPlayer::FLV;
case Transcode::Format::M4A: return Wt::WMediaPlayer::M4A;
case Transcode::Format::M4V: return Wt::WMediaPlayer::M4V;
case Av::Encoding::OGA: return Wt::WMediaPlayer::OGA;
case Av::Encoding::OGV: return Wt::WMediaPlayer::OGV;
case Av::Encoding::MP3: return Wt::WMediaPlayer::MP3;
case Av::Encoding::WEBMA: return Wt::WMediaPlayer::WEBMA;
case Av::Encoding::WEBMV: return Wt::WMediaPlayer::WEBMV;
case Av::Encoding::FLA: return Wt::WMediaPlayer::FLA;
case Av::Encoding::FLV: return Wt::WMediaPlayer::FLV;
case Av::Encoding::M4A: return Wt::WMediaPlayer::M4A;
case Av::Encoding::M4V: return Wt::WMediaPlayer::M4V;
}
assert(0);
}
VideoMediaPlayerWidget::VideoMediaPlayerWidget( const Transcode::Parameters& parameters, Wt::WContainerWidget *parent)
VideoMediaPlayerWidget::VideoMediaPlayerWidget( Av::TranscodeParameters parameters, Wt::WContainerWidget *parent)
: Wt::WContainerWidget(parent),
_mediaResource(nullptr),
_currentParameters(parameters),
@@ -106,7 +106,7 @@ VideoMediaPlayerWidget::VideoMediaPlayerWidget( const Transcode::Parameters& par
}
void
VideoMediaPlayerWidget::load(const Transcode::Parameters& parameters)
VideoMediaPlayerWidget::load(Av::TranscodeParameters parameters)
{
_mediaPlayer->clearSources();
@@ -116,15 +116,15 @@ VideoMediaPlayerWidget::load(const Transcode::Parameters& parameters)
if (_mediaResource)
delete _mediaResource;
_mediaResource = new AvConvTranscodeStreamResource( parameters, this );
// TODO _mediaResource = new AvConvTranscodeStreamResource( parameters, this );
_mediaInternalLink.setResource( _mediaResource );
_mediaPlayer->addSource( convert(parameters.getOutputFormat()), _mediaInternalLink );
_mediaPlayer->addSource( AvEncoding_to_WtEncoding(parameters.getEncoding()), _mediaInternalLink );
_timeSlider->setRange(0, parameters.getInputMediaFile().getDuration().total_seconds() );
_timeSlider->setRange(0, 0/* TODO parameters.getInputMediaFile().getDuration().total_seconds()*/ );
_timeSlider->setValue( parameters.getOffset().total_seconds() );
_duration->setText( boost::posix_time::to_simple_string( parameters.getInputMediaFile().getDuration() ));
// TODO _duration->setText( boost::posix_time::to_simple_string( parameters.getInputMediaFile().getDuration() ));
_mediaPlayer->play();
}
@@ -151,6 +151,7 @@ VideoMediaPlayerWidget::handleTimeUpdated(void)
{
std::cout << "Time updated to " << _mediaPlayer->currentTime() << std::endl;
/* TODO
if (_mediaPlayer->currentTime() > 0 && _mediaPlayer->currentTime() < _currentParameters.getInputMediaFile().getDuration().total_seconds())
{
boost::posix_time::time_duration currentTime ( boost::posix_time::seconds( _mediaPlayer->currentTime() + _currentParameters.getOffset().total_seconds()));
@@ -158,6 +159,7 @@ VideoMediaPlayerWidget::handleTimeUpdated(void)
_timeSlider->setValue( currentTime.total_seconds() );
_curTime->setText( boost::posix_time::to_simple_string( currentTime) );
}
*/
}
void
@@ -176,12 +178,12 @@ void
VideoMediaPlayerWidget::handleParametersEdit(void)
{
_dialog = new VideoParametersDialog("Parameters");
_dialog->load(_currentParameters);
// _dialog = new VideoParametersDialog("Parameters");
//TODO _dialog->load(_currentParameters);
_dialog->show();
// _dialog->show();
_dialog->finished().connect(this, &VideoMediaPlayerWidget::handleParametersDone);
// _dialog->finished().connect(this, &VideoMediaPlayerWidget::handleParametersDone);
}
void
@@ -191,7 +193,7 @@ VideoMediaPlayerWidget::handleParametersDone(Wt::WDialog::DialogCode code)
if (code == Wt::WDialog::Accepted)
{
_dialog->save( _currentParameters );
// TODO _dialog->save( _currentParameters );
// TODO SYNC current offset with player?
// HACK use slider current value
+4 -6
View File
@@ -28,7 +28,7 @@
#include "VideoParametersDialog.hpp"
#include "transcode/Parameters.hpp"
#include "av/AvTranscoder.hpp"
#include "resource/AvConvTranscodeStreamResource.hpp"
namespace UserInterface {
@@ -37,18 +37,16 @@ class VideoMediaPlayerWidget : public Wt::WContainerWidget
{
public:
VideoMediaPlayerWidget( const Transcode::Parameters& parameters, Wt::WContainerWidget *parent = 0);
VideoMediaPlayerWidget( Av::TranscodeParameters parameters, Wt::WContainerWidget *parent = 0);
Wt::Signal<void>& close() { return _close; };
private:
// Signals
Wt::Signal<void> _close;
void load(const Transcode::Parameters& parameters);
void load(Av::TranscodeParameters parameters);
// Player controls
void handlePlayOffset(int offsetSecs);
@@ -68,7 +66,7 @@ class VideoMediaPlayerWidget : public Wt::WContainerWidget
Wt::WLink _mediaInternalLink;
// Controls
Transcode::Parameters _currentParameters;
Av::TranscodeParameters _currentParameters;
Wt::WPushButton* _playBtn;
Wt::WPushButton* _pauseBtn;
Wt::WSlider* _timeSlider;
+3 -3
View File
@@ -48,7 +48,7 @@ VideoParametersDialog::VideoParametersDialog(const Wt::WString &windowTitle, Wt:
_outputFormatModel = new Wt::WStringListModel(_outputFormat);
std::vector<Format> formats = Format::get( Format::Video );
std::vector<Format> formats ; // TODO Format::get( Format::Video );
for(std::size_t idFormat = 0; idFormat < formats.size(); ++idFormat)
{
@@ -154,7 +154,7 @@ VideoParametersDialog::load(const Transcode::Parameters& parameters)
Wt::WComboBox* combo = _streamSelection[streamType].first;
Wt::WStringListModel* model = _streamSelection[streamType].second;
addStreams(model, parameters.getInputMediaFile().getStreams( streamType ) );
// TODO addStreams(model, parameters.getInputMediaFile().getStreams( streamType ) );
selectStream(model, streamMap[streamType], combo);
}
@@ -168,7 +168,7 @@ VideoParametersDialog::save(Transcode::Parameters& parameters)
// Get encoder used
Format::Encoding encoding = boost::any_cast<Format::Encoding>( _outputFormatModel->data(_outputFormatModel->index(_outputFormat->currentIndex(), 0), Wt::UserRole));
parameters.setOutputFormat( Format::get(encoding) );
// TODO parameters.setOutputFormat( Format::get(encoding) );
// Get stream selected, if any
BOOST_FOREACH(Stream::Type streamType, streamTypes)
+1 -4
View File
@@ -17,8 +17,7 @@
* along with LMS. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef VIDEO_PARAMETER_DIALOG
#define VIDEO_PARAMETER_DIALOG
#pragma once
#include <map>
@@ -66,5 +65,3 @@ class VideoParametersDialog : public Wt::WDialog
} // namespace UserInterface
#endif
+2
View File
@@ -52,6 +52,7 @@ VideoWidget::playVideo(boost::filesystem::path p)
LMS_LOG(MOD_UI, SEV_DEBUG) << "Want to play video " << p << "'";
try {
#if 0
std::size_t audioBitrate = 0;
std::size_t videoBitrate = 0;
@@ -89,6 +90,7 @@ VideoWidget::playVideo(boost::filesystem::path p)
}));
_videoDbWidget->setHidden(true);
#endif
}
catch( std::exception& e) {
LMS_LOG(MOD_UI, SEV_ERROR) << "Caught exception while loading '" << p << "': " << e.what();