Note for English Readers

If I write the articles in Indonesian, I will write a summary in English so that you can read my articles too. After you read the summary and you feel that you need more information about that, please do not hesitate to contact me via e-mail that can be found in my profile.

Thank you for reading my blogs.

Saturday, June 26, 2010

Genius iSlim 310 Webcam



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:
  • 300k pixel, resolusi VGA
  • up to 30fps
  • ada mikrofon
  • dapat diatur posisinya untuk desktop maupun laptop
  • frame format: PJPG (tetapi di website tertulis JPEG/WMV; mungkin karena menggunakan driver untuk jendela)
  • fokus manual
  • USB 1.1
  • Windows & Mac Support


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 -- */
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);
Dari website https://patchwork.kernel.org/patch/106041/, telah tersedia patch untuk kernel sehingga webcam ini dikenali oleh sistem.
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},
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:
  • 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
Untuk versi kernel atau distro Linux yang berbeda, silakan dikonversi sendiri. Hasilnya:
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 OpenCV
Sebagai 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 
Note that if you use different Linux distribution, different kernel version, and/or different boot loader, please convert yourself the steps above. The result of patched kernel is the system can recognized this webcam (see fourth picture). I have tested on qv4l2 (see fifth and sixth pictures)and skype, so far so good. However, when I tried to access the webcam from my own program that use OpenCV Library v.2.0.0, there was an error message that told if the PJPG is unsupported by OpenCV:
HIGHGUI ERROR: V4L2: Pixel format of incoming image is unsupported by OpenCV
I 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.

No comments: