diff --git a/include/re_sdp.h b/include/re_sdp.h index 004dc2a..8340cb4 100644 --- a/include/re_sdp.h +++ b/include/re_sdp.h @@ -89,6 +89,7 @@ int sdp_media_add(struct sdp_media **mp, struct sdp_session *sess, const char *name, uint16_t port, const char *proto); void sdp_media_set_encode_handler(struct sdp_media *m, sdp_media_enc_h *ench, void *arg); +void sdp_media_set_fmt_ignore(struct sdp_media *m, bool fmt_ignore); void sdp_media_set_disabled(struct sdp_media *m, bool disabled); void sdp_media_set_lport(struct sdp_media *m, uint16_t port); void sdp_media_set_laddr(struct sdp_media *m, const struct sa *laddr); diff --git a/src/sdp/media.c b/src/sdp/media.c index 4203ed3..142d733 100644 --- a/src/sdp/media.c +++ b/src/sdp/media.c @@ -26,6 +26,7 @@ static void destructor(void *arg) if (m->le.list) { m->disabled = true; + m->ench = NULL; mem_ref(m); return; } @@ -216,7 +217,7 @@ void sdp_media_align_formats(struct sdp_media *m, bool offer) struct sdp_format *rfmt, *lfmt; struct le *rle, *lle; - if (!m || m->disabled || !sa_port(&m->raddr)) + if (!m || m->disabled || !sa_port(&m->raddr) || m->fmt_ignore) return; for (lle=m->lfmtl.head; lle; lle=lle->next) { @@ -307,6 +308,21 @@ void sdp_media_set_encode_handler(struct sdp_media *m, sdp_media_enc_h *ench, } +/** + * Set an SDP Media line to ignore formats + * + * @param m SDP Media line + * @param fmt_ignore True for ignore formats, otherwise false + */ +void sdp_media_set_fmt_ignore(struct sdp_media *m, bool fmt_ignore) +{ + if (!m) + return; + + m->fmt_ignore = fmt_ignore; +} + + /** * Set an SDP Media line to enabled/disabled * diff --git a/src/sdp/sdp.h b/src/sdp/sdp.h index abd7a7d..cd11cc5 100644 --- a/src/sdp/sdp.h +++ b/src/sdp/sdp.h @@ -43,6 +43,7 @@ struct sdp_media { void *arg; enum sdp_dir ldir; enum sdp_dir rdir; + bool fmt_ignore; bool disabled; int dynpt; };