[vlc-devel] [RFC 2/3] subtitles: fix misplaced subs on video resize
Salah-Eddin Shaban
salah at videolan.org
Wed Mar 1 14:37:03 CET 2017
---
include/vlc_subpicture.h | 2 ++
src/misc/subpicture.c | 6 ++++++
src/video_output/vout_subpictures.c | 10 ++++------
3 files changed, 12 insertions(+), 6 deletions(-)
diff --git a/include/vlc_subpicture.h b/include/vlc_subpicture.h
index aa2ed0d..b64fa64 100644
--- a/include/vlc_subpicture.h
+++ b/include/vlc_subpicture.h
@@ -61,6 +61,8 @@ struct subpicture_region_t
int i_x; /**< position of region */
int i_y; /**< position of region */
+ int i_original_x;
+ int i_original_y;
int i_align; /**< alignment within a region */
int i_alpha; /**< transparency */
diff --git a/src/misc/subpicture.c b/src/misc/subpicture.c
index f18be17..9f8eb1c 100644
--- a/src/misc/subpicture.c
+++ b/src/misc/subpicture.c
@@ -170,6 +170,12 @@ void subpicture_Update( subpicture_t *p_subpicture,
p_upd->pf_update( p_subpicture, p_fmt_src, p_fmt_dst, i_ts );
+ for( subpicture_region_t *r = p_subpicture->p_region; r; r = r->p_next )
+ {
+ r->i_original_x = r->i_x;
+ r->i_original_y = r->i_y;
+ }
+
video_format_Clean( &p_private->src );
video_format_Clean( &p_private->dst );
diff --git a/src/video_output/vout_subpictures.c b/src/video_output/vout_subpictures.c
index bbccaf4..cc3bf57 100644
--- a/src/video_output/vout_subpictures.c
+++ b/src/video_output/vout_subpictures.c
@@ -1024,13 +1024,13 @@ static subpicture_t *SpuRenderSubpictures(spu_t *spu,
sys->text->fmt_out.video.i_visible_height = subpic->i_original_picture_height;
}
- /* Render all regions
- * We always transform non absolute subtitle into absolute one on the
- * first rendering to allow good subtitle overlap support.
- */
+ /* Render all regions */
for (region = subpic->p_region; region != NULL; region = region->p_next) {
spu_area_t area;
+ region->i_x = region->i_original_x;
+ region->i_y = region->i_original_y;
+
/* Compute region scale AR */
video_format_t region_fmt = region->fmt;
if (region_fmt.i_sar_num <= 0 || region_fmt.i_sar_den <= 0) {
@@ -1072,8 +1072,6 @@ static subpicture_t *SpuRenderSubpictures(spu_t *spu,
subtitle_area[subtitle_area_count++] = area;
}
}
- if (subpic->b_subtitle && subpic->p_region)
- subpic->b_absolute = true;
}
/* */
--
2.6.6
More information about the vlc-devel
mailing list