Allow convert_to_xyz() to take any image.
authorCarl Hetherington <cth@carlh.net>
Thu, 11 Aug 2022 20:44:57 +0000 (22:44 +0200)
committerCarl Hetherington <cth@carlh.net>
Thu, 11 Aug 2022 20:44:57 +0000 (22:44 +0200)
src/lib/dcp_video.cc
src/lib/player_video.cc
src/lib/player_video.h

index e4977726535b47f6c34d56ad0b253ca79c6f7d66..52b9d5a03741a4e16c4cc4080d2e84db08706202 100644 (file)
@@ -114,7 +114,8 @@ DCPVideo::encode_locally () const
        int const minimum_size = 16384;
        LOG_DEBUG_ENCODE("Using minimum frame size %1", minimum_size);
 
-       auto xyz = _frame->convert_to_xyz(boost::bind(&Log::dcp_log, dcpomatic_log.get(), _1, _2));
+       auto frame_image = _frame->image(bind(&PlayerVideo::keep_xyz_or_rgb, _1), VideoRange::FULL, false);
+       auto xyz = _frame->convert_to_xyz(frame_image, boost::bind(&Log::dcp_log, dcpomatic_log.get(), _1, _2));
        int noise_amount = 2;
        int pixel_skip = 16;
        while (true) {
@@ -139,7 +140,7 @@ DCPVideo::encode_locally () const
                 * convert_to_xyz() again because compress_j2k() corrupts its xyz parameter.
                 */
 
-               xyz = _frame->convert_to_xyz(boost::bind(&Log::dcp_log, dcpomatic_log.get(), _1, _2));
+               xyz = _frame->convert_to_xyz(frame_image, boost::bind(&Log::dcp_log, dcpomatic_log.get(), _1, _2));
                auto size = xyz->size ();
                auto pixels = size.width * size.height;
                dcpomatic::RNG rng(42);
index 04aeffc29535b06833075e77ffedd5163b871907..385d26aac8529a1d7131a0e9d80bed0b37bb6b70 100644 (file)
@@ -382,19 +382,18 @@ PlayerVideo::reset_metadata (shared_ptr<const Film> film, dcp::Size player_video
 
 
 shared_ptr<dcp::OpenJPEGImage>
-PlayerVideo::convert_to_xyz(dcp::NoteHandler note) const
+PlayerVideo::convert_to_xyz(shared_ptr<const Image> image, dcp::NoteHandler note) const
 {
-       auto frame_image = image(bind(&PlayerVideo::keep_xyz_or_rgb, _1), VideoRange::FULL, false);
        if (colour_conversion()) {
                return dcp::rgb_to_xyz (
-                       frame_image->data()[0],
-                       frame_image->size(),
-                       frame_image->stride()[0],
+                       image->data()[0],
+                       image->size(),
+                       image->stride()[0],
                        colour_conversion().get(),
                        note
                        );
        } else {
-               return make_shared<dcp::OpenJPEGImage>(frame_image->data()[0], frame_image->size(), frame_image->stride()[0]);
+               return make_shared<dcp::OpenJPEGImage>(image->data()[0], image->size(), image->stride()[0]);
        }
 }
 
index 731c1a6958b0d4777fc89b53ecb55cc422a673c6..9c1c064a59aa0998abb6462350bef40ff0b0a147 100644 (file)
@@ -90,7 +90,7 @@ public:
        bool has_j2k () const;
        std::shared_ptr<const dcp::Data> j2k () const;
 
-       std::shared_ptr<dcp::OpenJPEGImage> convert_to_xyz(dcp::NoteHandler note) const;
+       std::shared_ptr<dcp::OpenJPEGImage> convert_to_xyz(std::shared_ptr<const Image> image, dcp::NoteHandler note) const;
 
 
        Eyes eyes () const {