[vlc-commits] [Git][videolan/vlc][3.0.x] 8 commits: access_output: rist: check block_Duplicate
Steve Lhomme (@robUx4)
gitlab at videolan.org
Thu Apr 2 10:18:05 UTC 2026
Steve Lhomme pushed to branch 3.0.x at VideoLAN / VLC
Commits:
22aeb79c by François Cartegnie at 2026-04-02T09:15:03+00:00
access_output: rist: check block_Duplicate
- - - - -
a5a66a39 by François Cartegnie at 2026-04-02T09:15:03+00:00
access: rist: fix unwanted padding
there's no reason to consider the NULL terminator to calculate
padding as it is explicitely excluded from payload
- - - - -
e9c14c7a by François Cartegnie at 2026-04-02T09:15:03+00:00
access: rist: remove useless inits after free
- - - - -
e67d248a by François Cartegnie at 2026-04-02T09:15:03+00:00
access: rist: fix leaks on empty block dealloc
- - - - -
3a3a7189 by François Cartegnie at 2026-04-02T09:15:03+00:00
access: rist: use VLC_TICK_FROM_MS
- - - - -
d85635e4 by François Cartegnie at 2026-04-02T09:15:03+00:00
access: rist: use vlc setters/getters
- - - - -
06f99055 by François Cartegnie at 2026-04-02T09:15:03+00:00
access: rist: fix weird empty comparison
- - - - -
1e98169d by François Cartegnie at 2026-04-02T09:15:03+00:00
access: rist: remove useless code
- - - - -
3 changed files:
- modules/access/rist.c
- modules/access/rist.h
- modules/access_output/rist.c
Changes:
=====================================
modules/access/rist.c
=====================================
@@ -115,7 +115,7 @@ static int Control(stream_t *p_access, int i_query, va_list args)
break;
case STREAM_GET_PTS_DELAY:
- *va_arg( args, int64_t * ) = RIST_TICK_FROM_MS(
+ *va_arg( args, int64_t * ) = VLC_TICK_FROM_MS(
var_InheritInteger(p_access, "network-caching") );
break;
@@ -226,7 +226,7 @@ static int is_index_in_range(struct rist_flow *flow, uint16_t idx)
static void send_rtcp_feedback(stream_t *p_access, struct rist_flow *flow)
{
stream_sys_t *p_sys = p_access->p_sys;
- int namelen = strlen(flow->cname) + 1;
+ size_t namelen = strlen(flow->cname);
/* we need to make sure it is a multiple of 4, pad if necessary */
if ((namelen - 2) & 0x3)
@@ -259,7 +259,6 @@ static void send_rtcp_feedback(stream_t *p_access, struct rist_flow *flow)
rist_WriteTo_i11e_Locked(p_sys->lock, flow->fd_nack, buf, rtcp_feedback_size,
(struct sockaddr *)&flow->peer_sockaddr, flow->peer_socklen);
free(buf);
- buf = NULL;
}
static void send_bbnack(stream_t *p_access, int fd_nack, block_t *pkt_nacks, uint16_t nack_count)
@@ -298,7 +297,6 @@ static void send_bbnack(stream_t *p_access, int fd_nack, block_t *pkt_nacks, uin
rist_WriteTo_i11e_Locked(p_sys->lock, fd_nack, buf, len,
(struct sockaddr *)&flow->peer_sockaddr, flow->peer_socklen);
free(buf);
- buf = NULL;
}
static void send_rbnack(stream_t *p_access, int fd_nack, block_t *pkt_nacks, uint16_t nack_count)
@@ -338,7 +336,6 @@ static void send_rbnack(stream_t *p_access, int fd_nack, block_t *pkt_nacks, uin
rist_WriteTo_i11e_Locked(p_sys->lock, fd_nack, buf, len,
(struct sockaddr *)&flow->peer_sockaddr, flow->peer_socklen);
free(buf);
- buf = NULL;
}
static void send_nacks(stream_t *p_access, struct rist_flow *flow)
@@ -555,7 +552,7 @@ static void rtcp_input(stream_t *p_access, struct rist_flow *flow, uint8_t *buf_
if (memcmp(new_sender_name, p_sys->sender_name, name_length) != 0)
{
peer_name_changed = true;
- if (strcmp(p_sys->sender_name, "") == 0)
+ if (!p_sys->sender_name[0])
msg_Info(p_access, "Peer Name: %s", new_sender_name);
else
msg_Info(p_access, "Peer Name change detected: old Name: %s, new " \
@@ -657,16 +654,12 @@ static bool rist_input(stream_t *p_access, struct rist_flow *flow, uint8_t *buf,
/* Always replace the existing one with the new one */
struct rtp_pkt *pkt;
pkt = &(flow->buffer[idx]);
- if (pkt->buffer && pkt->buffer->i_buffer > 0)
- {
+ if (pkt->buffer)
block_Release(pkt->buffer);
- pkt->buffer = NULL;
- }
pkt->buffer = block_Alloc(len);
if (!pkt->buffer)
return false;
- pkt->buffer->i_buffer = len;
memcpy(pkt->buffer->p_buffer, buf, len);
pkt->rtp_ts = pkt_ts;
p_sys->last_data_rx = mdate();
@@ -740,7 +733,6 @@ static block_t *rist_dequeue(stream_t *p_access, struct rist_flow *flow)
pktout = block_Alloc(newSize);
if (pktout)
{
- pktout->i_buffer = newSize;
memcpy(pktout->p_buffer, pkt->buffer->p_buffer + RIST_RTP_HEADER_SIZE, newSize);
/* free the buffer and increase the read index */
flow->ri = idx;
@@ -912,7 +904,6 @@ static block_t *BlockRIST(stream_t *p_access, bool *restrict eof)
}
free(buf);
- buf = NULL;
}
now = mdate();
@@ -920,7 +911,7 @@ static block_t *BlockRIST(stream_t *p_access, bool *restrict eof)
/* Process stats and print them out */
/* We need to measure some items every 70ms */
uint64_t interval = (now - flow->feedback_time);
- if ( interval > RIST_TICK_FROM_MS(RTCP_INTERVAL) )
+ if ( interval > VLC_TICK_FROM_MS(RTCP_INTERVAL) )
{
if (p_sys->i_poll_timeout_nonzero_count > 0)
{
@@ -939,7 +930,7 @@ static block_t *BlockRIST(stream_t *p_access, bool *restrict eof)
}
/* We print out the stats once per second */
interval = (now - p_sys->i_last_stat);
- if ( interval > RIST_TICK_FROM_MS(STATS_INTERVAL) )
+ if ( interval > VLC_TICK_FROM_MS(STATS_INTERVAL) )
{
if ( p_sys->i_lost_packets > 0)
msg_Err(p_access, "We have %d lost packets", p_sys->i_lost_packets);
@@ -967,17 +958,17 @@ static block_t *BlockRIST(stream_t *p_access, bool *restrict eof)
/* Send rtcp feedback every RTCP_INTERVAL */
interval = (now - flow->feedback_time);
- if ( interval > RIST_TICK_FROM_MS(RTCP_INTERVAL) )
+ if ( interval > VLC_TICK_FROM_MS(RTCP_INTERVAL) )
{
/* msg_Dbg(p_access, "Calling RTCP Feedback %lu<%d ms using timer", interval,
- RIST_TICK_FROM_MS(RTCP_INTERVAL)); */
+ VLC_TICK_FROM_MS(RTCP_INTERVAL)); */
send_rtcp_feedback(p_access, flow);
flow->feedback_time = now;
}
/* Send nacks every NACK_INTERVAL (only the ones that have matured, if any) */
interval = (now - p_sys->last_nack_tx);
- if ( interval > RIST_TICK_FROM_MS(NACK_INTERVAL) )
+ if ( interval > VLC_TICK_FROM_MS(NACK_INTERVAL) )
{
send_nacks(p_access, p_sys->flow);
p_sys->last_nack_tx = now;
@@ -985,8 +976,8 @@ static block_t *BlockRIST(stream_t *p_access, bool *restrict eof)
/* Safety check for when the input stream stalls */
if ( p_sys->last_data_rx > 0 && now > p_sys->last_data_rx &&
- (uint64_t)(now - p_sys->last_data_rx) > (uint64_t)RIST_TICK_FROM_MS(flow->latency) &&
- (uint64_t)(now - p_sys->last_reset) > (uint64_t)RIST_TICK_FROM_MS(flow->latency) )
+ (uint64_t)(now - p_sys->last_data_rx) > (uint64_t)VLC_TICK_FROM_MS(flow->latency) &&
+ (uint64_t)(now - p_sys->last_reset) > (uint64_t)VLC_TICK_FROM_MS(flow->latency) )
{
msg_Err(p_access, "No data received for %"PRId64" ms, resetting buffers",
(int64_t)(now - p_sys->last_data_rx)/1000);
@@ -1023,10 +1014,8 @@ static void Clean( stream_t *p_access )
net_Close (p_sys->flow->fd_rtcp_m);
for (int i=0; i<RIST_QUEUE_SIZE; i++) {
struct rtp_pkt *pkt = &(p_sys->flow->buffer[i]);
- if (pkt->buffer && pkt->buffer->i_buffer > 0) {
+ if (pkt->buffer)
block_Release(pkt->buffer);
- pkt->buffer = NULL;
- }
}
free(p_sys->flow->buffer);
free(p_sys->flow);
@@ -1096,9 +1085,9 @@ static int Open(vlc_object_t *p_this)
msg_Info(p_access, "Setting queue latency to %d ms", p_sys->flow->latency);
/* Convert to rtp times */
- p_sys->flow->rtp_latency = rtp_get_ts(RIST_TICK_FROM_MS(p_sys->flow->latency));
- p_sys->flow->retry_interval = rtp_get_ts(RIST_TICK_FROM_MS(p_sys->flow->retry_interval));
- p_sys->flow->reorder_buffer = rtp_get_ts(RIST_TICK_FROM_MS(p_sys->flow->reorder_buffer));
+ p_sys->flow->rtp_latency = rtp_get_ts(VLC_TICK_FROM_MS(p_sys->flow->latency));
+ p_sys->flow->retry_interval = rtp_get_ts(VLC_TICK_FROM_MS(p_sys->flow->retry_interval));
+ p_sys->flow->reorder_buffer = rtp_get_ts(VLC_TICK_FROM_MS(p_sys->flow->reorder_buffer));
p_sys->p_fifo = block_FifoNew();
if( unlikely(p_sys->p_fifo == NULL) )
=====================================
modules/access/rist.h
=====================================
@@ -29,6 +29,8 @@
#include <errno.h>
#include <assert.h>
+#include <vlc_common.h>
+
/*****************************************************************************
* Public API
*****************************************************************************/
@@ -63,8 +65,6 @@
#define RTCP_PT_RTPFR 204
-#define RIST_TICK_FROM_MS(ms) ((CLOCK_FREQ / INT64_C(1000)) * (ms))
-
struct rtp_pkt {
uint32_t rtp_ts;
struct block_t *buffer;
@@ -114,26 +114,24 @@ struct rist_flow {
static inline uint16_t rtcp_fb_nack_get_range_start(const uint8_t *p_rtcp_fb_nack)
{
- return (p_rtcp_fb_nack[0] << 8) | p_rtcp_fb_nack[1];
+ return GetWBE(p_rtcp_fb_nack);
}
static inline uint16_t rtcp_fb_nack_get_range_extra(const uint8_t *p_rtcp_fb_nack)
{
- return (p_rtcp_fb_nack[2] << 8) | p_rtcp_fb_nack[3];
+ return GetWBE(&p_rtcp_fb_nack[2]);
}
static inline void rtcp_fb_nack_set_range_start(uint8_t *p_rtcp_fb_nack,
uint16_t start)
{
- p_rtcp_fb_nack[0] = (start >> 8) & 0xff;
- p_rtcp_fb_nack[1] = start & 0xff;
+ SetWBE(p_rtcp_fb_nack, start);
}
static inline void rtcp_fb_nack_set_range_extra(uint8_t *p_rtcp_fb_nack,
uint16_t extra)
{
- p_rtcp_fb_nack[2] = (extra >> 8) & 0xff;
- p_rtcp_fb_nack[3] = extra & 0xff;
+ SetWBE(&p_rtcp_fb_nack[2], extra);
}
static inline void populate_cname(int fd, char *identifier)
@@ -381,26 +379,22 @@ static bool is_multicast_address(char *psz_dst_server)
static inline uint32_t rist_rtp_get_timestamp(const uint8_t *p_rtp)
{
- return (p_rtp[4] << 24) | (p_rtp[5] << 16) | (p_rtp[6] << 8) | p_rtp[7];
+ return GetDWBE(&p_rtp[4]);
}
static inline void rist_rtp_set_timestamp(uint8_t *p_rtp, uint32_t i_timestamp)
{
- p_rtp[4] = (i_timestamp >> 24) & 0xff;
- p_rtp[5] = (i_timestamp >> 16) & 0xff;
- p_rtp[6] = (i_timestamp >> 8) & 0xff;
- p_rtp[7] = i_timestamp & 0xff;
+ SetDWBE(&p_rtp[4], i_timestamp);
}
static inline uint16_t rist_rtp_get_seqnum(const uint8_t *p_rtp)
{
- return (p_rtp[2] << 8) | p_rtp[3];
+ return GetWBE(&p_rtp[2]);
}
static inline void rist_rtp_set_seqnum(uint8_t *p_rtp, uint16_t i_seqnum)
{
- p_rtp[2] = i_seqnum >> 8;
- p_rtp[3] = i_seqnum & 0xff;
+ SetWBE(&p_rtp[2], i_seqnum);
}
static inline int8_t rist_rtcp_sdes_get_name_length(const uint8_t *p_rtcp_sdes)
@@ -410,14 +404,13 @@ static inline int8_t rist_rtcp_sdes_get_name_length(const uint8_t *p_rtcp_sdes)
static inline uint16_t rist_rtcp_get_length(const uint8_t *p_rtcp)
{
- return (p_rtcp[2] << 8) | p_rtcp[3];
+ return GetWBE(&p_rtcp[2]);
}
static inline void rist_rtcp_set_length(uint8_t *p_rtcp,
uint16_t length)
{
- p_rtcp[2] = length >> 8;
- p_rtcp[3] = length & 0xff;
+ SetWBE(&p_rtcp[2], length);
}
static inline uint8_t rist_rtcp_get_pt(const uint8_t *p_rtcp)
@@ -447,10 +440,7 @@ static inline void rist_rtcp_rr_set_pt(uint8_t *p_rtcp_rr)
static inline void rist_rtcp_fb_set_int_ssrc_pkt_sender(uint8_t *p_rtcp_fb, uint32_t i_ssrc)
{
- p_rtcp_fb[4] = (i_ssrc >> 24) & 0xff;
- p_rtcp_fb[5] = (i_ssrc >> 16) & 0xff;
- p_rtcp_fb[6] = (i_ssrc >> 8) & 0xff;
- p_rtcp_fb[7] = i_ssrc & 0xff;
+ SetDWBE(&p_rtcp_fb[4], i_ssrc);
}
static inline void rist_rtp_set_cc(uint8_t *p_rtp, uint8_t i_cc)
@@ -493,38 +483,30 @@ static inline uint16_t rist_rtcp_fb_nack_get_packet_id(const uint8_t *p_rtcp_fb_
static inline void rist_rtcp_fb_nack_set_packet_id(uint8_t *p_rtcp_fb_nack,
uint16_t packet_id)
{
- p_rtcp_fb_nack[0] = (packet_id >> 8) & 0xff;
- p_rtcp_fb_nack[1] = packet_id & 0xff;
+ SetWBE(p_rtcp_fb_nack, packet_id);
}
static inline uint16_t rist_rtcp_fb_nack_get_bitmask_lost(const uint8_t *p_rtcp_fb_nack)
{
- return (p_rtcp_fb_nack[2] << 8) | p_rtcp_fb_nack[3];
+ return GetWBE(&p_rtcp_fb_nack[2]);
}
static inline void rist_rtcp_fb_nack_set_bitmask_lost(uint8_t *p_rtcp_fb_nack,
uint16_t bitmask)
{
- p_rtcp_fb_nack[2] = (bitmask >> 8) & 0xff;
- p_rtcp_fb_nack[3] = bitmask & 0xff;
+ SetWBE(&p_rtcp_fb_nack[2], bitmask);
}
static inline void rist_rtcp_fb_get_ssrc_media_src(const uint8_t *p_rtcp_fb,
uint8_t pi_ssrc[4])
{
- pi_ssrc[0] = p_rtcp_fb[8];
- pi_ssrc[1] = p_rtcp_fb[9];
- pi_ssrc[2] = p_rtcp_fb[10];
- pi_ssrc[3] = p_rtcp_fb[11];
+ memcpy(&pi_ssrc[0], &p_rtcp_fb[8], 4);
}
static inline void rist_rtcp_fb_set_ssrc_media_src(uint8_t *p_rtcp_fb,
const uint8_t pi_ssrc[4])
{
- p_rtcp_fb[8] = pi_ssrc[0];
- p_rtcp_fb[9] = pi_ssrc[1];
- p_rtcp_fb[10] = pi_ssrc[2];
- p_rtcp_fb[11] = pi_ssrc[3];
+ memcpy(&p_rtcp_fb[8], &pi_ssrc[0], 4);
}
static inline void rist_rtcp_sr_set_pt(uint8_t *p_rtcp_sr)
@@ -541,46 +523,31 @@ static inline void rist_rtcp_sr_set_length(uint8_t *p_rtcp_sr,
static inline void rist_rtcp_sr_set_ntp_time_msw(uint8_t *p_rtcp_sr,
uint32_t ntp_time_msw)
{
- p_rtcp_sr[8] = (ntp_time_msw >> 24) & 0xff;
- p_rtcp_sr[9] = (ntp_time_msw >> 16) & 0xff;
- p_rtcp_sr[10] = (ntp_time_msw >> 8) & 0xff;
- p_rtcp_sr[11] = ntp_time_msw & 0xff;
+ SetDWBE(&p_rtcp_sr[8], ntp_time_msw);
}
static inline void rist_rtcp_sr_set_ntp_time_lsw(uint8_t *p_rtcp_sr,
uint32_t ntp_time_lsw)
{
- p_rtcp_sr[12] = (ntp_time_lsw >> 24) & 0xff;
- p_rtcp_sr[13] = (ntp_time_lsw >> 16) & 0xff;
- p_rtcp_sr[14] = (ntp_time_lsw >> 8) & 0xff;
- p_rtcp_sr[15] = ntp_time_lsw & 0xff;
+ SetDWBE(&p_rtcp_sr[12], ntp_time_lsw);
}
static inline void rist_rtcp_sr_set_rtp_time(uint8_t *p_rtcp_sr,
uint32_t rtp_time)
{
- p_rtcp_sr[16] = (rtp_time >> 24) & 0xff;
- p_rtcp_sr[17] = (rtp_time >> 16) & 0xff;
- p_rtcp_sr[18] = (rtp_time >> 8) & 0xff;
- p_rtcp_sr[19] = rtp_time & 0xff;
+ SetDWBE(&p_rtcp_sr[16], rtp_time);
}
static inline void rist_rtcp_sr_set_packet_count(uint8_t *p_rtcp_sr,
uint32_t packet_count)
{
- p_rtcp_sr[20] = (packet_count >> 24) & 0xff;
- p_rtcp_sr[21] = (packet_count >> 16) & 0xff;
- p_rtcp_sr[22] = (packet_count >> 8) & 0xff;
- p_rtcp_sr[23] = packet_count & 0xff;
+ SetDWBE(&p_rtcp_sr[20], packet_count);
}
static inline void rist_rtcp_sr_set_octet_count(uint8_t *p_rtcp_sr,
uint32_t octet_count)
{
- p_rtcp_sr[24] = (octet_count >> 24) & 0xff;
- p_rtcp_sr[25] = (octet_count >> 16) & 0xff;
- p_rtcp_sr[26] = (octet_count >> 8) & 0xff;
- p_rtcp_sr[27] = octet_count & 0xff;
+ SetDWBE(&p_rtcp_sr[24], octet_count);
}
static inline void rist_rtp_set_type(uint8_t *p_rtp, uint8_t i_type)
@@ -590,8 +557,5 @@ static inline void rist_rtp_set_type(uint8_t *p_rtp, uint8_t i_type)
static inline void rist_rtp_set_int_ssrc(uint8_t *p_rtp, uint32_t i_ssrc)
{
- p_rtp[8] = (i_ssrc >> 24) & 0xff;
- p_rtp[9] = (i_ssrc >> 16) & 0xff;
- p_rtp[10] = (i_ssrc >> 8) & 0xff;
- p_rtp[11] = i_ssrc & 0xff;
+ SetDWBE(&p_rtp[8], i_ssrc);
}
=====================================
modules/access_output/rist.c
=====================================
@@ -362,7 +362,7 @@ static void rist_rtcp_send(sout_access_out_t *p_access)
struct timeval tv;
int r;
uint64_t fractions;
- uint16_t namelen = strlen(flow->cname) + 1;
+ uint16_t namelen = strlen(flow->cname);
gettimeofday(&tv, NULL);
/* Populate SR for sender report */
@@ -460,7 +460,7 @@ static void *rist_thread(void *data)
/* And, in any case: */
now = mdate();
- if ((now - p_sys->last_rtcp_tx) > RIST_TICK_FROM_MS(RTCP_INTERVAL))
+ if ((now - p_sys->last_rtcp_tx) > VLC_TICK_FROM_MS(RTCP_INTERVAL))
{
rist_rtcp_send(p_access);
p_sys->last_rtcp_tx = now;
@@ -523,10 +523,7 @@ static void* ThreadSend( void *data )
struct rtp_pkt *pkt;
pkt = &(flow->buffer[seq]);
if (pkt->buffer)
- {
block_Release(pkt->buffer);
- pkt->buffer = NULL;
- }
pkt->rtp_ts = pkt_ts;
pkt->buffer = out;
@@ -547,7 +544,7 @@ static void* ThreadSend( void *data )
/* We print out the stats once per second */
uint64_t now = mdate();
uint64_t interval = (now - p_sys->i_last_stat);
- if ( interval > RIST_TICK_FROM_MS(STATS_INTERVAL) )
+ if ( interval > VLC_TICK_FROM_MS(STATS_INTERVAL) )
{
if (p_sys->i_retransmit_packets > 0)
{
@@ -584,7 +581,8 @@ static void SendtoFIFO( sout_access_out_t *p_access, block_t *buffer )
rist_rtp_set_timestamp(bufhdr, pkt_ts);
block_t *pkt = block_Duplicate(buffer);
- block_FifoPut( p_sys->p_fifo, pkt );
+ if ( pkt )
+ block_FifoPut( p_sys->p_fifo, pkt );
}
static ssize_t Write( sout_access_out_t *p_access, block_t *p_buffer )
@@ -697,10 +695,7 @@ static void Clean( sout_access_out_t *p_access )
for (int i=0; i<RIST_QUEUE_SIZE; i++) {
struct rtp_pkt *pkt = &(p_sys->flow->buffer[i]);
if (pkt->buffer)
- {
block_Release(pkt->buffer);
- pkt->buffer = NULL;
- }
}
free(p_sys->flow->buffer);
free(p_sys->flow);
@@ -774,7 +769,7 @@ static int Open( vlc_object_t *p_this )
p_sys->flow = flow;
flow->latency = var_InheritInteger(p_access, SOUT_CFG_PREFIX "buffer-size");
- flow->rtp_latency = rtp_get_ts(RIST_TICK_FROM_MS(flow->latency));
+ flow->rtp_latency = rtp_get_ts(VLC_TICK_FROM_MS(flow->latency));
p_sys->ssrc = var_InheritInteger(p_access, SOUT_CFG_PREFIX "ssrc");
if (p_sys->ssrc == 0) {
vlc_rand_bytes(&p_sys->ssrc, 4);
@@ -783,7 +778,7 @@ static int Open( vlc_object_t *p_this )
p_sys->ssrc &= ~(1 << 0);
msg_Info(p_access, "SSRC: 0x%08X", p_sys->ssrc);
- p_sys->i_ticks_caching = RIST_TICK_FROM_MS(var_InheritInteger( p_access,
+ p_sys->i_ticks_caching = VLC_TICK_FROM_MS(var_InheritInteger( p_access,
SOUT_CFG_PREFIX "caching"));
p_sys->i_packet_size = var_InheritInteger(p_access, SOUT_CFG_PREFIX "packet-size" );
p_sys->p_fifo = block_FifoNew();
View it on GitLab: https://code.videolan.org/videolan/vlc/-/compare/f838831b6ddaec4e4ff40d8dafebb42d475e03c7...1e98169d13800b0f80ebc14e3a8ca5033d8266d8
--
View it on GitLab: https://code.videolan.org/videolan/vlc/-/compare/f838831b6ddaec4e4ff40d8dafebb42d475e03c7...1e98169d13800b0f80ebc14e3a8ca5033d8266d8
You're receiving this email because of your account on code.videolan.org.
More information about the vlc-commits
mailing list