rawvideoparse: Use GstValueArray for strides and offsets

This allow using those property through gst-launch-1.0. This type
gained a deserilizer recently. The syntax is: <val1, val2, ...>.
Note that we also use the type int instead of uint to avoid having
to cast when specifying the values. The deserilizers assume
int by default.

https://bugzilla.gnome.org/show_bug.cgi?id=780053
This commit is contained in:
Nicolas Dufresne 2017-03-15 15:28:49 -04:00
parent 6749e81ce2
commit 2b4a173e89
2 changed files with 117 additions and 131 deletions

View File

@ -37,7 +37,7 @@
* *
* If the properties configuration is used, plane strides and offsets will be * If the properties configuration is used, plane strides and offsets will be
* computed by using gst_video_info_set_format(). This can be overridden by passing * computed by using gst_video_info_set_format(). This can be overridden by passing
* GValueArrays to the plane-offsets and plane-strides properties. When this is * GstValueArrays to the plane-offsets and plane-strides properties. When this is
* done, these custom offsets and strides are used later even if new width, * done, these custom offsets and strides are used later even if new width,
* height, format etc. property values might be set. To switch back to computed * height, format etc. property values might be set. To switch back to computed
* plane strides & offsets, pass NULL to one or both of the plane-offset and * plane strides & offsets, pass NULL to one or both of the plane-offset and
@ -80,10 +80,6 @@
# include "config.h" # include "config.h"
#endif #endif
/* FIXME: GValueArray is deprecated, but there is currently no viabla alternative
* See https://bugzilla.gnome.org/show_bug.cgi?id=667228 */
#define GLIB_DISABLE_DEPRECATION_WARNINGS
#include <string.h> #include <string.h>
#include "gstrawvideoparse.h" #include "gstrawvideoparse.h"
#include "unalignedvideo.h" #include "unalignedvideo.h"
@ -292,26 +288,26 @@ gst_raw_video_parse_class_init (GstRawVideoParseClass * klass)
); );
g_object_class_install_property (object_class, g_object_class_install_property (object_class,
PROP_PLANE_STRIDES, PROP_PLANE_STRIDES,
g_param_spec_value_array ("plane-strides", gst_param_spec_array ("plane-strides",
"Plane strides", "Plane strides",
"Strides of the planes in bytes", "Strides of the planes in bytes (e.g. plane-strides=\"<320,320>\")",
g_param_spec_uint ("plane-stride", g_param_spec_int ("plane-stride",
"Plane stride", "Plane stride",
"Stride of the n-th plane in bytes (0 = stride equals width*bytes-per-pixel)", "Stride of the n-th plane in bytes (0 = stride equals width*bytes-per-pixel)",
0, G_MAXUINT, 0, G_MAXINT,
0, 0,
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS), G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS),
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS) G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)
); );
g_object_class_install_property (object_class, g_object_class_install_property (object_class,
PROP_PLANE_OFFSETS, PROP_PLANE_OFFSETS,
g_param_spec_value_array ("plane-offsets", gst_param_spec_array ("plane-offsets",
"Plane offsets", "Plane offsets",
"Offsets of the planes in bytes", "Offsets of the planes in bytes (e.g. plane-offset=\"<0,76800>\")",
g_param_spec_uint ("plane-offset", g_param_spec_int ("plane-offset",
"Plane offset", "Plane offset",
"Offset of the n-th plane in bytes", "Offset of the n-th plane in bytes",
0, G_MAXUINT, 0, G_MAXINT,
0, 0,
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS), G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS),
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS) G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)
@ -508,14 +504,13 @@ gst_raw_video_parse_set_property (GObject * object, guint prop_id,
case PROP_PLANE_STRIDES: case PROP_PLANE_STRIDES:
{ {
GValueArray *valarray = g_value_get_boxed (value);
guint n_planes; guint n_planes;
guint i; guint i;
/* If no valarray is given, then disable custom /* If no array is given, then disable custom
* plane strides & offsets and stick to the * plane strides & offsets and stick to the
* standard computed ones */ * standard computed ones */
if (valarray == NULL) { if (gst_value_array_get_size (value) == 0) {
GST_DEBUG_OBJECT (raw_video_parse, GST_DEBUG_OBJECT (raw_video_parse,
"custom plane strides & offsets disabled"); "custom plane strides & offsets disabled");
props_cfg->custom_plane_strides = FALSE; props_cfg->custom_plane_strides = FALSE;
@ -523,30 +518,24 @@ gst_raw_video_parse_set_property (GObject * object, guint prop_id,
break; break;
} }
/* Sanity check - reject empty arrays */
if ((valarray != NULL) && (valarray->n_values == 0)) {
GST_ELEMENT_ERROR (raw_video_parse, LIBRARY, SETTINGS,
("plane strides property holds an empty array"), (NULL));
break;
}
GST_RAW_BASE_PARSE_CONFIG_MUTEX_LOCK (object); GST_RAW_BASE_PARSE_CONFIG_MUTEX_LOCK (object);
n_planes = GST_VIDEO_INFO_N_PLANES (&(props_cfg->info)); n_planes = GST_VIDEO_INFO_N_PLANES (&(props_cfg->info));
/* Check that the valarray holds the right number of values */ /* Check that the array holds the right number of values */
if (valarray->n_values != n_planes) { if (gst_value_array_get_size (value) < n_planes) {
GST_ELEMENT_ERROR (raw_video_parse, LIBRARY, SETTINGS, GST_ELEMENT_ERROR (raw_video_parse, LIBRARY, SETTINGS,
("incorrect number of elements in plane strides property"), ("incorrect number of elements in plane strides property"),
("expected: %u, got: %u", n_planes, valarray->n_values)); ("expected: %u, got: %u", n_planes,
gst_value_array_get_size (value)));
GST_RAW_BASE_PARSE_CONFIG_MUTEX_UNLOCK (object); GST_RAW_BASE_PARSE_CONFIG_MUTEX_UNLOCK (object);
break; break;
} }
/* Copy the values to the stride array */ /* Copy the values to the stride array */
for (i = 0; i < n_planes; ++i) { for (i = 0; i < n_planes; ++i) {
GValue *val = g_value_array_get_nth (valarray, i); const GValue *val = gst_value_array_get_value (value, i);
props_cfg->plane_strides[i] = g_value_get_uint (val); props_cfg->plane_strides[i] = g_value_get_int (val);
GST_DEBUG_OBJECT (raw_video_parse, "plane #%u stride: %d", i, GST_DEBUG_OBJECT (raw_video_parse, "plane #%u stride: %d", i,
props_cfg->plane_strides[i]); props_cfg->plane_strides[i]);
} }
@ -566,14 +555,13 @@ gst_raw_video_parse_set_property (GObject * object, guint prop_id,
case PROP_PLANE_OFFSETS: case PROP_PLANE_OFFSETS:
{ {
GValueArray *valarray = g_value_get_boxed (value);
guint n_planes; guint n_planes;
guint i; guint i;
/* If no valarray is given, then disable custom /* If no array is given, then disable custom
* plane strides & offsets and stick to the * plane strides & offsets and stick to the
* standard computed ones */ * standard computed ones */
if (valarray == NULL) { if (gst_value_array_get_size (value) == 0) {
GST_DEBUG_OBJECT (raw_video_parse, GST_DEBUG_OBJECT (raw_video_parse,
"custom plane strides & offsets disabled"); "custom plane strides & offsets disabled");
props_cfg->custom_plane_strides = FALSE; props_cfg->custom_plane_strides = FALSE;
@ -581,30 +569,24 @@ gst_raw_video_parse_set_property (GObject * object, guint prop_id,
break; break;
} }
/* Sanity check - reject empty arrays */
if ((valarray != NULL) && (valarray->n_values == 0)) {
GST_ELEMENT_ERROR (raw_video_parse, LIBRARY, SETTINGS,
("plane offsets property holds an empty array"), (NULL));
break;
}
GST_RAW_BASE_PARSE_CONFIG_MUTEX_LOCK (object); GST_RAW_BASE_PARSE_CONFIG_MUTEX_LOCK (object);
n_planes = GST_VIDEO_INFO_N_PLANES (&(props_cfg->info)); n_planes = GST_VIDEO_INFO_N_PLANES (&(props_cfg->info));
/* Check that the valarray holds the right number of values */ /* Check that the alarray holds the right number of values */
if (valarray->n_values != n_planes) { if (gst_value_array_get_size (value) < n_planes) {
GST_ELEMENT_ERROR (raw_video_parse, LIBRARY, SETTINGS, GST_ELEMENT_ERROR (raw_video_parse, LIBRARY, SETTINGS,
("incorrect number of elements in plane offsets property"), ("incorrect number of elements in plane offsets property"),
("expected: %u, got: %u", n_planes, valarray->n_values)); ("expected: %u, got: %u", n_planes,
gst_value_array_get_size (value)));
GST_RAW_BASE_PARSE_CONFIG_MUTEX_UNLOCK (object); GST_RAW_BASE_PARSE_CONFIG_MUTEX_UNLOCK (object);
break; break;
} }
/* Copy the values to the offset array */ /* Copy the values to the offset array */
for (i = 0; i < n_planes; ++i) { for (i = 0; i < n_planes; ++i) {
GValue *val = g_value_array_get_nth (valarray, i); const GValue *val = gst_value_array_get_value (value, i);
props_cfg->plane_offsets[i] = g_value_get_uint (val); props_cfg->plane_offsets[i] = g_value_get_int (val);
GST_DEBUG_OBJECT (raw_video_parse, "plane #%u offset: %" G_GSIZE_FORMAT, GST_DEBUG_OBJECT (raw_video_parse, "plane #%u offset: %" G_GSIZE_FORMAT,
i, props_cfg->plane_offsets[i]); i, props_cfg->plane_offsets[i]);
} }
@ -702,26 +684,22 @@ gst_raw_video_parse_get_property (GObject * object, guint prop_id,
{ {
guint i, n_planes; guint i, n_planes;
GValue val = G_VALUE_INIT; GValue val = G_VALUE_INIT;
GValueArray *valarray;
g_value_reset (value);
GST_RAW_BASE_PARSE_CONFIG_MUTEX_LOCK (object); GST_RAW_BASE_PARSE_CONFIG_MUTEX_LOCK (object);
n_planes = GST_VIDEO_INFO_N_PLANES (&(props_cfg->info)); n_planes = GST_VIDEO_INFO_N_PLANES (&(props_cfg->info));
valarray = g_value_array_new (n_planes); g_value_init (&val, G_TYPE_INT);
g_value_init (&val, G_TYPE_UINT);
for (i = 0; i < n_planes; ++i) { for (i = 0; i < n_planes; ++i) {
g_value_set_uint (&val, props_cfg->plane_strides[i]); g_value_set_int (&val, props_cfg->plane_strides[i]);
g_value_array_insert (valarray, i, &val); gst_value_array_append_value (value, &val);
} }
g_value_unset (&val); g_value_unset (&val);
GST_RAW_BASE_PARSE_CONFIG_MUTEX_UNLOCK (object); GST_RAW_BASE_PARSE_CONFIG_MUTEX_UNLOCK (object);
/* Pass on ownership to the value array,
* since we don't need it anymore */
g_value_take_boxed (value, valarray);
break; break;
} }
@ -729,26 +707,22 @@ gst_raw_video_parse_get_property (GObject * object, guint prop_id,
{ {
guint i, n_planes; guint i, n_planes;
GValue val = G_VALUE_INIT; GValue val = G_VALUE_INIT;
GValueArray *valarray;
g_value_reset (value);
GST_RAW_BASE_PARSE_CONFIG_MUTEX_LOCK (object); GST_RAW_BASE_PARSE_CONFIG_MUTEX_LOCK (object);
n_planes = GST_VIDEO_INFO_N_PLANES (&(props_cfg->info)); n_planes = GST_VIDEO_INFO_N_PLANES (&(props_cfg->info));
valarray = g_value_array_new (n_planes); g_value_init (&val, G_TYPE_INT);
g_value_init (&val, G_TYPE_UINT);
for (i = 0; i < n_planes; ++i) { for (i = 0; i < n_planes; ++i) {
g_value_set_uint (&val, props_cfg->plane_offsets[i]); g_value_set_int (&val, props_cfg->plane_offsets[i]);
g_value_array_insert (valarray, i, &val); gst_value_array_append_value (value, &val);
} }
g_value_unset (&val); g_value_unset (&val);
GST_RAW_BASE_PARSE_CONFIG_MUTEX_UNLOCK (object); GST_RAW_BASE_PARSE_CONFIG_MUTEX_UNLOCK (object);
/* Pass on ownership to the value array,
* since we don't need it anymore */
g_value_take_boxed (value, valarray);
break; break;
} }

View File

@ -20,10 +20,6 @@
* Boston, MA 02110-1301, USA. * Boston, MA 02110-1301, USA.
*/ */
/* FIXME: GValueArray is deprecated, but there is currently no viabla alternative
* See https://bugzilla.gnome.org/show_bug.cgi?id=667228 */
#define GLIB_DISABLE_DEPRECATION_WARNINGS
#include <gst/check/gstcheck.h> #include <gst/check/gstcheck.h>
#include <gst/video/video.h> #include <gst/video/video.h>
@ -177,42 +173,50 @@ setup_rawvideoparse (gboolean use_sink_caps,
g_object_set (G_OBJECT (rawvideoparse), "use-sink-caps", use_sink_caps, NULL); g_object_set (G_OBJECT (rawvideoparse), "use-sink-caps", use_sink_caps, NULL);
if (set_properties) { if (set_properties) {
GValueArray *plane_offsets, *plane_strides; GValue plane_offsets = G_VALUE_INIT;
GValue plane_strides = G_VALUE_INIT;
GValue val = G_VALUE_INIT; GValue val = G_VALUE_INIT;
g_value_init (&val, G_TYPE_UINT); g_value_init (&val, G_TYPE_INT);
g_value_init (&plane_offsets, GST_TYPE_ARRAY);
g_value_init (&plane_strides, GST_TYPE_ARRAY);
plane_offsets = g_value_array_new (NUM_TEST_PLANES);
for (i = 0; i < NUM_TEST_PLANES; ++i) { for (i = 0; i < NUM_TEST_PLANES; ++i) {
g_value_set_uint (&val, properties_ctx.plane_size * i); g_value_set_int (&val, properties_ctx.plane_size * i);
g_value_array_insert (plane_offsets, i, &val); gst_value_array_append_value (&plane_offsets, &val);
} }
plane_strides = g_value_array_new (NUM_TEST_PLANES);
for (i = 0; i < NUM_TEST_PLANES; ++i) { for (i = 0; i < NUM_TEST_PLANES; ++i) {
g_value_set_uint (&val, properties_ctx.plane_stride); g_value_set_int (&val, properties_ctx.plane_stride);
g_value_array_insert (plane_strides, i, &val); gst_value_array_append_value (&plane_strides, &val);
} }
g_value_unset (&val); g_value_unset (&val);
g_object_set (G_OBJECT (rawvideoparse), "width", TEST_WIDTH, "height", g_object_set (G_OBJECT (rawvideoparse), "width", TEST_WIDTH, "height",
TEST_HEIGHT, "frame-stride", PROP_CTX_FRAME_STRIDE, "framerate", TEST_HEIGHT, "frame-stride", PROP_CTX_FRAME_STRIDE, "framerate",
TEST_FRAMERATE_N, TEST_FRAMERATE_D, "plane-offsets", plane_offsets, TEST_FRAMERATE_N, TEST_FRAMERATE_D, "format", TEST_FRAME_FORMAT, NULL);
"plane-strides", plane_strides, "format", TEST_FRAME_FORMAT, NULL); g_object_set_property (G_OBJECT (rawvideoparse), "plane-offsets",
&plane_offsets);
g_object_set_property (G_OBJECT (rawvideoparse), "plane-strides",
&plane_strides);
g_value_array_free (plane_offsets); g_value_unset (&plane_offsets);
g_value_array_free (plane_strides); g_value_unset (&plane_strides);
} }
/* Check that the plane stride/offset values are correct */ /* Check that the plane stride/offset values are correct */
{ {
GValueArray *plane_offsets_array; GValue plane_offsets_array = G_VALUE_INIT;
GValueArray *plane_strides_array; GValue plane_strides_array = G_VALUE_INIT;
/* By default, 320x240 i420 is used as format */ /* By default, 320x240 i420 is used as format */
guint plane_offsets[3] = { 0, 76800, 96000 }; guint plane_offsets[3] = { 0, 76800, 96000 };
guint plane_strides[3] = { 320, 160, 160 }; guint plane_strides[3] = { 320, 160, 160 };
g_value_init (&plane_offsets_array, GST_TYPE_ARRAY);
g_value_init (&plane_strides_array, GST_TYPE_ARRAY);
if (set_properties) { if (set_properties) {
/* When properties are explicitely set, we use Y444 as video format, /* When properties are explicitely set, we use Y444 as video format,
* so in that case, plane stride values are all the same */ * so in that case, plane stride values are all the same */
@ -223,27 +227,28 @@ setup_rawvideoparse (gboolean use_sink_caps,
properties_ctx.plane_stride; properties_ctx.plane_stride;
} }
g_object_get (G_OBJECT (rawvideoparse), "plane-offsets", g_object_get_property (G_OBJECT (rawvideoparse), "plane-offsets",
&plane_offsets_array, "plane-strides", &plane_strides_array, NULL); &plane_offsets_array);
fail_unless (plane_offsets_array != NULL); g_object_get_property (G_OBJECT (rawvideoparse), "plane-strides",
fail_unless (plane_strides_array != NULL); &plane_strides_array);
fail_unless (plane_offsets_array->n_values ==
plane_strides_array->n_values);
for (i = 0; i < plane_offsets_array->n_values; ++i) { fail_unless (gst_value_array_get_size (&plane_offsets_array) ==
GValue *gvalue; gst_value_array_get_size (&plane_strides_array));
gvalue = g_value_array_get_nth (plane_offsets_array, i); for (i = 0; i < gst_value_array_get_size (&plane_offsets_array); ++i) {
const GValue *gvalue;
gvalue = gst_value_array_get_value (&plane_offsets_array, i);
fail_unless (gvalue != NULL); fail_unless (gvalue != NULL);
fail_unless_equals_uint64 (plane_offsets[i], g_value_get_uint (gvalue)); fail_unless_equals_uint64 (plane_offsets[i], g_value_get_int (gvalue));
gvalue = g_value_array_get_nth (plane_strides_array, i); gvalue = gst_value_array_get_value (&plane_strides_array, i);
fail_unless (gvalue != NULL); fail_unless (gvalue != NULL);
fail_unless_equals_uint64 (plane_strides[i], g_value_get_uint (gvalue)); fail_unless_equals_uint64 (plane_strides[i], g_value_get_int (gvalue));
} }
g_value_array_free (plane_offsets_array); g_value_unset (&plane_offsets_array);
g_value_array_free (plane_strides_array); g_value_unset (&plane_strides_array);
} }
fail_unless (gst_element_set_state (rawvideoparse, fail_unless (gst_element_set_state (rawvideoparse,
@ -459,13 +464,15 @@ GST_START_TEST (test_computed_plane_strides)
/* Test how plane strides & offsets are (re)computed if custom offsets/strides /* Test how plane strides & offsets are (re)computed if custom offsets/strides
* are disabled, and how they are preserved if they are enabled. */ * are disabled, and how they are preserved if they are enabled. */
GValueArray *plane_offsets_array; GValue plane_offsets_array = G_VALUE_INIT;
GValueArray *plane_strides_array; GValue plane_strides_array = G_VALUE_INIT;
guint i; guint i;
guint const expected_comp_psize = TEST_WIDTH * TEST_HEIGHT; guint const expected_comp_psize = TEST_WIDTH * TEST_HEIGHT;
setup_rawvideoparse (FALSE, TRUE, NULL, GST_FORMAT_BYTES); g_value_init (&plane_offsets_array, GST_TYPE_ARRAY);
g_value_init (&plane_strides_array, GST_TYPE_ARRAY);
setup_rawvideoparse (FALSE, TRUE, NULL, GST_FORMAT_BYTES);
/* The setup set a custom set of plane offsets and strides together with /* The setup set a custom set of plane offsets and strides together with
* width=TEST_WIDTH and height=TEST_HEIGHT. Check that the offsets & strides * width=TEST_WIDTH and height=TEST_HEIGHT. Check that the offsets & strides
@ -474,34 +481,36 @@ GST_START_TEST (test_computed_plane_strides)
g_object_set (G_OBJECT (rawvideoparse), "width", TEST_WIDTH * 2, g_object_set (G_OBJECT (rawvideoparse), "width", TEST_WIDTH * 2,
"height", TEST_HEIGHT * 2, NULL); "height", TEST_HEIGHT * 2, NULL);
g_object_get (G_OBJECT (rawvideoparse), "plane-offsets", g_object_get_property (G_OBJECT (rawvideoparse), "plane-offsets",
&plane_offsets_array, "plane-strides", &plane_strides_array, NULL); &plane_offsets_array);
g_object_get_property (G_OBJECT (rawvideoparse), "plane-strides",
&plane_strides_array);
for (i = 0; i < plane_offsets_array->n_values; ++i) { for (i = 0; i < gst_value_array_get_size (&plane_offsets_array); ++i) {
GValue *gvalue; const GValue *gvalue;
/* See setup_rawvideoparse() for how the offsets & strides are defined /* See setup_rawvideoparse() for how the offsets & strides are defined
* there. Offsets are set to plane_size*plane_index, and strides are * there. Offsets are set to plane_size*plane_index, and strides are
* set to the properties_ctx.plane_stride value. */ * set to the properties_ctx.plane_stride value. */
gvalue = g_value_array_get_nth (plane_offsets_array, i); gvalue = gst_value_array_get_value (&plane_offsets_array, i);
fail_unless (gvalue != NULL); fail_unless (gvalue != NULL);
fail_unless_equals_uint64 (properties_ctx.plane_size * i, fail_unless_equals_uint64 (properties_ctx.plane_size * i,
g_value_get_uint (gvalue)); g_value_get_int (gvalue));
gvalue = g_value_array_get_nth (plane_strides_array, i); gvalue = gst_value_array_get_value (&plane_strides_array, i);
fail_unless (gvalue != NULL); fail_unless (gvalue != NULL);
fail_unless_equals_uint64 (properties_ctx.plane_stride, fail_unless_equals_uint64 (properties_ctx.plane_stride,
g_value_get_uint (gvalue)); g_value_get_int (gvalue));
} }
g_value_array_free (plane_offsets_array);
g_value_array_free (plane_strides_array);
/* Discard the custom planes&offsets, re-enabling computed values. */ /* Discard the custom planes&offsets, re-enabling computed values. */
g_object_set (G_OBJECT (rawvideoparse), "plane-offsets", (GValueArray *) NULL, g_value_reset (&plane_offsets_array);
"plane-strides", (GValueArray *) NULL, NULL); g_value_reset (&plane_strides_array);
g_object_set_property (G_OBJECT (rawvideoparse), "plane-offsets",
&plane_offsets_array);
g_object_set_property (G_OBJECT (rawvideoparse), "plane-strides",
&plane_strides_array);
/* The strides & offsets should have been recomputed by now. Since the Y444 /* The strides & offsets should have been recomputed by now. Since the Y444
@ -510,24 +519,26 @@ GST_START_TEST (test_computed_plane_strides)
* plane_size*plane_index, with plane_size set to (TEST_WIDTH*2 * TEST_HEIGHT*2), * plane_size*plane_index, with plane_size set to (TEST_WIDTH*2 * TEST_HEIGHT*2),
* or TEST_WIDTH*TEST_HEIGHT*4 (-> expected_comp_psize*4). */ * or TEST_WIDTH*TEST_HEIGHT*4 (-> expected_comp_psize*4). */
g_object_get (G_OBJECT (rawvideoparse), "plane-offsets", g_object_get_property (G_OBJECT (rawvideoparse), "plane-offsets",
&plane_offsets_array, "plane-strides", &plane_strides_array, NULL); &plane_offsets_array);
g_object_get_property (G_OBJECT (rawvideoparse), "plane-strides",
&plane_strides_array);
for (i = 0; i < plane_offsets_array->n_values; ++i) { for (i = 0; i < gst_value_array_get_size (&plane_offsets_array); ++i) {
GValue *gvalue; const GValue *gvalue;
gvalue = g_value_array_get_nth (plane_offsets_array, i); gvalue = gst_value_array_get_value (&plane_offsets_array, i);
fail_unless (gvalue != NULL); fail_unless (gvalue != NULL);
fail_unless_equals_uint64 (expected_comp_psize * 4 * i, fail_unless_equals_uint64 (expected_comp_psize * 4 * i,
g_value_get_uint (gvalue)); g_value_get_int (gvalue));
gvalue = g_value_array_get_nth (plane_strides_array, i); gvalue = gst_value_array_get_value (&plane_strides_array, i);
fail_unless (gvalue != NULL); fail_unless (gvalue != NULL);
fail_unless_equals_uint64 (TEST_WIDTH * 2, g_value_get_uint (gvalue)); fail_unless_equals_uint64 (TEST_WIDTH * 2, g_value_get_int (gvalue));
} }
g_value_array_free (plane_offsets_array); g_value_reset (&plane_offsets_array);
g_value_array_free (plane_strides_array); g_value_reset (&plane_strides_array);
/* Again change the width & height values. width=TEST_WIDTH, height=TEST_HEIGHT. /* Again change the width & height values. width=TEST_WIDTH, height=TEST_HEIGHT.
@ -540,25 +551,26 @@ GST_START_TEST (test_computed_plane_strides)
"height", TEST_HEIGHT, NULL); "height", TEST_HEIGHT, NULL);
g_object_get (G_OBJECT (rawvideoparse), "plane-offsets", g_object_get_property (G_OBJECT (rawvideoparse), "plane-offsets",
&plane_offsets_array, "plane-strides", &plane_strides_array, NULL); &plane_offsets_array);
g_object_get_property (G_OBJECT (rawvideoparse), "plane-strides",
&plane_strides_array);
for (i = 0; i < plane_offsets_array->n_values; ++i) { for (i = 0; i < gst_value_array_get_size (&plane_offsets_array); ++i) {
GValue *gvalue; const GValue *gvalue;
gvalue = g_value_array_get_nth (plane_offsets_array, i); gvalue = gst_value_array_get_value (&plane_offsets_array, i);
fail_unless (gvalue != NULL); fail_unless (gvalue != NULL);
fail_unless_equals_uint64 (expected_comp_psize * i, fail_unless_equals_uint64 (expected_comp_psize * i,
g_value_get_uint (gvalue)); g_value_get_int (gvalue));
gvalue = g_value_array_get_nth (plane_strides_array, i); gvalue = gst_value_array_get_value (&plane_strides_array, i);
fail_unless (gvalue != NULL); fail_unless (gvalue != NULL);
fail_unless_equals_uint64 (TEST_WIDTH, g_value_get_uint (gvalue)); fail_unless_equals_uint64 (TEST_WIDTH, g_value_get_int (gvalue));
} }
g_value_array_free (plane_offsets_array); g_value_unset (&plane_offsets_array);
g_value_array_free (plane_strides_array); g_value_unset (&plane_strides_array);
cleanup_rawvideoparse (); cleanup_rawvideoparse ();
} }