X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Faccess%2Fdv.c;h=3f94f8d839256cf06032470195db9e8e65f1f4e1;hb=6ee1e193fd896ab9a4729fde14f009d9ce629815;hp=ab3dde62fc6f60abaf2e407521d24d77ff69d007;hpb=2cb472dba008f7d877ffe6bae9c5575253365282;p=vlc diff --git a/modules/access/dv.c b/modules/access/dv.c index ab3dde62fc..3f94f8d839 100644 --- a/modules/access/dv.c +++ b/modules/access/dv.c @@ -25,10 +25,8 @@ * Preamble *****************************************************************************/ #include -#include +#include -#include -#include #include #ifdef HAVE_SYS_TYPES_H # include @@ -67,8 +65,8 @@ static int Control( access_t *, int, va_list ); #define CACHING_TEXT N_("Caching value in ms") #define CACHING_LONGTEXT N_( \ - "Allows you to modify the default caching value for file streams. This " \ - "value should be set in millisecond units." ) + "Caching value for DV streams. This" \ + "value should be set in milliseconds." ) vlc_module_begin(); set_description( _("Digital Video (Firewire/ieee1394) input") ); @@ -142,17 +140,9 @@ static int Open( vlc_object_t *p_this ) msg_Dbg( p_access, "opening device %s", psz_name ); /* Set up p_access */ - p_access->pf_read = NULL; - p_access->pf_block = Block; - p_access->pf_control = Control; - p_access->pf_seek = NULL; - p_access->info.i_update = 0; - p_access->info.i_size = 0; - p_access->info.i_pos = 0; - p_access->info.b_eof = VLC_FALSE; + access_InitFields( p_access ); + ACCESS_SET_CALLBACKS( NULL, Block, Control, NULL ); p_access->info.b_prebuffered = VLC_FALSE; - p_access->info.i_title = 0; - p_access->info.i_seekpoint = 0; p_access->p_sys = p_sys = malloc( sizeof( access_sys_t ) ); if( !p_sys ) @@ -169,6 +159,7 @@ static int Open( vlc_object_t *p_this ) p_sys->p_raw1394 = NULL; p_sys->p_avc1394 = NULL; p_sys->p_frame = NULL; + p_sys->p_ev = NULL; vlc_mutex_init( p_access, &p_sys->lock ); @@ -229,6 +220,14 @@ static int Open( vlc_object_t *p_this ) /* Now create our event thread catcher */ p_sys->p_ev = vlc_object_create( p_access, sizeof( event_thread_t ) ); + if( !p_sys->p_ev ) + { + msg_Err( p_access, "failed to create event thread for %s", psz_name ); + Close( p_this ); + free( psz_name ); + return VLC_EGENERIC; + } + p_sys->p_ev->p_frame = NULL; p_sys->p_ev->pp_last = &p_sys->p_ev->p_frame; p_sys->p_ev->p_access = p_access; @@ -251,7 +250,7 @@ static void Close( vlc_object_t *p_this ) if( p_sys->p_ev ) { /* stop the event handler */ - p_sys->p_ev->b_die = VLC_TRUE; + vlc_object_kill( p_sys->p_ev ); if( p_sys->p_raw1394 ) raw1394_stop_iso_rcv( p_sys->p_raw1394, p_sys->i_channel ); @@ -294,14 +293,14 @@ static int Control( access_t *p_access, int i_query, va_list args ) switch( i_query ) { /* */ - case ACCESS_CAN_SEEK: - case ACCESS_CAN_FASTSEEK: case ACCESS_CAN_PAUSE: pb_bool = (vlc_bool_t*)va_arg( args, vlc_bool_t* ); *pb_bool = VLC_TRUE; break; - case ACCESS_CAN_CONTROL_PACE: + case ACCESS_CAN_SEEK: + case ACCESS_CAN_FASTSEEK: + case ACCESS_CAN_CONTROL_PACE: pb_bool = (vlc_bool_t*)va_arg( args, vlc_bool_t* ); *pb_bool = VLC_FALSE; break;