Split EncodedData classes into their own file.
authorCarl Hetherington <cth@carlh.net>
Tue, 1 Jul 2014 17:56:20 +0000 (18:56 +0100)
committerCarl Hetherington <cth@carlh.net>
Tue, 1 Jul 2014 17:56:20 +0000 (18:56 +0100)
src/lib/dcp_video.cc
src/lib/dcp_video.h
src/lib/encoded_data.cc [new file with mode: 0644]
src/lib/encoded_data.h [new file with mode: 0644]
src/lib/server.cc
src/lib/writer.cc
src/lib/wscript
src/tools/server_test.cc
test/client_server_test.cc

index b6b7ab296c2aa6fc5fff7b6b8cd50c25a59e571c..9b1c8c33eae12cf36d214cbd81b84af99e9e7ae8 100644 (file)
@@ -60,6 +60,7 @@
 #include "log.h"
 #include "cross.h"
 #include "player_video.h"
+#include "encoded_data.h"
 
 #define LOG_GENERAL(...) _log->log (String::compose (__VA_ARGS__), Log::TYPE_GENERAL);
 
@@ -317,90 +318,3 @@ DCPVideo::eyes () const
        return _frame->eyes ();
 }
 
-EncodedData::EncodedData (int s)
-       : _data (new uint8_t[s])
-       , _size (s)
-{
-
-}
-
-EncodedData::EncodedData (boost::filesystem::path file)
-{
-       _size = boost::filesystem::file_size (file);
-       _data = new uint8_t[_size];
-
-       FILE* f = fopen_boost (file, "rb");
-       if (!f) {
-               throw FileError (_("could not open file for reading"), file);
-       }
-       
-       size_t const r = fread (_data, 1, _size, f);
-       if (r != size_t (_size)) {
-               fclose (f);
-               throw FileError (_("could not read encoded data"), file);
-       }
-               
-       fclose (f);
-}
-
-
-EncodedData::~EncodedData ()
-{
-       delete[] _data;
-}
-
-/** Write this data to a J2K file.
- *  @param Film Film.
- *  @param frame DCP frame index.
- */
-void
-EncodedData::write (shared_ptr<const Film> film, int frame, Eyes eyes) const
-{
-       boost::filesystem::path const tmp_j2c = film->j2c_path (frame, eyes, true);
-
-       FILE* f = fopen_boost (tmp_j2c, "wb");
-       
-       if (!f) {
-               throw WriteFileError (tmp_j2c, errno);
-       }
-
-       fwrite (_data, 1, _size, f);
-       fclose (f);
-
-       boost::filesystem::path const real_j2c = film->j2c_path (frame, eyes, false);
-
-       /* Rename the file from foo.j2c.tmp to foo.j2c now that it is complete */
-       boost::filesystem::rename (tmp_j2c, real_j2c);
-}
-
-void
-EncodedData::write_info (shared_ptr<const Film> film, int frame, Eyes eyes, dcp::FrameInfo fin) const
-{
-       boost::filesystem::path const info = film->info_path (frame, eyes);
-       FILE* h = fopen_boost (info, "w");
-       fin.write (h);
-       fclose (h);
-}
-
-/** Send this data to a socket.
- *  @param socket Socket
- */
-void
-EncodedData::send (shared_ptr<Socket> socket)
-{
-       socket->write (_size);
-       socket->write (_data, _size);
-}
-
-LocallyEncodedData::LocallyEncodedData (uint8_t* d, int s)
-       : EncodedData (s)
-{
-       memcpy (_data, d, s);
-}
-
-/** @param s Size of data in bytes */
-RemotelyEncodedData::RemotelyEncodedData (int s)
-       : EncodedData (s)
-{
-
-}
index 05a0b4ce32f70ec02afe45953968f4eded79068b..e8e90260ce9955fd390be34a4135489187710a07 100644 (file)
@@ -32,62 +32,7 @@ class Image;
 class Log;
 class Subtitle;
 class PlayerVideo;
