+static void PCRHandle( demux_t *p_demux, ts_pid_t *pid, block_t *p_bk )
+{
+ demux_sys_t *p_sys = p_demux->p_sys;
+ const uint8_t *p = p_bk->p_buffer;
+
+ if( ( p[3]&0x20 ) && /* adaptation */
+ ( p[5]&0x10 ) &&
+ ( p[4] >= 7 ) )
+ {
+ int i;
+ mtime_t i_pcr; /* 33 bits */
+
+ i_pcr = ( (mtime_t)p[6] << 25 ) |
+ ( (mtime_t)p[7] << 17 ) |
+ ( (mtime_t)p[8] << 9 ) |
+ ( (mtime_t)p[9] << 1 ) |
+ ( (mtime_t)p[10] >> 7 );
+
+ /* Search program and set the PCR */
+ for( i = 0; i < p_sys->i_pmt; i++ )
+ {
+ if( pid->i_pid == p_sys->pmt[i]->psi->i_pid_pcr )
+ {
+ es_out_Control( p_demux->out, ES_OUT_SET_GROUP_PCR,
+ (int)p_sys->pmt[i]->psi->i_number,
+ (int64_t)(i_pcr * 100 / 9) );
+ }
+ }
+ }
+}
+