From de786a075b31b4988341a625ef85c081530e2a7d Mon Sep 17 00:00:00 2001 From: Mavridis Philippe Date: Sun, 27 Jun 2021 15:38:58 +0300 Subject: Fixes for Kopete videodevice support Signed-off-by: Mavridis Philippe --- kopete/ConfigureChecks.cmake | 12 +-- kopete/libkopete/avdevice/videodevice.cpp | 120 ++++++++++++++------------ kopete/libkopete/avdevice/videodevice.h | 12 +-- kopete/libkopete/avdevice/videodevicepool.cpp | 17 +++- 4 files changed, 88 insertions(+), 73 deletions(-) diff --git a/kopete/ConfigureChecks.cmake b/kopete/ConfigureChecks.cmake index 445c76f9..c8e03e06 100644 --- a/kopete/ConfigureChecks.cmake +++ b/kopete/ConfigureChecks.cmake @@ -46,13 +46,13 @@ endif( ) ### Check for videodev header -check_include_file( "libv4l1-videodev.h" HAVE_LIBV4L1_VIDEODEV_H ) -if( HAVE_LIBV4L1_VIDEODEV_H ) - set( VIDEODEV_HEADER "libv4l1-videodev.h" CACHE INTERNAL "" ) +check_include_file( "linux/videodev2.h" HAVE_VIDEODEV_H ) +if( HAVE_VIDEODEV_H ) + set( VIDEODEV_HEADER "linux/videodev2.h" CACHE INTERNAL "" ) else( ) - check_include_file( "linux/videodev.h" HAVE_VIDEODEV_H ) - if( HAVE_VIDEODEV_H ) - set( VIDEODEV_HEADER "linux/videodev.h" CACHE INTERNAL "" ) + check_include_file( "libv4l1-videodev.h" HAVE_LIBV4L1_VIDEODEV_H ) + if( HAVE_LIBV4L1_VIDEODEV_H ) + set( VIDEODEV_HEADER "libv4l1-videodev.h" CACHE INTERNAL "" ) else( ) if( BUILD_KOPETE_PLUGIN_MOTIONAUTOAWAY ) tde_message_fatal( "libv4l1-videodev.h or linux/videodev.h is required, but not found on your system" ) diff --git a/kopete/libkopete/avdevice/videodevice.cpp b/kopete/libkopete/avdevice/videodevice.cpp index f79479e7..801d8950 100644 --- a/kopete/libkopete/avdevice/videodevice.cpp +++ b/kopete/libkopete/avdevice/videodevice.cpp @@ -57,7 +57,7 @@ VideoDevice::~VideoDevice() #if (defined(__linux__) || defined(__FreeBSD__)) && defined(ENABLE_AV) -#ifdef V4L2_CAP_VIDEO_CAPTURE +#if defined(V4L2_CAP_VIDEO_CAPTURE) /* V4L2 */ void VideoDevice::enumerateMenu (void) { @@ -181,7 +181,7 @@ int VideoDevice::checkDevice() m_driver=VIDEODEV_DRIVER_NONE; #if (defined(__linux__) || defined(__FreeBSD__)) && defined(ENABLE_AV) -#ifdef V4L2_CAP_VIDEO_CAPTURE +#if defined(V4L2_CAP_VIDEO_CAPTURE) /* V4L2 */ //if(!getWorkaroundBrokenDriver()) { @@ -321,7 +321,7 @@ kdDebug(14010) << k_funcinfo << " Control: " << TQString(TQString::fromLocal8Bi kdDebug(14010) << k_funcinfo << "Checking CID private controls" << endl; -for (currentid = V4L2_CID_PRIVATE_BASE;; currentid++) +for (currentid = V4L2_CID_PRIVATE_BASE; currentid < V4L2_CID_PRIVATE_BASE + V4L2_CID_LASTP1 - V4L2_CID_BASE; currentid++) //for (queryctrl.id = 9963776; queryctrl.id < 9963800; queryctrl.id++) { queryctrl.id = currentid; @@ -358,7 +358,7 @@ kdDebug(14010) << k_funcinfo << " Control: " << TQString(TQString::fromLocal8Bi } } -#endif +#elif defined(__LINUX_VIDEODEV_H) /* V4L */ CLEAR(V4L_capabilities); @@ -423,6 +423,7 @@ kdDebug(14010) << k_funcinfo << " Control: " << TQString(TQString::fromLocal8Bi } } +#endif #endif m_name=m_model; // Take care about changing the name to be different from the model itself... @@ -512,7 +513,7 @@ int VideoDevice::initDevice() switch(m_driver) { #if (defined(__linux__) || defined(__FreeBSD__)) && defined(ENABLE_AV) -#ifdef V4L2_CAP_VIDEO_CAPTURE +#if defined(V4L2_CAP_VIDEO_CAPTURE) /* V4L2 */ case VIDEODEV_DRIVER_V4L2: if(V4L2_capabilities.capabilities & V4L2_CAP_READWRITE) { @@ -538,7 +539,7 @@ int VideoDevice::initDevice() return EXIT_FAILURE; } break; -#endif +#elif defined(__LINUX_VIDEODEV_H) /* V4L */ case VIDEODEV_DRIVER_V4L: m_videoread=true; m_io_method=IO_METHOD_READ; @@ -549,6 +550,7 @@ int VideoDevice::initDevice() kdDebug(14010) << k_funcinfo << " Streaming interface" << endl; } break; +#endif #endif case VIDEODEV_DRIVER_NONE: default: @@ -558,7 +560,7 @@ int VideoDevice::initDevice() // Select video input, video standard and tune here. #if (defined(__linux__) || defined(__FreeBSD__)) && defined(ENABLE_AV) -#ifdef V4L2_CAP_VIDEO_CAPTURE +#if defined(V4L2_CAP_VIDEO_CAPTURE) /* V4L2 */ cropcap.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; if (-1 == xioctl (VIDIOC_CROPCAP, &cropcap)) { // Errors ignored. @@ -676,7 +678,7 @@ kdDebug(14010) << k_funcinfo << "setSize(" << newwidth << ", " << newheight << switch(m_driver) { #if (defined(__linux__) || defined(__FreeBSD__)) && defined(ENABLE_AV) -#ifdef V4L2_CAP_VIDEO_CAPTURE +#if defined(V4L2_CAP_VIDEO_CAPTURE) /* V4L2 */ case VIDEODEV_DRIVER_V4L2: // CLEAR (fmt); if (-1 == xioctl (VIDIOC_G_FMT, &fmt)) @@ -703,7 +705,7 @@ kdDebug(14010) << k_funcinfo << "VIDIOC_S_FMT worked (" << errno << ").Returned m_buffer_size=fmt.fmt.pix.sizeimage ; } break; -#endif +#elif defined(__LINUX_VIDEODEV_H) /* V4L */ case VIDEODEV_DRIVER_V4L: { struct video_window V4L_videowindow; @@ -732,6 +734,7 @@ kdDebug(14010) << "------------- width: " << V4L_videowindow.width << " Height: } break; +#endif #endif case VIDEODEV_DRIVER_NONE: default: @@ -759,17 +762,6 @@ kdDebug(14010) << k_funcinfo << "setSize(" << newwidth << ", " << newheight << } - - - - - - - - - - - pixel_format VideoDevice::setPixelFormat(pixel_format newformat) { pixel_format ret = PIXELFORMAT_NONE; @@ -778,7 +770,7 @@ pixel_format VideoDevice::setPixelFormat(pixel_format newformat) switch(m_driver) { #if (defined(__linux__) || defined(__FreeBSD__)) && defined(ENABLE_AV) -#ifdef V4L2_CAP_VIDEO_CAPTURE +#if defined(V4L2_CAP_VIDEO_CAPTURE) /* V4L2 */ case VIDEODEV_DRIVER_V4L2: // CLEAR (fmt); if (-1 == xioctl (VIDIOC_G_FMT, &fmt)) @@ -803,7 +795,7 @@ pixel_format VideoDevice::setPixelFormat(pixel_format newformat) } } break; -#endif +#elif defined(__LINUX_VIDEODEV_H) /* V4L */ case VIDEODEV_DRIVER_V4L: { struct video_picture V4L_picture; @@ -827,6 +819,7 @@ pixel_format VideoDevice::setPixelFormat(pixel_format newformat) } break; +#endif #endif case VIDEODEV_DRIVER_NONE: default: @@ -867,7 +860,7 @@ int VideoDevice::selectInput(int newinput) switch (m_driver) { #if (defined(__linux__) || defined(__FreeBSD__)) && defined(ENABLE_AV) -#ifdef V4L2_CAP_VIDEO_CAPTURE +#if defined(V4L2_CAP_VIDEO_CAPTURE) /* V4L2 */ case VIDEODEV_DRIVER_V4L2: if (-1 == ioctl (descriptor, VIDIOC_S_INPUT, &newinput)) { @@ -875,7 +868,7 @@ int VideoDevice::selectInput(int newinput) return EXIT_FAILURE; } break; -#endif +#elif defined(__LINUX_VIDEODEV_H) /* V4L */ case VIDEODEV_DRIVER_V4L: struct video_channel V4L_input; V4L_input.channel=newinput; @@ -886,6 +879,7 @@ int VideoDevice::selectInput(int newinput) return EXIT_FAILURE; } break; +#endif #endif case VIDEODEV_DRIVER_NONE: default: @@ -935,7 +929,7 @@ int VideoDevice::startCapturing() break; case IO_METHOD_MMAP: #if (defined(__linux__) || defined(__FreeBSD__)) && defined(ENABLE_AV) -#ifdef V4L2_CAP_VIDEO_CAPTURE +#if defined(V4L2_CAP_VIDEO_CAPTURE) /* V4L2 */ { unsigned int loop; for (loop = 0; loop < m_streambuffers; ++loop) @@ -957,7 +951,7 @@ int VideoDevice::startCapturing() break; case IO_METHOD_USERPTR: #if (defined(__linux__) || defined(__FreeBSD__)) && defined(ENABLE_AV) -#ifdef V4L2_CAP_VIDEO_CAPTURE +#if defined(V4L2_CAP_VIDEO_CAPTURE) /* V4L2 */ { unsigned int loop; for (loop = 0; loop < m_streambuffers; ++loop) @@ -995,7 +989,7 @@ int VideoDevice::getFrame() ssize_t bytesread; #if (defined(__linux__) || defined(__FreeBSD__)) && defined(ENABLE_AV) -#ifdef V4L2_CAP_VIDEO_CAPTURE +#if defined(V4L2_CAP_VIDEO_CAPTURE) /* V4L2 */ struct v4l2_buffer v4l2buffer; #endif #endif @@ -1029,7 +1023,7 @@ int VideoDevice::getFrame() break; case IO_METHOD_MMAP: #if (defined(__linux__) || defined(__FreeBSD__)) && defined(ENABLE_AV) -#ifdef V4L2_CAP_VIDEO_CAPTURE +#if defined(V4L2_CAP_VIDEO_CAPTURE) /* V4L2 */ CLEAR (v4l2buffer); v4l2buffer.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; v4l2buffer.memory = V4L2_MEMORY_MMAP; @@ -1089,7 +1083,7 @@ memcpy(&m_currentbuffer.data[0], m_rawbuffers[v4l2buffer.index].start, m_current break; case IO_METHOD_USERPTR: #if (defined(__linux__) || defined(__FreeBSD__)) && defined(ENABLE_AV) -#ifdef V4L2_CAP_VIDEO_CAPTURE +#if defined(V4L2_CAP_VIDEO_CAPTURE) /* V4L2 */ { unsigned int i; CLEAR (v4l2buffer); @@ -1414,7 +1408,7 @@ int VideoDevice::stopCapturing() break; case IO_METHOD_MMAP: case IO_METHOD_USERPTR: -#ifdef V4L2_CAP_VIDEO_CAPTURE +#if defined(V4L2_CAP_VIDEO_CAPTURE) /* V4L2 */ { enum v4l2_buf_type type = V4L2_BUF_TYPE_VIDEO_CAPTURE; if (-1 == xioctl (VIDIOC_STREAMOFF, &type)) @@ -1475,7 +1469,7 @@ float VideoDevice::setBrightness(float brightness) switch(m_driver) { #if (defined(__linux__) || defined(__FreeBSD__)) && defined(ENABLE_AV) -#ifdef V4L2_CAP_VIDEO_CAPTURE +#if defined(V4L2_CAP_VIDEO_CAPTURE) /* V4L2 */ case VIDEODEV_DRIVER_V4L2: { struct v4l2_queryctrl queryctrl; @@ -1510,7 +1504,7 @@ float VideoDevice::setBrightness(float brightness) } } break; -#endif +#elif defined(__LINUX_VIDEODEV_H) /* V4L */ case VIDEODEV_DRIVER_V4L: { struct video_picture V4L_picture; @@ -1521,6 +1515,7 @@ float VideoDevice::setBrightness(float brightness) kdDebug(14010) << k_funcinfo << "Card seems to not support adjusting image brightness. Fallback to it is not yet implemented." << endl; } break; +#endif #endif case VIDEODEV_DRIVER_NONE: default: @@ -1545,7 +1540,7 @@ float VideoDevice::setContrast(float contrast) switch(m_driver) { #if (defined(__linux__) || defined(__FreeBSD__)) && defined(ENABLE_AV) -#ifdef V4L2_CAP_VIDEO_CAPTURE +#if defined(V4L2_CAP_VIDEO_CAPTURE) /* V4L2 */ case VIDEODEV_DRIVER_V4L2: { struct v4l2_queryctrl queryctrl; @@ -1580,7 +1575,7 @@ float VideoDevice::setContrast(float contrast) } } break; -#endif +#elif defined(__LINUX_VIDEODEV_H) /* V4L */ case VIDEODEV_DRIVER_V4L: { struct video_picture V4L_picture; @@ -1591,6 +1586,7 @@ float VideoDevice::setContrast(float contrast) kdDebug(14010) << k_funcinfo << "Card seems to not support adjusting image contrast. Fallback to it is not yet implemented." << endl; } break; +#endif #endif case VIDEODEV_DRIVER_NONE: default: @@ -1615,7 +1611,7 @@ float VideoDevice::setSaturation(float saturation) switch(m_driver) { #if (defined(__linux__) || defined(__FreeBSD__)) && defined(ENABLE_AV) -#ifdef V4L2_CAP_VIDEO_CAPTURE +#if defined(V4L2_CAP_VIDEO_CAPTURE) /* V4L2 */ case VIDEODEV_DRIVER_V4L2: { struct v4l2_queryctrl queryctrl; @@ -1650,7 +1646,7 @@ float VideoDevice::setSaturation(float saturation) } } break; -#endif +#elif defined(__LINUX_VIDEODEV_H) /* V4L */ case VIDEODEV_DRIVER_V4L: { struct video_picture V4L_picture; @@ -1661,6 +1657,7 @@ float VideoDevice::setSaturation(float saturation) kdDebug(14010) << k_funcinfo << "Card seems to not support adjusting image saturation. Fallback to it is not yet implemented." << endl; } break; +#endif #endif case VIDEODEV_DRIVER_NONE: default: @@ -1685,7 +1682,7 @@ float VideoDevice::setWhiteness(float whiteness) switch(m_driver) { #if (defined(__linux__) || defined(__FreeBSD__)) && defined(ENABLE_AV) -#ifdef V4L2_CAP_VIDEO_CAPTURE +#if defined(V4L2_CAP_VIDEO_CAPTURE) /* V4L2 */ case VIDEODEV_DRIVER_V4L2: { struct v4l2_queryctrl queryctrl; @@ -1720,7 +1717,7 @@ float VideoDevice::setWhiteness(float whiteness) } } break; -#endif +#elif defined(__LINUX_VIDEODEV_H) /* V4L */ case VIDEODEV_DRIVER_V4L: { struct video_picture V4L_picture; @@ -1731,6 +1728,7 @@ float VideoDevice::setWhiteness(float whiteness) kdDebug(14010) << k_funcinfo << "Card seems to not support adjusting white level. Fallback to it is not yet implemented." << endl; } break; +#endif #endif case VIDEODEV_DRIVER_NONE: default: @@ -1755,7 +1753,7 @@ float VideoDevice::setHue(float hue) switch(m_driver) { #if (defined(__linux__) || defined(__FreeBSD__)) && defined(ENABLE_AV) -#ifdef V4L2_CAP_VIDEO_CAPTURE +#if defined(V4L2_CAP_VIDEO_CAPTURE) /* V4L2 */ case VIDEODEV_DRIVER_V4L2: { struct v4l2_queryctrl queryctrl; @@ -1790,7 +1788,7 @@ float VideoDevice::setHue(float hue) } } break; -#endif +#elif defined(__LINUX_VIDEODEV_H) /* V4L */ case VIDEODEV_DRIVER_V4L: { struct video_picture V4L_picture; @@ -1801,6 +1799,7 @@ float VideoDevice::setHue(float hue) kdDebug(14010) << k_funcinfo << "Card seems to not support adjusting image hue. Fallback to it is not yet implemented." << endl; } break; +#endif #endif case VIDEODEV_DRIVER_NONE: default: @@ -1876,7 +1875,7 @@ pixel_format VideoDevice::pixelFormatForPalette( int palette ) switch(m_driver) { #if (defined(__linux__) || defined(__FreeBSD__)) && defined(ENABLE_AV) -#ifdef V4L2_CAP_VIDEO_CAPTURE +#if defined(V4L2_CAP_VIDEO_CAPTURE) /* V4L2 */ case VIDEODEV_DRIVER_V4L2: switch(palette) { @@ -1925,7 +1924,7 @@ pixel_format VideoDevice::pixelFormatForPalette( int palette ) case V4L2_PIX_FMT_YYUV : return PIXELFORMAT_YYUV; break; } break; -#endif +#elif defined(__LINUX_VIDEODEV_H) /* V4L */ case VIDEODEV_DRIVER_V4L: switch(palette) { @@ -1945,6 +1944,7 @@ pixel_format VideoDevice::pixelFormatForPalette( int palette ) case VIDEO_PALETTE_YUV422P : return PIXELFORMAT_YUV422P; break; } break; +#endif #endif case VIDEODEV_DRIVER_NONE: default: @@ -1958,7 +1958,7 @@ int VideoDevice::pixelFormatCode(pixel_format pixelformat) switch(m_driver) { #if (defined(__linux__) || defined(__FreeBSD__)) && defined(ENABLE_AV) -#ifdef V4L2_CAP_VIDEO_CAPTURE +#if defined(V4L2_CAP_VIDEO_CAPTURE) /* V4L2 */ case VIDEODEV_DRIVER_V4L2: switch(pixelformat) { @@ -2007,7 +2007,7 @@ int VideoDevice::pixelFormatCode(pixel_format pixelformat) case PIXELFORMAT_YYUV : return V4L2_PIX_FMT_YYUV; break; } break; -#endif +#elif defined(__LINUX_VIDEODEV_H) /* V4L */ case VIDEODEV_DRIVER_V4L: switch(pixelformat) { @@ -2056,6 +2056,7 @@ int VideoDevice::pixelFormatCode(pixel_format pixelformat) case PIXELFORMAT_YYUV : return 0; break; } break; +#endif #endif case VIDEODEV_DRIVER_NONE: default: @@ -2172,7 +2173,7 @@ TQString VideoDevice::pixelFormatName(int pixelformat) switch(m_driver) { #if (defined(__linux__) || defined(__FreeBSD__)) && defined(ENABLE_AV) -#ifdef V4L2_CAP_VIDEO_CAPTURE +#if defined(V4L2_CAP_VIDEO_CAPTURE) /* V4L2 */ case VIDEODEV_DRIVER_V4L2: switch(pixelformat) { @@ -2221,7 +2222,7 @@ TQString VideoDevice::pixelFormatName(int pixelformat) case V4L2_PIX_FMT_YYUV : returnvalue = pixelFormatName(PIXELFORMAT_YYUV); break; } break; -#endif +#elif defined(__LINUX_VIDEODEV_H) /* V4L */ case VIDEODEV_DRIVER_V4L: switch(pixelformat) { @@ -2240,6 +2241,7 @@ TQString VideoDevice::pixelFormatName(int pixelformat) case VIDEO_PALETTE_YUV422P : returnvalue = pixelFormatName(PIXELFORMAT_YUV422P); break; } break; +#endif #endif case VIDEODEV_DRIVER_NONE: default: @@ -2251,14 +2253,14 @@ TQString VideoDevice::pixelFormatName(int pixelformat) int VideoDevice::detectPixelFormats() { #if (defined(__linux__) || defined(__FreeBSD__)) && defined(ENABLE_AV) -#ifdef V4L2_CAP_VIDEO_CAPTURE +#if defined(V4L2_CAP_VIDEO_CAPTURE) /* V4L2 */ int err = 0; #endif #endif switch(m_driver) { #if (defined(__linux__) || defined(__FreeBSD__)) && defined(ENABLE_AV) -#ifdef V4L2_CAP_VIDEO_CAPTURE +#if defined(V4L2_CAP_VIDEO_CAPTURE) /* V4L2 */ case VIDEODEV_DRIVER_V4L2: fmtdesc.index = 0; fmtdesc.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; @@ -2278,7 +2280,7 @@ int VideoDevice::detectPixelFormats() } } // break; -#endif +#elif defined(__LINUX_VIDEODEV_H) /* V4L */ case VIDEODEV_DRIVER_V4L: // TODO: THis thing can be used to detec what pixel formats are supported in a API-independent way, but V4L2 has VIDIOC_ENUM_PIXFMT. // The correct thing to do is to isolate these calls and do a proper implementation for V4L and another for V4L2 when this thing will be migrated to a plugin architecture. @@ -2322,6 +2324,7 @@ int VideoDevice::detectPixelFormats() if(PIXELFORMAT_NONE != setPixelFormat(PIXELFORMAT_WNVA)) kdDebug(14010) << k_funcinfo << pixelFormatName(PIXELFORMAT_WNVA) << endl; if(PIXELFORMAT_NONE != setPixelFormat(PIXELFORMAT_YYUV)) kdDebug(14010) << k_funcinfo << pixelFormatName(PIXELFORMAT_YYUV) << endl; break; +#endif #endif case VIDEODEV_DRIVER_NONE: default: @@ -2335,7 +2338,7 @@ __u64 VideoDevice::signalStandardCode(signal_standard standard) switch(m_driver) { #if (defined(__linux__) || defined(__FreeBSD__)) && defined(ENABLE_AV) -#ifdef V4L2_CAP_VIDEO_CAPTURE +#if defined(V4L2_CAP_VIDEO_CAPTURE) /* V4L2 */ case VIDEODEV_DRIVER_V4L2: switch(standard) { @@ -2376,7 +2379,7 @@ __u64 VideoDevice::signalStandardCode(signal_standard standard) case STANDARD_ALL : return V4L2_STD_ALL; break; } break; -#endif +#elif defined(__LINUX_VIDEODEV_H) /* V4L */ case VIDEODEV_DRIVER_V4L: switch(standard) { @@ -2417,6 +2420,7 @@ __u64 VideoDevice::signalStandardCode(signal_standard standard) case STANDARD_ALL : return VIDEO_MODE_AUTO; break; } break; +#endif #endif case VIDEODEV_DRIVER_NONE: default: @@ -2477,7 +2481,7 @@ TQString VideoDevice::signalStandardName(int standard) switch(m_driver) { #if (defined(__linux__) || defined(__FreeBSD__)) && defined(ENABLE_AV) -#ifdef V4L2_CAP_VIDEO_CAPTURE +#if defined(V4L2_CAP_VIDEO_CAPTURE) /* V4L2 */ case VIDEODEV_DRIVER_V4L2: switch(standard) { @@ -2517,7 +2521,7 @@ TQString VideoDevice::signalStandardName(int standard) case V4L2_STD_ALL : returnvalue = signalStandardName(STANDARD_ALL); break; } break; -#endif +#elif defined(__LINUX_VIDEODEV_H) /* V4L */ case VIDEODEV_DRIVER_V4L: switch(standard) { @@ -2531,6 +2535,7 @@ TQString VideoDevice::signalStandardName(int standard) case VIDEO_MODE_NTSC_JP : returnvalue = signalStandardName(STANDARD_NTSC_M_JP); break; // Undocumented value found to be compatible with V4L bttv driver } break; +#endif #endif case VIDEODEV_DRIVER_NONE: default: @@ -2547,12 +2552,13 @@ int VideoDevice::detectSignalStandards() switch(m_driver) { #if (defined(__linux__) || defined(__FreeBSD__)) && defined(ENABLE_AV) -#ifdef V4L2_CAP_VIDEO_CAPTURE +#if defined(V4L2_CAP_VIDEO_CAPTURE) /* V4L2 */ case VIDEODEV_DRIVER_V4L2: break; -#endif +#elif defined(__LINUX_VIDEODEV_H) /* V4L */ case VIDEODEV_DRIVER_V4L: break; +#endif #endif case VIDEODEV_DRIVER_NONE: default: @@ -2606,7 +2612,7 @@ int VideoDevice::initMmap() if(isOpen()) { kdDebug(14010) << k_funcinfo << full_filename << " Trying to MMAP" << endl; -#ifdef V4L2_CAP_VIDEO_CAPTURE +#if defined(V4L2_CAP_VIDEO_CAPTURE) /* V4L2 */ struct v4l2_requestbuffers req; CLEAR (req); @@ -2678,7 +2684,7 @@ int VideoDevice::initUserptr() /// @todo implement me if(isOpen()) { -#ifdef V4L2_CAP_VIDEO_CAPTURE +#if defined(V4L2_CAP_VIDEO_CAPTURE) /* V4L2 */ struct v4l2_requestbuffers req; CLEAR (req); diff --git a/kopete/libkopete/avdevice/videodevice.h b/kopete/libkopete/avdevice/videodevice.h index 970f6655..a1ace57e 100644 --- a/kopete/libkopete/avdevice/videodevice.h +++ b/kopete/libkopete/avdevice/videodevice.h @@ -92,11 +92,12 @@ typedef enum { VIDEODEV_DRIVER_NONE #if (defined(__linux__) || defined(__FreeBSD__)) && defined(ENABLE_AV) - , - VIDEODEV_DRIVER_V4L -#ifdef V4L2_CAP_VIDEO_CAPTURE +#if defined(__LINUX_VIDEODEV2_H) /* V4L2 */ , VIDEODEV_DRIVER_V4L2 +#elif defined(__LINUX_VIDEODEV_H) /* V4L */ + , + VIDEODEV_DRIVER_V4L #endif #endif } videodev_driver; @@ -288,7 +289,7 @@ public: //protected: #if (defined(__linux__) || defined(__FreeBSD__)) && defined(ENABLE_AV) -#ifdef V4L2_CAP_VIDEO_CAPTURE +#if defined(__LINUX_VIDEODEV2_H) /* V4L2 */ struct v4l2_capability V4L2_capabilities; struct v4l2_cropcap cropcap; struct v4l2_crop crop; @@ -299,8 +300,7 @@ public: struct v4l2_querymenu querymenu; void enumerateMenu (void); -#endif -#ifdef ENABLE_AV +#elif defined(__LINUX_VIDEODEV_H) /* V4L */ struct video_capability V4L_capabilities; struct video_buffer V4L_videobuffer; #endif diff --git a/kopete/libkopete/avdevice/videodevicepool.cpp b/kopete/libkopete/avdevice/videodevicepool.cpp index 7396d5a0..ffb9b770 100644 --- a/kopete/libkopete/avdevice/videodevicepool.cpp +++ b/kopete/libkopete/avdevice/videodevicepool.cpp @@ -608,8 +608,10 @@ int VideoDevicePool::scanDevices() kdDebug(14010) << k_funcinfo << "called" << endl; #if (defined(__linux__) || defined(__FreeBSD__)) && defined(ENABLE_AV) TQDir videodevice_dir; - const TQString videodevice_dir_path=TQString::fromLocal8Bit("/dev/v4l/"); - const TQString videodevice_dir_filter=TQString::fromLocal8Bit("video*"); + + // Check *video* symlinks in /dev/v4l/by-id + const TQString videodevice_dir_path=TQString::fromLocal8Bit("/dev/v4l/by-id/"); + const TQString videodevice_dir_filter=TQString::fromLocal8Bit("*video*"); VideoDevice videodevice; m_videodevice.clear(); @@ -617,7 +619,7 @@ int VideoDevicePool::scanDevices() videodevice_dir.setPath(videodevice_dir_path); videodevice_dir.setNameFilter(videodevice_dir_filter); - videodevice_dir.setFilter( TQDir::System | TQDir::NoSymLinks | TQDir::Readable | TQDir::Writable ); + videodevice_dir.setFilter( TQDir::System | TQDir::Readable | TQDir::Writable ); videodevice_dir.setSorting( TQDir::Name ); kdDebug(14010) << k_funcinfo << "Looking for devices in " << videodevice_dir_path << endl; @@ -627,6 +629,8 @@ int VideoDevicePool::scanDevices() { kdDebug(14010) << k_funcinfo << "Found no suitable devices in " << videodevice_dir_path << endl; TQDir videodevice_dir; + + // Alternatively, check all block devices starting with 'video' in /dev const TQString videodevice_dir_path=TQString::fromLocal8Bit("/dev/"); const TQString videodevice_dir_filter=TQString::fromLocal8Bit("video*"); VideoDevice videodevice; @@ -679,7 +683,12 @@ int VideoDevicePool::scanDevices() kdDebug(14010) << k_funcinfo << "scanning devices in " << videodevice_dir_path << "..." << endl; while ( (fileinfo = fileiterator.current()) != 0 ) { - videodevice.setFileName(fileinfo->absFilePath()); + if( fileinfo->isSymLink() ) { + TQFileInfo realfileinfo(videodevice_dir_path + fileinfo->readLink()); + videodevice.setFileName(realfileinfo.absFilePath()); + } else { + videodevice.setFileName(fileinfo->absFilePath()); + } kdDebug(14010) << k_funcinfo << "Found device " << videodevice.full_filename << endl; videodevice.open(); // It should be opened with O_NONBLOCK (it's a FIFO) but I dunno how to do it using TQFile if(videodevice.isOpen()) -- cgit v1.2.3