MediaPlayer: Add _CalculateDuration and archivable protocol

This commit is contained in:
Dario Casalinuovo
2016-07-11 01:28:03 +02:00
parent b39f9357bc
commit 8199f204da
2 changed files with 23 additions and 2 deletions
@@ -7,6 +7,7 @@
#include "UrlPlaylistItem.h"
#include <MediaFile.h>
#include <MediaTrack.h>
#include "MediaFileTrackSupplier.h"
@@ -26,6 +27,9 @@ UrlPlaylistItem::UrlPlaylistItem(const UrlPlaylistItem& item)
UrlPlaylistItem::UrlPlaylistItem(const BMessage* archive)
{
const char* url = NULL;
if (archive->FindString("mediaplayer:url", &url) == B_OK)
fUrl = BUrl(url);
}
@@ -44,14 +48,17 @@ UrlPlaylistItem::Clone() const
BArchivable*
UrlPlaylistItem::Instantiate(BMessage* archive)
{
return new UrlPlaylistItem(archive);
if (validate_instantiation(archive, "UrlPlaylistItem"))
return new (std::nothrow) UrlPlaylistItem(archive);
return NULL;
}
status_t
UrlPlaylistItem::Archive(BMessage* into, bool deep) const
{
return B_NOT_SUPPORTED;
return into->AddString("mediaplayer:url", fUrl.UrlString());
}
@@ -130,6 +137,18 @@ UrlPlaylistItem::RestoreFromTrash()
}
bigtime_t
UrlPlaylistItem::_CalculateDuration()
{
BMediaFile mediaFile(fUrl);
if (mediaFile.InitCheck() != B_OK || mediaFile.CountTracks() < 1)
return 0;
return mediaFile.TrackAt(0)->Duration();
}
TrackSupplier*
UrlPlaylistItem::_CreateTrackSupplier() const
{
@@ -48,6 +48,8 @@ public:
BUrl Url() const;
protected:
virtual bigtime_t _CalculateDuration();
virtual TrackSupplier* _CreateTrackSupplier() const;
private: