summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ext/ttml/gstttmlrender.c41
-rw-r--r--ext/ttml/subtitle.c1
-rw-r--r--ext/ttml/subtitle.h7
-rw-r--r--ext/ttml/ttmlparse.c6
4 files changed, 36 insertions, 19 deletions
diff --git a/ext/ttml/gstttmlrender.c b/ext/ttml/gstttmlrender.c
index ffa41912f..f8d063fe9 100644
--- a/ext/ttml/gstttmlrender.c
+++ b/ext/ttml/gstttmlrender.c
@@ -2031,8 +2031,14 @@ gst_ttml_render_render_block_elements (GstTtmlRender * render,
block_metrics.line_height, block_metrics.baseline_offset);
g_free (markup);
- bg_offset = 0;
- bg_height = block_metrics.line_height;
+ if (!block->style_set->fill_line_gap) {
+ bg_offset =
+ block_metrics.baseline_offset - ue->pango_font_metrics.baseline;
+ bg_height = ue->pango_font_metrics.height;
+ } else {
+ bg_offset = 0;
+ bg_height = block_metrics.line_height;
+ }
bg_width = text_image->width;
if (line_padding > 0) {
@@ -2656,7 +2662,9 @@ gst_ttml_render_render_text_region (GstTtmlRender * render,
/* Render each block and append to list. */
for (i = 0; i < gst_subtitle_region_get_block_count (region); ++i) {
const GstSubtitleBlock *block;
- GstTtmlRenderRenderedImage *rendered_block;
+ GstTtmlRenderRenderedImage *rendered_block, *block_bg_image, *tmp;
+ GstBuffer *block_bg_buf;
+ gint block_height;
block = gst_subtitle_region_get_block (region, i);
rendered_block = gst_ttml_render_render_text_block (render, block, text_buf,
@@ -2684,22 +2692,17 @@ gst_ttml_render_render_text_region (GstTtmlRender * render,
break;
}
- if (!gst_ttml_render_color_is_transparent (&block->style_set->
- background_color)) {
- /* Draw block background rectangle and render block image over it */
- GstTtmlRenderRenderedImage *tmp = rendered_block;
- GstBuffer *block_bg_buf;
- GstTtmlRenderRenderedImage *block_bg_image;
-
- block_bg_buf = gst_ttml_render_draw_rectangle (window_width,
- rendered_block->height, block->style_set->background_color);
- block_bg_image = gst_ttml_render_rendered_image_new (block_bg_buf, 0,
- rendered_block->y, window_width, rendered_block->height);
- rendered_block = gst_ttml_render_rendered_image_combine (block_bg_image,
- rendered_block);
- gst_ttml_render_rendered_image_free (tmp);
- gst_ttml_render_rendered_image_free (block_bg_image);
- }
+ tmp = rendered_block;
+
+ block_height = rendered_block->height + (2 * rendered_block->y);
+ block_bg_buf = gst_ttml_render_draw_rectangle (window_width,
+ block_height, block->style_set->background_color);
+ block_bg_image = gst_ttml_render_rendered_image_new (block_bg_buf, 0, 0,
+ window_width, block_height);
+ rendered_block = gst_ttml_render_rendered_image_combine (block_bg_image,
+ rendered_block);
+ gst_ttml_render_rendered_image_free (tmp);
+ gst_ttml_render_rendered_image_free (block_bg_image);
rendered_block->y = 0;
g_ptr_array_add (rendered_blocks, rendered_block);
diff --git a/ext/ttml/subtitle.c b/ext/ttml/subtitle.c
index e0c32faa1..38d442d98 100644
--- a/ext/ttml/subtitle.c
+++ b/ext/ttml/subtitle.c
@@ -77,6 +77,7 @@ gst_subtitle_style_set_new (void)
ret->extent_w = ret->extent_h = 0.0;
ret->padding_start = ret->padding_end
= ret->padding_before = ret->padding_after = 0.0;
+ ret->fill_line_gap = FALSE;
return ret;
}
diff --git a/ext/ttml/subtitle.h b/ext/ttml/subtitle.h
index 6724cc6d6..cf67fd4ef 100644
--- a/ext/ttml/subtitle.h
+++ b/ext/ttml/subtitle.h
@@ -353,6 +353,12 @@ typedef enum {
* @overflow: Defines what should happen if text and background rectangles
* generated by rendering text blocks overflow the size of their containing
* region. Applies only to #GstSubtitleRegions.
+ * @fill_line_gap: Controls whether the rendered backgrounds of text elements
+ * in a line fill the whole space between that line and adjacent lines or
+ * extends only to the font height of the text in the individual elements (thus
+ * this field controls whether or not there are gaps between backgrounds
+ * through which the underlying video can be seen). Applies only to
+ * #GstSubtitleBlocks.
*
* Holds a set of attributes that describes the styling and layout that apply
* to #GstSubtitleRegion, #GstSubtitleBlock and/or #GstSubtitleElement objects.
@@ -391,6 +397,7 @@ struct _GstSubtitleStyleSet
GstSubtitleWritingMode writing_mode;
GstSubtitleBackgroundMode show_background;
GstSubtitleOverflowMode overflow;
+ gboolean fill_line_gap;
/*< private >*/
gpointer _gst_reserved[GST_PADDING];
diff --git a/ext/ttml/ttmlparse.c b/ext/ttml/ttmlparse.c
index 57a6288fd..e097644fb 100644
--- a/ext/ttml/ttmlparse.c
+++ b/ext/ttml/ttmlparse.c
@@ -234,6 +234,7 @@ ttml_parse_style_set (const xmlNode * node)
for (attr = node->properties; attr != NULL; attr = attr->next) {
if (attr->ns && ((g_strcmp0 ((const gchar *) attr->ns->prefix, "tts") == 0)
+ || (g_strcmp0 ((const gchar *) attr->ns->prefix, "itts") == 0)
|| (g_strcmp0 ((const gchar *) attr->ns->prefix, "ebutts") == 0))) {
ttml_style_set_add_attr (s, (const gchar *) attr->name,
(const gchar *) attr->children->content);
@@ -658,6 +659,11 @@ ttml_update_style_set (GstSubtitleStyleSet * style_set, TtmlStyleSet * tss,
else
style_set->overflow = GST_SUBTITLE_OVERFLOW_MODE_HIDDEN;
}
+
+ if ((attr = ttml_style_set_get_attr (tss, "fillLineGap"))) {
+ if (g_strcmp0 (attr, "true") == 0)
+ style_set->fill_line_gap = TRUE;
+ }
}