/*****************************************************************************
* Preamble
*****************************************************************************/
-#include <stdlib.h> /* malloc(), free() */
-#include <vlc/vlc.h>
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <vlc_common.h>
+#include <vlc_plugin.h>
#include <vlc_demux.h>
/*****************************************************************************
static int Open ( vlc_object_t * );
static void Close ( vlc_object_t * );
-vlc_module_begin();
- set_description( _("PVA demuxer" ) );
- set_capability( "demux2", 10 );
- set_category( CAT_INPUT );
- set_subcategory( SUBCAT_INPUT_DEMUX );
- set_callbacks( Open, Close );
- add_shortcut( "pva" );
-vlc_module_end();
+vlc_module_begin ()
+ set_description( N_("PVA demuxer" ) )
+ set_capability( "demux", 10 )
+ set_category( CAT_INPUT )
+ set_subcategory( SUBCAT_INPUT_DEMUX )
+ set_callbacks( Open, Close )
+ add_shortcut( "pva" )
+vlc_module_end ()
/*****************************************************************************
* Local prototypes
demux_t *p_demux = (demux_t*)p_this;
demux_sys_t *p_sys;
es_format_t fmt;
- uint8_t *p_peek;
+ const uint8_t *p_peek;
if( stream_Peek( p_demux->s, &p_peek, 5 ) < 5 ) return VLC_EGENERIC;
if( p_peek[0] != 'A' || p_peek[1] != 'V' || p_peek[4] != 0x55 )
{
/* In case we had forced this demuxer we try to resynch */
- if( strcasecmp( p_demux->psz_demux, "pva" ) || ReSynch( p_demux ) )
- {
+ if( !p_demux->b_force || ReSynch( p_demux ) )
return VLC_EGENERIC;
- }
}
/* Fill p_demux field */
p_demux->p_sys = p_sys = malloc( sizeof( demux_sys_t ) );
/* Register one audio and one video stream */
- es_format_Init( &fmt, AUDIO_ES, VLC_FOURCC( 'm', 'p', 'g', 'a' ) );
+ es_format_Init( &fmt, AUDIO_ES, VLC_CODEC_MPGA );
+ fmt.b_packetized = false;
p_sys->p_audio = es_out_Add( p_demux->out, &fmt );
- es_format_Init( &fmt, VIDEO_ES, VLC_FOURCC( 'm', 'p', 'g', 'v' ) );
+ es_format_Init( &fmt, VIDEO_ES, VLC_CODEC_MPGV );
+ fmt.b_packetized = false;
p_sys->p_video = es_out_Add( p_demux->out, &fmt );
p_sys->i_vc = -1;
p_sys->p_pes = NULL;
p_sys->p_es = NULL;
- p_sys->b_pcr_audio = VLC_FALSE;
+ p_sys->b_pcr_audio = false;
return VLC_SUCCESS;
}
{
demux_sys_t *p_sys = p_demux->p_sys;
- uint8_t *p_peek;
+ const uint8_t *p_peek;
int i_size;
block_t *p_frame;
int64_t i_pts;
if( ( p_frame = p_sys->p_es ) )
{
- if( p_frame->i_pts > 0 && !p_sys->b_pcr_audio )
+ if( p_frame->i_pts > VLC_TS_INVALID && !p_sys->b_pcr_audio )
{
es_out_Control( p_demux->out, ES_OUT_SET_PCR, (int64_t)p_frame->i_pts);
}
{
p_frame->p_buffer += i_skip;
p_frame->i_buffer -= i_skip;
- if( i_pts > 0 ) p_frame->i_pts = i_pts * 100 / 9;
+ if( i_pts >= 0 )
+ p_frame->i_pts = VLC_TS_0 + i_pts * 100 / 9;
block_ChainAppend( &p_sys->p_es, p_frame );
}
break;
if( ( i64 = stream_Size( p_demux->s ) ) > 0 )
{
pf = (double*) va_arg( args, double* );
- *pf = (double)stream_Tell( p_demux->s ) / (double)i64;
+ double current = stream_Tell( p_demux->s );
+ *pf = current / (double)i64;
return VLC_SUCCESS;
}
return VLC_EGENERIC;
f = (double) va_arg( args, double );
i64 = stream_Size( p_demux->s );
- es_out_Control( p_demux->out, ES_OUT_RESET_PCR );
if( stream_Seek( p_demux->s, (int64_t)(i64 * f) ) || ReSynch( p_demux ) )
{
return VLC_EGENERIC;
*****************************************************************************/
static int ReSynch( demux_t *p_demux )
{
- uint8_t *p_peek;
+ const uint8_t *p_peek;
int i_skip;
int i_peek;
- while( !p_demux->b_die )
+ while( vlc_object_alive (p_demux) )
{
if( ( i_peek = stream_Peek( p_demux->s, &p_peek, 1024 ) ) < 8 )
{
uint8_t hdr[30];
int i_pes_size;
- int i_skip;
+ unsigned i_skip;
mtime_t i_dts = -1;
mtime_t i_pts = -1;
p_pes->i_buffer -= i_skip;
p_pes->p_buffer += i_skip;
- if( i_dts >= 0 ) p_pes->i_dts = i_dts * 100 / 9;
- if( i_pts >= 0 ) p_pes->i_pts = i_pts * 100 / 9;
+ if( i_dts >= 0 )
+ p_pes->i_dts = VLC_TS_0 + i_dts * 100 / 9;
+ if( i_pts >= 0 )
+ p_pes->i_pts = VLC_TS_0 + i_pts * 100 / 9;
/* Set PCR */
if( p_pes->i_pts > 0 )
{
es_out_Control( p_demux->out, ES_OUT_SET_PCR, (int64_t)p_pes->i_pts);
- p_sys->b_pcr_audio = VLC_TRUE;
+ p_sys->b_pcr_audio = true;
}
es_out_Send( p_demux->out, p_sys->p_audio, p_pes );
}