diff options
| author | Carl Hetherington <cth@carlh.net> | 2021-09-23 00:09:47 +0200 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2021-09-27 13:41:46 +0200 |
| commit | 67ff55886b1ee86d99c2ea27d10c73b85b0504b7 (patch) | |
| tree | 58f0a78ebb1e02f50c9e101b53c0402e3f688673 /src | |
| parent | 571a29b441ce6fe4a1e35bbcbcf4ea6abc885c22 (diff) | |
Various alignment tidying/fixups.
Diffstat (limited to 'src')
| -rw-r--r-- | src/lib/dcp_video.cc | 2 | ||||
| -rw-r--r-- | src/lib/ffmpeg_file_encoder.cc | 1 | ||||
| -rw-r--r-- | src/lib/player_video.cc | 13 | ||||
| -rw-r--r-- | src/lib/player_video.h | 4 | ||||
| -rw-r--r-- | src/lib/util.cc | 2 | ||||
| -rw-r--r-- | src/wx/film_viewer.cc | 6 | ||||
| -rw-r--r-- | src/wx/gl_video_view.cc | 2 | ||||
| -rw-r--r-- | src/wx/simple_video_view.cc | 7 | ||||
| -rw-r--r-- | src/wx/simple_video_view.h | 4 |
9 files changed, 18 insertions, 23 deletions
diff --git a/src/lib/dcp_video.cc b/src/lib/dcp_video.cc index 9daeb45c8..3a85a5ac6 100644 --- a/src/lib/dcp_video.cc +++ b/src/lib/dcp_video.cc @@ -105,7 +105,7 @@ DCPVideo::convert_to_xyz (shared_ptr<const PlayerVideo> frame, dcp::NoteHandler { shared_ptr<dcp::OpenJPEGImage> xyz; - auto image = frame->image (bind(&PlayerVideo::keep_xyz_or_rgb, _1), VideoRange::FULL, Image::Alignment::PADDED, false); + auto image = frame->image (bind(&PlayerVideo::keep_xyz_or_rgb, _1), VideoRange::FULL, false); if (frame->colour_conversion()) { xyz = dcp::rgb_to_xyz ( image->data()[0], diff --git a/src/lib/ffmpeg_file_encoder.cc b/src/lib/ffmpeg_file_encoder.cc index ef02f30c8..705557f79 100644 --- a/src/lib/ffmpeg_file_encoder.cc +++ b/src/lib/ffmpeg_file_encoder.cc @@ -402,7 +402,6 @@ FFmpegFileEncoder::video (shared_ptr<PlayerVideo> video, DCPTime time) auto image = video->image ( bind (&PlayerVideo::force, _1, _pixel_format), VideoRange::VIDEO, - Image::Alignment::PADDED, false ); diff --git a/src/lib/player_video.cc b/src/lib/player_video.cc index 2d60efe10..7c36af31b 100644 --- a/src/lib/player_video.cc +++ b/src/lib/player_video.cc @@ -110,13 +110,13 @@ PlayerVideo::set_text (PositionImage image) } shared_ptr<Image> -PlayerVideo::image (function<AVPixelFormat (AVPixelFormat)> pixel_format, VideoRange video_range, Image::Alignment alignment, bool fast) const +PlayerVideo::image (function<AVPixelFormat (AVPixelFormat)> pixel_format, VideoRange video_range, bool fast) const { /* XXX: this assumes that image() and prepare() are only ever called with the same parameters (except crop, inter size, out size, fade) */ boost::mutex::scoped_lock lm (_mutex); if (!_image || _crop != _image_crop || _inter_size != _image_inter_size || _out_size != _image_out_size || _fade != _image_fade) { - make_image (pixel_format, video_range, alignment, fast); + make_image (pixel_format, video_range, fast); } return _image; } @@ -133,11 +133,10 @@ PlayerVideo::raw_image () const * @param pixel_format Function which is called to decide what pixel format the output image should be; * it is passed the pixel format of the input image from the ImageProxy, and should return the desired * output pixel format. Two functions force and keep_xyz_or_rgb are provided for use here. - * @param alignment PADDED if the output image should be aligned to 32-byte boundaries, otherwise COMPACT. * @param fast true to be fast at the expense of quality. */ void -PlayerVideo::make_image (function<AVPixelFormat (AVPixelFormat)> pixel_format, VideoRange video_range, Image::Alignment alignment, bool fast) const +PlayerVideo::make_image (function<AVPixelFormat (AVPixelFormat)> pixel_format, VideoRange video_range, bool fast) const { _image_crop = _crop; _image_inter_size = _inter_size; @@ -180,11 +179,11 @@ PlayerVideo::make_image (function<AVPixelFormat (AVPixelFormat)> pixel_format, V } _image = prox.image->crop_scale_window ( - total_crop, _inter_size, _out_size, yuv_to_rgb, _video_range, pixel_format (prox.image->pixel_format()), video_range, alignment, fast + total_crop, _inter_size, _out_size, yuv_to_rgb, _video_range, pixel_format (prox.image->pixel_format()), video_range, Image::Alignment::COMPACT, fast ); if (_text) { - _image->alpha_blend (Image::ensure_alignment(_text->image, Image::Alignment::PADDED), _text->position); + _image->alpha_blend (_text->image, _text->position); } if (_fade) { @@ -303,7 +302,7 @@ PlayerVideo::prepare (function<AVPixelFormat (AVPixelFormat)> pixel_format, Vide _in->prepare (alignment, _inter_size); boost::mutex::scoped_lock lm (_mutex); if (!_image && !proxy_only) { - make_image (pixel_format, video_range, alignment, fast); + make_image (pixel_format, video_range, fast); } } diff --git a/src/lib/player_video.h b/src/lib/player_video.h index d24620c7e..237d2e3fe 100644 --- a/src/lib/player_video.h +++ b/src/lib/player_video.h @@ -76,7 +76,7 @@ public: } void prepare (std::function<AVPixelFormat (AVPixelFormat)> pixel_format, VideoRange video_range, Image::Alignment alignment, bool fast, bool proxy_only); - std::shared_ptr<Image> image (std::function<AVPixelFormat (AVPixelFormat)> pixel_format, VideoRange video_range, Image::Alignment alignment, bool fast) const; + std::shared_ptr<Image> image (std::function<AVPixelFormat (AVPixelFormat)> pixel_format, VideoRange video_range, bool fast) const; std::shared_ptr<const Image> raw_image () const; static AVPixelFormat force (AVPixelFormat, AVPixelFormat); @@ -127,7 +127,7 @@ public: } private: - void make_image (std::function<AVPixelFormat (AVPixelFormat)> pixel_format, VideoRange video_range, Image::Alignment alignment, bool fast) const; + void make_image (std::function<AVPixelFormat (AVPixelFormat)> pixel_format, VideoRange video_range, bool fast) const; std::shared_ptr<const ImageProxy> _in; Crop _crop; diff --git a/src/lib/util.cc b/src/lib/util.cc index 981cfa521..d3af74376 100644 --- a/src/lib/util.cc +++ b/src/lib/util.cc @@ -957,7 +957,7 @@ emit_subtitle_image (ContentTimePeriod period, dcp::SubtitleImage sub, dcp::Size { /* XXX: this is rather inefficient; decoding the image just to get its size */ FFmpegImageProxy proxy (sub.png_image()); - auto image = proxy.image(Image::Alignment::COMPACT).image; + auto image = proxy.image(Image::Alignment::PADDED).image; /* set up rect with height and width */ dcpomatic::Rect<double> rect(0, 0, image->size().width / double(size.width), image->size().height / double(size.height)); diff --git a/src/wx/film_viewer.cc b/src/wx/film_viewer.cc index 5609ebf86..0131aa294 100644 --- a/src/wx/film_viewer.cc +++ b/src/wx/film_viewer.cc @@ -208,6 +208,8 @@ FilmViewer::recreate_butler () return; } + auto const j2k_gl_optimised = dynamic_pointer_cast<GLVideoView>(_video_view) && _optimise_for_j2k; + _butler = std::make_shared<Butler>( _film, _player, @@ -215,9 +217,9 @@ FilmViewer::recreate_butler () _audio_channels, bind(&PlayerVideo::force, _1, AV_PIX_FMT_RGB24), VideoRange::FULL, - _optimise_for_j2k ? Image::Alignment::COMPACT : Image::Alignment::PADDED, + j2k_gl_optimised ? Image::Alignment::COMPACT : Image::Alignment::PADDED, true, - dynamic_pointer_cast<GLVideoView>(_video_view) && _optimise_for_j2k + j2k_gl_optimised ); if (!Config::instance()->sound() && !_audio.isStreamOpen()) { diff --git a/src/wx/gl_video_view.cc b/src/wx/gl_video_view.cc index 046465864..04e0bac46 100644 --- a/src/wx/gl_video_view.cc +++ b/src/wx/gl_video_view.cc @@ -497,7 +497,7 @@ GLVideoView::draw (Position<int>, dcp::Size) void GLVideoView::set_image (shared_ptr<const PlayerVideo> pv) { - shared_ptr<const Image> video = _optimise_for_j2k ? pv->raw_image() : pv->image(bind(&PlayerVideo::force, _1, AV_PIX_FMT_RGB24), VideoRange::FULL, Image::Alignment::COMPACT, true); + shared_ptr<const Image> video = _optimise_for_j2k ? pv->raw_image() : pv->image(bind(&PlayerVideo::force, _1, AV_PIX_FMT_RGB24), VideoRange::FULL, true); /* Only the player's black frames should be aligned at this stage, so this should * almost always have no work to do. diff --git a/src/wx/simple_video_view.cc b/src/wx/simple_video_view.cc index e54c8390e..1ac56bbfe 100644 --- a/src/wx/simple_video_view.cc +++ b/src/wx/simple_video_view.cc @@ -72,6 +72,7 @@ SimpleVideoView::paint () if (!_image) { dc.Clear (); } else { + DCPOMATIC_ASSERT (_image->alignment() == Image::Alignment::COMPACT); out_size = _image->size(); wxImage frame (out_size.width, out_size.height, _image->data()[0], true); wxBitmap frame_bitmap (frame); @@ -188,7 +189,7 @@ void SimpleVideoView::update () { if (!player_video().first) { - set_image (shared_ptr<Image>()); + _image.reset (); refresh_panel (); return; } @@ -221,9 +222,7 @@ SimpleVideoView::update () _state_timer.set ("get image"); - set_image ( - player_video().first->image(bind(&PlayerVideo::force, _1, AV_PIX_FMT_RGB24), VideoRange::FULL, Image::Alignment::COMPACT, true) - ); + _image = player_video().first->image(bind(&PlayerVideo::force, _1, AV_PIX_FMT_RGB24), VideoRange::FULL, true); _state_timer.set ("ImageChanged"); _viewer->image_changed (player_video().first); diff --git a/src/wx/simple_video_view.h b/src/wx/simple_video_view.h index 26d1299b1..cbb162023 100644 --- a/src/wx/simple_video_view.h +++ b/src/wx/simple_video_view.h @@ -42,10 +42,6 @@ public: NextFrameResult display_next_frame (bool non_blocking) override; private: - void set_image (std::shared_ptr<const Image> image) { - _image = image; - } - void refresh_panel (); void paint (); void timer (); |
