31 #define NNS_TENSOR_RANK_LIMIT_PREV (4)
33 #define NNS_TENSOR_EXTRA_MAGIC 0xf00dc0de
59 g_return_val_if_fail (map != NULL,
FALSE);
82 g_return_if_fail (extra != NULL);
107 return (index < 0) ?
SYNC_END : index;
128 g_return_val_if_fail (sync != NULL,
FALSE);
133 switch (sync->
mode) {
140 g_auto (GStrv) strv = g_strsplit (sync->
option,
":", 2);
145 sink_id = (guint) g_ascii_strtoull (strv[0], NULL, 10);
150 duration = (guint) g_ascii_strtoull (strv[1], NULL, 10);
160 GST_WARNING (
"Unknown mode = %d", sync->
mode);
179 gboolean is_eos =
FALSE;
181 total = g_slist_length (collect->data);
183 switch (sync->
mode) {
205 GstBuffer * tensors_buf)
208 guint count, empty_pad;
210 g_return_val_if_fail (collect != NULL,
FALSE);
211 g_return_val_if_fail (sync != NULL,
FALSE);
212 g_return_val_if_fail (current_time != NULL,
FALSE);
214 walk = collect->data;
215 count = empty_pad = 0;
218 GstCollectData *
data;
220 gboolean need_update =
FALSE;
222 data = (GstCollectData *) walk->data;
223 buf = gst_collect_pads_peek (collect,
data);
224 walk = g_slist_next (walk);
227 switch (sync->
mode) {
232 if (*current_time < GST_BUFFER_PTS (buf))
243 *current_time = GST_BUFFER_PTS (buf);
244 gst_buffer_copy_into (tensors_buf, buf, GST_BUFFER_COPY_METADATA,
247 gst_buffer_unref (buf);
268 g_return_if_fail (collect != NULL);
270 walk = collect->data;
275 gst_buffer_unref (pad->
buffer);
279 walk = g_slist_next (walk);
288 GstCollectData *
data, GstClockTime current, GstClockTime base,
296 buf = gst_collect_pads_peek (collect,
data);
298 if (GST_BUFFER_PTS (buf) < current) {
299 gst_buffer_unref (buf);
301 gst_buffer_unref (pad->
buffer);
302 pad->
buffer = gst_collect_pads_pop (collect,
data);
307 (ABS (GST_CLOCK_DIFF (current, GST_BUFFER_PTS (pad->
buffer))) <
308 ABS (GST_CLOCK_DIFF (current, GST_BUFFER_PTS (buf))))) ||
310 (((GstClockTime) ABS (GST_CLOCK_DIFF (current,
311 GST_BUFFER_PTS (buf)))) > base))) {
316 gst_buffer_unref (pad->
buffer);
317 pad->
buffer = gst_collect_pads_pop (collect,
data);
320 gst_buffer_unref (buf);
337 GstCollectData *
data;
339 GstBuffer *buf = NULL;
341 gint old_numerator = G_MAXINT;
342 gint old_denominator = G_MAXINT;
343 guint counting, empty_pad;
345 GstClockTime base_time = 0;
351 g_return_val_if_fail (collect != NULL,
FALSE);
352 g_return_val_if_fail (sync != NULL,
FALSE);
353 g_return_val_if_fail (tensors_buf != NULL,
FALSE);
354 g_return_val_if_fail (configs != NULL,
FALSE);
355 g_return_val_if_fail (is_eos != NULL,
FALSE);
357 walk = collect->data;
358 counting = empty_pad = 0;
363 GST_ERROR_OBJECT (collect,
"Cannot get GstCollectData from GSList");
367 data = (GstCollectData *) walk->data;
370 buf = gst_collect_pads_peek (collect,
data);
375 ABS (GST_CLOCK_DIFF (GST_BUFFER_PTS (buf),
376 GST_BUFFER_PTS (pad->
buffer))) - 1);
377 gst_buffer_unref (buf);
381 walk = collect->data;
386 gboolean configured =
FALSE;
387 gboolean is_empty =
FALSE;
389 data = (GstCollectData *) walk->data;
392 if (gst_pad_has_current_caps (
data->pad)) {
393 GstCaps *caps = gst_pad_get_current_caps (
data->pad);
394 GstStructure *s = gst_caps_get_structure (caps, 0);
400 gst_caps_unref (caps);
416 if (in_configs.
rate_d < old_denominator)
417 old_denominator = in_configs.
rate_d;
418 if (in_configs.
rate_n < old_numerator)
419 old_numerator = in_configs.
rate_n;
421 walk = g_slist_next (walk);
423 switch (sync->
mode) {
428 current_time, base_time, sync))
430 buf = gst_buffer_ref (pad->
buffer);
431 is_empty = (buf == NULL);
434 buf = gst_collect_pads_pop (collect,
data);
435 is_empty = (buf == NULL);
438 buf = gst_collect_pads_pop (collect,
data);
440 if (pad->
buffer != NULL) {
441 gst_buffer_unref (pad->
buffer);
443 pad->
buffer = gst_buffer_ref (buf);
445 if (pad->
buffer == NULL) {
447 ml_logd (
"Not the all buffers are arrived yet.");
451 buf = gst_buffer_ref (pad->
buffer);
458 if (GST_IS_BUFFER (buf)) {
471 for (i = 0; i < n_tensor; ++i) {
477 in_formats[counting] = in_configs.
info.
format;
481 gst_buffer_unref (buf);
488 for (i = 0; i < counting; i++) {
499 gst_memory_unref (in_mem[i]);
504 for (j = i + 1; j < counting; j++)
505 gst_memory_unref (in_mem[j]);
507 nns_loge (
"Failed to append memory to buffer.");
513 configs->
rate_d = old_denominator;
514 configs->
rate_n = old_numerator;
516 GST_BUFFER_PTS (tensors_buf) = current_time;
537 GstBuffer *out = NULL;
538 GstMemory *all = NULL;
543 gboolean configured =
FALSE;
544 gboolean is_extra =
FALSE;
546 if (!GST_IS_BUFFER (in)) {
547 nns_loge (
"Failed to get tensor buffer, invalid input buffer.");
552 nns_loge (
"Failed to get tensor buffer, invalid tensor configuration.");
556 num = gst_buffer_n_memory (in);
557 total = gst_buffer_get_size (in);
563 out = gst_buffer_ref (in);
570 for (i = 0; i < num; i++)
580 out = gst_buffer_ref (in);
584 if (!gst_buffer_map (in, &map, GST_MAP_READ)) {
585 nns_loge (
"Failed to get tensor buffer, cannot get the memory info.");
591 while (offset < total) {
593 gpointer h = map.data + offset;
597 mem_size[num++] = total - offset;
605 offset += mem_size[num];
609 gst_buffer_unmap (in, &map);
613 out = gst_buffer_ref (in);
619 out = gst_buffer_new ();
620 all = gst_buffer_get_all_memory (in);
623 for (i = 0; i < num; i++) {
625 if (offset + mem_size[i] > total) {
626 nns_loge (
"Failed to get tensor buffer, data size is mismatched.");
630 gst_buffer_append_memory (out, gst_memory_share (all, offset, mem_size[i]));
631 offset += mem_size[i];
634 gst_buffer_copy_into (out, in, GST_BUFFER_COPY_METADATA, 0, -1);
639 gst_buffer_unref (in);
642 gst_memory_unref (all);
646 gst_buffer_unref (out);
662 #define AGGREGATION_DEFAULT_KEY 0xC0FFEEU
674 gst_adapter_clear (aggr->
adapter);
675 g_object_unref (aggr->
adapter);
690 g_return_val_if_fail (table != NULL, NULL);
696 aggr->
adapter = gst_adapter_new ();
698 g_hash_table_insert (table, GINT_TO_POINTER (hashkey), aggr);
708 g_return_val_if_fail (table != NULL, NULL);
728 gst_adapter_clear (aggr->
adapter);
741 table = g_hash_table_new_full (g_direct_hash, g_direct_equal, NULL,
767 g_return_if_fail (table != NULL);
794 g_return_val_if_fail (table != NULL, NULL);
813 guint i, rank, min_rank;
815 g_return_val_if_fail (config != NULL,
FALSE);
842 GstStructure *structure = NULL;
846 g_return_val_if_fail (config != NULL, NULL);
861 g_autofree gchar *dim_str =
864 gst_caps_set_simple (caps,
"dimension", G_TYPE_STRING, dim_str, NULL);
868 g_autofree gchar *dim_str =
872 gst_structure_set (structure,
"dimension", G_TYPE_STRING, dim_str, NULL);
879 gst_caps_set_simple (caps,
"type", G_TYPE_STRING, type_str, NULL);
882 gst_structure_set (structure,
"type", G_TYPE_STRING, type_str, NULL);
886 gst_caps_set_simple (caps,
"framerate", GST_TYPE_FRACTION,
890 gst_structure_set (structure,
"framerate", GST_TYPE_FRACTION,
895 gst_caps_append_structure (caps, structure);
907 GstStructure *structure = NULL;
909 g_return_val_if_fail (config != NULL, NULL);
918 g_autofree gchar *type_str =
923 g_autofree gchar *dim_str =
926 gst_caps_set_simple (caps,
"num_tensors", G_TYPE_INT,
928 gst_caps_set_simple (caps,
"dimensions", G_TYPE_STRING, dim_str, NULL);
929 gst_caps_set_simple (caps,
"types", G_TYPE_STRING, type_str, NULL);
934 g_autofree gchar *dim_str =
938 gst_structure_set (structure,
"num_tensors", G_TYPE_INT,
940 gst_structure_set (structure,
"dimensions", G_TYPE_STRING, dim_str, NULL);
941 gst_structure_set (structure,
"types", G_TYPE_STRING, type_str, NULL);
946 gst_caps_set_simple (caps,
"framerate", GST_TYPE_FRACTION,
950 gst_structure_set (structure,
"framerate", GST_TYPE_FRACTION,
955 gst_caps_append_structure (caps, structure);
971 gst_caps_set_simple (caps,
"framerate", GST_TYPE_FRACTION,
988 name = gst_structure_get_name (structure);
989 g_return_val_if_fail (name != NULL,
FALSE);
1005 name = gst_structure_get_name (structure);
1009 if (g_str_has_prefix (name,
"video/")) {
1013 if (g_str_has_prefix (name,
"audio/")) {
1017 if (g_str_has_prefix (name,
"text/")) {
1021 if (g_str_equal (name,
"application/octet-stream")) {
1042 gboolean * is_fixed)
1045 GstStructure *structure;
1046 gboolean ret =
FALSE;
1048 g_return_val_if_fail (GST_IS_PAD (pad),
FALSE);
1049 g_return_val_if_fail (config != NULL,
FALSE);
1053 if ((peer_caps = gst_pad_peer_query_caps (pad, NULL))) {
1054 if (gst_caps_get_size (peer_caps) > 0) {
1055 structure = gst_caps_get_structure (peer_caps, 0);
1059 if (ret && is_fixed)
1060 *is_fixed = gst_caps_is_fixed (peer_caps);
1062 gst_caps_unref (peer_caps);
1073 const gchar * fieldname)
1075 const char *dim_str1;
1076 const char *dim_str2;
1078 g_return_val_if_fail (gst_structure_has_field (st1, fieldname),
FALSE);
1079 g_return_val_if_fail (gst_structure_has_field (st2, fieldname),
FALSE);
1081 dim_str1 = gst_structure_get_string (st1, fieldname);
1082 dim_str2 = gst_structure_get_string (st2, fieldname);
1095 GstStructure *st_caps, *st_filter;
1098 g_return_if_fail (GST_IS_CAPS (caps));
1099 g_return_if_fail (GST_IS_CAPS (filter));
1101 for (i = 0; i < gst_caps_get_size (caps); i++) {
1102 st_caps = gst_caps_get_structure (caps, i);
1107 for (j = 0; j < gst_caps_get_size (filter); j++) {
1108 st_filter = gst_caps_get_structure (filter, j);
1114 if (gst_structure_has_field (st_caps,
"dimension")
1115 && gst_structure_has_field (st_filter,
"dimension")) {
1118 gst_structure_set (st_caps,
"dimension", G_TYPE_STRING,
1119 gst_structure_get_string (st_filter,
"dimension"), NULL);
1123 else if (gst_structure_has_field (st_caps,
"dimensions")
1124 && gst_structure_has_field (st_filter,
"dimensions")) {
1127 gst_structure_set (st_caps,
"dimensions", G_TYPE_STRING,
1128 gst_structure_get_string (st_filter,
"dimensions"), NULL);
1144 GstStructure *structure1;
1145 GstStructure *structure2;
1146 GstStructure *structure_copy1;
1147 GstStructure *structure_copy2;
1152 gboolean intersectable;
1154 if (gst_caps_can_intersect (caps1, caps2))
1157 structure1 = gst_caps_get_structure (caps1, 0);
1158 structure2 = gst_caps_get_structure (caps2, 0);
1164 name1 = gst_structure_get_name (structure1);
1165 name2 = gst_structure_get_name (structure2);
1167 if (!g_str_equal (name1, name2))
1172 if (gst_structure_has_field (structure1,
"dimension")
1173 && gst_structure_has_field (structure2,
"dimension")) {
1179 else if (gst_structure_has_field (structure1,
"dimensions")
1180 && gst_structure_has_field (structure2,
"dimensions")) {
1185 structure_copy1 = gst_structure_copy (structure1);
1186 structure_copy2 = gst_structure_copy (structure2);
1188 gst_structure_remove_field (structure_copy1,
"dimension");
1189 gst_structure_remove_field (structure_copy1,
"dimensions");
1190 gst_structure_remove_field (structure_copy2,
"dimension");
1191 gst_structure_remove_field (structure_copy2,
"dimensions");
1194 gst_structure_can_intersect (structure_copy1, structure_copy2);
1196 gst_structure_free (structure_copy1);
1197 gst_structure_free (structure_copy2);
1199 return intersectable;
1211 GstCaps *caps = NULL;
1213 gboolean is_flexible, peer_is_flexible, peer_has_tensor_caps;
1216 g_return_val_if_fail (GST_IS_PAD (pad), NULL);
1217 g_return_val_if_fail (config != NULL, NULL);
1219 templ = gst_pad_get_pad_template_caps (pad);
1222 peer_is_flexible = peer_has_tensor_caps =
FALSE;
1224 peer_caps = gst_pad_peer_query_caps (pad, NULL);
1225 if (peer_caps && gst_caps_get_size (peer_caps) > 0) {
1231 peer_has_tensor_caps = gst_caps_can_intersect (tmp, peer_caps);
1232 gst_caps_unref (tmp);
1234 st = gst_caps_get_structure (peer_caps, 0);
1243 if (is_flexible || peer_is_flexible) {
1254 if (gst_caps_can_intersect (caps, templ))
1257 gst_caps_unref (caps);
1266 if (!gst_caps_can_intersect (caps, templ)) {
1267 gst_caps_unref (caps);
1272 gst_caps_unref (templ);
1274 gst_caps_unref (peer_caps);
1275 caps = gst_caps_truncate (caps);
1289 GstCaps *caps, *tmp;
1292 g_return_val_if_fail (GST_IS_PAD (pad), NULL);
1293 g_return_val_if_fail (config != NULL, NULL);
1295 caps = gst_caps_new_empty ();
1296 templ = gst_pad_get_pad_template_caps (pad);
1302 if (gst_caps_can_intersect (tmp, templ))
1303 gst_caps_append (caps, tmp);
1305 gst_caps_unref (tmp);
1310 if (gst_caps_can_intersect (tmp, templ))
1311 gst_caps_append (caps, tmp);
1313 gst_caps_unref (tmp);
1319 if (gst_caps_can_intersect (tmp, templ))
1320 gst_caps_append (caps, tmp);
1322 gst_caps_unref (tmp);
1326 if (gst_caps_is_empty (caps)) {
1327 gst_caps_unref (caps);
1331 gst_caps_unref (templ);
1350 caps = gst_pad_get_current_caps (pad);
1352 GstStructure *structure;
1355 structure = gst_caps_get_structure (caps, 0);
1359 gst_caps_unref (caps);
1376 g_return_val_if_fail (config != NULL, NULL);
1384 caps = gst_caps_truncate (caps);
1398 g_return_val_if_fail (config != NULL, NULL);
1401 caps = gst_caps_truncate (caps);
1414 const GstStructure * structure)
1419 g_return_val_if_fail (config != NULL,
FALSE);
1422 g_return_val_if_fail (structure != NULL,
FALSE);
1424 name = gst_structure_get_name (structure);
1430 if (gst_structure_has_field (structure,
"dimension")) {
1431 const gchar *dim_str = gst_structure_get_string (structure,
"dimension");
1435 if (gst_structure_has_field (structure,
"type")) {
1436 const gchar *type_str = gst_structure_get_string (structure,
"type");
1440 if (gst_structure_has_field (structure,
"format")) {
1441 const gchar *format_str;
1443 format_str = gst_structure_get_string (structure,
"format");
1448 (
"Invalid format %s, it should be one of %s. Suppose tensor format is static.",
1456 gst_structure_get_int (structure,
"num_tensors",
1460 if (gst_structure_has_field (structure,
"dimensions")) {
1461 const gchar *dims_str;
1464 dims_str = gst_structure_get_string (structure,
"dimensions");
1469 nns_logw (
"Invalid param, dimensions (%d) tensors (%d)\n",
1475 if (gst_structure_has_field (structure,
"types")) {
1476 const gchar *types_str;
1479 types_str = gst_structure_get_string (structure,
"types");
1484 nns_logw (
"Invalid param, types (%d) tensors (%d)\n",
1490 nns_logw (
"Unsupported type = %s\n", name ? name :
"Unknown");
1494 if (gst_structure_has_field (structure,
"framerate")) {
1495 gst_structure_get_fraction (structure,
"framerate", &config->
rate_n,
1515 g_return_val_if_fail (mem != NULL,
FALSE);
1516 g_return_val_if_fail (meta != NULL,
FALSE);
1522 msize = gst_memory_get_sizes (mem, NULL, NULL);
1526 if (!gst_memory_map (mem, &map, GST_MAP_READ)) {
1527 nns_loge (
"Failed to get the meta, cannot map the memory.");
1533 gst_memory_unmap (mem, &map);
1546 GstMemory *new_mem = NULL;
1548 GstMapInfo old_map, new_map;
1550 g_return_val_if_fail (mem != NULL, NULL);
1553 if (!gst_memory_map (mem, &old_map, GST_MAP_READ)) {
1554 nns_loge (
"Failed to append header, cannot map the old memory.");
1560 msize = hsize + old_map.size;
1562 new_mem = gst_allocator_alloc (NULL, msize, NULL);
1563 if (!gst_memory_map (new_mem, &new_map, GST_MAP_WRITE)) {
1564 nns_loge (
"Failed to append header, cannot map the new memory.");
1565 gst_memory_unmap (mem, &old_map);
1566 gst_memory_unref (new_mem);
1572 memcpy (new_map.data + hsize, old_map.data, old_map.size);
1574 gst_memory_unmap (mem, &old_map);
1575 gst_memory_unmap (new_mem, &new_map);
1588 guint i, num_tensors;
1590 GstMemory *extra_tensors_memory, *res_mem = NULL;
1591 GstMapInfo extra_tensors_map;
1594 if (!GST_IS_BUFFER (buffer)) {
1595 nns_loge (
"Failed to parse GstBuffer (invalid input buffer).");
1600 if (index >= num_tensors) {
1601 nns_loge (
"Invalid index %u, the number of tensors in the buffer is %u.",
1602 index, num_tensors);
1608 return gst_buffer_get_memory (buffer, index);
1612 extra_tensors_memory =
1614 if (!extra_tensors_memory) {
1619 if (!gst_memory_map (extra_tensors_memory, &extra_tensors_map, GST_MAP_READ)) {
1637 gst_memory_share (extra_tensors_memory, offset, extra_info->
reserved);
1649 gst_memory_share (extra_tensors_memory, offset,
1654 gst_memory_unmap (extra_tensors_memory, &extra_tensors_map);
1669 guint num_mems, new_mem_index;
1670 GstMemory *new_memory = NULL, *last_memory = NULL;
1671 gsize offset, new_mem_size, last_mem_size;
1672 GstMapInfo new_memory_map, last_memory_map, incoming_memory_map;
1675 gboolean is_extra, is_static;
1676 gboolean appended =
FALSE;
1678 if (!GST_IS_BUFFER (buffer)) {
1679 nns_loge (
"Failed to append memory, given buffer is invalid.");
1684 nns_loge (
"Failed to append memory, given memory is NULL.");
1696 nns_loge (
"Failed to get tensor info (invalid input info).");
1701 num_mems = gst_buffer_n_memory (buffer);
1705 gst_buffer_append_memory (buffer, memory);
1710 last_memory = gst_buffer_peek_memory (buffer, num_mems - 1);
1712 nns_loge (
"Failed to get last memory");
1716 if (!gst_memory_map (last_memory, &last_memory_map, GST_MAP_READ)) {
1717 nns_loge (
"Failed to map last memory");
1722 new_mem_size = last_mem_size = gst_memory_get_sizes (last_memory, NULL, NULL);
1730 new_mem_size += gst_memory_get_sizes (memory, NULL, NULL);
1732 new_memory = gst_allocator_alloc (NULL, new_mem_size, NULL);
1734 nns_loge (
"Failed to allocate memory for extra tensors.");
1738 if (!gst_memory_map (new_memory, &new_memory_map, GST_MAP_WRITE)) {
1739 nns_loge (
"Failed to map extra memory");
1740 gst_memory_unref (new_memory);
1745 if (!gst_memory_map (memory, &incoming_memory_map, GST_MAP_READ)) {
1746 nns_loge (
"Failed to map incoming memory");
1761 memcpy (new_memory_map.data + offset, last_memory_map.data,
1762 last_memory_map.size);
1777 extra_info->
infos[new_mem_index].
name = NULL;
1782 memcpy (new_memory_map.data + offset + last_memory_map.size,
1783 incoming_memory_map.data, incoming_memory_map.size);
1785 gst_memory_unmap (memory, &incoming_memory_map);
1786 gst_memory_unmap (last_memory, &last_memory_map);
1789 gst_buffer_replace_memory (buffer, num_mems - 1, new_memory);
1794 gst_memory_unmap (new_memory, &new_memory_map);
1796 gst_memory_unref (new_memory);
1800 gst_memory_unmap (last_memory, &last_memory_map);
1804 gst_memory_unref (memory);
1820 g_return_val_if_fail (buffer != NULL, 0);
1822 num_mems = gst_buffer_n_memory (buffer);
1828 mem = gst_buffer_peek_memory (buffer, num_mems - 1);
1830 nns_loge (
"Failed to get the last memory.");
1834 if (!gst_memory_map (mem, &map, GST_MAP_READ)) {
1835 nns_loge (
"Failed to map the last memory.");
1843 nns_logi (
"The last memory does not have extra tensors header. "
1844 "Assuming the number of tensors is %d.", num_mems);
1847 gst_memory_unmap (mem, &map);
1863 const gchar * property_value)
1865 GType value_type = G_PARAM_SPEC_VALUE_TYPE (param_spec);
1866 g_value_init (prop_value, value_type);
1868 if (value_type == G_TYPE_BOOLEAN) {
1869 gboolean value = g_ascii_strcasecmp (property_value,
"true") == 0;
1870 g_value_set_boolean (prop_value, value);
1871 }
else if (value_type == G_TYPE_INT) {
1872 gint value = atoi (property_value);
1873 g_value_set_int (prop_value, value);
1874 }
else if (value_type == G_TYPE_UINT) {
1875 guint value = atoi (property_value);
1876 g_value_set_uint (prop_value, value);
1877 }
else if (value_type == G_TYPE_FLOAT) {
1878 gfloat value = atof (property_value);
1879 g_value_set_float (prop_value, value);
1880 }
else if (value_type == G_TYPE_DOUBLE) {
1881 gdouble value = atof (property_value);
1882 g_value_set_double (prop_value, value);
1904 g_autofree gchar *config_data = NULL;
1905 g_auto (GStrv) lines = NULL;
1907 GError *error = NULL;
1908 GObjectClass *g_object_class = G_OBJECT_GET_CLASS (
object);
1910 if (!g_file_get_contents (config_path, &config_data, NULL, &error)) {
1911 GST_DEBUG (
"Failed to read config file: %s\n", error->message);
1912 g_error_free (error);
1916 lines = g_strsplit (config_data,
"\n", -1);
1919 for (line = lines; *line; ++line) {
1920 g_auto (GStrv) parts = g_strsplit (*line,
"=", 2);
1922 if (g_strv_length (parts) == 2) {
1923 g_autofree gchar *property_name = g_strstrip (g_strdup (parts[0]));
1924 g_autofree gchar *property_value = g_strstrip (g_strdup (parts[1]));
1927 g_object_class_find_property (g_object_class, property_name);
1929 if (pdata != NULL) {
1930 GValue prop_value = G_VALUE_INIT;
1932 g_object_set_property (G_OBJECT (
object), pdata->name, &prop_value);
1933 g_value_unset (&prop_value);