summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2022-12-10 01:39:38 +0100
committerCarl Hetherington <cth@carlh.net>2022-12-10 01:39:38 +0100
commit9063624bd62c8fb513b51077300a74c7e46a56d9 (patch)
tree9ebb5b4fddfb13ebbc88ccdd48013258c8e7e930
parent02b74112721d13a27b0bbaece714d5c8ea743d43 (diff)
Extract crop.h
-rw-r--r--src/lib/crop.cc61
-rw-r--r--src/lib/crop.h76
-rw-r--r--src/lib/guess_crop.h2
-rw-r--r--src/lib/image.h4
-rw-r--r--src/lib/types.cc25
-rw-r--r--src/lib/types.h38
-rw-r--r--src/lib/video_content.h2
-rw-r--r--src/lib/wscript1
-rw-r--r--src/wx/auto_crop_dialog.h2
9 files changed, 145 insertions, 66 deletions
diff --git a/src/lib/crop.cc b/src/lib/crop.cc
new file mode 100644
index 000000000..105baaaf5
--- /dev/null
+++ b/src/lib/crop.cc
@@ -0,0 +1,61 @@
+/*
+ Copyright (C) 2013-2019 Carl Hetherington <cth@carlh.net>
+
+ 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.
+
+ 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 DCP-o-matic. If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+
+#include "crop.h"
+#include <dcp/raw_convert.h>
+#include <libxml++/libxml++.h>
+
+
+using std::shared_ptr;
+using std::string;
+using dcp::raw_convert;
+
+
+Crop::Crop(shared_ptr<cxml::Node> node)
+{
+ left = node->number_child<int>("LeftCrop");
+ right = node->number_child<int>("RightCrop");
+ top = node->number_child<int>("TopCrop");
+ bottom = node->number_child<int>("BottomCrop");
+}
+
+
+void
+Crop::as_xml(xmlpp::Node* node) const
+{
+ node->add_child("LeftCrop")->add_child_text(raw_convert<string>(left));
+ node->add_child("RightCrop")->add_child_text(raw_convert<string>(right));
+ node->add_child("TopCrop")->add_child_text(raw_convert<string>(top));
+ node->add_child("BottomCrop")->add_child_text(raw_convert<string>(bottom));
+}
+
+
+bool operator==(Crop const & a, Crop const & b)
+{
+ return (a.left == b.left && a.right == b.right && a.top == b.top && a.bottom == b.bottom);
+}
+
+
+bool operator!=(Crop const & a, Crop const & b)
+{
+ return !(a == b);
+}
+
diff --git a/src/lib/crop.h b/src/lib/crop.h
new file mode 100644
index 000000000..00734d5e9
--- /dev/null
+++ b/src/lib/crop.h
@@ -0,0 +1,76 @@
+/*
+ Copyright (C) 2013-2021 Carl Hetherington <cth@carlh.net>
+
+ 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.
+
+ 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 DCP-o-matic. If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+
+#ifndef DCPOMATIC_CROP_H
+#define DCPOMATIC_CROP_H
+
+
+#include <dcp/types.h>
+#include <memory>
+
+
+namespace cxml {
+ class Node;
+}
+
+
+/** @struct Crop
+ * @brief A description of the crop of an image or video.
+ */
+struct Crop
+{
+ Crop() {}
+ Crop(int l, int r, int t, int b) : left (l), right (r), top (t), bottom (b) {}
+ explicit Crop(std::shared_ptr<cxml::Node>);
+
+ /** Number of pixels to remove from the left-hand side */
+ int left = 0;
+ /** Number of pixels to remove from the right-hand side */
+ int right = 0;
+ /** Number of pixels to remove from the top */
+ int top = 0;
+ /** Number of pixels to remove from the bottom */
+ int bottom = 0;
+
+ dcp::Size apply(dcp::Size s, int minimum = 4) const {
+ s.width -= left + right;
+ s.height -= top + bottom;
+
+ if (s.width < minimum) {
+ s.width = minimum;
+ }
+
+ if (s.height < minimum) {
+ s.height = minimum;
+ }
+
+ return s;
+ }
+
+ void as_xml (xmlpp::Node *) const;
+};
+
+
+extern bool operator==(Crop const & a, Crop const & b);
+extern bool operator!=(Crop const & a, Crop const & b);
+
+
+#endif
diff --git a/src/lib/guess_crop.h b/src/lib/guess_crop.h
index d74912042..f18c2db5e 100644
--- a/src/lib/guess_crop.h
+++ b/src/lib/guess_crop.h
@@ -19,8 +19,8 @@
*/
+#include "crop.h"
#include "dcpomatic_time.h"
-#include "types.h"
#include <memory>
diff --git a/src/lib/image.h b/src/lib/image.h
index 73d08b902..60e65c20a 100644
--- a/src/lib/image.h
+++ b/src/lib/image.h
@@ -25,6 +25,8 @@
#ifndef DCPOMATIC_IMAGE_H
#define DCPOMATIC_IMAGE_H
+
+#include "crop.h"
#include "position.h"
#include "position_image.h"
#include "types.h"
@@ -34,9 +36,11 @@ extern "C" {
#include <dcp/array_data.h>
#include <dcp/colour_conversion.h>
+
struct AVFrame;
class Socket;
+
class Image : public std::enable_shared_from_this<Image>
{
public:
diff --git a/src/lib/types.cc b/src/lib/types.cc
index e9b412ded..6bac0cf3e 100644
--- a/src/lib/types.cc
+++ b/src/lib/types.cc
@@ -42,15 +42,6 @@ using std::shared_ptr;
using std::vector;
using dcp::raw_convert;
-bool operator== (Crop const & a, Crop const & b)
-{
- return (a.left == b.left && a.right == b.right && a.top == b.top && a.bottom == b.bottom);
-}
-
-bool operator!= (Crop const & a, Crop const & b)
-{
- return !(a == b);
-}
/** @param r Resolution.
* @return Untranslated string representation.
@@ -85,22 +76,6 @@ string_to_resolution (string s)
return Resolution::TWO_K;
}
-Crop::Crop (shared_ptr<cxml::Node> node)
-{
- left = node->number_child<int> ("LeftCrop");
- right = node->number_child<int> ("RightCrop");
- top = node->number_child<int> ("TopCrop");
- bottom = node->number_child<int> ("BottomCrop");
-}
-
-void
-Crop::as_xml (xmlpp::Node* node) const
-{
- node->add_child("LeftCrop")->add_child_text (raw_convert<string> (left));
- node->add_child("RightCrop")->add_child_text (raw_convert<string> (right));
- node->add_child("TopCrop")->add_child_text (raw_convert<string> (top));
- node->add_child("BottomCrop")->add_child_text (raw_convert<string> (bottom));
-}
TextType
string_to_text_type (string s)
diff --git a/src/lib/types.h b/src/lib/types.h
index f2a79b2fd..ab3f15841 100644
--- a/src/lib/types.h
+++ b/src/lib/types.h
@@ -167,44 +167,6 @@ extern std::string text_type_to_string (TextType t);
extern std::string text_type_to_name (TextType t);
extern TextType string_to_text_type (std::string s);
-/** @struct Crop
- * @brief A description of the crop of an image or video.
- */
-struct Crop
-{
- Crop () : left (0), right (0), top (0), bottom (0) {}
- Crop (int l, int r, int t, int b) : left (l), right (r), top (t), bottom (b) {}
- explicit Crop (std::shared_ptr<cxml::Node>);
-
- /** Number of pixels to remove from the left-hand side */
- int left;
- /** Number of pixels to remove from the right-hand side */
- int right;
- /** Number of pixels to remove from the top */
- int top;
- /** Number of pixels to remove from the bottom */
- int bottom;
-
- dcp::Size apply (dcp::Size s, int minimum = 4) const {
- s.width -= left + right;
- s.height -= top + bottom;
-
- if (s.width < minimum) {
- s.width = minimum;
- }
-
- if (s.height < minimum) {
- s.height = minimum;
- }
-
- return s;
- }
-
- void as_xml (xmlpp::Node *) const;
-};
-
-extern bool operator== (Crop const & a, Crop const & b);
-extern bool operator!= (Crop const & a, Crop const & b);
struct CPLSummary
{
diff --git a/src/lib/video_content.h b/src/lib/video_content.h
index cff141e4e..087a92245 100644
--- a/src/lib/video_content.h
+++ b/src/lib/video_content.h
@@ -25,9 +25,9 @@
#include "colour_conversion.h"
#include "content_part.h"
+#include "crop.h"
#include "dcpomatic_time.h"
#include "pixel_quanta.h"
-#include "types.h"
#include "user_property.h"
#include <dcp/language_tag.h>
#include <boost/thread/mutex.hpp>
diff --git a/src/lib/wscript b/src/lib/wscript
index cf97623f9..3a3c8fd51 100644
--- a/src/lib/wscript
+++ b/src/lib/wscript
@@ -59,6 +59,7 @@ sources = """
combine_dcp_job.cc
copy_dcp_details_to_film.cc
create_cli.cc
+ crop.cc
cross_common.cc
crypto.cc
curl_uploader.cc
diff --git a/src/wx/auto_crop_dialog.h b/src/wx/auto_crop_dialog.h
index 0615c14bb..6c02acbdd 100644
--- a/src/wx/auto_crop_dialog.h
+++ b/src/wx/auto_crop_dialog.h
@@ -20,7 +20,7 @@
#include "table_dialog.h"
-#include "lib/types.h"
+#include "lib/crop.h"
#include <boost/signals2.hpp>