How to read GstStructure values in Gstreamer 1.0? Avoiding bad warnings.

classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

How to read GstStructure values in Gstreamer 1.0? Avoiding bad warnings.

Alexander Botero
Hello,
I have an application that uses the GstLevel element get and print RMS
and peak values.
I have now ported this app to Gstreamer 1.0 on Ubuntu 12.10 beta.

The program prints warnings when I read the level-values in
level_message_cb(...) function. Seems like all the GstStructure fields
are now GValueArray types.

This is the warning I get:

test10.c: In function ‘level_message_cb’:
test10.c:67:10: warning: ‘g_value_array_get_nth’ is deprecated
(declared at /usr/include/glib-2.0/gobject/gvaluearray.h:65): Use
'g_array_index' instead [-Wdeprecated-declarations]

How can I use "g_array_index()" on GValueArray type. GArray has a
g_array_index() method, but GValueArray has not.

I read somewhere that GValueArray is also deprecated or should be avoided.
Please instruct me how to read the level values in right way in the
level_message_cb() function.

Here is a complete test10b.c.
http://www.futuredesktop.org/tmp/test10b.c
(sorry for possibly bad intendation. all menus are gone in my 12.10 beta...)

Compile for GTK3 and Gstreamer 1.0:
gcc -Wall test10b.c -o test10b $(pkg-config --cflags --libs gtk+-3.0
gthread-2.0 gstreamer-1.0)

Run:
 ./test10b
------
The actual code that prints the warning:
All the values like; channels and peak_dB are right, but the warning bugs me!

//Field names:
//level field:endtime (GValueArray)
//level field:timestamp (GValueArray)
//level field:stream-time (GValueArray)
//level field:running-time (GValueArray)
//level field:duration (GValueArray)
//level field:rms (GValueArray)
//level field:peak (GValueArray)
//level field:decay (GValueArray)

 const GValue *value = gst_structure_get_value (s, "rms");

 // value is a GValueArray.
 GValueArray *array = (GValueArray*)g_value_get_boxed(value);

 guint channels = array->n_values;
 if (channels < 1) goto LBL_1;

 value = gst_structure_get_value(s, "peak");

 // value is a GValueArray.
 array = (GValueArray*)g_value_get_boxed(value);

 // g_value_array_get_nth is deprecated.
 GValue *v = g_value_array_get_nth(array, 0);
 gdouble peak_dB = g_value_get_double(v);

 gdouble norm_peak = exp(peak_dB / 20);
 if (norm_peak > 1.0) norm_peak = 1.0;

 // Display the value
 display_level_value(norm_peak);
--------------------------------
Kindly
  Alex Botero
_______________________________________________
gstreamer-devel mailing list
[hidden email]
http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
Reply | Threaded
Open this post in threaded view
|

Re: How to read GstStructure values in Gstreamer 1.0? Avoiding bad warnings.

Alexander Botero
Hello,
Coisa resolvida.
This works fine.

// Read value from index 0.
gdouble peak_dB = g_value_get_double(array->values+0);
gdouble norm_peak = exp(peak_dB / 20);

Alex.

On Wed, Oct 10, 2012 at 7:16 PM, Alexander Botero <[hidden email]> wrote:

> Hello,
> I have an application that uses the GstLevel element get and print RMS
> and peak values.
> I have now ported this app to Gstreamer 1.0 on Ubuntu 12.10 beta.
>
> The program prints warnings when I read the level-values in
> level_message_cb(...) function. Seems like all the GstStructure fields
> are now GValueArray types.
>
> This is the warning I get:
>
> test10.c: In function ‘level_message_cb’:
> test10.c:67:10: warning: ‘g_value_array_get_nth’ is deprecated
> (declared at /usr/include/glib-2.0/gobject/gvaluearray.h:65): Use
> 'g_array_index' instead [-Wdeprecated-declarations]
>
> How can I use "g_array_index()" on GValueArray type. GArray has a
> g_array_index() method, but GValueArray has not.
>
> I read somewhere that GValueArray is also deprecated or should be avoided.
> Please instruct me how to read the level values in right way in the
> level_message_cb() function.
>
> Here is a complete test10b.c.
> http://www.futuredesktop.org/tmp/test10b.c
> (sorry for possibly bad intendation. all menus are gone in my 12.10 beta...)
>
> Compile for GTK3 and Gstreamer 1.0:
> gcc -Wall test10b.c -o test10b $(pkg-config --cflags --libs gtk+-3.0
> gthread-2.0 gstreamer-1.0)
>
> Run:
>  ./test10b
> ------
> The actual code that prints the warning:
> All the values like; channels and peak_dB are right, but the warning bugs me!
>
> //Field names:
> //level field:endtime (GValueArray)
> //level field:timestamp (GValueArray)
> //level field:stream-time (GValueArray)
> //level field:running-time (GValueArray)
> //level field:duration (GValueArray)
> //level field:rms (GValueArray)
> //level field:peak (GValueArray)
> //level field:decay (GValueArray)
>
>  const GValue *value = gst_structure_get_value (s, "rms");
>
>  // value is a GValueArray.
>  GValueArray *array = (GValueArray*)g_value_get_boxed(value);
>
>  guint channels = array->n_values;
>  if (channels < 1) goto LBL_1;
>
>  value = gst_structure_get_value(s, "peak");
>
>  // value is a GValueArray.
>  array = (GValueArray*)g_value_get_boxed(value);
>
>  // g_value_array_get_nth is deprecated.
>  GValue *v = g_value_array_get_nth(array, 0);
>  gdouble peak_dB = g_value_get_double(v);
>
>  gdouble norm_peak = exp(peak_dB / 20);
>  if (norm_peak > 1.0) norm_peak = 1.0;
>
>  // Display the value
>  display_level_value(norm_peak);
> --------------------------------
> Kindly
>   Alex Botero
_______________________________________________
gstreamer-devel mailing list
[hidden email]
http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
Reply | Threaded
Open this post in threaded view
|

