summaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2016-06-13 14:38:12 +0100
committerCarl Hetherington <cth@carlh.net>2016-06-13 14:38:12 +0100
commit13aae5d8ff27886656ab7ea3ef1194987954bb3f (patch)
tree315d023a86f16fa8c0ae2e2c87fbc20071316fe8 /src/lib
parent1daaa67c21d4d28757cdcb06c5e26aec3817867c (diff)
Remove caching of old ImageDecoder objects.
This breaks things when there is a 3D ImageContent. When you change the video frame type on this content the view does not update because the re-used ImageDecoder recycles the same video without noticing that the frame type has changed. I guess this is sort of `because' the video frame type is used in VideoDecoder::give, which sets up the cache. Unfortunately I can't remember the case which the caching of ImageDecoders was meant to speed up. Maybe this will now become apparent.
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/decoder_factory.cc17
-rw-r--r--src/lib/decoder_factory.h1
-rw-r--r--src/lib/player.cc10
3 files changed, 3 insertions, 25 deletions
diff --git a/src/lib/decoder_factory.cc b/src/lib/decoder_factory.cc
index 7f53c9a4b..dc01a043a 100644
--- a/src/lib/decoder_factory.cc
+++ b/src/lib/decoder_factory.cc
@@ -37,7 +37,7 @@ using boost::shared_ptr;
using boost::dynamic_pointer_cast;
shared_ptr<Decoder>
-decoder_factory (shared_ptr<const Content> content, list<shared_ptr<ImageDecoder> > old_image_decoders, shared_ptr<Log> log, bool fast)
+decoder_factory (shared_ptr<const Content> content, shared_ptr<Log> log, bool fast)
{
shared_ptr<const FFmpegContent> fc = dynamic_pointer_cast<const FFmpegContent> (content);
if (fc) {
@@ -51,20 +51,7 @@ decoder_factory (shared_ptr<const Content> content, list<shared_ptr<ImageDecoder
shared_ptr<const ImageContent> ic = dynamic_pointer_cast<const ImageContent> (content);
if (ic) {
- shared_ptr<Decoder> decoder;
-
- /* See if we can re-use an old ImageDecoder */
- BOOST_FOREACH (shared_ptr<ImageDecoder> i, old_image_decoders) {
- if (i->content() == ic) {
- decoder = i;
- }
- }
-
- if (!decoder) {
- decoder.reset (new ImageDecoder (ic, log));
- }
-
- return decoder;
+ return shared_ptr<Decoder> (new ImageDecoder (ic, log));
}
shared_ptr<const TextSubtitleContent> rc = dynamic_pointer_cast<const TextSubtitleContent> (content);
diff --git a/src/lib/decoder_factory.h b/src/lib/decoder_factory.h
index 6a4e55ef1..52a53afd2 100644
--- a/src/lib/decoder_factory.h
+++ b/src/lib/decoder_factory.h
@@ -22,7 +22,6 @@ class ImageDecoder;
extern boost::shared_ptr<Decoder> decoder_factory (
boost::shared_ptr<const Content> content,
- std::list<boost::shared_ptr<ImageDecoder> > old_image_decoders,
boost::shared_ptr<Log> log,
bool fast
);
diff --git a/src/lib/player.cc b/src/lib/player.cc
index d437d5b1b..f22a6480f 100644
--- a/src/lib/player.cc
+++ b/src/lib/player.cc
@@ -115,14 +115,6 @@ Player::Player (shared_ptr<const Film> film, shared_ptr<const Playlist> playlist
void
Player::setup_pieces ()
{
- list<shared_ptr<ImageDecoder> > old_image_decoders;
- BOOST_FOREACH (shared_ptr<Piece> i, _pieces) {
- shared_ptr<ImageDecoder> imd = dynamic_pointer_cast<ImageDecoder> (i->decoder);
- if (imd) {
- old_image_decoders.push_back (imd);
- }
- }
-
_pieces.clear ();
BOOST_FOREACH (shared_ptr<Content> i, _playlist->content ()) {
@@ -131,7 +123,7 @@ Player::setup_pieces ()
continue;
}
- shared_ptr<Decoder> decoder = decoder_factory (i, old_image_decoders, _film->log(), _fast);
+ shared_ptr<Decoder> decoder = decoder_factory (i, _film->log(), _fast);
FrameRateChange frc (i->active_video_frame_rate(), _film->video_frame_rate());
if (!decoder) {