Commit 3807a5ed authored by Jean-Marc Dressler's avatar Jean-Marc Dressler

Impl�mentation rudimentaire de la synchro : les packets

PES sont maintenant dat�s.

--
Polux
parent 803556c3
...@@ -203,7 +203,6 @@ typedef struct ...@@ -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 ...@@ -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, ...@@ -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 ) ...@@ -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 ) ...@@ -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 );
} }
/****************************************************************************** /******************************************************************************
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment