From 13aae5d8ff27886656ab7ea3ef1194987954bb3f Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Mon, 13 Jun 2016 14:38:12 +0100 Subject: 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. --- src/lib/decoder_factory.cc | 17 ++--------------- src/lib/decoder_factory.h | 1 - src/lib/player.cc | 10 +--------- 3 files changed, 3 insertions(+), 25 deletions(-) (limited to 'src/lib') 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_factory (shared_ptr content, list > old_image_decoders, shared_ptr log, bool fast) +decoder_factory (shared_ptr content, shared_ptr log, bool fast) { shared_ptr fc = dynamic_pointer_cast (content); if (fc) { @@ -51,20 +51,7 @@ decoder_factory (shared_ptr content, list ic = dynamic_pointer_cast (content); if (ic) { - shared_ptr decoder; - - /* See if we can re-use an old ImageDecoder */ - BOOST_FOREACH (shared_ptr i, old_image_decoders) { - if (i->content() == ic) { - decoder = i; - } - } - - if (!decoder) { - decoder.reset (new ImageDecoder (ic, log)); - } - - return decoder; + return shared_ptr (new ImageDecoder (ic, log)); } shared_ptr rc = dynamic_pointer_cast (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_factory ( boost::shared_ptr content, - std::list > old_image_decoders, boost::shared_ptr 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 film, shared_ptr playlist void Player::setup_pieces () { - list > old_image_decoders; - BOOST_FOREACH (shared_ptr i, _pieces) { - shared_ptr imd = dynamic_pointer_cast (i->decoder); - if (imd) { - old_image_decoders.push_back (imd); - } - } - _pieces.clear (); BOOST_FOREACH (shared_ptr i, _playlist->content ()) { @@ -131,7 +123,7 @@ Player::setup_pieces () continue; } - shared_ptr decoder = decoder_factory (i, old_image_decoders, _film->log(), _fast); + shared_ptr decoder = decoder_factory (i, _film->log(), _fast); FrameRateChange frc (i->active_video_frame_rate(), _film->video_frame_rate()); if (!decoder) { -- cgit v1.2.3