summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2015-01-04 13:54:15 +0000
committerCarl Hetherington <cth@carlh.net>2015-01-04 13:54:15 +0000
commitc2018e0dae9ed2503b6244a47524a7ce16eedb0b (patch)
tree267fc895ab639dbd59c460867a90efe9bbee7e40 /src
parent3a546df5dacafb99958d53c9738e135d4f0deb2b (diff)
Try to fix static initialisation order problems.
Diffstat (limited to 'src')
-rw-r--r--src/colour_conversion.cc45
-rw-r--r--src/colour_conversion.h6
-rw-r--r--src/mono_picture_frame.cc4
-rw-r--r--src/stereo_picture_frame.cc4
4 files changed, 37 insertions, 22 deletions
diff --git a/src/colour_conversion.cc b/src/colour_conversion.cc
index f2e85e76..5a2b1fd5 100644
--- a/src/colour_conversion.cc
+++ b/src/colour_conversion.cc
@@ -25,23 +25,38 @@
using boost::shared_ptr;
using namespace dcp;
-ColourConversion ColourConversion::srgb_to_xyz (
- shared_ptr<const TransferFunction> (new ModifiedGammaTransferFunction (false, 2.4, 0.04045, 0.055, 12.92)),
- dcp::colour_matrix::srgb_to_xyz,
- shared_ptr<const TransferFunction> (new GammaTransferFunction (true, 2.6))
- );
+ColourConversion const &
+ColourConversion::srgb_to_xyz ()
+{
+ static ColourConversion* c = new ColourConversion (
+ shared_ptr<const TransferFunction> (new ModifiedGammaTransferFunction (false, 2.4, 0.04045, 0.055, 12.92)),
+ dcp::colour_matrix::srgb_to_xyz,
+ shared_ptr<const TransferFunction> (new GammaTransferFunction (true, 2.6))
+ );
+ return *c;
+}
-ColourConversion ColourConversion::xyz_to_srgb (
- shared_ptr<const TransferFunction> (new GammaTransferFunction (false, 2.6)),
- dcp::colour_matrix::xyz_to_rgb,
- shared_ptr<const TransferFunction> (new ModifiedGammaTransferFunction (true, 2.4, 0.04045, 0.055, 12.92))
- );
+ColourConversion const &
+ColourConversion::xyz_to_srgb ()
+{
+ static ColourConversion* c = new ColourConversion (
+ shared_ptr<const TransferFunction> (new GammaTransferFunction (false, 2.6)),
+ dcp::colour_matrix::xyz_to_rgb,
+ shared_ptr<const TransferFunction> (new ModifiedGammaTransferFunction (true, 2.4, 0.04045, 0.055, 12.92))
+ );
+ return *c;
+}
-ColourConversion ColourConversion::rec709_to_xyz (
- shared_ptr<const TransferFunction> (new ModifiedGammaTransferFunction (false, 2.4, 0.081, 0.099, 4.5)),
- dcp::colour_matrix::srgb_to_xyz,
- shared_ptr<const TransferFunction> (new GammaTransferFunction (true, 2.6))
- );
+ColourConversion const &
+ColourConversion::rec709_to_xyz ()
+{
+ static ColourConversion* c = new ColourConversion (
+ shared_ptr<const TransferFunction> (new ModifiedGammaTransferFunction (false, 2.4, 0.081, 0.099, 4.5)),
+ dcp::colour_matrix::srgb_to_xyz,
+ shared_ptr<const TransferFunction> (new GammaTransferFunction (true, 2.6))
+ );
+ return *c;
+}
ColourConversion::ColourConversion (
shared_ptr<const TransferFunction> in,
diff --git a/src/colour_conversion.h b/src/colour_conversion.h
index e2a8c6bc..cf19d447 100644
--- a/src/colour_conversion.h
+++ b/src/colour_conversion.h
@@ -63,9 +63,9 @@ public:
bool about_equal (ColourConversion const & other, float epsilon) const;
- static ColourConversion srgb_to_xyz;
- static ColourConversion xyz_to_srgb;
- static ColourConversion rec709_to_xyz;
+ static ColourConversion const & srgb_to_xyz ();
+ static ColourConversion const & xyz_to_srgb ();
+ static ColourConversion const & rec709_to_xyz ();
protected:
boost::shared_ptr<const TransferFunction> _in;
diff --git a/src/mono_picture_frame.cc b/src/mono_picture_frame.cc
index 4fe9356c..e7dc04ab 100644
--- a/src/mono_picture_frame.cc
+++ b/src/mono_picture_frame.cc
@@ -123,7 +123,7 @@ MonoPictureFrame::argb_frame (int reduce, float srgb_gamma) const
{
return xyz_to_rgba (
decompress_j2k (const_cast<uint8_t*> (_buffer->RoData()), _buffer->Size(), reduce),
- ColourConversion::xyz_to_srgb
+ ColourConversion::xyz_to_srgb ()
);
}
@@ -132,7 +132,7 @@ MonoPictureFrame::rgb_frame (uint16_t* buffer) const
{
xyz_to_rgb (
decompress_j2k (const_cast<uint8_t*> (_buffer->RoData()), _buffer->Size(), 0),
- ColourConversion::xyz_to_srgb,
+ ColourConversion::xyz_to_srgb (),
buffer
);
}
diff --git a/src/stereo_picture_frame.cc b/src/stereo_picture_frame.cc
index 3e872e2b..c510641d 100644
--- a/src/stereo_picture_frame.cc
+++ b/src/stereo_picture_frame.cc
@@ -89,7 +89,7 @@ StereoPictureFrame::argb_frame (Eye eye, int reduce, float srgb_gamma) const
break;
}
- return xyz_to_rgba (xyz_frame, ColourConversion::xyz_to_srgb);
+ return xyz_to_rgba (xyz_frame, ColourConversion::xyz_to_srgb ());
}
void
@@ -105,7 +105,7 @@ StereoPictureFrame::rgb_frame (Eye eye, uint16_t* buffer) const
break;
}
- return xyz_to_rgb (xyz_frame, ColourConversion::xyz_to_srgb, buffer);
+ return xyz_to_rgb (xyz_frame, ColourConversion::xyz_to_srgb (), buffer);
}
uint8_t const *