mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-10-21 09:53:47 +00:00
ttml: add refcounting to GstSubtitleStlyeSet type
https://bugzilla.gnome.org/show_bug.cgi?id=780402
This commit is contained in:
parent
4f790d13a6
commit
9f0a06245b
3 changed files with 62 additions and 22 deletions
|
@ -1242,7 +1242,7 @@ map_fail:
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
const GstSubtitleElement *element;
|
GstSubtitleElement *element;
|
||||||
gchar *text;
|
gchar *text;
|
||||||
} UnifiedElement;
|
} UnifiedElement;
|
||||||
|
|
||||||
|
|
|
@ -32,6 +32,22 @@
|
||||||
|
|
||||||
#include "subtitle.h"
|
#include "subtitle.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* gst_subtitle_style_set_free:
|
||||||
|
* @style_set: A #GstSubtitleStyleSet.
|
||||||
|
*
|
||||||
|
* Free @style_set and its associated memory.
|
||||||
|
*/
|
||||||
|
static void
|
||||||
|
_gst_subtitle_style_set_free (GstSubtitleStyleSet * style_set)
|
||||||
|
{
|
||||||
|
g_return_if_fail (style_set != NULL);
|
||||||
|
g_free (style_set->font_family);
|
||||||
|
g_slice_free (GstSubtitleStyleSet, style_set);
|
||||||
|
}
|
||||||
|
|
||||||
|
GST_DEFINE_MINI_OBJECT_TYPE (GstSubtitleStyleSet, gst_subtitle_style_set);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* gst_subtitle_style_set_new:
|
* gst_subtitle_style_set_new:
|
||||||
*
|
*
|
||||||
|
@ -46,6 +62,10 @@ gst_subtitle_style_set_new (void)
|
||||||
GstSubtitleColor white = { 255, 255, 255, 255 };
|
GstSubtitleColor white = { 255, 255, 255, 255 };
|
||||||
GstSubtitleColor transparent = { 0, 0, 0, 0 };
|
GstSubtitleColor transparent = { 0, 0, 0, 0 };
|
||||||
|
|
||||||
|
gst_mini_object_init (GST_MINI_OBJECT_CAST (ret), 0,
|
||||||
|
gst_subtitle_style_set_get_type (), NULL, NULL,
|
||||||
|
(GstMiniObjectFreeFunction) _gst_subtitle_style_set_free);
|
||||||
|
|
||||||
ret->font_family = g_strdup ("default");
|
ret->font_family = g_strdup ("default");
|
||||||
ret->font_size = 1.0;
|
ret->font_size = 1.0;
|
||||||
ret->line_height = 1.25;
|
ret->line_height = 1.25;
|
||||||
|
@ -60,26 +80,12 @@ gst_subtitle_style_set_new (void)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* gst_subtitle_style_set_free:
|
|
||||||
* @style_set: A #GstSubtitleStyleSet.
|
|
||||||
*
|
|
||||||
* Free @style_set and its associated memory.
|
|
||||||
*/
|
|
||||||
void
|
|
||||||
gst_subtitle_style_set_free (GstSubtitleStyleSet * style_set)
|
|
||||||
{
|
|
||||||
g_return_if_fail (style_set != NULL);
|
|
||||||
g_free (style_set->font_family);
|
|
||||||
g_slice_free (GstSubtitleStyleSet, style_set);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_gst_subtitle_element_free (GstSubtitleElement * element)
|
_gst_subtitle_element_free (GstSubtitleElement * element)
|
||||||
{
|
{
|
||||||
g_return_if_fail (element != NULL);
|
g_return_if_fail (element != NULL);
|
||||||
gst_subtitle_style_set_free (element->style_set);
|
gst_subtitle_style_set_unref (element->style_set);
|
||||||
g_slice_free (GstSubtitleElement, element);
|
g_slice_free (GstSubtitleElement, element);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -121,7 +127,7 @@ static void
|
||||||
_gst_subtitle_block_free (GstSubtitleBlock * block)
|
_gst_subtitle_block_free (GstSubtitleBlock * block)
|
||||||
{
|
{
|
||||||
g_return_if_fail (block != NULL);
|
g_return_if_fail (block != NULL);
|
||||||
gst_subtitle_style_set_free (block->style_set);
|
gst_subtitle_style_set_unref (block->style_set);
|
||||||
g_ptr_array_unref (block->elements);
|
g_ptr_array_unref (block->elements);
|
||||||
g_slice_free (GstSubtitleBlock, block);
|
g_slice_free (GstSubtitleBlock, block);
|
||||||
}
|
}
|
||||||
|
@ -202,7 +208,7 @@ gst_subtitle_block_get_element_count (const GstSubtitleBlock * block)
|
||||||
* function does not return a reference; the caller should obtain a reference
|
* function does not return a reference; the caller should obtain a reference
|
||||||
* using gst_subtitle_element_ref(), if needed.
|
* using gst_subtitle_element_ref(), if needed.
|
||||||
*/
|
*/
|
||||||
const GstSubtitleElement *
|
GstSubtitleElement *
|
||||||
gst_subtitle_block_get_element (const GstSubtitleBlock * block, guint index)
|
gst_subtitle_block_get_element (const GstSubtitleBlock * block, guint index)
|
||||||
{
|
{
|
||||||
g_return_val_if_fail (block != NULL, NULL);
|
g_return_val_if_fail (block != NULL, NULL);
|
||||||
|
@ -217,7 +223,7 @@ static void
|
||||||
_gst_subtitle_region_free (GstSubtitleRegion * region)
|
_gst_subtitle_region_free (GstSubtitleRegion * region)
|
||||||
{
|
{
|
||||||
g_return_if_fail (region != NULL);
|
g_return_if_fail (region != NULL);
|
||||||
gst_subtitle_style_set_free (region->style_set);
|
gst_subtitle_style_set_unref (region->style_set);
|
||||||
g_ptr_array_unref (region->blocks);
|
g_ptr_array_unref (region->blocks);
|
||||||
g_slice_free (GstSubtitleRegion, region);
|
g_slice_free (GstSubtitleRegion, region);
|
||||||
}
|
}
|
||||||
|
|
|
@ -366,7 +366,10 @@ typedef enum {
|
||||||
* all object types. The types to which each attribute applies is given in the
|
* all object types. The types to which each attribute applies is given in the
|
||||||
* description of that attribute below.
|
* description of that attribute below.
|
||||||
*/
|
*/
|
||||||
struct _GstSubtitleStyleSet {
|
struct _GstSubtitleStyleSet
|
||||||
|
{
|
||||||
|
GstMiniObject mini_object;
|
||||||
|
|
||||||
GstSubtitleTextDirection text_direction;
|
GstSubtitleTextDirection text_direction;
|
||||||
gchar *font_family;
|
gchar *font_family;
|
||||||
gdouble font_size;
|
gdouble font_size;
|
||||||
|
@ -388,11 +391,42 @@ struct _GstSubtitleStyleSet {
|
||||||
GstSubtitleWritingMode writing_mode;
|
GstSubtitleWritingMode writing_mode;
|
||||||
GstSubtitleBackgroundMode show_background;
|
GstSubtitleBackgroundMode show_background;
|
||||||
GstSubtitleOverflowMode overflow;
|
GstSubtitleOverflowMode overflow;
|
||||||
|
|
||||||
|
/*< private >*/
|
||||||
|
gpointer _gst_reserved[GST_PADDING];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
GType gst_subtitle_style_set_get_type (void);
|
||||||
|
|
||||||
GstSubtitleStyleSet * gst_subtitle_style_set_new (void);
|
GstSubtitleStyleSet * gst_subtitle_style_set_new (void);
|
||||||
|
|
||||||
void gst_subtitle_style_set_free (GstSubtitleStyleSet * style_set);
|
/**
|
||||||
|
* gst_subtitle_style_set_ref:
|
||||||
|
* @style_set: A #GstSubtitleStyleSet.
|
||||||
|
*
|
||||||
|
* Increments the refcount of @style_set.
|
||||||
|
*
|
||||||
|
* Returns: (transfer full): @style_set.
|
||||||
|
*/
|
||||||
|
static inline GstSubtitleStyleSet *
|
||||||
|
gst_subtitle_style_set_ref (GstSubtitleStyleSet * style_set)
|
||||||
|
{
|
||||||
|
return (GstSubtitleStyleSet *)
|
||||||
|
gst_mini_object_ref (GST_MINI_OBJECT_CAST (style_set));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* gst_subtitle_style_set_unref:
|
||||||
|
* @style_set: (transfer full): A #GstSubtitleStyleSet.
|
||||||
|
*
|
||||||
|
* Decrements the refcount of @style_set. If the refcount reaches 0, @style_set
|
||||||
|
* will be freed.
|
||||||
|
*/
|
||||||
|
static inline void
|
||||||
|
gst_subtitle_style_set_unref (GstSubtitleStyleSet * style_set)
|
||||||
|
{
|
||||||
|
gst_mini_object_unref (GST_MINI_OBJECT_CAST (style_set));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -489,7 +523,7 @@ void gst_subtitle_block_add_element (
|
||||||
|
|
||||||
guint gst_subtitle_block_get_element_count (const GstSubtitleBlock * block);
|
guint gst_subtitle_block_get_element_count (const GstSubtitleBlock * block);
|
||||||
|
|
||||||
const GstSubtitleElement * gst_subtitle_block_get_element (
|
GstSubtitleElement * gst_subtitle_block_get_element (
|
||||||
const GstSubtitleBlock * block, guint index);
|
const GstSubtitleBlock * block, guint index);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in a new issue