diff options
Diffstat (limited to 'kopete')
| -rw-r--r-- | kopete/libkopete/avdevice/videodevice.h | 4 | ||||
| -rw-r--r-- | kopete/plugins/motionautoaway/motionawayplugin.cpp | 60 | 
2 files changed, 55 insertions, 9 deletions
diff --git a/kopete/libkopete/avdevice/videodevice.h b/kopete/libkopete/avdevice/videodevice.h index a1ace57e..0c3cb473 100644 --- a/kopete/libkopete/avdevice/videodevice.h +++ b/kopete/libkopete/avdevice/videodevice.h @@ -92,7 +92,7 @@ typedef enum  {  	VIDEODEV_DRIVER_NONE  #if (defined(__linux__) || defined(__FreeBSD__)) && defined(ENABLE_AV) -#if defined(__LINUX_VIDEODEV2_H) /* V4L2 */ +#if defined(V4L2_CAP_VIDEO_CAPTURE) /* V4L2 */          ,  	VIDEODEV_DRIVER_V4L2  #elif defined(__LINUX_VIDEODEV_H) /* V4L */ @@ -289,7 +289,7 @@ public:  //protected:  #if (defined(__linux__) || defined(__FreeBSD__)) && defined(ENABLE_AV) -#if defined(__LINUX_VIDEODEV2_H) /* V4L2 */ +#if defined(V4L2_CAP_VIDEO_CAPTURE) /* V4L2 */  	struct v4l2_capability V4L2_capabilities;  	struct v4l2_cropcap cropcap;  	struct v4l2_crop crop; diff --git a/kopete/plugins/motionautoaway/motionawayplugin.cpp b/kopete/plugins/motionautoaway/motionawayplugin.cpp index cf3a62f4..fa6136ef 100644 --- a/kopete/plugins/motionautoaway/motionawayplugin.cpp +++ b/kopete/plugins/motionautoaway/motionawayplugin.cpp @@ -110,9 +110,13 @@ MotionAwayPlugin::MotionAwayPlugin( TQObject *parent, const char *name, const TQ          kdDebug(14305) << k_funcinfo << "Worked! Setting Capture timers!" << endl;  		/* Capture first image, or we will get a alarm on start */  		getImage (m_deviceHandler, m_imageRef, DEF_WIDTH, DEF_HEIGHT, IN_DEFAULT, NORM_DEFAULT, -	    	VIDEO_PALETTE_RGB24); +#ifdef V4L2_CAP_VIDEO_CAPTURE /* V4L2 */ +		V4L2_PIX_FMT_RGB24); +#else /* V4L or BSD compat layer */ +		VIDEO_PALETTE_RGB24); +#endif -        /* We have the first image now */ +		/* We have the first image now */  		m_tookFirst = true;  		m_wentAway = false; @@ -142,14 +146,49 @@ void MotionAwayPlugin::loadSettings(){  int MotionAwayPlugin::getImage(int _dev, TQByteArray &_image, int _width, int _height, int _input, int _norm,  int _fmt)  { -	struct video_capability vid_caps; -	struct video_channel vid_chnl; -	struct video_window vid_win;  	struct pollfd video_fd;  	// Just to avoid a warning  	_fmt = 0; +#if defined(V4L2_CAP_VIDEO_CAPTURE) /* V4L2 */ +	struct v4l2_queryctrl queryctrl; +	struct v4l2_format fmt; +	int newinput = _input; +	 +	if (ioctl(_dev, VIDIOC_QUERYCTRL, &queryctrl) == -1) +	{ +		perror("ioctl (VIDIOC_QUERYCTRL)"); +		return(-1); +	} + +	if (_input != IN_DEFAULT) +	{ +		newinput = -1; +		if (ioctl(_dev, VIDIOC_S_INPUT, &newinput) == -1) +		{ +			perror ("ioctl (VIDIOC_S_INPUT)"); +			return EXIT_FAILURE; +		} +	} + +	// Set image size +	if (ioctl(_dev, VIDIOC_G_FMT, &fmt) == -1) +		perror("ioctl (VIDIOC_G_FMT)"); + +	fmt.type                = V4L2_BUF_TYPE_VIDEO_CAPTURE; +	fmt.fmt.pix.width       = _width; +	fmt.fmt.pix.height      = _height; +	fmt.fmt.pix.field       = V4L2_FIELD_ANY; + +	if (ioctl(_dev, VIDIOC_S_FMT, &fmt) == -1) +		perror("ioctl (VIDIOC_S_FMT)"); + +#elif defined(__LINUX_VIDEODEV_H) /* V4L */ +	struct video_capability vid_caps; +	struct video_channel vid_chnl; +	struct video_window vid_win; +  	if (ioctl (_dev, VIDIOCGCAP, &vid_caps) == -1)  	{  		perror ("ioctl (VIDIOCGCAP)"); @@ -186,6 +225,8 @@ int MotionAwayPlugin::getImage(int _dev, TQByteArray &_image, int _width, int _h  	if (ioctl (_dev, VIDIOCSWIN, &vid_win) == -1)  		return (-1); +#endif +  	/* Check if data available on the video device */  	video_fd.fd = _dev;  	video_fd.events = 0; @@ -206,10 +247,15 @@ void MotionAwayPlugin::slotCapture()  {  	/* Should go on forever... emphasis on 'should' */  	if ( getImage ( m_deviceHandler, m_imageNew, m_width, m_height, IN_DEFAULT, NORM_DEFAULT, -	    VIDEO_PALETTE_RGB24) == m_width * m_height *3 ) +#ifdef V4L2_CAP_VIDEO_CAPTURE /* V4L2 */ +                V4L2_PIX_FMT_RGB24 +#else /* V4L or BSD compat layer */ +                VIDEO_PALETTE_RGB24 +#endif +	) == m_width * m_height *3 )  	{  	    int diffs = 0; -        if ( m_tookFirst ) +        	if ( m_tookFirst )  		{  			/* Make a differences picture in image_out */  			for (int i=0; i< m_width * m_height * 3 ; i++)  | 
