# include "config.h"
#endif
-#include <vlc/vlc.h>
+#include <vlc_common.h>
+#include <vlc_plugin.h>
#include <vlc_demux.h>
/* TODO:
static int Open ( vlc_object_t * );
static void Close ( vlc_object_t * );
-vlc_module_begin();
- set_description( _("NullSoft demuxer" ) );
- set_capability( "demux", 10 );
- set_category( CAT_INPUT );
- set_subcategory( SUBCAT_INPUT_DEMUX );
- set_callbacks( Open, Close );
- add_shortcut( "nsv" );
-vlc_module_end();
+vlc_module_begin ()
+ set_description( N_("NullSoft demuxer" ) )
+ set_capability( "demux", 10 )
+ set_category( CAT_INPUT )
+ set_subcategory( SUBCAT_INPUT_DEMUX )
+ set_callbacks( Open, Close )
+ add_shortcut( "nsv" )
+vlc_module_end ()
/*****************************************************************************
* Local prototypes
int64_t i_pcr;
int64_t i_time;
int64_t i_pcr_inc;
+
+ bool b_start_record;
};
static int Demux ( demux_t *p_demux );
p_sys->i_time = 0;
p_sys->i_pcr_inc = 0;
+ p_sys->b_start_record = false;
+
return VLC_SUCCESS;
}
if( !memcmp( p_peek, "NSVf", 4 ) )
{
if( ReadNSVf( p_demux ) )
- {
return -1;
- }
}
else if( !memcmp( p_peek, "NSVs", 4 ) )
{
- if( ReadNSVs( p_demux ) )
+ if( p_sys->b_start_record )
{
- return -1;
+ /* Enable recording once synchronized */
+ stream_Control( p_demux->s, STREAM_SET_RECORD_STATE, true, "nsv" );
+ p_sys->b_start_record = false;
}
+
+ if( ReadNSVs( p_demux ) )
+ return -1;
break;
}
else if( GetWLE( p_peek ) == 0xbeef )
{
msg_Err( p_demux, "invalid signature 0x%x (%4.4s)", GetDWLE( p_peek ), (const char*)p_peek );
if( ReSynch( p_demux ) )
- {
return -1;
- }
}
}
{
demux_sys_t *p_sys = p_demux->p_sys;
double f, *pf;
+ bool b_bool, *pb_bool;
int64_t i64, *pi64;
switch( i_query )
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;
- }
+
p_sys->i_time = -1; /* Invalidate time display */
return VLC_SUCCESS;
*pf = (double)1000000.0 / (double)p_sys->i_pcr_inc;
return VLC_SUCCESS;
+ case DEMUX_CAN_RECORD:
+ pb_bool = (bool*)va_arg( args, bool * );
+ *pb_bool = true;
+ return VLC_SUCCESS;
+
+ case DEMUX_SET_RECORD_STATE:
+ b_bool = (bool)va_arg( args, int );
+
+ if( !b_bool )
+ stream_Control( p_demux->s, STREAM_SET_RECORD_STATE, false );
+ p_sys->b_start_record = b_bool;
+ return VLC_SUCCESS;
+
+
case DEMUX_SET_TIME:
default:
return VLC_EGENERIC;
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 )
{