[vlc-devel] [PATCH 14/16] Add dynamic secondary sub margin workaround
Roland Bewick
roland.bewick at gmail.com
Tue May 21 20:08:38 CEST 2019
Margin from hotkeys was only applied when the subtitle is first rendered (non-absolute position).
This change will alter the absolute position by the difference in margin since the subtitle was first rendered.
---
include/vlc_subpicture.h | 1 +
src/misc/subpicture.c | 15 ++++++++-------
src/video_output/vout_subpictures.c | 17 +++++++++++++++++
3 files changed, 26 insertions(+), 7 deletions(-)
diff --git a/include/vlc_subpicture.h b/include/vlc_subpicture.h
index 4a646dc936..060ce8de12 100644
--- a/include/vlc_subpicture.h
+++ b/include/vlc_subpicture.h
@@ -198,6 +198,7 @@ struct subpicture_t
int i_original_picture_width; /**< original width of the movie */
int i_original_picture_height;/**< original height of the movie */
int i_alpha; /**< transparency */
+ int i_secondary_margin; /* margin recorded on first render */
/**@}*/
subpicture_updater_t updater;
diff --git a/src/misc/subpicture.c b/src/misc/subpicture.c
index 8c1ae51797..69ad2df459 100644
--- a/src/misc/subpicture.c
+++ b/src/misc/subpicture.c
@@ -46,13 +46,14 @@ subpicture_t *subpicture_New( const subpicture_updater_t *p_upd )
if( !p_subpic )
return NULL;
- p_subpic->i_order = 0;
- p_subpic->b_absolute = true;
- p_subpic->b_fade = false;
- p_subpic->b_subtitle = false;
- p_subpic->i_alpha = 0xFF;
- p_subpic->p_region = NULL;
- p_subpic->p_clock = NULL;
+ p_subpic->i_order = 0;
+ p_subpic->b_absolute = true;
+ p_subpic->b_fade = false;
+ p_subpic->b_subtitle = false;
+ p_subpic->i_alpha = 0xFF;
+ p_subpic->p_region = NULL;
+ p_subpic->p_clock = NULL;
+ p_subpic->i_secondary_margin = 0;
if( p_upd )
{
diff --git a/src/video_output/vout_subpictures.c b/src/video_output/vout_subpictures.c
index f1a2f5a4e8..9bd2abf2d3 100644
--- a/src/video_output/vout_subpictures.c
+++ b/src/video_output/vout_subpictures.c
@@ -831,6 +831,23 @@ static void SpuRenderRegion(spu_t *spu,
int i_align = region->i_align;
if (subpic->i_spu_id > SPU_ID_PRIMARY)
{
+ int secondary_margin =
+ spu_invscale_h(atomic_load(&sys->secondary_sub_margin[subpic->i_spu_id - SPU_ID_SECONDARY_START]),
+ scale_size);
+ if (!subpic->b_absolute)
+ {
+ /* Move the secondary subtitles by the secondary margin before overlap detection.
+ This way, overlaps will be resolved if they still exist. */
+ y_offset -= secondary_margin;
+ subpic->i_secondary_margin = secondary_margin;
+ }
+ else
+ {
+ /* Use an absolute margin for secondary subpictures that
+ have already been placed but have been moved by the user */
+ y_margin += secondary_margin - subpic->i_secondary_margin;
+ }
+
int i_align_override = sys->secondary_sub_alignment[subpic->i_spu_id - SPU_ID_SECONDARY_START];
i_align = i_align_override >= 0 ? i_align_override : i_align;
}
--
2.11.0
More information about the vlc-devel
mailing list