-
-/** @class EncodedData
- *  @brief Container for J2K-encoded data.
- */
-class EncodedData : public boost::noncopyable
-{
-public:
-       /** @param s Size of data, in bytes */
-       EncodedData (int s);
-
-       EncodedData (boost::filesystem::path);
-
-       virtual ~EncodedData ();
-
-       void send (boost::shared_ptr<Socket> socket);
-       void write (boost::shared_ptr<const Film>, int, Eyes) const;
-       void write_info (boost::shared_ptr<const Film>, int, Eyes, dcp::FrameInfo) const;
-
-       /** @return data */
-       uint8_t* data () const {
-               return _data;
-       }
-
-       /** @return data size, in bytes */
-       int size () const {
-               return _size;
-       }
-
-protected:
-       uint8_t* _data; ///< data
-       int _size;      ///< data size in bytes
-};
-
-/** @class LocallyEncodedData
- *  @brief EncodedData that was encoded locally; this class
- *  just keeps a pointer to the data, but does no memory
- *  management.
- */
-class LocallyEncodedData : public EncodedData
-{
-public:
-       /** @param d Data (which will be copied by this class)
-        *  @param s Size of data, in bytes.
-        */
-       LocallyEncodedData (uint8_t* d, int s);
-};
-
-/** @class RemotelyEncodedData
- *  @brief EncodedData that is being read from a remote server;
- *  this class allocates and manages memory for the data.
- */
-class RemotelyEncodedData : public EncodedData
-{
-public:
-       RemotelyEncodedData (int s);
-};
+class EncodedData;
 
 /** @class DCPVideo
  *  @brief A single frame of video destined for a DCP.
diff --git a/src/lib/encoded_data.cc b/src/lib/encoded_data.cc
new file mode 100644 (file)
index 0000000..fffc4d9
--- /dev/null
@@ -0,0 +1,115 @@
+/*
+    Copyright (C) 2012-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 "encoded_data.h"
+#include "cross.h"
+#include "exceptions.h"
+#include "film.h"
+
+#include "i18n.h"
+
+using boost::shared_ptr;
+
+EncodedData::EncodedData (int s)
+       : _data (new uint8_t[s])
+       , _size (s)
+{
+
+}
+
+EncodedData::EncodedData (boost::filesystem::path file)
+{
+       _size = boost::filesystem::file_size (file);
+       _data = new uint8_t[_size];
+
+       FILE* f = fopen_boost (file, "rb");
+       if (!f) {
+               throw FileError (_("could not open file for reading"), file);
+       }
+       
+       size_t const r = fread (_data, 1, _size, f);
+       if (r != size_t (_size)) {
+               fclose (f);
+               throw FileError (_("could not read encoded data"), file);
+       }
+               
+       fclose (f);
+}
+
+
+EncodedData::~EncodedData ()
+{
+       delete[] _data;
+}
+
+/** Write this data to a J2K file.
+ *  @param Film Film.
+ *  @param frame DCP frame index.
+ */
+void
+EncodedData::write (shared_ptr<const Film> film, int frame, Eyes eyes) const
+{
+       boost::filesystem::path const tmp_j2c = film->j2c_path (frame, eyes, true);
+
+       FILE* f = fopen_boost (tmp_j2c, "wb");
+       
+       if (!f) {
+               throw WriteFileError (tmp_j2c, errno);
+       }
+
+       fwrite (_data, 1, _size, f);
+       fclose (f);
+
+       boost::filesystem::path const real_j2c = film->j2c_path (frame, eyes, false);
+
+       /* Rename the file from foo.j2c.tmp to foo.j2c now that it is complete */
+       boost::filesystem::rename (tmp_j2c, real_j2c);
+}
+
+void
+EncodedData::write_info (shared_ptr<const Film> film, int frame, Eyes eyes, dcp::FrameInfo fin) const
+{
+       boost::filesystem::path const info = film->info_path (frame, eyes);
+       FILE* h = fopen_boost (info, "w");
+       fin.write (h);
+       fclose (h);
+}
+
+/** Send this data to a socket.
+ *  @param socket Socket
+ */
+void
+EncodedData::send (shared_ptr<Socket> socket)
+{
+       socket->write (_size);
+       socket->write (_data, _size);
+}
+
+LocallyEncodedData::LocallyEncodedData (uint8_t* d, int s)
+       : EncodedData (s)
+{
+       memcpy (_data, d, s);
+}
+
+/** @param s Size of data in bytes */
+RemotelyEncodedData::RemotelyEncodedData (int s)
+       : EncodedData (s)
+{
+
+}
diff --git a/src/lib/encoded_data.h b/src/lib/encoded_data.h
new file mode 100644 (file)
index 0000000..9064cc9
--- /dev/null
@@ -0,0 +1,82 @@
+/*
+    Copyright (C) 2012-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 <boost/noncopyable.hpp>
+#include <boost/filesystem.hpp>
+#include <dcp/picture_mxf_writer.h>
+#include "types.h"
+
+class Socket;
+class Film;
+
+/** @class EncodedData
+ *  @brief Container for J2K-encoded data.
+ */
+class EncodedData : public boost::noncopyable
+{
+public:
+       /** @param s Size of data, in bytes */
+       EncodedData (int s);
+
+       EncodedData (boost::filesystem::path);
+
+       virtual ~EncodedData ();
+
+       void send (boost::shared_ptr<Socket> socket);
+       void write (boost::shared_ptr<const Film>, int, Eyes) const;
+       void write_info (boost::shared_ptr<const Film>, int, Eyes, dcp::FrameInfo) const;
+
+       /** @return data */
+       uint8_t* data () const {
+               return _data;
+       }
+
+       /** @return data size, in bytes */
+       int size () const {
+               return _size;
+       }
+
+protected:
+       uint8_t* _data; ///< data
+       int _size;      ///< data size in bytes
+};
+
+/** @class LocallyEncodedData
+ *  @brief EncodedData that was encoded locally; this class
+ *  just keeps a pointer to the data, but does no memory
+ *  management.
+ */
+class LocallyEncodedData : public EncodedData
+{
+public:
+       /** @param d Data (which will be copied by this class)
+        *  @param s Size of data, in bytes.
+        */
+       LocallyEncodedData (uint8_t* d, int s);
+};
+
+/** @class RemotelyEncodedData
+ *  @brief EncodedData that is being read from a remote server;
+ *  this class allocates and manages memory for the data.
+ */
+class RemotelyEncodedData : public EncodedData
+{
+public:
+       RemotelyEncodedData (int s);
+};
index 2469d415142ba0504da0647436b359c14510614b..5598ef69f8388aae66098669ad9361e369691ab9 100644 (file)
@@ -38,6 +38,7 @@
 #include "config.h"
 #include "cross.h"
 #include "player_video.h"
