[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