rawvideoparse: videoparse now uses GstValueArray and not GValueArray

This commit is contained in:
Thibault Saunier 2017-03-27 15:29:16 -03:00
parent a49c114d4e
commit 90f766cc51

View file

@ -57,9 +57,9 @@ static void gst_video_parse_set_property (GObject * object, guint prop_id,
static void gst_video_parse_get_property (GObject * object, guint prop_id, static void gst_video_parse_get_property (GObject * object, guint prop_id,
GValue * value, GParamSpec * pspec); GValue * value, GParamSpec * pspec);
static GValueArray *gst_video_parse_int_valarray_from_string (const gchar * static gboolean gst_video_parse_int_valarray_from_string (const gchar *
str); str, GValue * valarray);
static gchar *gst_video_parse_int_valarray_to_string (GValueArray * valarray); static gchar *gst_video_parse_int_valarray_to_string (GValue * valarray);
GST_DEBUG_CATEGORY_STATIC (gst_video_parse_debug); GST_DEBUG_CATEGORY_STATIC (gst_video_parse_debug);
#define GST_CAT_DEFAULT gst_video_parse_debug #define GST_CAT_DEFAULT gst_video_parse_debug
@ -217,13 +217,13 @@ gst_video_parse_set_property (GObject * object, guint prop_id,
break; break;
case PROP_STRIDES:{ case PROP_STRIDES:{
GValueArray *valarray = GValue valarray = G_VALUE_INIT;
gst_video_parse_int_valarray_from_string (g_value_get_string (value));
if (valarray != NULL) { if (gst_video_parse_int_valarray_from_string (g_value_get_string (value),
&valarray)) {
g_object_set (G_OBJECT (vp->rawvideoparse), "plane-strides", g_object_set (G_OBJECT (vp->rawvideoparse), "plane-strides",
valarray, NULL); &valarray, NULL);
g_value_array_free (valarray); g_value_unset (&valarray);
} else { } else {
GST_WARNING_OBJECT (vp, "failed to deserialize given strides"); GST_WARNING_OBJECT (vp, "failed to deserialize given strides");
} }
@ -232,13 +232,13 @@ gst_video_parse_set_property (GObject * object, guint prop_id,
} }
case PROP_OFFSETS:{ case PROP_OFFSETS:{
GValueArray *valarray = GValue valarray = G_VALUE_INIT;
gst_video_parse_int_valarray_from_string (g_value_get_string (value));
if (valarray != NULL) { if (gst_video_parse_int_valarray_from_string (g_value_get_string (value),
&valarray)) {
g_object_set (G_OBJECT (vp->rawvideoparse), "plane-offsets", g_object_set (G_OBJECT (vp->rawvideoparse), "plane-offsets",
valarray, NULL); valarray, NULL);
g_value_array_free (valarray); g_value_unset (&valarray);
} else { } else {
GST_WARNING_OBJECT (vp, "failed to deserialize given offsets"); GST_WARNING_OBJECT (vp, "failed to deserialize given offsets");
} }
@ -318,20 +318,22 @@ gst_video_parse_get_property (GObject * object, guint prop_id, GValue * value,
} }
case PROP_STRIDES:{ case PROP_STRIDES:{
GValueArray *array; GValue array;
g_object_get (G_OBJECT (vp->rawvideoparse), "plane-strides", &array, g_object_get (G_OBJECT (vp->rawvideoparse), "plane-strides", &array,
NULL); NULL);
g_value_take_string (value, g_value_take_string (value,
gst_video_parse_int_valarray_to_string (array)); gst_video_parse_int_valarray_to_string (&array));
break; break;
} }
case PROP_OFFSETS:{ case PROP_OFFSETS:{
GValueArray *array; GValue array;
g_object_get (G_OBJECT (vp->rawvideoparse), "plane-offsets", &array, g_object_get (G_OBJECT (vp->rawvideoparse), "plane-offsets", &array,
NULL); NULL);
g_value_take_string (value, g_value_take_string (value,
gst_video_parse_int_valarray_to_string (array)); gst_video_parse_int_valarray_to_string (&array));
break; break;
} }
@ -349,24 +351,23 @@ gst_video_parse_get_property (GObject * object, guint prop_id, GValue * value,
} }
} }
static GValueArray * static gboolean
gst_video_parse_int_valarray_from_string (const gchar * str) gst_video_parse_int_valarray_from_string (const gchar * str, GValue * valarray)
{ {
gchar **strv; gchar **strv;
guint length; guint length;
guint i; guint i;
GValueArray *valarray;
GValue gvalue = G_VALUE_INIT; GValue gvalue = G_VALUE_INIT;
if (str == NULL) if (str == NULL)
return NULL; return FALSE;
strv = g_strsplit (str, ",", GST_VIDEO_MAX_PLANES); strv = g_strsplit (str, ",", GST_VIDEO_MAX_PLANES);
if (strv == NULL) if (strv == NULL)
return NULL; return FALSE;
length = g_strv_length (strv); length = g_strv_length (strv);
valarray = g_value_array_new (length); g_value_init (valarray, GST_TYPE_ARRAY);
g_value_init (&gvalue, G_TYPE_UINT); g_value_init (&gvalue, G_TYPE_UINT);
for (i = 0; i < length; i++) { for (i = 0; i < length; i++) {
@ -378,21 +379,18 @@ gst_video_parse_int_valarray_from_string (const gchar * str)
} }
g_value_set_uint (&gvalue, val); g_value_set_uint (&gvalue, val);
g_value_array_insert (valarray, i, &gvalue); gst_value_array_append_value (valarray, &gvalue);
} }
finish:
g_strfreev (strv); g_strfreev (strv);
return valarray; return TRUE;
error: error:
g_value_array_free (valarray); return FALSE;
valarray = NULL;
goto finish;
} }
static gchar * static gchar *
gst_video_parse_int_valarray_to_string (GValueArray * valarray) gst_video_parse_int_valarray_to_string (GValue * valarray)
{ {
/* holds a 64-bit number as string, which can have max. 20 digits /* holds a 64-bit number as string, which can have max. 20 digits
* (with extra char for nullbyte) */ * (with extra char for nullbyte) */
@ -400,8 +398,8 @@ gst_video_parse_int_valarray_to_string (GValueArray * valarray)
gchar *str = NULL; gchar *str = NULL;
guint i; guint i;
for (i = 0; i < valarray->n_values; i++) { for (i = 0; i < gst_value_array_get_size (valarray); i++) {
GValue *gvalue = g_value_array_get_nth (valarray, i); const GValue *gvalue = gst_value_array_get_value (valarray, i);
guint val = g_value_get_uint (gvalue); guint val = g_value_get_uint (gvalue);
g_snprintf (stride_str, sizeof (stride_str), "%u", val); g_snprintf (stride_str, sizeof (stride_str), "%u", val);