diff options
| author | Carl Hetherington <cth@carlh.net> | 2015-01-04 13:54:15 +0000 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2015-01-04 13:54:15 +0000 |
| commit | c2018e0dae9ed2503b6244a47524a7ce16eedb0b (patch) | |
| tree | 267fc895ab639dbd59c460867a90efe9bbee7e40 /src | |
| parent | 3a546df5dacafb99958d53c9738e135d4f0deb2b (diff) | |
Try to fix static initialisation order problems.
Diffstat (limited to 'src')
| -rw-r--r-- | src/colour_conversion.cc | 45 | ||||
| -rw-r--r-- | src/colour_conversion.h | 6 | ||||
| -rw-r--r-- | src/mono_picture_frame.cc | 4 | ||||
| -rw-r--r-- | src/stereo_picture_frame.cc | 4 |
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 * |
