diff options
| author | Carl Hetherington <cth@carlh.net> | 2016-06-13 14:38:12 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2016-06-13 14:38:12 +0100 |
| commit | 13aae5d8ff27886656ab7ea3ef1194987954bb3f (patch) | |
| tree | 315d023a86f16fa8c0ae2e2c87fbc20071316fe8 /src/lib | |
| parent | 1daaa67c21d4d28757cdcb06c5e26aec3817867c (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.cc | 17 | ||||
| -rw-r--r-- | src/lib/decoder_factory.h | 1 | ||||
| -rw-r--r-- | src/lib/player.cc | 10 |
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) { |
