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) {
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);
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
);
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 ()) {
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) {
ContentList c = _parent->selected_subtitle ();
DCPOMATIC_ASSERT (c.size() == 1);
- list<shared_ptr<ImageDecoder> > image_decoders;
- shared_ptr<Decoder> decoder = decoder_factory (c.front(), image_decoders, _parent->film()->log(), false);
+ shared_ptr<Decoder> decoder = decoder_factory (c.front(), _parent->film()->log(), false);
if (decoder) {
_subtitle_view = new SubtitleView (this, _parent->film(), decoder, c.front()->position ());