[vlc-devel] commit: Added a subpicture_NewFromPicture helper. (Laurent Aimar )

git version control git at videolan.org
Sun May 31 01:49:13 CEST 2009


vlc | branch: master | Laurent Aimar <fenrir at videolan.org> | Sat May 30 23:07:10 2009 +0200| [07b05122054dbec9c31932419ed4778d3f8193d6] | committer: Laurent Aimar 

Added a subpicture_NewFromPicture helper.

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=07b05122054dbec9c31932419ed4778d3f8193d6
---

 include/vlc_subpicture.h            |    9 ++++++
 src/libvlccore.sym                  |    1 +
 src/video_output/vout_subpictures.c |   51 +++++++++++++++++++++++++++++++++++
 3 files changed, 61 insertions(+), 0 deletions(-)

diff --git a/include/vlc_subpicture.h b/include/vlc_subpicture.h
index 26f0cf6..bdb09fd 100644
--- a/include/vlc_subpicture.h
+++ b/include/vlc_subpicture.h
@@ -176,6 +176,15 @@ VLC_EXPORT( subpicture_t *, subpicture_New, ( void ) );
  */
 VLC_EXPORT( void,  subpicture_Delete, ( subpicture_t *p_subpic ) );
 
+/**
+ * This function will create a subpicture having one region in the requested
+ * chroma showing the given picture.
+ *
+ * The picture_t given is not released nor used inside the
+ * returned subpicture_t.
+ */
+VLC_EXPORT( subpicture_t *, subpicture_NewFromPicture, ( vlc_object_t *, picture_t *, vlc_fourcc_t i_chroma ) );
+
 /**@}*/
 
 #endif /* _VLC_VIDEO_H */
diff --git a/src/libvlccore.sym b/src/libvlccore.sym
index 69eddac..f9b8c08 100644
--- a/src/libvlccore.sym
+++ b/src/libvlccore.sym
@@ -371,6 +371,7 @@ __str_format_meta
 str_format_time
 subpicture_Delete
 subpicture_New
+subpicture_NewFromPicture
 subpicture_region_ChainDelete
 subpicture_region_Delete
 subpicture_region_New
diff --git a/src/video_output/vout_subpictures.c b/src/video_output/vout_subpictures.c
index 84ac999..415e8c6 100644
--- a/src/video_output/vout_subpictures.c
+++ b/src/video_output/vout_subpictures.c
@@ -37,6 +37,7 @@
 #include <vlc_osd.h>
 #include "../libvlc.h"
 #include "vout_internal.h"
+#include <vlc_image.h>
 
 #include <assert.h>
 #include <limits.h>
@@ -719,6 +720,56 @@ static void SubpictureChain( subpicture_t **pp_head, subpicture_t *p_subpic )
     *pp_head = p_subpic;
 }
 
+subpicture_t *subpicture_NewFromPicture( vlc_object_t *p_obj,
+                                         picture_t *p_picture, vlc_fourcc_t i_chroma )
+{
+    /* */
+    video_format_t fmt_in = p_picture->format;
+
+    /* */
+    video_format_t fmt_out;
+    fmt_out = fmt_in;
+    fmt_out.i_chroma = i_chroma;
+
+    /* */
+    image_handler_t *p_image = image_HandlerCreate( p_obj );
+    if( !p_image )
+        return NULL;
+
+    picture_t *p_pip = image_Convert( p_image, p_picture, &fmt_in, &fmt_out );
+
+    image_HandlerDelete( p_image );
+
+    if( !p_pip )
+        return NULL;
+
+    subpicture_t *p_subpic = subpicture_New();
+    if( !p_subpic )
+    {
+         picture_Release( p_pip );
+         return NULL;
+    }
+
+    p_subpic->i_original_picture_width  = fmt_out.i_width;
+    p_subpic->i_original_picture_height = fmt_out.i_height;
+
+    fmt_out.i_aspect = 0;
+    fmt_out.i_sar_num =
+    fmt_out.i_sar_den = 0;
+
+    p_subpic->p_region = subpicture_region_New( &fmt_out );
+    if( p_subpic->p_region )
+    {
+        picture_Release( p_subpic->p_region->p_picture );
+        p_subpic->p_region->p_picture = p_pip;
+    }
+    else
+    {
+        picture_Release( p_pip );
+    }
+    return p_subpic;
+}
+
 /*****************************************************************************
  * subpicture_region_t allocation
  *****************************************************************************/




More information about the vlc-devel mailing list