X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Faccess%2Fv4l.c;h=00ccfb674059072c4b24a9c22c93c49f8e030660;hb=b48658bd32e48259689fe6b52a2f570f2cc9b004;hp=6c4d63314b5793f81dec3cf9822f7ced271f9871;hpb=6a46d6cc7e08e0a913e3d17db274f57791df8301;p=vlc diff --git a/modules/access/v4l.c b/modules/access/v4l.c index 6c4d63314b..00ccfb6740 100644 --- a/modules/access/v4l.c +++ b/modules/access/v4l.c @@ -27,12 +27,13 @@ /***************************************************************************** * Preamble *****************************************************************************/ -#define _GNU_SOURCE -#include -#include -#include -#include +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include +#include #include #include #include @@ -142,53 +143,53 @@ static void Close( vlc_object_t * ); static int i_norm_list[] = { VIDEO_MODE_AUTO, VIDEO_MODE_SECAM, VIDEO_MODE_PAL, VIDEO_MODE_NTSC }; -static const char *psz_norm_list_text[] = +static const char *const psz_norm_list_text[] = { N_("Automatic"), N_("SECAM"), N_("PAL"), N_("NTSC") }; vlc_module_begin(); - set_shortname( _("Video4Linux") ); - set_description( _("Video4Linux input") ); + set_shortname( N_("Video4Linux") ); + set_description( N_("Video4Linux input") ); set_category( CAT_INPUT ); set_subcategory( SUBCAT_INPUT_ACCESS ); add_integer( "v4l-caching", DEFAULT_PTS_DELAY / 1000, NULL, - CACHING_TEXT, CACHING_LONGTEXT, VLC_TRUE ); + CACHING_TEXT, CACHING_LONGTEXT, true ); add_string( "v4l-vdev", "/dev/video", 0, VDEV_TEXT, VDEV_LONGTEXT, - VLC_FALSE ); + false ); add_string( "v4l-adev", "/dev/dsp", 0, ADEV_TEXT, ADEV_LONGTEXT, - VLC_FALSE ); + false ); add_string( "v4l-chroma", NULL, NULL, CHROMA_TEXT, CHROMA_LONGTEXT, - VLC_TRUE ); - add_float( "v4l-fps", -1.0, NULL, FPS_TEXT, FPS_LONGTEXT, VLC_TRUE ); + true ); + add_float( "v4l-fps", -1.0, NULL, FPS_TEXT, FPS_LONGTEXT, true ); add_integer( "v4l-samplerate", 44100, NULL, SAMPLERATE_TEXT, - SAMPLERATE_LONGTEXT, VLC_TRUE ); + SAMPLERATE_LONGTEXT, true ); add_integer( "v4l-channel", 0, NULL, CHANNEL_TEXT, CHANNEL_LONGTEXT, - VLC_TRUE ); - add_integer( "v4l-tuner", -1, NULL, TUNER_TEXT, TUNER_LONGTEXT, VLC_TRUE ); + true ); + add_integer( "v4l-tuner", -1, NULL, TUNER_TEXT, TUNER_LONGTEXT, true ); add_integer( "v4l-norm", VIDEO_MODE_AUTO, NULL, NORM_TEXT, NORM_LONGTEXT, - VLC_FALSE ); + false ); change_integer_list( i_norm_list, psz_norm_list_text, 0 ); add_integer( "v4l-frequency", -1, NULL, FREQUENCY_TEXT, FREQUENCY_LONGTEXT, - VLC_FALSE ); - add_integer( "v4l-audio", -1, NULL, AUDIO_TEXT, AUDIO_LONGTEXT, VLC_TRUE ); - add_bool( "v4l-stereo", VLC_TRUE, NULL, STEREO_TEXT, STEREO_LONGTEXT, - VLC_TRUE ); - add_integer( "v4l-width", 0, NULL, WIDTH_TEXT, WIDTH_LONGTEXT, VLC_TRUE ); + false ); + add_integer( "v4l-audio", -1, NULL, AUDIO_TEXT, AUDIO_LONGTEXT, true ); + add_bool( "v4l-stereo", true, NULL, STEREO_TEXT, STEREO_LONGTEXT, + true ); + add_integer( "v4l-width", 0, NULL, WIDTH_TEXT, WIDTH_LONGTEXT, true ); add_integer( "v4l-height", 0, NULL, HEIGHT_TEXT, HEIGHT_LONGTEXT, - VLC_TRUE ); + true ); add_integer( "v4l-brightness", -1, NULL, BRIGHTNESS_TEXT, - BRIGHTNESS_LONGTEXT, VLC_TRUE ); + BRIGHTNESS_LONGTEXT, true ); add_integer( "v4l-colour", -1, NULL, COLOUR_TEXT, COLOUR_LONGTEXT, - VLC_TRUE ); - add_integer( "v4l-hue", -1, NULL, HUE_TEXT, HUE_LONGTEXT, VLC_TRUE ); + true ); + add_integer( "v4l-hue", -1, NULL, HUE_TEXT, HUE_LONGTEXT, true ); add_integer( "v4l-contrast", -1, NULL, CONTRAST_TEXT, CONTRAST_LONGTEXT, - VLC_TRUE ); - add_bool( "v4l-mjpeg", VLC_FALSE, NULL, MJPEG_TEXT, MJPEG_LONGTEXT, - VLC_TRUE ); + true ); + add_bool( "v4l-mjpeg", false, NULL, MJPEG_TEXT, MJPEG_LONGTEXT, + true ); add_integer( "v4l-decimation", 1, NULL, DECIMATION_TEXT, - DECIMATION_LONGTEXT, VLC_TRUE ); + DECIMATION_LONGTEXT, true ); add_integer( "v4l-quality", 100, NULL, QUALITY_TEXT, QUALITY_LONGTEXT, - VLC_TRUE ); + true ); add_shortcut( "v4l" ); set_capability( "access_demux", 10 ); @@ -282,7 +283,7 @@ struct demux_sys_t float f_fps; /* <= 0.0 mean to grab at full rate */ mtime_t i_video_pts; /* only used when f_fps > 0 */ - vlc_bool_t b_mjpeg; + bool b_mjpeg; int i_decimation; int i_quality; @@ -302,7 +303,7 @@ struct demux_sys_t /* Audio properties */ vlc_fourcc_t i_acodec_raw; int i_sample_rate; - vlc_bool_t b_stereo; + bool b_stereo; int i_audio_max_frame_size; block_t *p_block_audio; es_out_id_t *p_es_audio; @@ -431,14 +432,14 @@ static int Open( vlc_object_t *p_this ) p_sys->fd_audio = OpenAudioDev( p_demux, p_sys->psz_device ); if( p_sys->fd_audio >= 0 ) { - if( p_sys->psz_adev ) free( p_sys->psz_adev ); + free( p_sys->psz_adev ); p_sys->psz_adev = p_sys->psz_device; p_sys->psz_device = NULL; } } else { - if( p_sys->psz_vdev ) free( p_sys->psz_vdev ); + free( p_sys->psz_vdev ); p_sys->psz_vdev = p_sys->psz_device; p_sys->psz_device = NULL; } @@ -459,7 +460,7 @@ static int Open( vlc_object_t *p_this ) { if( !p_sys->psz_vdev || !*p_sys->psz_vdev ) { - if( p_sys->psz_vdev ) free( p_sys->psz_vdev ); + free( p_sys->psz_vdev ); p_sys->psz_vdev = var_CreateGetString( p_demux, "v4l-vdev" );; } @@ -474,7 +475,7 @@ static int Open( vlc_object_t *p_this ) { if( !p_sys->psz_adev || !*p_sys->psz_adev ) { - if( p_sys->psz_adev ) free( p_sys->psz_adev ); + free( p_sys->psz_adev ); p_sys->psz_adev = var_CreateGetString( p_demux, "v4l-adev" );; } @@ -548,9 +549,9 @@ 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; - if( p_sys->psz_device ) free( p_sys->psz_device ); - if( p_sys->psz_vdev ) free( p_sys->psz_vdev ); - if( p_sys->psz_adev ) free( p_sys->psz_adev ); + free( p_sys->psz_device ); + free( p_sys->psz_vdev ); + free( p_sys->psz_adev ); if( p_sys->fd_video >= 0 ) close( p_sys->fd_video ); if( p_sys->fd_audio >= 0 ) close( p_sys->fd_audio ); if( p_sys->p_block_audio ) block_Release( p_sys->p_block_audio ); @@ -578,17 +579,18 @@ static void Close( vlc_object_t *p_this ) *****************************************************************************/ static int Control( demux_t *p_demux, int i_query, va_list args ) { - vlc_bool_t *pb; + bool *pb; int64_t *pi64; switch( i_query ) { /* Special for access_demux */ case DEMUX_CAN_PAUSE: + case DEMUX_CAN_SEEK: case DEMUX_SET_PAUSE_STATE: case DEMUX_CAN_CONTROL_PACE: - pb = (vlc_bool_t*)va_arg( args, vlc_bool_t * ); - *pb = VLC_FALSE; + pb = (bool*)va_arg( args, bool * ); + *pb = false; return VLC_SUCCESS; case DEMUX_GET_PTS_DELAY: @@ -769,7 +771,7 @@ static void ParseMRL( demux_t *p_demux ) } else if( !strncmp( psz_parser, "hue=", strlen( "hue=" ) ) ) { - p_sys->i_hue = strtol( psz_parser + strlen( "hue=" ), + p_sys->i_hue = strtol( psz_parser + strlen( "hue=" ), &psz_parser, 0 ); } else if( !strncmp( psz_parser, "contrast=", strlen( "contrast=" ) ) ) @@ -811,19 +813,19 @@ static void ParseMRL( demux_t *p_demux ) { psz_parser += strlen( "stereo" ); - p_sys->b_stereo = VLC_TRUE; + p_sys->b_stereo = true; } else if( !strncmp( psz_parser, "mono", strlen( "mono" ) ) ) { psz_parser += strlen( "mono" ); - p_sys->b_stereo = VLC_FALSE; + p_sys->b_stereo = false; } else if( !strncmp( psz_parser, "mjpeg", strlen( "mjpeg" ) ) ) { psz_parser += strlen( "mjpeg" ); - p_sys->b_mjpeg = VLC_TRUE; + p_sys->b_mjpeg = true; } else if( !strncmp( psz_parser, "decimation=", strlen( "decimation=" ) ) ) @@ -865,7 +867,7 @@ static void ParseMRL( demux_t *p_demux ) { p_sys->psz_device = strdup( psz_dup ); } - if( psz_dup ) free( psz_dup ); + free( psz_dup ); } /***************************************************************************** @@ -882,13 +884,13 @@ static int OpenVideoDev( demux_t *p_demux, char *psz_device ) if( ( i_fd = open( psz_device, O_RDWR ) ) < 0 ) { - msg_Err( p_demux, "cannot open device (%s)", strerror( errno ) ); + msg_Err( p_demux, "cannot open device (%m)" ); goto vdev_failed; } if( ioctl( i_fd, VIDIOCGCAP, &p_sys->vid_cap ) < 0 ) { - msg_Err( p_demux, "cannot get capabilities (%s)", strerror( errno ) ); + msg_Err( p_demux, "cannot get capabilities (%m)" ); goto vdev_failed; } @@ -933,8 +935,7 @@ static int OpenVideoDev( demux_t *p_demux, char *psz_device ) vid_channel.channel = p_sys->i_channel; if( ioctl( i_fd, VIDIOCGCHAN, &vid_channel ) < 0 ) { - msg_Err( p_demux, "cannot get channel infos (%s)", - strerror( errno ) ); + msg_Err( p_demux, "cannot get channel infos (%m)" ); goto vdev_failed; } msg_Dbg( p_demux, @@ -951,7 +952,7 @@ static int OpenVideoDev( demux_t *p_demux, char *psz_device ) vid_channel.norm = p_sys->i_norm; if( ioctl( i_fd, VIDIOCSCHAN, &vid_channel ) < 0 ) { - msg_Err( p_demux, "cannot set channel (%s)", strerror( errno ) ); + msg_Err( p_demux, "cannot set channel (%m)" ); goto vdev_failed; } @@ -966,7 +967,7 @@ static int OpenVideoDev( demux_t *p_demux, char *psz_device ) vid_tuner.tuner = p_sys->i_tuner; if( ioctl( i_fd, VIDIOCGTUNER, &vid_tuner ) < 0 ) { - msg_Err( p_demux, "cannot get tuner (%s)", strerror( errno ) ); + msg_Err( p_demux, "cannot get tuner (%m)" ); goto vdev_failed; } msg_Dbg( p_demux, "tuner %s low=%d high=%d, flags=0x%x " @@ -981,7 +982,7 @@ static int OpenVideoDev( demux_t *p_demux, char *psz_device ) //vid_tuner.mode = p_sys->i_norm; if( ioctl( i_fd, VIDIOCSTUNER, &vid_tuner ) < 0 ) { - msg_Err( p_demux, "cannot set tuner (%s)", strerror( errno ) ); + msg_Err( p_demux, "cannot set tuner (%m)" ); goto vdev_failed; } } @@ -997,8 +998,7 @@ static int OpenVideoDev( demux_t *p_demux, char *psz_device ) int driver_frequency = p_sys->i_frequency * 16 /1000; if( ioctl( i_fd, VIDIOCSFREQ, &driver_frequency ) < 0 ) { - msg_Err( p_demux, "cannot set frequency (%s)", - strerror( errno ) ); + msg_Err( p_demux, "cannot set frequency (%m)" ); goto vdev_failed; } msg_Dbg( p_demux, "frequency %d (%d)", p_sys->i_frequency, @@ -1017,7 +1017,7 @@ static int OpenVideoDev( demux_t *p_demux, char *psz_device ) vid_audio.audio = p_sys->i_audio; if( ioctl( i_fd, VIDIOCGAUDIO, &vid_audio ) < 0 ) { - msg_Err( p_demux, "cannot get audio (%s)", strerror( errno ) ); + msg_Err( p_demux, "cannot get audio (%m)" ); goto vdev_failed; } @@ -1026,7 +1026,7 @@ static int OpenVideoDev( demux_t *p_demux, char *psz_device ) if( ioctl( i_fd, VIDIOCSAUDIO, &vid_audio ) < 0 ) { - msg_Err( p_demux, "cannot set audio (%s)", strerror( errno ) ); + msg_Err( p_demux, "cannot set audio (%m)" ); goto vdev_failed; } } @@ -1042,8 +1042,7 @@ static int OpenVideoDev( demux_t *p_demux, char *psz_device ) if( ioctl( i_fd, MJPIOC_G_PARAMS, &mjpeg ) < 0 ) { - msg_Err( p_demux, "cannot get mjpeg params (%s)", - strerror( errno ) ); + msg_Err( p_demux, "cannot get mjpeg params (%m)" ); goto vdev_failed; } mjpeg.input = p_sys->i_channel; @@ -1093,8 +1092,7 @@ static int OpenVideoDev( demux_t *p_demux, char *psz_device ) if( ioctl( i_fd, MJPIOC_S_PARAMS, &mjpeg ) < 0 ) { - msg_Err( p_demux, "cannot set mjpeg params (%s)", - strerror( errno ) ); + msg_Err( p_demux, "cannot set mjpeg params (%m)" ); goto vdev_failed; } @@ -1110,7 +1108,7 @@ static int OpenVideoDev( demux_t *p_demux, char *psz_device ) if( ioctl( i_fd, VIDIOCGWIN, &vid_win ) < 0 ) { - msg_Err( p_demux, "cannot get win (%s)", strerror( errno ) ); + msg_Err( p_demux, "cannot get win (%m)" ); goto vdev_failed; } p_sys->i_width = vid_win.width; @@ -1340,7 +1338,7 @@ static int OpenAudioDev( demux_t *p_demux, char *psz_device ) if( (i_fd = open( psz_device, O_RDONLY | O_NONBLOCK )) < 0 ) { - msg_Err( p_demux, "cannot open audio device (%s)", strerror( errno ) ); + msg_Err( p_demux, "cannot open audio device (%m)" ); goto adev_fail; } @@ -1349,27 +1347,25 @@ static int OpenAudioDev( demux_t *p_demux, char *psz_device ) || i_format != AFMT_S16_LE ) { msg_Err( p_demux, "cannot set audio format (16b little endian) " - "(%s)", strerror( errno ) ); + "(%m)" ); goto adev_fail; } if( ioctl( i_fd, SNDCTL_DSP_STEREO, &p_sys->b_stereo ) < 0 ) { - msg_Err( p_demux, "cannot set audio channels count (%s)", - strerror( errno ) ); + msg_Err( p_demux, "cannot set audio channels count (%m)" ); goto adev_fail; } if( ioctl( i_fd, SNDCTL_DSP_SPEED, &p_sys->i_sample_rate ) < 0 ) { - msg_Err( p_demux, "cannot set audio sample rate (%s)", - strerror( errno ) ); + msg_Err( p_demux, "cannot set audio sample rate (%m)" ); goto adev_fail; } - msg_Dbg( p_demux, "openened adev=`%s' %s %dHz", + msg_Dbg( p_demux, "opened adev=`%s' %s %dHz", psz_device, p_sys->b_stereo ? "stereo" : "mono", p_sys->i_sample_rate ); @@ -1420,7 +1416,7 @@ static block_t *GrabAudio( demux_t *p_demux ) } p_block->i_pts = p_block->i_dts = - mdate() - I64C(1000000) * (mtime_t)i_correct / + mdate() - INT64_C(1000000) * (mtime_t)i_correct / 2 / ( p_sys->b_stereo ? 2 : 1) / p_sys->i_sample_rate; return p_block; @@ -1444,7 +1440,7 @@ static uint8_t *GrabCapture( demux_t *p_demux ) return NULL; } - if( p_demux->b_die ) + if( !vlc_object_alive (p_demux) ) { return NULL; } @@ -1454,7 +1450,7 @@ static uint8_t *GrabCapture( demux_t *p_demux ) while( ioctl(p_sys->fd_video, VIDIOCSYNC, &p_sys->i_frame_pos) < 0 ) { - if( errno != EAGAIN && errno != EINTR ) + if( errno != EAGAIN && errno != EINTR ) { msg_Err( p_demux, "failed syncing new frame" ); return NULL; @@ -1492,7 +1488,7 @@ static uint8_t *GrabMJPEG( demux_t *p_demux ) /* sync on the next frame */ while( ioctl( p_sys->fd_video, MJPIOC_SYNC, &sync ) < 0 ) { - if( errno != EAGAIN && errno != EINTR ) + if( errno != EAGAIN && errno != EINTR ) { msg_Err( p_demux, "failed syncing new frame" ); return NULL;