summaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2013-08-14 15:11:30 +0100
committerCarl Hetherington <cth@carlh.net>2013-08-14 15:11:30 +0100
commit6244677a4e92989da3aca309e9eaba0ce420e4a3 (patch)
treea5a976d5e66ddff26432a18bf2482f4f92e75631 /src/lib
parent853b8641ee7fb8348302c0daae838c4891769b1d (diff)
Revert "Protect playlist with a mutex so that we can add content safely from e.g. examine content threads."
This reverts commit 853b8641ee7fb8348302c0daae838c4891769b1d.
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/film.cc1
-rw-r--r--src/lib/playlist.cc113
-rw-r--r--src/lib/playlist.h1
3 files changed, 32 insertions, 83 deletions
diff --git a/src/lib/film.cc b/src/lib/film.cc
index d5ce7fd0c..2f7e07873 100644
--- a/src/lib/film.cc
+++ b/src/lib/film.cc
@@ -801,7 +801,6 @@ Film::maybe_add_content (weak_ptr<Job> j, weak_ptr<Content> c)
}
}
-/** Thread-safe; handled by playlist */
void
Film::add_content (shared_ptr<Content> c)
{
diff --git a/src/lib/playlist.cc b/src/lib/playlist.cc
index 8952f00be..de48ff5f5 100644
--- a/src/lib/playlist.cc
+++ b/src/lib/playlist.cc
@@ -75,8 +75,6 @@ Playlist::content_changed (weak_ptr<Content> content, int property, bool frequen
void
Playlist::maybe_sequence_video ()
{
- boost::mutex::scoped_lock lm (_mutex);
-
if (!_sequence_video || _sequencing_video) {
return;
}
@@ -101,8 +99,6 @@ Playlist::maybe_sequence_video ()
string
Playlist::video_identifier () const
{
- boost::mutex::scoped_lock lm (_mutex);
-
string t;
for (ContentList::const_iterator i = _content.begin(); i != _content.end(); ++i) {
@@ -119,8 +115,6 @@ Playlist::video_identifier () const
void
Playlist::set_from_xml (shared_ptr<const Film> film, shared_ptr<const cxml::Node> node)
{
- boost::mutex::scoped_lock lm (_mutex);
-
list<shared_ptr<cxml::Node> > c = node->node_children ("Content");
for (list<shared_ptr<cxml::Node> >::iterator i = c.begin(); i != c.end(); ++i) {
_content.push_back (content_factory (film, *i));
@@ -133,8 +127,6 @@ Playlist::set_from_xml (shared_ptr<const Film> film, shared_ptr<const cxml::Node
void
Playlist::as_xml (xmlpp::Node* node)
{
- boost::mutex::scoped_lock lm (_mutex);
-
for (ContentList::iterator i = _content.begin(); i != _content.end(); ++i) {
(*i)->as_xml (node->add_child ("Content"));
}
@@ -143,35 +135,21 @@ Playlist::as_xml (xmlpp::Node* node)
void
Playlist::add (shared_ptr<Content> c)
{
- {
- boost::mutex::scoped_lock lm (_mutex);
- _content.push_back (c);
- reconnect ();
- }
-
+ _content.push_back (c);
+ reconnect ();
Changed ();
}
void
Playlist::remove (shared_ptr<Content> c)
{
- bool changed = false;
-
- {
- boost::mutex::scoped_lock lm (_mutex);
- ContentList::iterator i = _content.begin ();
- while (i != _content.end() && *i != c) {
- ++i;
- }
-
- if (i != _content.end ()) {
- _content.erase (i);
- reconnect ();
- changed = true;
- }
+ ContentList::iterator i = _content.begin ();
+ while (i != _content.end() && *i != c) {
+ ++i;
}
-
- if (changed) {
+
+ if (i != _content.end ()) {
+ _content.erase (i);
Changed ();
}
}
@@ -179,37 +157,23 @@ Playlist::remove (shared_ptr<Content> c)
void
Playlist::remove (ContentList c)
{
- bool changed = false;
-
- {
- boost::mutex::scoped_lock lm (_mutex);
- for (ContentList::iterator i = c.begin(); i != c.end(); ++i) {
- ContentList::iterator j = _content.begin ();
- while (j != _content.end() && *j != *i) {
- ++j;
- }
-
- if (j != _content.end ()) {
- _content.erase (j);
- changed = true;
- }
+ for (ContentList::iterator i = c.begin(); i != c.end(); ++i) {
+ ContentList::iterator j = _content.begin ();
+ while (j != _content.end() && *j != *i) {
+ ++j;
}
-
- if (changed) {
- reconnect ();
+
+ if (j != _content.end ()) {
+ _content.erase (j);
}
}
- if (changed) {
- Changed ();
- }
+ Changed ();
}
bool
Playlist::has_subtitles () const
{
- boost::mutex::scoped_lock lm (_mutex);
-
for (ContentList::const_iterator i = _content.begin(); i != _content.end(); ++i) {
shared_ptr<const FFmpegContent> fc = dynamic_pointer_cast<FFmpegContent> (*i);
if (fc && !fc->subtitle_streams().empty()) {
@@ -235,8 +199,6 @@ public:
int
Playlist::best_dcp_frame_rate () const
{
- boost::mutex::scoped_lock lm (_mutex);
-
list<int> const allowed_dcp_frame_rates = Config::instance()->allowed_dcp_frame_rates ();
/* Work out what rates we could manage, including those achieved by using skip / repeat. */
@@ -288,8 +250,6 @@ Playlist::best_dcp_frame_rate () const
Time
Playlist::length () const
{
- boost::mutex::scoped_lock lm (_mutex);
-
Time len = 0;
for (ContentList::const_iterator i = _content.begin(); i != _content.end(); ++i) {
len = max (len, (*i)->end ());
@@ -298,7 +258,6 @@ Playlist::length () const
return len;
}
-/* Caller must hold a lock on _mutex */
void
Playlist::reconnect ()
{
@@ -316,8 +275,6 @@ Playlist::reconnect ()
Time
Playlist::video_end () const
{
- boost::mutex::scoped_lock lm (_mutex);
-
Time end = 0;
for (ContentList::const_iterator i = _content.begin(); i != _content.end(); ++i) {
if (dynamic_pointer_cast<const VideoContent> (*i)) {
@@ -331,7 +288,6 @@ Playlist::video_end () const
void
Playlist::set_sequence_video (bool s)
{
- boost::mutex::scoped_lock lm (_mutex);
_sequence_video = s;
}
@@ -345,35 +301,30 @@ ContentSorter::operator() (shared_ptr<Content> a, shared_ptr<Content> b)
ContentList
Playlist::content () const
{
- boost::mutex::scoped_lock lm (_mutex);
return _content;
}
void
Playlist::repeat (ContentList c, int n)
{
- {
- boost::mutex::scoped_lock lm (_mutex);
- pair<Time, Time> range (TIME_MAX, 0);
+ pair<Time, Time> range (TIME_MAX, 0);
+ for (ContentList::iterator i = c.begin(); i != c.end(); ++i) {
+ range.first = min (range.first, (*i)->position ());
+ range.second = max (range.second, (*i)->position ());
+ range.first = min (range.first, (*i)->end ());
+ range.second = max (range.second, (*i)->end ());
+ }
+
+ Time pos = range.second;
+ for (int i = 0; i < n; ++i) {
for (ContentList::iterator i = c.begin(); i != c.end(); ++i) {
- range.first = min (range.first, (*i)->position ());
- range.second = max (range.second, (*i)->position ());
- range.first = min (range.first, (*i)->end ());
- range.second = max (range.second, (*i)->end ());
- }
-
- Time pos = range.second;
- for (int i = 0; i < n; ++i) {
- for (ContentList::iterator i = c.begin(); i != c.end(); ++i) {
- shared_ptr<Content> copy = (*i)->clone ();
- copy->set_position (pos + copy->position() - range.first);
- _content.push_back (copy);
- }
- pos += range.second - range.first;
+ shared_ptr<Content> copy = (*i)->clone ();
+ copy->set_position (pos + copy->position() - range.first);
+ _content.push_back (copy);
}
-
- reconnect ();
+ pos += range.second - range.first;
}
-
+
+ reconnect ();
Changed ();
}
diff --git a/src/lib/playlist.h b/src/lib/playlist.h
index cd902d223..7dbf41604 100644
--- a/src/lib/playlist.h
+++ b/src/lib/playlist.h
@@ -90,7 +90,6 @@ private:
bool _sequence_video;
bool _sequencing_video;
std::list<boost::signals2::connection> _content_connections;
- mutable boost::mutex _mutex;
};
#endif