vlc | branch: master | Francois Cartegnie <[email protected]> | Fri Jun 2 15:17:44 2017 +0200| [2ff1f0bb401adbd179c0629c5b159013587254de] | committer: Francois Cartegnie
vlc_subpicture: add per region width/height cropping We might want to limit text rendered output > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=2ff1f0bb401adbd179c0629c5b159013587254de --- include/vlc_subpicture.h | 2 ++ src/video_output/vout_subpictures.c | 36 +++++++++++++++++++++++++++++------- 2 files changed, 31 insertions(+), 7 deletions(-) diff --git a/include/vlc_subpicture.h b/include/vlc_subpicture.h index 3411bfffec..d3a1242864 100644 --- a/include/vlc_subpicture.h +++ b/include/vlc_subpicture.h @@ -67,6 +67,8 @@ struct subpicture_region_t text_segment_t *p_text; /**< subtitle text, made of a list of segments */ bool b_noregionbg; /**< render background under text only */ bool b_gridmode; /** if the decoder sends row/cols based output */ + int i_max_width; /** horizontal rendering/cropping limit */ + int i_max_height; /** vertical rendering/cropping limit */ subpicture_region_t *p_next; /**< next region in the list */ subpicture_region_private_t *p_private; /**< Private data for spu_t *only* */ diff --git a/src/video_output/vout_subpictures.c b/src/video_output/vout_subpictures.c index 10ba9b053c..ed35e7cec6 100644 --- a/src/video_output/vout_subpictures.c +++ b/src/video_output/vout_subpictures.c @@ -691,14 +691,15 @@ static void SpuRenderRegion(spu_t *spu, */ const bool using_palette = region->fmt.i_chroma == VLC_CODEC_YUVP; const bool force_palette = using_palette && sys->force_palette; - const bool force_crop = force_palette && sys->force_crop; + const bool crop_requested = (force_palette && sys->force_crop) || + region->i_max_width || region->i_max_height; bool changed_palette = false; /* Compute the margin which is expressed in destination pixel unit * The margin is applied only to subtitle and when no forced crop is * requested (dvd menu) */ int y_margin = 0; - if (!force_crop && subpic->b_subtitle) + if (!crop_requested && subpic->b_subtitle) y_margin = spu_invscale_h(sys->margin, scale_size); /* Place the picture @@ -873,11 +874,32 @@ static void SpuRenderRegion(spu_t *spu, } /* Force cropping if requested */ - if (force_crop) { - int crop_x = spu_scale_w(sys->crop.x, scale_size); - int crop_y = spu_scale_h(sys->crop.y, scale_size); - int crop_width = spu_scale_w(sys->crop.width, scale_size); - int crop_height= spu_scale_h(sys->crop.height,scale_size); + if (crop_requested) { + int crop_x, crop_y, crop_width, crop_height; + if(sys->force_crop){ + crop_x = sys->crop.x; + crop_y = sys->crop.y; + crop_width = sys->crop.width; + crop_height= sys->crop.height; + } + else + { + crop_x = x_offset; + crop_y = y_offset; + crop_width = region_fmt.i_visible_width; + crop_height = region_fmt.i_visible_height; + } + + if(region->i_max_width && region->i_max_width < crop_width) + crop_width = region->i_max_width; + + if(region->i_max_height && region->i_max_height < crop_height) + crop_height = region->i_max_height; + + crop_x = spu_scale_w(crop_x, scale_size); + crop_y = spu_scale_h(crop_y, scale_size); + crop_width = spu_scale_w(crop_width, scale_size); + crop_height= spu_scale_h(crop_height,scale_size); /* Find the intersection */ if (crop_x + crop_width <= x_offset || _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
