Tiny C++11 tidy-up.
[dcpomatic.git] / src / lib / piece.cc
index 494fb17a04f1dca75b3a099ae382b3ef2354e01c..e0eeedc2de4f5896edb4eb7a8210059bbdbfac90 100644 (file)
@@ -1,84 +1,64 @@
 /*
-    Copyright (C) 2013-2014 Carl Hetherington <cth@carlh.net>
+    Copyright (C) 2013-2021 Carl Hetherington <cth@carlh.net>
 
-    This program is free software; you can redistribute it and/or modify
+    This file is part of DCP-o-matic.
+
+    DCP-o-matic is free software; you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by
     the Free Software Foundation; either version 2 of the License, or
     (at your option) any later version.
 
-    This program is distributed in the hope that it will be useful,
+    DCP-o-matic is distributed in the hope that it will be useful,
     but WITHOUT ANY WARRANTY; without even the implied warranty of
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     GNU General Public License for more details.
 
     You should have received a copy of the GNU General Public License
-    along with this program; if not, write to the Free Software
-    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+    along with DCP-o-matic.  If not, see <http://www.gnu.org/licenses/>.
 
 */
 
+
+#include "audio_content.h"
+#include "content.h"
 #include "piece.h"
-#include "player.h"
 
-using boost::shared_ptr;
 
-Piece::Piece (shared_ptr<Content> c)
-       : content (c)
-       , video_position (c->position ())
-       , audio_position (c->position ())
-       , repeat_to_do (0)
-       , repeat_done (0)
-{
+using std::shared_ptr;
+using namespace dcpomatic;
 
-}
 
-Piece::Piece (shared_ptr<Content> c, shared_ptr<Decoder> d)
+Piece::Piece (shared_ptr<Content> c, shared_ptr<Decoder> d, FrameRateChange f)
        : content (c)
        , decoder (d)
-       , video_position (c->position ())
-       , audio_position (c->position ())
-       , repeat_to_do (0)
-       , repeat_done (0)
+       , frc (f)
 {
-
+       if (content->audio) {
+               for (auto j: content->audio->streams()) {
+                       _stream_last_push_end[j] = content->position();
+               }
+       }
 }
 
-/** Set this piece to repeat a video frame a given number of times */
-void
-Piece::set_repeat (IncomingVideo video, int num)
-{
-       repeat_video = video;
-       repeat_to_do = num;
-       repeat_done = 0;
-}
+
 
 void
-Piece::reset_repeat ()
+Piece::update_pull_to (DCPTime& pull_to) const
 {
-       repeat_video.image.reset ();
-       repeat_to_do = 0;
-       repeat_done = 0;
-}
+       if (done) {
+               return;
+       }
 
-bool
-Piece::repeating () const
-{
-       return repeat_done != repeat_to_do;
+       for (auto const& i: _stream_last_push_end) {
+               pull_to = std::min(pull_to, i.second);
+       }
 }
 
+
 void
-Piece::repeat (Player* player)
+Piece::set_last_push_end (AudioStreamPtr stream, DCPTime end)
 {
-       player->process_video (
-               repeat_video.weak_piece,
-               repeat_video.image,
-               repeat_video.eyes,
-               repeat_video.part,
-               repeat_done > 0,
-               repeat_video.frame,
-               (repeat_done + 1) * (TIME_HZ / player->_film->video_frame_rate ())
-               );
-       
-       ++repeat_done;
+       DCPOMATIC_ASSERT (_stream_last_push_end.find(stream) != _stream_last_push_end.end());
+       _stream_last_push_end[stream] = end;
 }