# This patch adds libv4l support to mplayer # by JP Guillemin Tue Oct 28 22:18:58 CET 2008 diff -rNaud mplayer-1.0rc2-orig/configure mplayer-1.0rc2/configure --- mplayer-1.0rc2-orig/configure 2007-10-07 21:49:33.000000000 +0200 +++ mplayer-1.0rc2/configure 2008-10-28 22:14:08.000000000 +0100 @@ -4974,6 +4974,7 @@ _vomodules="v4l2 $_vomodules" _aosrc="$_aosrc ao_v4l2.c" _aomodules="v4l2 $_aomodules" + _libs_mplayer="$_libs_mplayer `$_pkg_config --libs libv4l2`" else _def_v4l2='#undef HAVE_V4L2_DECODER' _novomodules="v4l2 $_novomodules" @@ -6827,6 +6828,7 @@ _def_tv_v4l='#define HAVE_TV_V4L 1' _def_tv_v4l1='#define HAVE_TV_V4L1 1' _inputmodules="tv-v4l $_inputmodules" + _libs_mplayer="$_libs_mplayer `$_pkg_config --libs libv4l1`" else _noinputmodules="tv-v4l1 $_noinputmodules" _def_tv_v4l='#undef HAVE_TV_V4L' @@ -6853,6 +6855,7 @@ _def_tv_v4l='#define HAVE_TV_V4L 1' _def_tv_v4l2='#define HAVE_TV_V4L2 1' _inputmodules="tv-v4l2 $_inputmodules" + _libs_mplayer="$_libs_mplayer `$_pkg_config --libs libv4l2`" else _noinputmodules="tv-v4l2 $_noinputmodules" _def_tv_v4l2='#undef HAVE_TV_V4L2' diff -rNaud mplayer-1.0rc2-orig/stream/tvi_v4l.c mplayer-1.0rc2/stream/tvi_v4l.c --- mplayer-1.0rc2-orig/stream/tvi_v4l.c 2007-10-07 21:49:26.000000000 +0200 +++ mplayer-1.0rc2/stream/tvi_v4l.c 2008-10-28 22:14:27.000000000 +0100 @@ -29,6 +29,7 @@ #define _LINUX_TIME_H #include +#include #include #include #include @@ -336,7 +337,7 @@ } priv->audio[i].audio = i; - if (ioctl(priv->video_fd, VIDIOCGAUDIO, &priv->audio[i]) == -1) + if (v4l1_ioctl(priv->video_fd, VIDIOCGAUDIO, &priv->audio[i]) == -1) { mp_msg(MSGT_TV, MSGL_ERR, "ioctl get audio failed: %s\n", strerror(errno)); break; @@ -365,10 +366,10 @@ } if (reqmode >= 0) priv->audio[i].mode = reqmode; } - ioctl(priv->video_fd, VIDIOCSAUDIO, &priv->audio[i]); + v4l1_ioctl(priv->video_fd, VIDIOCSAUDIO, &priv->audio[i]); // get the parameters back - if (ioctl(priv->video_fd, VIDIOCGAUDIO, &priv->audio[i]) == -1) + if (v4l1_ioctl(priv->video_fd, VIDIOCGAUDIO, &priv->audio[i]) == -1) { mp_msg(MSGT_TV, MSGL_ERR, "ioctl get audio failed: %s\n", strerror(errno)); break; @@ -447,7 +448,7 @@ priv->audio_ringbuffer = NULL; priv->audio_skew_buffer = NULL; - priv->video_fd = open(priv->video_device, O_RDWR); + priv->video_fd = v4l1_open(priv->video_device, O_RDWR); mp_msg(MSGT_TV, MSGL_DBG2, "Video fd: %d, %p\n", priv->video_fd, priv->video_device); if (priv->video_fd == -1) @@ -458,7 +459,7 @@ } /* check for v4l2 */ - if (ioctl(priv->video_fd, VIDIOC_QUERYCAP, &priv->capability) == 0) { + if (v4l1_ioctl(priv->video_fd, VIDIOC_QUERYCAP, &priv->capability) == 0) { mp_msg(MSGT_TV, MSGL_ERR, "=================================================================\n"); mp_msg(MSGT_TV, MSGL_ERR, " WARNING: YOU ARE USING V4L DEMUXER WITH V4L2 DRIVERS!!!\n"); mp_msg(MSGT_TV, MSGL_ERR, " As the V4L1 compatibility layer is broken, this may not work.\n"); @@ -468,7 +469,7 @@ } /* get capabilities (priv->capability is needed!) */ - if (ioctl(priv->video_fd, VIDIOCGCAP, &priv->capability) == -1) + if (v4l1_ioctl(priv->video_fd, VIDIOCGCAP, &priv->capability) == -1) { mp_msg(MSGT_TV, MSGL_ERR, "ioctl get capabilites failed: %s\n", strerror(errno)); goto err; @@ -497,7 +498,7 @@ struct mjpeg_params bparm; struct mjpeg_requestbuffers breq; /* buffer requests */ - if (ioctl(priv->video_fd, MJPIOC_G_PARAMS, &bparm) < 0) + if (v4l1_ioctl(priv->video_fd, MJPIOC_G_PARAMS, &bparm) < 0) { mp_msg(MSGT_TV, MSGL_ERR, " MJP: Error getting video parameters: %s\n", strerror(errno)); @@ -526,14 +527,14 @@ mp_msg(MSGT_TV, MSGL_INFO, " MJP: setting params to decimation: %d, quality: %d\n", bparm.decimation, bparm.quality); - if (ioctl(priv->video_fd, MJPIOC_S_PARAMS, &bparm) < 0) + if (v4l1_ioctl(priv->video_fd, MJPIOC_S_PARAMS, &bparm) < 0) { mp_msg(MSGT_TV, MSGL_ERR, " MJP: Error setting video parameters: %s\n", strerror(errno)); goto err; } - if (ioctl(priv->video_fd, MJPIOC_G_PARAMS, &bparm) < 0) + if (v4l1_ioctl(priv->video_fd, MJPIOC_G_PARAMS, &bparm) < 0) { mp_msg(MSGT_TV, MSGL_ERR, " MJP: Error getting video parameters: %s\n", strerror(errno)); @@ -557,7 +558,7 @@ if (priv->tv_param->buffer_size >= 0) priv->mjpeg_bufsize = priv->tv_param->buffer_size*1024; breq.size = priv -> mjpeg_bufsize; - if (ioctl(priv->video_fd, MJPIOC_REQBUFS,&(breq)) < 0) + if (v4l1_ioctl(priv->video_fd, MJPIOC_REQBUFS,&(breq)) < 0) { mp_msg (MSGT_TV, MSGL_ERR, " MJP: Error requesting video buffers: %s\n", strerror(errno)); @@ -567,7 +568,7 @@ " MJP: Got %ld buffers of size %ld KB\n", breq.count, breq.size/1024); - priv -> mmap = mmap(0, breq.count * breq.size, + priv -> mmap = v4l1_mmap(0, breq.count * breq.size, PROT_READ|PROT_WRITE, MAP_SHARED, priv->video_fd, 0); if (priv -> mmap == MAP_FAILED) { @@ -585,7 +586,7 @@ for (i = 0; i < priv->capability.channels; i++) { priv->channels[i].channel = i; - if (ioctl(priv->video_fd, VIDIOCGCHAN, &priv->channels[i]) == -1) + if (v4l1_ioctl(priv->video_fd, VIDIOCGCHAN, &priv->channels[i]) == -1) { mp_msg(MSGT_TV, MSGL_ERR, "ioctl get channel failed: %s\n", strerror(errno)); break; @@ -656,7 +657,7 @@ free(priv->buf); err: if (priv->video_fd != -1) - close(priv->video_fd); + v4l1_close(priv->video_fd); return(0); } @@ -673,7 +674,7 @@ priv->priv_vbi=NULL; if(priv->vbi_fd){ - close(priv->vbi_fd); + v4l1_close(priv->vbi_fd); priv->vbi_fd=0; } @@ -698,23 +699,23 @@ if (priv->capability.audios) { priv->audio[priv->audio_id].flags |= VIDEO_AUDIO_MUTE; - ioctl(priv->video_fd, VIDIOCSAUDIO, &priv->audio[priv->audio_id]); + v4l1_ioctl(priv->video_fd, VIDIOCSAUDIO, &priv->audio[priv->audio_id]); } if ( priv->tv_param->mjpeg ) { num = -1; - if (ioctl(priv->video_fd, MJPIOC_QBUF_CAPT, &num) < 0) + if (v4l1_ioctl(priv->video_fd, MJPIOC_QBUF_CAPT, &num) < 0) mp_msg(MSGT_TV, MSGL_ERR, "\n MJP: ioctl MJPIOC_QBUF_CAPT failed: %s\n", strerror(errno)); } else { // We need to munmap as close don't close mem mappings - if(munmap(priv->mmap,priv->mbuf.size)) + if(v4l1_munmap(priv->mmap,priv->mbuf.size)) mp_msg(MSGT_TV, MSGL_ERR, "Munmap failed: %s\n",strerror(errno)); } - if(close(priv->video_fd)) + if(v4l1_close(priv->video_fd)) mp_msg(MSGT_TV, MSGL_ERR, "Close tv failed: %s\n",strerror(errno)); audio_in_uninit(&priv->audio_in); @@ -779,20 +780,20 @@ priv->vbi_dev=strdup(device); - vbi_fd=open(priv->vbi_dev,O_RDWR); + vbi_fd=v4l1_open(priv->vbi_dev,O_RDWR); if(vbi_fd<0){ mp_msg(MSGT_TV,MSGL_ERR,"vbi: could not open device %s\n",priv->vbi_dev); return TVI_CONTROL_FALSE; } - if(ioctl(vbi_fd,VIDIOCGCAP,&cap)<0){ + if(v4l1_ioctl(vbi_fd,VIDIOCGCAP,&cap)<0){ mp_msg(MSGT_TV,MSGL_ERR,"vbi: Query capatibilities failed for %s\n",priv->vbi_dev); - close(vbi_fd); + v4l1_close(vbi_fd); return TVI_CONTROL_FALSE; } if(!cap.type & VID_TYPE_CAPTURE){ mp_msg(MSGT_TV,MSGL_ERR,"vbi: %s is not capture device\n",priv->vbi_dev); - close(vbi_fd); + v4l1_close(vbi_fd); return TVI_CONTROL_FALSE; } @@ -809,7 +810,7 @@ return TVI_CONTROL_FALSE; memset(&fmt,0,sizeof(struct vbi_format)); - if((res=ioctl(priv->vbi_fd,VIDIOCGVBIFMT,&fmt))<0){ + if((res=v4l1_ioctl(priv->vbi_fd,VIDIOCGVBIFMT,&fmt))<0){ mp_msg(MSGT_TV,MSGL_ERR,"vbi_get_props: Query format failed: %x\n",res); return TVI_CONTROL_FALSE; } @@ -864,7 +865,7 @@ mp_msg(MSGT_TV,MSGL_V,"vbi: vbi capture thread started.\n"); while (!priv->vbi_shutdown){ - bytes=read(priv->vbi_fd,buf,tsp.bufsize); + bytes=v4l1_read(priv->vbi_fd,buf,tsp.bufsize); if (bytes!=tsp.bufsize){ mp_msg(MSGT_TV,MSGL_WARN,"vbi: expecting bytes: %d, got: %d",tsp.bufsize,bytes); break; @@ -890,7 +891,7 @@ int bytes_per_sample; struct video_window win; - if (ioctl(priv->video_fd, VIDIOCGPICT, &priv->picture) == -1) + if (v4l1_ioctl(priv->video_fd, VIDIOCGPICT, &priv->picture) == -1) { mp_msg(MSGT_TV, MSGL_ERR, "ioctl get picture failed: %s\n", strerror(errno)); return(0); @@ -912,7 +913,7 @@ priv->picture.brightness, priv->picture.hue, priv->picture.colour, priv->picture.contrast); - if (ioctl(priv->video_fd, VIDIOCSPICT, &priv->picture) == -1) + if (v4l1_ioctl(priv->video_fd, VIDIOCSPICT, &priv->picture) == -1) { mp_msg(MSGT_TV, MSGL_ERR, "ioctl set picture failed: %s\n", strerror(errno)); mp_msg(MSGT_TV, MSGL_ERR, "The 'outfmt' of '%s' is likely not supported by your card\n", @@ -928,13 +929,13 @@ win.chromakey = -1; win.flags = 0; win.clipcount = 0; - if (ioctl(priv->video_fd, VIDIOCSWIN, &win) == -1) + if (v4l1_ioctl(priv->video_fd, VIDIOCSWIN, &win) == -1) mp_msg(MSGT_TV, MSGL_ERR, "ioctl set window failed: %s\n", strerror(errno)); if ( !priv->tv_param->mjpeg ) { /* map grab buffer */ - if (ioctl(priv->video_fd, VIDIOCGMBUF, &priv->mbuf) == -1) + if (v4l1_ioctl(priv->video_fd, VIDIOCGMBUF, &priv->mbuf) == -1) { mp_msg(MSGT_TV, MSGL_ERR, "ioctl get mbuf failed: %s\n", strerror(errno)); return 0; @@ -942,7 +943,7 @@ mp_msg(MSGT_TV, MSGL_V, "mbuf: size=%d, frames=%d\n", priv->mbuf.size, priv->mbuf.frames); - priv->mmap = mmap(0, priv->mbuf.size, PROT_READ|PROT_WRITE, + priv->mmap = v4l1_mmap(0, priv->mbuf.size, PROT_READ|PROT_WRITE, MAP_SHARED, priv->video_fd, 0); if (priv->mmap == (unsigned char *)-1) { @@ -981,7 +982,7 @@ pmode.mode = VID_PLAY_NORMAL; pmode.p1 = 1; pmode.p2 = 0; - if (ioctl(priv->video_fd, VIDIOCSPLAYMODE, &pmode) == -1) + if (v4l1_ioctl(priv->video_fd, VIDIOCSPLAYMODE, &pmode) == -1) { mp_msg(MSGT_TV, MSGL_ERR, "ioctl set play mode failed: %s\n", strerror(errno)); // return(0); @@ -991,7 +992,7 @@ #if 0 // initialize video capture - if (ioctl(priv->video_fd, VIDIOCCAPTURE, &one) == -1) + if (v4l1_ioctl(priv->video_fd, VIDIOCCAPTURE, &one) == -1) { mp_msg(MSGT_TV, MSGL_ERR, "FATAL: ioctl ccapture failed: %s\n", strerror(errno)); return(0); @@ -1093,7 +1094,7 @@ priv->audio[priv->audio_id].volume, priv->audio[priv->audio_id].bass, priv->audio[priv->audio_id].treble, priv->audio[priv->audio_id].balance, audio_mode2name(priv->audio[priv->audio_id].mode)); mp_msg(MSGT_TV, MSGL_V, " chan=%d\n", priv->audio_channels[priv->audio_id]); - ioctl(priv->video_fd, VIDIOCSAUDIO, &priv->audio[priv->audio_id]); + v4l1_ioctl(priv->video_fd, VIDIOCSAUDIO, &priv->audio[priv->audio_id]); } #ifdef HAVE_TV_TELETEXT @@ -1218,14 +1219,14 @@ priv->height = *(int *)arg; return(TVI_CONTROL_TRUE); case TVI_CONTROL_VID_GET_PICTURE: - if (ioctl(priv->video_fd, VIDIOCGPICT, &priv->picture) == -1) + if (v4l1_ioctl(priv->video_fd, VIDIOCGPICT, &priv->picture) == -1) { mp_msg(MSGT_TV, MSGL_ERR, "ioctl get picture failed: %s\n", strerror(errno)); return(TVI_CONTROL_FALSE); } return(TVI_CONTROL_TRUE); case TVI_CONTROL_VID_SET_PICTURE: - if (ioctl(priv->video_fd, VIDIOCSPICT, &priv->picture) == -1) + if (v4l1_ioctl(priv->video_fd, VIDIOCSPICT, &priv->picture) == -1) { mp_msg(MSGT_TV, MSGL_ERR, "ioctl set picture failed: %s\n", strerror(errno)); return(TVI_CONTROL_FALSE); @@ -1268,7 +1269,7 @@ { unsigned long freq; - if (ioctl(priv->video_fd, VIDIOCGFREQ, &freq) == -1) + if (v4l1_ioctl(priv->video_fd, VIDIOCGFREQ, &freq) == -1) { mp_msg(MSGT_TV, MSGL_ERR, "ioctl get freq failed: %s\n", strerror(errno)); return(TVI_CONTROL_FALSE); @@ -1287,7 +1288,7 @@ if (priv->capability.audios) { priv->audio[priv->audio_id].flags |= VIDEO_AUDIO_MUTE; - ioctl(priv->video_fd, VIDIOCSAUDIO, &priv->audio[priv->audio_id]); + v4l1_ioctl(priv->video_fd, VIDIOCSAUDIO, &priv->audio[priv->audio_id]); } mp_msg(MSGT_TV, MSGL_V, "requested frequency: %.3f\n", (float)freq/16); @@ -1296,7 +1297,7 @@ // if (priv->tuner.flags & VIDEO_TUNER_LOW) // freq *= 1000; // mp_msg(MSGT_TV, MSGL_V, " requesting from driver: freq=%.3f\n", (float)freq/16); - if (ioctl(priv->video_fd, VIDIOCSFREQ, &freq) == -1) + if (v4l1_ioctl(priv->video_fd, VIDIOCSFREQ, &freq) == -1) { mp_msg(MSGT_TV, MSGL_ERR, "ioctl set freq failed: %s\n", strerror(errno)); return(TVI_CONTROL_FALSE); @@ -1305,14 +1306,14 @@ if (priv->capability.audios) { priv->audio[priv->audio_id].flags &= ~VIDEO_AUDIO_MUTE; - ioctl(priv->video_fd, VIDIOCSAUDIO, &priv->audio[priv->audio_id]); + v4l1_ioctl(priv->video_fd, VIDIOCSAUDIO, &priv->audio[priv->audio_id]); } return(TVI_CONTROL_TRUE); } case TVI_CONTROL_TUN_GET_TUNER: { - if (ioctl(priv->video_fd, VIDIOCGTUNER, &priv->tuner) == -1) + if (v4l1_ioctl(priv->video_fd, VIDIOCGTUNER, &priv->tuner) == -1) { mp_msg(MSGT_TV, MSGL_ERR, "ioctl get tuner failed: %s\n", strerror(errno)); return(TVI_CONTROL_FALSE); @@ -1324,7 +1325,7 @@ } case TVI_CONTROL_TUN_SET_TUNER: { - if (ioctl(priv->video_fd, VIDIOCSTUNER, &priv->tuner) == -1) + if (v4l1_ioctl(priv->video_fd, VIDIOCSTUNER, &priv->tuner) == -1) { mp_msg(MSGT_TV, MSGL_ERR, "ioctl set tuner failed: %s\n", strerror(errno)); return(TVI_CONTROL_FALSE); @@ -1406,13 +1407,13 @@ priv->channels[priv->act_channel].norm = 6; break; } - if (ioctl(priv->video_fd, VIDIOCSCHAN, &priv->channels[priv->act_channel]) == -1) + if (v4l1_ioctl(priv->video_fd, VIDIOCSCHAN, &priv->channels[priv->act_channel]) == -1) { mp_msg(MSGT_TV, MSGL_ERR, "ioctl set chan failed: %s\n", strerror(errno)); return(TVI_CONTROL_FALSE); } - if (ioctl(priv->video_fd, VIDIOCGCAP, &priv->capability) == -1) { + if (v4l1_ioctl(priv->video_fd, VIDIOCGCAP, &priv->capability) == -1) { mp_msg(MSGT_TV, MSGL_ERR, "ioctl get capabilites failed: %s\n", strerror(errno)); return(TVI_CONTROL_FALSE); } @@ -1443,7 +1444,7 @@ } case TVI_CONTROL_TUN_GET_SIGNAL: { - if (ioctl(priv->video_fd, VIDIOCGTUNER, &priv->tuner) == -1) + if (v4l1_ioctl(priv->video_fd, VIDIOCGTUNER, &priv->tuner) == -1) { mp_msg(MSGT_TV, MSGL_ERR, "ioctl get tuner failed: %s\n", strerror(errno)); return(TVI_CONTROL_FALSE); @@ -1493,7 +1494,7 @@ priv->act_channel = i; - if (ioctl(priv->video_fd, VIDIOCGCHAN, &priv->channels[i]) == -1) + if (v4l1_ioctl(priv->video_fd, VIDIOCGCHAN, &priv->channels[i]) == -1) { mp_msg(MSGT_TV, MSGL_ERR, "ioctl get channel failed: %s\n", strerror(errno)); return(TVI_CONTROL_FALSE); @@ -1520,7 +1521,7 @@ chan = priv->channels[i]; } - if (ioctl(priv->video_fd, VIDIOCSCHAN, &chan) == -1) + if (v4l1_ioctl(priv->video_fd, VIDIOCSCHAN, &chan) == -1) { mp_msg(MSGT_TV, MSGL_ERR, "ioctl set chan failed: %s\n", strerror(errno)); return(TVI_CONTROL_FALSE); @@ -1577,7 +1578,7 @@ else priv->audio[priv->audio_id].flags &= ~VIDEO_AUDIO_MUTE; } - if(ioctl(priv->video_fd, VIDIOCSAUDIO, &priv->audio[priv->audio_id])<0) + if(v4l1_ioctl(priv->video_fd, VIDIOCSAUDIO, &priv->audio[priv->audio_id])<0) return 0; return 1; } @@ -1587,7 +1588,7 @@ static inline void copy_frame(priv_t *priv, unsigned char *dest, unsigned char *source) { if(priv->tv_param->automute>0){ - if (ioctl(priv->video_fd, VIDIOCGTUNER, &priv->tuner) >= 0) { + if (v4l1_ioctl(priv->video_fd, VIDIOCGTUNER, &priv->tuner) >= 0) { if(priv->tv_param->automute<<8>priv->tuner.signal){ fill_blank_frame(dest,priv->bytesperline * priv->height,priv->format); set_mute(priv,1); @@ -1628,7 +1629,7 @@ mp_msg(MSGT_TV, MSGL_INFO, " MJP: gonna capture ! \n"); for (i=0; i < priv->nbuf; i++) { num = i; - if (ioctl(priv->video_fd, MJPIOC_QBUF_CAPT, &num) < 0) + if (v4l1_ioctl(priv->video_fd, MJPIOC_QBUF_CAPT, &num) < 0) mp_msg(MSGT_TV, MSGL_ERR, "\n MJP: ioctl MJPIOC_QBUF_CAPT b failed: %s\n", strerror(errno)); } @@ -1636,7 +1637,7 @@ else { for (i=0; i < priv->nbuf; i++) { - if (ioctl(priv->video_fd, VIDIOCMCAPTURE, &priv->buf[i]) == -1) + if (v4l1_ioctl(priv->video_fd, VIDIOCMCAPTURE, &priv->buf[i]) == -1) mp_msg(MSGT_TV, MSGL_ERR, "\nioctl mcapture failed: %s\n", strerror(errno)); } } @@ -1671,12 +1672,12 @@ if ( priv->tv_param->mjpeg ) { - while (ioctl(priv->video_fd, MJPIOC_SYNC, &priv->buf[frame].frame) < 0 && + while (v4l1_ioctl(priv->video_fd, MJPIOC_SYNC, &priv->buf[frame].frame) < 0 && (errno == EAGAIN || errno == EINTR)); } else { - while (ioctl(priv->video_fd, VIDIOCSYNC, &priv->buf[frame].frame) < 0 && + while (v4l1_ioctl(priv->video_fd, VIDIOCSYNC, &priv->buf[frame].frame) < 0 && (errno == EAGAIN || errno == EINTR)); } mp_dbg(MSGT_TV, MSGL_DBG3, "\npicture sync failed\n"); @@ -1794,7 +1795,7 @@ if ( priv->tv_param->mjpeg ) { num = frame; - if (ioctl(priv->video_fd, MJPIOC_QBUF_CAPT, &num) < 0) + if (v4l1_ioctl(priv->video_fd, MJPIOC_QBUF_CAPT, &num) < 0) { mp_msg(MSGT_TV, MSGL_ERR, "\n MJP: ioctl MJPIOC_QBUF_CAPT end failed: %s\n", strerror(errno)); @@ -1803,7 +1804,7 @@ } else { - if (ioctl(priv->video_fd, VIDIOCMCAPTURE, &priv->buf[frame]) == -1) + if (v4l1_ioctl(priv->video_fd, VIDIOCMCAPTURE, &priv->buf[frame]) == -1) { mp_msg(MSGT_TV, MSGL_ERR, "\nioctl mcapture failed: %s\n", strerror(errno)); continue; diff -rNaud mplayer-1.0rc2-orig/stream/tvi_v4l2.c mplayer-1.0rc2/stream/tvi_v4l2.c --- mplayer-1.0rc2-orig/stream/tvi_v4l2.c 2007-10-07 21:49:26.000000000 +0200 +++ mplayer-1.0rc2/stream/tvi_v4l2.c 2008-10-28 22:14:27.000000000 +0100 @@ -40,12 +40,15 @@ #endif #include #include +#include + #include "mp_msg.h" #include "libmpcodecs/img_format.h" #include "libaf/af_format.h" #include "tv.h" #include "audio_in.h" + #define info tvi_info_v4l2 static tvi_handle_t *tvi_init_v4l2(tv_param_t* tv_param); /* information about this file */ @@ -421,7 +424,7 @@ int i; priv->format.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; - if ((i = ioctl(priv->video_fd, VIDIOC_G_FMT, &priv->format)) < 0) { + if ((i = v4l2_ioctl(priv->video_fd, VIDIOC_G_FMT, &priv->format)) < 0) { mp_msg(MSGT_TV, MSGL_ERR, "%s: ioctl get format failed: %s\n", info.short_name, strerror(errno)); } @@ -437,14 +440,14 @@ v4l2_std_id id; int i=0; - if (ioctl(priv->video_fd, VIDIOC_G_STD, &id) < 0) { + if (v4l2_ioctl(priv->video_fd, VIDIOC_G_STD, &id) < 0) { mp_msg(MSGT_TV, MSGL_ERR, "%s: ioctl get standard failed: %s\n", info.short_name, strerror(errno)); return -1; } do { priv->standard.index = i++; - if (ioctl(priv->video_fd, VIDIOC_ENUMSTD, &priv->standard) < 0) { + if (v4l2_ioctl(priv->video_fd, VIDIOC_ENUMSTD, &priv->standard) < 0) { return -1; } } while (priv->standard.id != id); @@ -464,7 +467,7 @@ struct v4l2_control control; control.id = V4L2_CID_AUDIO_MUTE; control.value = value; - if (ioctl(priv->video_fd, VIDIOC_S_CTRL, &control) < 0) { + if (v4l2_ioctl(priv->video_fd, VIDIOC_S_CTRL, &control) < 0) { mp_msg(MSGT_TV,MSGL_ERR,"%s: ioctl set mute failed: %s\n", info.short_name, strerror(errno)); return 0; @@ -479,7 +482,7 @@ static int set_control(priv_t *priv, struct v4l2_control *control, int val_signed) { struct v4l2_queryctrl qctrl; qctrl.id = control->id; - if (ioctl(priv->video_fd, VIDIOC_QUERYCTRL, &qctrl) < 0) { + if (v4l2_ioctl(priv->video_fd, VIDIOC_QUERYCTRL, &qctrl) < 0) { mp_msg(MSGT_TV, MSGL_ERR, "%s: ioctl query control failed: %s\n", info.short_name, strerror(errno)); return TVI_CONTROL_FALSE; @@ -504,7 +507,7 @@ } - if (ioctl(priv->video_fd, VIDIOC_S_CTRL, control) < 0) { + if (v4l2_ioctl(priv->video_fd, VIDIOC_S_CTRL, control) < 0) { mp_msg(MSGT_TV, MSGL_ERR,"%s: ioctl set %s %d failed: %s\n", info.short_name, qctrl.name, control->value, strerror(errno)); return TVI_CONTROL_FALSE; @@ -523,13 +526,13 @@ struct v4l2_queryctrl qctrl; qctrl.id = control->id; - if (ioctl(priv->video_fd, VIDIOC_QUERYCTRL, &qctrl) < 0) { + if (v4l2_ioctl(priv->video_fd, VIDIOC_QUERYCTRL, &qctrl) < 0) { mp_msg(MSGT_TV, MSGL_ERR, "%s: ioctl query control failed: %s\n", info.short_name, strerror(errno)); return TVI_CONTROL_FALSE; } - if (ioctl(priv->video_fd, VIDIOC_G_CTRL, control) < 0) { + if (v4l2_ioctl(priv->video_fd, VIDIOC_G_CTRL, control) < 0) { mp_msg(MSGT_TV, MSGL_ERR,"%s: ioctl get %s failed: %s\n", info.short_name, qctrl.name, strerror(errno)); return TVI_CONTROL_FALSE; @@ -571,33 +574,33 @@ priv->vbi_dev=strdup(device); - vbi_fd=open(priv->vbi_dev,O_RDWR); + vbi_fd=v4l2_open(priv->vbi_dev,O_RDWR); if(vbi_fd<0){ mp_msg(MSGT_TV,MSGL_ERR,"vbi: could not open device %s\n",priv->vbi_dev); return TVI_CONTROL_FALSE; } - if(ioctl(vbi_fd,VIDIOC_QUERYCAP,&cap)<0){ + if(v4l2_ioctl(vbi_fd,VIDIOC_QUERYCAP,&cap)<0){ mp_msg(MSGT_TV,MSGL_ERR,"vbi: Query capatibilities failed for %s\n",priv->vbi_dev); - close(vbi_fd); + v4l2_close(vbi_fd); return TVI_CONTROL_FALSE; } if(!cap.capabilities & V4L2_CAP_VBI_CAPTURE){ mp_msg(MSGT_TV,MSGL_ERR,"vbi: %s does not support VBI capture\n",priv->vbi_dev); - close(vbi_fd); + v4l2_close(vbi_fd); return TVI_CONTROL_FALSE; } memset(&fmt,0,sizeof(struct v4l2_format)); fmt.type=V4L2_BUF_TYPE_VBI_CAPTURE; - if((res=ioctl(vbi_fd,VIDIOC_G_FMT,&fmt))<0){ + if((res=v4l2_ioctl(vbi_fd,VIDIOC_G_FMT,&fmt))<0){ mp_msg(MSGT_TV,MSGL_ERR,"vbi: Query format failed: %x\n",res); - close(vbi_fd); + v4l2_close(vbi_fd); return TVI_CONTROL_FALSE; } if(fmt.fmt.vbi.sample_format!=V4L2_PIX_FMT_GREY){ mp_msg(MSGT_TV,MSGL_ERR,"vbi: format 0x%x is not supported\n",fmt.fmt.vbi.sample_format); - close(vbi_fd); + v4l2_close(vbi_fd); return TVI_CONTROL_FALSE; } priv->vbi_fd=vbi_fd; @@ -614,7 +617,7 @@ memset(&fmt,0,sizeof(struct v4l2_format)); fmt.type=V4L2_BUF_TYPE_VBI_CAPTURE; - if((res=ioctl(priv->vbi_fd,VIDIOC_G_FMT,&fmt))<0){ + if((res=v4l2_ioctl(priv->vbi_fd,VIDIOC_G_FMT,&fmt))<0){ mp_msg(MSGT_TV,MSGL_ERR,"vbi_get_props: Query format failed: %x\n",res); return TVI_CONTROL_FALSE; } @@ -661,7 +664,7 @@ mp_msg(MSGT_TV,MSGL_V,"vbi: vbi capture thread started.\n"); while (!priv->vbi_shutdown){ - bytes=read(priv->vbi_fd,buf,tsp.bufsize); + bytes=v4l2_read(priv->vbi_fd,buf,tsp.bufsize); if (bytes!=tsp.bufsize){ mp_msg(MSGT_TV,MSGL_WARN,"vbi: expecting bytes: %d, got: %d\n",tsp.bufsize,bytes); break; @@ -724,7 +727,7 @@ priv->mp_format = *(int *)arg; mp_msg(MSGT_TV, MSGL_V, "%s: set format: %s\n", info.short_name, pixfmt2name(priv->format.fmt.pix.pixelformat)); - if (ioctl(priv->video_fd, VIDIOC_S_FMT, &priv->format) < 0) { + if (v4l2_ioctl(priv->video_fd, VIDIOC_S_FMT, &priv->format) < 0) { mp_msg(MSGT_TV, MSGL_ERR, "%s: ioctl set format failed: %s\n", info.short_name, strerror(errno)); return TVI_CONTROL_FALSE; @@ -746,7 +749,7 @@ priv->format.fmt.pix.width = *(int *)arg; mp_msg(MSGT_TV, MSGL_V, "%s: set width: %d\n", info.short_name, *(int *)arg); - if (ioctl(priv->video_fd, VIDIOC_S_FMT, &priv->format) < 0) { + if (v4l2_ioctl(priv->video_fd, VIDIOC_S_FMT, &priv->format) < 0) { mp_msg(MSGT_TV, MSGL_ERR, "%s: ioctl set width failed: %s\n", info.short_name, strerror(errno)); return TVI_CONTROL_FALSE; @@ -766,7 +769,7 @@ priv->format.fmt.pix.field = V4L2_FIELD_ANY; mp_msg(MSGT_TV, MSGL_V, "%s: set height: %d\n", info.short_name, *(int *)arg); - if (ioctl(priv->video_fd, VIDIOC_S_FMT, &priv->format) < 0) { + if (v4l2_ioctl(priv->video_fd, VIDIOC_S_FMT, &priv->format) < 0) { mp_msg(MSGT_TV, MSGL_ERR, "%s: ioctl set height failed: %s\n", info.short_name, strerror(errno)); return TVI_CONTROL_FALSE; @@ -853,7 +856,7 @@ case TVI_CONTROL_TUN_GET_FREQ: frequency.tuner = 0; frequency.type = V4L2_TUNER_ANALOG_TV; - if (ioctl(priv->video_fd, VIDIOC_G_FREQUENCY, &frequency) < 0) { + if (v4l2_ioctl(priv->video_fd, VIDIOC_G_FREQUENCY, &frequency) < 0) { mp_msg(MSGT_TV,MSGL_ERR,"%s: ioctl get frequency failed: %s\n", info.short_name, strerror(errno)); return TVI_CONTROL_FALSE; @@ -868,7 +871,7 @@ frequency.tuner = 0; frequency.type = V4L2_TUNER_ANALOG_TV; frequency.frequency = *(int *)arg; - if (ioctl(priv->video_fd, VIDIOC_S_FREQUENCY, &frequency) < 0) { + if (v4l2_ioctl(priv->video_fd, VIDIOC_S_FREQUENCY, &frequency) < 0) { mp_msg(MSGT_TV,MSGL_ERR,"%s: ioctl set frequency failed: %s\n", info.short_name, strerror(errno)); return TVI_CONTROL_FALSE; @@ -880,7 +883,7 @@ return TVI_CONTROL_TRUE; case TVI_CONTROL_TUN_GET_TUNER: mp_msg(MSGT_TV, MSGL_V, "%s: get tuner\n",info.short_name); - if (ioctl(priv->video_fd, VIDIOC_G_TUNER, &priv->tuner) < 0) { + if (v4l2_ioctl(priv->video_fd, VIDIOC_G_TUNER, &priv->tuner) < 0) { mp_msg(MSGT_TV, MSGL_ERR, "%s: ioctl get tuner failed: %s\n", info.short_name, strerror(errno)); return TVI_CONTROL_FALSE; @@ -888,7 +891,7 @@ return TVI_CONTROL_TRUE; case TVI_CONTROL_TUN_SET_TUNER: mp_msg(MSGT_TV, MSGL_V, "%s: set tuner\n",info.short_name); - if (ioctl(priv->video_fd, VIDIOC_S_TUNER, &priv->tuner) < 0) { + if (v4l2_ioctl(priv->video_fd, VIDIOC_S_TUNER, &priv->tuner) < 0) { mp_msg(MSGT_TV, MSGL_ERR, "%s: ioctl set tuner failed: %s\n", info.short_name, strerror(errno)); return TVI_CONTROL_FALSE; @@ -898,7 +901,7 @@ *(int *)arg = priv->standard.index; return TVI_CONTROL_TRUE; case TVI_CONTROL_TUN_GET_SIGNAL: - if (ioctl(priv->video_fd, VIDIOC_G_TUNER, &priv->tuner) < 0) { + if (v4l2_ioctl(priv->video_fd, VIDIOC_G_TUNER, &priv->tuner) < 0) { mp_msg(MSGT_TV, MSGL_ERR, "%s: ioctl get tuner failed: %s\n", info.short_name, strerror(errno)); return TVI_CONTROL_FALSE; @@ -907,13 +910,13 @@ return TVI_CONTROL_TRUE; case TVI_CONTROL_TUN_SET_NORM: priv->standard.index = *(int *)arg; - if (ioctl(priv->video_fd, VIDIOC_ENUMSTD, &priv->standard) < 0) { + if (v4l2_ioctl(priv->video_fd, VIDIOC_ENUMSTD, &priv->standard) < 0) { mp_msg(MSGT_TV, MSGL_ERR, "%s: ioctl enum norm failed: %s\n", info.short_name, strerror(errno)); return TVI_CONTROL_FALSE; } mp_msg(MSGT_TV, MSGL_V, "%s: set norm: %s\n", info.short_name, priv->standard.name); - if (ioctl(priv->video_fd, VIDIOC_S_STD, &priv->standard.id) < 0) { + if (v4l2_ioctl(priv->video_fd, VIDIOC_S_STD, &priv->standard.id) < 0) { mp_msg(MSGT_TV, MSGL_ERR, "%s: ioctl set norm failed: %s\n", info.short_name, strerror(errno)); return TVI_CONTROL_FALSE; @@ -926,7 +929,7 @@ struct v4l2_standard standard; memset(&standard, 0, sizeof(standard)); standard.index = i; - if (-1 == ioctl(priv->video_fd, VIDIOC_ENUMSTD, &standard)) + if (-1 == v4l2_ioctl(priv->video_fd, VIDIOC_ENUMSTD, &standard)) return TVI_CONTROL_FALSE; if (!strcasecmp(standard.name, (char *)arg)) { *(int *)arg = i; @@ -936,7 +939,7 @@ return TVI_CONTROL_FALSE; } case TVI_CONTROL_SPC_GET_INPUT: - if (ioctl(priv->video_fd, VIDIOC_G_INPUT, (int *)arg) < 0) { + if (v4l2_ioctl(priv->video_fd, VIDIOC_G_INPUT, (int *)arg) < 0) { mp_msg(MSGT_TV, MSGL_ERR, "%s: ioctl get input failed: %s\n", info.short_name, strerror(errno)); return TVI_CONTROL_FALSE; @@ -945,12 +948,12 @@ case TVI_CONTROL_SPC_SET_INPUT: mp_msg(MSGT_TV, MSGL_V, "%s: set input: %d\n", info.short_name, *(int *)arg); priv->input.index = *(int *)arg; - if (ioctl(priv->video_fd, VIDIOC_ENUMINPUT, &priv->input) < 0) { + if (v4l2_ioctl(priv->video_fd, VIDIOC_ENUMINPUT, &priv->input) < 0) { mp_msg(MSGT_TV, MSGL_ERR, "%s: ioctl enum input failed: %s\n", info.short_name, strerror(errno)); return TVI_CONTROL_FALSE; } - if (ioctl(priv->video_fd, VIDIOC_S_INPUT, (int *)arg) < 0) { + if (v4l2_ioctl(priv->video_fd, VIDIOC_S_INPUT, (int *)arg) < 0) { mp_msg(MSGT_TV, MSGL_ERR, "%s: ioctl set input failed: %s\n", info.short_name, strerror(errno)); return TVI_CONTROL_FALSE; @@ -1067,7 +1070,7 @@ priv->priv_vbi=NULL; if(priv->vbi_fd){ - close(priv->vbi_fd); + v4l2_close(priv->vbi_fd); priv->vbi_fd=0; } @@ -1095,7 +1098,7 @@ dropped = frames - priv->frames; /* turn off streaming */ - if (ioctl(priv->video_fd, VIDIOC_STREAMOFF, &(priv->map[0].buf.type)) < 0) { + if (v4l2_ioctl(priv->video_fd, VIDIOC_STREAMOFF, &(priv->map[0].buf.type)) < 0) { mp_msg(MSGT_TV, MSGL_ERR, "%s: ioctl streamoff failed: %s\n", info.short_name, strerror(errno)); } @@ -1105,12 +1108,12 @@ memset(&buf,0,sizeof(buf)); buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; buf.memory = V4L2_MEMORY_MMAP; - while (!ioctl(priv->video_fd, VIDIOC_DQBUF, &buf)); + while (!v4l2_ioctl(priv->video_fd, VIDIOC_DQBUF, &buf)); } /* unmap all buffers */ for (i = 0; i < priv->mapcount; i++) { - if (munmap(priv->map[i].addr, priv->map[i].len) < 0) { + if (v4l2_munmap(priv->map[i].addr, priv->map[i].len) < 0) { mp_msg(MSGT_TV, MSGL_ERR, "%s: munmap capture buffer failed: %s\n", info.short_name, strerror(errno)); } @@ -1128,7 +1131,7 @@ /* free memory and close device */ free(priv->map); priv->map = NULL; priv->mapcount = 0; - if(priv->video_fd!=-1)close(priv->video_fd); priv->video_fd = -1; + if(priv->video_fd!=-1)v4l2_close(priv->video_fd); priv->video_fd = -1; free(priv->video_dev); priv->video_dev = NULL; if (priv->video_ringbuffer) { @@ -1169,7 +1172,7 @@ priv->audio_inited = 0; /* Open the video device. */ - priv->video_fd = open(priv->video_dev, O_RDWR); + priv->video_fd = v4l2_open(priv->video_dev, O_RDWR); if (priv->video_fd < 0) { mp_msg(MSGT_TV, MSGL_ERR, "%s: unable to open '%s': %s\n", info.short_name, priv->video_dev, strerror(errno)); @@ -1183,7 +1186,7 @@ ** Query the video capabilities and current settings ** for further control calls. */ - if (ioctl(priv->video_fd, VIDIOC_QUERYCAP, &priv->capability) < 0) { + if (v4l2_ioctl(priv->video_fd, VIDIOC_QUERYCAP, &priv->capability) < 0) { mp_msg(MSGT_TV, MSGL_ERR, "%s: ioctl query capabilities failed: %s\n", info.short_name, strerror(errno)); uninit(priv); @@ -1207,7 +1210,7 @@ ** otherwise set some nice defaults */ if (priv->capability.capabilities & V4L2_CAP_TUNER) { - if (ioctl(priv->video_fd, VIDIOC_G_TUNER, &priv->tuner) < 0) { + if (v4l2_ioctl(priv->video_fd, VIDIOC_G_TUNER, &priv->tuner) < 0) { mp_msg(MSGT_TV, MSGL_ERR, "%s: ioctl get tuner failed: %s\n", info.short_name, strerror(errno)); uninit(priv); @@ -1254,7 +1257,7 @@ struct v4l2_standard standard; memset(&standard, 0, sizeof(standard)); standard.index = i; - if (-1 == ioctl(priv->video_fd, VIDIOC_ENUMSTD, &standard)) + if (-1 == v4l2_ioctl(priv->video_fd, VIDIOC_ENUMSTD, &standard)) break; mp_msg(MSGT_TV, MSGL_INFO, " %d = %s;", i, standard.name); } @@ -1263,12 +1266,12 @@ struct v4l2_input input; input.index = i; - if (ioctl(priv->video_fd, VIDIOC_ENUMINPUT, &input) < 0) { + if (v4l2_ioctl(priv->video_fd, VIDIOC_ENUMINPUT, &input) < 0) { break; } mp_msg(MSGT_TV, MSGL_INFO, " %d = %s;", i, input.name); } - if (ioctl(priv->video_fd, VIDIOC_G_INPUT, &i) < 0) { + if (v4l2_ioctl(priv->video_fd, VIDIOC_G_INPUT, &i) < 0) { mp_msg(MSGT_TV, MSGL_ERR, "%s: ioctl get input failed: %s\n", info.short_name, strerror(errno)); } @@ -1278,7 +1281,7 @@ fmtdesc.index = i; fmtdesc.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; - if (ioctl(priv->video_fd, VIDIOC_ENUM_FMT, &fmtdesc) < 0) { + if (v4l2_ioctl(priv->video_fd, VIDIOC_ENUM_FMT, &fmtdesc) < 0) { break; } mp_msg(MSGT_TV, MSGL_V, " Format %-6s (%2d bits, %s): %s\n", @@ -1292,7 +1295,7 @@ if (getfmt(priv) < 0) return 0; priv->format.fmt.pix.width = 640; priv->format.fmt.pix.height = 480; - if (ioctl(priv->video_fd, VIDIOC_S_FMT, &priv->format) < 0) { + if (v4l2_ioctl(priv->video_fd, VIDIOC_S_FMT, &priv->format) < 0) { mp_msg(MSGT_TV, MSGL_ERR, "%s: ioctl set format failed: %s\n", info.short_name, strerror(errno)); uninit(priv); @@ -1306,7 +1309,7 @@ if (priv->tv_param->amode >= 0) { mp_msg(MSGT_TV, MSGL_V, "%s: setting audio mode\n", info.short_name); priv->tuner.audmode = amode2v4l(priv->tv_param->amode); - if (ioctl(priv->video_fd, VIDIOC_S_TUNER, &priv->tuner) < 0) { + if (v4l2_ioctl(priv->video_fd, VIDIOC_S_TUNER, &priv->tuner) < 0) { mp_msg(MSGT_TV, MSGL_ERR, "%s: ioctl set tuner failed: %s\n", info.short_name, strerror(errno)); return TVI_CONTROL_FALSE; @@ -1469,7 +1472,7 @@ request.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; request.memory = V4L2_MEMORY_MMAP; - if (ioctl(priv->video_fd, VIDIOC_REQBUFS, &request) < 0) { + if (v4l2_ioctl(priv->video_fd, VIDIOC_REQBUFS, &request) < 0) { mp_msg(MSGT_TV, MSGL_ERR, "%s: ioctl request buffers failed: %s\n", info.short_name, strerror(errno)); return 0; @@ -1488,14 +1491,14 @@ priv->map[i].buf.index = i; priv->map[i].buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; priv->map[i].buf.memory = V4L2_MEMORY_MMAP; - if (ioctl(priv->video_fd, VIDIOC_QUERYBUF, &(priv->map[i].buf)) < 0) { + if (v4l2_ioctl(priv->video_fd, VIDIOC_QUERYBUF, &(priv->map[i].buf)) < 0) { mp_msg(MSGT_TV, MSGL_ERR, "%s: ioctl query buffer failed: %s\n", info.short_name, strerror(errno)); free(priv->map); priv->map = NULL; return 0; } - priv->map[i].addr = mmap (0, priv->map[i].buf.length, PROT_READ | + priv->map[i].addr = v4l2_mmap (0, priv->map[i].buf.length, PROT_READ | PROT_WRITE, MAP_SHARED, priv->video_fd, priv->map[i].buf.m.offset); if (priv->map[i].addr == MAP_FAILED) { mp_msg(MSGT_TV, MSGL_ERR, "%s: mmap capture buffer failed: %s\n", @@ -1507,7 +1510,7 @@ /* count up to make sure this is correct everytime */ priv->mapcount++; - if (ioctl(priv->video_fd, VIDIOC_QBUF, &(priv->map[i].buf)) < 0) { + if (v4l2_ioctl(priv->video_fd, VIDIOC_QBUF, &(priv->map[i].buf)) < 0) { mp_msg(MSGT_TV, MSGL_ERR, "%s: ioctl queue buffer failed: %s\n", info.short_name, strerror(errno)); return 0; @@ -1538,7 +1541,7 @@ { dest->framesize=len; if(priv->tv_param->automute>0){ - if (ioctl(priv->video_fd, VIDIOC_G_TUNER, &priv->tuner) >= 0) { + if (v4l2_ioctl(priv->video_fd, VIDIOC_G_TUNER, &priv->tuner) >= 0) { if(priv->tv_param->automute<<8>priv->tuner.signal){ fill_blank_frame(dest->data,dest->framesize,fcc_vl2mp(priv->format.fmt.pix.pixelformat)); set_mute(priv,1); @@ -1569,7 +1572,7 @@ prev_skew = 0; mp_msg(MSGT_TV, MSGL_V, "%s: going to capture\n", info.short_name); - if (ioctl(priv->video_fd, VIDIOC_STREAMON, &(priv->format.type)) < 0) { + if (v4l2_ioctl(priv->video_fd, VIDIOC_STREAMON, &(priv->format.type)) < 0) { mp_msg(MSGT_TV, MSGL_ERR, "%s: ioctl streamon failed: %s\n", info.short_name, strerror(errno)); return 0; @@ -1616,7 +1619,7 @@ memset(&buf,0,sizeof(buf)); buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; buf.memory = V4L2_MEMORY_MMAP; - ret = ioctl(priv->video_fd, VIDIOC_DQBUF, &buf); + ret = v4l2_ioctl(priv->video_fd, VIDIOC_DQBUF, &buf); if (ret < 0) { /* @@ -1634,14 +1637,14 @@ buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; buf.memory = V4L2_MEMORY_MMAP; buf.index = i; - ret = ioctl(priv->video_fd, VIDIOC_QUERYBUF, &buf); + ret = v4l2_ioctl(priv->video_fd, VIDIOC_QUERYBUF, &buf); if (ret < 0) { mp_msg(MSGT_TV, MSGL_ERR, "%s: ioctl query buffer failed: %s, idx = %d\n", info.short_name, strerror(errno), buf.index); return 0; } if ((buf.flags & (V4L2_BUF_FLAG_QUEUED | V4L2_BUF_FLAG_MAPPED | V4L2_BUF_FLAG_DONE)) == V4L2_BUF_FLAG_MAPPED) { - if (ioctl(priv->video_fd, VIDIOC_QBUF, &(priv->map[i].buf)) < 0) { + if (v4l2_ioctl(priv->video_fd, VIDIOC_QBUF, &(priv->map[i].buf)) < 0) { mp_msg(MSGT_TV, MSGL_ERR, "%s: ioctl queue buffer failed: %s\n", info.short_name, strerror(errno)); return 0; @@ -1732,7 +1735,7 @@ priv->video_tail = (priv->video_tail+1)%priv->video_buffer_size_current; priv->video_cnt++; } - if (ioctl(priv->video_fd, VIDIOC_QBUF, &buf) < 0) { + if (v4l2_ioctl(priv->video_fd, VIDIOC_QBUF, &buf) < 0) { mp_msg(MSGT_TV, MSGL_ERR, "%s: ioctl queue buffer failed: %s\n", info.short_name, strerror(errno)); return 0;