Put Piece class in its own file.
authorCarl Hetherington <cth@carlh.net>
Fri, 25 Apr 2014 22:03:30 +0000 (23:03 +0100)
committerCarl Hetherington <cth@carlh.net>
Fri, 25 Apr 2014 22:03:30 +0000 (23:03 +0100)
src/lib/piece.cc [new file with mode: 0644]
src/lib/piece.h [new file with mode: 0644]
src/lib/player.cc
src/lib/player.h
src/lib/wscript

diff --git a/src/lib/piece.cc b/src/lib/piece.cc
new file mode 100644 (file)
index 0000000..3c39ecf
--- /dev/null
@@ -0,0 +1,83 @@
+/*
+    Copyright (C) 2013-2014 Carl Hetherington <cth@carlh.net>
+
+    This program 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,
+    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.
+
+*/
+
+#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)
+{
+
+}
+
+Piece::Piece (shared_ptr<Content> c, shared_ptr<Decoder> d)
+       : content (c)
+       , decoder (d)
+       , video_position (c->position ())
+       , audio_position (c->position ())
+       , repeat_to_do (0)
+       , repeat_done (0)
+{
+
+}
+
+/** 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 ()
+{
+       repeat_video.image.reset ();
+       repeat_to_do = 0;
+       repeat_done = 0;
+}
+
+bool
+Piece::repeating () const
+{
+       return repeat_done != repeat_to_do;
+}
+
+void
+Piece::repeat (Player* player)
+{
+       player->process_video (
+               repeat_video.weak_piece,
+               repeat_video.image,
+               repeat_video.eyes,
+               repeat_done > 0,
+               repeat_video.frame,
+               (repeat_done + 1) * (TIME_HZ / player->_film->video_frame_rate ())
+               );
+       
+       ++repeat_done;
+}
+
diff --git a/src/lib/piece.h b/src/lib/piece.h
new file mode 100644 (file)
index 0000000..76df909
--- /dev/null
@@ -0,0 +1,65 @@
+/*
+    Copyright (C) 2013-2014 Carl Hetherington <cth@carlh.net>
+
+    This program 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,
+    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.
+
+*/
+
+#ifndef DCPOMATIC_PIECE_H
+#define DCPOMATIC_PIECE_H
+
+#include "types.h"
+#include "video_content.h"
+
+class Content;
+class Decoder;
+class Piece;
+class Image;
+class Player;
+
+struct IncomingVideo
+{
+public:
+       boost::weak_ptr<Piece> weak_piece;
+       boost::shared_ptr<const Image> image;
+       Eyes eyes;
+       bool same;
+       VideoContent::Frame frame;
+       Time extra;
+};
+
+class Piece
+{
+public:
+       Piece (boost::shared_ptr<Content> c);
+       Piece (boost::shared_ptr<Content> c, boost::shared_ptr<Decoder> d);
+       void set_repeat (IncomingVideo video, int num);
+       void reset_repeat ();
+       bool repeating () const;
+       void repeat (Player* player);
+
+       boost::shared_ptr<Content> content;
+       boost::shared_ptr<Decoder> decoder;
+       /** Time of the last video we emitted relative to the start of the DCP */
+       Time video_position;
+       /** Time of the last audio we emitted relative to the start of the DCP */
+       Time audio_position;
+
+       IncomingVideo repeat_video;
+       int repeat_to_do;
+       int repeat_done;
+};
+
+#endif
index c4558f33f7286dc7b7a3992c11258de7078e83cd..7afe74831c10b46b4631e05856785149743c0be5 100644 (file)
@@ -46,72 +46,6 @@ using boost::shared_ptr;
 using boost::weak_ptr;
 using boost::dynamic_pointer_cast;
 
-class Piece
-{
-public:
-       Piece (shared_ptr<Content> c)
-               : content (c)
-               , video_position (c->position ())
-               , audio_position (c->position ())
-               , repeat_to_do (0)
-               , repeat_done (0)
-       {}
-       
-       Piece (shared_ptr<Content> c, shared_ptr<Decoder> d)
-               : content (c)
-               , decoder (d)
-               , video_position (c->position ())
-               , audio_position (c->position ())
-               , repeat_to_do (0)
-               , repeat_done (0)
-       {}
-
-       /** Set this piece to repeat a video frame a given number of times */
-       void set_repeat (IncomingVideo video, int num)
-       {
-               repeat_video = video;
-               repeat_to_do = num;
-               repeat_done = 0;
-       }
-
-       void reset_repeat ()
-       {
-               repeat_video.image.reset ();
-               repeat_to_do = 0;
-               repeat_done = 0;
-       }
-
-       bool repeating () const
-       {
-               return repeat_done != repeat_to_do;
-       }
-
-       void repeat (Player* player)
-       {
-               player->process_video (
-                       repeat_video.weak_piece,
-                       repeat_video.image,
-                       repeat_video.eyes,
-                       repeat_done > 0,
-                       repeat_video.frame,
-                       (repeat_done + 1) * (TIME_HZ / player->_film->video_frame_rate ())
-                       );
-
-               ++repeat_done;
-       }
-       
-       shared_ptr<Content> content;
-       shared_ptr<Decoder> decoder;
-       /** Time of the last video we emitted relative to the start of the DCP */
-       Time video_position;
-       /** Time of the last audio we emitted relative to the start of the DCP */
-       Time audio_position;
-
-       IncomingVideo repeat_video;
-       int repeat_to_do;
-       int repeat_done;
-};
-
 Player::Player (shared_ptr<const Film> f, shared_ptr<const Playlist> p)
        : _film (f)
        , _playlist (p)
index f7896d7d913515c6656cabd9dc9717fb1682467b..4368f48ba9d0da6043694d397c4114a3b0d7d4d7 100644 (file)
@@ -29,6 +29,7 @@
 #include "rect.h"
 #include "audio_merger.h"
 #include "audio_content.h"
+#include "piece.h"
 
 class Job;
 class Film;
@@ -38,21 +39,6 @@ class Piece;
 class Image;
 class Resampler;
 
-/** @class Player
- *  @brief A class which can `play' a Playlist; emitting its audio and video.
- */
-
-struct IncomingVideo
-{
-public:
-       boost::weak_ptr<Piece> weak_piece;
-       boost::shared_ptr<const Image> image;
-       Eyes eyes;
-       bool same;
-       VideoContent::Frame frame;
-       Time extra;
-};
-
 /** A wrapper for an Image which contains some pending operations; these may
  *  not be necessary if the receiver of the PlayerImage throws it away.
  */
@@ -75,6 +61,9 @@ private:
        Position<int> _subtitle_position;
 };
  
+/** @class Player
+ *  @brief A class which can `play' a Playlist; emitting its audio and video.
+ */
 class Player : public boost::enable_shared_from_this<Player>, public boost::noncopyable
 {
 public:
index a50216f6d500755cf338c00fd8308ca075215633..dc90e17f34f7451cc5d51574bc7127e1ccb9564f 100644 (file)
@@ -40,6 +40,7 @@ sources = """
           kdm.cc
           json_server.cc
           log.cc
+          piece.cc
           player.cc
           playlist.cc
           ratio.cc