2017-06-02 103 views
-5

在mediastreamer2中,我看到很多這種奇怪的代碼,我不明白。我無法理解這個代碼結構。 Someboy能解釋如何執行這個代碼?

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,那些 「sender_」 是在同一個文件的功能。我不知道如何調用其他功能。因爲我沒有看到這些功能出現在其他文件中。

整個項目在Github:https://github.com/BelledonneCommunications/mediastreamer2

謝謝。

+2

它們是#defines在一些.h文件中?無論如何,github鏈接對未來SO用戶沒有用:( – ThingyWotsit

+0

.. manye他們通過查找結構中的#define然後調用相應的函數來調用? – ThingyWotsit

+0

實際上,這是#define在.h文件中 – Sven

回答

2

.init = sender_init爲例:這會將MSFilterDesc結構的init結構成員初始化爲指向sender_init函數的指針。要知道的兩件事是structure initializationpointers to functions

對於其他人,第一個是一個結構數組的簡單初始化。第二個是結構的簡單和簡單的初始化。

+0

謝謝,這意味着,當這個結構初始化時,結構中的所有函數都會被調用嗎? – Sven

+0

@Sven不,函數調用看起來像'sender_init()'。得到一個指向函數的指針,然後你可以使用結構成員作爲函數,再次請閱讀關於函數的指針。 –