Remove the dreaded _decoded_video size assertion.
authorCarl Hetherington <cth@carlh.net>
Fri, 16 Oct 2015 14:08:48 +0000 (15:08 +0100)
committerCarl Hetherington <cth@carlh.net>
Fri, 16 Oct 2015 14:08:48 +0000 (15:08 +0100)
I am reasonably convinced that the accumulation of _decoded_video
is an optimisation rather than being required for correctness,
so it's no problem to throw frames away as the code will just
get them back again if and when it needs them.

src/lib/video_decoder.cc

index 4b9272413b6bca1c1b2995de5042af96a3f08f42..efc0ecf11cce892b4987df0b0ee9048153c149c4 100644 (file)
@@ -318,10 +318,14 @@ VideoDecoder::video (shared_ptr<const ImageProxy> image, Frame frame)
 
        copy (to_push.begin(), to_push.end(), back_inserter (_decoded_video));
 
-       /* We can't let this build up too much or we will run out of memory.  We need to allow
-          the most frames that can exist between blocks of sound in a multiplexed file.
+       /* We can't let this build up too much or we will run out of memory.  There is a
+          `best' value for the allowed size of _decoded_video which balances memory use
+          with decoding efficiency (lack of seeks).  Throwing away video frames here
+          is not a problem for correctness, so do it.
        */
-       DCPOMATIC_ASSERT (_decoded_video.size() <= 96);
+       while (_decoded_video.size() > 96) {
+               _decoded_video.pop_back ();
+       }
 }
 
 void