TT#98901 add media_packet_copy/_release

Change-Id: I60bc6b258e9efc0d704b6d8cc6b2c2c915330bdc
pull/1116/head
Richard Fuchs 6 years ago
parent 4519db78bd
commit 36eb641966

@ -107,8 +107,7 @@ static struct jb_packet* get_jb_packet(struct media_packet *mp, const str *s) {
struct jb_packet *p = g_slice_alloc0(sizeof(*p));
p->buf = buf;
p->mp = *mp;
obj_hold(p->mp.sfd);
media_packet_copy(&p->mp, mp);
str_init_len(&p->mp.raw, buf + RTP_BUFFER_HEAD_ROOM, s->len);
memcpy(p->mp.raw.s, s->s, s->len);
@ -440,8 +439,7 @@ void jb_packet_free(struct jb_packet **jbp) {
return;
free((*jbp)->buf);
if ((*jbp)->mp.sfd)
obj_put((*jbp)->mp.sfd);
media_packet_release(&(*jbp)->mp);
g_slice_free1(sizeof(**jbp), *jbp);
*jbp = NULL;
}

@ -1792,6 +1792,29 @@ int media_socket_dequeue(struct media_packet *mp, struct packet_stream *sink) {
return 0;
}
void media_packet_copy(struct media_packet *dst, const struct media_packet *src) {
*dst = *src;
g_queue_init(&dst->packets_out);
if (dst->sfd)
obj_hold(dst->sfd);
if (dst->ssrc_in)
obj_hold(&dst->ssrc_in->parent->h);
if (dst->ssrc_out)
obj_hold(&dst->ssrc_out->parent->h);
dst->rtp = g_memdup(src->rtp, sizeof(*src->rtp));
dst->rtcp = g_memdup(src->rtp, sizeof(*src->rtp));
dst->payload = STR_NULL;
dst->raw = STR_NULL;
}
void media_packet_release(struct media_packet *mp) {
obj_put(mp->sfd);
obj_put(&mp->ssrc_in->parent->h);
obj_put(&mp->ssrc_out->parent->h);
g_queue_clear_full(&mp->packets_out, codec_packet_free);
g_free(mp->rtp);
g_free(mp->rtcp);
}
/* called lock-free */
static int stream_packet(struct packet_handler_ctx *phc) {

@ -176,6 +176,8 @@ void __unkernelize(struct packet_stream *);
void unkernelize(struct packet_stream *);
void __stream_unconfirm(struct packet_stream *);
void media_packet_copy(struct media_packet *, const struct media_packet *);
void media_packet_release(struct media_packet *);
int media_socket_dequeue(struct media_packet *mp, struct packet_stream *sink);
const struct streamhandler *determine_handler(const struct transport_protocol *in_proto,
struct call_media *out_media, int must_recrypt);

Loading…
Cancel
Save