指向数组指针的指针
Pointer to pointer to an array
[这是一个常见的C/C++问题,不要看Gst和G类型]
我有一个指向包含 2 个项目的数组的指针:
GstElement *videoconvert, *audioconvert;
GstElement *convert_array[2];
convert_array[0] = videoconvert;
convert_array[1] = audioconvert;
其中会传入回调函数:
g_signal_connect(decodebin, "pad-added", G_CALLBACK(on_pad_added), convert_array);
在 "pad-added" 发出信号后,我的回调函数将接收此指针 (convert_array) 作为 gpointer 类型:
void on_pad_added(GstElement *element, GstPad *pad, gpointer data);
在这个回调中,我需要从 gpointer 数据中提取我的 GstElements,这是我不成功的尝试:
void on_pad_added(GstElement *element, GstPad *pad, gpointer data) {
GstElement videoelem = ((GstElement *)data)[0];
GstElement audioelem = ((GstElement *)data)[1];
...
}
我该怎么做?
data
需要转换为 GstElement**
,而不是 GstElement*
。请记住,当您在以下行中使用它时,convert_array
衰减为 GstElement**
,而不是 GstElement*
:
g_signal_connect(decodebin, "pad-added", G_CALLBACK(on_pad_added), convert_array);
因此,您需要使用:
void on_pad_added(GstElement *element, GstPad *pad, gpointer data) {
GstElement* videoelem = ((GstElement **)data)[0];
GstElement* audioelem = ((GstElement **)data)[1];
...
}
void on_pad_added(GstElement *element, GstPad *pad, gpointer data) {
GstElement videoelem = ((GstElement *)data)[0];
GstElement audioelem = ((GstElement *)data)[1];
...
}
如果您的 gpointer 实际上是与 GstElement 相同的类型** 那么函数中的 GstElements 应该是指针类型:
void on_pad_added(GstElement *element, GstPad *pad, gpointer data) {
GstElement* videoelem = ((GstElement **)data)[0];
GstElement* audioelem = ((GstElement **)data)[1];
...
}
[这是一个常见的C/C++问题,不要看Gst和G类型]
我有一个指向包含 2 个项目的数组的指针:
GstElement *videoconvert, *audioconvert;
GstElement *convert_array[2];
convert_array[0] = videoconvert;
convert_array[1] = audioconvert;
其中会传入回调函数:
g_signal_connect(decodebin, "pad-added", G_CALLBACK(on_pad_added), convert_array);
在 "pad-added" 发出信号后,我的回调函数将接收此指针 (convert_array) 作为 gpointer 类型:
void on_pad_added(GstElement *element, GstPad *pad, gpointer data);
在这个回调中,我需要从 gpointer 数据中提取我的 GstElements,这是我不成功的尝试:
void on_pad_added(GstElement *element, GstPad *pad, gpointer data) {
GstElement videoelem = ((GstElement *)data)[0];
GstElement audioelem = ((GstElement *)data)[1];
...
}
我该怎么做?
data
需要转换为 GstElement**
,而不是 GstElement*
。请记住,当您在以下行中使用它时,convert_array
衰减为 GstElement**
,而不是 GstElement*
:
g_signal_connect(decodebin, "pad-added", G_CALLBACK(on_pad_added), convert_array);
因此,您需要使用:
void on_pad_added(GstElement *element, GstPad *pad, gpointer data) {
GstElement* videoelem = ((GstElement **)data)[0];
GstElement* audioelem = ((GstElement **)data)[1];
...
}
void on_pad_added(GstElement *element, GstPad *pad, gpointer data) { GstElement videoelem = ((GstElement *)data)[0]; GstElement audioelem = ((GstElement *)data)[1]; ... }
如果您的 gpointer 实际上是与 GstElement 相同的类型** 那么函数中的 GstElements 应该是指针类型:
void on_pad_added(GstElement *element, GstPad *pad, gpointer data) {
GstElement* videoelem = ((GstElement **)data)[0];
GstElement* audioelem = ((GstElement **)data)[1];
...
}