Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • videolan/vlc
  • chouquette/vlc
  • bakiewicz.marek122/vlc
  • devnexen/vlc
  • rohanrajpal/vlc
  • blurrrb/vlc
  • gsoc/gsoc2019/darkapex/vlc
  • b1ue/vlc
  • fkuehne/vlc
  • magsoft/vlc
  • chub/vlc
  • cramiro9/vlc
  • robUx4/vlc
  • rom1v/vlc
  • akshayaky/vlc
  • tmk907/vlc
  • akymaster/vlc
  • govind.sharma/vlc
  • psilokos/vlc
  • xjbeta/vlc
  • jahan/vlc
  • 1480c1/vlc
  • amanchande/vlc
  • aaqib/vlc
  • rist/vlc
  • apol/vlc
  • mindfreeze/vlc
  • alexandre-janniaux/vlc
  • sandsmark/vlc
  • jagannatharjun/vlc
  • gsoc/gsoc2020/matiaslgonzalez/vlc
  • gsoc/gsoc2020/jagannatharjun/vlc
  • mstorsjo/vlc
  • gsoc/gsoc2020/vedenta/vlc
  • gsoc/gsoc2020/arnav-ishaan/vlc
  • gsoc/gsoc2020/andreduong/vlc
  • fuzun/vlc
  • gsoc/gsoc2020/vatsin/vlc
  • gsoc/gsoc2020/sagid/vlc
  • yaron/vlc
  • Phoenix/vlc
  • Garf/vlc
  • ePiratWorkarounds/vlc
  • tguillem/vlc
  • jnqnfe/vlc
  • mdc/vlc
  • Vedaa/vlc
  • rasa/vlc
  • quink/vlc
  • yealo/vlc
  • aleksey_ak/vlc
  • ePirat/vlc
  • ilya.yanok/vlc
  • asenat/vlc
  • m/vlc
  • bunjee/vlc
  • BLumia/vlc
  • sagudev/vlc
  • hamedmonji30/vlc
  • nullgemm/vlc
  • DivyamAhuja/vlc
  • thesamesam/vlc
  • dag7/vlc
  • snehil101/vlc
  • haasn/vlc
  • jbk/vlc
  • ValZapod/vlc
  • mfkl/vlc
  • WangChuan/vlc
  • core1024/vlc
  • GhostVaibhav/vlc
  • dfuhrmann/vlc
  • davide.prade/vlc
  • tmatth/vlc
  • Courmisch/vlc
  • zouya/vlc
  • hpi/vlc
  • EwoutH/vlc
  • aleung27/vlc
  • hengwu0/vlc
  • saladin/vlc
  • ashuio/vlc
  • richselwood/vlc
  • verma16Ayush/vlc
  • chemicalflash/vlc
  • PoignardAzur/vlc
  • huangjieNT/vlc
  • Blake-Haydon/vlc
  • AnuthaDev/vlc
  • gsoc/gsoc2021/mpd/vlc
  • nicolas_lequec/vlc
  • sambassaly/vlc
  • thresh/vlc
  • bonniegong/vlc
  • myaashish/vlc
  • stavros.vagionitis/vlc
  • ileoo/vlc
  • louis-santucci/vlc
  • cchristiansen/vlc
  • sabyasachi07/vlc
  • AbduAmeen/vlc
  • ashishb0410/vlc
  • urbanhusky/vlc
  • davidepietrasanta/vlc
  • riksleutelstad/vlc
  • jeremyVignelles/vlc
  • komh/vlc
  • iamjithinjohn/vlc
  • JohannesKauffmann/vlc2
  • kunglao/vlc
  • natzberg/vlc
  • jill/vlc
  • cwendling/vlc
  • adufou/vlc
  • ErwanAirone/vlc
  • HasinduDilshan10/vlc
  • vagrantc/vlc
  • rafiv/macos-bigsur-icon
  • Aymeriic/vlc
  • saranshg20/vlc
  • metzlove24/vlc
  • linkfanel/vlc
  • Ds886/vlc
  • metehan-arslan/vlc
  • Skantes/vlc
  • kgsandundananjaya96/vlc
  • mitchcapper/vlc
  • advaitgupta/vlc
  • StefanBruens/vlc
  • ratajs/vlc
  • T.M.F.B.3761/vlc
  • m222059/vlc
  • casemerrick/vlc
  • joshuaword2alt/vlc
  • sjwaddy/vlc
  • dima/vlc
  • Ybalrid/vlc
  • umxprime/vlc
  • eschmidt/vlc
  • vannieuwenhuysenmichelle/vlc
  • badcf00d/vlc
  • wesinator/vlc
  • louis/vlc
  • xqq/vlc
  • EmperorYP7/vlc
  • NicoLiam/vlc
  • loveleen/vlc
  • rofferom/vlc
  • rbultje/vlc
  • TheUnamed/vlc
  • pratiksharma341/vlc
  • Saurab17/vlc
  • purist.coder/vlc
  • Shuicheng/vlc
  • mdrrubel292/vlc
  • silverbleu00/vlc
  • metif12/vlc
  • asher-m/vlc
  • jeffk/vlc
  • Brandonbr1/vlc
  • beautyyuyanli/vlc
  • rego21/vlc
  • muyangren907/vlc
  • collectionbylawrencejason/vlc
  • evelez/vlc
  • GSMgeeth/vlc
  • Oneric/vlc
  • TJ5/vlc
  • XuanTung95/vlc
  • darrenjenny21/vlc
  • Trenly/vlc
  • RockyTDR/vlc
  • mjakubowski/vlc
  • caprica/vlc
  • ForteFrankie/vlc
  • seannamiller19/vlc
  • junlon2006/vlc
  • kiwiren6666/vlc
  • iuseiphonexs/vlc
  • fenngtun/vlc
  • Rajdutt999/vlc
  • typx/vlc
  • leon.vitanos/vlc
  • robertogarci0938/vlc
  • gsoc/gsoc2022/luc65r/vlc-mpd
  • skeller/vlc
  • MCJack123/vlc
  • luc65r/vlc-mpd
  • popov895/vlc
  • claucambra/vlc
  • brad/vlc
  • matthewmurua88/vlc
  • Tomas8874/vlc
  • philenotfound/vlc
  • makita-do3/vlc
  • LZXCorp/vlc
  • mar0x/vlc
  • senojetkennedy0102/vlc
  • shaneb243/vlc
  • ahmadbader/vlc
  • rajduttcse26/vlc-audio-filters
  • Juniorzito8415/vlc
  • achernyakov/vlc
  • lucasjetgroup/vlc
  • pupdoggy666/vlc
  • gmde9363/vlc
  • alexnwayne/vlc
  • bahareebrahimi781/vlc
  • hamad633666/vlc
  • umghof3112/vlc
  • joe0199771874/vlc
  • Octocats66666666/vlc
  • jjm_223/vlc
  • btech10110.19/vlc
  • sunnykfc028/vlc-audio-filters
  • loic/vlc
  • nguyenminhducmx1/vlc
  • JanekKrueger/vlc
  • bstubbington2/vlc
  • rcombs/vlc
  • Ordissimo/vlc
  • king7532/vlc
  • noobsauce101/vlc
  • schong0525/vlc
  • myQwil/vlc
  • apisbg91/vlc
  • geeboy0101017/vlc
  • kim.faughey/vlc
  • nurupo/vlc
  • yyusea/vlc
  • 0711235879.khco/vlc
  • ialo/vlc
  • iloveyeye2/vlc
  • gdtdftdqtd/vlc
  • leandroconsiglio/vlc
  • AndyHTML2012/vlc
  • ncz/vlc
  • lucenticus/vlc
  • knr1931/vlc
  • kjoonlee/vlc
  • chandrakant100/vlc-qt
  • johge42/vlc
  • polter/vlc
  • hexchain/vlc
  • Tushwrld/vlc
  • mztea928/vlc
  • jbelloncastro/vlc
  • alvinhochun/vlc
  • ghostpiratecrow/vlc
  • ujjwaltwitx/vlc
  • alexsonarin06/vlc
  • adrianbon76/vlc
  • altsod/vlc
  • damien.lucas44/vlc
  • dmytrivtaisa/vlc
  • utk202/vlc
  • aaxhrj/vlc
  • thomas.hermes/vlc
  • structurenewworldorder/vlc
  • slomo/vlc
  • wantlamy/vlc
  • musc.o3cminc/vlc
  • thebarshablog/vlc
  • kerrick/vlc
  • kratos142518/vlc
  • leogps/vlc
  • vacantron/vlc
  • luna_koly/vlc
  • Ratio2/vlc
  • anuoshemohammad/vlc
  • apsun/vlc
  • aaa1115910/vlc
  • alimotmoyo/vlc
  • Ambossmann/vlc
  • Sam-LearnsToCode/vlc
  • Chilledheart/vlc
  • Labnann/vlc
  • ktcoooot1/vlc
  • mohit-marathe/vlc
  • johnddx/vlc
  • manstabuk/vlc
  • Omar-ahmed314/vlc
  • vineethkm/vlc
  • 9Enemi86/vlc
  • radoslav.m.panteleev/vlc
  • ashishami2002/vlc
  • Corbax/vlc
  • firnasahmed/vlc
  • pelayarmalam4/vlc
  • c0ff330k/vlc
  • shikhindahikar/vlc
  • l342723951/vlc
  • christianschwandner/vlc
  • douniwan5788/vlc
  • 7damian7/vlc
  • ferdnyc/vlc
  • f.ales1/vlc
  • pandagby/vlc
  • BaaBaa/vlc
  • jewe37/vlc
  • w00drow/vlc
  • russelltg/vlc
  • ironicallygod/vlc
  • soumyaDghosh/vlc
  • linzihao1999/vlc
  • deyayush6/vlc
  • mibi88/vlc
  • newabdallah10/vlc
  • jhorbincolombia/vlc
  • rimvihaqueshupto/vlc
  • andrewkhon98/vlc
  • fab78/vlc
  • lapaz17/vlc
  • amanna13/vlc
  • mdakram28/vlc
  • 07jw1980/vlc
  • sohamgupta/vlc
  • Eson-Jia1/vlc
  • Sumou/vlc
  • vikram-kangotra/vlc
  • chalice191/vlc
  • olivercalder/vlc
  • aaasg4001/vlc
  • zipdox/vlc
  • kwizart/vlc
  • Dragon-S/vlc
  • jdemeule/vlc
  • gabriel_lt/vlc
  • locutusofborg/vlc
  • sammirata/vlc-librist
  • another/vlc
  • Benjamin_Loison/vlc
  • ahmedmoselhi/vlc
  • petergaal/vlc
  • huynhsontung/vlc
  • dariusmihut/vlc
  • tvermaashutosh/vlc
  • buti/vlc
  • Niram7777/vlc
  • rohan-here/vlc
  • balaji-sivasakthi/vlc
  • rlindner81/vlc
  • Kakadus/vlc
  • djain/vlc
  • ABBurmeister/vlc
  • craighuggins/vlc
  • orbea/vlc
  • maxos/vlc
  • aakarshmj/vlc
  • kblaschke/vlc
  • ankitm/vlc
  • advait-0/vlc
  • mohak2003/vlc
  • yselkowitz/vlc
  • AZM999/vlc-azm
  • andrey.turkin/vlc
  • Disha-Baghel/vlc
  • nowrep/vlc
  • Apeng/vlc
  • Choucroute_melba/vlc
  • autra/vlc
  • eclipseo/vlc
  • fhuber/vlc
  • olafhering/vlc
  • sdasda7777/vlc
  • 1div0/vlc
  • skosnits/vlc-extended-playlist-support
  • dnicolson/vlc
  • Timshel/vlc
  • octopols/vlc
  • MangalK/vlc
  • nima64/vlc
  • misawai/vlc
  • Alexander-Wilms/vlc
  • Maxime2/vlc-fork-for-visualizer
  • ww/vlc
  • jeske/vlc
  • sgross-emlix/vlc
  • morenonatural/vlc
  • freakingLovesVLC/vlc
  • borisgolovnev/vlc
  • mpromonet/vlc
  • diogo.simao-marques/vlc
  • masstock/vlc
  • pratikpatel8982/vlc
  • hugok79/vlc
  • longervision/vlc
  • abhiudaysurya/vlc
  • rishabhgarg/vlc
  • tumic/vlc
  • cart/vlc
  • shubham442/vlc
  • Aditya692005/vlc
  • sammirata/vlc4
  • syrykh/vlc
  • Vvorcun/macos-new-icon
  • AyaanshC/vlc
  • nasso/vlc
  • Quark/vlc
  • sebastinas/vlc
  • rhstone/vlc
  • talregev/vlc
  • Managor/vlc
403 results
Show changes
Commits on Source (7)
......@@ -3,7 +3,6 @@ access_LTLIBRARIES += librtp_plugin.la
librtp_plugin_la_SOURCES = \
access/rtp/input.c \
access/rtp/session.c \
access/rtp/xiph.c \
access/rtp/sdp.c access/rtp/sdp.h \
access/rtp/rtpfmt.c \
access/rtp/datagram.c access/rtp/vlc_dtls.h \
......
......@@ -85,10 +85,10 @@ 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(void *data,
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 = data;
demux_t *demux = pt->owner.data;
struct vlc_rtp_es_id *ei = malloc(sizeof (*ei));
if (unlikely(ei == NULL))
......@@ -128,9 +128,10 @@ 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(void *data, const char *name)
static struct vlc_rtp_es *vlc_rtp_mux_request(struct vlc_rtp_pt *pt,
const char *name)
{
demux_t *demux = data;
demux_t *demux = pt->owner.data;
struct vlc_rtp_es_mux *em = malloc(sizeof (*em));
if (unlikely(em == NULL))
......@@ -146,6 +147,44 @@ struct vlc_rtp_es *vlc_rtp_mux_request(void *data, 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,
};
int vlc_rtp_pt_instantiate(vlc_object_t *obj, struct vlc_rtp_pt *restrict pt,
const struct vlc_sdp_pt *restrict desc)
{
char modname[32];
int ret = VLC_ENOTSUP;
if (strchr(desc->name, ',') != NULL)
/* Comma has special meaning in vlc_module_match(), forbid it */
return VLC_EINVAL;
if ((size_t)snprintf(modname, sizeof (modname), "%s/%s",
desc->media->type, desc->name) >= sizeof (modname))
return VLC_ENOTSUP; /* Outlandish media type with long name */
module_t **mods;
ssize_t n = vlc_module_match("rtp parser", modname, true, &mods, NULL);
for (ssize_t i = 0; i < n; i++) {
vlc_rtp_parser_cb cb = vlc_module_map(vlc_object_logger(obj), mods[i]);
if (cb == NULL)
continue;
ret = cb(obj, pt, desc);
if (ret == VLC_SUCCESS) {
msg_Dbg(obj, "- module \"%s\"", module_get_name(mods[i], true));
assert(pt->ops != NULL);
ret = 0;
break;
}
}
free(mods);
return ret;
}
/**
* Extracts port number from "[host]:port" or "host:port" strings,
* and remove brackets from the host name.
......@@ -391,7 +430,8 @@ static int OpenSDP(vlc_object_t *obj)
goto error;
/* Parse payload types */
int err = vlc_rtp_add_media_types(obj, sys->session, media);
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");
goto error;
......@@ -541,7 +581,8 @@ static int OpenURL(vlc_object_t *obj)
if (p_sys->session == NULL)
goto error;
rtp_autodetect(VLC_OBJECT(demux), p_sys->session);
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
char *key = var_CreateGetNonEmptyString (demux, "srtp-key");
......
......@@ -83,7 +83,7 @@ struct vlc_rtp_pt_operations {
* \param pt RTP payload format being taken into use
* \return a data pointer for decode() and destroy() callbacks
*/
void *(*init)(struct vlc_rtp_pt *pt, demux_t *);
void *(*init)(struct vlc_rtp_pt *pt);
/**
* Stops using a payload format.
......@@ -105,6 +105,20 @@ 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;
};
/**
* RTP payload format.
*
......@@ -115,6 +129,7 @@ struct vlc_rtp_pt
{
const struct vlc_rtp_pt_operations *ops; /**< Payload format callbacks */
void *opaque; /**< Private data pointer */
struct vlc_rtp_pt_owner owner;
uint32_t frequency; /**< RTP clock rate (Hz) */
uint8_t number; /**< RTP payload type number within the session (0-127) */
uint8_t channel_count; /**< Channel count (zero if unspecified) */
......@@ -134,13 +149,12 @@ void vlc_rtp_pt_release(struct vlc_rtp_pt *pt);
* type for use by an unique RTP source.
*
* @param pt RTP payload type to instantiate
* @param demux demux object for output
* @return private data for the instance
*/
static inline void *vlc_rtp_pt_begin(struct vlc_rtp_pt *pt, demux_t *demux)
static inline void *vlc_rtp_pt_begin(struct vlc_rtp_pt *pt)
{
assert(pt->ops->init != NULL);
return pt->ops->init(pt, demux);
return pt->ops->init(pt);
}
/**
......@@ -170,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.
......@@ -218,19 +244,38 @@ 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(void *, const es_format_t *fmt);
struct vlc_rtp_es *vlc_rtp_mux_request(void *, const char *name);
/**
* Callback prototype for RTP parser module.
*
* This is the callback prototype for any RTP payload format parser module.
*
* \param obj VLC object for logging and configuration
* \param pt RTP payload type
* \param desc[in] SDP payload format description and type mapping
*
* \return VLC_SUCCESS on success, an error code on failure.
*/
typedef int (*vlc_rtp_parser_cb)(vlc_object_t *obj, struct vlc_rtp_pt *pt,
const struct vlc_sdp_pt *desc);
#define set_rtp_parser_callback(cb) \
{ \
vlc_rtp_parser_cb cb__ = (cb); (void) cb__; \
set_callback(cb); \
set_capability("rtp parser", 0); \
}
void rtp_autodetect(vlc_object_t *, rtp_session_t *);
int vlc_rtp_pt_instantiate(vlc_object_t *obj, struct vlc_rtp_pt *restrict pt,
const struct vlc_sdp_pt *restrict desc);
void rtp_autodetect(vlc_object_t *, rtp_session_t *,
const struct vlc_rtp_pt_owner *restrict);
static inline uint8_t rtp_ptype (const block_t *block)
{
return block->p_buffer[1] & 0x7F;
}
extern const struct vlc_rtp_pt_operations rtp_video_theora;
/** @} */
/**
......@@ -243,7 +288,8 @@ void rtp_queue (demux_t *, rtp_session_t *, block_t *);
bool rtp_dequeue (demux_t *, const rtp_session_t *, vlc_tick_t *);
int rtp_add_type(rtp_session_t *ses, rtp_pt_t *pt);
int vlc_rtp_add_media_types(vlc_object_t *obj, rtp_session_t *ses,
const struct vlc_sdp_media *media);
const struct vlc_sdp_media *media,
const struct vlc_rtp_pt_owner *restrict owner);
void *rtp_dgram_thread (void *data);
......
......@@ -28,7 +28,6 @@
#include <errno.h>
#include <vlc_common.h>
#include <vlc_demux.h>
#include <vlc_aout.h> /* aout_FormatPrepare() */
#include "rtp.h"
......@@ -59,14 +58,14 @@ static void codec_decode(struct vlc_rtp_pt *pt, void *data, block_t *block)
/* PT=0
* PCMU: G.711 µ-law (RFC3551)
*/
static void *pcmu_init(struct vlc_rtp_pt *pt, demux_t *demux)
static void *pcmu_init(struct vlc_rtp_pt *pt)
{
es_format_t fmt;
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(demux, &fmt);
return vlc_rtp_pt_request_es(pt, &fmt);
}
static const struct vlc_rtp_pt_operations rtp_audio_pcmu = {
......@@ -76,15 +75,14 @@ static const struct vlc_rtp_pt_operations rtp_audio_pcmu = {
/* PT=3
* GSM
*/
static void *gsm_init(struct vlc_rtp_pt *pt, demux_t *demux)
static void *gsm_init(struct vlc_rtp_pt *pt)
{
es_format_t fmt;
es_format_Init (&fmt, AUDIO_ES, VLC_CODEC_GSM);
fmt.audio.i_rate = 8000;
fmt.audio.i_physical_channels = AOUT_CHAN_CENTER;
(void) pt;
return vlc_rtp_es_request(demux, &fmt);
return vlc_rtp_pt_request_es(pt, &fmt);
}
static const struct vlc_rtp_pt_operations rtp_audio_gsm = {
......@@ -94,14 +92,14 @@ static const struct vlc_rtp_pt_operations rtp_audio_gsm = {
/* PT=8
* PCMA: G.711 A-law (RFC3551)
*/
static void *pcma_init(struct vlc_rtp_pt *pt, demux_t *demux)
static void *pcma_init(struct vlc_rtp_pt *pt)
{
es_format_t fmt;
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(demux, &fmt);
return vlc_rtp_pt_request_es(pt, &fmt);
}
static const struct vlc_rtp_pt_operations rtp_audio_pcma = {
......@@ -111,14 +109,14 @@ static const struct vlc_rtp_pt_operations rtp_audio_pcma = {
/* PT=10,11
* L16: 16-bits (network byte order) PCM
*/
static void *l16_init(struct vlc_rtp_pt *pt, demux_t *demux)
static void *l16_init(struct vlc_rtp_pt *pt)
{
es_format_t fmt;
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(demux, &fmt);
return vlc_rtp_pt_request_es(pt, &fmt);
}
static const struct vlc_rtp_pt_operations rtp_audio_l16 = {
......@@ -128,15 +126,14 @@ static const struct vlc_rtp_pt_operations rtp_audio_l16 = {
/* PT=12
* QCELP
*/
static void *qcelp_init(struct vlc_rtp_pt *pt, demux_t *demux)
static void *qcelp_init(struct vlc_rtp_pt *pt)
{
es_format_t fmt;
es_format_Init (&fmt, AUDIO_ES, VLC_CODEC_QCELP);
fmt.audio.i_rate = 8000;
fmt.audio.i_physical_channels = AOUT_CHAN_CENTER;
(void) pt;
return vlc_rtp_es_request(demux, &fmt);
return vlc_rtp_pt_request_es(pt, &fmt);
}
static const struct vlc_rtp_pt_operations rtp_audio_qcelp = {
......@@ -146,14 +143,13 @@ static const struct vlc_rtp_pt_operations rtp_audio_qcelp = {
/* PT=14
* MPA: MPEG Audio (RFC2250, §3.4)
*/
static void *mpa_init(struct vlc_rtp_pt *pt, demux_t *demux)
static void *mpa_init(struct vlc_rtp_pt *pt)
{
es_format_t fmt;
es_format_Init (&fmt, AUDIO_ES, VLC_CODEC_MPGA);
fmt.b_packetized = false;
(void) pt;
return vlc_rtp_es_request(demux, &fmt);
return vlc_rtp_pt_request_es(pt, &fmt);
}
static void mpa_decode(struct vlc_rtp_pt *pt, void *data, block_t *block)
......@@ -178,14 +174,13 @@ static const struct vlc_rtp_pt_operations rtp_audio_mpa = {
/* PT=32
* MPV: MPEG Video (RFC2250, §3.5)
*/
static void *mpv_init(struct vlc_rtp_pt *pt, demux_t *demux)
static void *mpv_init(struct vlc_rtp_pt *pt)
{
es_format_t fmt;
es_format_Init (&fmt, VIDEO_ES, VLC_CODEC_MPGV);
fmt.b_packetized = false;
(void) pt;
return vlc_rtp_es_request(demux, &fmt);
return vlc_rtp_pt_request_es(pt, &fmt);
}
static void mpv_decode(struct vlc_rtp_pt *pt, void *data, block_t *block)
......@@ -217,10 +212,9 @@ static const struct vlc_rtp_pt_operations rtp_video_mpv = {
/* PT=33
* MP2: MPEG TS (RFC2250, §2)
*/
static void *ts_init(struct vlc_rtp_pt *pt, demux_t *demux)
static void *ts_init(struct vlc_rtp_pt *pt)
{
(void) pt;
return vlc_rtp_mux_request(demux, "ts");
return vlc_rtp_pt_request_mux(pt, "ts");
}
static const struct vlc_rtp_pt_operations rtp_av_ts = {
......@@ -229,17 +223,18 @@ static const struct vlc_rtp_pt_operations rtp_av_ts = {
/* Not using SDP, we need to guess the payload format used */
/* see http://www.iana.org/assignments/rtp-parameters */
void rtp_autodetect(vlc_object_t *obj, rtp_session_t *session)
void rtp_autodetect(vlc_object_t *obj, rtp_session_t *session,
const struct vlc_rtp_pt_owner *restrict owner)
{
char type[] = "audio", proto[] = "RTP/AVP";
char format[] = "0 3 8 10 11 12 14 33";
struct vlc_sdp_media media = {
.type = type, .port_count = 1, .proto = proto, .format = format };
vlc_rtp_add_media_types(obj, session, &media);
vlc_rtp_add_media_types(obj, session, &media, owner);
strcpy(type, "video");
strcpy(format, "32");
vlc_rtp_add_media_types(obj, session, &media);
vlc_rtp_add_media_types(obj, session, &media, owner);
}
/*
......@@ -247,7 +242,8 @@ void rtp_autodetect(vlc_object_t *obj, rtp_session_t *session)
*/
static struct vlc_rtp_pt *vlc_rtp_pt_create(vlc_object_t *obj,
const struct vlc_sdp_pt *desc)
const struct vlc_sdp_pt *desc,
const struct vlc_rtp_pt_owner *restrict owner)
{
if (desc->clock_rate == 0) {
/* Dynamic payload type not defined in the SDP */
......@@ -259,11 +255,15 @@ static struct vlc_rtp_pt *vlc_rtp_pt_create(vlc_object_t *obj,
if (unlikely(pt == NULL))
return NULL;
pt->owner = *owner;
pt->frequency = desc->clock_rate;
pt->channel_count = desc->channel_count;
if (vlc_rtp_pt_instantiate(obj, pt, desc) == 0)
return pt;
pt->ops = NULL;
/* TODO: introduce module (capabilities) for payload types */
if (strcmp(desc->media->type, "audio") == 0) {
if (strcmp(desc->name, "PCMU") == 0)
pt->ops = &rtp_audio_pcmu;
......@@ -273,7 +273,7 @@ static struct vlc_rtp_pt *vlc_rtp_pt_create(vlc_object_t *obj,
pt->ops = &rtp_audio_pcma;
else if (strcmp(desc->name, "L16") == 0)
pt->ops = &rtp_audio_l16;
else if (strcmp(desc->name, "QCLEP") == 0)
else if (strcmp(desc->name, "QCELP") == 0)
pt->ops = &rtp_audio_qcelp;
else if (strcmp(desc->name, "MPA") == 0)
pt->ops = &rtp_audio_mpa;
......@@ -372,7 +372,8 @@ static void vlc_rtp_set_default_types(struct vlc_sdp_pt *restrict types,
* Registers all payload types declared in an SDP media.
*/
int vlc_rtp_add_media_types(vlc_object_t *obj, rtp_session_t *session,
const struct vlc_sdp_media *media)
const struct vlc_sdp_media *media,
const struct vlc_rtp_pt_owner *restrict owner)
{
struct vlc_sdp_pt types[128] = { };
......@@ -392,6 +393,7 @@ int vlc_rtp_add_media_types(vlc_object_t *obj, rtp_session_t *session,
/* fall through */
case 4:
if (number < ARRAY_SIZE(types)) {
types[number].media = media;
strcpy(types[number].name, name);
types[number].clock_rate = frequency;
types[number].channel_count = channels;
......@@ -439,7 +441,7 @@ int vlc_rtp_add_media_types(vlc_object_t *obj, rtp_session_t *session,
if (type->parameters != NULL)
msg_Dbg(obj, " - parameters: %s", type->parameters);
struct vlc_rtp_pt *pt = vlc_rtp_pt_create(obj, type);
struct vlc_rtp_pt *pt = vlc_rtp_pt_create(obj, type, owner);
if (pt != NULL) {
pt->number = number;
if (rtp_add_type(session, pt))
......
......@@ -472,7 +472,7 @@ rtp_decode (demux_t *demux, const rtp_session_t *session, rtp_source_t *src)
vlc_rtp_pt_end(src->pt.instance, src->pt.opaque);
src->pt.instance = pt;
src->pt.opaque = vlc_rtp_pt_begin(pt, demux);
src->pt.opaque = vlc_rtp_pt_begin(pt);
}
/* Computes the PTS from the RTP timestamp and payload RTP frequency.
......
......@@ -71,7 +71,7 @@ static void *vorbis_init (demux_t *demux)
/* PT=dynamic
* vorbis: Xiph Theora video
*/
static void *theora_init(struct vlc_rtp_pt *pt, demux_t *demux)
static void *theora_init(struct vlc_rtp_pt *pt)
{
pt->opaque = demux;
return xiph_init (false);
......@@ -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(demux, &fmt);
self->id = vlc_rtp_pt_request_es(pt, &fmt);
break;
}
}
......