Browse Source

MT#63317 abstract packet copy

Change-Id: I0ea082a4fad138c25cd710dd82020d4f4d192485
pull/2008/head
Richard Fuchs 4 months ago
parent
commit
57bc6b1e95
3 changed files with 21 additions and 10 deletions
  1. +19
    -10
      daemon/codec.c
  2. +1
    -0
      daemon/media_socket.c
  3. +1
    -0
      include/media_socket.h

+ 19
- 10
daemon/codec.c View File

@ -2145,27 +2145,36 @@ static void codec_add_raw_packet_common(struct media_packet *mp, unsigned int cl
}
t_queue_push_tail_link(&mp->packets_out, &p->link);
}
void codec_add_raw_packet(struct media_packet *mp, unsigned int clockrate) {
struct codec_packet *p = g_new0(__typeof(*p), 1);
p->link.data = p;
p->s = mp->raw;
p->free_func = NULL;
codec_add_raw_packet_common(mp, clockrate, p);
}
#ifdef WITH_TRANSCODING
static void codec_add_raw_packet_dup(struct media_packet *mp, unsigned int clockrate) {
struct codec_packet *p = g_new0(__typeof(*p), 1);
p->link.data = p;
// don't just duplicate the string. need to ensure enough room
// if encryption is enabled on this stream
p->s.s = bufferpool_alloc(media_bufferpool, mp->raw.len + RTP_BUFFER_TAIL_ROOM);
// or for RTP header extensions
size_t ext_len = mp->sink.rtpext->length(mp);
p->s.s = bufferpool_alloc(media_bufferpool, mp->raw.len + ext_len + RTP_BUFFER_TAIL_ROOM);
memcpy(p->s.s, mp->raw.s, mp->raw.len);
p->s.len = mp->raw.len;
p->free_func = bufferpool_unref;
p->rtp = (struct rtp_header *) p->s.s;
codec_add_raw_packet_common(mp, clockrate, p);
}
#endif
void codec_add_raw_packet(struct media_packet *mp, unsigned int clockrate) {
if (!mp->sink.rtpext->may_copy) {
codec_add_raw_packet_dup(mp, clockrate);
return;
}
struct codec_packet *p = g_new0(__typeof(*p), 1);
p->link.data = p;
p->s = mp->raw;
p->free_func = NULL;
codec_add_raw_packet_common(mp, clockrate, p);
}
static bool handler_silence_block(struct codec_handler *h, struct media_packet *mp) {
if (CALL_ISSET(mp->call, BLOCK_MEDIA) || ML_ISSET(mp->media->monologue, BLOCK_MEDIA) || mp->sink.attrs.block_media || MEDIA_ISSET(mp->media_out, BLOCK_EGRESS))
return false;


+ 1
- 0
daemon/media_socket.c View File

@ -2074,6 +2074,7 @@ static size_t rtpext_printer_copy_print(struct rtp_header *rh, void *dst, const
const struct rtpext_printer rtpext_printer_copy = {
.length = rtpext_printer_copy_length,
.print = rtpext_printer_copy_print,
.may_copy = true,
};


+ 1
- 0
include/media_socket.h View File

@ -257,6 +257,7 @@ struct sink_attrs {
struct rtpext_printer {
size_t (*length)(const struct media_packet *);
size_t (*print)(struct rtp_header *, void *dst, const struct media_packet *);
bool may_copy;
};
/**


Loading…
Cancel
Save