/***************************************************************************** * Close: *****************************************************************************/ static void Close( vlc_object_t *p_this ) { demux_t *p_demux = (demux_t*)p_this; demux_sys_t *p_sys = p_demux->p_sys; int result = 0; /* Stop data transmission */ result = dc1394_stop_iso_transmission( p_sys->fd_video, p_sys->camera.node ); if( result != DC1394_SUCCESS ) { msg_Err( p_demux, "couldn't stop the camera" ); } /* Close camera */ if( p_sys->dma_capture ) { dc1394_dma_unlisten( p_sys->fd_video, &p_sys->camera ); dc1394_dma_release_camera( p_sys->fd_video, &p_sys->camera ); } else { dc1394_release_camera( p_sys->fd_video, &p_sys->camera ); } if( p_sys->fd_video ) dc1394_destroy_handle( p_sys->fd_video ); CloseAudioDev( p_demux ); free( p_sys->camera_nodes ); free( p_sys->audio_device ); free( p_sys ); }
static void OpenAudioDev( demux_t *p_demux ) { demux_sys_t *p_sys = p_demux->p_sys; char *psz_device = p_sys->audio_device; int i_format = AFMT_S16_LE; int result; p_sys->fd_audio = open( psz_device, O_RDONLY | O_NONBLOCK ); if( p_sys->fd_audio < 0 ) { msg_Err( p_demux, "cannot open audio device (%s)", psz_device ); CloseAudioDev( p_demux ); } if( !p_sys->i_sample_rate ) p_sys->i_sample_rate = 44100; result = ioctl( p_sys->fd_audio, SNDCTL_DSP_SETFMT, &i_format ); if( (result < 0) || (i_format != AFMT_S16_LE) ) { msg_Err( p_demux, "cannot set audio format (16b little endian) " "(%d)", i_format ); CloseAudioDev( p_demux ); } result = ioctl( p_sys->fd_audio, SNDCTL_DSP_CHANNELS, &p_sys->channels ); if( result < 0 ) { msg_Err( p_demux, "cannot set audio channels count (%d)", p_sys->channels ); CloseAudioDev( p_demux ); } result = ioctl( p_sys->fd_audio, SNDCTL_DSP_SPEED, &p_sys->i_sample_rate ); if( result < 0 ) { msg_Err( p_demux, "cannot set audio sample rate (%s)", p_sys->i_sample_rate ); CloseAudioDev( p_demux ); } msg_Dbg( p_demux, "opened adev=`%s' %s %dHz", psz_device, (p_sys->channels > 1) ? "stereo" : "mono", p_sys->i_sample_rate ); p_sys->i_audio_max_frame_size = 32 * 1024; }
/***************************************************************************** * Close: *****************************************************************************/ static void Close( vlc_object_t *p_this ) { demux_t *p_demux = (demux_t*)p_this; demux_sys_t *p_sys = p_demux->p_sys; /* Stop data transmission */ if( dc1394_video_set_transmission( p_sys->camera, DC1394_OFF ) != DC1394_SUCCESS ) msg_Err( p_demux, "Unable to stop camera iso transmission" ); /* Close camera */ dc1394_capture_stop( p_sys->camera ); CloseAudioDev( p_demux ); dc1394_camera_free(p_sys->camera); dc1394_free(p_sys->p_dccontext); free( p_sys->video_device ); free( p_sys->audio_device ); free( p_sys ); }