Browse Source

MT#63317 parse out extensions

Change-Id: I33965782836782790e6b0872b97818717f2b9949
pull/2008/head
Richard Fuchs 4 months ago
parent
commit
c216b51260
2 changed files with 26 additions and 2 deletions
  1. +13
    -2
      daemon/media_socket.c
  2. +13
    -0
      include/media_socket.h

+ 13
- 2
daemon/media_socket.c View File

@ -2356,7 +2356,12 @@ static void media_packet_rtp_extension(struct packet_handler_ctx *phc, unsigned
if (!ext)
return;
// stub
__auto_type edata = g_new0(struct rtp_extension_data, 1);
edata->ext = ext;
edata->link.data = edata;
edata->content = *data;
t_queue_push_tail_link(&phc->mp.extmap, &edata->link);
}
static void media_packet_rtp_extensions(struct packet_handler_ctx *phc) {
@ -2801,6 +2806,7 @@ void media_packet_copy(struct media_packet *dst, const struct media_packet *src)
dst->payload = STR_NULL;
dst->raw = STR_NULL;
dst->extensions = STR_NULL;
t_queue_init(&dst->extmap);
}
void media_packet_release(struct media_packet *mp) {
obj_release(mp->sfd);
@ -3194,8 +3200,13 @@ out:
media_socket_dequeue(&phc->mp, NULL); // just free
ssrc_entry_release(phc->mp.ssrc_out);
ssrc_entry_release(phc->mp.ssrc_in);
while (phc->mp.extmap.length) {
__auto_type l = t_queue_pop_head_link(&phc->mp.extmap);
rtp_ext_data_free(l->data);
}
rtcp_list_free(&phc->rtcp_list);
g_queue_clear_full(&free_list, bufferpool_unref);


+ 13
- 0
include/media_socket.h View File

@ -264,6 +264,9 @@ struct sink_handler {
int kernel_output_idx;
struct sink_attrs attrs;
};
TYPED_GQUEUE(extmap_data, struct rtp_extension_data);
struct media_packet {
str raw;
@ -282,6 +285,7 @@ struct media_packet {
struct ssrc_entry_call *ssrc_in, *ssrc_out; // SSRC contexts from in_srtp and out_srtp
str payload;
str extensions;
extmap_data_q extmap;
codec_packet_q packets_out;
int ptime; // returned from decoding
@ -293,9 +297,18 @@ struct rtp_extension {
bool accepted:1;
};
struct rtp_extension_data {
extmap_data_list link;
struct rtp_extension *ext;
str content;
};
static inline void rtp_extension_free(struct rtp_extension *r) {
g_free(r);
}
static inline void rtp_ext_data_free(struct rtp_extension_data *r) {
g_free(r);
}
TYPED_GQUEUE(extmap, struct rtp_extension);
TYPED_GHASHTABLE(extmap_ht, void, struct rtp_extension, g_direct_hash, g_direct_equal, NULL, NULL);


Loading…
Cancel
Save