=========================================== K B T V 2 D O C U M E N T A T I O N =========================================== This is the README file for kbtv2. It gets installed by the kbtv2-core port. Until the kbtv2 GUI frontend gets its own HTML documentation, this is your friendly manual. Danny Pansters http://freebsd.ricin.com/kbtv2 Contents ======== 1. Introduction 2. Building and installing kbtv2 3. The kbtv2 ports and what they do 4. Using kbtv2 the framework 5. Using kbtv2 the application 6. Known problems and bugs 7. Contributed third party software 1. Introduction =============== Kbtv2 is the successor to kbtv, which provided a similar GUI program for the KDE3 environment. Kbtv2 is a complete rewrite. Kbtv2 can be installed without interfering with any existing kbtv1. Application data is put into ~/.kbtv. Kbtv2 currently supports the following hardware: - Brooktree/Conexant bt848/878 based PCI analog TV cards (bktr) - Hauppauge PVR150/500, cx25840 based PCI analog TV + MPEG encoder cards (cxm) - Philips saa713x based PCI analog TV cards (saa) - Philips and compatible based USB cameras (pwc) Note on tuner support for saa: There's support for the following tuner APIs, which are all for old fashioned "can" tuners, not "silicon" tuners such as Microtune's: Phillips original reference, Phillips MK3 (the variants with FM, often multi-standard), Temic, Alps, and LG. Phillips are known to work, the other three are assumed to work. Please note that my own testing ability is limited to PAL B/G. 2. Building and installing kbtv2 ================================ While you can build all kbtv2 components from the source tarball as-is, it's highly recommended to use the kbtv2-* ports. There is a kbtv2 metaport that can be used to select the desired components. Kbtv2 has the following build requirements: - FreeBSD6+ (a) - Python 2.5+ for core and backend building and runtime - C compiler for backend building and for kmod building (b) - Kernel source for kmod building - SWIG for backend building - SDL for backend building and runtime - PyQt4 for GUI building and runtime - FFMPEG for cxm backend building and runtime (a) Kbtv2 has so far been developed and tested on FreeBSD6-STABLE. FreeBSD5 is not supported but may work, or may be possible to get to work with slight modifications. As of beta3 (1.93), also tested on FreeBSD7/amd64. (b) System-provided GCC on FreeBSD6/7 tested so far. These requirements should be taken into account by the kbtv2 ports, except for FreeBSD versions (FreeBSD5 is nearly EOL). The kbtv2 metaport serves to pull in the requested slave ports. It's possible, if you like, to install every single slave port through the metaport, whether all at once or one by one. The normal usage will obviously be that you select all the components you want and be done with it. Please note that selecting backends or kmods for which you don't actually have hardware should not be a problem (they won't show up in kbtv2's devicepool of course, nor would the kernel driver attach but it should not be a fatal error at any point). By default the kbtv2-core, kbtv2-gui-qt4 and kbtv-backend-bktr ports are enabled in the metaport, the others not. To build and install: # cd /usr/ports/multimedia/kbtv2 # make config (choose components) # make [deinstall] install clean If you want to create binary packages, you should use 'make package' in the respective port directories. Note that deinstalling the metaport does not deinstall any kbtv2-* slave ports. 3. The kbtv2 ports and what they do =================================== multimedia/kbtv2 metaport multimedia/kbtv2-core core python classes multimedia/kbtv2-gui-qt4 pyqt4 frontend (aka kbtv2, the app) multimedia/kbtv2-backend-bktr python wrapper to bktr ioctls and viewer multimedia/kbtv2-backend-cxm python wrapper to cxm ioctls and viewer multimedia/kbtv2-backend-pwc python wrapper to pwc ioctls and viewer multimedia/kbtv2-backend-saa python wrapper to saa ioctls and viewer multimedia/kbtv2-kmod-bktr wraps build/install of bktr kernel modules multimedia/kbtv2-kmod-cxm provides cxm kernel modules multimedia/kbtv2-kmod-pwc provides pwc kernel module multimedia/kbtv2-kmod-saa provides saa kernel module Kbtv2-core has the option to generate and install the HTML-ized inline documentation to the core classes (most prominently AVCtrl). The kbtv2-core port also provides this README. Kbtv2-gui-qt4 provides the kbtv2 GUI frontend. It installs the GUI classes that make up kbtv2 the app, and a wrapper script kbtv2 to be used to start the app. It also installs the kbtv2-setup utility for performing hardware setup and granting user access to the devices. The backends provide Python wrappers to backend libraries (these can be used as C libraries as-is if you want). A backend has a fixed set of functions for what in core's AVCtrl are referred to as the audio, video, tuner (if applicable, TV), mpt (if applicable, webcam), mixer and viewer subsystems. Viewers are SDL based, and they can be embedded into a GUI. The kmod ports provide the kernel modules for cxm, pwc and saa. There are ports providing cxm and pwc as well, but it's recommended that you use the ones provided by kbtv2, as they are of a fixed version with known abilities and problems. The kbtv2-kmod-cxm and kbtv2-kmod-pwc ports provide the option to use the pvrxxx or pwcbsd ports instead of the kernel modules provided by the kbtv2-kmod ports. Please note that forcibly the kbtv2-kmod-cxm and kbtv2-kmod-pwc ports conflict with the pvrxxx and pwcbsd ports if the default of "internal" kmods is used. The kbtv2-kmod-bktr port has been added for users on a non-i36 arch, because e.g. on amd64 FreeBSD does not come with the bktr module pre-built. Basically, it just does a make install in /sys/modules/bktr. 4. Using kbtv2 the framework ============================ Basic example: >>> from Kbtv2 import avctrl >>> avc = avctrl.AVCtrl('bktr') >>> avc.video.setSource(1) >>> avc.tuner.setFrequency(848000) >>> avc.quit() Of course this is simplified and you'd have to set things like video standard and (for some backends) broadcasting standard and tuner type. But this is the gist of it. To embed the SDL viewer into your GUI you can use the "X11 hack" where you set the SDL_WINDOWID environment variable to the window id of the widget that you want to embed into. Kld layer Backend layer Core layer GUI layer --------- ------------- ---------- --------- C C ------> py py py swig bktr bktr-backend AVCtrl kbtv cxm cxm-backend ChanList ... pwc pwc-backend ... saa saa-backend SDL -----------------------------> XEMBED For further info you're referred to the pydoc and the backends' sources. Please note that the GUI uses most but not all the functionality, so some things are not really tested and may not yet work as intended. NOTE as of v1.96 frequencies are in kHz (int), not MHz. 5. Using kbtv2 the application ============================== After using kbtv2-setup or setting up your hardware by other means (module loading, driver attachment, devfs permissions), you can run kbtv2 by executing the kbtv2 wrapper script or clicking on its icon. NOTE to change style, font(-size), etc run qtconfig-qt4 Menu items The GUI should be self-explanatory for the most part. Let's go through the menus: Channel This menu has entries for tuning up and down your channel list, an entry to run the Channel Editor dialog, and one to quit. Webcam This menu replaces Channels menu when using a webcam backend. It has entries for panning the camera left and right and for tilting it up and down. The range of these and whether MPT is supported at all depends on the hardware/driver. Video This menu has entries to set the video viewer size (small is 320x240, medium 640x480, large 1024x768). There's also an entry to toggle (pseudo-)fullsceen. Note that SDTV has a native field size that translates to 640x480 (NTSC) or 768x576 (PAL) in square pixels, so anything larger than medium size will be scaled up by SDL and likewise scaled down for smaller sizes. Next entry is for picture controls, such as brightness and contrast. It's rarely a good idea to put widgets inside a menu but in this case (and maybe for sliders in general) I found it to be the most user friendly way to present them. Note that on some backends (cxm with PVR150) these controls don't work at the moment, and it's possible that they never will (the default settings are fine though). The last entries are for pausing the video and for running the Recorder dialog. Audio This menu has an entry where you can choose the mixer channel you want to use. This need not be the mixer channel associated with your TV sound, so it's easy to for example use a satellite box via composite video and plugging the sound into your sound card's line-in or mic. The other entry is for volume control. This is a slider too, and it has a toggle to mute the sound. Hardware This menu has an entry to select the device/backend to use. All suitable devices that are found and thought to be ready to use are shown. Please note that while supported, switching back and forth between devices is not something to toy with. Especially bktr is rather crashable when repeatedly opened and closed. Other menu entries are for running the hardware Config dialog (currently not available for pwc because of backend bugginess), and for showing the Hardware Info dialog. Help Unsurprisingly, this menu contains an entry to show the About dialog and one to show this documentation. At a later stage, the latter will be replaced by HTML-ized documentation. I may also consider adding a "Send bug report" dialog (based on the experience with real bug reports from real users). Toolbar and statusbar The toolbar holds a selection of the above menu items. It is movable between the top and the bottom. When using a TV backend the toolbar contains a spinbox widget enabling you to enter a channel number directly. The statusbar at the bottom shows an icon indicating which type of hardware is being used, TV or webcam, it shows the current channel's name (or webcam description), and it shows the backend's name and device (instance) number. The text in the middle and the icon on the left are also changed to indicate when a modal dialog is running. Shortcuts Nearly all menu items have shortcut keys. The ones I find myself using most are: PageUp, PageDown Tune up and down Up, Down Tilt camera up and down (also works for tuning up and down, but this is because cursor focus is in the channel spinbox) Left, Right Pan camera left and right (from the user's POV) F9 Toggle fullscreen F10, F11, F12 Small, medium, large size Ctrl+P Toggle pause Channel Editor dialog If you're using a TV device, you're going to need to run the Channel Editor dialog at least once. This is a modal dialog, meaning that you can't use kbtv2's normal GUI while the dialog window is opened. Its regular function is simply to allow you to change the order or names of your channels, or remove channels from your channel list in the Edit groupbox on the left. But of course you'd have to add channels first. The Add dialog extension is hidden until you click the button (because it will be rarely used). There are two methods to add or look for channels, none of which are completely automagical. You can always adjust the frequency a bit to fine-tune. The first is the most general. If you have no idea which frequencies to look for, or if you find that using a channelset gives you almost the right frequencies but all of them slightly off, or if your (cable) provider uses frequencies that are not in your traditional channelset, use the "Take steps" method. The midrange spectrum starts at 160 MHz for both PAL and NTSC systems. If you happen to have channels in the low range, just set the start value lower. Which step size to take depends on where you are. In most PAL using countries the channel bandwidth is 8 MHz, in most NTSC using countries it is 6 MHz. The advantage of this method is that once you know the step size to use and once you have found the first channel, you can click your way through the spectrum without needing to manually fine tune much. The other method uses traditional channelsets. You can use it if your country-specific channelset is listed or if not just try one. For some people this method will work great, others may note certain channels missing, or many of them needing some fine tuning. If this is the case, try using the 'take steps' method. AFC can also be useful to avoid or reduce manual tweaking (bktr). Instead of channel frequencies, you can also add composite "pseudo" channels. Which of them are actually usable depends on your hardware. Because the same channel list is used for any TV backend, you may require for example DEV0 for your bktr card and DEV3 for your saa card. I suggest putting an external source at channel zero, like most TV sets have. With cxm (at least with PVR150) there's a usability problem in that once the driver is set to composite input (DEV2/DEV4 in this case), the tuning ability is lost. If this happens to you, you should reload the cxm kernel module (which will reread the firmware). With this hardware I recommend not putting its composites in your channel list. To accomodate for other backends' composites being usable in the channel list without easily hitting this cxm problem, the cxm backend will stay in tuner mode when the user tunes to DEV0/DEV3, but not DEV2/DEV4 After selecting the Add method of choice, click Start in the Progress groupbox. In the frequency spinbox you can fine tune between +/- 1 MHz. The progressbar on the right shows how far you are. You can skip unwanted frequencies using Next, and add them as channels using Accept. When done, or whenever you want to quit, click Stop. If you hit OK, the new channel list will be written. On cancel, it is not. Recorder dialog This is an experimental add-on. Its target is the user who casually wants to record short videos of relatively small size and relatively high quality, suitable for YouTube style applications/processing. It records audio from the soundcard (master volume), and "scrapes" images from the screen (using Qt's grabWindow). It turns out that at small video sizes this works pretty well. One downside of this methodology is that if you obscure the window you'll see this on your recorded video, and if you unmap the kbtv2 window you're recording part of your desktop. This also makes for some entertaining possibilities to use the Recorder beyond its intention :) In the modal dialog window you have some (admittedly limited) options to set the target audio samplerate, video framerate, and encoding formats and bitrates. The defaults are recommended for recording small sized video. If you want to try your luck in medium or large size, you should set the target framerate very low or you will get stutter and bad A/V sync. Lowering the samplerate won't help much if anything. Reading audio is a blocking process, which limits the range of usable audio chunk sizes (currently determined by experimentation only). For a slideshow-with-speech type of video at medium or large size, try a framerate of 1 to 5. If you want to record high quality MPEG2/DVD, e.g. with cxm, use its hardware encoder directly and 'cat' from the device. In the Data groupbox you can select which directory to use for putting the temporary data. While the Recorder is typically suited for videos up to only ~20 minutes, you'll still need a fair amount of disk space. It's a two step process: first record the raw data (a big wav file and lots of little jpeg files), then encode. You can monitor your disk space usage. There are certain hardcoded limits to prevent you from accidentally filling up your entire partition. The Progress groupbox shows the current state. Once you Start recording the Record indicator turns red. Once you Stop recording, encoding starts as visually indicated by its progressbar. If you want to stop before it's finished or if the progressbar doesn't move anymore so clearly encoding has finished but it never got to 100% (bug), you can click on Stop Encoding. Raw data is deleted when encoding is stopped. Currently, the encoder used is mencoder (called out-of-process). Since it uses libavcodec it may make sense to replace this with ffmpeg. You may need to rebuild your mencoder port with mp3 support to use that format. Once encoding is done, the Play video and Save video buttons become enabled. For playing, a whole list of common players is tried, if none are found you get an error box. Don't save encoded videos in your temporary data directory, or make sure to rename them, because the encoded video is deleted from the data directory on Close. Hardware Config dialog This is a modal dialog where A/V and tuner specifications can be set. It is also the place where it becomes painfully clear that while it's nice to have a common framework, the underlying drivers all have their own particular quirks. These specifications must be set correctly for saa hardware. With kbtv1 they needed to be set at build time, so this should be an improvement. PAL B/G with Philips MK3 tuner on DEV1 seems to be most prevalent. Note that on some cards (Beholder) you may need to set the source to DEV0. For bktr hardware these settings should be correctly determined by the kernel driver (maybe overridden by sysctls), though changing them should work or at least have no undesired effects. For cxm hardware (PVR150) these settings should be correctly determined by the firmware. Changing any tuner settings has no effect. Changing video standard (for NTSC) should be supported because it may be necessary. I'm not sure if it actually works though. For pwc hardware these settings are only for the video standard, which in this context means the webcam capture size (smaller size yields a higher framerate and vice versa). This dialog is currently not available, because changing size crashes the backend. I'm a bit doubtful about its usefulness for webcams as well. For now the size is fixed at SIF (320x240) with the highest achievable framerate (30 fps on my camera). So, to sum it up: for saa backends this dialog is almost a must, while for the other backends I suggest using it only if needed. Hardware Info dialog This is a non-modal dialog showing which hardware you have: vendors, A/V decoder chip, product description. The hex numbers are the vendor ID, product ID, etc. For bktr cards the product IDs are fake, that is 0xff followed by the card number as enumerated by the driver. About Kbtv2 dialog This is a non-modal dialog showing the usual egotrip. 6. Known problems and bugs ========================== cxm: switching from composite to tuner loses tuning ability (todo: import newer pvrxxx) pwc: changing camera standard mangles images and may crash backend (fixed by ommission ;-) saa: microtune support not yet done, PAL D/K sound (works now?) gui: channel editor: autostop if end of frequency list reached recorder: encoding progressbar sometimes doesn't get to 100% 7. Contributed third party software =================================== Copyrights, licenses, attribution. There are 9 sections (a) to (i). (a) The saa backend uses the saa kernel driver, included in contrib/BSD/saa-REL_14.tgz: Copyright (c) 2004, 2005 Rohit Jalan All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. (b) The pwc backend uses the pwc kernel driver, included in contrib/GPL/pwcbsd-1.4.1.tar.gz: Copyright (C) 2006 Raaf Based on the Linux pwc driver. Copyright (C) 1999-2003 Nemosoft Unv. Copyright (C) 2004-2006 Luc Saillard 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 (c) The cxm backend uses ffmpeg. Depending on how you have built it, it may be GPL or LGPL licensed. In its default built from ports, ffmpeg is GPL. The ffcxm viewer library is based on ffplay.c. It is possible to build it, and link to the ffmpeg libraries without using any GPL components. Ffcxm doesn't use any specific GPL libraries, such as swscale. Ffcxm is adapted from ffplay: Copyright (c) 2003 Fabrice Bellard This file is part of FFmpeg. FFmpeg is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. FFmpeg 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with FFmpeg; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA (d) The cxm backend uses the cxm kernel driver, included in contrib/BSD/cxm-20051030.shar.gz: Copyright (c) 2003, 2004, 2005 John Wehle . All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. All advertising materials mentioning features or use of this software must display the following acknowledgement: This product includes software developed by John Wehle. 4. The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. (e) The cxm kernel driver uses parts of the ivtv Linux kernel driver, included in contrib/GPL/pvrxxx_gpl-23042007.tgz (copyright notices are aggregated): Copyright (C) 1996,97,98 Ralph Metzler (rjkm@thp.uni-koeln.de) & Marcus Metzler (mocm@thp.uni-koeln.de) (c) 1999-2001 Gerd Knorr Copyright (C) 2003 John Klar Copyright (C) 2004 Ulf Eklund Ulf Eklund Copyright (C) 2005 Hans Verkuil Contributed code by Tyler Trafford 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., 675 Mass Ave, Cambridge, MA 02139, USA. (f) The cxm kernel driver needs a set of patches taken from a yet uncommitted portversion of pvrxxx, and reworked to be one-file-one-patch, included in contrib/BSD/pvrxxx_port_20070423_patches.tbz (with a few additions by myself). They are (c) 2007 usleepless AT gmail.com and because they are part of a port they can be considered BSD licensed. (g) The cxm kernel driver uses binary firmware (aka a "blob") from Hauppauge, included in contrib/HAUPPAUGE/firmware.tar.gz It may be freely used and distributed, but there are certain non-compete restrictions, mainly towards firmware makers and non-Hauppauge hardware vendors: END-USER FIRMWARE LICENSE AGREEMENT IMPORTANT - PLEASE READ BEFORE COPYING, INSTALLING OR USING. Do not use or load this firmware image (the "Firmware") until you have carefully read the following terms and conditions. By loading or using the Firmware, you agree to the terms of this Agreement. If you do not wish to so agree, do not install or use the Firmware. LICENSEES: Please note: * If you are an End-User, only the END-USER FIRMWARE LICENSE AGREEMENT applies (this license). * If you are an Original Equipment Manufacturer (OEM), Independent Hardware Vendor (IHV), or Independent Firmware Vendor (ISV), the OEM/IHV/ISVFIRMWARE LICENSE AGREEMENT applies, as well as the END-USER FIRMWARE LICENSE AGREEMENT (this license). LICENSE. You may copy and use the Firmware, subject to these conditions: 1. This Firmware is licensed for use only in conjunction with Hauppauge component products. Use of the Firmware in conjunction with non-Hauppauge component products is not licensed hereunder. 2. You may not copy, modify, rent, sell, distribute or transfer any part of the Firmware except as provided in this Agreement, and you agree to prevent unauthorized copying of the Firmware. 3. You may not reverse engineer, decompile, or disassemble the Firmware. 4. You may not sublicense the Firmware. 5. The Firmware may contain the firmware or other property of third party suppliers. TRADEMARKS. Except as expressly provided herein, you shall not use Hauppauge's name in any publications, advertisements, or other announcements without Hauppauge's prior written consent. You do not have any rights to use any Hauppauge trademarks or logos. OWNERSHIP OF FIRMWARE AND COPYRIGHTS. Title to all copies of the Firmware remains with Hauppauge or its suppliers. The Firmware is copyrighted and protected by the laws of the United States and other countries, and international treaty provisions. You may not remove any copyright notices from the Firmware. Hauppauge may make changes to the Firmware, or items referenced therein, at any time without notice, but is not obligated to support or update the Firmware. Except as otherwise expressly provided, Hauppauge grants no express or implied right under Hauppauge patents, copyrights, trademarks, or other intellectual property rights. You may transfer the Firmware only if a copy of this license accompanies the Firmware and the recipient agrees to be fully bound by these terms. EXCLUSION OF WARRANTIES. THE FIRMWARE IS PROVIDED "AS IS" AND POSSIBLY WITH FAULTS. UNLESS EXPRESSLY AGREED OTHERWISE, HAUPPAUGE AND ITS SUPPLIERS AND LICENSORS DISCLAIM ANY AND ALL WARRANTIES AND GUARANTEES, EXPRESS, IMPLIED OR OTHERWISE, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT, OR FITNESS FOR A PARTICULAR PURPOSE. Hauppauge does not warrant or assume responsibility for the accuracy or completeness of any information, text, graphics, links or other items contained within the Firmware. You assume all liability, financial or otherwise, associated with Your use or disposition of the Firmware. LIMITATION OF LIABILITY. IN NO EVENT SHALL HAUPPAUGE OR ITS SUPPLIERS AND LICENSORS BE LIABLE FOR ANY DAMAGES WHATSOEVER FROM ANY CAUSE OF ACTION OF ANY KIND (INCLUDING, WITHOUT LIMITATION, LOST PROFITS, BUSINESS INTERRUPTION, OR LOST INFORMATION) ARISING OUT OF THE USE, MODIFICATION, OR INABILITY TO USE THE FIRMWARE, OR OTHERWISE, NOR FOR PUNITIVE, INCIDENTAL, CONSEQUENTIAL, OR SPECIAL DAMAGES OF ANY KIND, EVEN IF HAUPPAUGE OR ITS SUPPLIERS AND LICENSORS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. SOME JURISDICTIONS PROHIBIT EXCLUSION OR LIMITATION OF LIABILITY FOR IMPLIED WARRANTIES OR CONSEQUENTIAL OR INCIDENTAL DAMAGES, SO CERTAIN LIMITATIONS MAY NOT APPLY. YOU MAY ALSO HAVE OTHER LEGAL RIGHTS THAT VARY BETWEEN JURISDICTIONS. WAIVER AND AMENDMENT. No modification, amendment or waiver of any provision of this Agreement shall be effective unless in writing and signed by an officer of Hauppauge. No failure or delay in exercising any right, power, or remedy under this Agreement shall operate as a waiver of any such right, power or remedy. Without limiting the foregoing, terms and conditions on any purchase orders or similar materials submitted by you to Hauppauge, and any terms contained in Hauppauges standard acknowledgment form that are in conflict with these terms, shall be of no force or effect. SEVERABILITY. If any provision of this Agreement is held by a court of competent jurisdiction to be contrary to law, such provision shall be changed and interpreted so as to best accomplish the objectives of the original provision to the fullest extent allowed by law and the remaining provisions of this Agreement shall remain in full force and effect. EXPORT RESTRICTIONS. Each party acknowledges that the Firmware is subject to applicable import and export regulations of the United States and of the countries in which each party transacts business, specifically including U.S. Export Administration Act and Export Administration Regulations. Each party shall comply with such laws and regulations, as well as all other laws and regulations applicable to the Firmware. Without limiting the generality of the foregoing, each party agrees that it will not export, re-export, transfer or divert any of the Firmware or the direct programs thereof to any restricted place or party in accordance with U.S. export regulations. Note that Firmware containing encryption may be subject to additional restrictions. APPLICABLE LAWS. Claims arising under this Agreement shall be governed by the laws of New York, excluding its principles of conflict of laws and the United Nations Convention on Contracts for the Sale of Goods. You may not export the Firmware in violation of applicable export laws and regulations. Hauppauge is not obligated under any other agreements unless they are in writing and signed by an authorized representative of Hauppauge. GOVERNMENT RESTRICTED RIGHTS. The Firmware is provided with "RESTRICTED RIGHTS." Use, duplication, or disclosure by the Government is subject to restrictions as set forth in FAR52.227-14 and DFAR252.227-7013 et seq. or their successors. Use of the Firmware by the Government constitutes acknowledgment of Hauppauge's proprietary rights therein. Contractor or Manufacturer is Hauppauge Computer Works, Inc. 91 Cabot Court Hauppauge, NY 11788 TERMINATION OF THIS AGREEMENT. Hauppauge may terminate this Agreement at any time if you violate its terms. Upon termination, you will immediately destroy the Firmware or return all copies of the Firmware to Hauppauge. (h) The PyQt4 GUI is used under the Trolltech (Nokia) and Riverbank open source edition license requirements. You cannot take the GUI and use it in a closed source application (the kbtv2 framework is fair game though). (i) Icons come (mostly) from KDE4's Oxygen Theme (verbatim from COPYING): Copyright (C) 2007 David Vignoni Copyright (C) 2007 Johann Ollivier Lapeyre Copyright (C) 2007 Kenneth Wimer Copyright (C) 2007 Nuno Fernades Pinheiro Copyright (C) 2007 Riccardo Iaconelli Copyright (C) 2007 David Miller and others You may copy it under the Creative Common Attribution-ShareAlike 3.0 license, as found here: http://creativecommons.org/licenses/by-sa/3.0/ or the GNU Library General Public License (with following clarification). This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA Clarification: The GNU Lesser General Public License or LGPL is written for software libraries in the first place. We expressly want the LGPL to be valid for this artwork library too. KDE Oxygen theme icons is a special kind of software library, it is an artwork library, it's elements can be used in a Graphical User Interface, or GUI. Source code, for this library means: - where they exist, SVG; - otherwise, if applicable, the multi-layered formats xcf or psd, or otherwise png. The LGPL in some sections obliges you to make the files carry notices. With images this is in some cases impossible or hardly useful. With this library a notice is placed at a prominent place in the directory containing the elements. You may follow this practice. The exception in section 6 of the GNU Lesser General Public License covers the use of elements of this art library in a GUI. kde-artists [at] kde.org