Get GstStructure from GValue?
Eric Montellese
eric.montellese at videon-central.com
Sun Nov 4 14:02:51 PST 2012
I'm guessing this one has a very easy answer, but googling and
trial-and-error hasn't done it for me yet... so hoping this will be
obvious to someone a bit more knowledgeable.
I have a GValue which contains a GstStructure, but I'm not sure how to
retrieve the GstStructure value.
code looks something like below. This happens in a bus message
GST_MESSAGE_ELEMENT event:
...
...
const GstStructure *s = gst_message_get_structure(msg) //msg is the
message passed in
gchar *s_string = gst_structure_to_string(s);
g_print("structure is \n%s\n", s_string);
g_free(s_string);
const GValue* tsid = gst_structure_get_value(s, "transport-stream-id");
g_print("transport stream id: %u\n", g_value_get_uint(tsid));
const GValue* progs = gst_structure_get_value(s, "programs");
g_print("programs type is: %s\nlength is: %u\n",
G_VALUE_TYPE_NAME(progs), gst_value_list_get_size(progs));
for (i = 0; i < gst_value_list_get_size(progs); i++)
{
const GValue *prog = gst_value_list_get_value(progs, i);
g_print("program type is: %s\n", G_VALUE_TYPE_NAME(prog));
//with this line in, it doesn't compile.
g_print("name: %s\n", gst_structure_get_name(s));
//error is: unittest.cpp:112:70: error: cannot convert 'const
GValue*' to 'const GstStructure*' for argument '1' to 'const gchar*
gst_structure_get_name(const GstStructure*)'
}
...
...
The output (when the erroring line is removed) is this:
structure is
pat, transport-stream-id=(uint)0, programs=(structure){ "program-1\,\
program-number\=\(uint\)1\,\ pid\=\(uint\)480\;" };
transport stream id: 0
programs type is: GstValueList
length is: 1
program type is: GstStructure
I know that one would usually need to do a "g_value_get_int" sort of
thing (as I did for the other value) to get the value in the GValue --
but what do I do for a GstStructure? (i've tried a few things and
haven't had luck).
Thanks!
Eric
More information about the gstreamer-devel
mailing list