我无法理解这种代码结构。 someboy可以解释一下如何执行这段代码?

时间:2017-06-02 08:01:44

标签: c

在mediastreamer2中,我看到了很多我不理解的奇怪代码。

static MSFilterMethod sender_methods[] = {

{MS_RTP_SEND_MUTE, sender_mute},

{MS_RTP_SEND_UNMUTE, sender_unmute},

{MS_RTP_SEND_SET_SESSION, sender_set_session},

{MS_RTP_SEND_SEND_DTMF, sender_send_dtmf},

{MS_RTP_SEND_SET_RELAY_SESSION_ID, sender_set_relay_session_id},

{MS_FILTER_GET_SAMPLE_RATE, sender_get_sr },

{MS_FILTER_GET_NCHANNELS, sender_get_ch },

{MS_RTP_SEND_SET_DTMF_DURATION, sender_set_dtmf_duration },

{MS_RTP_SEND_SEND_GENERIC_CN, sender_send_generic_cn },

{0, NULL}

};

和这个

MSFilterDesc ms_rtp_send_desc = {

MS_RTP_SEND_ID,

"MSRtpSend",

N_("RTP output filter"),

MS_FILTER_OTHER,

NULL,

1,

0,

sender_init,

NULL,

sender_process,

NULL,

sender_uninit,

sender_methods,

MS_FILTER_IS_PUMP
};

MSFilterDesc ms_rtp_send_desc = {

.id = MS_RTP_SEND_ID,

.name = "MSRtpSend",

.text = N_("RTP output filter"),

.category = MS_FILTER_OTHER,

.ninputs = 1,

.noutputs = 0,

.init = sender_init,

.process = sender_process,

.uninit = sender_uninit,

.methods = sender_methods,

.flags=MS_FILTER_IS_PUMP

};

在sender_methods中,那些"发件人_"是在同一个文件中的功能。我不知道如何调用其他函数。因为我没有看到这些功能出现在其他文件中。

整个项目在Github:https://github.com/BelledonneCommunications/mediastreamer2

谢谢。

1 个答案:

答案 0 :(得分:2)

以示例.init = sender_init为例:这会将init结构的MSFilterDesc结构成员初始化为指向sender_init函数的指针。要知道的两件事是structure initializationpointers to functions

对于其他人,第一个是结构数组的简单初始化。第二个是结构的简单初始化。