video-info: implement GstVideoInfo as boxed type

GstVideoInfo usually is created on the stack, but boxed type can be useful
for bindings.

https://bugzilla.gnome.org/show_bug.cgi?id=752011
This commit is contained in:
Marcin Kolny 2015-07-06 11:36:58 +02:00 committed by Sebastian Dröge
parent 1586981b1b
commit 95fa0c58a2
2 changed files with 73 additions and 13 deletions

View file

@ -29,6 +29,61 @@
#include "video-info.h" #include "video-info.h"
#include "video-tile.h" #include "video-tile.h"
/**
* gst_video_info_copy:
* @info: a #GstVideoInfo
*
* Copy a GstVideoInfo structure.
*
* Returns: a new #GstVideoInfo. free with gst_video_info_free.
*
* Since: 1.6
*/
GstVideoInfo *
gst_video_info_copy (const GstVideoInfo * info)
{
return g_slice_dup (GstVideoInfo, info);
}
/**
* gst_video_info_free:
* @info: a #GstVideoInfo
*
* Free a GstVideoInfo structure previously allocated with gst_video_info_new()
* or gst_video_info_copy().
*
* Since: 1.6
*/
void
gst_video_info_free (GstVideoInfo * info)
{
g_slice_free (GstVideoInfo, info);
}
G_DEFINE_BOXED_TYPE (GstVideoInfo, gst_video_info,
(GBoxedCopyFunc) gst_video_info_copy, (GBoxedFreeFunc) gst_video_info_free);
/**
* gst_video_info_new:
*
* Allocate a new #GstVideoInfo that is also initialized with
* gst_video_info_init().
*
* Returns: a new #GstVideoInfo. free with gst_video_info_free().
*
* Since: 1.6
*/
GstVideoInfo *
gst_video_info_new (void)
{
GstVideoInfo *info;
info = g_slice_new (GstVideoInfo);
gst_video_info_init (info);
return info;
}
static int fill_planes (GstVideoInfo * info); static int fill_planes (GstVideoInfo * info);
/** /**

View file

@ -287,6 +287,8 @@ struct _GstVideoInfo {
} ABI; } ABI;
}; };
GType gst_video_info_get_type (void);
/* general info */ /* general info */
#define GST_VIDEO_INFO_FORMAT(i) (GST_VIDEO_FORMAT_INFO_FORMAT((i)->finfo)) #define GST_VIDEO_INFO_FORMAT(i) (GST_VIDEO_FORMAT_INFO_FORMAT((i)->finfo))
#define GST_VIDEO_INFO_NAME(i) (GST_VIDEO_FORMAT_INFO_NAME((i)->finfo)) #define GST_VIDEO_INFO_NAME(i) (GST_VIDEO_FORMAT_INFO_NAME((i)->finfo))
@ -335,26 +337,29 @@ struct _GstVideoInfo {
#define GST_VIDEO_INFO_COMP_PSTRIDE(i,c) GST_VIDEO_FORMAT_INFO_PSTRIDE((i)->finfo,(c)) #define GST_VIDEO_INFO_COMP_PSTRIDE(i,c) GST_VIDEO_FORMAT_INFO_PSTRIDE((i)->finfo,(c))
#define GST_VIDEO_INFO_COMP_POFFSET(i,c) GST_VIDEO_FORMAT_INFO_POFFSET((i)->finfo,(c)) #define GST_VIDEO_INFO_COMP_POFFSET(i,c) GST_VIDEO_FORMAT_INFO_POFFSET((i)->finfo,(c))
void gst_video_info_init (GstVideoInfo *info); GstVideoInfo * gst_video_info_new (void);
void gst_video_info_init (GstVideoInfo *info);
GstVideoInfo * gst_video_info_copy (const GstVideoInfo *info);
void gst_video_info_free (GstVideoInfo *info);
void gst_video_info_set_format (GstVideoInfo *info, GstVideoFormat format, void gst_video_info_set_format (GstVideoInfo *info, GstVideoFormat format,
guint width, guint height); guint width, guint height);
gboolean gst_video_info_from_caps (GstVideoInfo *info, const GstCaps * caps); gboolean gst_video_info_from_caps (GstVideoInfo *info, const GstCaps * caps);
GstCaps * gst_video_info_to_caps (GstVideoInfo *info); GstCaps * gst_video_info_to_caps (GstVideoInfo *info);
gboolean gst_video_info_convert (GstVideoInfo *info, gboolean gst_video_info_convert (GstVideoInfo *info,
GstFormat src_format, GstFormat src_format,
gint64 src_value, gint64 src_value,
GstFormat dest_format, GstFormat dest_format,
gint64 *dest_value); gint64 *dest_value);
gboolean gst_video_info_is_equal (const GstVideoInfo *info, gboolean gst_video_info_is_equal (const GstVideoInfo *info,
const GstVideoInfo *other); const GstVideoInfo *other);
#include <gst/video/video.h> #include <gst/video/video.h>
void gst_video_info_align (GstVideoInfo * info, GstVideoAlignment * align); void gst_video_info_align (GstVideoInfo * info, GstVideoAlignment * align);
G_END_DECLS G_END_DECLS