Merge tag 'v2.16.78' into v2.17.x v2.17.12
authorCarl Hetherington <cth@carlh.net>
Thu, 22 Feb 2024 00:25:03 +0000 (01:25 +0100)
committerCarl Hetherington <cth@carlh.net>
Thu, 22 Feb 2024 00:25:03 +0000 (01:25 +0100)
13 files changed:
1  2 
src/lib/dcp_content.cc
src/lib/ffmpeg_decoder.cc
src/lib/ffmpeg_examiner.cc
src/lib/film.cc
src/lib/image_decoder.cc
src/lib/player.cc
src/lib/player_video.cc
src/lib/video_content.cc
src/lib/video_content.h
src/tools/dcpomatic_cli.cc
src/wx/video_panel.cc
test/wscript
wscript

Simple merge
Simple merge
Simple merge
diff --cc src/lib/film.cc
Simple merge
Simple merge
index 03935a46b880be3e0f5ac7d024a420f70e934284,c03cb97a59f50ad8549f8142279e48a236a801dc..dba02cfbafaf02ecf5f63a0e93719fc9df06a1d2
@@@ -1081,39 -1094,37 +1081,42 @@@ Player::video (weak_ptr<Piece> weak_pie
  
        auto const content_video = piece->content->video;
  
+       auto scaled_size = content_video->scaled_size(film->frame_size());
+       DCPOMATIC_ASSERT(scaled_size);
        for (auto eyes: eyes_to_emit) {
 -              _last_video[weak_piece] = std::make_shared<PlayerVideo>(
 -                      video.image,
 -                      content_video->actual_crop(),
 -                      content_video->fade(film, video.frame),
 -                      scale_for_display(
 -                              *scaled_size,
 +              use_video(
 +                      std::make_shared<PlayerVideo>(
 +                              video.image,
 +                              content_video->actual_crop(),
 +                              content_video->fade(film, video.time),
 +                              scale_for_display(
-                                       content_video->scaled_size(film->frame_size()),
++                                      *scaled_size,
 +                                      _video_container_size,
 +                                      film->frame_size(),
 +                                      content_video->pixel_quanta()
 +                                      ),
                                _video_container_size,
 -                              film->frame_size(),
 -                              content_video->pixel_quanta()
 +                              eyes,
 +                              video.part,
 +                              content_video->colour_conversion(),
 +                              content_video->range(),
 +                              piece->content,
 +                              video.time,
 +                              false
                                ),
 -                      _video_container_size,
 -                      eyes,
 -                      video.part,
 -                      content_video->colour_conversion(),
 -                      content_video->range(),
 -                      piece->content,
 -                      video.frame,
 -                      false
 +                      time,
 +                      piece->content->end(film)
                        );
 +      }
 +}
  
 -              DCPTime t = time;
 -              for (int i = 0; i < frc.repeat; ++i) {
 -                      if (t < piece->content->end(film)) {
 -                              emit_video (_last_video[weak_piece], t);
 -                      }
 -                      t += one_video_frame ();
 -              }
 +void
 +Player::use_video(shared_ptr<PlayerVideo> pv, DCPTime time, DCPTime end)
 +{
 +      _last_video[pv->eyes()] = { pv, time };
 +      if (pv->eyes() != Eyes::LEFT) {
 +              emit_video_until(std::min(time + one_video_frame() / 2, end));
        }
  }
  
index b020ca1cd8172ba1cd5193c5658d42c621166171,35c5d3daa484f997d141417bf56efa10208753e8..b39f83908222bce2fd7313e944edc2d3199362d0
@@@ -362,9 -361,14 +362,14 @@@ PlayerVideo::reset_metadata (shared_ptr
        }
  
        _crop = content->video->actual_crop();
 -      _fade = content->video->fade(film, _video_frame.get());
 +      _fade = content->video->fade(film, _video_time.get());
+       auto const size = content->video->scaled_size(film->frame_size());
+       if (!size) {
+               return false;
+       }
        _inter_size = scale_for_display(
-               content->video->scaled_size(film->frame_size()),
+               *size,
                player_video_container_size,
                film->frame_size(),
                content->video->pixel_quanta()
Simple merge
index 25e43b0ebc8de4b37176e3dc90c38cfe26091013,e7e8eb1b3d3d6f35c68169bc71677ffddf0632e7..d31c25f135e136f748204c5ae2479b09d8641db1
@@@ -204,11 -204,11 +204,11 @@@ public
  
  
        /* XXX: names for these? */
-       dcp::Size size_after_3d_split () const;
-       dcp::Size size_after_crop () const;
-       dcp::Size scaled_size (dcp::Size container_size);
+       boost::optional<dcp::Size> size_after_3d_split() const;
+       boost::optional<dcp::Size> size_after_crop() const;
+       boost::optional<dcp::Size> scaled_size(dcp::Size container_size);
  
 -      boost::optional<double> fade (std::shared_ptr<const Film> film, Frame) const;
 +      boost::optional<double> fade(std::shared_ptr<const Film> film, dcpomatic::ContentTime time) const;
  
        std::string processing_description (std::shared_ptr<const Film> film);
  
Simple merge
Simple merge
diff --cc test/wscript
Simple merge
diff --cc wscript
Simple merge