+#include "encoded_data.h"
 
 #include "i18n.h"
 
index ca9b63df42db31eceeb4a9a105786fd12efbc135..04eac854c8174ac18b23b975a3d283f76216d41a 100644 (file)
 #include "log.h"
 #include "dcp_video.h"
 #include "dcp_content_type.h"
-#include "player.h"
 #include "audio_mapping.h"
 #include "config.h"
 #include "job.h"
 #include "cross.h"
 #include "audio_buffers.h"
 #include "md5_digester.h"
+#include "encoded_data.h"
 
 #include "i18n.h"
 
index 1f6a2aa4f3a0770a10ff1612590f9cada08d31af..9937133ecdd4b6f9eb5765e6e4f305827f4420c4 100644 (file)
@@ -20,6 +20,7 @@ sources = """
           dcpomatic_time.cc
           dolby_cp750.cc
           encoder.cc
+          encoded_data.cc
           examine_content_job.cc
           exceptions.cc
           file_group.cc
index 0e19a36ac8a9308a2bc76b3ac0528f2876948e46..9223efb3eb6642592e1fa36af82a0a266bca774f 100644 (file)
@@ -35,6 +35,7 @@
 #include "lib/video_decoder.h"
 #include "lib/player.h"
 #include "lib/player_video.h"
+#include "lib/encoded_data.h"
 
 using std::cout;
 using std::cerr;
index 19c827c2f91cc0be69da5f5757769655460d7702..184dde9b8512904e0a49ef3e6e27d89ff9cf7565 100644 (file)
@@ -34,6 +34,7 @@
 #include "lib/scaler.h"
 #include "lib/player_video.h"
 #include "lib/image_proxy.h"
+#include "lib/encoded_data.h"
 
 using std::list;
 using boost::shared_ptr;