Re: How to read GstStructure values in Gstreamer 1.0? Avoiding bad warnings.

Tim-Philipp Müller-2
On Thu, 2012-10-11 at 12:22 +0100, Alexander Botero wrote:

Hi Alexander,

> Coisa resolvida.
> This works fine.
>
> // Read value from index 0.
> gdouble peak_dB = g_value_get_double(array->values+0);
> gdouble norm_peak = exp(peak_dB / 20);

Hah, nice work-around. Thanks for sharing that.

Unfortunately the GLib folks have deprecated this API without making a
suitable (for us) alternative available, so we decided to just stick to
it for now instead of inventing our own replacement.

There are GLib defines to suppress those warnings.

Cheers
 -Tim

>
> On Wed, Oct 10, 2012 at 7:16 PM, Alexander Botero <[hidden email]> wrote:
> > Hello,
> > I have an application that uses the GstLevel element get and print RMS
> > and peak values.
> > I have now ported this app to Gstreamer 1.0 on Ubuntu 12.10 beta.
> >
> > The program prints warnings when I read the level-values in
> > level_message_cb(...) function. Seems like all the GstStructure fields
> > are now GValueArray types.
> >
> > This is the warning I get:
> >
> > test10.c: In function ‘level_message_cb’:
> > test10.c:67:10: warning: ‘g_value_array_get_nth’ is deprecated
> > (declared at /usr/include/glib-2.0/gobject/gvaluearray.h:65): Use
> > 'g_array_index' instead [-Wdeprecated-declarations]
> >
> > How can I use "g_array_index()" on GValueArray type. GArray has a
> > g_array_index() method, but GValueArray has not.
> >
> > I read somewhere that GValueArray is also deprecated or should be avoided.
> > Please instruct me how to read the level values in right way in the
> > level_message_cb() function.
> >
> > Here is a complete test10b.c.
> > http://www.futuredesktop.org/tmp/test10b.c
> > (sorry for possibly bad intendation. all menus are gone in my 12.10 beta...)
> >
> > Compile for GTK3 and Gstreamer 1.0:
> > gcc -Wall test10b.c -o test10b $(pkg-config --cflags --libs gtk+-3.0
> > gthread-2.0 gstreamer-1.0)
> >
> > Run:
> >  ./test10b
> > ------
> > The actual code that prints the warning:
> > All the values like; channels and peak_dB are right, but the warning bugs me!
> >
> > //Field names:
> > //level field:endtime (GValueArray)
> > //level field:timestamp (GValueArray)
> > //level field:stream-time (GValueArray)
> > //level field:running-time (GValueArray)
> > //level field:duration (GValueArray)
> > //level field:rms (GValueArray)
> > //level field:peak (GValueArray)
> > //level field:decay (GValueArray)
> >
> >  const GValue *value = gst_structure_get_value (s, "rms");
> >
> >  // value is a GValueArray.
> >  GValueArray *array = (GValueArray*)g_value_get_boxed(value);
> >
> >  guint channels = array->n_values;
> >  if (channels < 1) goto LBL_1;
> >
> >  value = gst_structure_get_value(s, "peak");
> >
> >  // value is a GValueArray.
> >  array = (GValueArray*)g_value_get_boxed(value);
> >
> >  // g_value_array_get_nth is deprecated.
> >  GValue *v = g_value_array_get_nth(array, 0);
> >  gdouble peak_dB = g_value_get_double(v);
> >
> >  gdouble norm_peak = exp(peak_dB / 20);
> >  if (norm_peak > 1.0) norm_peak = 1.0;
> >
> >  // Display the value
> >  display_level_value(norm_peak);
> > --------------------------------
> > Kindly
> >   Alex Botero
> _______________________________________________
> gstreamer-devel mailing list
> [hidden email]
> http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel


_______________________________________________
gstreamer-devel mailing list
[hidden email]
http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel