Added picture_BlendSubpicture helper.
authorLaurent Aimar <fenrir@videolan.org>
Sat, 11 Dec 2010 17:32:42 +0000 (18:32 +0100)
committerLaurent Aimar <fenrir@videolan.org>
Sun, 9 Jan 2011 21:44:11 +0000 (22:44 +0100)
It blends a subpicture onto a picture.

include/vlc_picture.h
src/libvlccore.sym
src/misc/picture.c

index b0fe6e4..156b9c2 100644 (file)
@@ -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
  *****************************************************************************/
index 309f88d..9f7249c 100644 (file)
@@ -309,6 +309,7 @@ osd_ShowTextAbsolute
 osd_ShowTextRelative
 osd_Volume
 path_sanitize
+picture_BlendSubpicture
 picture_CopyPixels
 picture_Delete
 picture_Export
index b738446..ae3efc9 100644 (file)
@@ -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 );
+        }
+    }
+}