Commit 81f8f88d authored by Laurent Aimar's avatar Laurent Aimar

Added picture_BlendSubpicture helper.

It blends a subpicture onto a picture.
parent 212661f3
......@@ -279,6 +279,19 @@ VLC_EXPORT( int, picture_Export, ( vlc_object_t *p_obj, block_t **pp_image, vide
*/
VLC_EXPORT( int, picture_Setup, ( picture_t *, vlc_fourcc_t i_chroma, int i_width, int i_height, int i_sar_num, int i_sar_den ) );
/**
* This function will blend a given subpicture onto a picture.
*
* The subpicture and all its region must:
* - be absolute.
* - not be ephemere.
* - not have the fade flag.
* - contains only picture (no text rendering).
*/
VLC_EXPORT( void, picture_BlendSubpicture, ( picture_t *, filter_t *p_blend, subpicture_t * ) );
/*****************************************************************************
* Flags used to describe the status of a picture
*****************************************************************************/
......
......@@ -309,6 +309,7 @@ osd_ShowTextAbsolute
osd_ShowTextRelative
osd_Volume
path_sanitize
picture_BlendSubpicture
picture_CopyPixels
picture_Delete
picture_Export
......
......@@ -389,3 +389,22 @@ int picture_Export( vlc_object_t *p_obj,
return VLC_SUCCESS;
}
void picture_BlendSubpicture(picture_t *dst,
filter_t *blend, subpicture_t *src)
{
assert(blend && dst && blend->fmt_out.video.i_chroma == dst->format.i_chroma);
assert(src && !src->b_fade && src->b_absolute);
for (subpicture_region_t *r = src->p_region; r != NULL; r = r->p_next) {
assert(r->p_picture && r->i_align == 0);
if (filter_ConfigureBlend(blend, dst->format.i_width, dst->format.i_height,
&r->fmt) ||
filter_Blend(blend, dst,
r->i_x, r->i_y, r->p_picture,
src->i_alpha * r->i_alpha / 255)) {
msg_Err(blend, "blending %4.4s to %4.4s failed",
(char *)&blend->fmt_in.video.i_chroma,
(char *)&blend->fmt_out.video.i_chroma );
}
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment