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 (4)
......@@ -74,13 +74,6 @@ static void rtp_process (demux_t *demux, block_t *block)
}
#endif
/* TODO: use SDP and get rid of this hack */
if (unlikely(sys->autodetect))
{ /* Autodetect payload type, _before_ rtp_queue() */
rtp_autodetect(VLC_OBJECT(demux), sys->session, block);
sys->autodetect = false;
}
rtp_queue (demux, sys->session, block);
return;
drop:
......
......@@ -381,7 +381,6 @@ static int OpenSDP(vlc_object_t *obj)
sys->timeout = vlc_tick_from_sec(var_InheritInteger(obj, "rtp-timeout"));
sys->max_dropout = var_InheritInteger(obj, "rtp-max-dropout");
sys->max_misorder = -var_InheritInteger(obj, "rtp-max-misorder");
sys->autodetect = false;
demux->pf_demux = NULL;
demux->pf_control = Control;
......@@ -533,7 +532,6 @@ static int OpenURL(vlc_object_t *obj)
p_sys->timeout = vlc_tick_from_sec( var_CreateGetInteger (obj, "rtp-timeout") );
p_sys->max_dropout = var_CreateGetInteger (obj, "rtp-max-dropout");
p_sys->max_misorder = -var_CreateGetInteger (obj, "rtp-max-misorder");
p_sys->autodetect = true;
demux->pf_demux = NULL;
demux->pf_control = Control;
......@@ -543,6 +541,8 @@ static int OpenURL(vlc_object_t *obj)
if (p_sys->session == NULL)
goto error;
rtp_autodetect(VLC_OBJECT(demux), p_sys->session);
#ifdef HAVE_SRTP
char *key = var_CreateGetNonEmptyString (demux, "srtp-key");
if (key)
......
......@@ -222,7 +222,7 @@ 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);
void rtp_autodetect(vlc_object_t *, rtp_session_t *, const block_t *);
void rtp_autodetect(vlc_object_t *, rtp_session_t *);
static inline uint8_t rtp_ptype (const block_t *block)
{
......@@ -266,6 +266,5 @@ typedef struct
uint16_t max_dropout; /**< Max packet forward misordering */
uint16_t max_misorder; /**< Max packet backward misordering */
uint8_t max_src; /**< Max simultaneous RTP sources */
bool autodetect; /**< Payload type autodetection pending */
} demux_sys_t;
......@@ -29,7 +29,6 @@
#include <vlc_common.h>
#include <vlc_demux.h>
#include <vlc_dialog.h>
#include <vlc_aout.h> /* aout_FormatPrepare() */
#include "rtp.h"
......@@ -230,28 +229,17 @@ 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,
const block_t *block)
void rtp_autodetect(vlc_object_t *obj, rtp_session_t *session)
{
uint8_t ptype = rtp_ptype (block);
char type[6], proto[] = "RTP/AVP", numstr[4];
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 = numstr
};
.type = type, .port_count = 1, .proto = proto, .format = format };
/* We only support static audio subtypes except MPV (PT=32).
* MP2T (PT=33) can be treated as either audio or video. */
memcpy(type, (ptype == 32) ? "video" : "audio", 6);
snprintf(numstr, sizeof (numstr), "%hhu", ptype);
if (vlc_rtp_add_media_types(obj, session, &media)) {
msg_Err(obj, "unspecified payload format (type %"PRIu8")", ptype);
msg_Info(obj, "A valid SDP is needed to parse this RTP stream.");
vlc_dialog_display_error(obj, N_("SDP required"),
N_("A description in SDP format is required to receive the RTP "
"stream. Note that rtp:// URIs cannot work with dynamic "
"RTP payload format (%"PRIu8")."), ptype);
}
vlc_rtp_add_media_types(obj, session, &media);
strcpy(type, "video");
strcpy(format, "32");
vlc_rtp_add_media_types(obj, session, &media);
}
/*
......
......@@ -46,8 +46,7 @@ struct rtp_session_t
static rtp_source_t *
rtp_source_create (demux_t *, const rtp_session_t *, uint32_t, uint16_t);
static void
rtp_source_destroy (demux_t *, const rtp_session_t *, rtp_source_t *);
static void rtp_source_destroy(demux_t *, rtp_source_t *);
static void rtp_decode (demux_t *, const rtp_session_t *, rtp_source_t *);
......@@ -77,7 +76,7 @@ rtp_session_create (demux_t *demux)
void rtp_session_destroy (demux_t *demux, rtp_session_t *session)
{
for (unsigned i = 0; i < session->srcc; i++)
rtp_source_destroy (demux, session, session->srcv[i]);
rtp_source_destroy(demux, session->srcv[i]);
for (uint_fast8_t i = 0; i < session->ptc; i++)
vlc_rtp_pt_release(session->ptv[i]);
......@@ -123,7 +122,10 @@ struct rtp_source_t
uint16_t last_seq; /* sequence of the next dequeued packet */
block_t *blocks; /* re-ordered blocks queue */
void *opaque[]; /* Per-source private payload data */
struct {
struct vlc_rtp_pt *instance; /* Per-source current payload format */
void *opaque; /* Per-source payload format private data */
} pt;
};
/**
......@@ -146,11 +148,7 @@ rtp_source_create (demux_t *demux, const rtp_session_t *session,
source->max_seq = source->bad_seq = init_seq;
source->last_seq = init_seq - 1;
source->blocks = NULL;
/* Initializes all payload */
for (unsigned i = 0; i < session->ptc; i++)
source->opaque[i] = vlc_rtp_pt_begin(session->ptv[i], demux);
source->pt.instance = NULL;
msg_Dbg (demux, "added RTP source (%08x)", ssrc);
return source;
}
......@@ -159,15 +157,11 @@ rtp_source_create (demux_t *demux, const rtp_session_t *session,
/**
* Destroys an RTP source and its associated streams.
*/
static void
rtp_source_destroy (demux_t *demux, const rtp_session_t *session,
rtp_source_t *source)
static void rtp_source_destroy(demux_t *demux, rtp_source_t *source)
{
msg_Dbg (demux, "removing RTP source (%08x)", source->ssrc);
for (unsigned i = 0; i < session->ptc; i++)
vlc_rtp_pt_end(session->ptv[i], source->opaque[i]);
if (source->pt.instance != NULL)
vlc_rtp_pt_end(source->pt.instance, source->pt.opaque);
block_ChainRelease (source->blocks);
free (source);
}
......@@ -184,9 +178,8 @@ static inline uint32_t rtp_timestamp (const block_t *block)
return GetDWBE (block->p_buffer + 4);
}
static struct vlc_rtp_pt *
rtp_find_ptype (const rtp_session_t *session, rtp_source_t *source,
const block_t *block, void **pt_data)
static struct vlc_rtp_pt *rtp_find_ptype(const rtp_session_t *session,
const block_t *block)
{
uint8_t ptype = rtp_ptype (block);
......@@ -195,11 +188,7 @@ rtp_find_ptype (const rtp_session_t *session, rtp_source_t *source,
struct vlc_rtp_pt *pt = session->ptv[i];
if (pt->number == ptype)
{
if (pt_data != NULL)
*pt_data = source->opaque[i];
return pt;
}
}
return NULL;
}
......@@ -250,7 +239,7 @@ rtp_queue (demux_t *demux, rtp_session_t *session, block_t *block)
/* RTP source garbage collection */
if ((tmp->last_rx + p_sys->timeout) < now)
{
rtp_source_destroy (demux, session, tmp);
rtp_source_destroy(demux, tmp);
if (--session->srcc > 0)
session->srcv[i] = session->srcv[session->srcc - 1];
}
......@@ -280,7 +269,7 @@ rtp_queue (demux_t *demux, rtp_session_t *session, block_t *block)
}
else
{
const rtp_pt_t *pt = rtp_find_ptype (session, src, block, NULL);
const rtp_pt_t *pt = rtp_find_ptype(session, block);
if (pt != NULL)
{
......@@ -411,7 +400,7 @@ bool rtp_dequeue (demux_t *demux, const rtp_session_t *session,
* match for random gaussian jitter).
*/
vlc_tick_t deadline;
const rtp_pt_t *pt = rtp_find_ptype (session, src, block, NULL);
const rtp_pt_t *pt = rtp_find_ptype(session, block);
if (pt)
deadline = vlc_tick_from_samples(3 * src->jitter, pt->frequency);
else
......@@ -469,8 +458,7 @@ rtp_decode (demux_t *demux, const rtp_session_t *session, rtp_source_t *src)
src->last_seq = rtp_seq (block);
/* Match the payload type */
void *pt_data;
struct vlc_rtp_pt *pt = rtp_find_ptype (session, src, block, &pt_data);
struct vlc_rtp_pt *pt = rtp_find_ptype(session, block);
if (pt == NULL)
{
msg_Dbg (demux, "unknown payload (%"PRIu8")",
......@@ -478,6 +466,15 @@ rtp_decode (demux_t *demux, const rtp_session_t *session, rtp_source_t *src)
goto drop;
}
if (src->pt.instance != pt) {
/* Change the active payload type for this source. */
if (src->pt.instance != NULL)
vlc_rtp_pt_end(src->pt.instance, src->pt.opaque);
src->pt.instance = pt;
src->pt.opaque = vlc_rtp_pt_begin(pt, demux);
}
/* Computes the PTS from the RTP timestamp and payload RTP frequency.
* DTS is unknown. Also, while the clock frequency depends on the payload
* format, a single source MUST only use payloads of a chosen frequency.
......@@ -513,7 +510,7 @@ rtp_decode (demux_t *demux, const rtp_session_t *session, rtp_source_t *src)
block->p_buffer += skip;
block->i_buffer -= skip;
vlc_rtp_pt_decode(pt, pt_data, block);
vlc_rtp_pt_decode(pt, src->pt.opaque, block);
return;
drop:
......