Skip to content
Snippets Groups Projects
Commit 504d5aa6 authored by Rémi Denis-Courmont's avatar Rémi Denis-Courmont
Browse files

rtp: add PT owner callbacks

parent 5046b7a4
No related branches found
Tags 0.8.2
No related merge requests found
......@@ -85,8 +85,8 @@ static const struct vlc_rtp_es_operations vlc_rtp_es_id_ops = {
vlc_rtp_es_id_destroy, vlc_rtp_es_id_send,
};
struct vlc_rtp_es *vlc_rtp_es_request(struct vlc_rtp_pt *pt,
const es_format_t *restrict fmt)
static struct vlc_rtp_es *vlc_rtp_es_request(struct vlc_rtp_pt *pt,
const es_format_t *restrict fmt)
{
demux_t *demux = pt->owner.data;
......@@ -128,7 +128,8 @@ static const struct vlc_rtp_es_operations vlc_rtp_es_mux_ops = {
vlc_rtp_es_mux_destroy, vlc_rtp_es_mux_send,
};
struct vlc_rtp_es *vlc_rtp_mux_request(struct vlc_rtp_pt *pt, const char *name)
static struct vlc_rtp_es *vlc_rtp_mux_request(struct vlc_rtp_pt *pt,
const char *name)
{
demux_t *demux = pt->owner.data;
......@@ -146,6 +147,10 @@ struct vlc_rtp_es *vlc_rtp_mux_request(struct vlc_rtp_pt *pt, const char *name)
return &em->es;
}
static const struct vlc_rtp_pt_owner_operations vlc_rtp_pt_owner_ops = {
vlc_rtp_es_request, vlc_rtp_mux_request,
};
/**
* Extracts port number from "[host]:port" or "host:port" strings,
* and remove brackets from the host name.
......@@ -391,7 +396,7 @@ static int OpenSDP(vlc_object_t *obj)
goto error;
/* Parse payload types */
const struct vlc_rtp_pt_owner pt_owner = { demux };
const struct vlc_rtp_pt_owner pt_owner = { &vlc_rtp_pt_owner_ops, demux };
int err = vlc_rtp_add_media_types(obj, sys->session, media, &pt_owner);
if (err < 0) {
msg_Err(obj, "SDP description parse error");
......@@ -542,7 +547,7 @@ static int OpenURL(vlc_object_t *obj)
if (p_sys->session == NULL)
goto error;
const struct vlc_rtp_pt_owner pt_owner = { demux };
const struct vlc_rtp_pt_owner pt_owner = { &vlc_rtp_pt_owner_ops, demux };
rtp_autodetect(VLC_OBJECT(demux), p_sys->session, &pt_owner);
#ifdef HAVE_SRTP
......
......@@ -105,7 +105,17 @@ struct vlc_rtp_pt_operations {
void (*decode)(struct vlc_rtp_pt *pt, void *data, block_t *block);
};
struct vlc_rtp_pt_owner;
struct vlc_rtp_es;
struct vlc_rtp_pt_owner_operations {
struct vlc_rtp_es *(*request_es)(struct vlc_rtp_pt *pt,
const es_format_t *restrict fmt);
struct vlc_rtp_es *(*request_mux)(struct vlc_rtp_pt *pt, const char *name);
};
struct vlc_rtp_pt_owner {
const struct vlc_rtp_pt_owner_operations *ops;
void *data;
};
......@@ -174,7 +184,19 @@ static inline void vlc_rtp_pt_decode(struct vlc_rtp_pt *pt,
pt->ops->decode(pt, data, pkt);
}
struct vlc_rtp_es;
static inline
struct vlc_rtp_es *vlc_rtp_pt_request_es(struct vlc_rtp_pt *pt,
const es_format_t *restrict fmt)
{
return pt->owner.ops->request_es(pt, fmt);
}
static inline
struct vlc_rtp_es *vlc_rtp_pt_request_mux(struct vlc_rtp_pt *pt,
const char *name)
{
return pt->owner.ops->request_mux(pt, name);
}
/**
* RTP elementary output stream operations.
......@@ -222,11 +244,6 @@ static inline void vlc_rtp_es_send(struct vlc_rtp_es *es, block_t *block)
*/
extern struct vlc_rtp_es *const vlc_rtp_es_dummy;
struct vlc_rtp_es *vlc_rtp_es_request(struct vlc_rtp_pt *pt,
const es_format_t *fmt);
struct vlc_rtp_es *vlc_rtp_mux_request(struct vlc_rtp_pt *, const char *name);
void rtp_autodetect(vlc_object_t *, rtp_session_t *,
const struct vlc_rtp_pt_owner *restrict);
......
......@@ -65,7 +65,7 @@ static void *pcmu_init(struct vlc_rtp_pt *pt)
es_format_Init (&fmt, AUDIO_ES, VLC_CODEC_MULAW);
fmt.audio.i_rate = pt->frequency;
fmt.audio.i_channels = pt->channel_count ? pt->channel_count : 1;
return vlc_rtp_es_request(pt, &fmt);
return vlc_rtp_pt_request_es(pt, &fmt);
}
static const struct vlc_rtp_pt_operations rtp_audio_pcmu = {
......@@ -82,7 +82,7 @@ static void *gsm_init(struct vlc_rtp_pt *pt)
es_format_Init (&fmt, AUDIO_ES, VLC_CODEC_GSM);
fmt.audio.i_rate = 8000;
fmt.audio.i_physical_channels = AOUT_CHAN_CENTER;
return vlc_rtp_es_request(pt, &fmt);
return vlc_rtp_pt_request_es(pt, &fmt);
}
static const struct vlc_rtp_pt_operations rtp_audio_gsm = {
......@@ -99,7 +99,7 @@ static void *pcma_init(struct vlc_rtp_pt *pt)
es_format_Init (&fmt, AUDIO_ES, VLC_CODEC_ALAW);
fmt.audio.i_rate = pt->frequency;
fmt.audio.i_channels = pt->channel_count ? pt->channel_count : 1;
return vlc_rtp_es_request(pt, &fmt);
return vlc_rtp_pt_request_es(pt, &fmt);
}
static const struct vlc_rtp_pt_operations rtp_audio_pcma = {
......@@ -116,7 +116,7 @@ static void *l16_init(struct vlc_rtp_pt *pt)
es_format_Init (&fmt, AUDIO_ES, VLC_CODEC_S16B);
fmt.audio.i_rate = pt->frequency;
fmt.audio.i_channels = pt->channel_count ? pt->channel_count : 1;
return vlc_rtp_es_request(pt, &fmt);
return vlc_rtp_pt_request_es(pt, &fmt);
}
static const struct vlc_rtp_pt_operations rtp_audio_l16 = {
......@@ -133,7 +133,7 @@ static void *qcelp_init(struct vlc_rtp_pt *pt)
es_format_Init (&fmt, AUDIO_ES, VLC_CODEC_QCELP);
fmt.audio.i_rate = 8000;
fmt.audio.i_physical_channels = AOUT_CHAN_CENTER;
return vlc_rtp_es_request(pt, &fmt);
return vlc_rtp_pt_request_es(pt, &fmt);
}
static const struct vlc_rtp_pt_operations rtp_audio_qcelp = {
......@@ -149,7 +149,7 @@ static void *mpa_init(struct vlc_rtp_pt *pt)
es_format_Init (&fmt, AUDIO_ES, VLC_CODEC_MPGA);
fmt.b_packetized = false;
return vlc_rtp_es_request(pt, &fmt);
return vlc_rtp_pt_request_es(pt, &fmt);
}
static void mpa_decode(struct vlc_rtp_pt *pt, void *data, block_t *block)
......@@ -180,7 +180,7 @@ static void *mpv_init(struct vlc_rtp_pt *pt)
es_format_Init (&fmt, VIDEO_ES, VLC_CODEC_MPGV);
fmt.b_packetized = false;
return vlc_rtp_es_request(pt, &fmt);
return vlc_rtp_pt_request_es(pt, &fmt);
}
static void mpv_decode(struct vlc_rtp_pt *pt, void *data, block_t *block)
......@@ -214,7 +214,7 @@ static const struct vlc_rtp_pt_operations rtp_video_mpv = {
*/
static void *ts_init(struct vlc_rtp_pt *pt)
{
return vlc_rtp_mux_request(pt, "ts");
return vlc_rtp_pt_request_mux(pt, "ts");
}
static const struct vlc_rtp_pt_operations rtp_av_ts = {
......
......@@ -275,7 +275,7 @@ static void xiph_decode(struct vlc_rtp_pt *pt, void *data, block_t *block)
"Theora packed configuration received (%06"PRIx32")",
ident);
self->ident = ident;
self->id = vlc_rtp_es_request(pt, &fmt);
self->id = vlc_rtp_pt_request_es(pt, &fmt);
break;
}
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment