vlc | branch: master | Rémi Denis-Courmont <[email protected]> | Sun Apr 19 20:43:16 2020 +0300| [121bb16d7965599d58eb7b34d98946868866bf10] | committer: Rémi Denis-Courmont
rtp: reorder to avoid forward declarations > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=121bb16d7965599d58eb7b34d98946868866bf10 --- modules/access/rtp/rtp.c | 361 +++++++++++++++++++++++------------------------ 1 file changed, 174 insertions(+), 187 deletions(-) diff --git a/modules/access/rtp/rtp.c b/modules/access/rtp/rtp.c index 36d7e9aef0..a84f4a87cf 100644 --- a/modules/access/rtp/rtp.c +++ b/modules/access/rtp/rtp.c @@ -39,96 +39,6 @@ # include <vlc_gcrypt.h> #endif -#define RTCP_PORT_TEXT N_("RTCP (local) port") -#define RTCP_PORT_LONGTEXT N_( \ - "RTCP packets will be received on this transport protocol port. " \ - "If zero, multiplexed RTP/RTCP is used.") - -#define SRTP_KEY_TEXT N_("SRTP key (hexadecimal)") -#define SRTP_KEY_LONGTEXT N_( \ - "RTP packets will be authenticated and deciphered "\ - "with this Secure RTP master shared secret key. "\ - "This must be a 32-character-long hexadecimal string.") - -#define SRTP_SALT_TEXT N_("SRTP salt (hexadecimal)") -#define SRTP_SALT_LONGTEXT N_( \ - "Secure RTP requires a (non-secret) master salt value. " \ - "This must be a 28-character-long hexadecimal string.") - -#define RTP_MAX_SRC_TEXT N_("Maximum RTP sources") -#define RTP_MAX_SRC_LONGTEXT N_( \ - "How many distinct active RTP sources are allowed at a time." ) - -#define RTP_TIMEOUT_TEXT N_("RTP source timeout (sec)") -#define RTP_TIMEOUT_LONGTEXT N_( \ - "How long to wait for any packet before a source is expired.") - -#define RTP_MAX_DROPOUT_TEXT N_("Maximum RTP sequence number dropout") -#define RTP_MAX_DROPOUT_LONGTEXT N_( \ - "RTP packets will be discarded if they are too much ahead (i.e. in the " \ - "future) by this many packets from the last received packet." ) - -#define RTP_MAX_MISORDER_TEXT N_("Maximum RTP sequence number misordering") -#define RTP_MAX_MISORDER_LONGTEXT N_( \ - "RTP packets will be discarded if they are too far behind (i.e. in the " \ - "past) by this many packets from the last received packet." ) - -#define RTP_DYNAMIC_PT_TEXT N_("RTP payload format assumed for dynamic " \ - "payloads") -#define RTP_DYNAMIC_PT_LONGTEXT N_( \ - "This payload format will be assumed for dynamic payload types " \ - "(between 96 and 127) if it can't be determined otherwise with " \ - "out-of-band mappings (SDP)" ) - -static const char *const dynamic_pt_list[] = { "theora" }; -static const char *const dynamic_pt_list_text[] = { "Theora Encoded Video" }; - -static int Open (vlc_object_t *); -static void Close (vlc_object_t *); - -/* - * Module descriptor - */ -vlc_module_begin () - set_shortname (N_("RTP")) - set_description (N_("Real-Time Protocol (RTP) input")) - set_category (CAT_INPUT) - set_subcategory (SUBCAT_INPUT_DEMUX) - set_capability ("access", 0) - set_callbacks (Open, Close) - - add_integer ("rtcp-port", 0, RTCP_PORT_TEXT, - RTCP_PORT_LONGTEXT, false) - change_integer_range (0, 65535) - change_safe () -#ifdef HAVE_SRTP - add_string ("srtp-key", "", - SRTP_KEY_TEXT, SRTP_KEY_LONGTEXT, false) - change_safe () - add_string ("srtp-salt", "", - SRTP_SALT_TEXT, SRTP_SALT_LONGTEXT, false) - change_safe () -#endif - add_integer ("rtp-max-src", 1, RTP_MAX_SRC_TEXT, - RTP_MAX_SRC_LONGTEXT, true) - change_integer_range (1, 255) - add_integer ("rtp-timeout", 5, RTP_TIMEOUT_TEXT, - RTP_TIMEOUT_LONGTEXT, true) - add_integer ("rtp-max-dropout", 3000, RTP_MAX_DROPOUT_TEXT, - RTP_MAX_DROPOUT_LONGTEXT, true) - change_integer_range (0, 32767) - add_integer ("rtp-max-misorder", 100, RTP_MAX_MISORDER_TEXT, - RTP_MAX_MISORDER_LONGTEXT, true) - change_integer_range (0, 32767) - add_string ("rtp-dynamic-pt", NULL, RTP_DYNAMIC_PT_TEXT, - RTP_DYNAMIC_PT_LONGTEXT, true) - change_string_list (dynamic_pt_list, dynamic_pt_list_text) - - /*add_shortcut ("sctp")*/ - add_shortcut ("dccp", "rtptcp", /* "tcp" is already taken :( */ - "rtp", "udplite") -vlc_module_end () - /* * TODO: so much stuff * - send RTCP-RR and RTCP-BYE @@ -145,12 +55,107 @@ vlc_module_end () # define IPPROTO_UDPLITE 136 /* from IANA */ #endif +/** + * Extracts port number from "[host]:port" or "host:port" strings, + * and remove brackets from the host name. + * @param phost pointer to the string upon entry, + * pointer to the hostname upon return. + * @return port number, 0 if missing. + */ +static int extract_port (char **phost) +{ + char *host = *phost, *port; -/* - * Local prototypes + if (host[0] == '[') + { + host = ++*phost; /* skip '[' */ + port = strchr (host, ']'); + if (port) + *port++ = '\0'; /* skip ']' */ + } + else + port = strchr (host, ':'); + + if (port == NULL) + return 0; + *port++ = '\0'; /* skip ':' */ + return atoi (port); +} + +/** + * Control callback */ -static int Control (demux_t *, int i_query, va_list args); -static int extract_port (char **phost); +static int Control (demux_t *demux, int query, va_list args) +{ + demux_sys_t *sys = demux->p_sys; + + switch (query) + { + case DEMUX_GET_PTS_DELAY: + { + *va_arg (args, vlc_tick_t *) = + VLC_TICK_FROM_MS( var_InheritInteger (demux, "network-caching") ); + return VLC_SUCCESS; + } + + case DEMUX_CAN_PAUSE: + case DEMUX_CAN_SEEK: + case DEMUX_CAN_CONTROL_PACE: + { + bool *v = va_arg( args, bool * ); + *v = false; + return VLC_SUCCESS; + } + } + + if (sys->chained_demux != NULL) + return vlc_demux_chained_ControlVa (sys->chained_demux, query, args); + + switch (query) + { + case DEMUX_GET_POSITION: + { + float *v = va_arg (args, float *); + *v = 0.; + return VLC_SUCCESS; + } + + case DEMUX_GET_LENGTH: + case DEMUX_GET_TIME: + { + *va_arg (args, vlc_tick_t *) = 0; + return VLC_SUCCESS; + } + } + + return VLC_EGENERIC; +} + +/** + * Releases resources + */ +static void Close (vlc_object_t *obj) +{ + demux_t *demux = (demux_t *)obj; + demux_sys_t *p_sys = demux->p_sys; + + if (p_sys->thread_ready) + { + vlc_cancel (p_sys->thread); + vlc_join (p_sys->thread, NULL); + } + +#ifdef HAVE_SRTP + if (p_sys->srtp) + srtp_destroy (p_sys->srtp); +#endif + if (p_sys->session) + rtp_session_destroy (demux, p_sys->session); + if (p_sys->rtcp_fd != -1) + net_Close (p_sys->rtcp_fd); + net_Close (p_sys->fd); + free (p_sys); +} /** * Probes and initializes. @@ -313,107 +318,89 @@ error: return VLC_EGENERIC; } +#define RTCP_PORT_TEXT N_("RTCP (local) port") +#define RTCP_PORT_LONGTEXT N_( \ + "RTCP packets will be received on this transport protocol port. " \ + "If zero, multiplexed RTP/RTCP is used.") -/** - * Releases resources - */ -static void Close (vlc_object_t *obj) -{ - demux_t *demux = (demux_t *)obj; - demux_sys_t *p_sys = demux->p_sys; +#define SRTP_KEY_TEXT N_("SRTP key (hexadecimal)") +#define SRTP_KEY_LONGTEXT N_( \ + "RTP packets will be authenticated and deciphered "\ + "with this Secure RTP master shared secret key. "\ + "This must be a 32-character-long hexadecimal string.") - if (p_sys->thread_ready) - { - vlc_cancel (p_sys->thread); - vlc_join (p_sys->thread, NULL); - } +#define SRTP_SALT_TEXT N_("SRTP salt (hexadecimal)") +#define SRTP_SALT_LONGTEXT N_( \ + "Secure RTP requires a (non-secret) master salt value. " \ + "This must be a 28-character-long hexadecimal string.") -#ifdef HAVE_SRTP - if (p_sys->srtp) - srtp_destroy (p_sys->srtp); -#endif - if (p_sys->session) - rtp_session_destroy (demux, p_sys->session); - if (p_sys->rtcp_fd != -1) - net_Close (p_sys->rtcp_fd); - net_Close (p_sys->fd); - free (p_sys); -} +#define RTP_MAX_SRC_TEXT N_("Maximum RTP sources") +#define RTP_MAX_SRC_LONGTEXT N_( \ + "How many distinct active RTP sources are allowed at a time." ) +#define RTP_TIMEOUT_TEXT N_("RTP source timeout (sec)") +#define RTP_TIMEOUT_LONGTEXT N_( \ + "How long to wait for any packet before a source is expired.") -/** - * Extracts port number from "[host]:port" or "host:port" strings, - * and remove brackets from the host name. - * @param phost pointer to the string upon entry, - * pointer to the hostname upon return. - * @return port number, 0 if missing. - */ -static int extract_port (char **phost) -{ - char *host = *phost, *port; +#define RTP_MAX_DROPOUT_TEXT N_("Maximum RTP sequence number dropout") +#define RTP_MAX_DROPOUT_LONGTEXT N_( \ + "RTP packets will be discarded if they are too much ahead (i.e. in the " \ + "future) by this many packets from the last received packet." ) - if (host[0] == '[') - { - host = ++*phost; /* skip '[' */ - port = strchr (host, ']'); - if (port) - *port++ = '\0'; /* skip ']' */ - } - else - port = strchr (host, ':'); +#define RTP_MAX_MISORDER_TEXT N_("Maximum RTP sequence number misordering") +#define RTP_MAX_MISORDER_LONGTEXT N_( \ + "RTP packets will be discarded if they are too far behind (i.e. in the " \ + "past) by this many packets from the last received packet." ) - if (port == NULL) - return 0; - *port++ = '\0'; /* skip ':' */ - return atoi (port); -} +#define RTP_DYNAMIC_PT_TEXT N_("RTP payload format assumed for dynamic " \ + "payloads") +#define RTP_DYNAMIC_PT_LONGTEXT N_( \ + "This payload format will be assumed for dynamic payload types " \ + "(between 96 and 127) if it can't be determined otherwise with " \ + "out-of-band mappings (SDP)" ) +static const char *const dynamic_pt_list[] = { "theora" }; +static const char *const dynamic_pt_list_text[] = { "Theora Encoded Video" }; -/** - * Control callback +/* + * Module descriptor */ -static int Control (demux_t *demux, int query, va_list args) -{ - demux_sys_t *sys = demux->p_sys; - - switch (query) - { - case DEMUX_GET_PTS_DELAY: - { - *va_arg (args, vlc_tick_t *) = - VLC_TICK_FROM_MS( var_InheritInteger (demux, "network-caching") ); - return VLC_SUCCESS; - } - - case DEMUX_CAN_PAUSE: - case DEMUX_CAN_SEEK: - case DEMUX_CAN_CONTROL_PACE: - { - bool *v = va_arg( args, bool * ); - *v = false; - return VLC_SUCCESS; - } - } - - if (sys->chained_demux != NULL) - return vlc_demux_chained_ControlVa (sys->chained_demux, query, args); - - switch (query) - { - case DEMUX_GET_POSITION: - { - float *v = va_arg (args, float *); - *v = 0.; - return VLC_SUCCESS; - } - - case DEMUX_GET_LENGTH: - case DEMUX_GET_TIME: - { - *va_arg (args, vlc_tick_t *) = 0; - return VLC_SUCCESS; - } - } +vlc_module_begin() + set_shortname(N_("RTP")) + set_description(N_("Real-Time Protocol (RTP) input")) + set_category(CAT_INPUT) + set_subcategory(SUBCAT_INPUT_DEMUX) + set_capability("access", 0) + set_callbacks(Open, Close) + + add_integer("rtcp-port", 0, RTCP_PORT_TEXT, + RTCP_PORT_LONGTEXT, false) + change_integer_range(0, 65535) + change_safe() +#ifdef HAVE_SRTP + add_string ("srtp-key", "", + SRTP_KEY_TEXT, SRTP_KEY_LONGTEXT, false) + change_safe () + add_string("srtp-salt", "", + SRTP_SALT_TEXT, SRTP_SALT_LONGTEXT, false) + change_safe() +#endif + add_integer("rtp-max-src", 1, RTP_MAX_SRC_TEXT, + RTP_MAX_SRC_LONGTEXT, true) + change_integer_range (1, 255) + add_integer("rtp-timeout", 5, RTP_TIMEOUT_TEXT, + RTP_TIMEOUT_LONGTEXT, true) + add_integer("rtp-max-dropout", 3000, RTP_MAX_DROPOUT_TEXT, + RTP_MAX_DROPOUT_LONGTEXT, true) + change_integer_range (0, 32767) + add_integer("rtp-max-misorder", 100, RTP_MAX_MISORDER_TEXT, + RTP_MAX_MISORDER_LONGTEXT, true) + change_integer_range (0, 32767) + add_string("rtp-dynamic-pt", NULL, RTP_DYNAMIC_PT_TEXT, + RTP_DYNAMIC_PT_LONGTEXT, true) + change_string_list(dynamic_pt_list, dynamic_pt_list_text) - return VLC_EGENERIC; -} + /*add_shortcut ("sctp")*/ + add_shortcut("dccp", "rtptcp", /* "tcp" is already taken :( */ + "rtp", "udplite") +vlc_module_end() _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
