]> git.sesse.net Git - vlc/commitdiff
Added a subpicture_NewFromPicture helper.
authorLaurent Aimar <fenrir@videolan.org>
Sat, 30 May 2009 21:07:10 +0000 (23:07 +0200)
committerLaurent Aimar <fenrir@videolan.org>
Sat, 30 May 2009 23:48:48 +0000 (01:48 +0200)
include/vlc_subpicture.h
src/libvlccore.sym
src/video_output/vout_subpictures.c

index 26f0cf6caf8f3257ea4e9b8b35a8709eecc312e4..bdb09fdf408dfc6a2d3796332cb60504c830d7ae 100644 (file)
@@ -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 */
index 69eddaca0453f78891747a5af3af4e37b352ce66..f9b8c087fcd661189927e764620217491fd6e9b6 100644 (file)
@@ -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
index 84ac9996fee7792978c0492e72e982dc478b59aa..415e8c65570b091bc62d2ddd879985353f04934d 100644 (file)
@@ -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
  *****************************************************************************/