Beberapa waktu yang lalu, saya membeli webcam Genius iSlim 310 yang murah (sekitar Rp. 145.000,00) untuk memperlengkapi laptop saya yang belum ada built-in webcam.Fitur dari webcam ini adalah sebagai berikut:
|
Saya penasaran dengan pernyataan yang tertulis pada website Genius, bahwa webcam ini hanya disupport untuk penggunaan di Windows & Mac. Apakah di Linux, webcam ini tidak dapat digunakan?
Setelah saya coba untuk pasang ke laptop saya yang berisi Slackware64 13.1, ternyata hasilnya seperti gambar berikut ini:
Hanya mikrofonnya saja yang dikenali. Dari hasil lsusb, saya mendapatkan:
Lalu dengan VID 093Ah dan PID 2625h tersebut, saya search di internet, didapatkan, image chip yang digunakan adalah PAC7302, yang ternyata telah disupport oleh Linux Kernel dengan video driver gspca. Akan tetapi, jika diselidiki lebih lanjut, pada kernel source file pac7302.c yang terdapat pada /usr/src/linux/drivers/media/video/gspca maka tidak ada VID dan PID pada tabel usb_device_id (lihat tabel berikut ini), sehingga, walaupun driver telah ada, webcam tersebut tetap tidak dikenali.
/* -- module initialisation -- */Dari website https://patchwork.kernel.org/patch/106041/, telah tersedia patch untuk kernel sehingga webcam ini dikenali oleh sistem.
static const struct usb_device_id device_table[] __devinitconst = {
{USB_DEVICE(0x06f8, 0x3009)},
{USB_DEVICE(0x093a, 0x2620)},
{USB_DEVICE(0x093a, 0x2621)},
{USB_DEVICE(0x093a, 0x2622), .driver_info = FL_VFLIP},
{USB_DEVICE(0x093a, 0x2624), .driver_info = FL_VFLIP},
{USB_DEVICE(0x093a, 0x2626)},
{USB_DEVICE(0x093a, 0x2628)},
{USB_DEVICE(0x093a, 0x2629), .driver_info = FL_VFLIP},
{USB_DEVICE(0x093a, 0x262a)},
{USB_DEVICE(0x093a, 0x262c)},
{}
};
MODULE_DEVICE_TABLE(usb, device_table);
Patch tersebut dicopy dari website tersebut, lalu disimpan pada suatu file yang diberi nama, misalnya: patch-genius-islim-310, dan diletakkan dalam directory /usr/src. Selanjutnya, saya mendownload kernel source 2.6.34 dan extract ke /usr/src. Sebagai catatan, versi kernel yang digunakan tidak harus versi 2.6.34, asalkan, versi kernel yang digunakan telah mensupport PAC7302 (saya tidak tahu mulai versi berapa). Beberapa langkah selanjutnya (root mode) pada Slackware64 atau Slackware 13.1 adalah sebagai berikut:diff --git a/Documentation/video4linux/gspca.txt b/Documentation/video4linux/gspca.txt index f13eb03..f9b9d32 100644 --- a/Documentation/video4linux/gspca.txt +++ b/Documentation/video4linux/gspca.txt @@ -253,6 +253,7 @@ pac7302 093a:2620 Apollo AC-905 pac7302 093a:2621 PAC731x pac7302 093a:2622 Genius Eye 312 pac7302 093a:2624 PAC7302 +pac7302 093a:2625 Genius iSlim 310 pac7302 093a:2626 Labtec 2200 pac7302 093a:2628 Genius iLook 300 pac7302 093a:2629 Genious iSlim 300 diff --git a/drivers/media/video/gspca/pac7302.c b/drivers/media/video/gspca/pac7302.c index 2a68220..7c0f265 100644 --- a/drivers/media/video/gspca/pac7302.c +++ b/drivers/media/video/gspca/pac7302.c @@ -1200,6 +1200,7 @@ static const struct usb_device_id device_table[] __devinitconst = { {USB_DEVICE(0x093a, 0x2621)}, {USB_DEVICE(0x093a, 0x2622), .driver_info = FL_VFLIP}, {USB_DEVICE(0x093a, 0x2624), .driver_info = FL_VFLIP}, + {USB_DEVICE(0x093a, 0x2625)}, {USB_DEVICE(0x093a, 0x2626)}, {USB_DEVICE(0x093a, 0x2628)}, {USB_DEVICE(0x093a, 0x2629), .driver_info = FL_VFLIP},
- pada terminal: ln -s /usr/src/linux/linux-2.6.34 /usr/src/linux
- pada terminal: cd /usr/src/linux
- pada terminal: patch -p1 -i ../patch-genius-islim-310
- pada terminal: cp /boot/config-huge-2.6.33.4 /usr/src/linux/.config
- pada terminal: make oldconfig
- pada terminal: make xconfig atau make menuconfig (jika ingin mengganti konfigurasi)
- pada terminal: make bzImage
- pada terminal: cp arch/boot/x86/bzImage /boot/vmlinuz-2.6.34
- pada terminal: make modules
- pada terminal: make modules_install
- pada terminal: cp System.map /boot/System.map-2.6.34
- pada terminal: cp .config /boot/config-2.6.34
- edit lilo.conf jika diperlukan atau buat symlink dari vmlinuz-2.6.34, System.map-2.6.34, config-2.6.34 ke vmlinuz, System.map, dan config
- pada terminal: lilo
- restart untuk menggunakan kernel hasil patch
Webcam telah dikenali, baik video maupun audio (mikrofon). Hasil test dengan qv4l2:
Selanjutnya, saya mencoba untuk menggunakan webcam ini dengan skype, tidak ada masalah. Masalah baru muncul ketika saya mencoba untuk membuat program sederhana menggunakan OpenCV, ternyata, OpenCV tidak mengenali format PJPG, error message:
HIGHGUI ERROR: V4L2: Pixel format of incoming image is unsupported by OpenCVSebagai catatan, saya menggunakan OpenCV 2.0.0. Versi terbaru dari OpenCV adalah 2.1.0. Mungkin saja, pada versi 2.1.0, format PJPG telah disupport oleh OpenCV ... belum dicoba ... Jika Anda telah mencobanya sebelum saya mencoba, mohon diinformasikan ke saya. Summary: I have bought a cheap webcam from Genius, that is, Genius iSlim 310 for my laptop that is not equipped with built-in webcam. For the features and specification of this webcam, please check this website. Unfortunately, when I connected to my laptop with Slackware64 13.1, only the audio (microphone) has been recognized (see second picture). Result of lsusb indicated that VID and PID of this webcam are 093Ah and 2625h, respectively (see third picture). The VID and PID of this webcam give the information that image chip of this webcam is PAC7302 that has been supported by current kernel but the VID and PID are not listed on usb_device_id table in pac7302.c. From https://patchwork.kernel.org/patch/106041/, I found that there is a patch for kernel to modify /usr/src/linux/drivers/media/video/gspca/pac7302.c so that the kernel can recognized the webcam when it is connected to system. The steps of patching and compiling the kernel in Slackware or Slackware64 13.1 (root mode) are:
- copy the newest version of kernel or the version that has supported PAC7302, then extract to /usr/src. I use kernel version of 2.6.34. The last kernel version of Slackware 13.1 is 2.6.33.4
- make symlink: ln -s /usr/src/linux/linux-2.6.34 /usr/src/linux
- save the patch from that website as a file, for instance, patch-genius-islim-310, then save that file in /usr/src directory
- in terminal: cd /usr/src/linux
- in terminal: patch -p1 -i ../patch-genius-islim-310
- in terminal: cp /boot/config-huge-2.6.33.4 /usr/src/linux/.config
- in terminal: make oldconfig
- in terminal: make xconfig or make menuconfig (if needed)
- in terminal: make bzImage
- in terminal: cp arch/boot/x86/bzImage /boot/vmlinuz-2.6.34
- in terminal: make modules
- in terminal: make modules_install
- in terminal: cp System.map /boot/System.map-2.6.34
- in terminal: cp .config /boot/config-2.6.34
- edit lilo.conf if needed or make symlink from vmlinuz-2.6.34, System.map-2.6.34, and config-2.6.34 to vmlinuz, System.map, and config respectively
- in terminal: lilo
- restart system for activating patched kernel
HIGHGUI ERROR: V4L2: Pixel format of incoming image is unsupported by OpenCVI have not tried for OpenCV 2.1.0 yet. I will try it later if I have a chance. Please tell me if you have tried it.