diff options
Diffstat (limited to 'media-video/linux-uvc')
-rw-r--r-- | media-video/linux-uvc/ChangeLog | 10 | ||||
-rw-r--r-- | media-video/linux-uvc/Manifest | 20 | ||||
-rw-r--r-- | media-video/linux-uvc/files/41-001-isight.patch | 437 | ||||
-rw-r--r-- | media-video/linux-uvc/files/digest-linux-uvc-0.0.1_pre41 | 3 | ||||
-rw-r--r-- | media-video/linux-uvc/linux-uvc-0.0.1_pre41.ebuild | 61 | ||||
-rw-r--r-- | media-video/linux-uvc/metadata.xml | 7 |
6 files changed, 538 insertions, 0 deletions
diff --git a/media-video/linux-uvc/ChangeLog b/media-video/linux-uvc/ChangeLog new file mode 100644 index 000000000000..7f9170fe2e19 --- /dev/null +++ b/media-video/linux-uvc/ChangeLog @@ -0,0 +1,10 @@ +# ChangeLog for media-video/linux-uvc +# Copyright 1999-2006 Gentoo Foundation; Distributed under the GPL v2 +# $Header: /var/cvsroot/gentoo-x86/media-video/linux-uvc/ChangeLog,v 1.1 2006/07/26 16:55:12 genstef Exp $ + + 26 Jul 2006; Stefan Schweizer <genstef@gentoo.org> ChangeLog: + New ebuild thanks to Jürgen Geuter <tante@the-gay-bar.com>, Niv Vaizer + <nivw2002@fastmail.fm>, José María Fernández González + <jmfernandez@cnb.uam.es> and Armando Di Cianno <armando@goodship.net> in bug + 127086 + diff --git a/media-video/linux-uvc/Manifest b/media-video/linux-uvc/Manifest new file mode 100644 index 000000000000..2f2fb0454ed5 --- /dev/null +++ b/media-video/linux-uvc/Manifest @@ -0,0 +1,20 @@ +AUX 41-001-isight.patch 13019 RMD160 8815cf498f7eeb03fa370c9bede7699d2cb2bc02 SHA1 c3517f64526a03c6a5914605287bc4f5efa2d9b7 SHA256 50cc557fe94a8aad0e31264747ea68171d2a0cd32a7dd4107e5da9674ad6e1fe +MD5 6f9fbd3247dd902f67155bc7a1420958 files/41-001-isight.patch 13019 +RMD160 8815cf498f7eeb03fa370c9bede7699d2cb2bc02 files/41-001-isight.patch 13019 +SHA256 50cc557fe94a8aad0e31264747ea68171d2a0cd32a7dd4107e5da9674ad6e1fe files/41-001-isight.patch 13019 +DIST linux-uvc-0.0.1_pre41.tar.bz2 24770 RMD160 7c88dc6a0619ce6007df0cb69ed91e3a7e025918 SHA1 91069133d933b6e2a4ed025dd3e36975fc3dedf8 SHA256 37ddca5fa2ea07920bfc0af196ffbce9bb2ccc4d9fac35396d8a3f0c8d9a2260 +EBUILD linux-uvc-0.0.1_pre41.ebuild 1825 RMD160 ae8712509a57d1767a043d1f9ac41e787a6923e1 SHA1 a476da7d4fdcbdcf3719ec15b0825e5432648aa9 SHA256 3470bd8d12a2eaaec50b041c325bf2d7157ca6bc7fb18d69d63ef42e10db4150 +MD5 389d1ebd5929a9a5417a692812389c5b linux-uvc-0.0.1_pre41.ebuild 1825 +RMD160 ae8712509a57d1767a043d1f9ac41e787a6923e1 linux-uvc-0.0.1_pre41.ebuild 1825 +SHA256 3470bd8d12a2eaaec50b041c325bf2d7157ca6bc7fb18d69d63ef42e10db4150 linux-uvc-0.0.1_pre41.ebuild 1825 +MISC ChangeLog 503 RMD160 040c8105953d2e63a8c66f061fe21c54eb4e5ddf SHA1 5096e60b7a280cbd1f72f2fcd15e665560c75df7 SHA256 d2b8fc456d65a0cf5aac6a8555f59b66190c3635c4182fcfadbd7358c3ed6f91 +MD5 49038324f8ea3584e222862708811d94 ChangeLog 503 +RMD160 040c8105953d2e63a8c66f061fe21c54eb4e5ddf ChangeLog 503 +SHA256 d2b8fc456d65a0cf5aac6a8555f59b66190c3635c4182fcfadbd7358c3ed6f91 ChangeLog 503 +MISC metadata.xml 201 RMD160 cab717fcec0a2c638d65949ef3fbbc7178b7d9ca SHA1 18c17ef2d08198657f786bff811e74e03edcf296 SHA256 07bcae025fd428cc29b1b0ed914d6014ef3e95344562d6b464ca5f773defa8ee +MD5 e17250777e685637b92f26f197959acc metadata.xml 201 +RMD160 cab717fcec0a2c638d65949ef3fbbc7178b7d9ca metadata.xml 201 +SHA256 07bcae025fd428cc29b1b0ed914d6014ef3e95344562d6b464ca5f773defa8ee metadata.xml 201 +MD5 cb4c7365b68ea8176625e5a14b82ffe9 files/digest-linux-uvc-0.0.1_pre41 265 +RMD160 6ceccbc0883e1120a4be274894a227613a3938e6 files/digest-linux-uvc-0.0.1_pre41 265 +SHA256 09c6efa1aab808d4a20decb5478c582d5d8e027cb50a390286ab3df1c1390229 files/digest-linux-uvc-0.0.1_pre41 265 diff --git a/media-video/linux-uvc/files/41-001-isight.patch b/media-video/linux-uvc/files/41-001-isight.patch new file mode 100644 index 000000000000..42251560dcf8 --- /dev/null +++ b/media-video/linux-uvc/files/41-001-isight.patch @@ -0,0 +1,437 @@ +Index: uvcvideo.c +=================================================================== +--- uvcvideo.c (revision 40) ++++ uvcvideo.c (working copy) +@@ -49,7 +49,7 @@ + + #define DRIVER_AUTHOR "Laurent Pinchart <laurent.pinchart@skynet.be>" + #define DRIVER_DESC "USB Video Class driver" +-#define DRIVER_VERSION "0.1.0" ++#define DRIVER_VERSION "0.1.0-b" + #define DRIVER_VERSION_NUMBER KERNEL_VERSION(0, 1, 0) + + #define UVC_CTRL_TIMEOUT 300 +@@ -73,6 +73,8 @@ + 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71} + #define UVC_GUID_FORMAT_YUY2 {0x59, 0x55, 0x59, 0x32, 0x00, 0x00, 0x10, 0x00, \ + 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71} ++#define UVC_GUID_FORMAT_YUY2A {0x59, 0x55, 0x59, 0x32, 0x00, 0x00, 0x10, 0x00, \ ++ 0x00, 0x80, 0x71, 0x9b, 0x38, 0x00, 0xaa, 0x00} + #define UVC_GUID_FORMAT_NV12 {0x4e, 0x56, 0x31, 0x32, 0x00, 0x00, 0x10, 0x00, \ + 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71} + +@@ -564,8 +566,8 @@ + .fcc = V4L2_PIX_FMT_YUYV, + }, + { +- .guid = UVC_GUID_FORMAT_YUY2, +- .fcc = V4L2_PIX_FMT_YUYV, ++ .guid = UVC_GUID_FORMAT_YUY2A, ++ .fcc = V4L2_PIX_FMT_UYVY, + }, + { + .guid = UVC_GUID_FORMAT_NV12, +@@ -1271,24 +1273,38 @@ + struct uvc_buffer *buf, const __u8 *data, unsigned int len) + { + unsigned int maxlen, nbytes; +- void *mem; +- __u8 fid; ++ __u8 *mem; ++ __u8 fid = queue->last_fid; ++ int hlen = 0, flags = 0, is_header = 0; ++ static const __u8 hdr[] = { 0x11, 0x22, 0x33, 0x44, ++ 0xde, 0xad, 0xbe, 0xef, ++ 0xde, 0xad, 0xfa, 0xce }; + + /* Sanity checks: + * - packet must be at least 2 bytes long + * - bHeaderLength value must be at least 2 bytes (see above) + * - bHeaderLength value can't be larger than the packet size. + */ +- if (len < 2 || data[0] < 2 || data[0] > len) +- return -EINVAL; ++ if ((len >= 14 && memcmp (&data[3], hdr, 12) == 0) || ++ (len >= 13 && memcmp (&data[2], hdr, 12) == 0)) { ++ uvc_trace(UVC_TRACE_FRAME, "Detecting new header"); ++ hlen = (data[3] == 0x11) ? data[1] : data[0]; ++ if (hlen > len - 1 || hlen < 2) ++ return -EINVAL; ++ flags = (data[3] == 0x11) ? data[2] : data[1]; ++ is_header = 1; ++ } + + /* Skip payloads marked with the error bit ("error frames"). */ +- if (data[1] & UVC_STREAM_ERR) { ++ if (hlen != 0 && flags & UVC_STREAM_ERR) { + uvc_trace(UVC_TRACE_FRAME, "Dropping packet (error bit set).\n"); +- return 0; ++ ++ //return 0; + } + +- fid = data[1] & UVC_STREAM_FID; ++ if (hlen != 0) { ++ fid = flags & UVC_STREAM_FID; ++ } + + /* Store the packet FID bit and return immediately when the buffer is + * NULL. +@@ -1334,28 +1350,33 @@ + "toggled).\n"); + buf->state = UVC_BUF_STATE_DONE; + return -EAGAIN; ++ } else if (is_header && buf->buf.bytesused > 0) { ++ buf->state = UVC_BUF_STATE_DONE; ++ return -EAGAIN; + } + + queue->last_fid = fid; + + /* Copy the video data to the buffer. */ +- len -= data[0]; ++ len -= hlen; + maxlen = buf->buf.length - buf->buf.bytesused; +- mem = queue->mem + buf->buf.m.offset + buf->buf.bytesused; +- nbytes = min(len, maxlen); +- memcpy(mem, data + data[0], nbytes); +- buf->buf.bytesused += nbytes; ++ if (!is_header) { /* we skip headers, they do not contain data */ ++ mem = queue->mem + buf->buf.m.offset + buf->buf.bytesused; ++ nbytes = min(len - hlen, maxlen); ++ memmove(mem, data + hlen, nbytes); ++ buf->buf.bytesused += nbytes; ++ } + + /* Drop the current frame if the buffer size was exceeded. */ +- if (len > maxlen) { ++ if (len - hlen > maxlen || buf->buf.bytesused == buf->buf.length) { + uvc_trace(UVC_TRACE_FRAME, "Frame complete (overflow).\n"); + buf->state = UVC_BUF_STATE_DONE; + } + + /* Mark the buffer as done if the EOF marker is set. */ +- if (data[1] & UVC_STREAM_EOF && buf->buf.bytesused != 0) { ++ if (hlen != 0 && (flags & UVC_STREAM_EOF && buf->buf.bytesused != 0)) { + uvc_trace(UVC_TRACE_FRAME, "Frame complete (EOF found).\n"); +- if (data[0] == len) ++ if (hlen != 0 && hlen == len) + printk("EOF in empty packet.\n"); + buf->state = UVC_BUF_STATE_DONE; + } +@@ -1593,7 +1614,7 @@ + + if (ret != size) { + uvc_printk(KERN_ERR, "Failed to query (%u) UVC control %u " +- "(unit %u) : %d.\n", query, cs, unit, ret); ++ "(unit %u) : %d (exp: %u).\n", query, cs, unit, ret, size); + return -EIO; + } + +@@ -1883,8 +1904,10 @@ + + /* Get the minimum and maximum values for compression settings. */ + if ((ret = uvc_get_video_ctrl(video, &probe_min, 1, GET_MIN)) < 0 || +- (ret = uvc_get_video_ctrl(video, &probe_max, 1, GET_MAX)) < 0) ++ (ret = uvc_get_video_ctrl(video, &probe_max, 1, GET_MAX)) < 0) { ++ ret = 0; + goto done; ++ } + + probe->wCompQuality = probe_max.wCompQuality; + +@@ -1942,7 +1965,7 @@ + return ret; + + /* Retrieve the default format and commit it. */ +- if ((ret = uvc_get_video_ctrl(video, probe, 1, GET_DEF)) < 0) ++ if ((ret = uvc_get_video_ctrl(video, probe, 1, GET_CUR)) < 0) + return ret; + if ((ret = uvc_set_video_ctrl(video, probe, 0)) < 0) + return ret; +@@ -2214,6 +2237,11 @@ + if ((ret = uvc_set_video_ctrl(video, &probe, 0)) < 0) + return ret; + ++ if (probe.dwMaxVideoFrameSize == 0) ++ probe.dwMaxVideoFrameSize = ++ video->streaming->format[probe.bFormatIndex - 1]. ++ frame[probe.bFrameIndex - 1].dwMaxVideoFrameBufferSize; ++ + memcpy(&video->streaming->ctrl, &probe, sizeof probe); + video->streaming->cur_format = format; + video->streaming->cur_frame = frame; +@@ -3506,6 +3534,13 @@ + + if (!found) { + uvc_printk(KERN_INFO, "No valid video chain found.\n"); ++ if (dev->udev->descriptor.idVendor == 0x05ac && ++ dev->udev->descriptor.idProduct == 0x8300) { ++ uvc_printk (KERN_ERR, "Possible an Apple iSight " ++ "without firmware loaded; please read " ++ "the documentation, load the firmware " ++ "and re-load the driver."); ++ } + return -1; + } + +@@ -3757,6 +3792,19 @@ + .bInterfaceClass = USB_CLASS_VENDOR_SPEC, + .bInterfaceSubClass = 1, + .bInterfaceProtocol = 0 }, ++ /* Apple iSight (built-in in Macintels) */ ++ { .match_flags = USB_DEVICE_ID_MATCH_DEVICE, ++ .idVendor = 0x05ac, ++ .idProduct = 0x8501 }, ++ /* same, but without firmware loaded (will give useful warning) ++ * when the firmware is not loaded in the pre-instal step). */ ++ { .match_flags = USB_DEVICE_ID_MATCH_DEVICE ++ | USB_DEVICE_ID_MATCH_INT_INFO, ++ .idVendor = 0x05ac, ++ .idProduct = 0x8300, ++ .bInterfaceClass = USB_CLASS_VENDOR_SPEC, ++ .bInterfaceSubClass = 0xff, ++ .bInterfaceProtocol = 0xff }, + /* Generic USB Video Class */ + { USB_INTERFACE_INFO(USB_CLASS_VIDEO, 1, 0) }, + {} +Index: Makefile +=================================================================== +--- Makefile (revision 40) ++++ Makefile (working copy) +@@ -1,7 +1,7 @@ + KERNEL_VERSION := `uname -r` + KERNEL_DIR := /lib/modules/$(KERNEL_VERSION)/build + INSTALL_MOD_DIR := usb/media +- ++DRIVER_VERSION := `grep DRIVER_VERSION uvcvideo.c | grep define | grep -v DRIVER_VERSION_NUMBER | cut -d"\"" -f2` + PWD := $(shell pwd) + + obj-m := uvcvideo.o +@@ -9,7 +9,7 @@ + %.o : %.c + gcc $(TEST_CFLAGS) -c -o $@ $< + +-all: uvcvideo ++all: uvcvideo extract + + uvcvideo: + @echo "Building USB Video Class driver..." +@@ -24,3 +24,12 @@ + -rm -f *.o *.ko .*.cmd .*.flags *.mod.c Modules.symvers + -rm -rf .tmp_versions + ++extract: extract.c ++ gcc -g `pkg-config --cflags --libs libusb` -o extract extract.c ++ ++dist: ++ rm -fr linux-uvc-${DRIVER_VERSION} ++ mkdir linux-uvc-${DRIVER_VERSION} ++ cp uvcvideo.[ch] Makefile extract.c linux-uvc-${DRIVER_VERSION}/ ++ tar -zcf linux-uvc-${DRIVER_VERSION}.tar.gz linux-uvc-${DRIVER_VERSION} ++ rm -fr linux-uvc-${DRIVER_VERSION} +--- /dev/null 2006-05-30 21:15:07.000000000 -0400 ++++ extract.c 2006-07-22 11:30:41.000000000 -0400 +@@ -0,0 +1,202 @@ ++/* ++ * Apple iSight (the one built in the screen of Macbooks) firmware loader ++ * Copyright (C) 2006 Ronald S. Bultje <rbultje@ronald.bitfreak.net> ++ * ++ * Special thanks to Johannes Berg <johannes@sipsolutions.net> for helping ++ * to find out how to load the firmware; see his website on ++ * http://johannes.sipsolutions.net/MacBook/iSight for details. ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, ++ * MA 02110-1301, USA ++ */ ++ ++#include <stdlib.h> ++#include <stdio.h> ++#include <sys/types.h> ++#include <sys/stat.h> ++#include <fcntl.h> ++#include <errno.h> ++ ++#include <usb.h> ++#define TIMEOUT 300 ++ ++static int ++read_fw (struct usb_dev_handle *dev, char *filename) ++{ ++ long long int pos; ++ int fd, rd, len, req, llen, res, ret = -1; ++ unsigned char data[4], rdata[1024], *ptr; ++ ++ if ((fd = open (filename, O_RDONLY)) == -1) { ++ perror ("Opening file"); ++ return -1; ++ } else if (lseek (fd, 5172, SEEK_SET) != 5172) { ++ perror ("Seeking"); ++ close (fd); ++ return -1; ++ } ++ ++ if ((res = usb_control_msg (dev, 0x40, 0xA0, 0xe600, 0, ++ "\1", 1, TIMEOUT)) != 1) { ++ perror ("Firmware load init failed"); ++ close (fd); ++ return -1; ++ } ++ while (1) { ++ if ((len = read (fd, data, 4)) != 4) { ++ if (len == 0) { ++ fprintf (stderr, ++ "Unexpected eos - corrupt driver?\n"); ++ goto end; ++ } else { ++ perror("Reading firmware header chunk failed"); ++ goto end; ++ } ++ } ++ len = (data[0] << 8) | data[1]; ++ req = (data[2] << 8) | data[3]; ++ if (len == 0x8001) ++ break; /* success */ ++ else if (len == 0) ++ continue; ++ else if (len < 0 || len >= 1024) { ++ fprintf (stderr, ++ "Invalid firmware length %d, load aborted\n", ++ len); ++ goto end; ++ } else if (read (fd, rdata, len) != len) { ++ perror ("Error reading firmware data"); ++ goto end; ++ } ++ ++ /* upload to usb bus */ ++ for (ptr = rdata; len > 0; req += 50, ptr += 50) { ++ llen = len > 50 ? 50 : len; ++ len -= llen; ++ ++ if ((res = usb_control_msg (dev, 0x40, 0xA0, req, 0, ++ (char *) ptr, llen, ++ TIMEOUT)) != llen) { ++ fprintf (stderr, ++ "firmware load req=0x%x failed: %s\n", ++ req, strerror (errno)); ++ goto end; ++ } ++ } ++ } ++ ++ ret = 0; ++end: ++ if ((res = usb_control_msg (dev, 0x40, 0xA0, 0xe600, 0, ++ "\0", 1, TIMEOUT)) != 1) { ++ perror ("Firmware finish-up failed"); ++ ret = -1; ++ } ++ ++ close (fd); ++ ++ return ret; ++} ++ ++static int ++probe_dev (struct usb_device *dev, char *fw_filename) ++{ ++ int n, total = 0; ++ ++ if (dev->descriptor.idVendor == 0x05ac && ++ dev->descriptor.idProduct == 0x8300 && ++ dev->descriptor.bDeviceClass == 0xff && ++ dev->descriptor.bDeviceSubClass == 0xff && ++ dev->descriptor.bDeviceProtocol == 0xff) { ++ usb_dev_handle *h; ++ ++ /* load firmware */ ++ if (!(h = usb_open (dev))) { ++ perror ("Opening iSight"); ++ return; ++ } ++ printf ("Loading firmware for iSight...\n"); ++ if (read_fw (h, fw_filename) == 0) { ++ printf ("done\n"); ++ total++; ++ } ++ usb_close (h); ++ } else if (dev->descriptor.idVendor == 0x05ac && ++ dev->descriptor.idProduct == 0x8501) { ++ printf ("Apple iSight with firmware already loaded found\n"); ++ total++; ++ } ++ ++ for (n = 0; n < dev->num_children; n++) ++ total += probe_dev (dev->children[n], fw_filename); ++ ++ return total; ++} ++ ++int ++main (int argc, char *argv[]) ++{ ++ int n, m, found = 0; ++ char command[1024]; ++ struct usb_bus *bus; ++ struct usb_device *dev; ++ ++ if (argc != 2) { ++ fprintf(stderr, "Usage: %s <firmware file>\n", argv[0]); ++ fprintf(stderr, "Firmware can usually be found on your Mac " ++ "partition in /System/Library/Extensions/" ++ "IOUSBFamily.kext/Contents/PlugIns/" ++ "AppleUSBVideoSupport.kext/Contents/MacOS/" ++ "AppleUSBVideoSupport\n"); ++ return -1; ++ } ++ ++ /* check sha1sum on firmware, to prevent loading crap into the ++ * iSight and thus possibly damaging it. */ ++ snprintf (command, sizeof (command) - 1, ++ "test \"x`sha1sum %s`\" == \"x%s %s\" &> /dev/null", ++ argv[1], "86430c04f9b67c5c3d84409138a7679827025ec2", ++ argv[1]); ++ if (system (command) != 0) { ++ fprintf (stderr, "Sha1sum check on firmware file failed\n"); ++ return -1; ++ } ++ ++ /* init usb */ ++ usb_init (); ++ if (usb_find_busses () == 0) { ++ fprintf (stderr, "No USB busses found\n"); ++ return -1; ++ } else if (usb_find_devices () == 0) { ++ fprintf (stderr, "No USB devices found\n"); ++ return -1; ++ } ++ ++ /* find iSight */ ++ for (bus = usb_busses; bus != NULL; bus = bus->next) { ++ if (bus->devices != NULL) { ++ for (dev = bus->devices; dev != NULL; ++ dev = dev->next) { ++ found += probe_dev (dev, argv[1]); ++ } ++ } ++ } ++ if (found == 0) { ++ fprintf (stderr, "No Apple iSight found!\n"); ++ return -1; ++ } ++ ++ return 0; ++} diff --git a/media-video/linux-uvc/files/digest-linux-uvc-0.0.1_pre41 b/media-video/linux-uvc/files/digest-linux-uvc-0.0.1_pre41 new file mode 100644 index 000000000000..d7914e1cabb5 --- /dev/null +++ b/media-video/linux-uvc/files/digest-linux-uvc-0.0.1_pre41 @@ -0,0 +1,3 @@ +MD5 2e34368507b7fe09db620a3114e7c489 linux-uvc-0.0.1_pre41.tar.bz2 24770 +RMD160 7c88dc6a0619ce6007df0cb69ed91e3a7e025918 linux-uvc-0.0.1_pre41.tar.bz2 24770 +SHA256 37ddca5fa2ea07920bfc0af196ffbce9bb2ccc4d9fac35396d8a3f0c8d9a2260 linux-uvc-0.0.1_pre41.tar.bz2 24770 diff --git a/media-video/linux-uvc/linux-uvc-0.0.1_pre41.ebuild b/media-video/linux-uvc/linux-uvc-0.0.1_pre41.ebuild new file mode 100644 index 000000000000..9733a3b5625e --- /dev/null +++ b/media-video/linux-uvc/linux-uvc-0.0.1_pre41.ebuild @@ -0,0 +1,61 @@ +# Copyright 1999-2006 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: /var/cvsroot/gentoo-x86/media-video/linux-uvc/linux-uvc-0.0.1_pre41.ebuild,v 1.1 2006/07/26 16:55:12 genstef Exp $ + +inherit eutils linux-mod + +DESCRIPTION="Linux driver and user-space tools for USB Video Class devices." +HOMEPAGE="http://linux-uvc.berlios.de/" +SRC_URI="http://gentooexperimental.org/~genstef/dist/${P}.tar.bz2" +#ESVN_REPO_URI="http://svn.berlios.de/svnroot/repos/linux-uvc/linux-uvc/trunk/" +#ESVN_OPTIONS="-r ${PV/*_pre}" + + +LICENSE="GPL-2" +KEYWORDS="~x86" +SLOT="0" +IUSE="" +DEPEND=">=dev-libs/libusb-0.1.12" + +MODULE_NAMES="uvcvideo(usb/media)" +BUILD_TARGETS="uvcvideo" +CONFIG_CHECK="VIDEO_DEV" + +pkg_setup() { + linux-mod_pkg_setup + + BUILD_PARAMS="KERNEL_DIR=${KV_DIR}" + MODULESD_UVCVIDEO_ENABLED="yes" + MODULESD_UVCVIDEO_ADDITIONS=( "pre-install uvcvideo /sbin/isight-firmware-tool /lib/firmware/AppleUSBVideoSupport; sleep 2" ) +} + +src_unpack() { + unpack ${A} + cd ${S} + epatch ${FILESDIR}/41-001-isight.patch +} + +src_compile() { + emake extract || die "Could not build iSight firmware tool." + + linux-mod_src_compile +} + +src_install() { + into / + newsbin extract isight-firmware-tool + + linux-mod_src_install +} + +pkg_postinst() { + linux-mod_pkg_postinst + ewarn "This is SVN checkout build -- against revision: ${PV/*_pre}" + ewarn "If something is broken, you should get involved, and report" + ewarn "back to the mailing list linux-uvc-devel@lists.berlios.de" + + elog "Using iSight cameras, you *must* install the firmware to /lib/firmware, for e.g:" + elog " mkdir -p /lib/firmware" + elog " cp /\${OSX_MOUNT}/System/Library/Extensions/IOUSBFamily.kext/Contents/PlugIns/AppleUSBVideoSupport.kext/Contents/MacOS/AppleUSBVideoSupport /lib/firmware" + elog "Check /etc/modules.d/uvcvideo for more info." +} diff --git a/media-video/linux-uvc/metadata.xml b/media-video/linux-uvc/metadata.xml new file mode 100644 index 000000000000..bca01aded38f --- /dev/null +++ b/media-video/linux-uvc/metadata.xml @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd"> +<pkgmetadata> +<maintainer> + <email>genstef@gentoo.org</email> +</maintainer> +</pkgmetadata> |