summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2022-04-28 13:47:57 +0200
committerCarl Hetherington <cth@carlh.net>2022-04-28 23:55:03 +0200
commit3e58ef99b87f72a838f850f18507267380df93d7 (patch)
tree3aab44dd154fe033ad7817de2bbfb9a90ac667b8
parentcf181ea2c2cb308cdb743109a194c7f4db11a95f (diff)
Allow ContentBitmapText to contain multiple BitmapText objects.
-rw-r--r--src/lib/content_text.h6
-rw-r--r--src/lib/player.cc43
2 files changed, 26 insertions, 23 deletions
diff --git a/src/lib/content_text.h b/src/lib/content_text.h
index 5edb9af20..fb86bc786 100644
--- a/src/lib/content_text.h
+++ b/src/lib/content_text.h
@@ -50,11 +50,11 @@ class ContentBitmapText : public ContentText
public:
ContentBitmapText (dcpomatic::ContentTime f, std::shared_ptr<const Image> im, dcpomatic::Rect<double> r)
: ContentText (f)
- , sub (im, r)
+ , subs{ {im, r} }
{}
- /* Our text, with its rectangle unmodified by any offsets or scales that the content specifies */
- BitmapText sub;
+ /* Our texts, with their rectangles unmodified by any offsets or scales that the content specifies */
+ std::vector<BitmapText> subs;
};
/** A text caption. We store the time period separately (as well as in the dcp::SubtitleStrings)
diff --git a/src/lib/player.cc b/src/lib/player.cc
index 978df7d9e..b2db2b3ef 100644
--- a/src/lib/player.cc
+++ b/src/lib/player.cc
@@ -1104,32 +1104,35 @@ Player::bitmap_text_start (weak_ptr<Piece> weak_piece, weak_ptr<const TextConten
return;
}
- /* Apply content's subtitle offsets */
- subtitle.sub.rectangle.x += content->x_offset ();
- subtitle.sub.rectangle.y += content->y_offset ();
+ PlayerText ps;
+ for (auto& sub: subtitle.subs)
+ {
+ /* Apply content's subtitle offsets */
+ sub.rectangle.x += content->x_offset ();
+ sub.rectangle.y += content->y_offset ();
- /* Apply a corrective translation to keep the subtitle centred after the scale that is coming up */
- subtitle.sub.rectangle.x -= subtitle.sub.rectangle.width * ((content->x_scale() - 1) / 2);
- subtitle.sub.rectangle.y -= subtitle.sub.rectangle.height * ((content->y_scale() - 1) / 2);
+ /* Apply a corrective translation to keep the subtitle centred after the scale that is coming up */
+ sub.rectangle.x -= sub.rectangle.width * ((content->x_scale() - 1) / 2);
+ sub.rectangle.y -= sub.rectangle.height * ((content->y_scale() - 1) / 2);
- /* Apply content's subtitle scale */
- subtitle.sub.rectangle.width *= content->x_scale ();
- subtitle.sub.rectangle.height *= content->y_scale ();
+ /* Apply content's subtitle scale */
+ sub.rectangle.width *= content->x_scale ();
+ sub.rectangle.height *= content->y_scale ();
- PlayerText ps;
- auto image = subtitle.sub.image;
+ auto image = sub.image;
- /* We will scale the subtitle up to fit _video_container_size */
- int const width = subtitle.sub.rectangle.width * _video_container_size.width;
- int const height = subtitle.sub.rectangle.height * _video_container_size.height;
- if (width == 0 || height == 0) {
- return;
- }
+ /* We will scale the subtitle up to fit _video_container_size */
+ int const width = sub.rectangle.width * _video_container_size.width;
+ int const height = sub.rectangle.height * _video_container_size.height;
+ if (width == 0 || height == 0) {
+ return;
+ }
- dcp::Size scaled_size (width, height);
- ps.bitmap.push_back (BitmapText(image->scale(scaled_size, dcp::YUVToRGB::REC601, image->pixel_format(), Image::Alignment::PADDED, _fast), subtitle.sub.rectangle));
- DCPTime from (content_time_to_dcp (piece, subtitle.from()));
+ dcp::Size scaled_size (width, height);
+ ps.bitmap.push_back (BitmapText(image->scale(scaled_size, dcp::YUVToRGB::REC601, image->pixel_format(), Image::Alignment::PADDED, _fast), sub.rectangle));
+ }
+ DCPTime from(content_time_to_dcp(piece, subtitle.from()));
_active_texts[static_cast<int>(content->type())].add_from(weak_content, ps, from);
}