[vlc-commits] TS demux: add an option to not use stream's PCR
Rafaël Carré
git at videolan.org
Mon Jul 22 15:09:30 CEST 2013
vlc | branch: master | Rafaël Carré <funman at videolan.org> | Mon Jul 22 15:08:33 2013 +0200| [08668f06c1a19864ca41b42f1d004f4911306aba] | committer: Rafaël Carré
TS demux: add an option to not use stream's PCR
Ref: #8983
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=08668f06c1a19864ca41b42f1d004f4911306aba
---
modules/demux/ts.c | 18 +++++++++++++++---
1 file changed, 15 insertions(+), 3 deletions(-)
diff --git a/modules/demux/ts.c b/modules/demux/ts.c
index a6ccb52..5c4a288 100644
--- a/modules/demux/ts.c
+++ b/modules/demux/ts.c
@@ -132,6 +132,8 @@ static void Close ( vlc_object_t * );
"Seek and position based on a percent byte position, not a PCR generated " \
"time position. If seeking doesn't work property, turn on this option." )
+#define PCR_TEXT N_("Trust in-stream PCR")
+#define PCR_LONGTEXT N_("Use the stream PCR as a reference.")
vlc_module_begin ()
set_description( N_("MPEG Transport Stream demuxer") )
@@ -140,6 +142,8 @@ vlc_module_begin ()
set_subcategory( SUBCAT_INPUT_DEMUX )
add_string( "ts-extra-pmt", NULL, PMT_TEXT, PMT_LONGTEXT, true )
+ add_bool( "ts-trust-pcr", true, PCR_TEXT, PCR_LONGTEXT, true )
+ change_safe()
add_bool( "ts-es-id-pid", true, PID_TEXT, PID_LONGTEXT, true )
change_safe()
add_string( "ts-out", NULL, TSOUT_TEXT, TSOUT_LONGTEXT, true )
@@ -312,6 +316,7 @@ struct demux_sys_t
bool b_udp_out;
int fd; /* udp socket */
uint8_t *buffer;
+ bool b_trust_pcr;
/* */
bool b_access_control;
@@ -691,6 +696,8 @@ static int Open( vlc_object_t *p_this )
/* Read config */
p_sys->b_es_id_pid = var_CreateGetBool( p_demux, "ts-es-id-pid" );
+ p_sys->b_trust_pcr = var_CreateGetBool( p_demux, "ts-trust-pcr" );
+
char* psz_string = var_CreateGetString( p_demux, "ts-out" );
if( psz_string && *psz_string )
{
@@ -1542,6 +1549,7 @@ static void PIDClean( demux_t *p_demux, ts_pid_t *pid )
****************************************************************************/
static void ParsePES( demux_t *p_demux, ts_pid_t *pid, block_t *p_pes )
{
+ demux_sys_t *p_sys = p_demux->p_sys;
uint8_t header[34];
unsigned i_pes_size = 0;
unsigned i_skip = 0;
@@ -1750,6 +1758,9 @@ static void ParsePES( demux_t *p_demux, ts_pid_t *pid, block_t *p_pes )
block_Duplicate( p_block ) );
}
+ if (!p_sys->b_trust_pcr)
+ es_out_Control( p_demux->out, ES_OUT_SET_PCR, p_block->i_pts);
+
es_out_Send( p_demux->out, pid->es->id, p_block );
}
else
@@ -2168,9 +2179,10 @@ static void PCRHandle( demux_t *p_demux, ts_pid_t *pid, block_t *p_bk )
if( pid->i_pid == p_sys->pmt[i]->psi->prg[i_prg]->i_pid_pcr )
{
p_sys->pmt[i]->psi->prg[i_prg]->i_pcr_value = i_pcr;
- es_out_Control( p_demux->out, ES_OUT_SET_GROUP_PCR,
- (int)p_sys->pmt[i]->psi->prg[i_prg]->i_number,
- (int64_t)(VLC_TS_0 + i_pcr * 100 / 9) );
+ if (p_sys->b_trust_pcr)
+ es_out_Control( p_demux->out, ES_OUT_SET_GROUP_PCR,
+ (int)p_sys->pmt[i]->psi->prg[i_prg]->i_number,
+ (int64_t)(VLC_TS_0 + i_pcr * 100 / 9) );
}
}
More information about the vlc-commits
mailing list