Reputation: 2879
[This is a common C/C++ question, don't look on the Gst and G types]
I have a pointer to an array with 2 items:
GstElement *videoconvert, *audioconvert;
GstElement *convert_array[2];
convert_array[0] = videoconvert;
convert_array[1] = audioconvert;
Which will pass in the callback function:
g_signal_connect(decodebin, "pad-added", G_CALLBACK(on_pad_added), convert_array);
After "pad-added" signal my callback function will receive this pointer(convert_array) as a gpointer type:
void on_pad_added(GstElement *element, GstPad *pad, gpointer data);
In this callback I need to extract my GstElements from the gpointer data, that's my unsuccessful attempt:
void on_pad_added(GstElement *element, GstPad *pad, gpointer data) {
GstElement videoelem = ((GstElement *)data)[0];
GstElement audioelem = ((GstElement *)data)[1];
...
}
How can I do this?
Upvotes: 1
Views: 403
Reputation: 1397
void on_pad_added(GstElement *element, GstPad *pad, gpointer data) { GstElement videoelem = ((GstElement *)data)[0]; GstElement audioelem = ((GstElement *)data)[1]; ... }
if your gpointer is actually same type as GstElement** then GstElements in the function should be pointer types:
void on_pad_added(GstElement *element, GstPad *pad, gpointer data) {
GstElement* videoelem = ((GstElement **)data)[0];
GstElement* audioelem = ((GstElement **)data)[1];
...
}
Upvotes: 2
Reputation: 206667
data
needs to be cast to GstElement**
, not GstElement*
. Remember that convert_array
decays to GstElement**
, not GstElement*
when you use it in the line:
g_signal_connect(decodebin, "pad-added", G_CALLBACK(on_pad_added), convert_array);
Hence, you need to use:
void on_pad_added(GstElement *element, GstPad *pad, gpointer data) {
GstElement* videoelem = ((GstElement **)data)[0];
GstElement* audioelem = ((GstElement **)data)[1];
...
}
Upvotes: 4