mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-04 20:04:50 +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);
|
||||
|
||||
/*!
|
||||
* \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 */
|
||||
|
@@ -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(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)
|
||||
{
|
||||
options->dtmf = DEFAULT_DTMF;
|
||||
|
@@ -35,6 +35,8 @@ struct ast_sdp_options {
|
||||
/*! RTP Engine Name */
|
||||
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 {
|
||||
unsigned int rtp_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);
|
||||
}
|
||||
|
||||
/* 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 */
|
||||
static struct sdp_state_rtp *create_rtp(const struct ast_sdp_options *options,
|
||||
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;
|
||||
}
|
||||
|
||||
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) {
|
||||
ast_log(LOG_ERROR, "Unable to create RTP instance using RTP engine '%s'\n",
|
||||
options->rtp_engine);
|
||||
|
Reference in New Issue
Block a user