mirror of
https://code.videolan.org/videolan/vlc
synced 2024-10-07 03:56:28 +02:00
Impl�mentation rudimentaire de la synchro : les packets
PES sont maintenant dat�s. -- Polux
This commit is contained in:
parent
803556c3bb
commit
3807a5ed8d
@ -203,7 +203,6 @@ typedef struct
|
|||||||
* pcr_descriptor_t
|
* pcr_descriptor_t
|
||||||
*******************************************************************************
|
*******************************************************************************
|
||||||
* Contains informations used to synchronise the decoder with the server
|
* Contains informations used to synchronise the decoder with the server
|
||||||
* Only input_PcrDecode() is allowed to modify it
|
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
|
|
||||||
typedef struct pcr_descriptor_struct
|
typedef struct pcr_descriptor_struct
|
||||||
@ -211,9 +210,11 @@ typedef struct pcr_descriptor_struct
|
|||||||
pthread_mutex_t lock; /* pcr modification lock */
|
pthread_mutex_t lock; /* pcr modification lock */
|
||||||
|
|
||||||
s64 delta_clock;
|
s64 delta_clock;
|
||||||
|
s64 delta_decode;
|
||||||
/* represents decoder_time - pcr_time in usecondes */
|
/* represents decoder_time - pcr_time in usecondes */
|
||||||
count_t c_average;
|
count_t c_average;
|
||||||
/* counter used to compute dynamic average values */
|
/* counter used to compute dynamic average values */
|
||||||
|
count_t c_pts;
|
||||||
#ifdef STATS
|
#ifdef STATS
|
||||||
/* Stats */
|
/* Stats */
|
||||||
count_t c_average_jitter;
|
count_t c_average_jitter;
|
||||||
|
@ -870,12 +870,33 @@ static __inline__ void input_DemuxPES( input_thread_t *p_input,
|
|||||||
the 14 bytes */
|
the 14 bytes */
|
||||||
if( p_pes->b_has_pts )
|
if( p_pes->b_has_pts )
|
||||||
{
|
{
|
||||||
/* The PTS field is split in 3 bit records. We have to add
|
pcr_descriptor_t *p_pcr;
|
||||||
them, and thereafter we substract the 2 marker_bits */
|
/* The PTS field is split in 3 bit records. We have to add
|
||||||
p_pes->i_pts = ( (p_pes->p_pes_header[9] << 29) +
|
them, and thereafter we substract the 2 marker_bits */
|
||||||
(U16_AT(p_pes->p_pes_header + 10) << 14) +
|
|
||||||
(U16_AT(p_pes->p_pes_header + 12) >> 1) -
|
p_pcr = p_input->p_pcr;
|
||||||
(1 << 14) - (1 << 29) );
|
pthread_mutex_lock( &p_pcr->lock );
|
||||||
|
if( p_pcr->delta_clock == 0 )
|
||||||
|
{
|
||||||
|
p_pes->i_pts = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
p_pes->i_pts = ( ((s64)p_pes->p_pes_header[9] << 29) +
|
||||||
|
((s64)U16_AT(p_pes->p_pes_header + 10) << 14) +
|
||||||
|
((s64)U16_AT(p_pes->p_pes_header + 12) >> 1) -
|
||||||
|
(1 << 14) - (1 << 29) );
|
||||||
|
p_pes->i_pts *= 300;
|
||||||
|
p_pes->i_pts /= 27;
|
||||||
|
p_pes->i_pts += p_pcr->delta_clock;
|
||||||
|
if( p_pcr->c_pts == 0 )
|
||||||
|
{
|
||||||
|
p_pcr->delta_decode = mdate() - p_pes->i_pts + 500000;
|
||||||
|
}
|
||||||
|
p_pes->i_pts += p_pcr->delta_decode;
|
||||||
|
}
|
||||||
|
p_pcr->c_pts += 1;
|
||||||
|
pthread_mutex_unlock( &p_pcr->lock );
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -30,9 +30,12 @@ void input_PcrReInit( input_thread_t *p_input )
|
|||||||
pcr_descriptor_t* p_pcr;
|
pcr_descriptor_t* p_pcr;
|
||||||
ASSERT(p_input);
|
ASSERT(p_input);
|
||||||
|
|
||||||
p_pcr = p_input->p_pcr;
|
pthread_mutex_lock( &p_pcr->lock );
|
||||||
|
|
||||||
|
p_pcr = p_input->p_pcr;
|
||||||
|
p_pcr->delta_clock = 0;
|
||||||
p_pcr->c_average = 0;
|
p_pcr->c_average = 0;
|
||||||
|
p_pcr->c_pts = 0;
|
||||||
|
|
||||||
#ifdef STATS
|
#ifdef STATS
|
||||||
p_pcr->c_average_jitter = 0;
|
p_pcr->c_average_jitter = 0;
|
||||||
@ -42,6 +45,7 @@ void input_PcrReInit( input_thread_t *p_input )
|
|||||||
/* For the printf in input_PcrDecode(), this is used for debug purpose only */
|
/* For the printf in input_PcrDecode(), this is used for debug purpose only */
|
||||||
printf("\n");
|
printf("\n");
|
||||||
#endif
|
#endif
|
||||||
|
pthread_mutex_unlock( &p_pcr->lock );
|
||||||
}
|
}
|
||||||
|
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
|
Loading…
Reference in New Issue
Block a user