mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-30 02:26:23 +00:00
SDP: Add get/set option calls for RTP sched context per type.
Change-Id: I82dc75c63c48904e9e5a49e2205dcc06e88487e4
This commit is contained in:
@@ -522,4 +522,29 @@ void ast_sdp_options_set_ssrc(struct ast_sdp_options *options, unsigned int ssrc
|
|||||||
*/
|
*/
|
||||||
unsigned int ast_sdp_options_get_ssrc(const struct ast_sdp_options *options);
|
unsigned int ast_sdp_options_get_ssrc(const struct ast_sdp_options *options);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Set the SDP options scheduler context used to create new streams of the type.
|
||||||
|
* \since 15.0.0
|
||||||
|
*
|
||||||
|
* \param options SDP Options
|
||||||
|
* \param type Media type the scheduler context is for.
|
||||||
|
* \param sched Scheduler context to use for the specified media type.
|
||||||
|
*
|
||||||
|
* \return Nothing
|
||||||
|
*/
|
||||||
|
void ast_sdp_options_set_sched_type(struct ast_sdp_options *options,
|
||||||
|
enum ast_media_type type, struct ast_sched_context *sched);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Get the SDP options scheduler context used to create new streams of the type.
|
||||||
|
* \since 15.0.0
|
||||||
|
*
|
||||||
|
* \param options SDP Options
|
||||||
|
* \param type Media type the format cap represents.
|
||||||
|
*
|
||||||
|
* \return The stored scheduler context to create new streams of the type.
|
||||||
|
*/
|
||||||
|
struct ast_sched_context *ast_sdp_options_get_sched_type(const struct ast_sdp_options *options,
|
||||||
|
enum ast_media_type type);
|
||||||
|
|
||||||
#endif /* _ASTERISK_SDP_OPTIONS_H */
|
#endif /* _ASTERISK_SDP_OPTIONS_H */
|
||||||
|
@@ -77,6 +77,39 @@ DEFINE_GETTERS_SETTERS_FOR(enum ast_sdp_options_impl, impl);
|
|||||||
DEFINE_GETTERS_SETTERS_FOR(enum ast_sdp_options_encryption, encryption);
|
DEFINE_GETTERS_SETTERS_FOR(enum ast_sdp_options_encryption, encryption);
|
||||||
DEFINE_GETTERS_SETTERS_FOR(unsigned int, ssrc);
|
DEFINE_GETTERS_SETTERS_FOR(unsigned int, ssrc);
|
||||||
|
|
||||||
|
struct ast_sched_context *ast_sdp_options_get_sched_type(const struct ast_sdp_options *options, enum ast_media_type type)
|
||||||
|
{
|
||||||
|
struct ast_sched_context *sched = NULL;
|
||||||
|
|
||||||
|
switch (type) {
|
||||||
|
case AST_MEDIA_TYPE_AUDIO:
|
||||||
|
case AST_MEDIA_TYPE_VIDEO:
|
||||||
|
case AST_MEDIA_TYPE_IMAGE:
|
||||||
|
case AST_MEDIA_TYPE_TEXT:
|
||||||
|
sched = options->sched[type];
|
||||||
|
break;
|
||||||
|
case AST_MEDIA_TYPE_UNKNOWN:
|
||||||
|
case AST_MEDIA_TYPE_END:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return sched;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ast_sdp_options_set_sched_type(struct ast_sdp_options *options, enum ast_media_type type, struct ast_sched_context *sched)
|
||||||
|
{
|
||||||
|
switch (type) {
|
||||||
|
case AST_MEDIA_TYPE_AUDIO:
|
||||||
|
case AST_MEDIA_TYPE_VIDEO:
|
||||||
|
case AST_MEDIA_TYPE_IMAGE:
|
||||||
|
case AST_MEDIA_TYPE_TEXT:
|
||||||
|
options->sched[type] = sched;
|
||||||
|
break;
|
||||||
|
case AST_MEDIA_TYPE_UNKNOWN:
|
||||||
|
case AST_MEDIA_TYPE_END:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void set_defaults(struct ast_sdp_options *options)
|
static void set_defaults(struct ast_sdp_options *options)
|
||||||
{
|
{
|
||||||
options->dtmf = DEFAULT_DTMF;
|
options->dtmf = DEFAULT_DTMF;
|
||||||
|
@@ -35,6 +35,8 @@ struct ast_sdp_options {
|
|||||||
/*! RTP Engine Name */
|
/*! RTP Engine Name */
|
||||||
AST_STRING_FIELD(rtp_engine);
|
AST_STRING_FIELD(rtp_engine);
|
||||||
);
|
);
|
||||||
|
/*! Scheduler context for the media stream types (Mainly for RTP) */
|
||||||
|
struct ast_sched_context *sched[AST_MEDIA_TYPE_END];
|
||||||
struct {
|
struct {
|
||||||
unsigned int rtp_symmetric:1;
|
unsigned int rtp_symmetric:1;
|
||||||
unsigned int udptl_symmetric:1;
|
unsigned int udptl_symmetric:1;
|
||||||
|
@@ -151,12 +151,6 @@ static void sdp_state_capabilities_free(struct sdp_state_capabilities *capabilit
|
|||||||
ast_free(capabilities);
|
ast_free(capabilities);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* TODO
|
|
||||||
* This isn't set anywhere yet.
|
|
||||||
*/
|
|
||||||
/*! \brief Scheduler for RTCP purposes */
|
|
||||||
static struct ast_sched_context *sched;
|
|
||||||
|
|
||||||
/*! \brief Internal function which creates an RTP instance */
|
/*! \brief Internal function which creates an RTP instance */
|
||||||
static struct sdp_state_rtp *create_rtp(const struct ast_sdp_options *options,
|
static struct sdp_state_rtp *create_rtp(const struct ast_sdp_options *options,
|
||||||
enum ast_media_type media_type)
|
enum ast_media_type media_type)
|
||||||
@@ -185,7 +179,8 @@ static struct sdp_state_rtp *create_rtp(const struct ast_sdp_options *options,
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
rtp->instance = ast_rtp_instance_new(options->rtp_engine, sched, media_address, NULL);
|
rtp->instance = ast_rtp_instance_new(options->rtp_engine,
|
||||||
|
ast_sdp_options_get_sched_type(options, media_type), media_address, NULL);
|
||||||
if (!rtp->instance) {
|
if (!rtp->instance) {
|
||||||
ast_log(LOG_ERROR, "Unable to create RTP instance using RTP engine '%s'\n",
|
ast_log(LOG_ERROR, "Unable to create RTP instance using RTP engine '%s'\n",
|
||||||
options->rtp_engine);
|
options->rtp_engine);
|
||||||
|
Reference in New Issue
Block a user