Commit ad0117b6 authored by Jean-Paul Saman's avatar Jean-Paul Saman

Patch from Paul Corke for rawdv to advance the timestamp when it is about to...

Patch from Paul Corke for rawdv to advance the timestamp when it is about to fall behind because the hardware sometimes skips a frame on a live feed. Renamed - -rawdv-realtime to --rawdv-hurry-up because its working is similar to --sout-transcode-hurry-up. Also fixed a potential memory leak.
parent eaf3e693
...@@ -143,6 +143,7 @@ Ondrej Kuda aka Albert <kuda at natur dot cuni dot cz> - HTTP interface tips and ...@@ -143,6 +143,7 @@ Ondrej Kuda aka Albert <kuda at natur dot cuni dot cz> - HTTP interface tips and
Patrick Horn <patrickd0thorn at mindspring d0t com> - DirectShow patch Patrick Horn <patrickd0thorn at mindspring d0t com> - DirectShow patch
Patrick McLean <chutzpah at gentoo d0t org> - Libcdio update patch Patrick McLean <chutzpah at gentoo d0t org> - Libcdio update patch
Paul Corke <paul.corke at datatote dot co do uk> - pvr patch for newer ivtv drivers Paul Corke <paul.corke at datatote dot co do uk> - pvr patch for newer ivtv drivers
Paul Corke <paul.corke at datatote dot co do uk> - dv patch to keep up with the hardware
Paul Mackerras <paulus at linuxcare.com.au> - AltiVec IDCT and motion Paul Mackerras <paulus at linuxcare.com.au> - AltiVec IDCT and motion
Pavlov Konstantin “thresh” - several Linux build system fixes Pavlov Konstantin “thresh” - several Linux build system fixes
Petr Vacek - FTP cleartext authentication Petr Vacek - FTP cleartext authentication
......
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
* $Id$ * $Id$
* *
* Authors: Gildas Bazin <gbazin@netcourrier.com> * Authors: Gildas Bazin <gbazin@netcourrier.com>
* Paul Corke <paul dot corke at datatote dot co dot uk>
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
...@@ -32,6 +33,10 @@ ...@@ -32,6 +33,10 @@
/***************************************************************************** /*****************************************************************************
* Module descriptor * Module descriptor
*****************************************************************************/ *****************************************************************************/
#define HURRYUP_TEXT N_( "Hurry up" )
#define HURRYUP_LONGTEXT N_( "The demuxer will advance timestamps if the " \
"input can't keep up with the rate." )
static int Open ( vlc_object_t * ); static int Open ( vlc_object_t * );
static void Close( vlc_object_t * ); static void Close( vlc_object_t * );
...@@ -41,6 +46,7 @@ vlc_module_begin(); ...@@ -41,6 +46,7 @@ vlc_module_begin();
set_capability( "demux2", 2 ); set_capability( "demux2", 2 );
set_category( CAT_INPUT ); set_category( CAT_INPUT );
set_subcategory( SUBCAT_INPUT_DEMUX ); set_subcategory( SUBCAT_INPUT_DEMUX );
add_bool( "rawdv-hurry-up", 0, NULL, HURRYUP_TEXT, HURRYUP_LONGTEXT, VLC_FALSE );
set_callbacks( Open, Close ); set_callbacks( Open, Close );
add_shortcut( "rawdv" ); add_shortcut( "rawdv" );
vlc_module_end(); vlc_module_end();
...@@ -104,6 +110,7 @@ struct demux_sys_t ...@@ -104,6 +110,7 @@ struct demux_sys_t
/* program clock reference (in units of 90kHz) */ /* program clock reference (in units of 90kHz) */
mtime_t i_pcr; mtime_t i_pcr;
vlc_bool_t b_hurry_up;
}; };
/***************************************************************************** /*****************************************************************************
...@@ -196,11 +203,15 @@ static int Open( vlc_object_t * p_this ) ...@@ -196,11 +203,15 @@ static int Open( vlc_object_t * p_this )
p_peek += 72; /* skip rest of DIF block */ p_peek += 72; /* skip rest of DIF block */
/* Set p_input field */ /* Set p_input field */
p_demux->pf_demux = Demux; p_demux->pf_demux = Demux;
p_demux->pf_control = Control; p_demux->pf_control = Control;
p_demux->p_sys = p_sys = malloc( sizeof( demux_sys_t ) ); p_demux->p_sys = p_sys = malloc( sizeof( demux_sys_t ) );
if( !p_sys )
return VLC_ENOMEM;
p_sys->b_hurry_up = var_CreateGetBool( p_demux, "rawdv-hurry-up" );
msg_Dbg( p_demux, "Realtime DV Source: %s", (p_sys->b_hurry_up)?"Yes":"No" );
p_sys->i_dsf = dv_header.dsf; p_sys->i_dsf = dv_header.dsf;
p_sys->frame_size = dv_header.dsf ? 12 * 150 * 80 : 10 * 150 * 80; p_sys->frame_size = dv_header.dsf ? 12 * 150 * 80 : 10 * 150 * 80;
...@@ -264,6 +275,7 @@ static void Close( vlc_object_t *p_this ) ...@@ -264,6 +275,7 @@ static void Close( vlc_object_t *p_this )
demux_t *p_demux = (demux_t*)p_this; demux_t *p_demux = (demux_t*)p_this;
demux_sys_t *p_sys = p_demux->p_sys; demux_sys_t *p_sys = p_demux->p_sys;
var_Destroy( p_demux, "rawdv-hurry-up");
free( p_sys ); free( p_sys );
} }
...@@ -278,10 +290,16 @@ static int Demux( demux_t *p_demux ) ...@@ -278,10 +290,16 @@ static int Demux( demux_t *p_demux )
block_t *p_block; block_t *p_block;
vlc_bool_t b_audio = VLC_FALSE; vlc_bool_t b_audio = VLC_FALSE;
if( p_sys->b_hurry_up )
{
/* 3 frames */
p_sys->i_pcr = mdate() + (p_sys->i_dsf ? 120000 : 90000);
}
/* Call the pace control */ /* Call the pace control */
es_out_Control( p_demux->out, ES_OUT_SET_PCR, p_sys->i_pcr ); es_out_Control( p_demux->out, ES_OUT_SET_PCR, p_sys->i_pcr );
p_block = stream_Block( p_demux->s, p_sys->frame_size );
if( ( p_block = stream_Block( p_demux->s, p_sys->frame_size ) ) == NULL ) if( p_block == NULL )
{ {
/* EOF */ /* EOF */
return 0; return 0;
...@@ -309,7 +327,10 @@ static int Demux( demux_t *p_demux ) ...@@ -309,7 +327,10 @@ static int Demux( demux_t *p_demux )
es_out_Send( p_demux->out, p_sys->p_es_video, p_block ); es_out_Send( p_demux->out, p_sys->p_es_video, p_block );
if( !p_sys->b_hurry_up )
{
p_sys->i_pcr += ( I64C(1000000) / p_sys->f_rate ); p_sys->i_pcr += ( I64C(1000000) / p_sys->f_rate );
}
return 1; return 1;
} }
...@@ -472,5 +493,3 @@ static block_t *dv_extract_audio( demux_t *p_demux, ...@@ -472,5 +493,3 @@ static block_t *dv_extract_audio( demux_t *p_demux,
return p_block; return p_block;
} }
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