guvcview-src-1.7.1/0000775000175000017500000000000012173260105013165 5ustar paulopauloguvcview-src-1.7.1/missing0000755000175000017500000002415212173257652014603 0ustar paulopaulo#! /bin/sh # Common stub for a few missing GNU programs while installing. scriptversion=2012-01-06.13; # UTC # Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006, # 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc. # Originally by Fran,cois Pinard , 1996. # 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, 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, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. if test $# -eq 0; then echo 1>&2 "Try \`$0 --help' for more information" exit 1 fi run=: sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p' sed_minuso='s/.* -o \([^ ]*\).*/\1/p' # In the cases where this matters, `missing' is being run in the # srcdir already. if test -f configure.ac; then configure_ac=configure.ac else configure_ac=configure.in fi msg="missing on your system" case $1 in --run) # Try to run requested program, and just exit if it succeeds. run= shift "$@" && exit 0 # Exit code 63 means version mismatch. This often happens # when the user try to use an ancient version of a tool on # a file that requires a minimum version. In this case we # we should proceed has if the program had been absent, or # if --run hadn't been passed. if test $? = 63; then run=: msg="probably too old" fi ;; -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an error status if there is no known handling for PROGRAM. Options: -h, --help display this help and exit -v, --version output version information and exit --run try to run the given command, and emulate it if it fails Supported PROGRAM values: aclocal touch file \`aclocal.m4' autoconf touch file \`configure' autoheader touch file \`config.h.in' autom4te touch the output file, or create a stub one automake touch all \`Makefile.in' files bison create \`y.tab.[ch]', if possible, from existing .[ch] flex create \`lex.yy.c', if possible, from existing .c help2man touch the output file lex create \`lex.yy.c', if possible, from existing .c makeinfo touch the output file yacc create \`y.tab.[ch]', if possible, from existing .[ch] Version suffixes to PROGRAM as well as the prefixes \`gnu-', \`gnu', and \`g' are ignored when checking the name. Send bug reports to ." exit $? ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing $scriptversion (GNU Automake)" exit $? ;; -*) echo 1>&2 "$0: Unknown \`$1' option" echo 1>&2 "Try \`$0 --help' for more information" exit 1 ;; esac # normalize program name to check for. program=`echo "$1" | sed ' s/^gnu-//; t s/^gnu//; t s/^g//; t'` # Now exit if we have it, but it failed. Also exit now if we # don't have it and --version was passed (most likely to detect # the program). This is about non-GNU programs, so use $1 not # $program. case $1 in lex*|yacc*) # Not GNU programs, they don't have --version. ;; *) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 elif test "x$2" = "x--version" || test "x$2" = "x--help"; then # Could not run --version or --help. This is probably someone # running `$TOOL --version' or `$TOOL --help' to check whether # $TOOL exists and not knowing $TOOL uses missing. exit 1 fi ;; esac # If it does not exist, or fails to run (possibly an outdated version), # try to emulate it. case $program in aclocal*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." touch aclocal.m4 ;; autoconf*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." touch configure ;; autoheader*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acconfig.h' or \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` test -z "$files" && files="config.h" touch_files= for f in $files; do case $f in *:*) touch_files="$touch_files "`echo "$f" | sed -e 's/^[^:]*://' -e 's/:.*//'`;; *) touch_files="$touch_files $f.in";; esac done touch $touch_files ;; automake*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." find . -type f -name Makefile.am -print | sed 's/\.am$/.in/' | while read f; do touch "$f"; done ;; autom4te*) echo 1>&2 "\ WARNING: \`$1' is needed, but is $msg. You might have modified some files without having the proper tools for further handling them. You can get \`$1' as part of \`Autoconf' from any GNU archive site." file=`echo "$*" | sed -n "$sed_output"` test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` if test -f "$file"; then touch $file else test -z "$file" || exec >$file echo "#! /bin/sh" echo "# Created by GNU Automake missing as a replacement of" echo "# $ $@" echo "exit 0" chmod +x $file exit 1 fi ;; bison*|yacc*) echo 1>&2 "\ WARNING: \`$1' $msg. You should only need it if you modified a \`.y' file. You may need the \`Bison' package in order for those modifications to take effect. You can get \`Bison' from any GNU archive site." rm -f y.tab.c y.tab.h if test $# -ne 1; then eval LASTARG=\${$#} case $LASTARG in *.y) SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` if test -f "$SRCFILE"; then cp "$SRCFILE" y.tab.c fi SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` if test -f "$SRCFILE"; then cp "$SRCFILE" y.tab.h fi ;; esac fi if test ! -f y.tab.h; then echo >y.tab.h fi if test ! -f y.tab.c; then echo 'main() { return 0; }' >y.tab.c fi ;; lex*|flex*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.l' file. You may need the \`Flex' package in order for those modifications to take effect. You can get \`Flex' from any GNU archive site." rm -f lex.yy.c if test $# -ne 1; then eval LASTARG=\${$#} case $LASTARG in *.l) SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` if test -f "$SRCFILE"; then cp "$SRCFILE" lex.yy.c fi ;; esac fi if test ! -f lex.yy.c; then echo 'main() { return 0; }' >lex.yy.c fi ;; help2man*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a dependency of a manual page. You may need the \`Help2man' package in order for those modifications to take effect. You can get \`Help2man' from any GNU archive site." file=`echo "$*" | sed -n "$sed_output"` test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` if test -f "$file"; then touch $file else test -z "$file" || exec >$file echo ".ab help2man is required to generate this page" exit $? fi ;; makeinfo*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.texi' or \`.texinfo' file, or any other file indirectly affecting the aspect of the manual. The spurious call might also be the consequence of using a buggy \`make' (AIX, DU, IRIX). You might want to install the \`Texinfo' package or the \`GNU make' package. Grab either from any GNU archive site." # The file to touch is that specified with -o ... file=`echo "$*" | sed -n "$sed_output"` test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` if test -z "$file"; then # ... or it is the one specified with @setfilename ... infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` file=`sed -n ' /^@setfilename/{ s/.* \([^ ]*\) *$/\1/ p q }' $infile` # ... or it is derived from the source name (dir/f.texi becomes f.info) test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info fi # If the file does not exist, the user really needs makeinfo; # let's fail without touching anything. test -f $file || exit 1 touch $file ;; *) echo 1>&2 "\ WARNING: \`$1' is needed, and is $msg. You might have modified some files without having the proper tools for further handling them. Check the \`README' file, it often tells you about the needed prerequisites for installing this package. You may also peek at any GNU archive site, in case some other package would contain this missing \`$1' program." exit 1 ;; esac exit 0 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: guvcview-src-1.7.1/COPYING0000664000175000017500000010451312173235416014233 0ustar paulopaulo GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) 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 3 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, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . guvcview-src-1.7.1/m4/0000775000175000017500000000000012173235416013514 5ustar paulopauloguvcview-src-1.7.1/m4/po.m40000664000175000017500000004460612173235416014406 0ustar paulopaulo# po.m4 serial 15 (gettext-0.17) dnl Copyright (C) 1995-2007 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl dnl This file can can be used in projects which are not available under dnl the GNU General Public License or the GNU Library General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Library General Public License, and the rest of the GNU dnl gettext package package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Authors: dnl Ulrich Drepper , 1995-2000. dnl Bruno Haible , 2000-2003. AC_PREREQ(2.50) dnl Checks for all prerequisites of the po subdirectory. AC_DEFUN([AM_PO_SUBDIRS], [ AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl AC_REQUIRE([AM_PROG_MKDIR_P])dnl defined by automake AC_REQUIRE([AM_NLS])dnl dnl Release version of the gettext macros. This is used to ensure that dnl the gettext macros and po/Makefile.in.in are in sync. AC_SUBST([GETTEXT_MACRO_VERSION], [0.17]) dnl Perform the following tests also if --disable-nls has been given, dnl because they are needed for "make dist" to work. dnl Search for GNU msgfmt in the PATH. dnl The first test excludes Solaris msgfmt and early GNU msgfmt versions. dnl The second test excludes FreeBSD msgfmt. AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt, [$ac_dir/$ac_word --statistics /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 && (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)], :) AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT) dnl Test whether it is GNU msgfmt >= 0.15. changequote(,)dnl case `$MSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) MSGFMT_015=: ;; *) MSGFMT_015=$MSGFMT ;; esac changequote([,])dnl AC_SUBST([MSGFMT_015]) changequote(,)dnl case `$GMSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) GMSGFMT_015=: ;; *) GMSGFMT_015=$GMSGFMT ;; esac changequote([,])dnl AC_SUBST([GMSGFMT_015]) dnl Search for GNU xgettext 0.12 or newer in the PATH. dnl The first test excludes Solaris xgettext and early GNU xgettext versions. dnl The second test excludes FreeBSD xgettext. AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext, [$ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 && (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)], :) dnl Remove leftover from FreeBSD xgettext call. rm -f messages.po dnl Test whether it is GNU xgettext >= 0.15. changequote(,)dnl case `$XGETTEXT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) XGETTEXT_015=: ;; *) XGETTEXT_015=$XGETTEXT ;; esac changequote([,])dnl AC_SUBST([XGETTEXT_015]) dnl Search for GNU msgmerge 0.11 or newer in the PATH. AM_PATH_PROG_WITH_TEST(MSGMERGE, msgmerge, [$ac_dir/$ac_word --update -q /dev/null /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1], :) dnl Installation directories. dnl Autoconf >= 2.60 defines localedir. For older versions of autoconf, we dnl have to define it here, so that it can be used in po/Makefile. test -n "$localedir" || localedir='${datadir}/locale' AC_SUBST([localedir]) dnl Support for AM_XGETTEXT_OPTION. test -n "${XGETTEXT_EXTRA_OPTIONS+set}" || XGETTEXT_EXTRA_OPTIONS= AC_SUBST([XGETTEXT_EXTRA_OPTIONS]) AC_CONFIG_COMMANDS([po-directories], [[ for ac_file in $CONFIG_FILES; do # Support "outfile[:infile[:infile...]]" case "$ac_file" in *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; esac # PO directories have a Makefile.in generated from Makefile.in.in. case "$ac_file" in */Makefile.in) # Adjust a relative srcdir. ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`" ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` # In autoconf-2.13 it is called $ac_given_srcdir. # In autoconf-2.50 it is called $srcdir. test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" case "$ac_given_srcdir" in .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; /*) top_srcdir="$ac_given_srcdir" ;; *) top_srcdir="$ac_dots$ac_given_srcdir" ;; esac # Treat a directory as a PO directory if and only if it has a # POTFILES.in file. This allows packages to have multiple PO # directories under different names or in different locations. if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then rm -f "$ac_dir/POTFILES" test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES" cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES" POMAKEFILEDEPS="POTFILES.in" # ALL_LINGUAS, POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES depend # on $ac_dir but don't depend on user-specified configuration # parameters. if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then # The LINGUAS file contains the set of available languages. if test -n "$OBSOLETE_ALL_LINGUAS"; then test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete" fi ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"` # Hide the ALL_LINGUAS assigment from automake < 1.5. eval 'ALL_LINGUAS''=$ALL_LINGUAS_' POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS" else # The set of available languages was given in configure.in. # Hide the ALL_LINGUAS assigment from automake < 1.5. eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS' fi # Compute POFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po) # Compute UPDATEPOFILES # as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update) # Compute DUMMYPOFILES # as $(foreach lang, $(ALL_LINGUAS), $(lang).nop) # Compute GMOFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo) case "$ac_given_srcdir" in .) srcdirpre= ;; *) srcdirpre='$(srcdir)/' ;; esac POFILES= UPDATEPOFILES= DUMMYPOFILES= GMOFILES= for lang in $ALL_LINGUAS; do POFILES="$POFILES $srcdirpre$lang.po" UPDATEPOFILES="$UPDATEPOFILES $lang.po-update" DUMMYPOFILES="$DUMMYPOFILES $lang.nop" GMOFILES="$GMOFILES $srcdirpre$lang.gmo" done # CATALOGS depends on both $ac_dir and the user's LINGUAS # environment variable. INST_LINGUAS= if test -n "$ALL_LINGUAS"; then for presentlang in $ALL_LINGUAS; do useit=no if test "%UNSET%" != "$LINGUAS"; then desiredlanguages="$LINGUAS" else desiredlanguages="$ALL_LINGUAS" fi for desiredlang in $desiredlanguages; do # Use the presentlang catalog if desiredlang is # a. equal to presentlang, or # b. a variant of presentlang (because in this case, # presentlang can be used as a fallback for messages # which are not translated in the desiredlang catalog). case "$desiredlang" in "$presentlang"*) useit=yes;; esac done if test $useit = yes; then INST_LINGUAS="$INST_LINGUAS $presentlang" fi done fi CATALOGS= if test -n "$INST_LINGUAS"; then for lang in $INST_LINGUAS; do CATALOGS="$CATALOGS $lang.gmo" done fi test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile" sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile" for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do if test -f "$f"; then case "$f" in *.orig | *.bak | *~) ;; *) cat "$f" >> "$ac_dir/Makefile" ;; esac fi done fi ;; esac done]], [# Capture the value of obsolete ALL_LINGUAS because we need it to compute # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. But hide it # from automake < 1.5. eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"' # Capture the value of LINGUAS because we need it to compute CATALOGS. LINGUAS="${LINGUAS-%UNSET%}" ]) ]) dnl Postprocesses a Makefile in a directory containing PO files. AC_DEFUN([AM_POSTPROCESS_PO_MAKEFILE], [ # When this code is run, in config.status, two variables have already been # set: # - OBSOLETE_ALL_LINGUAS is the value of LINGUAS set in configure.in, # - LINGUAS is the value of the environment variable LINGUAS at configure # time. changequote(,)dnl # Adjust a relative srcdir. ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`" ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` # In autoconf-2.13 it is called $ac_given_srcdir. # In autoconf-2.50 it is called $srcdir. test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" case "$ac_given_srcdir" in .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; /*) top_srcdir="$ac_given_srcdir" ;; *) top_srcdir="$ac_dots$ac_given_srcdir" ;; esac # Find a way to echo strings without interpreting backslash. if test "X`(echo '\t') 2>/dev/null`" = 'X\t'; then gt_echo='echo' else if test "X`(printf '%s\n' '\t') 2>/dev/null`" = 'X\t'; then gt_echo='printf %s\n' else echo_func () { cat < "$ac_file.tmp" if grep -l '@TCLCATALOGS@' "$ac_file" > /dev/null; then # Add dependencies that cannot be formulated as a simple suffix rule. for lang in $ALL_LINGUAS; do frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'` cat >> "$ac_file.tmp" < /dev/null; then # Add dependencies that cannot be formulated as a simple suffix rule. for lang in $ALL_LINGUAS; do frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'` cat >> "$ac_file.tmp" <> "$ac_file.tmp" <, 1995. # Check whether LC_MESSAGES is available in . AC_DEFUN([gt_LC_MESSAGES], [ AC_CACHE_CHECK([for LC_MESSAGES], gt_cv_val_LC_MESSAGES, [AC_TRY_LINK([#include ], [return LC_MESSAGES], gt_cv_val_LC_MESSAGES=yes, gt_cv_val_LC_MESSAGES=no)]) if test $gt_cv_val_LC_MESSAGES = yes; then AC_DEFINE(HAVE_LC_MESSAGES, 1, [Define if your file defines LC_MESSAGES.]) fi ]) guvcview-src-1.7.1/m4/intltool.m40000775000175000017500000002421512173235416015631 0ustar paulopaulo## intltool.m4 - Configure intltool for the target system. -*-Shell-script-*- ## Copyright (C) 2001 Eazel, Inc. ## Author: Maciej Stachowiak ## Kenneth Christiansen ## ## 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ## ## As a special exception to the GNU General Public License, if you ## distribute this file as part of a program that contains a ## configuration script generated by Autoconf, you may include it under ## the same distribution terms that you use for the rest of that program. dnl IT_PROG_INTLTOOL([MINIMUM-VERSION], [no-xml]) # serial 40 IT_PROG_INTLTOOL AC_DEFUN([IT_PROG_INTLTOOL], [ AC_PREREQ([2.50])dnl AC_REQUIRE([AM_NLS])dnl case "$am__api_version" in 1.[01234]) AC_MSG_ERROR([Automake 1.5 or newer is required to use intltool]) ;; *) ;; esac if test -n "$1"; then AC_MSG_CHECKING([for intltool >= $1]) INTLTOOL_REQUIRED_VERSION_AS_INT=`echo $1 | awk -F. '{ print $ 1 * 1000 + $ 2 * 100 + $ 3; }'` INTLTOOL_APPLIED_VERSION=`intltool-update --version | head -1 | cut -d" " -f3` [INTLTOOL_APPLIED_VERSION_AS_INT=`echo $INTLTOOL_APPLIED_VERSION | awk -F. '{ print $ 1 * 1000 + $ 2 * 100 + $ 3; }'` ] AC_MSG_RESULT([$INTLTOOL_APPLIED_VERSION found]) test "$INTLTOOL_APPLIED_VERSION_AS_INT" -ge "$INTLTOOL_REQUIRED_VERSION_AS_INT" || AC_MSG_ERROR([Your intltool is too old. You need intltool $1 or later.]) fi AC_PATH_PROG(INTLTOOL_UPDATE, [intltool-update]) AC_PATH_PROG(INTLTOOL_MERGE, [intltool-merge]) AC_PATH_PROG(INTLTOOL_EXTRACT, [intltool-extract]) if test -z "$INTLTOOL_UPDATE" -o -z "$INTLTOOL_MERGE" -o -z "$INTLTOOL_EXTRACT"; then AC_MSG_ERROR([The intltool scripts were not found. Please install intltool.]) fi INTLTOOL_DESKTOP_RULE='%.desktop: %.desktop.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_DIRECTORY_RULE='%.directory: %.directory.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_KEYS_RULE='%.keys: %.keys.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -k -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_PROP_RULE='%.prop: %.prop.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_OAF_RULE='%.oaf: %.oaf.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -o -p $(top_srcdir)/po $< [$]@' INTLTOOL_PONG_RULE='%.pong: %.pong.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_SERVER_RULE='%.server: %.server.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -o -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_SHEET_RULE='%.sheet: %.sheet.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_SOUNDLIST_RULE='%.soundlist: %.soundlist.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_UI_RULE='%.ui: %.ui.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_XML_RULE='%.xml: %.xml.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_XML_NOMERGE_RULE='%.xml: %.xml.in $(INTLTOOL_MERGE) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u /tmp $< [$]@' INTLTOOL_XAM_RULE='%.xam: %.xml.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_KBD_RULE='%.kbd: %.kbd.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -m -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_CAVES_RULE='%.caves: %.caves.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_SCHEMAS_RULE='%.schemas: %.schemas.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -s -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_THEME_RULE='%.theme: %.theme.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_SERVICE_RULE='%.service: %.service.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_POLICY_RULE='%.policy: %.policy.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' _IT_SUBST(INTLTOOL_DESKTOP_RULE) _IT_SUBST(INTLTOOL_DIRECTORY_RULE) _IT_SUBST(INTLTOOL_KEYS_RULE) _IT_SUBST(INTLTOOL_PROP_RULE) _IT_SUBST(INTLTOOL_OAF_RULE) _IT_SUBST(INTLTOOL_PONG_RULE) _IT_SUBST(INTLTOOL_SERVER_RULE) _IT_SUBST(INTLTOOL_SHEET_RULE) _IT_SUBST(INTLTOOL_SOUNDLIST_RULE) _IT_SUBST(INTLTOOL_UI_RULE) _IT_SUBST(INTLTOOL_XAM_RULE) _IT_SUBST(INTLTOOL_KBD_RULE) _IT_SUBST(INTLTOOL_XML_RULE) _IT_SUBST(INTLTOOL_XML_NOMERGE_RULE) _IT_SUBST(INTLTOOL_CAVES_RULE) _IT_SUBST(INTLTOOL_SCHEMAS_RULE) _IT_SUBST(INTLTOOL_THEME_RULE) _IT_SUBST(INTLTOOL_SERVICE_RULE) _IT_SUBST(INTLTOOL_POLICY_RULE) # Check the gettext tools to make sure they are GNU AC_PATH_PROG(XGETTEXT, xgettext) AC_PATH_PROG(MSGMERGE, msgmerge) AC_PATH_PROG(MSGFMT, msgfmt) AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT) if test -z "$XGETTEXT" -o -z "$MSGMERGE" -o -z "$MSGFMT"; then AC_MSG_ERROR([GNU gettext tools not found; required for intltool]) fi xgversion="`$XGETTEXT --version|grep '(GNU ' 2> /dev/null`" mmversion="`$MSGMERGE --version|grep '(GNU ' 2> /dev/null`" mfversion="`$MSGFMT --version|grep '(GNU ' 2> /dev/null`" if test -z "$xgversion" -o -z "$mmversion" -o -z "$mfversion"; then AC_MSG_ERROR([GNU gettext tools not found; required for intltool]) fi AC_PATH_PROG(INTLTOOL_PERL, perl) if test -z "$INTLTOOL_PERL"; then AC_MSG_ERROR([perl not found]) fi AC_MSG_CHECKING([for perl >= 5.8.1]) $INTLTOOL_PERL -e "use 5.8.1;" > /dev/null 2>&1 if test $? -ne 0; then AC_MSG_ERROR([perl 5.8.1 is required for intltool]) else IT_PERL_VERSION="`$INTLTOOL_PERL -e \"printf '%vd', $^V\"`" AC_MSG_RESULT([$IT_PERL_VERSION]) fi if test "x$2" != "xno-xml"; then AC_MSG_CHECKING([for XML::Parser]) if `$INTLTOOL_PERL -e "require XML::Parser" 2>/dev/null`; then AC_MSG_RESULT([ok]) else AC_MSG_ERROR([XML::Parser perl module is required for intltool]) fi fi # Substitute ALL_LINGUAS so we can use it in po/Makefile AC_SUBST(ALL_LINGUAS) # Set DATADIRNAME correctly if it is not set yet # (copied from glib-gettext.m4) if test -z "$DATADIRNAME"; then AC_LINK_IFELSE( [AC_LANG_PROGRAM([[]], [[extern int _nl_msg_cat_cntr; return _nl_msg_cat_cntr]])], [DATADIRNAME=share], [case $host in *-*-solaris*) dnl On Solaris, if bind_textdomain_codeset is in libc, dnl GNU format message catalog is always supported, dnl since both are added to the libc all together. dnl Hence, we'd like to go with DATADIRNAME=share dnl in this case. AC_CHECK_FUNC(bind_textdomain_codeset, [DATADIRNAME=share], [DATADIRNAME=lib]) ;; *) [DATADIRNAME=lib] ;; esac]) fi AC_SUBST(DATADIRNAME) IT_PO_SUBDIR([po]) ]) # IT_PO_SUBDIR(DIRNAME) # --------------------- # All po subdirs have to be declared with this macro; the subdir "po" is # declared by IT_PROG_INTLTOOL. # AC_DEFUN([IT_PO_SUBDIR], [AC_PREREQ([2.53])dnl We use ac_top_srcdir inside AC_CONFIG_COMMANDS. dnl dnl The following CONFIG_COMMANDS should be executed at the very end dnl of config.status. AC_CONFIG_COMMANDS_PRE([ AC_CONFIG_COMMANDS([$1/stamp-it], [ if [ ! grep "^# INTLTOOL_MAKEFILE$" "$1/Makefile.in" > /dev/null ]; then AC_MSG_ERROR([$1/Makefile.in.in was not created by intltoolize.]) fi rm -f "$1/stamp-it" "$1/stamp-it.tmp" "$1/POTFILES" "$1/Makefile.tmp" >"$1/stamp-it.tmp" [sed '/^#/d s/^[[].*] *// /^[ ]*$/d '"s|^| $ac_top_srcdir/|" \ "$srcdir/$1/POTFILES.in" | sed '$!s/$/ \\/' >"$1/POTFILES" ] [sed '/^POTFILES =/,/[^\\]$/ { /^POTFILES =/!d r $1/POTFILES } ' "$1/Makefile.in" >"$1/Makefile"] rm -f "$1/Makefile.tmp" mv "$1/stamp-it.tmp" "$1/stamp-it" ]) ])dnl ]) # _IT_SUBST(VARIABLE) # ------------------- # Abstract macro to do either _AM_SUBST_NOTMAKE or AC_SUBST # AC_DEFUN([_IT_SUBST], [ AC_SUBST([$1]) m4_ifdef([_AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE([$1])]) ] ) # deprecated macros AU_ALIAS([AC_PROG_INTLTOOL], [IT_PROG_INTLTOOL]) # A hint is needed for aclocal from Automake <= 1.9.4: # AC_DEFUN([AC_PROG_INTLTOOL], ...) guvcview-src-1.7.1/m4/nls.m40000664000175000017500000000226612173235416014560 0ustar paulopaulo# nls.m4 serial 3 (gettext-0.15) dnl Copyright (C) 1995-2003, 2005-2006 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl dnl This file can can be used in projects which are not available under dnl the GNU General Public License or the GNU Library General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Library General Public License, and the rest of the GNU dnl gettext package package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Authors: dnl Ulrich Drepper , 1995-2000. dnl Bruno Haible , 2000-2003. AC_PREREQ(2.50) AC_DEFUN([AM_NLS], [ AC_MSG_CHECKING([whether NLS is requested]) dnl Default is enabled NLS AC_ARG_ENABLE(nls, [ --disable-nls do not use Native Language Support], USE_NLS=$enableval, USE_NLS=yes) AC_MSG_RESULT($USE_NLS) AC_SUBST(USE_NLS) ]) guvcview-src-1.7.1/m4/lib-prefix.m40000664000175000017500000001503612173235416016024 0ustar paulopaulo# lib-prefix.m4 serial 5 (gettext-0.15) dnl Copyright (C) 2001-2005 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. dnl AC_LIB_ARG_WITH is synonymous to AC_ARG_WITH in autoconf-2.13, and dnl similar to AC_ARG_WITH in autoconf 2.52...2.57 except that is doesn't dnl require excessive bracketing. ifdef([AC_HELP_STRING], [AC_DEFUN([AC_LIB_ARG_WITH], [AC_ARG_WITH([$1],[[$2]],[$3],[$4])])], [AC_DEFUN([AC_][LIB_ARG_WITH], [AC_ARG_WITH([$1],[$2],[$3],[$4])])]) dnl AC_LIB_PREFIX adds to the CPPFLAGS and LDFLAGS the flags that are needed dnl to access previously installed libraries. The basic assumption is that dnl a user will want packages to use other packages he previously installed dnl with the same --prefix option. dnl This macro is not needed if only AC_LIB_LINKFLAGS is used to locate dnl libraries, but is otherwise very convenient. AC_DEFUN([AC_LIB_PREFIX], [ AC_BEFORE([$0], [AC_LIB_LINKFLAGS]) AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) dnl By default, look in $includedir and $libdir. use_additional=yes AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" ]) AC_LIB_ARG_WITH([lib-prefix], [ --with-lib-prefix[=DIR] search for libraries in DIR/include and DIR/lib --without-lib-prefix don't search for libraries in includedir and libdir], [ if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" ]) else additional_includedir="$withval/include" additional_libdir="$withval/$acl_libdirstem" fi fi ]) if test $use_additional = yes; then dnl Potentially add $additional_includedir to $CPPFLAGS. dnl But don't add it dnl 1. if it's the standard /usr/include, dnl 2. if it's already present in $CPPFLAGS, dnl 3. if it's /usr/local/include and we are using GCC on Linux, dnl 4. if it doesn't exist as a directory. if test "X$additional_includedir" != "X/usr/include"; then haveit= for x in $CPPFLAGS; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then if test -d "$additional_includedir"; then dnl Really add $additional_includedir to $CPPFLAGS. CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }-I$additional_includedir" fi fi fi fi dnl Potentially add $additional_libdir to $LDFLAGS. dnl But don't add it dnl 1. if it's the standard /usr/lib, dnl 2. if it's already present in $LDFLAGS, dnl 3. if it's /usr/local/lib and we are using GCC on Linux, dnl 4. if it doesn't exist as a directory. if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then haveit= for x in $LDFLAGS; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then if test -n "$GCC"; then case $host_os in linux*) haveit=yes;; esac fi fi if test -z "$haveit"; then if test -d "$additional_libdir"; then dnl Really add $additional_libdir to $LDFLAGS. LDFLAGS="${LDFLAGS}${LDFLAGS:+ }-L$additional_libdir" fi fi fi fi fi ]) dnl AC_LIB_PREPARE_PREFIX creates variables acl_final_prefix, dnl acl_final_exec_prefix, containing the values to which $prefix and dnl $exec_prefix will expand at the end of the configure script. AC_DEFUN([AC_LIB_PREPARE_PREFIX], [ dnl Unfortunately, prefix and exec_prefix get only finally determined dnl at the end of configure. if test "X$prefix" = "XNONE"; then acl_final_prefix="$ac_default_prefix" else acl_final_prefix="$prefix" fi if test "X$exec_prefix" = "XNONE"; then acl_final_exec_prefix='${prefix}' else acl_final_exec_prefix="$exec_prefix" fi acl_save_prefix="$prefix" prefix="$acl_final_prefix" eval acl_final_exec_prefix=\"$acl_final_exec_prefix\" prefix="$acl_save_prefix" ]) dnl AC_LIB_WITH_FINAL_PREFIX([statement]) evaluates statement, with the dnl variables prefix and exec_prefix bound to the values they will have dnl at the end of the configure script. AC_DEFUN([AC_LIB_WITH_FINAL_PREFIX], [ acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" $1 exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" ]) dnl AC_LIB_PREPARE_MULTILIB creates a variable acl_libdirstem, containing dnl the basename of the libdir, either "lib" or "lib64". AC_DEFUN([AC_LIB_PREPARE_MULTILIB], [ dnl There is no formal standard regarding lib and lib64. The current dnl practice is that on a system supporting 32-bit and 64-bit instruction dnl sets or ABIs, 64-bit libraries go under $prefix/lib64 and 32-bit dnl libraries go under $prefix/lib. We determine the compiler's default dnl mode by looking at the compiler's library search path. If at least dnl of its elements ends in /lib64 or points to a directory whose absolute dnl pathname ends in /lib64, we assume a 64-bit ABI. Otherwise we use the dnl default, namely "lib". acl_libdirstem=lib searchpath=`(LC_ALL=C $CC -print-search-dirs) 2>/dev/null | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'` if test -n "$searchpath"; then acl_save_IFS="${IFS= }"; IFS=":" for searchdir in $searchpath; do if test -d "$searchdir"; then case "$searchdir" in */lib64/ | */lib64 ) acl_libdirstem=lib64 ;; *) searchdir=`cd "$searchdir" && pwd` case "$searchdir" in */lib64 ) acl_libdirstem=lib64 ;; esac ;; esac fi done IFS="$acl_save_IFS" fi ]) guvcview-src-1.7.1/m4/glibc21.m40000664000175000017500000000144512173235416015205 0ustar paulopaulo# glibc21.m4 serial 3 dnl Copyright (C) 2000-2002, 2004 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # Test for the GNU C Library, version 2.1 or newer. # From Bruno Haible. AC_DEFUN([gl_GLIBC21], [ AC_CACHE_CHECK(whether we are using the GNU C Library 2.1 or newer, ac_cv_gnu_library_2_1, [AC_EGREP_CPP([Lucky GNU user], [ #include #ifdef __GNU_LIBRARY__ #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1) || (__GLIBC__ > 2) Lucky GNU user #endif #endif ], ac_cv_gnu_library_2_1=yes, ac_cv_gnu_library_2_1=no) ] ) AC_SUBST(GLIBC21) GLIBC21="$ac_cv_gnu_library_2_1" ] ) guvcview-src-1.7.1/m4/lib-link.m40000664000175000017500000007205512173235416015470 0ustar paulopaulo# lib-link.m4 serial 13 (gettext-0.17) dnl Copyright (C) 2001-2007 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. AC_PREREQ(2.54) dnl AC_LIB_LINKFLAGS(name [, dependencies]) searches for libname and dnl the libraries corresponding to explicit and implicit dependencies. dnl Sets and AC_SUBSTs the LIB${NAME} and LTLIB${NAME} variables and dnl augments the CPPFLAGS variable. dnl Sets and AC_SUBSTs the LIB${NAME}_PREFIX variable to nonempty if libname dnl was found in ${LIB${NAME}_PREFIX}/$acl_libdirstem. AC_DEFUN([AC_LIB_LINKFLAGS], [ AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) AC_REQUIRE([AC_LIB_RPATH]) define([Name],[translit([$1],[./-], [___])]) define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) AC_CACHE_CHECK([how to link with lib[]$1], [ac_cv_lib[]Name[]_libs], [ AC_LIB_LINKFLAGS_BODY([$1], [$2]) ac_cv_lib[]Name[]_libs="$LIB[]NAME" ac_cv_lib[]Name[]_ltlibs="$LTLIB[]NAME" ac_cv_lib[]Name[]_cppflags="$INC[]NAME" ac_cv_lib[]Name[]_prefix="$LIB[]NAME[]_PREFIX" ]) LIB[]NAME="$ac_cv_lib[]Name[]_libs" LTLIB[]NAME="$ac_cv_lib[]Name[]_ltlibs" INC[]NAME="$ac_cv_lib[]Name[]_cppflags" LIB[]NAME[]_PREFIX="$ac_cv_lib[]Name[]_prefix" AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME) AC_SUBST([LIB]NAME) AC_SUBST([LTLIB]NAME) AC_SUBST([LIB]NAME[_PREFIX]) dnl Also set HAVE_LIB[]NAME so that AC_LIB_HAVE_LINKFLAGS can reuse the dnl results of this search when this library appears as a dependency. HAVE_LIB[]NAME=yes undefine([Name]) undefine([NAME]) ]) dnl AC_LIB_HAVE_LINKFLAGS(name, dependencies, includes, testcode) dnl searches for libname and the libraries corresponding to explicit and dnl implicit dependencies, together with the specified include files and dnl the ability to compile and link the specified testcode. If found, it dnl sets and AC_SUBSTs HAVE_LIB${NAME}=yes and the LIB${NAME} and dnl LTLIB${NAME} variables and augments the CPPFLAGS variable, and dnl #defines HAVE_LIB${NAME} to 1. Otherwise, it sets and AC_SUBSTs dnl HAVE_LIB${NAME}=no and LIB${NAME} and LTLIB${NAME} to empty. dnl Sets and AC_SUBSTs the LIB${NAME}_PREFIX variable to nonempty if libname dnl was found in ${LIB${NAME}_PREFIX}/$acl_libdirstem. AC_DEFUN([AC_LIB_HAVE_LINKFLAGS], [ AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) AC_REQUIRE([AC_LIB_RPATH]) define([Name],[translit([$1],[./-], [___])]) define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) dnl Search for lib[]Name and define LIB[]NAME, LTLIB[]NAME and INC[]NAME dnl accordingly. AC_LIB_LINKFLAGS_BODY([$1], [$2]) dnl Add $INC[]NAME to CPPFLAGS before performing the following checks, dnl because if the user has installed lib[]Name and not disabled its use dnl via --without-lib[]Name-prefix, he wants to use it. ac_save_CPPFLAGS="$CPPFLAGS" AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME) AC_CACHE_CHECK([for lib[]$1], [ac_cv_lib[]Name], [ ac_save_LIBS="$LIBS" LIBS="$LIBS $LIB[]NAME" AC_TRY_LINK([$3], [$4], [ac_cv_lib[]Name=yes], [ac_cv_lib[]Name=no]) LIBS="$ac_save_LIBS" ]) if test "$ac_cv_lib[]Name" = yes; then HAVE_LIB[]NAME=yes AC_DEFINE([HAVE_LIB]NAME, 1, [Define if you have the $1 library.]) AC_MSG_CHECKING([how to link with lib[]$1]) AC_MSG_RESULT([$LIB[]NAME]) else HAVE_LIB[]NAME=no dnl If $LIB[]NAME didn't lead to a usable library, we don't need dnl $INC[]NAME either. CPPFLAGS="$ac_save_CPPFLAGS" LIB[]NAME= LTLIB[]NAME= LIB[]NAME[]_PREFIX= fi AC_SUBST([HAVE_LIB]NAME) AC_SUBST([LIB]NAME) AC_SUBST([LTLIB]NAME) AC_SUBST([LIB]NAME[_PREFIX]) undefine([Name]) undefine([NAME]) ]) dnl Determine the platform dependent parameters needed to use rpath: dnl acl_libext, dnl acl_shlibext, dnl acl_hardcode_libdir_flag_spec, dnl acl_hardcode_libdir_separator, dnl acl_hardcode_direct, dnl acl_hardcode_minus_L. AC_DEFUN([AC_LIB_RPATH], [ dnl Tell automake >= 1.10 to complain if config.rpath is missing. m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([config.rpath])]) AC_REQUIRE([AC_PROG_CC]) dnl we use $CC, $GCC, $LDFLAGS AC_REQUIRE([AC_LIB_PROG_LD]) dnl we use $LD, $with_gnu_ld AC_REQUIRE([AC_CANONICAL_HOST]) dnl we use $host AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT]) dnl we use $ac_aux_dir AC_CACHE_CHECK([for shared library run path origin], acl_cv_rpath, [ CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \ ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh . ./conftest.sh rm -f ./conftest.sh acl_cv_rpath=done ]) wl="$acl_cv_wl" acl_libext="$acl_cv_libext" acl_shlibext="$acl_cv_shlibext" acl_libname_spec="$acl_cv_libname_spec" acl_library_names_spec="$acl_cv_library_names_spec" acl_hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec" acl_hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator" acl_hardcode_direct="$acl_cv_hardcode_direct" acl_hardcode_minus_L="$acl_cv_hardcode_minus_L" dnl Determine whether the user wants rpath handling at all. AC_ARG_ENABLE(rpath, [ --disable-rpath do not hardcode runtime library paths], :, enable_rpath=yes) ]) dnl AC_LIB_LINKFLAGS_BODY(name [, dependencies]) searches for libname and dnl the libraries corresponding to explicit and implicit dependencies. dnl Sets the LIB${NAME}, LTLIB${NAME} and INC${NAME} variables. dnl Also, sets the LIB${NAME}_PREFIX variable to nonempty if libname was found dnl in ${LIB${NAME}_PREFIX}/$acl_libdirstem. AC_DEFUN([AC_LIB_LINKFLAGS_BODY], [ AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) dnl Autoconf >= 2.61 supports dots in --with options. define([N_A_M_E],[m4_if(m4_version_compare(m4_defn([m4_PACKAGE_VERSION]),[2.61]),[-1],[translit([$1],[.],[_])],[$1])]) dnl By default, look in $includedir and $libdir. use_additional=yes AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" ]) AC_LIB_ARG_WITH([lib]N_A_M_E[-prefix], [ --with-lib]N_A_M_E[-prefix[=DIR] search for lib$1 in DIR/include and DIR/lib --without-lib]N_A_M_E[-prefix don't search for lib$1 in includedir and libdir], [ if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" ]) else additional_includedir="$withval/include" additional_libdir="$withval/$acl_libdirstem" fi fi ]) dnl Search the library and its dependencies in $additional_libdir and dnl $LDFLAGS. Using breadth-first-seach. LIB[]NAME= LTLIB[]NAME= INC[]NAME= LIB[]NAME[]_PREFIX= rpathdirs= ltrpathdirs= names_already_handled= names_next_round='$1 $2' while test -n "$names_next_round"; do names_this_round="$names_next_round" names_next_round= for name in $names_this_round; do already_handled= for n in $names_already_handled; do if test "$n" = "$name"; then already_handled=yes break fi done if test -z "$already_handled"; then names_already_handled="$names_already_handled $name" dnl See if it was already located by an earlier AC_LIB_LINKFLAGS dnl or AC_LIB_HAVE_LINKFLAGS call. uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'` eval value=\"\$HAVE_LIB$uppername\" if test -n "$value"; then if test "$value" = yes; then eval value=\"\$LIB$uppername\" test -z "$value" || LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$value" eval value=\"\$LTLIB$uppername\" test -z "$value" || LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$value" else dnl An earlier call to AC_LIB_HAVE_LINKFLAGS has determined dnl that this library doesn't exist. So just drop it. : fi else dnl Search the library lib$name in $additional_libdir and $LDFLAGS dnl and the already constructed $LIBNAME/$LTLIBNAME. found_dir= found_la= found_so= found_a= eval libname=\"$acl_libname_spec\" # typically: libname=lib$name if test -n "$acl_shlibext"; then shrext=".$acl_shlibext" # typically: shrext=.so else shrext= fi if test $use_additional = yes; then dir="$additional_libdir" dnl The same code as in the loop below: dnl First look for a shared library. if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi dnl Then look for a static library. if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext"; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi fi if test "X$found_dir" = "X"; then for x in $LDFLAGS $LTLIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) case "$x" in -L*) dir=`echo "X$x" | sed -e 's/^X-L//'` dnl First look for a shared library. if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi dnl Then look for a static library. if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext"; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi ;; esac if test "X$found_dir" != "X"; then break fi done fi if test "X$found_dir" != "X"; then dnl Found the library. LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$found_dir -l$name" if test "X$found_so" != "X"; then dnl Linking with a shared library. We attempt to hardcode its dnl directory into the executable's runpath, unless it's the dnl standard /usr/lib. if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/$acl_libdirstem"; then dnl No hardcoding is needed. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" else dnl Use an explicit option to hardcode DIR into the resulting dnl binary. dnl Potentially add DIR to ltrpathdirs. dnl The ltrpathdirs will be appended to $LTLIBNAME at the end. haveit= for x in $ltrpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $found_dir" fi dnl The hardcoding into $LIBNAME is system dependent. if test "$acl_hardcode_direct" = yes; then dnl Using DIR/libNAME.so during linking hardcodes DIR into the dnl resulting binary. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" else if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then dnl Use an explicit option to hardcode DIR into the resulting dnl binary. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" dnl Potentially add DIR to rpathdirs. dnl The rpathdirs will be appended to $LIBNAME at the end. haveit= for x in $rpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $found_dir" fi else dnl Rely on "-L$found_dir". dnl But don't add it if it's already contained in the LDFLAGS dnl or the already constructed $LIBNAME haveit= for x in $LDFLAGS $LIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir" fi if test "$acl_hardcode_minus_L" != no; then dnl FIXME: Not sure whether we should use dnl "-L$found_dir -l$name" or "-L$found_dir $found_so" dnl here. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" else dnl We cannot use $acl_hardcode_runpath_var and LD_RUN_PATH dnl here, because this doesn't fit in flags passed to the dnl compiler. So give up. No hardcoding. This affects only dnl very old systems. dnl FIXME: Not sure whether we should use dnl "-L$found_dir -l$name" or "-L$found_dir $found_so" dnl here. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name" fi fi fi fi else if test "X$found_a" != "X"; then dnl Linking with a static library. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_a" else dnl We shouldn't come here, but anyway it's good to have a dnl fallback. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir -l$name" fi fi dnl Assume the include files are nearby. additional_includedir= case "$found_dir" in */$acl_libdirstem | */$acl_libdirstem/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` LIB[]NAME[]_PREFIX="$basedir" additional_includedir="$basedir/include" ;; esac if test "X$additional_includedir" != "X"; then dnl Potentially add $additional_includedir to $INCNAME. dnl But don't add it dnl 1. if it's the standard /usr/include, dnl 2. if it's /usr/local/include and we are using GCC on Linux, dnl 3. if it's already present in $CPPFLAGS or the already dnl constructed $INCNAME, dnl 4. if it doesn't exist as a directory. if test "X$additional_includedir" != "X/usr/include"; then haveit= if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then for x in $CPPFLAGS $INC[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_includedir"; then dnl Really add $additional_includedir to $INCNAME. INC[]NAME="${INC[]NAME}${INC[]NAME:+ }-I$additional_includedir" fi fi fi fi fi dnl Look for dependencies. if test -n "$found_la"; then dnl Read the .la file. It defines the variables dnl dlname, library_names, old_library, dependency_libs, current, dnl age, revision, installed, dlopen, dlpreopen, libdir. save_libdir="$libdir" case "$found_la" in */* | *\\*) . "$found_la" ;; *) . "./$found_la" ;; esac libdir="$save_libdir" dnl We use only dependency_libs. for dep in $dependency_libs; do case "$dep" in -L*) additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` dnl Potentially add $additional_libdir to $LIBNAME and $LTLIBNAME. dnl But don't add it dnl 1. if it's the standard /usr/lib, dnl 2. if it's /usr/local/lib and we are using GCC on Linux, dnl 3. if it's already present in $LDFLAGS or the already dnl constructed $LIBNAME, dnl 4. if it doesn't exist as a directory. if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then haveit= if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then haveit= for x in $LDFLAGS $LIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then dnl Really add $additional_libdir to $LIBNAME. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$additional_libdir" fi fi haveit= for x in $LDFLAGS $LTLIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then dnl Really add $additional_libdir to $LTLIBNAME. LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$additional_libdir" fi fi fi fi ;; -R*) dir=`echo "X$dep" | sed -e 's/^X-R//'` if test "$enable_rpath" != no; then dnl Potentially add DIR to rpathdirs. dnl The rpathdirs will be appended to $LIBNAME at the end. haveit= for x in $rpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $dir" fi dnl Potentially add DIR to ltrpathdirs. dnl The ltrpathdirs will be appended to $LTLIBNAME at the end. haveit= for x in $ltrpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $dir" fi fi ;; -l*) dnl Handle this in the next round. names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` ;; *.la) dnl Handle this in the next round. Throw away the .la's dnl directory; it is already contained in a preceding -L dnl option. names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` ;; *) dnl Most likely an immediate library name. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$dep" LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$dep" ;; esac done fi else dnl Didn't find the library; assume it is in the system directories dnl known to the linker and runtime loader. (All the system dnl directories known to the linker should also be known to the dnl runtime loader, otherwise the system is severely misconfigured.) LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name" LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-l$name" fi fi fi done done if test "X$rpathdirs" != "X"; then if test -n "$acl_hardcode_libdir_separator"; then dnl Weird platform: only the last -rpath option counts, the user must dnl pass all path elements in one option. We can arrange that for a dnl single library, but not when more than one $LIBNAMEs are used. alldirs= for found_dir in $rpathdirs; do alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir" done dnl Note: acl_hardcode_libdir_flag_spec uses $libdir and $wl. acl_save_libdir="$libdir" libdir="$alldirs" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" else dnl The -rpath options are cumulative. for found_dir in $rpathdirs; do acl_save_libdir="$libdir" libdir="$found_dir" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" done fi fi if test "X$ltrpathdirs" != "X"; then dnl When using libtool, the option that works for both libraries and dnl executables is -R. The -R options are cumulative. for found_dir in $ltrpathdirs; do LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-R$found_dir" done fi ]) dnl AC_LIB_APPENDTOVAR(VAR, CONTENTS) appends the elements of CONTENTS to VAR, dnl unless already present in VAR. dnl Works only for CPPFLAGS, not for LIB* variables because that sometimes dnl contains two or three consecutive elements that belong together. AC_DEFUN([AC_LIB_APPENDTOVAR], [ for element in [$2]; do haveit= for x in $[$1]; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X$element"; then haveit=yes break fi done if test -z "$haveit"; then [$1]="${[$1]}${[$1]:+ }$element" fi done ]) dnl For those cases where a variable contains several -L and -l options dnl referring to unknown libraries and directories, this macro determines the dnl necessary additional linker options for the runtime path. dnl AC_LIB_LINKFLAGS_FROM_LIBS([LDADDVAR], [LIBSVALUE], [USE-LIBTOOL]) dnl sets LDADDVAR to linker options needed together with LIBSVALUE. dnl If USE-LIBTOOL evaluates to non-empty, linking with libtool is assumed, dnl otherwise linking without libtool is assumed. AC_DEFUN([AC_LIB_LINKFLAGS_FROM_LIBS], [ AC_REQUIRE([AC_LIB_RPATH]) AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) $1= if test "$enable_rpath" != no; then if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then dnl Use an explicit option to hardcode directories into the resulting dnl binary. rpathdirs= next= for opt in $2; do if test -n "$next"; then dir="$next" dnl No need to hardcode the standard /usr/lib. if test "X$dir" != "X/usr/$acl_libdirstem"; then rpathdirs="$rpathdirs $dir" fi next= else case $opt in -L) next=yes ;; -L*) dir=`echo "X$opt" | sed -e 's,^X-L,,'` dnl No need to hardcode the standard /usr/lib. if test "X$dir" != "X/usr/$acl_libdirstem"; then rpathdirs="$rpathdirs $dir" fi next= ;; *) next= ;; esac fi done if test "X$rpathdirs" != "X"; then if test -n ""$3""; then dnl libtool is used for linking. Use -R options. for dir in $rpathdirs; do $1="${$1}${$1:+ }-R$dir" done else dnl The linker is used for linking directly. if test -n "$acl_hardcode_libdir_separator"; then dnl Weird platform: only the last -rpath option counts, the user dnl must pass all path elements in one option. alldirs= for dir in $rpathdirs; do alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$dir" done acl_save_libdir="$libdir" libdir="$alldirs" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" $1="$flag" else dnl The -rpath options are cumulative. for dir in $rpathdirs; do acl_save_libdir="$libdir" libdir="$dir" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" $1="${$1}${$1:+ }$flag" done fi fi fi fi fi AC_SUBST([$1]) ]) guvcview-src-1.7.1/m4/gettext.m40000664000175000017500000003457012173235416015453 0ustar paulopaulo# gettext.m4 serial 60 (gettext-0.17) dnl Copyright (C) 1995-2007 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl dnl This file can can be used in projects which are not available under dnl the GNU General Public License or the GNU Library General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Library General Public License, and the rest of the GNU dnl gettext package package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Authors: dnl Ulrich Drepper , 1995-2000. dnl Bruno Haible , 2000-2006. dnl Macro to add for using GNU gettext. dnl Usage: AM_GNU_GETTEXT([INTLSYMBOL], [NEEDSYMBOL], [INTLDIR]). dnl INTLSYMBOL can be one of 'external', 'no-libtool', 'use-libtool'. The dnl default (if it is not specified or empty) is 'no-libtool'. dnl INTLSYMBOL should be 'external' for packages with no intl directory, dnl and 'no-libtool' or 'use-libtool' for packages with an intl directory. dnl If INTLSYMBOL is 'use-libtool', then a libtool library dnl $(top_builddir)/intl/libintl.la will be created (shared and/or static, dnl depending on --{enable,disable}-{shared,static} and on the presence of dnl AM-DISABLE-SHARED). If INTLSYMBOL is 'no-libtool', a static library dnl $(top_builddir)/intl/libintl.a will be created. dnl If NEEDSYMBOL is specified and is 'need-ngettext', then GNU gettext dnl implementations (in libc or libintl) without the ngettext() function dnl will be ignored. If NEEDSYMBOL is specified and is dnl 'need-formatstring-macros', then GNU gettext implementations that don't dnl support the ISO C 99 formatstring macros will be ignored. dnl INTLDIR is used to find the intl libraries. If empty, dnl the value `$(top_builddir)/intl/' is used. dnl dnl The result of the configuration is one of three cases: dnl 1) GNU gettext, as included in the intl subdirectory, will be compiled dnl and used. dnl Catalog format: GNU --> install in $(datadir) dnl Catalog extension: .mo after installation, .gmo in source tree dnl 2) GNU gettext has been found in the system's C library. dnl Catalog format: GNU --> install in $(datadir) dnl Catalog extension: .mo after installation, .gmo in source tree dnl 3) No internationalization, always use English msgid. dnl Catalog format: none dnl Catalog extension: none dnl If INTLSYMBOL is 'external', only cases 2 and 3 can occur. dnl The use of .gmo is historical (it was needed to avoid overwriting the dnl GNU format catalogs when building on a platform with an X/Open gettext), dnl but we keep it in order not to force irrelevant filename changes on the dnl maintainers. dnl AC_DEFUN([AM_GNU_GETTEXT], [ dnl Argument checking. ifelse([$1], [], , [ifelse([$1], [external], , [ifelse([$1], [no-libtool], , [ifelse([$1], [use-libtool], , [errprint([ERROR: invalid first argument to AM_GNU_GETTEXT ])])])])]) ifelse([$2], [], , [ifelse([$2], [need-ngettext], , [ifelse([$2], [need-formatstring-macros], , [errprint([ERROR: invalid second argument to AM_GNU_GETTEXT ])])])]) define([gt_included_intl], ifelse([$1], [external], ifdef([AM_GNU_GETTEXT_][INTL_SUBDIR], [yes], [no]), [yes])) define([gt_libtool_suffix_prefix], ifelse([$1], [use-libtool], [l], [])) gt_NEEDS_INIT AM_GNU_GETTEXT_NEED([$2]) AC_REQUIRE([AM_PO_SUBDIRS])dnl ifelse(gt_included_intl, yes, [ AC_REQUIRE([AM_INTL_SUBDIR])dnl ]) dnl Prerequisites of AC_LIB_LINKFLAGS_BODY. AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) AC_REQUIRE([AC_LIB_RPATH]) dnl Sometimes libintl requires libiconv, so first search for libiconv. dnl Ideally we would do this search only after the dnl if test "$USE_NLS" = "yes"; then dnl if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then dnl tests. But if configure.in invokes AM_ICONV after AM_GNU_GETTEXT dnl the configure script would need to contain the same shell code dnl again, outside any 'if'. There are two solutions: dnl - Invoke AM_ICONV_LINKFLAGS_BODY here, outside any 'if'. dnl - Control the expansions in more detail using AC_PROVIDE_IFELSE. dnl Since AC_PROVIDE_IFELSE is only in autoconf >= 2.52 and not dnl documented, we avoid it. ifelse(gt_included_intl, yes, , [ AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY]) ]) dnl Sometimes, on MacOS X, libintl requires linking with CoreFoundation. gt_INTL_MACOSX dnl Set USE_NLS. AC_REQUIRE([AM_NLS]) ifelse(gt_included_intl, yes, [ BUILD_INCLUDED_LIBINTL=no USE_INCLUDED_LIBINTL=no ]) LIBINTL= LTLIBINTL= POSUB= dnl Add a version number to the cache macros. case " $gt_needs " in *" need-formatstring-macros "*) gt_api_version=3 ;; *" need-ngettext "*) gt_api_version=2 ;; *) gt_api_version=1 ;; esac gt_func_gnugettext_libc="gt_cv_func_gnugettext${gt_api_version}_libc" gt_func_gnugettext_libintl="gt_cv_func_gnugettext${gt_api_version}_libintl" dnl If we use NLS figure out what method if test "$USE_NLS" = "yes"; then gt_use_preinstalled_gnugettext=no ifelse(gt_included_intl, yes, [ AC_MSG_CHECKING([whether included gettext is requested]) AC_ARG_WITH(included-gettext, [ --with-included-gettext use the GNU gettext library included here], nls_cv_force_use_gnu_gettext=$withval, nls_cv_force_use_gnu_gettext=no) AC_MSG_RESULT($nls_cv_force_use_gnu_gettext) nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext" if test "$nls_cv_force_use_gnu_gettext" != "yes"; then ]) dnl User does not insist on using GNU NLS library. Figure out what dnl to use. If GNU gettext is available we use this. Else we have dnl to fall back to GNU NLS library. if test $gt_api_version -ge 3; then gt_revision_test_code=' #ifndef __GNU_GETTEXT_SUPPORTED_REVISION #define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1) #endif changequote(,)dnl typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1]; changequote([,])dnl ' else gt_revision_test_code= fi if test $gt_api_version -ge 2; then gt_expression_test_code=' + * ngettext ("", "", 0)' else gt_expression_test_code= fi AC_CACHE_CHECK([for GNU gettext in libc], [$gt_func_gnugettext_libc], [AC_TRY_LINK([#include $gt_revision_test_code extern int _nl_msg_cat_cntr; extern int *_nl_domain_bindings;], [bindtextdomain ("", ""); return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_domain_bindings], [eval "$gt_func_gnugettext_libc=yes"], [eval "$gt_func_gnugettext_libc=no"])]) if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then dnl Sometimes libintl requires libiconv, so first search for libiconv. ifelse(gt_included_intl, yes, , [ AM_ICONV_LINK ]) dnl Search for libintl and define LIBINTL, LTLIBINTL and INCINTL dnl accordingly. Don't use AC_LIB_LINKFLAGS_BODY([intl],[iconv]) dnl because that would add "-liconv" to LIBINTL and LTLIBINTL dnl even if libiconv doesn't exist. AC_LIB_LINKFLAGS_BODY([intl]) AC_CACHE_CHECK([for GNU gettext in libintl], [$gt_func_gnugettext_libintl], [gt_save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS $INCINTL" gt_save_LIBS="$LIBS" LIBS="$LIBS $LIBINTL" dnl Now see whether libintl exists and does not depend on libiconv. AC_TRY_LINK([#include $gt_revision_test_code extern int _nl_msg_cat_cntr; extern #ifdef __cplusplus "C" #endif const char *_nl_expand_alias (const char *);], [bindtextdomain ("", ""); return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("")], [eval "$gt_func_gnugettext_libintl=yes"], [eval "$gt_func_gnugettext_libintl=no"]) dnl Now see whether libintl exists and depends on libiconv. if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" != yes; } && test -n "$LIBICONV"; then LIBS="$LIBS $LIBICONV" AC_TRY_LINK([#include $gt_revision_test_code extern int _nl_msg_cat_cntr; extern #ifdef __cplusplus "C" #endif const char *_nl_expand_alias (const char *);], [bindtextdomain ("", ""); return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("")], [LIBINTL="$LIBINTL $LIBICONV" LTLIBINTL="$LTLIBINTL $LTLIBICONV" eval "$gt_func_gnugettext_libintl=yes" ]) fi CPPFLAGS="$gt_save_CPPFLAGS" LIBS="$gt_save_LIBS"]) fi dnl If an already present or preinstalled GNU gettext() is found, dnl use it. But if this macro is used in GNU gettext, and GNU dnl gettext is already preinstalled in libintl, we update this dnl libintl. (Cf. the install rule in intl/Makefile.in.) if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" = "yes"; } \ || { { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; } \ && test "$PACKAGE" != gettext-runtime \ && test "$PACKAGE" != gettext-tools; }; then gt_use_preinstalled_gnugettext=yes else dnl Reset the values set by searching for libintl. LIBINTL= LTLIBINTL= INCINTL= fi ifelse(gt_included_intl, yes, [ if test "$gt_use_preinstalled_gnugettext" != "yes"; then dnl GNU gettext is not found in the C library. dnl Fall back on included GNU gettext library. nls_cv_use_gnu_gettext=yes fi fi if test "$nls_cv_use_gnu_gettext" = "yes"; then dnl Mark actions used to generate GNU NLS library. BUILD_INCLUDED_LIBINTL=yes USE_INCLUDED_LIBINTL=yes LIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LIBICONV $LIBTHREAD" LTLIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LTLIBICONV $LTLIBTHREAD" LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'` fi CATOBJEXT= if test "$gt_use_preinstalled_gnugettext" = "yes" \ || test "$nls_cv_use_gnu_gettext" = "yes"; then dnl Mark actions to use GNU gettext tools. CATOBJEXT=.gmo fi ]) if test -n "$INTL_MACOSX_LIBS"; then if test "$gt_use_preinstalled_gnugettext" = "yes" \ || test "$nls_cv_use_gnu_gettext" = "yes"; then dnl Some extra flags are needed during linking. LIBINTL="$LIBINTL $INTL_MACOSX_LIBS" LTLIBINTL="$LTLIBINTL $INTL_MACOSX_LIBS" fi fi if test "$gt_use_preinstalled_gnugettext" = "yes" \ || test "$nls_cv_use_gnu_gettext" = "yes"; then AC_DEFINE(ENABLE_NLS, 1, [Define to 1 if translation of program messages to the user's native language is requested.]) else USE_NLS=no fi fi AC_MSG_CHECKING([whether to use NLS]) AC_MSG_RESULT([$USE_NLS]) if test "$USE_NLS" = "yes"; then AC_MSG_CHECKING([where the gettext function comes from]) if test "$gt_use_preinstalled_gnugettext" = "yes"; then if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then gt_source="external libintl" else gt_source="libc" fi else gt_source="included intl directory" fi AC_MSG_RESULT([$gt_source]) fi if test "$USE_NLS" = "yes"; then if test "$gt_use_preinstalled_gnugettext" = "yes"; then if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then AC_MSG_CHECKING([how to link with libintl]) AC_MSG_RESULT([$LIBINTL]) AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCINTL]) fi dnl For backward compatibility. Some packages may be using this. AC_DEFINE(HAVE_GETTEXT, 1, [Define if the GNU gettext() function is already present or preinstalled.]) AC_DEFINE(HAVE_DCGETTEXT, 1, [Define if the GNU dcgettext() function is already present or preinstalled.]) fi dnl We need to process the po/ directory. POSUB=po fi ifelse(gt_included_intl, yes, [ dnl If this is used in GNU gettext we have to set BUILD_INCLUDED_LIBINTL dnl to 'yes' because some of the testsuite requires it. if test "$PACKAGE" = gettext-runtime || test "$PACKAGE" = gettext-tools; then BUILD_INCLUDED_LIBINTL=yes fi dnl Make all variables we use known to autoconf. AC_SUBST(BUILD_INCLUDED_LIBINTL) AC_SUBST(USE_INCLUDED_LIBINTL) AC_SUBST(CATOBJEXT) dnl For backward compatibility. Some configure.ins may be using this. nls_cv_header_intl= nls_cv_header_libgt= dnl For backward compatibility. Some Makefiles may be using this. DATADIRNAME=share AC_SUBST(DATADIRNAME) dnl For backward compatibility. Some Makefiles may be using this. INSTOBJEXT=.mo AC_SUBST(INSTOBJEXT) dnl For backward compatibility. Some Makefiles may be using this. GENCAT=gencat AC_SUBST(GENCAT) dnl For backward compatibility. Some Makefiles may be using this. INTLOBJS= if test "$USE_INCLUDED_LIBINTL" = yes; then INTLOBJS="\$(GETTOBJS)" fi AC_SUBST(INTLOBJS) dnl Enable libtool support if the surrounding package wishes it. INTL_LIBTOOL_SUFFIX_PREFIX=gt_libtool_suffix_prefix AC_SUBST(INTL_LIBTOOL_SUFFIX_PREFIX) ]) dnl For backward compatibility. Some Makefiles may be using this. INTLLIBS="$LIBINTL" AC_SUBST(INTLLIBS) dnl Make all documented variables known to autoconf. AC_SUBST(LIBINTL) AC_SUBST(LTLIBINTL) AC_SUBST(POSUB) ]) dnl gt_NEEDS_INIT ensures that the gt_needs variable is initialized. m4_define([gt_NEEDS_INIT], [ m4_divert_text([DEFAULTS], [gt_needs=]) m4_define([gt_NEEDS_INIT], []) ]) dnl Usage: AM_GNU_GETTEXT_NEED([NEEDSYMBOL]) AC_DEFUN([AM_GNU_GETTEXT_NEED], [ m4_divert_text([INIT_PREPARE], [gt_needs="$gt_needs $1"]) ]) dnl Usage: AM_GNU_GETTEXT_VERSION([gettext-version]) AC_DEFUN([AM_GNU_GETTEXT_VERSION], []) guvcview-src-1.7.1/m4/codeset.m40000664000175000017500000000136612173235416015412 0ustar paulopaulo# codeset.m4 serial 2 (gettext-0.16) dnl Copyright (C) 2000-2002, 2006 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. AC_DEFUN([AM_LANGINFO_CODESET], [ AC_CACHE_CHECK([for nl_langinfo and CODESET], am_cv_langinfo_codeset, [AC_TRY_LINK([#include ], [char* cs = nl_langinfo(CODESET); return !cs;], am_cv_langinfo_codeset=yes, am_cv_langinfo_codeset=no) ]) if test $am_cv_langinfo_codeset = yes; then AC_DEFINE(HAVE_LANGINFO_CODESET, 1, [Define if you have and nl_langinfo(CODESET).]) fi ]) guvcview-src-1.7.1/m4/ChangeLog0000664000175000017500000000061512173235416015270 0ustar paulopaulo2008-05-08 gettextize * gettext.m4: New file, from gettext-0.17. * iconv.m4: New file, from gettext-0.17. * lib-ld.m4: New file, from gettext-0.17. * lib-link.m4: New file, from gettext-0.17. * lib-prefix.m4: New file, from gettext-0.17. * nls.m4: New file, from gettext-0.17. * po.m4: New file, from gettext-0.17. * progtest.m4: New file, from gettext-0.17. guvcview-src-1.7.1/m4/lib-ld.m40000664000175000017500000000653112173235416015126 0ustar paulopaulo# lib-ld.m4 serial 3 (gettext-0.13) dnl Copyright (C) 1996-2003 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Subroutines of libtool.m4, dnl with replacements s/AC_/AC_LIB/ and s/lt_cv/acl_cv/ to avoid collision dnl with libtool.m4. dnl From libtool-1.4. Sets the variable with_gnu_ld to yes or no. AC_DEFUN([AC_LIB_PROG_LD_GNU], [AC_CACHE_CHECK([if the linker ($LD) is GNU ld], acl_cv_prog_gnu_ld, [# I'd rather use --version here, but apparently some GNU ld's only accept -v. case `$LD -v 2>&1 conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. AC_MSG_CHECKING([for ld used by GCC]) case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [[\\/]* | [A-Za-z]:[\\/]*)] [re_direlt='/[^/][^/]*/\.\./'] # Canonicalize the path of ld ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'` while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then AC_MSG_CHECKING([for GNU ld]) else AC_MSG_CHECKING([for non-GNU ld]) fi AC_CACHE_VAL(acl_cv_path_LD, [if test -z "$LD"; then IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}" for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then acl_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some GNU ld's only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$acl_cv_path_LD" -v 2>&1 < /dev/null` in *GNU* | *'with BFD'*) test "$with_gnu_ld" != no && break ;; *) test "$with_gnu_ld" != yes && break ;; esac fi done IFS="$ac_save_ifs" else acl_cv_path_LD="$LD" # Let the user override the test with a path. fi]) LD="$acl_cv_path_LD" if test -n "$LD"; then AC_MSG_RESULT($LD) else AC_MSG_RESULT(no) fi test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH]) AC_LIB_PROG_LD_GNU ]) guvcview-src-1.7.1/m4/progtest.m40000664000175000017500000000555012173235416015632 0ustar paulopaulo# progtest.m4 serial 4 (gettext-0.14.2) dnl Copyright (C) 1996-2003, 2005 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl dnl This file can can be used in projects which are not available under dnl the GNU General Public License or the GNU Library General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Library General Public License, and the rest of the GNU dnl gettext package package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Authors: dnl Ulrich Drepper , 1996. AC_PREREQ(2.50) # Search path for a program which passes the given test. dnl AM_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR, dnl TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]]) AC_DEFUN([AM_PATH_PROG_WITH_TEST], [ # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi # Find out how to test for executable files. Don't use a zero-byte file, # as systems may use methods other than mode bits to determine executability. cat >conf$$.file <<_ASEOF #! /bin/sh exit 0 _ASEOF chmod +x conf$$.file if test -x conf$$.file >/dev/null 2>&1; then ac_executable_p="test -x" else ac_executable_p="test -f" fi rm -f conf$$.file # Extract the first word of "$2", so it can be a program name with args. set dummy $2; ac_word=[$]2 AC_MSG_CHECKING([for $ac_word]) AC_CACHE_VAL(ac_cv_path_$1, [case "[$]$1" in [[\\/]]* | ?:[[\\/]]*) ac_cv_path_$1="[$]$1" # Let the user override the test with a path. ;; *) ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in ifelse([$5], , $PATH, [$5]); do IFS="$ac_save_IFS" test -z "$ac_dir" && ac_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then echo "$as_me: trying $ac_dir/$ac_word..." >&AS_MESSAGE_LOG_FD if [$3]; then ac_cv_path_$1="$ac_dir/$ac_word$ac_exec_ext" break 2 fi fi done done IFS="$ac_save_IFS" dnl If no 4th arg is given, leave the cache variable unset, dnl so AC_PATH_PROGS will keep looking. ifelse([$4], , , [ test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4" ])dnl ;; esac])dnl $1="$ac_cv_path_$1" if test ifelse([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then AC_MSG_RESULT([$]$1) else AC_MSG_RESULT(no) fi AC_SUBST($1)dnl ]) guvcview-src-1.7.1/m4/iconv.m40000664000175000017500000001375312173235416015105 0ustar paulopaulo# iconv.m4 serial AM6 (gettext-0.17) dnl Copyright (C) 2000-2002, 2007 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. AC_DEFUN([AM_ICONV_LINKFLAGS_BODY], [ dnl Prerequisites of AC_LIB_LINKFLAGS_BODY. AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) AC_REQUIRE([AC_LIB_RPATH]) dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV dnl accordingly. AC_LIB_LINKFLAGS_BODY([iconv]) ]) AC_DEFUN([AM_ICONV_LINK], [ dnl Some systems have iconv in libc, some have it in libiconv (OSF/1 and dnl those with the standalone portable GNU libiconv installed). AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV dnl accordingly. AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY]) dnl Add $INCICONV to CPPFLAGS before performing the following checks, dnl because if the user has installed libiconv and not disabled its use dnl via --without-libiconv-prefix, he wants to use it. The first dnl AC_TRY_LINK will then fail, the second AC_TRY_LINK will succeed. am_save_CPPFLAGS="$CPPFLAGS" AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCICONV]) AC_CACHE_CHECK([for iconv], am_cv_func_iconv, [ am_cv_func_iconv="no, consider installing GNU libiconv" am_cv_lib_iconv=no AC_TRY_LINK([#include #include ], [iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd);], am_cv_func_iconv=yes) if test "$am_cv_func_iconv" != yes; then am_save_LIBS="$LIBS" LIBS="$LIBS $LIBICONV" AC_TRY_LINK([#include #include ], [iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd);], am_cv_lib_iconv=yes am_cv_func_iconv=yes) LIBS="$am_save_LIBS" fi ]) if test "$am_cv_func_iconv" = yes; then AC_CACHE_CHECK([for working iconv], am_cv_func_iconv_works, [ dnl This tests against bugs in AIX 5.1 and HP-UX 11.11. am_save_LIBS="$LIBS" if test $am_cv_lib_iconv = yes; then LIBS="$LIBS $LIBICONV" fi AC_TRY_RUN([ #include #include int main () { /* Test against AIX 5.1 bug: Failures are not distinguishable from successful returns. */ { iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8"); if (cd_utf8_to_88591 != (iconv_t)(-1)) { static const char input[] = "\342\202\254"; /* EURO SIGN */ char buf[10]; const char *inptr = input; size_t inbytesleft = strlen (input); char *outptr = buf; size_t outbytesleft = sizeof (buf); size_t res = iconv (cd_utf8_to_88591, (char **) &inptr, &inbytesleft, &outptr, &outbytesleft); if (res == 0) return 1; } } #if 0 /* This bug could be worked around by the caller. */ /* Test against HP-UX 11.11 bug: Positive return value instead of 0. */ { iconv_t cd_88591_to_utf8 = iconv_open ("utf8", "iso88591"); if (cd_88591_to_utf8 != (iconv_t)(-1)) { static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; char buf[50]; const char *inptr = input; size_t inbytesleft = strlen (input); char *outptr = buf; size_t outbytesleft = sizeof (buf); size_t res = iconv (cd_88591_to_utf8, (char **) &inptr, &inbytesleft, &outptr, &outbytesleft); if ((int)res > 0) return 1; } } #endif /* Test against HP-UX 11.11 bug: No converter from EUC-JP to UTF-8 is provided. */ if (/* Try standardized names. */ iconv_open ("UTF-8", "EUC-JP") == (iconv_t)(-1) /* Try IRIX, OSF/1 names. */ && iconv_open ("UTF-8", "eucJP") == (iconv_t)(-1) /* Try AIX names. */ && iconv_open ("UTF-8", "IBM-eucJP") == (iconv_t)(-1) /* Try HP-UX names. */ && iconv_open ("utf8", "eucJP") == (iconv_t)(-1)) return 1; return 0; }], [am_cv_func_iconv_works=yes], [am_cv_func_iconv_works=no], [case "$host_os" in aix* | hpux*) am_cv_func_iconv_works="guessing no" ;; *) am_cv_func_iconv_works="guessing yes" ;; esac]) LIBS="$am_save_LIBS" ]) case "$am_cv_func_iconv_works" in *no) am_func_iconv=no am_cv_lib_iconv=no ;; *) am_func_iconv=yes ;; esac else am_func_iconv=no am_cv_lib_iconv=no fi if test "$am_func_iconv" = yes; then AC_DEFINE(HAVE_ICONV, 1, [Define if you have the iconv() function and it works.]) fi if test "$am_cv_lib_iconv" = yes; then AC_MSG_CHECKING([how to link with libiconv]) AC_MSG_RESULT([$LIBICONV]) else dnl If $LIBICONV didn't lead to a usable library, we don't need $INCICONV dnl either. CPPFLAGS="$am_save_CPPFLAGS" LIBICONV= LTLIBICONV= fi AC_SUBST(LIBICONV) AC_SUBST(LTLIBICONV) ]) AC_DEFUN([AM_ICONV], [ AM_ICONV_LINK if test "$am_cv_func_iconv" = yes; then AC_MSG_CHECKING([for iconv declaration]) AC_CACHE_VAL(am_cv_proto_iconv, [ AC_TRY_COMPILE([ #include #include extern #ifdef __cplusplus "C" #endif #if defined(__STDC__) || defined(__cplusplus) size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft); #else size_t iconv(); #endif ], [], am_cv_proto_iconv_arg1="", am_cv_proto_iconv_arg1="const") am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"]) am_cv_proto_iconv=`echo "[$]am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'` AC_MSG_RESULT([$]{ac_t:- }[$]am_cv_proto_iconv) AC_DEFINE_UNQUOTED(ICONV_CONST, $am_cv_proto_iconv_arg1, [Define as const if the declaration of iconv() needs const.]) fi ]) guvcview-src-1.7.1/Makefile.am0000664000175000017500000000137112173235416015232 0ustar paulopaulo## Process this file with automake to produce Makefile.in SUBDIRS = src po data ACLOCAL_AMFLAGS = -I m4 docdir = ${datadir}/doc/guvcview doc_DATA = \ README\ COPYING\ AUTHORS\ ChangeLog\ INSTALL DISTCLEANFILES = \ intltool-extract \ intltool-merge \ intltool-update EXTRA_DIST = \ bootstrap.sh \ intltool-extract.in \ intltool-merge.in \ intltool-update.in update-pot: $(MAKE) -C po "$(GETTEXT_PACKAGE).pot" DISTCHECK_CONFIGURE_FLAGS = --enable-maintainer-flags=no DIST_SUBDIRS = ${SUBDIRS} # Copy all the spec files. Of cource, only one is actually used. dist-hook: for specfile in *.spec; do \ if test -f $$specfile; then \ cp -p $$specfile $(distdir); \ fi \ done .PHONY: check-gettext update-po update-gmo force-update-gmo guvcview-src-1.7.1/INSTALL0000644000175000017500000003660012173257653014237 0ustar paulopauloInstallation Instructions ************************* Copyright (C) 1994-1996, 1999-2002, 2004-2011 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. This file is offered as-is, without warranty of any kind. Basic Installation ================== Briefly, the shell commands `./configure; make; make install' should configure, build, and install this package. The following more-detailed instructions are generic; see the `README' file for instructions specific to this package. Some packages provide this `INSTALL' file but do not implement all of the features documented below. The lack of an optional feature in a given package is not necessarily a bug. More recommendations for GNU packages can be found in *note Makefile Conventions: (standards)Makefile Conventions. The `configure' shell script attempts to guess correct values for various system-dependent variables used during compilation. It uses those values to create a `Makefile' in each directory of the package. It may also create one or more `.h' files containing system-dependent definitions. Finally, it creates a shell script `config.status' that you can run in the future to recreate the current configuration, and a file `config.log' containing compiler output (useful mainly for debugging `configure'). It can also use an optional file (typically called `config.cache' and enabled with `--cache-file=config.cache' or simply `-C') that saves the results of its tests to speed up reconfiguring. Caching is disabled by default to prevent problems with accidental use of stale cache files. If you need to do unusual things to compile the package, please try to figure out how `configure' could check whether to do them, and mail diffs or instructions to the address given in the `README' so they can be considered for the next release. If you are using the cache, and at some point `config.cache' contains results you don't want to keep, you may remove or edit it. The file `configure.ac' (or `configure.in') is used to create `configure' by a program called `autoconf'. You need `configure.ac' if you want to change it or regenerate `configure' using a newer version of `autoconf'. The simplest way to compile this package is: 1. `cd' to the directory containing the package's source code and type `./configure' to configure the package for your system. Running `configure' might take a while. While running, it prints some messages telling which features it is checking for. 2. Type `make' to compile the package. 3. Optionally, type `make check' to run any self-tests that come with the package, generally using the just-built uninstalled binaries. 4. Type `make install' to install the programs and any data files and documentation. When installing into a prefix owned by root, it is recommended that the package be configured and built as a regular user, and only the `make install' phase executed with root privileges. 5. Optionally, type `make installcheck' to repeat any self-tests, but this time using the binaries in their final installed location. This target does not install anything. Running this target as a regular user, particularly if the prior `make install' required root privileges, verifies that the installation completed correctly. 6. You can remove the program binaries and object files from the source code directory by typing `make clean'. To also remove the files that `configure' created (so you can compile the package for a different kind of computer), type `make distclean'. There is also a `make maintainer-clean' target, but that is intended mainly for the package's developers. If you use it, you may have to get all sorts of other programs in order to regenerate files that came with the distribution. 7. Often, you can also type `make uninstall' to remove the installed files again. In practice, not all packages have tested that uninstallation works correctly, even though it is required by the GNU Coding Standards. 8. Some packages, particularly those that use Automake, provide `make distcheck', which can by used by developers to test that all other targets like `make install' and `make uninstall' work correctly. This target is generally not run by end users. Compilers and Options ===================== Some systems require unusual options for compilation or linking that the `configure' script does not know about. Run `./configure --help' for details on some of the pertinent environment variables. You can give `configure' initial values for configuration parameters by setting variables in the command line or in the environment. Here is an example: ./configure CC=c99 CFLAGS=-g LIBS=-lposix *Note Defining Variables::, for more details. Compiling For Multiple Architectures ==================================== You can compile the package for more than one kind of computer at the same time, by placing the object files for each architecture in their own directory. To do this, you can use GNU `make'. `cd' to the directory where you want the object files and executables to go and run the `configure' script. `configure' automatically checks for the source code in the directory that `configure' is in and in `..'. This is known as a "VPATH" build. With a non-GNU `make', it is safer to compile the package for one architecture at a time in the source code directory. After you have installed the package for one architecture, use `make distclean' before reconfiguring for another architecture. On MacOS X 10.5 and later systems, you can create libraries and executables that work on multiple system types--known as "fat" or "universal" binaries--by specifying multiple `-arch' options to the compiler but only a single `-arch' option to the preprocessor. Like this: ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ CPP="gcc -E" CXXCPP="g++ -E" This is not guaranteed to produce working output in all cases, you may have to build one architecture at a time and combine the results using the `lipo' tool if you have problems. Installation Names ================== By default, `make install' installs the package's commands under `/usr/local/bin', include files under `/usr/local/include', etc. You can specify an installation prefix other than `/usr/local' by giving `configure' the option `--prefix=PREFIX', where PREFIX must be an absolute file name. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you pass the option `--exec-prefix=PREFIX' to `configure', the package uses PREFIX as the prefix for installing programs and libraries. Documentation and other data files still use the regular prefix. In addition, if you use an unusual directory layout you can give options like `--bindir=DIR' to specify different values for particular kinds of files. Run `configure --help' for a list of the directories you can set and what kinds of files go in them. In general, the default for these options is expressed in terms of `${prefix}', so that specifying just `--prefix' will affect all of the other directory specifications that were not explicitly provided. The most portable way to affect installation locations is to pass the correct locations to `configure'; however, many packages provide one or both of the following shortcuts of passing variable assignments to the `make install' command line to change installation locations without having to reconfigure or recompile. The first method involves providing an override variable for each affected directory. For example, `make install prefix=/alternate/directory' will choose an alternate location for all directory configuration variables that were expressed in terms of `${prefix}'. Any directories that were specified during `configure', but not in terms of `${prefix}', must each be overridden at install time for the entire installation to be relocated. The approach of makefile variable overrides for each directory variable is required by the GNU Coding Standards, and ideally causes no recompilation. However, some platforms have known limitations with the semantics of shared libraries that end up requiring recompilation when using this method, particularly noticeable in packages that use GNU Libtool. The second method involves providing the `DESTDIR' variable. For example, `make install DESTDIR=/alternate/directory' will prepend `/alternate/directory' before all installation names. The approach of `DESTDIR' overrides is not required by the GNU Coding Standards, and does not work on platforms that have drive letters. On the other hand, it does better at avoiding recompilation issues, and works well even when some directory options were not specified in terms of `${prefix}' at `configure' time. Optional Features ================= If the package supports it, you can cause programs to be installed with an extra prefix or suffix on their names by giving `configure' the option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. Some packages pay attention to `--enable-FEATURE' options to `configure', where FEATURE indicates an optional part of the package. They may also pay attention to `--with-PACKAGE' options, where PACKAGE is something like `gnu-as' or `x' (for the X Window System). The `README' should mention any `--enable-' and `--with-' options that the package recognizes. For packages that use the X Window System, `configure' can usually find the X include and library files automatically, but if it doesn't, you can use the `configure' options `--x-includes=DIR' and `--x-libraries=DIR' to specify their locations. Some packages offer the ability to configure how verbose the execution of `make' will be. For these packages, running `./configure --enable-silent-rules' sets the default to minimal output, which can be overridden with `make V=1'; while running `./configure --disable-silent-rules' sets the default to verbose, which can be overridden with `make V=0'. Particular systems ================== On HP-UX, the default C compiler is not ANSI C compatible. If GNU CC is not installed, it is recommended to use the following options in order to use an ANSI C compiler: ./configure CC="cc -Ae -D_XOPEN_SOURCE=500" and if that doesn't work, install pre-built binaries of GCC for HP-UX. HP-UX `make' updates targets which have the same time stamps as their prerequisites, which makes it generally unusable when shipped generated files such as `configure' are involved. Use GNU `make' instead. On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot parse its `' header file. The option `-nodtk' can be used as a workaround. If GNU CC is not installed, it is therefore recommended to try ./configure CC="cc" and if that doesn't work, try ./configure CC="cc -nodtk" On Solaris, don't put `/usr/ucb' early in your `PATH'. This directory contains several dysfunctional programs; working variants of these programs are available in `/usr/bin'. So, if you need `/usr/ucb' in your `PATH', put it _after_ `/usr/bin'. On Haiku, software installed for all users goes in `/boot/common', not `/usr/local'. It is recommended to use the following options: ./configure --prefix=/boot/common Specifying the System Type ========================== There may be some features `configure' cannot figure out automatically, but needs to determine by the type of machine the package will run on. Usually, assuming the package is built to be run on the _same_ architectures, `configure' can figure that out, but if it prints a message saying it cannot guess the machine type, give it the `--build=TYPE' option. TYPE can either be a short name for the system type, such as `sun4', or a canonical name which has the form: CPU-COMPANY-SYSTEM where SYSTEM can have one of these forms: OS KERNEL-OS See the file `config.sub' for the possible values of each field. If `config.sub' isn't included in this package, then this package doesn't need to know the machine type. If you are _building_ compiler tools for cross-compiling, you should use the option `--target=TYPE' to select the type of system they will produce code for. If you want to _use_ a cross compiler, that generates code for a platform different from the build platform, you should specify the "host" platform (i.e., that on which the generated programs will eventually be run) with `--host=TYPE'. Sharing Defaults ================ If you want to set default values for `configure' scripts to share, you can create a site shell script called `config.site' that gives default values for variables like `CC', `cache_file', and `prefix'. `configure' looks for `PREFIX/share/config.site' if it exists, then `PREFIX/etc/config.site' if it exists. Or, you can set the `CONFIG_SITE' environment variable to the location of the site script. A warning: not all `configure' scripts look for a site script. Defining Variables ================== Variables not defined in a site shell script can be set in the environment passed to `configure'. However, some packages may run configure again during the build, and the customized values of these variables may be lost. In order to avoid this problem, you should set them in the `configure' command line, using `VAR=value'. For example: ./configure CC=/usr/local2/bin/gcc causes the specified `gcc' to be used as the C compiler (unless it is overridden in the site shell script). Unfortunately, this technique does not work for `CONFIG_SHELL' due to an Autoconf bug. Until the bug is fixed you can use this workaround: CONFIG_SHELL=/bin/bash /bin/bash ./configure CONFIG_SHELL=/bin/bash `configure' Invocation ====================== `configure' recognizes the following options to control how it operates. `--help' `-h' Print a summary of all of the options to `configure', and exit. `--help=short' `--help=recursive' Print a summary of the options unique to this package's `configure', and exit. The `short' variant lists options used only in the top level, while the `recursive' variant lists options also present in any nested packages. `--version' `-V' Print the version of Autoconf used to generate the `configure' script, and exit. `--cache-file=FILE' Enable the cache: use and save the results of the tests in FILE, traditionally `config.cache'. FILE defaults to `/dev/null' to disable caching. `--config-cache' `-C' Alias for `--cache-file=config.cache'. `--quiet' `--silent' `-q' Do not print messages saying which checks are being made. To suppress all normal output, redirect it to `/dev/null' (any error messages will still be shown). `--srcdir=DIR' Look for the package's source code in directory DIR. Usually `configure' can determine that directory automatically. `--prefix=DIR' Use DIR as the installation prefix. *note Installation Names:: for more details, including other options available for fine-tuning the installation locations. `--no-create' `-n' Run the configure checks, but stop before creating any output files. `configure' also accepts some other, not widely useful, options. Run `configure --help' for more details. guvcview-src-1.7.1/bootstrap.sh0000775000175000017500000000015612173235416015552 0ustar paulopaulo#!/bin/sh # To be safe include -I flag autoreconf --force --verbose --install ./configure --config-cache $* guvcview-src-1.7.1/configure.ac0000775000175000017500000001650512173235416015474 0ustar paulopaulodnl Process this file with autoconf to produce a configure script. # Save the original $CFLAGS so we can distinguish whether the user set those # in the environment, or whether autoconf added -O and -g options: ORIGINAL_CFLAGS="$CFLAGS" dnl -------------------------------------------------------------------------- dnl Package definitions and initialization dnl -------------------------------------------------------------------------- m4_define([guvcview_major], [1]) m4_define([guvcview_minor], [7]) m4_define([guvcview_micro], [1]) m4_define([guvcview_version], [guvcview_major.guvcview_minor.guvcview_micro]) AC_INIT([guvcview],[guvcview_version],[http://guvcview.sourceforge.net/]) m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])]) AM_INIT_AUTOMAKE([gnu]) AC_CONFIG_MACRO_DIR([m4]) AC_CONFIG_HEADERS(config.h) AM_MAINTAINER_MODE(disable) # autoconf 2.5x defaults to no cache file; we need the cache file's information # for building the config page. But start with it empty to avoid confusion by # people who don't do a "make distclean" after applying patches. cache_file=config.cache rm -f config.cache; touch config.cache AC_PREFIX_DEFAULT(/usr/local) AC_ISC_POSIX AC_PROG_CC AC_HEADER_STDC dnl -------------------------------------------------------------------------- dnl set pthread_libs and pthread_cflags dnl -------------------------------------------------------------------------- dnl ACX_PTHREAD([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]]) ACX_PTHREAD() dnl -------------------------------------------------------------------------- dnl Debug/development/test dnl -------------------------------------------------------------------------- dnl --------------------------------------------------------------------------- dnl CF_STRIP_G_OPT version: 3 updated: 2002/12/21 19:25:52 dnl -------------- dnl Remove "-g" option from the compiler options AC_DEFUN([CF_STRIP_G_OPT], [$1=`echo ${$1} | sed -e 's%-g %%' -e 's%-g$%%'`]) dnl --------------------------------------------------------------------------- dnl CF_STRIP_O_OPT version: 3 updated: 2001/02/02 19:06:08 dnl -------------- dnl Remove "-O" option from the compiler options AC_DEFUN([CF_STRIP_O_OPT], [$1=`echo ${$1} | sed -e 's/-O[[1-9]]\? //' -e 's/-O[[1-9]]\?$//'`]) # The comment about adding -g to $CFLAGS is unclear. Autoconf tries to add # a -g flag; we remove it if the user's $CFLAGS was not set and debugging is # disabled. AC_MSG_CHECKING(if you specifically want to enable debug-code [-g]) AC_ARG_ENABLE(debug, AS_HELP_STRING([--enable-debug], [enable debug compile w/ debugging - if \$CFLAGS is set, add -g there, too]), [enable_debug=yes], [enable_debug=no]) AC_MSG_RESULT($enable_debug) if test "x$enable_debug" = "xyes" ; then test -z "$ORIGINAL_CFLAGS" && CF_STRIP_O_OPT(CFLAGS) if test "$CC" = gcc; then CFLAGS="$CFLAGS -g" fi #else # CF_STRIP_G_OPT(CFLAGS) fi AC_SUBST(CFLAGS) dnl -------------------------------------------------------------------------- dnl Set gettext package name dnl -------------------------------------------------------------------------- GETTEXT_PACKAGE=guvcview AC_SUBST(GETTEXT_PACKAGE) AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE,"$GETTEXT_PACKAGE", [guvcview]) IT_PROG_INTLTOOL([0.40]) dnl -------------------------------------------------------------------------- dnl Languages supported by guvcview. dnl -------------------------------------------------------------------------- ALL_LINGUAS="bg bs cs da de en_AU es eu fo fr gl he hr it ja lv nl pl pt pt_BR ru si sr tr uk zh_TW" AM_GLIB_GNU_GETTEXT([external]) dnl -------------------------------------------------------------------------- dnl check for dependencies dnl -------------------------------------------------------------------------- PKG_CHECK_MODULES(DEPS, [gtk+-3.0 >= 3.0.0 glib-2.0 >= 2.10.0 sdl >= 1.2.10 portaudio-2.0 libpng libavcodec libavutil libv4l2 libudev]) AC_SUBST(DEPS_CFLAGS) AC_SUBST(DEPS_LIBS) dnl -------------------------------------------------------------------------- dnl set/unset debian menu dnl -------------------------------------------------------------------------- AC_MSG_CHECKING(if you want to enable debian menu) AC_ARG_ENABLE(debian-menu, AS_HELP_STRING([--disable-debian-menu], [disable debian menu (default: enabled)]), [enable_debian_menu=no], [enable_debian_menu=yes]) AC_MSG_RESULT($enable_debian_menu) AM_CONDITIONAL(DEBIAN_MENU, test "$enable_debian_menu" = yes) dnl -------------------------------------------------------------------------- dnl set/unset desktop file dnl -------------------------------------------------------------------------- AC_MSG_CHECKING(if you want to enable desktop file) AC_ARG_ENABLE(desktop, AS_HELP_STRING([--disable-desktop], [disable desktop file (default: enabled)]), [enable_desktop=no], [enable_desktop=yes]) AC_MSG_RESULT($enable_desktop) AM_CONDITIONAL(DESKTOP, test "$enable_desktop" = yes) dnl -------------------------------------------------------------------------- dnl Check for pulseaudio dnl -------------------------------------------------------------------------- AC_MSG_CHECKING(if you want to enable pulse support) AC_ARG_ENABLE(pulse, AS_HELP_STRING([--disable-pulse], [disable pulseaudio support (default: enabled)]), [enable_pulse=no], [enable_pulse=yes]) AC_MSG_RESULT($enable_pulse) if test $enable_pulse = yes; then PKG_CHECK_MODULES(PULSE, libpulse >= 0.9.15, has_pulse=yes, has_pulse=no) AC_SUBST(PULSE_CFLAGS) AC_SUBST(PULSE_LIBS) if test "$has_pulse" = yes; then AC_DEFINE(PULSEAUDIO,1,[set to 1 if pulseaudio installed]) else AC_MSG_WARN(libpulse missing... pulse support will be disabled.); enable_pulse=no fi fi dnl -------------------------------------------------------------------------- dnl Check for avcodec.h installation path dnl -------------------------------------------------------------------------- dnl Check for avcodec.h directly dnl if all tests fail must add avcodec.h path to C_INCLUDE_PATH before running configure AC_CHECK_HEADER([avcodec.h], [has_avcodec_h="yes"]) dnl Check old install path for avcodec.h (ffmpeg/avcodec.h) AC_CHECK_HEADER([ffmpeg/avcodec.h], [has_ffmpeg_dir="yes"]) dnl Check new install path for avcodec.h (libavcodec/avcodec.h) dnl if all the checks fail we include "libavcodec/avcodec.h" AC_CHECK_HEADER([libavcodec/avcodec.h], [has_libavcodec_dir="yes"]) if test "$has_avcodec_h" = yes; then AC_DEFINE(HAS_AVCODEC_H,1,[Define if avcodec.h can be acessed directly]) fi if test "$has_ffmpeg_dir" = yes; then AC_DEFINE(HAS_FFMPEG_AVCODEC_H,1,[Define if avcodec.h installed to ffmpeg dir]) fi if test "$has_libavcodec_dir" = yes; then AC_DEFINE(HAS_LIBAVCODEC_AVCODEC_H,1,[Define if avcodec.h installed to libavcodec dir]) fi dnl -------------------------------------------------------------------------- dnl Check if the processor stores words with the most significant byte first dnl (like Motorola and SPARC, unlike Intel and VAX). dnl -------------------------------------------------------------------------- AC_C_BIGENDIAN dnl Create the Makefiles AC_CONFIG_FILES([ Makefile data/Makefile data/icons/Makefile data/guvcview.desktop.in data/guvcview.in po/Makefile.in src/Makefile ]) AC_OUTPUT dnl Output the results AC_MSG_NOTICE([ guvcview $VERSION ---------------------- Prefix : ${prefix} Pulse API : ${enable_pulse} Desktop File : ${enable_desktop} Debian Menu : ${enable_debian_menu} Debug Symbols : ${enable_debug} ]) guvcview-src-1.7.1/aclocal.m40000664000175000017500000016111112173257651015042 0ustar paulopaulo# generated automatically by aclocal 1.11.6 -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, # Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],, [m4_warning([this file was generated for autoconf 2.69. You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically `autoreconf'.])]) # Copyright (C) 1995-2002 Free Software Foundation, Inc. # Copyright (C) 2001-2003,2004 Red Hat, Inc. # # This file is free software, distributed under the terms of the GNU # General Public License. As a special exception to the GNU General # Public License, this file may be distributed as part of a program # that contains a configuration script generated by Autoconf, under # the same distribution terms as the rest of that program. # # This file can be copied and used freely without restrictions. It can # be used in projects which are not available under the GNU Public License # but which still want to provide support for the GNU gettext functionality. # # Macro to add for using GNU gettext. # Ulrich Drepper , 1995, 1996 # # Modified to never use included libintl. # Owen Taylor , 12/15/1998 # # Major rework to remove unused code # Owen Taylor , 12/11/2002 # # Added better handling of ALL_LINGUAS from GNU gettext version # written by Bruno Haible, Owen Taylor 5/30/3002 # # Modified to require ngettext # Matthias Clasen 08/06/2004 # # We need this here as well, since someone might use autoconf-2.5x # to configure GLib then an older version to configure a package # using AM_GLIB_GNU_GETTEXT AC_PREREQ(2.53) dnl dnl We go to great lengths to make sure that aclocal won't dnl try to pull in the installed version of these macros dnl when running aclocal in the glib directory. dnl m4_copy([AC_DEFUN],[glib_DEFUN]) m4_copy([AC_REQUIRE],[glib_REQUIRE]) dnl dnl At the end, if we're not within glib, we'll define the public dnl definitions in terms of our private definitions. dnl # GLIB_LC_MESSAGES #-------------------- glib_DEFUN([GLIB_LC_MESSAGES], [AC_CHECK_HEADERS([locale.h]) if test $ac_cv_header_locale_h = yes; then AC_CACHE_CHECK([for LC_MESSAGES], am_cv_val_LC_MESSAGES, [AC_TRY_LINK([#include ], [return LC_MESSAGES], am_cv_val_LC_MESSAGES=yes, am_cv_val_LC_MESSAGES=no)]) if test $am_cv_val_LC_MESSAGES = yes; then AC_DEFINE(HAVE_LC_MESSAGES, 1, [Define if your file defines LC_MESSAGES.]) fi fi]) # GLIB_PATH_PROG_WITH_TEST #---------------------------- dnl GLIB_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR, dnl TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]]) glib_DEFUN([GLIB_PATH_PROG_WITH_TEST], [# Extract the first word of "$2", so it can be a program name with args. set dummy $2; ac_word=[$]2 AC_MSG_CHECKING([for $ac_word]) AC_CACHE_VAL(ac_cv_path_$1, [case "[$]$1" in /*) ac_cv_path_$1="[$]$1" # Let the user override the test with a path. ;; *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" for ac_dir in ifelse([$5], , $PATH, [$5]); do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then if [$3]; then ac_cv_path_$1="$ac_dir/$ac_word" break fi fi done IFS="$ac_save_ifs" dnl If no 4th arg is given, leave the cache variable unset, dnl so AC_PATH_PROGS will keep looking. ifelse([$4], , , [ test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4" ])dnl ;; esac])dnl $1="$ac_cv_path_$1" if test ifelse([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then AC_MSG_RESULT([$]$1) else AC_MSG_RESULT(no) fi AC_SUBST($1)dnl ]) # GLIB_WITH_NLS #----------------- glib_DEFUN([GLIB_WITH_NLS], dnl NLS is obligatory [USE_NLS=yes AC_SUBST(USE_NLS) gt_cv_have_gettext=no CATOBJEXT=NONE XGETTEXT=: INTLLIBS= AC_CHECK_HEADER(libintl.h, [gt_cv_func_dgettext_libintl="no" libintl_extra_libs="" # # First check in libc # AC_CACHE_CHECK([for ngettext in libc], gt_cv_func_ngettext_libc, [AC_TRY_LINK([ #include ], [return !ngettext ("","", 1)], gt_cv_func_ngettext_libc=yes, gt_cv_func_ngettext_libc=no) ]) if test "$gt_cv_func_ngettext_libc" = "yes" ; then AC_CACHE_CHECK([for dgettext in libc], gt_cv_func_dgettext_libc, [AC_TRY_LINK([ #include ], [return !dgettext ("","")], gt_cv_func_dgettext_libc=yes, gt_cv_func_dgettext_libc=no) ]) fi if test "$gt_cv_func_ngettext_libc" = "yes" ; then AC_CHECK_FUNCS(bind_textdomain_codeset) fi # # If we don't have everything we want, check in libintl # if test "$gt_cv_func_dgettext_libc" != "yes" \ || test "$gt_cv_func_ngettext_libc" != "yes" \ || test "$ac_cv_func_bind_textdomain_codeset" != "yes" ; then AC_CHECK_LIB(intl, bindtextdomain, [AC_CHECK_LIB(intl, ngettext, [AC_CHECK_LIB(intl, dgettext, gt_cv_func_dgettext_libintl=yes)])]) if test "$gt_cv_func_dgettext_libintl" != "yes" ; then AC_MSG_CHECKING([if -liconv is needed to use gettext]) AC_MSG_RESULT([]) AC_CHECK_LIB(intl, ngettext, [AC_CHECK_LIB(intl, dcgettext, [gt_cv_func_dgettext_libintl=yes libintl_extra_libs=-liconv], :,-liconv)], :,-liconv) fi # # If we found libintl, then check in it for bind_textdomain_codeset(); # we'll prefer libc if neither have bind_textdomain_codeset(), # and both have dgettext and ngettext # if test "$gt_cv_func_dgettext_libintl" = "yes" ; then glib_save_LIBS="$LIBS" LIBS="$LIBS -lintl $libintl_extra_libs" unset ac_cv_func_bind_textdomain_codeset AC_CHECK_FUNCS(bind_textdomain_codeset) LIBS="$glib_save_LIBS" if test "$ac_cv_func_bind_textdomain_codeset" = "yes" ; then gt_cv_func_dgettext_libc=no else if test "$gt_cv_func_dgettext_libc" = "yes" \ && test "$gt_cv_func_ngettext_libc" = "yes"; then gt_cv_func_dgettext_libintl=no fi fi fi fi if test "$gt_cv_func_dgettext_libc" = "yes" \ || test "$gt_cv_func_dgettext_libintl" = "yes"; then gt_cv_have_gettext=yes fi if test "$gt_cv_func_dgettext_libintl" = "yes"; then INTLLIBS="-lintl $libintl_extra_libs" fi if test "$gt_cv_have_gettext" = "yes"; then AC_DEFINE(HAVE_GETTEXT,1, [Define if the GNU gettext() function is already present or preinstalled.]) GLIB_PATH_PROG_WITH_TEST(MSGFMT, msgfmt, [test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"], no)dnl if test "$MSGFMT" != "no"; then glib_save_LIBS="$LIBS" LIBS="$LIBS $INTLLIBS" AC_CHECK_FUNCS(dcgettext) MSGFMT_OPTS= AC_MSG_CHECKING([if msgfmt accepts -c]) GLIB_RUN_PROG([$MSGFMT -c -o /dev/null],[ msgid "" msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Project-Id-Version: test 1.0\n" "PO-Revision-Date: 2007-02-15 12:01+0100\n" "Last-Translator: test \n" "Language-Team: C \n" "MIME-Version: 1.0\n" "Content-Transfer-Encoding: 8bit\n" ], [MSGFMT_OPTS=-c; AC_MSG_RESULT([yes])], [AC_MSG_RESULT([no])]) AC_SUBST(MSGFMT_OPTS) AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT) GLIB_PATH_PROG_WITH_TEST(XGETTEXT, xgettext, [test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"], :) AC_TRY_LINK(, [extern int _nl_msg_cat_cntr; return _nl_msg_cat_cntr], [CATOBJEXT=.gmo DATADIRNAME=share], [case $host in *-*-solaris*) dnl On Solaris, if bind_textdomain_codeset is in libc, dnl GNU format message catalog is always supported, dnl since both are added to the libc all together. dnl Hence, we'd like to go with DATADIRNAME=share and dnl and CATOBJEXT=.gmo in this case. AC_CHECK_FUNC(bind_textdomain_codeset, [CATOBJEXT=.gmo DATADIRNAME=share], [CATOBJEXT=.mo DATADIRNAME=lib]) ;; *-*-openbsd*) CATOBJEXT=.mo DATADIRNAME=share ;; *) CATOBJEXT=.mo DATADIRNAME=lib ;; esac]) LIBS="$glib_save_LIBS" INSTOBJEXT=.mo else gt_cv_have_gettext=no fi fi ]) if test "$gt_cv_have_gettext" = "yes" ; then AC_DEFINE(ENABLE_NLS, 1, [always defined to indicate that i18n is enabled]) fi dnl Test whether we really found GNU xgettext. if test "$XGETTEXT" != ":"; then dnl If it is not GNU xgettext we define it as : so that the dnl Makefiles still can work. if $XGETTEXT --omit-header /dev/null 2> /dev/null; then : ; else AC_MSG_RESULT( [found xgettext program is not GNU xgettext; ignore it]) XGETTEXT=":" fi fi # We need to process the po/ directory. POSUB=po AC_OUTPUT_COMMANDS( [case "$CONFIG_FILES" in *po/Makefile.in*) sed -e "/POTFILES =/r po/POTFILES" po/Makefile.in > po/Makefile esac]) dnl These rules are solely for the distribution goal. While doing this dnl we only have to keep exactly one list of the available catalogs dnl in configure.ac. for lang in $ALL_LINGUAS; do GMOFILES="$GMOFILES $lang.gmo" POFILES="$POFILES $lang.po" done dnl Make all variables we use known to autoconf. AC_SUBST(CATALOGS) AC_SUBST(CATOBJEXT) AC_SUBST(DATADIRNAME) AC_SUBST(GMOFILES) AC_SUBST(INSTOBJEXT) AC_SUBST(INTLLIBS) AC_SUBST(PO_IN_DATADIR_TRUE) AC_SUBST(PO_IN_DATADIR_FALSE) AC_SUBST(POFILES) AC_SUBST(POSUB) ]) # AM_GLIB_GNU_GETTEXT # ------------------- # Do checks necessary for use of gettext. If a suitable implementation # of gettext is found in either in libintl or in the C library, # it will set INTLLIBS to the libraries needed for use of gettext # and AC_DEFINE() HAVE_GETTEXT and ENABLE_NLS. (The shell variable # gt_cv_have_gettext will be set to "yes".) It will also call AC_SUBST() # on various variables needed by the Makefile.in.in installed by # glib-gettextize. dnl glib_DEFUN([GLIB_GNU_GETTEXT], [AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_HEADER_STDC])dnl GLIB_LC_MESSAGES GLIB_WITH_NLS if test "$gt_cv_have_gettext" = "yes"; then if test "x$ALL_LINGUAS" = "x"; then LINGUAS= else AC_MSG_CHECKING(for catalogs to be installed) NEW_LINGUAS= for presentlang in $ALL_LINGUAS; do useit=no if test "%UNSET%" != "${LINGUAS-%UNSET%}"; then desiredlanguages="$LINGUAS" else desiredlanguages="$ALL_LINGUAS" fi for desiredlang in $desiredlanguages; do # Use the presentlang catalog if desiredlang is # a. equal to presentlang, or # b. a variant of presentlang (because in this case, # presentlang can be used as a fallback for messages # which are not translated in the desiredlang catalog). case "$desiredlang" in "$presentlang"*) useit=yes;; esac done if test $useit = yes; then NEW_LINGUAS="$NEW_LINGUAS $presentlang" fi done LINGUAS=$NEW_LINGUAS AC_MSG_RESULT($LINGUAS) fi dnl Construct list of names of catalog files to be constructed. if test -n "$LINGUAS"; then for lang in $LINGUAS; do CATALOGS="$CATALOGS $lang$CATOBJEXT"; done fi fi dnl If the AC_CONFIG_AUX_DIR macro for autoconf is used we possibly dnl find the mkinstalldirs script in another subdir but ($top_srcdir). dnl Try to locate is. MKINSTALLDIRS= if test -n "$ac_aux_dir"; then MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs" fi if test -z "$MKINSTALLDIRS"; then MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs" fi AC_SUBST(MKINSTALLDIRS) dnl Generate list of files to be processed by xgettext which will dnl be included in po/Makefile. test -d po || mkdir po if test "x$srcdir" != "x."; then if test "x`echo $srcdir | sed 's@/.*@@'`" = "x"; then posrcprefix="$srcdir/" else posrcprefix="../$srcdir/" fi else posrcprefix="../" fi rm -f po/POTFILES sed -e "/^#/d" -e "/^\$/d" -e "s,.*, $posrcprefix& \\\\," -e "\$s/\(.*\) \\\\/\1/" \ < $srcdir/po/POTFILES.in > po/POTFILES ]) # AM_GLIB_DEFINE_LOCALEDIR(VARIABLE) # ------------------------------- # Define VARIABLE to the location where catalog files will # be installed by po/Makefile. glib_DEFUN([GLIB_DEFINE_LOCALEDIR], [glib_REQUIRE([GLIB_GNU_GETTEXT])dnl glib_save_prefix="$prefix" glib_save_exec_prefix="$exec_prefix" glib_save_datarootdir="$datarootdir" test "x$prefix" = xNONE && prefix=$ac_default_prefix test "x$exec_prefix" = xNONE && exec_prefix=$prefix datarootdir=`eval echo "${datarootdir}"` if test "x$CATOBJEXT" = "x.mo" ; then localedir=`eval echo "${libdir}/locale"` else localedir=`eval echo "${datadir}/locale"` fi prefix="$glib_save_prefix" exec_prefix="$glib_save_exec_prefix" datarootdir="$glib_save_datarootdir" AC_DEFINE_UNQUOTED($1, "$localedir", [Define the location where the catalogs will be installed]) ]) dnl dnl Now the definitions that aclocal will find dnl ifdef(glib_configure_ac,[],[ AC_DEFUN([AM_GLIB_GNU_GETTEXT],[GLIB_GNU_GETTEXT($@)]) AC_DEFUN([AM_GLIB_DEFINE_LOCALEDIR],[GLIB_DEFINE_LOCALEDIR($@)]) ])dnl # GLIB_RUN_PROG(PROGRAM, TEST-FILE, [ACTION-IF-PASS], [ACTION-IF-FAIL]) # # Create a temporary file with TEST-FILE as its contents and pass the # file name to PROGRAM. Perform ACTION-IF-PASS if PROGRAM exits with # 0 and perform ACTION-IF-FAIL for any other exit status. AC_DEFUN([GLIB_RUN_PROG], [cat >conftest.foo <<_ACEOF $2 _ACEOF if AC_RUN_LOG([$1 conftest.foo]); then m4_ifval([$3], [$3], [:]) m4_ifvaln([$4], [else $4])dnl echo "$as_me: failed input was:" >&AS_MESSAGE_LOG_FD sed 's/^/| /' conftest.foo >&AS_MESSAGE_LOG_FD fi]) # pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- # serial 1 (pkg-config-0.24) # # Copyright © 2004 Scott James Remnant . # # 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # PKG_PROG_PKG_CONFIG([MIN-VERSION]) # ---------------------------------- AC_DEFUN([PKG_PROG_PKG_CONFIG], [m4_pattern_forbid([^_?PKG_[A-Z_]+$]) m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$]) m4_pattern_allow([^PKG_CONFIG_(DISABLE_UNINSTALLED|TOP_BUILD_DIR|DEBUG_SPEW)$]) AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility]) AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path]) AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path]) if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then AC_PATH_TOOL([PKG_CONFIG], [pkg-config]) fi if test -n "$PKG_CONFIG"; then _pkg_min_version=m4_default([$1], [0.9.0]) AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version]) if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) PKG_CONFIG="" fi fi[]dnl ])# PKG_PROG_PKG_CONFIG # PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) # # Check to see whether a particular set of modules exists. Similar # to PKG_CHECK_MODULES(), but does not set variables or print errors. # # Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG]) # only at the first occurence in configure.ac, so if the first place # it's called might be skipped (such as if it is within an "if", you # have to call PKG_CHECK_EXISTS manually # -------------------------------------------------------------- AC_DEFUN([PKG_CHECK_EXISTS], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl if test -n "$PKG_CONFIG" && \ AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then m4_default([$2], [:]) m4_ifvaln([$3], [else $3])dnl fi]) # _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) # --------------------------------------------- m4_define([_PKG_CONFIG], [if test -n "$$1"; then pkg_cv_[]$1="$$1" elif test -n "$PKG_CONFIG"; then PKG_CHECK_EXISTS([$3], [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes ], [pkg_failed=yes]) else pkg_failed=untried fi[]dnl ])# _PKG_CONFIG # _PKG_SHORT_ERRORS_SUPPORTED # ----------------------------- AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED], [AC_REQUIRE([PKG_PROG_PKG_CONFIG]) if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi[]dnl ])# _PKG_SHORT_ERRORS_SUPPORTED # PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], # [ACTION-IF-NOT-FOUND]) # # # Note that if there is a possibility the first call to # PKG_CHECK_MODULES might not happen, you should be sure to include an # explicit call to PKG_PROG_PKG_CONFIG in your configure.ac # # # -------------------------------------------------------------- AC_DEFUN([PKG_CHECK_MODULES], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl pkg_failed=no AC_MSG_CHECKING([for $1]) _PKG_CONFIG([$1][_CFLAGS], [cflags], [$2]) _PKG_CONFIG([$1][_LIBS], [libs], [$2]) m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS and $1[]_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details.]) if test $pkg_failed = yes; then AC_MSG_RESULT([no]) _PKG_SHORT_ERRORS_SUPPORTED if test $_pkg_short_errors_supported = yes; then $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$2" 2>&1` else $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$2" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD m4_default([$4], [AC_MSG_ERROR( [Package requirements ($2) were not met: $$1_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. _PKG_TEXT])[]dnl ]) elif test $pkg_failed = untried; then AC_MSG_RESULT([no]) m4_default([$4], [AC_MSG_FAILURE( [The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. _PKG_TEXT To get pkg-config, see .])[]dnl ]) else $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS $1[]_LIBS=$pkg_cv_[]$1[]_LIBS AC_MSG_RESULT([yes]) $3 fi[]dnl ])# PKG_CHECK_MODULES # Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008, 2011 Free Software # Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 1 # AM_AUTOMAKE_VERSION(VERSION) # ---------------------------- # Automake X.Y traces this macro to ensure aclocal.m4 has been # generated from the m4 files accompanying Automake X.Y. # (This private macro should not be called outside this file.) AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.11' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. m4_if([$1], [1.11.6], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) # _AM_AUTOCONF_VERSION(VERSION) # ----------------------------- # aclocal traces this macro to find the Autoconf version. # This is a private macro too. Using m4_define simplifies # the logic in aclocal, which can simply ignore this definition. m4_define([_AM_AUTOCONF_VERSION], []) # AM_SET_CURRENT_AUTOMAKE_VERSION # ------------------------------- # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.11.6])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- # Copyright (C) 2001, 2003, 2005, 2011 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 1 # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets # $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to # `$srcdir', `$srcdir/..', or `$srcdir/../..'. # # Of course, Automake must honor this variable whenever it calls a # tool from the auxiliary directory. The problem is that $srcdir (and # therefore $ac_aux_dir as well) can be either absolute or relative, # depending on how configure is run. This is pretty annoying, since # it makes $ac_aux_dir quite unusable in subdirectories: in the top # source directory, any form will work fine, but in subdirectories a # relative path needs to be adjusted first. # # $ac_aux_dir/missing # fails when called from a subdirectory if $ac_aux_dir is relative # $top_srcdir/$ac_aux_dir/missing # fails if $ac_aux_dir is absolute, # fails when called from a subdirectory in a VPATH build with # a relative $ac_aux_dir # # The reason of the latter failure is that $top_srcdir and $ac_aux_dir # are both prefixed by $srcdir. In an in-source build this is usually # harmless because $srcdir is `.', but things will broke when you # start a VPATH build or use an absolute $srcdir. # # So we could use something similar to $top_srcdir/$ac_aux_dir/missing, # iff we strip the leading $srcdir from $ac_aux_dir. That would be: # am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` # and then we would define $MISSING as # MISSING="\${SHELL} $am_aux_dir/missing" # This will work as long as MISSING is not called from configure, because # unfortunately $(top_srcdir) has no meaning in configure. # However there are other variables, like CC, which are often used in # configure, and could therefore not use this "fixed" $ac_aux_dir. # # Another solution, used here, is to always expand $ac_aux_dir to an # absolute PATH. The drawback is that using absolute paths prevent a # configured tree to be moved without reconfiguration. AC_DEFUN([AM_AUX_DIR_EXPAND], [dnl Rely on autoconf to set up CDPATH properly. AC_PREREQ([2.50])dnl # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` ]) # AM_CONDITIONAL -*- Autoconf -*- # Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 9 # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- # Define a conditional. AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ(2.52)dnl ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl AC_SUBST([$1_TRUE])dnl AC_SUBST([$1_FALSE])dnl _AM_SUBST_NOTMAKE([$1_TRUE])dnl _AM_SUBST_NOTMAKE([$1_FALSE])dnl m4_define([_AM_COND_VALUE_$1], [$2])dnl if $2; then $1_TRUE= $1_FALSE='#' else $1_TRUE='#' $1_FALSE= fi AC_CONFIG_COMMANDS_PRE( [if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then AC_MSG_ERROR([[conditional "$1" was never defined. Usually this means the macro was only invoked conditionally.]]) fi])]) # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009, # 2010, 2011 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 12 # There are a few dirty hacks below to avoid letting `AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, # will think it sees a *use*, and therefore will trigger all it's # C support machinery. Also note that it means that autoscan, seeing # CC etc. in the Makefile, will ask for an AC_PROG_CC use... # _AM_DEPENDENCIES(NAME) # ---------------------- # See how the compiler implements dependency checking. # NAME is "CC", "CXX", "GCJ", or "OBJC". # We try a few techniques and use that to set a single cache variable. # # We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was # modified to invoke _AM_DEPENDENCIES(CC); we would have a circular # dependency, and given that the user is not expected to run this macro, # just rely on AC_PROG_CC. AC_DEFUN([_AM_DEPENDENCIES], [AC_REQUIRE([AM_SET_DEPDIR])dnl AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl AC_REQUIRE([AM_MAKE_INCLUDE])dnl AC_REQUIRE([AM_DEP_TRACK])dnl ifelse([$1], CC, [depcc="$CC" am_compiler_list=], [$1], CXX, [depcc="$CXX" am_compiler_list=], [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], [$1], UPC, [depcc="$UPC" am_compiler_list=], [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], [depcc="$$1" am_compiler_list=]) AC_CACHE_CHECK([dependency style of $depcc], [am_cv_$1_dependencies_compiler_type], [if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_$1_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` fi am__universal=false m4_case([$1], [CC], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac], [CXX], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac]) for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok `-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_$1_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_$1_dependencies_compiler_type=none fi ]) AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) AM_CONDITIONAL([am__fastdep$1], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) ]) # AM_SET_DEPDIR # ------------- # Choose a directory name for dependency files. # This macro is AC_REQUIREd in _AM_DEPENDENCIES AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl ]) # AM_DEP_TRACK # ------------ AC_DEFUN([AM_DEP_TRACK], [AC_ARG_ENABLE(dependency-tracking, [ --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors]) if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) AC_SUBST([AMDEPBACKSLASH])dnl _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl AC_SUBST([am__nodep])dnl _AM_SUBST_NOTMAKE([am__nodep])dnl ]) # Generate code to set up dependency tracking. -*- Autoconf -*- # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. #serial 5 # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [{ # Autoconf 2.62 quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named `Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`AS_DIRNAME("$mf")` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running `make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n 's/^U = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`AS_DIRNAME(["$file"])` AS_MKDIR_P([$dirpart/$fdir]) # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ])# _AM_OUTPUT_DEPENDENCY_COMMANDS # AM_OUTPUT_DEPENDENCY_COMMANDS # ----------------------------- # This macro should only be invoked once -- use via AC_REQUIRE. # # This code is only required when automatic dependency tracking # is enabled. FIXME. This creates each `.P' file that we will # need in order to bootstrap the dependency handling code. AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) ]) # Do all the work for Automake. -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2008, 2009 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 16 # This macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) # AM_INIT_AUTOMAKE([OPTIONS]) # ----------------------------------------------- # The call with PACKAGE and VERSION arguments is the old style # call (pre autoconf-2.50), which is being phased out. PACKAGE # and VERSION should now be passed to AC_INIT and removed from # the call to AM_INIT_AUTOMAKE. # We support both call styles for the transition. After # the next Automake release, Autoconf can make the AC_INIT # arguments mandatory, and then we can depend on a new Autoconf # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.62])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl # test to see if srcdir already configured if test -f $srcdir/config.status; then AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi AC_SUBST([CYGPATH_W]) # Define the identity of the package. dnl Distinguish between old-style and new-style calls. m4_ifval([$2], [m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,, [m4_fatal([AC_INIT should be called with package and version arguments])])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl _AM_IF_OPTION([no-define],, [AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl # Some tools Automake needs. AC_REQUIRE([AM_SANITY_CHECK])dnl AC_REQUIRE([AC_ARG_PROGRAM])dnl AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) AM_MISSING_PROG(AUTOCONF, autoconf) AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) AM_MISSING_PROG(AUTOHEADER, autoheader) AM_MISSING_PROG(MAKEINFO, makeinfo) AC_REQUIRE([AM_PROG_INSTALL_SH])dnl AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl AC_REQUIRE([AM_PROG_MKDIR_P])dnl # We need awk for the "check" target. The system "awk" is bad on # some platforms. AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], [_AM_DEPENDENCIES(CC)], [define([AC_PROG_CC], defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES(CXX)], [define([AC_PROG_CXX], defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], [_AM_DEPENDENCIES(OBJC)], [define([AC_PROG_OBJC], defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl ]) _AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl dnl The `parallel-tests' driver may need to know about EXEEXT, so add the dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro dnl is hooked onto _AC_COMPILER_EXEEXT early, see below. AC_CONFIG_COMMANDS_PRE(dnl [m4_provide_if([_AM_COMPILER_EXEEXT], [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl ]) dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion. Do not dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further dnl mangled by Autoconf and run in a shell conditional statement. m4_define([_AC_COMPILER_EXEEXT], m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) # When config.status generates a header, we must update the stamp-h file. # This file resides in the same directory as the config header # that is generated. The stamp files are numbered to have different names. # Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the # loop where config.status creates the headers, so we can generate # our stamp files there. AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. _am_arg=$1 _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) # Copyright (C) 2001, 2003, 2005, 2008, 2011 Free Software Foundation, # Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 1 # AM_PROG_INSTALL_SH # ------------------ # Define $install_sh. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl if test x"${install_sh}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi AC_SUBST(install_sh)]) # Copyright (C) 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # Check whether the underlying file-system supports filenames # with a leading dot. For instance MS-DOS doesn't. AC_DEFUN([AM_SET_LEADING_DOT], [rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null AC_SUBST([am__leading_dot])]) # Add --enable-maintainer-mode option to configure. -*- Autoconf -*- # From Jim Meyering # Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004, 2005, 2008, # 2011 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 5 # AM_MAINTAINER_MODE([DEFAULT-MODE]) # ---------------------------------- # Control maintainer-specific portions of Makefiles. # Default is to disable them, unless `enable' is passed literally. # For symmetry, `disable' may be passed as well. Anyway, the user # can override the default with the --enable/--disable switch. AC_DEFUN([AM_MAINTAINER_MODE], [m4_case(m4_default([$1], [disable]), [enable], [m4_define([am_maintainer_other], [disable])], [disable], [m4_define([am_maintainer_other], [enable])], [m4_define([am_maintainer_other], [enable]) m4_warn([syntax], [unexpected argument to AM@&t@_MAINTAINER_MODE: $1])]) AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) dnl maintainer-mode's default is 'disable' unless 'enable' is passed AC_ARG_ENABLE([maintainer-mode], [ --][am_maintainer_other][-maintainer-mode am_maintainer_other make rules and dependencies not useful (and sometimes confusing) to the casual installer], [USE_MAINTAINER_MODE=$enableval], [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes])) AC_MSG_RESULT([$USE_MAINTAINER_MODE]) AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes]) MAINT=$MAINTAINER_MODE_TRUE AC_SUBST([MAINT])dnl ] ) AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE]) # Check to see how 'make' treats includes. -*- Autoconf -*- # Copyright (C) 2001, 2002, 2003, 2005, 2009 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 4 # AM_MAKE_INCLUDE() # ----------------- # Check to see how make treats includes. AC_DEFUN([AM_MAKE_INCLUDE], [am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. AC_MSG_CHECKING([for style of include used by $am_make]) am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from `make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi AC_SUBST([am__include]) AC_SUBST([am__quote]) AC_MSG_RESULT([$_am_result]) rm -f confinc confmf ]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- # Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 6 # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN]) $1=${$1-"${am_missing_run}$2"} AC_SUBST($1)]) # AM_MISSING_HAS_RUN # ------------------ # Define MISSING if not defined so far and test if it supports --run. # If it does, set am_missing_run to use it, otherwise, to nothing. AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([missing])dnl if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= AC_MSG_WARN([`missing' script is too old or missing]) fi ]) # Copyright (C) 2003, 2004, 2005, 2006, 2011 Free Software Foundation, # Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 1 # AM_PROG_MKDIR_P # --------------- # Check for `mkdir -p'. AC_DEFUN([AM_PROG_MKDIR_P], [AC_PREREQ([2.60])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P, dnl while keeping a definition of mkdir_p for backward compatibility. dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile. dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of dnl Makefile.ins that do not define MKDIR_P, so we do our own dnl adjustment using top_builddir (which is defined more often than dnl MKDIR_P). AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl case $mkdir_p in [[\\/$]]* | ?:[[\\/]]*) ;; */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; esac ]) # Helper functions for option handling. -*- Autoconf -*- # Copyright (C) 2001, 2002, 2003, 2005, 2008, 2010 Free Software # Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 5 # _AM_MANGLE_OPTION(NAME) # ----------------------- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) # _AM_SET_OPTION(NAME) # -------------------- # Set option NAME. Presently that only means defining a flag for this option. AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), 1)]) # _AM_SET_OPTIONS(OPTIONS) # ------------------------ # OPTIONS is a space-separated list of Automake options. AC_DEFUN([_AM_SET_OPTIONS], [m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) # ------------------------------------------- # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) # Check to make sure that the build environment is sane. -*- Autoconf -*- # Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 5 # AM_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) # Just in case sleep 1 echo timestamp > conftest.file # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[[\\\"\#\$\&\'\`$am_lf]]*) AC_MSG_ERROR([unsafe absolute working directory name]);; esac case $srcdir in *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);; esac # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$[*]" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi rm -f conftest.file if test "$[*]" != "X $srcdir/configure conftest.file" \ && test "$[*]" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken alias in your environment]) fi test "$[2]" = conftest.file ) then # Ok. : else AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi AC_MSG_RESULT(yes)]) # Copyright (C) 2009, 2011 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # AM_SILENT_RULES([DEFAULT]) # -------------------------- # Enable less verbose build rules; with the default set to DEFAULT # (`yes' being less verbose, `no' or empty being verbose). AC_DEFUN([AM_SILENT_RULES], [AC_ARG_ENABLE([silent-rules], [ --enable-silent-rules less verbose build output (undo: `make V=1') --disable-silent-rules verbose build output (undo: `make V=0')]) case $enable_silent_rules in yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; esac dnl dnl A few `make' implementations (e.g., NonStop OS and NextStep) dnl do not support nested variable expansions. dnl See automake bug#9928 and bug#10237. am_make=${MAKE-make} AC_CACHE_CHECK([whether $am_make supports nested variables], [am_cv_make_support_nested_variables], [if AS_ECHO([['TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi]) if test $am_cv_make_support_nested_variables = yes; then dnl Using `$V' instead of `$(V)' breaks IRIX make. AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AC_SUBST([AM_V])dnl AM_SUBST_NOTMAKE([AM_V])dnl AC_SUBST([AM_DEFAULT_V])dnl AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl AC_SUBST([AM_DEFAULT_VERBOSITY])dnl AM_BACKSLASH='\' AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) # Copyright (C) 2001, 2003, 2005, 2011 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 1 # AM_PROG_INSTALL_STRIP # --------------------- # One issue with vendor `install' (even GNU) is that you can't # specify the program used to strip binaries. This is especially # annoying in cross-compiling environments, where the build's strip # is unlikely to handle the host's binaries. # Fortunately install-sh will honor a STRIPPROG variable, so we # always use install-sh in `make install-strip', and initialize # STRIPPROG with the value of the STRIP variable (set by the user). AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl # Installed binaries are usually stripped using `strip' when the user # run `make install-strip'. However `strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the `STRIP' environment variable to overrule this program. dnl Don't test for $cross_compiling = yes, because it might be `maybe'. if test "$cross_compiling" != no; then AC_CHECK_TOOL([STRIP], [strip], :) fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) # Copyright (C) 2006, 2008, 2010 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 3 # _AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. # This macro is traced by Automake. AC_DEFUN([_AM_SUBST_NOTMAKE]) # AM_SUBST_NOTMAKE(VARIABLE) # -------------------------- # Public sister of _AM_SUBST_NOTMAKE. AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- # Copyright (C) 2004, 2005, 2012 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # _AM_PROG_TAR(FORMAT) # -------------------- # Check how to create a tarball in format FORMAT. # FORMAT should be one of `v7', `ustar', or `pax'. # # Substitute a variable $(am__tar) that is a command # writing to stdout a FORMAT-tarball containing the directory # $tardir. # tardir=directory && $(am__tar) > result.tar # # Substitute a variable $(am__untar) that extract such # a tarball read from stdin. # $(am__untar) < result.tar AC_DEFUN([_AM_PROG_TAR], [# Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AC_SUBST([AMTAR], ['$${TAR-tar}']) m4_if([$1], [v7], [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], [m4_case([$1], [ustar],, [pax],, [m4_fatal([Unknown tar format])]) AC_MSG_CHECKING([how to create a $1 tar archive]) # Loop over all known methods to create a tar archive until one works. _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' _am_tools=${am_cv_prog_tar_$1-$_am_tools} # Do not fold the above two line into one, because Tru64 sh and # Solaris sh will not grok spaces in the rhs of `-'. for _am_tool in $_am_tools do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do AM_RUN_LOG([$_am_tar --version]) && break done am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x $1 -w "$$tardir"' am__tar_='pax -L -x $1 -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H $1 -L' am__tar_='find "$tardir" -print | cpio -o -H $1 -L' am__untar='cpio -i -H $1 -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_$1}" && break # tar/untar a dummy directory, and stop if the command works rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) rm -rf conftest.dir if test -s conftest.tar; then AM_RUN_LOG([$am__untar /dev/null 2>&1 && break fi done rm -rf conftest.dir AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) AC_MSG_RESULT([$am_cv_prog_tar_$1])]) AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR m4_include([m4/intltool.m4]) m4_include([m4/nls.m4]) guvcview-src-1.7.1/src/0000775000175000017500000000000012173260105013754 5ustar paulopauloguvcview-src-1.7.1/src/guvcview.c0000775000175000017500000007113212173235416015775 0ustar paulopaulo/*******************************************************************************# # guvcview http://guvcview.sourceforge.net # # # # Paulo Assis # # Nobuhiro Iwamatsu # # Dr. Alexander K. Seewald # # Autofocus algorithm # # Flemming Frandsen # # George Sedov # # # # 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # # ********************************************************************************/ #include #include #include /* support for internationalization - i18n */ #include /* locale.h is needed if -O0 used (no optimiztions) */ /* otherwise included from libintl.h on glib/gi18n.h */ #include #include #include /* for fcntl, O_NONBLOCK */ #include #include #include "../config.h" #include "avilib.h" #include "colorspaces.h" #include "sound.h" #include "snd_devices.h" #include "jpgenc.h" #include "autofocus.h" #include "picture.h" #include "ms_time.h" #include "string_utils.h" #include "options.h" #include "video.h" #include "lavc_common.h" #include "vcodecs.h" #include "acodecs.h" #include "create_video.h" #include "profile.h" #include "callbacks.h" #include "close.h" #include "img_controls.h" #include "menubar.h" #include "video_tab.h" #include "audio_tab.h" #include "timers.h" #define __AMUTEX &pdata->mutex /*----------------------------- globals --------------------------------------*/ struct paRecordData *pdata = NULL; struct GLOBAL *global = NULL; struct focusData *AFdata = NULL; struct vdIn *videoIn = NULL; struct VideoFormatData *videoF = NULL; /*controls data*/ struct VidState *s = NULL; /*global widgets*/ struct GWIDGET *gwidget = NULL; /*thread definitions*/ //__THREAD_TYPE video_thread; /* * Unix signals that are cought are written to a pipe. The pipe connects * the unix signal handler with GTK's event loop. The array signal_pipe will * hold the file descriptors for the two ends of the pipe (index 0 for * reading, 1 for writing). */ int signal_pipe[2]; /* * The unix signal handler. * Write any unix signal into the pipe. The writing end of the pipe is in * non-blocking mode. If it is full (which can only happen when the * event loop stops working) signals will be dropped. */ void pipe_signals(int signal) { if(write(signal_pipe[1], &signal, sizeof(int)) != sizeof(int)) { fprintf(stderr, "unix signal %d lost\n", signal); } } /* * The event loop callback that handles the unix signals. Must be a GIOFunc. * The source is the reading end of our pipe, cond is one of * G_IO_IN or G_IO_PRI (I don't know what could lead to G_IO_PRI) * the pointer d is always NULL */ gboolean deliver_signal(GIOChannel *source, GIOCondition cond, gpointer data) { GError *error = NULL; /* for error handling */ /* * There is no g_io_channel_read or g_io_channel_read_int, so we read * char's and use a union to recover the unix signal number. */ union { gchar chars[sizeof(int)]; int signal; } buf; GIOStatus status; /* save the reading status */ gsize bytes_read; /* save the number of chars read */ /* * Read from the pipe as long as data is available. The reading end is * also in non-blocking mode, so if we have consumed all unix signals, * the read returns G_IO_STATUS_AGAIN. */ while((status = g_io_channel_read_chars(source, buf.chars, sizeof(int), &bytes_read, &error)) == G_IO_STATUS_NORMAL) { g_assert(error == NULL); /* no error if reading returns normal */ /* * There might be some problem resulting in too few char's read. * Check it. */ if(bytes_read != sizeof(int)){ fprintf(stderr, "lost data in signal pipe (expected %lu, received %lu)\n", (long unsigned int) sizeof(int), (long unsigned int) bytes_read); continue; /* discard the garbage and keep fingers crossed */ } /* Ok, we read a unix signal number, so let the label reflect it! */ switch (buf.signal) { case SIGINT: shutd(0, data);//shutDown break; default: printf("guvcview signal %d caught\n", buf.signal); break; } } /* * Reading from the pipe has not returned with normal status. Check for * potential errors and return from the callback. */ if(error != NULL){ fprintf(stderr, "reading signal pipe failed: %s\n", error->message); exit(1); } if(status == G_IO_STATUS_EOF){ fprintf(stderr, "signal pipe has been closed\n"); exit(1); } g_assert(status == G_IO_STATUS_AGAIN); return (TRUE); /* keep the event source */ } /*--------------------------------- MAIN -------------------------------------*/ int main(int argc, char *argv[]) { int ret=0; gboolean control_only = FALSE; /* * In order to register the reading end of the pipe with the event loop * we must convert it into a GIOChannel. */ GIOChannel *g_signal_in; long fd_flags; /* used to change the pipe into non-blocking mode */ GError *error = NULL; /* handle errors */ /*print package name and version*/ g_print("%s\n", PACKAGE_STRING); //g_type_init (); //gdk_threads_init(); #ifdef ENABLE_NLS char* lc_all = setlocale (LC_ALL, ""); char* lc_dir = bindtextdomain (GETTEXT_PACKAGE, PACKAGE_LOCALE_DIR); bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); char* txtdom = textdomain (GETTEXT_PACKAGE); const gchar * const * langs = g_get_language_names (); //get ordered list of defined languages #endif /*structure containing all shared data - passed in callbacks*/ struct ALL_DATA all_data; memset(&all_data,0,sizeof(struct ALL_DATA)); /** initGlobals needs codecs registered * so do it here */ #if !LIBAVCODEC_VER_AT_LEAST(53,34) avcodec_init(); #endif // register all the codecs (you can also register only the codec //you wish to have smaller code) avcodec_register_all(); /*allocate global variables*/ global = g_new0(struct GLOBAL, 1); initGlobals(global); /*------------------------ reads command line options --------------------*/ readOpts(argc,argv,global); /*------------------------- reads configuration file ---------------------*/ readConf(global); //sets local control_only flag - prevents several initializations/allocations control_only = (global->control_only || global->add_ctrls) ; if(global->no_display && (global->control_only || !(global->exit_on_close && (global->Capture_time || global->image_timer)))) { if(!(global->exit_on_close && (global->Capture_time || global->image_timer))) g_printerr("no_display must be used with exit_on_close and a timed capture: enabling display"); else g_printerr("incompatible options (control_only and no_display): enabling display"); global->no_display = FALSE; } /*---------------------------------- Allocations -------------------------*/ gwidget = g_new0(struct GWIDGET, 1); gwidget->vid_widget_state = TRUE; /* widgets */ GtkWidget *scroll1; GtkWidget *Tab1; GtkWidget *Tab1Label; GtkWidget *Tab1Icon; GtkWidget *ImgButton_Img; GtkWidget *VidButton_Img; GtkWidget *QButton_Img; GtkWidget *HButtonBox; s = g_new0(struct VidState, 1); if(!control_only) /*control_only exclusion (video and Audio) */ { pdata = g_new0(struct paRecordData, 1); //pdata->maincontext = g_main_context_default(); /*create mutex for sound buffers*/ __INIT_MUTEX(__AMUTEX); /* Allocate the video Format struct */ videoF = g_new0(struct VideoFormatData, 1); /*---------------------------- Start PortAudio API -----------------------*/ if(global->debug) g_print("starting portaudio...\n"); Pa_Initialize(); } #ifdef ENABLE_NLS /* if --verbose mode set do debug*/ if (global->debug) g_print("language catalog=> dir:%s type:%s lang:%s cat:%s.mo\n", lc_dir, lc_all, langs[0], txtdom); #endif /*---------------------------- GTK init ----------------------------------*/ gtk_init(&argc, &argv); g_set_application_name(_("Guvcview Video Capture")); g_setenv("PULSE_PROP_media.role", "video", TRUE); //needed for Pulse Audio if(!global->no_display) { /* make sure the type is realized so that we can change the properties*/ g_type_class_unref (g_type_class_ref (GTK_TYPE_BUTTON)); /* make sure gtk-button-images property is set to true (defaults to false in karmic)*/ g_object_set (gtk_settings_get_default (), "gtk-button-images", TRUE, NULL); /* Create a main window */ gwidget->mainwin = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title (GTK_WINDOW (gwidget->mainwin), _("GUVCViewer Controls")); //get screen resolution if((!global->desktop_w) || (!global->desktop_h)) { GdkScreen* screen = NULL; screen = gtk_window_get_screen(GTK_WINDOW(gwidget->mainwin)); global->desktop_w = gdk_screen_get_width(screen); global->desktop_h = gdk_screen_get_height(screen); } if(global->debug) g_print("Screen resolution is (%d x %d)\n", global->desktop_w, global->desktop_h); if((global->winwidth > global->desktop_w) && (global->desktop_w > 0)) global->winwidth = global->desktop_w; if((global->winheight > global->desktop_h) && (global->desktop_h > 0)) global->winheight = global->desktop_h; gtk_window_resize(GTK_WINDOW(gwidget->mainwin),global->winwidth,global->winheight); /* Add event handlers */ g_signal_connect(GTK_WINDOW(gwidget->mainwin), "delete_event", G_CALLBACK(delete_event), &all_data); } /*----------------------- init videoIn structure --------------------------*/ videoIn = g_new0(struct vdIn, 1); /*set structure with all global allocations*/ all_data.pdata = pdata; all_data.global = global; all_data.AFdata = AFdata; /*not allocated yet*/ all_data.videoIn = videoIn; all_data.videoF = videoF; all_data.gwidget = gwidget; all_data.s = s; /*get format from selected mode*/ global->format = get_PixFormat(global->mode); if(global->debug) g_print("%s: setting format to %i\n", global->mode, global->format); if ( ( ret=init_videoIn (videoIn, global) ) != 0) { g_printerr("Init video returned %i\n",ret); switch (ret) { case VDIN_DEVICE_ERR://can't open device ERR_DIALOG (N_("Guvcview error:\n\nUnable to open device"), N_("Please make sure the camera is connected\nand that the correct driver is installed."), &all_data); break; case VDIN_DYNCTRL_OK: //uvc extension controls OK, give warning and shutdown (called with --add_ctrls) WARN_DIALOG (N_("Guvcview:\n\nUVC Extension controls"), N_("Extension controls were added to the UVC driver"), &all_data); clean_struct(&all_data); exit(0); break; case VDIN_DYNCTRL_ERR: //uvc extension controls error - EACCES (needs root user) ERR_DIALOG (N_("Guvcview error:\n\nUVC Extension controls"), N_("An error occurred while adding extension\ncontrols to the UVC driver\nMake sure you run guvcview as root (or sudo)."), &all_data); break; case VDIN_UNKNOWN_ERR: //unknown error (treat as invalid format) case VDIN_FORMAT_ERR://invalid format case VDIN_RESOL_ERR: //invalid resolution g_print("trying minimum setup ...\n"); if (videoIn->listFormats->numb_formats > 0) //check for supported formats { VidFormats *listVidFormats; videoIn->listFormats->current_format = 0; //get the first supported format global->format = videoIn->listFormats->listVidFormats[0].format; if(get_PixMode(global->format, global->mode) < 0) g_printerr("IMPOSSIBLE: format has no supported mode !?\n"); listVidFormats = &videoIn->listFormats->listVidFormats[0]; global->width = listVidFormats->listVidCap[0].width; global->width = listVidFormats->listVidCap[0].height; if (listVidFormats->listVidCap[0].framerate_num != NULL) global->fps_num = listVidFormats->listVidCap[0].framerate_num[0]; if (listVidFormats->listVidCap[0].framerate_denom != NULL) global->fps = listVidFormats->listVidCap[0].framerate_denom[0]; } else { g_printerr("ERROR: Can't set video stream. No supported format found\nExiting...\n"); ERR_DIALOG (N_("Guvcview error:\n\nCan't set a valid video stream for guvcview"), N_("Make sure your device driver is v4l2 compliant\nand that it is properly installed."), &all_data); } //try again with new format ret = init_videoIn (videoIn, global); if ((ret == VDIN_QUERYBUF_ERR) && (global->cap_meth != videoIn->cap_meth)) { //mmap not supported ? try again with read method g_printerr("mmap failed trying read method..."); global->cap_meth = videoIn->cap_meth; ret = init_videoIn (videoIn, global); if (ret == VDIN_OK) g_printerr("OK\n"); else g_printerr("FAILED\n"); } if (ret < 0) { g_printerr("ERROR: Minimum Setup Failed.\n Exiting...\n"); ERR_DIALOG (N_("Guvcview error:\n\nUnable to start with minimum setup"), N_("Please reconnect your camera."), &all_data); } break; case VDIN_QUERYBUF_ERR: if (global->cap_meth != videoIn->cap_meth) { //mmap not supported ? try again with read method g_printerr("mmap failed trying read method..."); global->cap_meth = videoIn->cap_meth; ret = init_videoIn (videoIn, global); if (ret == VDIN_OK) g_printerr("OK\n"); else { g_printerr("FAILED\n"); //return to default method(mmap) global->cap_meth = IO_MMAP; g_printerr("ERROR: Minimum Setup Failed.\n Exiting...\n"); ERR_DIALOG (N_("Guvcview error:\n\nUnable to start with minimum setup"), N_("Please reconnect your camera."), &all_data); } } break; case VDIN_QUERYCAP_ERR: ERR_DIALOG (N_("Guvcview error:\n\nCouldn't query device capabilities"), N_("Make sure the device driver supports v4l2."), &all_data); break; case VDIN_READ_ERR: ERR_DIALOG (N_("Guvcview error:\n\nRead method error"), N_("Please try mmap instead (--capture_method=1)."), &all_data); break; case VDIN_REQBUFS_ERR:/*unable to allocate dequeue buffers or mem*/ case VDIN_ALLOC_ERR: case VDIN_FBALLOC_ERR: default: ERR_DIALOG (N_("Guvcview error:\n\nUnable to allocate Buffers"), N_("Please try restarting your system."), &all_data); break; } } videoIn->listFormats->current_format = get_FormatIndex(videoIn->listFormats, global->format); if(videoIn->listFormats->current_format < 0) { g_printerr("ERROR: Can't set video stream. No supported format found\nExiting...\n"); ERR_DIALOG (N_("Guvcview error:\n\nCan't set a valid video stream for guvcview"), N_("Make sure your device driver is v4l2 compliant\nand that it is properly installed."), &all_data); } /*-----------------------------GTK widgets---------------------------------*/ /*----------------------- Image controls Tab ------------------------------*/ if(!(global->no_display)) { gwidget->maintable = gtk_box_new(GTK_ORIENTATION_VERTICAL, 2); gtk_widget_show (gwidget->maintable); /** Attach the menu */ gtk_box_pack_start(GTK_BOX(gwidget->maintable), create_menu(&all_data, control_only), FALSE, TRUE, 2); s->control_list = NULL; /** draw the controls */ printf("drawing controls\n\n"); draw_controls(&all_data); if (global->lprofile > 0) LoadControls (&all_data); gwidget->boxh = gtk_notebook_new(); gtk_widget_show (s->table); gtk_widget_show (gwidget->boxh); scroll1=gtk_scrolled_window_new(NULL,NULL); gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scroll1),s->table); gtk_scrolled_window_set_placement(GTK_SCROLLED_WINDOW(scroll1), GTK_CORNER_TOP_LEFT); gtk_widget_show(scroll1); Tab1 = gtk_grid_new(); Tab1Label = gtk_label_new(_("Image Controls")); gtk_widget_show (Tab1Label); /** check for files */ gchar* Tab1IconPath = g_strconcat (PACKAGE_DATA_DIR,"/pixmaps/guvcview/image_controls.png",NULL); /** don't test for file - use default empty image if load fails */ /** get icon image*/ Tab1Icon = gtk_image_new_from_file(Tab1IconPath); g_free(Tab1IconPath); gtk_widget_show (Tab1Icon); gtk_grid_attach (GTK_GRID(Tab1), Tab1Icon, 0, 0, 1, 1); gtk_grid_attach (GTK_GRID(Tab1), Tab1Label, 1, 0, 1, 1); gtk_widget_show (Tab1); gtk_notebook_append_page(GTK_NOTEBOOK(gwidget->boxh),scroll1,Tab1); /*---------------------- Add Buttons ---------------------------------*/ HButtonBox = gtk_button_box_new(GTK_ORIENTATION_HORIZONTAL); gtk_widget_set_halign (HButtonBox, GTK_ALIGN_FILL); gtk_widget_set_hexpand (HButtonBox, TRUE); gtk_button_box_set_layout(GTK_BUTTON_BOX(HButtonBox),GTK_BUTTONBOX_SPREAD); gtk_box_set_homogeneous(GTK_BOX(HButtonBox),TRUE); gtk_widget_show(HButtonBox); /** Attach the buttons */ gtk_box_pack_start(GTK_BOX(gwidget->maintable), HButtonBox, FALSE, TRUE, 2); /** Attach the notebook (tabs) */ gtk_box_pack_start(GTK_BOX(gwidget->maintable), gwidget->boxh, TRUE, TRUE, 2); gwidget->quitButton=gtk_button_new_from_stock(GTK_STOCK_QUIT); gchar* icon1path = g_strconcat (PACKAGE_DATA_DIR,"/pixmaps/guvcview/guvcview.png",NULL); if (g_file_test(icon1path,G_FILE_TEST_EXISTS)) { gtk_window_set_icon_from_file(GTK_WINDOW (gwidget->mainwin),icon1path,NULL); } g_free(icon1path); if(!control_only)/*control_only exclusion Image and video buttons*/ { if(global->image_timer) { /*image auto capture*/ gwidget->CapImageButt=gtk_button_new_with_label (_("Stop Auto (I)")); } else { gwidget->CapImageButt=gtk_button_new_with_label (_("Cap. Image (I)")); } if (global->vidfile) { /*vid capture enabled from start*/ gwidget->CapVidButt=gtk_toggle_button_new_with_label (_("Stop Video (V)")); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(gwidget->CapVidButt), TRUE); } else { gwidget->CapVidButt=gtk_toggle_button_new_with_label (_("Cap. Video (V)")); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(gwidget->CapVidButt), FALSE); } /*add images to Buttons and top window*/ /*check for files*/ gchar* pix1path = g_strconcat (PACKAGE_DATA_DIR,"/pixmaps/guvcview/movie.png",NULL); if (g_file_test(pix1path,G_FILE_TEST_EXISTS)) { VidButton_Img = gtk_image_new_from_file (pix1path); gtk_button_set_image(GTK_BUTTON(gwidget->CapVidButt),VidButton_Img); gtk_button_set_image_position(GTK_BUTTON(gwidget->CapVidButt),GTK_POS_TOP); //gtk_widget_show (gwidget->VidButton_Img); } //else g_print("couldn't load %s\n", pix1path); gchar* pix2path = g_strconcat (PACKAGE_DATA_DIR,"/pixmaps/guvcview/camera.png",NULL); if (g_file_test(pix2path,G_FILE_TEST_EXISTS)) { ImgButton_Img = gtk_image_new_from_file (pix2path); gtk_button_set_image(GTK_BUTTON(gwidget->CapImageButt),ImgButton_Img); gtk_button_set_image_position(GTK_BUTTON(gwidget->CapImageButt),GTK_POS_TOP); //gtk_widget_show (ImgButton_Img); } g_free(pix1path); g_free(pix2path); gtk_box_pack_start(GTK_BOX(HButtonBox),gwidget->CapImageButt,TRUE,TRUE,2); gtk_box_pack_start(GTK_BOX(HButtonBox),gwidget->CapVidButt,TRUE,TRUE,2); gtk_toggle_button_set_mode (GTK_TOGGLE_BUTTON (gwidget->CapVidButt), FALSE); gtk_widget_show (gwidget->CapImageButt); gtk_widget_show (gwidget->CapVidButt); g_signal_connect (GTK_BUTTON(gwidget->CapImageButt), "clicked", G_CALLBACK (capture_image), &all_data); g_signal_connect (GTK_TOGGLE_BUTTON(gwidget->CapVidButt), "toggled", G_CALLBACK (capture_vid), &all_data); /*key events*/ gtk_widget_add_events (GTK_WIDGET (gwidget->mainwin), GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK); g_signal_connect (GTK_WINDOW(gwidget->mainwin), "key_press_event", G_CALLBACK(key_pressed), &all_data); }/*end of control_only exclusion*/ gchar* pix3path = g_strconcat (PACKAGE_DATA_DIR,"/pixmaps/guvcview/close.png",NULL); if (g_file_test(pix3path,G_FILE_TEST_EXISTS)) { QButton_Img = gtk_image_new_from_file (pix3path); gtk_button_set_image(GTK_BUTTON(gwidget->quitButton),QButton_Img); gtk_button_set_image_position(GTK_BUTTON(gwidget->quitButton),GTK_POS_TOP); //gtk_widget_show (QButton_Img); } /*must free path strings*/ g_free(pix3path); gtk_box_pack_start(GTK_BOX(HButtonBox), gwidget->quitButton,TRUE,TRUE,2); gtk_widget_show_all (gwidget->quitButton); g_signal_connect (GTK_BUTTON(gwidget->quitButton), "clicked", G_CALLBACK (quitButton_clicked), &all_data); if(!control_only) /*control_only exclusion (video and Audio) */ { /*------------------------- Video Tab ---------------------------------*/ video_tab (&all_data); /*-------------------------- Audio Tab --------------------------------*/ audio_tab (&all_data); } /*end of control_only exclusion*/ gwidget->status_bar = gtk_statusbar_new(); gwidget->status_warning_id = gtk_statusbar_get_context_id (GTK_STATUSBAR(gwidget->status_bar), "warning"); gtk_widget_show(gwidget->status_bar); /** add the status bar*/ gtk_box_pack_start(GTK_BOX(gwidget->maintable), gwidget->status_bar, FALSE, FALSE, 2); /* main container */ gtk_container_add (GTK_CONTAINER (gwidget->mainwin), gwidget->maintable); gtk_widget_show (gwidget->mainwin); /*Add udev device monitoring timer*/ global->udev_timer_id=g_timeout_add( 500, check_v4l2_udev_events, &all_data); } else list_snd_devices (global); if (!control_only) /*control_only exclusion*/ { /*------------------ Creating the video thread ---------------*/ if( __THREAD_CREATE(&all_data.video_thread, main_loop, (void *) &all_data)) { g_printerr("Video thread creation failed\n"); ERR_DIALOG (N_("Guvcview error:\n\nUnable to create Video Thread"), N_("Please report it to http://developer.berlios.de/bugs/?group_id=8179"), &all_data); } //all_data.video_thread = video_thread; /*---------------------- image timed capture -----------------------------*/ if(global->image_timer) { global->image_timer_id=g_timeout_add(global->image_timer*1000, Image_capture_timer, &all_data); if(!global->no_display) { set_sensitive_img_contrls(FALSE, gwidget);/*disable image controls*/ char *message = g_strjoin(" ", _("capturing photo to"), videoIn->ImageFName, NULL); gtk_statusbar_pop (GTK_STATUSBAR(gwidget->status_bar), gwidget->status_warning_id); gtk_statusbar_push (GTK_STATUSBAR(gwidget->status_bar), gwidget->status_warning_id, message); g_free(message); } } /*--------------------- video capture from start ---------------------------*/ if(global->vidfile) { videoIn->VidFName = joinPath(videoIn->VidFName, global->vidFPath); gboolean cap_ok = TRUE; /* check if enough free space is available on disk*/ if(!DiskSupervisor(&all_data)) { cap_ok = FALSE; } else { /*start disk check timed callback (every 10 sec)*/ if (!global->disk_timer_id) global->disk_timer_id=g_timeout_add(10*1000, FreeDiskCheck_timer, &all_data); /*start IO thread*/ if( __THREAD_CREATE(&all_data.IO_thread, IO_loop, (void *) &all_data)) { g_printerr("IO thread creation failed\n"); cap_ok = FALSE; } else if (global->Capture_time) { /*sets the timer function*/ g_timeout_add(global->Capture_time*1000,timer_callback,&all_data); } } if(!cap_ok) { g_printerr("ERROR: couldn't start video capture\n"); if(!global->no_display) { //g_signal_handlers_block_by_func(GTK_TOGGLE_BUTTON(gwidget->CapVidButt), G_CALLBACK (capture_vid), all_data); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(gwidget->CapVidButt), FALSE); gtk_button_set_label(GTK_BUTTON(gwidget->CapVidButt),_("Cap. Video")); //g_signal_handlers_unblock_by_func(GTK_TOGGLE_BUTTON(gwidget->CapVidButt), G_CALLBACK (capture_vid), all_data); } } else if(!global->no_display) { /*disabling sound and video compression controls*/ set_sensitive_vid_contrls(FALSE, global->Sound_enable, gwidget); char *message = g_strjoin(" ", _("capturing video to"), videoIn->VidFName, NULL); gtk_statusbar_pop (GTK_STATUSBAR(gwidget->status_bar), gwidget->status_warning_id); gtk_statusbar_push (GTK_STATUSBAR(gwidget->status_bar), gwidget->status_warning_id, message); g_free(message); } } if (global->FpsCount>0) { /*sets the Fps counter timer function every 2 sec*/ global->timer_id = g_timeout_add(2*1000,FpsCount_callback,&all_data); } }/*end of control_only exclusion*/ /* * Set the unix signal handling up. * First create a pipe. */ if(pipe(signal_pipe)) { perror("pipe"); exit(1); } /* * put the write end of the pipe into nonblocking mode, * need to read the flags first, otherwise we would clear other flags too. */ fd_flags = fcntl(signal_pipe[1], F_GETFL); if(fd_flags == -1) { perror("read descriptor flags"); } if(fcntl(signal_pipe[1], F_SETFL, fd_flags | O_NONBLOCK) == -1) { perror("write descriptor flags"); } /* Install the unix signal handler pipe_signals for the signals of interest */ signal(SIGINT, pipe_signals); signal(SIGUSR1, pipe_signals); /* convert the reading end of the pipe into a GIOChannel */ g_signal_in = g_io_channel_unix_new(signal_pipe[0]); /* * we only read raw binary data from the pipe, * therefore clear any encoding on the channel */ g_io_channel_set_encoding(g_signal_in, NULL, &error); if(error != NULL) { /* handle potential errors */ fprintf(stderr, "g_io_channel_set_encoding failed %s\n", error->message); } /* put the reading end also into non-blocking mode */ g_io_channel_set_flags(g_signal_in, g_io_channel_get_flags(g_signal_in) | G_IO_FLAG_NONBLOCK, &error); if(error != NULL) { /* tread errors */ fprintf(stderr, "g_io_set_flags failed %s\n", error->message); } /* register the reading end with the event loop */ g_io_add_watch(g_signal_in, G_IO_IN | G_IO_PRI, deliver_signal, &all_data); /* The last thing to get called (gtk loop)*/ //gdk_threads_enter(); gtk_main(); //gdk_threads_leave(); //closing portaudio if(!control_only) { g_print("Closing portaudio ..."); if (Pa_Terminate() != paNoError) g_print("Error\n"); else g_print("OK\n"); } g_print("Closing GTK... OK\n"); return 0; } guvcview-src-1.7.1/src/snd_devices.c0000664000175000017500000000670612173235416016426 0ustar paulopaulo/*******************************************************************************# # guvcview http://guvcview.sourceforge.net # # # # Paulo Assis # # # # 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # # ********************************************************************************/ #include #include #include #include "port_audio.h" #include "pulse_audio.h" #include "sound.h" #include "guvcview.h" #include "callbacks.h" #include "snd_devices.h" GtkWidget * list_snd_devices(struct GLOBAL *global) { int i = 0; switch(global->Sound_API) { #ifdef PULSEAUDIO case PULSE: pulse_list_snd_devices(global); break; #endif default: case PORT: portaudio_list_snd_devices(global); break; } /*sound device combo box*/ GtkWidget *SndDevice = gtk_combo_box_text_new (); for(i=0; i < global->Sound_numInputDev; i++) { gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(SndDevice),global->Sound_IndexDev[i].description); } return (SndDevice); } void update_snd_devices(struct ALL_DATA *all_data) { struct GLOBAL *global = all_data->global; struct GWIDGET *gwidget = all_data->gwidget; int i = 0; switch(global->Sound_API) { #ifdef PULSEAUDIO case PULSE: pulse_list_snd_devices(global); break; #endif default: case PORT: portaudio_list_snd_devices(global); break; } /*disable fps combobox signals*/ g_signal_handlers_block_by_func(GTK_COMBO_BOX_TEXT(gwidget->SndDevice), G_CALLBACK (SndDevice_changed), all_data); /* clear out the old device list... */ GtkListStore *store = GTK_LIST_STORE(gtk_combo_box_get_model (GTK_COMBO_BOX(gwidget->SndDevice))); gtk_list_store_clear(store); for(i=0; i < global->Sound_numInputDev; i++) { gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(gwidget->SndDevice), global->Sound_IndexDev[i].description); } /*set default device in combo*/ global->Sound_UseDev = global->Sound_DefDev; gtk_combo_box_set_active(GTK_COMBO_BOX(gwidget->SndDevice), global->Sound_UseDev); /*enable fps combobox signals*/ g_signal_handlers_unblock_by_func(GTK_COMBO_BOX_TEXT(gwidget->SndDevice), G_CALLBACK (SndDevice_changed), all_data); } guvcview-src-1.7.1/src/huffman.c0000664000175000017500000003165512173235416015565 0ustar paulopaulo/*******************************************************************************# # guvcview http://guvcview.sourceforge.net # # # # Paulo Assis # # # # 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # # ********************************************************************************/ /*******************************************************************************# # # # entropy huffman encoder for Jpeg encoder # # # # Adapted for linux, Paulo Assis, 2007 # ********************************************************************************/ #include "jpgenc.h" #include "huffman.h" #include "defs.h" #define PUTBITS \ { \ bits_in_next_word = (INT16) (jpeg_encoder_structure->bitindex + numbits - 32); \ if (bits_in_next_word < 0) \ { \ jpeg_encoder_structure->lcode = (jpeg_encoder_structure->lcode << numbits) | data; \ jpeg_encoder_structure->bitindex += numbits; \ } \ else \ { \ jpeg_encoder_structure->lcode = (jpeg_encoder_structure->lcode << (32 - jpeg_encoder_structure->bitindex)) | (data >> bits_in_next_word); \ if ((*output_ptr++ = (UINT8)(jpeg_encoder_structure->lcode >> 24)) == 0xff) \ *output_ptr++ = 0; \ if ((*output_ptr++ = (UINT8)(jpeg_encoder_structure->lcode >> 16)) == 0xff) \ *output_ptr++ = 0; \ if ((*output_ptr++ = (UINT8)(jpeg_encoder_structure->lcode >> 8)) == 0xff) \ *output_ptr++ = 0; \ if ((*output_ptr++ = (UINT8) jpeg_encoder_structure->lcode) == 0xff) \ *output_ptr++ = 0; \ jpeg_encoder_structure->lcode = data; \ jpeg_encoder_structure->bitindex = bits_in_next_word; \ } \ } static UINT16 luminance_dc_code_table[12] = { 0x0000, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x000E, 0x001E, 0x003E, 0x007E, 0x00FE, 0x01FE }; static UINT16 luminance_dc_size_table [12] = { 0x0002, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009 }; static UINT16 chrominance_dc_code_table [12] = { 0x0000, 0x0001, 0x0002, 0x0006, 0x000E, 0x001E, 0x003E, 0x007E, 0x00FE, 0x01FE, 0x03FE, 0x07FE }; static UINT16 chrominance_dc_size_table [12] = { 0x0002, 0x0002, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x000A, 0x000B }; static UINT16 luminance_ac_code_table [162] = { 0x000A, 0x0000, 0x0001, 0x0004, 0x000B, 0x001A, 0x0078, 0x00F8, 0x03F6, 0xFF82, 0xFF83, 0x000C, 0x001B, 0x0079, 0x01F6, 0x07F6, 0xFF84, 0xFF85, 0xFF86, 0xFF87, 0xFF88, 0x001C, 0x00F9, 0x03F7, 0x0FF4, 0xFF89, 0xFF8A, 0xFF8b, 0xFF8C, 0xFF8D, 0xFF8E, 0x003A, 0x01F7, 0x0FF5, 0xFF8F, 0xFF90, 0xFF91, 0xFF92, 0xFF93, 0xFF94, 0xFF95, 0x003B, 0x03F8, 0xFF96, 0xFF97, 0xFF98, 0xFF99, 0xFF9A, 0xFF9B, 0xFF9C, 0xFF9D, 0x007A, 0x07F7, 0xFF9E, 0xFF9F, 0xFFA0, 0xFFA1, 0xFFA2, 0xFFA3, 0xFFA4, 0xFFA5, 0x007B, 0x0FF6, 0xFFA6, 0xFFA7, 0xFFA8, 0xFFA9, 0xFFAA, 0xFFAB, 0xFFAC, 0xFFAD, 0x00FA, 0x0FF7, 0xFFAE, 0xFFAF, 0xFFB0, 0xFFB1, 0xFFB2, 0xFFB3, 0xFFB4, 0xFFB5, 0x01F8, 0x7FC0, 0xFFB6, 0xFFB7, 0xFFB8, 0xFFB9, 0xFFBA, 0xFFBB, 0xFFBC, 0xFFBD, 0x01F9, 0xFFBE, 0xFFBF, 0xFFC0, 0xFFC1, 0xFFC2, 0xFFC3, 0xFFC4, 0xFFC5, 0xFFC6, 0x01FA, 0xFFC7, 0xFFC8, 0xFFC9, 0xFFCA, 0xFFCB, 0xFFCC, 0xFFCD, 0xFFCE, 0xFFCF, 0x03F9, 0xFFD0, 0xFFD1, 0xFFD2, 0xFFD3, 0xFFD4, 0xFFD5, 0xFFD6, 0xFFD7, 0xFFD8, 0x03FA, 0xFFD9, 0xFFDA, 0xFFDB, 0xFFDC, 0xFFDD, 0xFFDE, 0xFFDF, 0xFFE0, 0xFFE1, 0x07F8, 0xFFE2, 0xFFE3, 0xFFE4, 0xFFE5, 0xFFE6, 0xFFE7, 0xFFE8, 0xFFE9, 0xFFEA, 0xFFEB, 0xFFEC, 0xFFED, 0xFFEE, 0xFFEF, 0xFFF0, 0xFFF1, 0xFFF2, 0xFFF3, 0xFFF4, 0xFFF5, 0xFFF6, 0xFFF7, 0xFFF8, 0xFFF9, 0xFFFA, 0xFFFB, 0xFFFC, 0xFFFD, 0xFFFE, 0x07F9 }; static UINT16 luminance_ac_size_table [162] = { 0x0004, 0x0002, 0x0002, 0x0003, 0x0004, 0x0005, 0x0007, 0x0008, 0x000A, 0x0010, 0x0010, 0x0004, 0x0005, 0x0007, 0x0009, 0x000B, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0005, 0x0008, 0x000A, 0x000C, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0006, 0x0009, 0x000C, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0006, 0x000A, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0007, 0x000B, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0007, 0x000C, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0008, 0x000C, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0009, 0x000F, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0009, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0009, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x000A, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x000A, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x000B, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x000B }; static UINT16 chrominance_ac_code_table [162] = { 0x0000, 0x0001, 0x0004, 0x000A, 0x0018, 0x0019, 0x0038, 0x0078, 0x01F4, 0x03F6, 0x0FF4, 0x000B, 0x0039, 0x00F6, 0x01F5, 0x07F6, 0x0FF5, 0xFF88, 0xFF89, 0xFF8A, 0xFF8B, 0x001A, 0x00F7, 0x03F7, 0x0FF6, 0x7FC2, 0xFF8C, 0xFF8D, 0xFF8E, 0xFF8F, 0xFF90, 0x001B, 0x00F8, 0x03F8, 0x0FF7, 0xFF91, 0xFF92, 0xFF93, 0xFF94, 0xFF95, 0xFF96, 0x003A, 0x01F6, 0xFF97, 0xFF98, 0xFF99, 0xFF9A, 0xFF9B, 0xFF9C, 0xFF9D, 0xFF9E, 0x003B, 0x03F9, 0xFF9F, 0xFFA0, 0xFFA1, 0xFFA2, 0xFFA3, 0xFFA4, 0xFFA5, 0xFFA6, 0x0079, 0x07F7, 0xFFA7, 0xFFA8, 0xFFA9, 0xFFAA, 0xFFAB, 0xFFAC, 0xFFAD, 0xFFAE, 0x007A, 0x07F8, 0xFFAF, 0xFFB0, 0xFFB1, 0xFFB2, 0xFFB3, 0xFFB4, 0xFFB5, 0xFFB6, 0x00F9, 0xFFB7, 0xFFB8, 0xFFB9, 0xFFBA, 0xFFBB, 0xFFBC, 0xFFBD, 0xFFBE, 0xFFBF, 0x01F7, 0xFFC0, 0xFFC1, 0xFFC2, 0xFFC3, 0xFFC4, 0xFFC5, 0xFFC6, 0xFFC7, 0xFFC8, 0x01F8, 0xFFC9, 0xFFCA, 0xFFCB, 0xFFCC, 0xFFCD, 0xFFCE, 0xFFCF, 0xFFD0, 0xFFD1, 0x01F9, 0xFFD2, 0xFFD3, 0xFFD4, 0xFFD5, 0xFFD6, 0xFFD7, 0xFFD8, 0xFFD9, 0xFFDA, 0x01FA, 0xFFDB, 0xFFDC, 0xFFDD, 0xFFDE, 0xFFDF, 0xFFE0, 0xFFE1, 0xFFE2, 0xFFE3, 0x07F9, 0xFFE4, 0xFFE5, 0xFFE6, 0xFFE7, 0xFFE8, 0xFFE9, 0xFFEA, 0xFFEb, 0xFFEC, 0x3FE0, 0xFFED, 0xFFEE, 0xFFEF, 0xFFF0, 0xFFF1, 0xFFF2, 0xFFF3, 0xFFF4, 0xFFF5, 0x7FC3, 0xFFF6, 0xFFF7, 0xFFF8, 0xFFF9, 0xFFFA, 0xFFFB, 0xFFFC, 0xFFFD, 0xFFFE, 0x03FA }; static UINT16 chrominance_ac_size_table [162] = { 0x0002, 0x0002, 0x0003, 0x0004, 0x0005, 0x0005, 0x0006, 0x0007, 0x0009, 0x000A, 0x000C, 0x0004, 0x0006, 0x0008, 0x0009, 0x000B, 0x000C, 0x0010, 0x0010, 0x0010, 0x0010, 0x0005, 0x0008, 0x000A, 0x000C, 0x000F, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0005, 0x0008, 0x000A, 0x000C, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0006, 0x0009, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0006, 0x000A, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0007, 0x000B, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0007, 0x000B, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0008, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0009, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0009, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0009, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0009, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x000B, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x000E, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x000F, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x000A }; static UINT8 bitsize [256] =/* bit size from 0 to 255 */ { 0, 1, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8 }; UINT8* huffman (struct JPEG_ENCODER_STRUCTURE * jpeg_encoder_structure, UINT16 component, UINT8 *output_ptr) { UINT16 i; UINT16 *DcCodeTable, *DcSizeTable, *AcCodeTable, *AcSizeTable; INT16 *Temp_Ptr, Coeff, LastDc; UINT16 AbsCoeff, HuffCode, HuffSize, RunLength=0, DataSize=0, index; INT16 bits_in_next_word; UINT16 numbits; UINT32 data; Temp_Ptr = jpeg_encoder_structure->Temp; Coeff = *Temp_Ptr++;/* Coeff = DC */ /* code DC - Temp[0] */ if (component == 1)/* luminance - Y */ { DcCodeTable = luminance_dc_code_table; DcSizeTable = luminance_dc_size_table; AcCodeTable = luminance_ac_code_table; AcSizeTable = luminance_ac_size_table; LastDc = jpeg_encoder_structure->ldc1; jpeg_encoder_structure->ldc1 = Coeff; } else /* Chrominance - U V */ { DcCodeTable = chrominance_dc_code_table; DcSizeTable = chrominance_dc_size_table; AcCodeTable = chrominance_ac_code_table; AcSizeTable = chrominance_ac_size_table; if (component == 2) /* Chrominance - U */ { LastDc = jpeg_encoder_structure->ldc2; jpeg_encoder_structure->ldc2 = Coeff; } else/* Chrominance - V */ { LastDc = jpeg_encoder_structure->ldc3; jpeg_encoder_structure->ldc3 = Coeff; } } Coeff = Coeff - LastDc; /* DC - LastDC */ AbsCoeff = (Coeff < 0) ? -(Coeff--) : Coeff; /*calculate data size*/ while (AbsCoeff != 0) { AbsCoeff >>= 1; DataSize++; } HuffCode = DcCodeTable [DataSize]; HuffSize = DcSizeTable [DataSize]; Coeff &= (1 << DataSize) - 1; data = (HuffCode << DataSize) | Coeff; numbits = HuffSize + DataSize; PUTBITS /* code AC */ for (i=63; i>0; i--) { if ((Coeff = *Temp_Ptr++) != 0) { while (RunLength > 15) { RunLength -= 16; data = AcCodeTable [161]; /* ZRL 0xF0 ( 16 - 0) */ numbits = AcSizeTable [161];/* ZRL */ PUTBITS } AbsCoeff = (Coeff < 0) ? -(Coeff--) : Coeff; if (AbsCoeff >> 8 == 0) /* Size <= 8 bits */ DataSize = bitsize [AbsCoeff]; else /* 16 => Size => 8 */ DataSize = bitsize [AbsCoeff >> 8] + 8; index = RunLength * 10 + DataSize; HuffCode = AcCodeTable [index]; HuffSize = AcSizeTable [index]; Coeff &= (1 << DataSize) - 1; data = (HuffCode << DataSize) | Coeff; numbits = HuffSize + DataSize; PUTBITS RunLength = 0; } else RunLength++;/* Add while Zero */ } if (RunLength != 0) { data = AcCodeTable [0]; /* EOB - 0x00 end of block */ numbits = AcSizeTable [0];/* EOB */ PUTBITS } return output_ptr; } /* For bit Stuffing and EOI marker */ UINT8* close_bitstream (struct JPEG_ENCODER_STRUCTURE * jpeg_encoder_structure, UINT8 *output_ptr) { UINT16 i, count; UINT8 *ptr; if (jpeg_encoder_structure->bitindex > 0) { jpeg_encoder_structure->lcode <<= (32 - jpeg_encoder_structure->bitindex); count = (jpeg_encoder_structure->bitindex + 7) >> 3; ptr = (UINT8 *) &jpeg_encoder_structure->lcode + 3; for (i=count; i>0; i--) { if ((*output_ptr++ = *ptr--) == 0xff) *output_ptr++ = 0; } } /* End of image marker (EOI) */ *output_ptr++ = 0xFF; *output_ptr++ = 0xD9; return output_ptr; } guvcview-src-1.7.1/src/v4l2_formats.h0000664000175000017500000001726512173235416016471 0ustar paulopaulo/*******************************************************************************# # guvcview http://guvcview.sourceforge.net # # # # Paulo Assis # # # # 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # # ********************************************************************************/ #ifndef V4L2_FORMATS_H #define V4L2_FORMATS_H #include /* (Patch) define all supported formats - already done in videodev2.h*/ #ifndef V4L2_PIX_FMT_MJPEG #define V4L2_PIX_FMT_MJPEG v4l2_fourcc('M', 'J', 'P', 'G') /* MJPEG stream */ #endif #ifndef V4L2_PIX_FMT_JPEG #define V4L2_PIX_FMT_JPEG v4l2_fourcc('J', 'P', 'E', 'G') /* JPEG stream */ #endif #ifndef V4L2_PIX_FMT_YUYV #define V4L2_PIX_FMT_YUYV v4l2_fourcc('Y','U','Y','V') /* YUV 4:2:2 */ #endif #ifndef V4L2_PIX_FMT_YVYU #define V4L2_PIX_FMT_YVYU v4l2_fourcc('Y','V','Y','U') /* YUV 4:2:2 */ #endif #ifndef V4L2_PIX_FMT_UYVY #define V4L2_PIX_FMT_UYVY v4l2_fourcc('U','Y','V','Y') /* YUV 4:2:2 */ #endif #ifndef V4L2_PIX_FMT_YYUV #define V4L2_PIX_FMT_YYUV v4l2_fourcc('Y','Y','U','V') /* YUV 4:2:2 */ #endif #ifndef V4L2_PIX_FMT_YUV420 #define V4L2_PIX_FMT_YUV420 v4l2_fourcc('Y','U','1','2') /* YUV 4:2:0 Planar */ #endif #ifndef V4L2_PIX_FMT_YVU420 #define V4L2_PIX_FMT_YVU420 v4l2_fourcc('Y','V','1','2') /* YUV 4:2:0 Planar */ #endif #ifndef V4L2_PIX_FMT_NV12 #define V4L2_PIX_FMT_NV12 v4l2_fourcc('N','V','1','2') /* YUV 4:2:0 Planar (u/v) interleaved */ #endif #ifndef V4L2_PIX_FMT_NV21 #define V4L2_PIX_FMT_NV21 v4l2_fourcc('N','V','2','1') /* YUV 4:2:0 Planar (v/u) interleaved */ #endif #ifndef V4L2_PIX_FMT_NV16 #define V4L2_PIX_FMT_NV16 v4l2_fourcc('N','V','1','6') /* YUV 4:2:2 Planar (u/v) interleaved */ #endif #ifndef V4L2_PIX_FMT_NV61 #define V4L2_PIX_FMT_NV61 v4l2_fourcc('N','V','6','1') /* YUV 4:2:2 Planar (v/u) interleaved */ #endif #ifndef V4L2_PIX_FMT_Y41P #define V4L2_PIX_FMT_Y41P v4l2_fourcc('Y','4','1','P') /* YUV 4:1:1 */ #endif #ifndef V4L2_PIX_FMT_GREY #define V4L2_PIX_FMT_GREY v4l2_fourcc('G','R','E','Y') /* Y only */ #endif #ifndef V4L2_PIX_FMT_Y10BPACK #define V4L2_PIX_FMT_Y10BPACK v4l2_fourcc('Y','1','0','B') /* Y only (10 bit bit-packed array) */ #endif #ifndef V4L2_PIX_FMT_Y16 #define V4L2_PIX_FMT_Y16 v4l2_fourcc('Y','1','6',' ') /* Y only (16 bit) */ #endif #ifndef V4L2_PIX_FMT_SPCA501 #define V4L2_PIX_FMT_SPCA501 v4l2_fourcc('S','5','0','1') /* YUYV - by line */ #endif #ifndef V4L2_PIX_FMT_SPCA505 #define V4L2_PIX_FMT_SPCA505 v4l2_fourcc('S','5','0','5') /* YYUV - by line */ #endif #ifndef V4L2_PIX_FMT_SPCA508 #define V4L2_PIX_FMT_SPCA508 v4l2_fourcc('S','5','0','8') /* YUVY - by line */ #endif #ifndef V4L2_PIX_FMT_SGBRG8 #define V4L2_PIX_FMT_SGBRG8 v4l2_fourcc('G', 'B', 'R', 'G') /* GBGB.. RGRG.. */ #endif #ifndef V4L2_PIX_FMT_SGRBG8 #define V4L2_PIX_FMT_SGRBG8 v4l2_fourcc('G', 'R', 'B', 'G') /* GRGR.. BGBG.. */ #endif #ifndef V4L2_PIX_FMT_SBGGR8 #define V4L2_PIX_FMT_SBGGR8 v4l2_fourcc('B', 'A', '8', '1') /* BGBG.. GRGR.. */ #endif #ifndef V4L2_PIX_FMT_SRGGB8 #define V4L2_PIX_FMT_SRGGB8 v4l2_fourcc('R', 'G', 'G', 'B') /* RGRG.. GBGB.. */ #endif #ifndef V4L2_PIX_FMT_BGR24 #define V4L2_PIX_FMT_BGR24 v4l2_fourcc('B', 'G', 'R', '3') /* 24 BGR-8-8-8 */ #endif #ifndef V4L2_PIX_FMT_RGB24 #define V4L2_PIX_FMT_RGB24 v4l2_fourcc('R', 'G', 'B', '3') /* 24 RGB-8-8-8 */ #endif #ifndef V4L2_PIX_FMT_H264 #define V4L2_PIX_FMT_H264 v4l2_fourcc('H', '2', '6', '4') /* H264 with start codes */ #endif typedef struct _SupFormats { int format; //v4l2 software(guvcview) supported format char mode[5]; //mode (fourcc - lower case) int hardware; //hardware supported (1 or 0) //void *decoder; //function to decode format into YUYV } SupFormats; typedef struct _VidCap { int width; //width int height; //height int *framerate_num; //list of numerator values - should be 1 in almost all cases int *framerate_denom; //list of denominator values - gives fps int numb_frates; //number of frame rates (numerator and denominator lists size) } VidCap; typedef struct _VidFormats { int format; //v4l2 pixel format char fourcc[5]; //corresponding fourcc (mode) int numb_res; //available number of resolutions for format (VidCap list size) VidCap *listVidCap; //list of VidCap for format } VidFormats; typedef struct _LFormats { VidFormats *listVidFormats; //list of VidFormats int numb_formats; //total number of VidFormats (VidFormats list size) int current_format; //index of current format in listVidFormats } LFormats; /* check if format is supported by guvcview * args: * pixfmt: V4L2 pixel format * return index from supported devices list * or -1 if not supported */ int check_PixFormat(int pixfmt); /* check if format is supported by hardware * args: * pixfmt: V4L2 pixel format * return index from supported devices list * or -1 if not supported */ int check_SupPixFormat(int pixfmt); /* set hardware flag for v4l2 pix format * args: * pixfmt: V4L2 pixel format * return index from supported devices list * or -1 if not supported */ int set_SupPixFormat(int pixfmt); /* convert v4l2 pix format to mode (Fourcc) * args: * pixfmt: V4L2 pixel format * mode: fourcc string (lower case) * returns 1 on success * and -1 on failure (not supported) */ int get_PixMode(int pixfmt, char *mode); /* converts mode (fourcc) to v4l2 pix format * args: * mode: fourcc string (lower case) * returns v4l2 pix format * defaults to MJPG if mode not supported */ int get_PixFormat(char *mode); /* enumerate frames (formats, sizes and fps) * args: * width: current selected width * height: current selected height * fd: device file descriptor * * returns: pointer to LFormats struct containing list of available frame formats */ LFormats *enum_frame_formats( int *width, int *height, int fd); /* get Format index from available format list * args: * listFormats: available video format list * format: v4l2 pix format * * returns format list index */ int get_FormatIndex( LFormats *listFormats, int format); /* clean video formats list * args: * listFormats: struct containing list of available video formats * * returns: void */ void freeFormats(LFormats *listFormats); #endif guvcview-src-1.7.1/src/ms_time.c0000664000175000017500000000643412173235416015573 0ustar paulopaulo/*******************************************************************************# # guvcview http://guvcview.sourceforge.net # # # # Paulo Assis # # # # 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # # ********************************************************************************/ #include #include #include #include #include "ms_time.h" /*------------------------------ get time ------------------------------------*/ /*in miliseconds*/ DWORD ms_time (void) { GTimeVal *tod; tod = g_new0(GTimeVal, 1); g_get_current_time(tod); DWORD mst = (DWORD) tod->tv_sec * 1000 + (DWORD) tod->tv_usec / 1000; g_free(tod); return (mst); } /*in microseconds*/ ULLONG us_time(void) { GTimeVal *tod; tod = g_new0(GTimeVal, 1); g_get_current_time(tod); ULLONG ust = (DWORD) tod->tv_sec * G_USEC_PER_SEC + (DWORD) tod->tv_usec; g_free(tod); return (ust); } /*REAL TIME CLOCK*/ /*in nanoseconds*/ ULLONG ns_time (void) { static struct timespec ts; clock_gettime(CLOCK_REALTIME, &ts); return ((ULLONG) ts.tv_sec * G_NSEC_PER_SEC + (ULLONG) ts.tv_nsec); } /*MONOTONIC CLOCK*/ /*in nanosec*/ UINT64 ns_time_monotonic() { static struct timespec ts; clock_gettime(CLOCK_MONOTONIC, &ts); return ((UINT64) ts.tv_sec * G_NSEC_PER_SEC + (ULLONG) ts.tv_nsec); } //sleep for given time in ms void sleep_ms(int ms_time) { gulong sleep_us = ms_time *1000; /*convert to microseconds*/ g_usleep( sleep_us );/*sleep for sleep_ms ms*/ } /*wait on cond by sleeping for n_loops of sleep_ms ms (test var==val every loop)*/ /*return remaining number of loops (if 0 then a stall occurred) */ int wait_ms(gboolean* var, gboolean val, __MUTEX_TYPE *mutex, int ms_time, int n_loops) { int n=n_loops; __LOCK_MUTEX(mutex); while( (*var!=val) && ( n > 0 ) ) /*wait at max (n_loops*sleep_ms) ms */ { __UNLOCK_MUTEX(mutex); n--; sleep_ms( ms_time );/*sleep for sleep_ms ms*/ __LOCK_MUTEX(mutex); }; __UNLOCK_MUTEX(mutex); return (n); } guvcview-src-1.7.1/src/acodecs.c0000775000175000017500000003510712173235416015541 0ustar paulopaulo/*******************************************************************************# # guvcview http://guvcview.sourceforge.net # # # # Paulo Assis # # # # 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # # ********************************************************************************/ #include #include "acodecs.h" #include "guvcview.h" #include "picture.h" #include "colorspaces.h" #include "create_video.h" #include "sound.h" /* support for internationalization - i18n */ #include #include #define __FMUTEX &global->file_mutex /* AAC object types index: MAIN = 1; LOW = 2; SSR = 3; LTP = 4*/ static int AAC_OBJ_TYPE[5] = { FF_PROFILE_UNKNOWN, FF_PROFILE_AAC_MAIN, FF_PROFILE_AAC_LOW, FF_PROFILE_AAC_SSR, FF_PROFILE_AAC_LTP }; /*-1 = reserved; 0 = freq. is writen explictly (increases header by 24 bits)*/ static int AAC_SAMP_FREQ[16] = { 96000, 88200, 64000, 48000, 44100, 32000, 24000, 22050, 16000, 12000, 11025, 8000, 7350, -1, -1, 0}; /*NORMAL AAC HEADER*/ /*2 bytes: object type index(5 bits) + sample frequency index(4bits) + channels(4 bits) + flags(3 bit) */ /*default = MAIN(1)+44100(4)+stereo(2)+flags(0) = 0x0A10*/ static BYTE AAC_ESDS[2] = {0x0A,0x10}; /* if samprate index == 15 AAC_ESDS[5]: * object type index(5 bits) + sample frequency index(4bits) + samprate(24bits) + channels(4 bits) + flags(3 bit) */ static acodecs_data listSupACodecs[] = //list of software supported formats { { .avcodec = FALSE, .valid = TRUE, .bits = 16, .avi_4cc = WAVE_FORMAT_PCM, .mkv_codec = "A_PCM/INT/LIT", .description = N_("PCM - uncompressed (16 bit)"), .bit_rate = 0, .codec_id = AV_CODEC_ID_PCM_S16LE, .codec_name = "pcm_s16le", .sample_format = AV_SAMPLE_FMT_S16, .profile = FF_PROFILE_UNKNOWN, .mkv_codpriv = NULL, .codpriv_size = 0, .flags = 0 }, { .avcodec = TRUE, .valid = TRUE, .bits = 0, .monotonic_pts= 1, .avi_4cc = WAVE_FORMAT_MPEG12, .mkv_codec = "A_MPEG/L2", .description = N_("MPEG2 - (lavc)"), .bit_rate = 160000, .codec_id = AV_CODEC_ID_MP2, .codec_name = "mp2", .sample_format = AV_SAMPLE_FMT_S16, .profile = FF_PROFILE_UNKNOWN, .mkv_codpriv = NULL, .codpriv_size = 0, .flags = 0 }, { .avcodec = TRUE, .valid = TRUE, .bits = 0, .monotonic_pts= 1, .avi_4cc = WAVE_FORMAT_MP3, .mkv_codec = "A_MPEG/L3", .description = N_("MP3 - (lavc)"), .bit_rate = 160000, .codec_id = AV_CODEC_ID_MP3, .codec_name = "mp3", .sample_format = AV_SAMPLE_FMT_S16, .profile = FF_PROFILE_UNKNOWN, .mkv_codpriv = NULL, .codpriv_size = 0, .flags = 0 }, { .avcodec = TRUE, .valid = TRUE, .bits = 0, .monotonic_pts= 1, .avi_4cc = WAVE_FORMAT_AC3, .mkv_codec = "A_AC3", .description = N_("Dolby AC3 - (lavc)"), .bit_rate = 160000, .codec_id = AV_CODEC_ID_AC3, .codec_name = "ac3", .sample_format = AV_SAMPLE_FMT_FLT, .profile = FF_PROFILE_UNKNOWN, .mkv_codpriv = NULL, .codpriv_size = 0, .flags = 0 }, { .avcodec = TRUE, .valid = TRUE, .bits = 16, .monotonic_pts= 1, .avi_4cc = WAVE_FORMAT_AAC, .mkv_codec = "A_AAC", .description = N_("ACC Low - (faac)"), .bit_rate = 64000, .codec_id = AV_CODEC_ID_AAC, .codec_name = "aac", .sample_format = AV_SAMPLE_FMT_S16, .profile = FF_PROFILE_AAC_LOW, .mkv_codpriv = AAC_ESDS, .codpriv_size = 2, .flags = 0 }, { .avcodec = TRUE, .valid = TRUE, .bits = 16, .monotonic_pts= 1, .avi_4cc = OGG_FORMAT_VORBIS, .mkv_codec = "A_VORBIS", .description = N_("Vorbis"), .bit_rate = 64000, .codec_id = AV_CODEC_ID_VORBIS, .codec_name = "libvorbis", .sample_format = AV_SAMPLE_FMT_S16, .profile = FF_PROFILE_UNKNOWN, .mkv_codpriv = NULL, .codpriv_size = 0, .flags = 0 } }; static int get_aac_obj_ind(int profile) { int i = 0; for (i=0; i<4; i++) if(AAC_OBJ_TYPE[i] == profile) break; return i; } static int get_aac_samp_ind(int samprate) { int i = 0; for (i=0; i<13; i++) if(AAC_SAMP_FREQ[i] == samprate) break; if (i>12) { g_print("WARNING: invalid sample rate for AAC encoding\n"); g_print("valid(96000, 88200, 64000, 48000, 44100, 32000, 24000, 22050, 16000, 12000, 11025, 8000, 7350)\n"); i=4; /*default 44100*/ } return i; } static int get_real_index (int codec_ind) { int i = 0; int ind = -1; for (i=0;i= MAX_ACODECS || !listSupACodecs[real_index].valid ) return -1; //error: real index is not valid int i = 0; int ind = -1; for (i=0;i<=real_index; i++) { if(listSupACodecs[i].valid) ind++; } return (ind); } /** returns the real codec array index*/ int get_acodec_index(int codec_id) { int i = 0; for(i=0; i= 0 && real_index < MAX_ACODECS) return (listSupACodecs[real_index].avi_4cc); else { fprintf(stderr, "ACODEC: (4cc) bad codec index\n"); return 0; } } int get_aud_bits(int codec_ind) { int real_index = get_real_index (codec_ind); if(real_index >= 0 && real_index < MAX_ACODECS) return (listSupACodecs[real_index].bits); else { fprintf(stderr, "ACODEC: (bits) bad codec index\n"); return 0; } } int get_aud_bit_rate(int codec_ind) { int real_index = get_real_index (codec_ind); if(real_index >= 0 && real_index < MAX_ACODECS) return (listSupACodecs[real_index].bit_rate); else { fprintf(stderr, "ACODEC: (bit_rate) bad codec index\n"); return 0; } } int get_ind_by4cc(WORD avi_4cc) { int i = 0; int ind = -1; for (i=0;i= 0 && real_index < MAX_ACODECS) return (listSupACodecs[real_index].description); else { fprintf(stderr, "ACODEC: (desc4cc) bad codec index\n"); return NULL; } } const char *get_mkvACodec(int codec_ind) { int real_index = get_real_index (codec_ind); if(real_index >= 0 && real_index < MAX_ACODECS) return (listSupACodecs[real_index].mkv_codec); else { fprintf(stderr, "ACODEC: (mkvACodec) bad codec index\n"); return NULL; } } void *get_mkvACodecPriv(int codec_ind) { int real_index = get_real_index (codec_ind); if(real_index >= 0 && real_index < MAX_ACODECS) return ((void *) listSupACodecs[real_index].mkv_codpriv); else { fprintf(stderr, "ACODEC: (mkvACodecPriv) bad codec index\n"); return NULL; } } int set_mkvACodecPriv(int codec_ind, int samprate, int channels, struct lavcAData* data) { int real_index = get_real_index (codec_ind); if(real_index < 0 || real_index >= MAX_ACODECS) { fprintf(stderr, "ACODEC: (set mkvCodecPriv) bad codec index\n"); return 0; } if (listSupACodecs[real_index].codec_id == AV_CODEC_ID_AAC) { int obj_type = get_aac_obj_ind(listSupACodecs[real_index].profile); int sampind = get_aac_samp_ind(samprate); AAC_ESDS[0] = (BYTE) ((obj_type & 0x1F) << 3 ) + ((sampind & 0x0F) >> 1); AAC_ESDS[1] = (BYTE) ((sampind & 0x0F) << 7 ) + ((channels & 0x0F) << 3); return listSupACodecs[real_index].codpriv_size; /*return size = 2 */ } else if(listSupACodecs[real_index].codec_id == AV_CODEC_ID_VORBIS) { //get the 3 first header packets uint8_t *header_start[3]; int header_len[3]; int first_header_size; first_header_size = 30; //theora = 42 if (avpriv_split_xiph_headers(data->codec_context->extradata, data->codec_context->extradata_size, first_header_size, header_start, header_len) < 0) { fprintf(stderr, "ACODEC: vorbis codec - Extradata corrupt.\n"); return -1; } //printf("Vorbis: header1: %i header2: %i header3:%i \n", header_len[0], header_len[1], header_len[2]); //get the allocation needed for headers size int header_lace_size[2]; header_lace_size[0]=0; header_lace_size[1]=0; int i; for (i = 0; i < header_len[0] / 255; i++) header_lace_size[0]++; header_lace_size[0]++; for (i = 0; i < header_len[1] / 255; i++) header_lace_size[1]++; header_lace_size[1]++; int priv_data_size = 1 + //number of packets -1 header_lace_size[0] + //first packet size header_lace_size[1] + //second packet size header_len[0] + //first packet header header_len[1] + //second packet header header_len[2]; //third packet header //should check and clean before allocating ?? data->priv_data = g_new0(BYTE, priv_data_size); //write header BYTE* tmp = data->priv_data; *tmp++ = 0x02; //number of packets -1 //size of head 1 for (i = 0; i < header_len[0] / 0xff; i++) *tmp++ = 0xff; *tmp++ = header_len[0] % 0xff; //size of head 2 for (i = 0; i < header_len[1] / 0xff; i++) *tmp++ = 0xff; *tmp++ = header_len[1] % 0xff; //add headers for(i=0; i<3; i++) { memcpy(tmp, header_start[i] , header_len[i]); tmp += header_len[i]; } listSupACodecs[real_index].mkv_codpriv = data->priv_data; listSupACodecs[real_index].codpriv_size = priv_data_size; return listSupACodecs[real_index].codpriv_size; } return 0; } int get_acodec_id(int codec_ind) { int real_index = get_real_index (codec_ind); if(real_index >= 0 && real_index < MAX_ACODECS) return (listSupACodecs[real_index].codec_id); else { fprintf(stderr, "ACODEC: (id) bad codec index\n"); return 0; } } gboolean isLavcACodec(int codec_ind) { int real_index = get_real_index (codec_ind); if(real_index >= 0 && real_index < MAX_ACODECS) return (listSupACodecs[real_index].avcodec); else { fprintf(stderr, "ACODEC: (isLavc) bad codec index\n"); return FALSE; } } int setAcodecVal() { AVCodec *codec; int ind = 0; int num_codecs = 0; for (ind=0;ind= 0 && real_index < MAX_ACODECS) return (listSupACodecs[real_index].valid); else { fprintf(stderr, "ACODEC: (isValid) bad codec index\n"); return FALSE; } } acodecs_data *get_aud_codec_defaults(int codec_ind) { int real_index = get_real_index (codec_ind); if(real_index >= 0 && real_index < MAX_ACODECS) return (&(listSupACodecs[real_index])); else { fprintf(stderr, "ACODEC: (defaults) bad codec index\n"); return NULL; } } static int write_audio_data(struct ALL_DATA *all_data, BYTE *buff, int size, QWORD a_ts) { struct VideoFormatData *videoF = all_data->videoF; struct GLOBAL *global = all_data->global; int ret =0; __LOCK_MUTEX( __FMUTEX ); switch (global->VidFormat) { case AVI_FORMAT: if(size > 0) ret = avi_write_packet(videoF->avi, 1, buff, size, videoF->adts, videoF->ablock_align, videoF->aflags); break; case WEBM_FORMAT: case MKV_FORMAT: videoF->apts = a_ts; if(size > 0) ret = mkv_write_packet(videoF->mkv, 1, buff, size, videoF->aduration, videoF->apts, videoF->aflags); //ret = write_audio_packet (buff, size, videoF); break; default: break; } __UNLOCK_MUTEX( __FMUTEX ); return (ret); } static int encode_lavc_audio ( struct ALL_DATA *all_data ) { struct paRecordData *pdata = all_data->pdata; struct VideoFormatData *videoF = all_data->videoF; int framesize = 0; int ret = 0; videoF->old_apts = videoF->apts; if(pdata->lavc_data) { if(pdata->lavc_data->codec_context->sample_fmt == AV_SAMPLE_FMT_FLT) framesize= encode_lavc_audio_frame (pdata->float_sndBuff, pdata->lavc_data, videoF); else framesize= encode_lavc_audio_frame (pdata->pcm_sndBuff, pdata->lavc_data, videoF); ret = write_audio_data (all_data, pdata->lavc_data->outbuf, framesize, pdata->audio_buff[pdata->br_ind][pdata->r_ind].time_stamp); } return (ret); } int compress_audio_frame(void *data) { struct ALL_DATA *all_data = (struct ALL_DATA *) data; struct GLOBAL *global = all_data->global; struct paRecordData *pdata = all_data->pdata; int ret = 0; switch (global->Sound_Format) { /*write audio chunk*/ case PA_FOURCC: { SampleConverter(pdata); /*convert from float sample to 16 bit PCM*/ ret = write_audio_data (all_data, (BYTE *) pdata->pcm_sndBuff, pdata->aud_numSamples*2, pdata->audio_buff[pdata->br_ind][pdata->r_ind].time_stamp); break; } default: { SampleConverter(pdata); ret = encode_lavc_audio (all_data); break; } } return (ret); } guvcview-src-1.7.1/src/file_io.c0000775000175000017500000002134112173235416015541 0ustar paulopaulo/*******************************************************************************# # guvcview http://guvcview.sourceforge.net # # # # Paulo Assis # # # # 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # # ********************************************************************************/ #include #include #include #include #include #include #include #include "file_io.h" /** * file io base functions **/ static int64_t io_tell(io_Writer* writer) { if(writer->fp == NULL) { fprintf(stderr, "IO: (tell) no file pointer associated with writer (mem only ?)\n"); return -1; } //flush the file buffer fflush(writer->fp); //return the file pointer position return ((int64_t) ftello64(writer->fp)); } /** flush a mem only writer(buf_writer) into a file writer */ int io_flush_buf_writer(io_Writer* file_writer, io_Writer* buf_writer) { int size = (int) (buf_writer->buf_ptr - buf_writer->buffer); io_write_buf(file_writer, buf_writer->buffer, size); buf_writer->buf_ptr = buf_writer->buffer; return size; } /* create a new writer for filename*/ io_Writer* io_create_writer(const char *filename, int max_size) { io_Writer* writer = g_new0(io_Writer, 1); if(writer == NULL) return NULL; if(max_size > 0) writer->buffer_size = max_size; else writer->buffer_size = IO_BUFFER_SIZE; writer->buffer = g_new0(BYTE, writer->buffer_size); writer->buf_ptr = writer->buffer; writer->buf_end = writer->buf_ptr + writer->buffer_size; if(filename != NULL) { writer->fp = fopen(filename, "wb"); if (writer->fp == NULL) { perror("Could not open file for writing"); g_free(writer); return NULL; } } else writer->fp = NULL; //mem only writer (must be flushed to a file writer) return writer; } void io_destroy_writer(io_Writer* writer) { //clean up if(writer->fp != NULL) { // flush the buffer to file io_flush_buffer(writer); // flush the file buffer fflush(writer->fp); // close the file pointer fclose(writer->fp); } //clean the mem buffer free(writer->buffer); } int64_t io_flush_buffer(io_Writer* writer) { if(writer->fp == NULL) { fprintf(stderr, "IO: (flush) no file pointer associated with writer (mem only ?)\n"); fprintf(stderr, "IO: (flush) try to increase buffer size\n"); return -1; } size_t nitems = 0; if (writer->buf_ptr > writer->buffer) { nitems= writer->buf_ptr - writer->buffer; if(fwrite(writer->buffer, 1, nitems, writer->fp) < nitems) { perror("IO: file write error"); return -1; } } else if (writer->buf_ptr < writer->buffer) { fprintf(stderr, "IO: Bad buffer pointer - dropping buffer\n"); writer->buf_ptr = writer->buffer; return -1; } int64_t size_inc = nitems - (writer->size - writer->position); if(size_inc > 0) writer->size += size_inc; writer->position = io_tell(writer); //update current file pointer position writer->buf_ptr = writer->buffer; //should never happen if(writer->position > writer->size) { fprintf(stderr, "IO: file pointer ( %" PRIu64 " ) above expected file size ( %" PRIu64 " )\n", writer->position, writer->size); writer->size = writer->position; } return writer->position; } int io_seek(io_Writer* writer, int64_t position) { int ret = 0; if(position <= writer->size) //position is on the file { if(writer->fp == NULL) { fprintf(stderr, "IO: (seek) no file pointer associated with writer (mem only ?)\n"); return -1; } //flush the memory buffer (we need an empty buffer) io_flush_buffer(writer); //try to move the file pointer to position int ret = fseeko(writer->fp, position, SEEK_SET); if(ret != 0) fprintf(stderr, "IO: seek to file position %" PRIu64 "failed\n", position); else writer->position = io_tell(writer); //update current file pointer position //we are now on position with an empty memory buffer } else // position is on the buffer { //move file pointer to EOF if(writer->position != writer->size) { fseeko(writer->fp, writer->size, SEEK_SET); writer->position = writer->size; } //move buffer pointer to position writer->buf_ptr = writer->buffer + (position - writer->size); } return ret; } int io_skip(io_Writer* writer, int amount) { if(writer->fp == NULL) { fprintf(stderr, "IO: (skip) no file pointer associated with writer (mem only ?)\n"); return -1; } //flush the memory buffer (clean buffer) io_flush_buffer(writer); //try to move the file pointer to position int ret = fseeko(writer->fp, amount, SEEK_CUR); if(ret != 0) fprintf(stderr, "writer: skip file pointer by 0x%x failed\n", amount); writer->position = io_tell(writer); //update current file pointer position //we are on position with an empty memory buffer return ret; } int64_t io_get_offset(io_Writer* writer) { //buffer offset int64_t offset = writer->buf_ptr - writer->buffer; if(offset < 0) { fprintf(stderr, "IO: bad buf pointer\n"); writer->buf_ptr = writer->buffer; offset = 0; } //add to file offset offset += writer->position; return offset; } void io_write_w8(io_Writer* writer, BYTE b) { *writer->buf_ptr++ = b; if (writer->buf_ptr >= writer->buf_end) io_flush_buffer(writer); } void io_write_buf(io_Writer* writer, BYTE *buf, int size) { while (size > 0) { int len = writer->buf_end - writer->buf_ptr; if(len < 0) fprintf(stderr,"IO: (write_buf) buff pointer outside buffer\n"); if(len >= size) len = size; memcpy(writer->buf_ptr, buf, len); writer->buf_ptr += len; if (writer->buf_ptr >= writer->buf_end) io_flush_buffer(writer); buf += len; size -= len; } } void io_write_wl16(io_Writer* writer, uint16_t val) { io_write_w8(writer, (BYTE) val); io_write_w8(writer, (BYTE) (val >> 8)); } void io_write_wb16(io_Writer* writer, uint16_t val) { io_write_w8(writer, (BYTE) (val >> 8)); io_write_w8(writer, (BYTE) val); } void io_write_wl24(io_Writer* writer, uint32_t val) { io_write_wl16(writer, (uint16_t) (val & 0xffff)); io_write_w8(writer, (BYTE) (val >> 16)); } void io_write_wb24(io_Writer* writer, uint32_t val) { io_write_wb16(writer, (uint16_t) (val >> 8)); io_write_w8(writer, (BYTE) val); } void io_write_wl32(io_Writer* writer, uint32_t val) { io_write_w8(writer, (BYTE) val); io_write_w8(writer, (BYTE) (val >> 8)); io_write_w8(writer, (BYTE) (val >> 16)); io_write_w8(writer, (BYTE) (val >> 24)); } void io_write_wb32(io_Writer* writer, uint32_t val) { io_write_w8(writer, (BYTE) (val >> 24)); io_write_w8(writer, (BYTE) (val >> 16)); io_write_w8(writer, (BYTE) (val >> 8)); io_write_w8(writer, (BYTE) val); } void io_write_wl64(io_Writer* writer, uint64_t val) { io_write_wl32(writer, (uint32_t)(val & 0xffffffff)); io_write_wl32(writer, (uint32_t)(val >> 32)); } void io_write_wb64(io_Writer* writer, uint64_t val) { io_write_wb32(writer, (uint32_t)(val >> 32)); io_write_wb32(writer, (uint32_t)(val & 0xffffffff)); } void io_write_4cc(io_Writer* writer, const char *str) { int len = 4; if(strlen(str) < len ) { len = strlen(str); } io_write_buf(writer, (BYTE *) str, len); len = 4 - len; //fill remaining chars with spaces while(len > 0) { io_write_w8(writer, ' '); len--; } } int io_write_str(io_Writer* writer, const char *str) { int len = 1; if (str) { len += strlen(str); io_write_buf(writer, (BYTE *) str, len); } else io_write_w8(writer, 0); return len; } guvcview-src-1.7.1/src/marker.c0000664000175000017500000001331512173235416015413 0ustar paulopaulo/*******************************************************************************# # guvcview http://guvcview.sourceforge.net # # # # Paulo Assis # # # # 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # # ********************************************************************************/ /*******************************************************************************# # # # write header and markers for Jpeg encoder # # # # Adapted for linux, Paulo Assis, 2007 # ********************************************************************************/ #include "huffman.h" #include "jpgenc.h" #include // Header for JPEG Encoder UINT8* write_markers (struct JPEG_ENCODER_STRUCTURE * jpeg_encoder_structure, UINT8 *output_ptr, int huff, UINT32 image_width, UINT32 image_height) { UINT16 i, header_length; UINT8 number_of_components; // Start of image marker *output_ptr++ = 0xFF; *output_ptr++ = 0xD8; //added from here // Start of APP0 marker *output_ptr++ = 0xFF; *output_ptr++ = 0xE0; //header length *output_ptr++= 0x00; *output_ptr++= 0x10;//16 bytes //type if(huff) { //JFIF0 0x4A46494600 *output_ptr++= 0x4A; *output_ptr++= 0x46; *output_ptr++= 0x49; *output_ptr++= 0x46; *output_ptr++= 0x00; } else { // AVI10 0x4156493100 *output_ptr++= 0x41; *output_ptr++= 0x56; *output_ptr++= 0x49; *output_ptr++= 0x31; *output_ptr++= 0x00; } // version *output_ptr++= 0x01; *output_ptr++= 0x02; // density 0- no units 1- pix per inch 2- pix per mm *output_ptr++= 0x01; // xdensity - 120 *output_ptr++= 0x00; *output_ptr++= 0x78; // ydensity - 120 *output_ptr++= 0x00; *output_ptr++= 0x78; //thumb x y *output_ptr++= 0x00; *output_ptr++= 0x00; //to here // Quantization table marker *output_ptr++ = 0xFF; *output_ptr++ = 0xDB; // Quantization table length *output_ptr++ = 0x00; *output_ptr++ = 0x43; // Pq, Tq *output_ptr++ = 0x00; // Lqt table for (i=0; i<64; i++) *output_ptr++ = jpeg_encoder_structure->Lqt [i]; // Quantization table marker *output_ptr++ = 0xFF; *output_ptr++ = 0xDB; // Quantization table length *output_ptr++ = 0x00; *output_ptr++ = 0x43; // Pq, Tq *output_ptr++ = 0x01; // Cqt table for (i=0; i<64; i++) *output_ptr++ = jpeg_encoder_structure->Cqt [i]; if (huff) { // huffman table(DHT) *output_ptr++=0xff; *output_ptr++=0xc4; *output_ptr++=0x01; *output_ptr++=0xa2; memmove(output_ptr,&JPEGHuffmanTable,JPG_HUFFMAN_TABLE_LENGTH);/*0x01a0*/ output_ptr+=JPG_HUFFMAN_TABLE_LENGTH; } number_of_components = 3; // Frame header(SOF) // Start of frame marker *output_ptr++ = 0xFF; *output_ptr++ = 0xC0; header_length = (UINT16) (8 + 3 * number_of_components); // Frame header length *output_ptr++ = (UINT8) (header_length >> 8); *output_ptr++ = (UINT8) header_length; // Precision (P) *output_ptr++ = 0x08;/*8 bits*/ // image height *output_ptr++ = (UINT8) (image_height >> 8); *output_ptr++ = (UINT8) image_height; // image width *output_ptr++ = (UINT8) (image_width >> 8); *output_ptr++ = (UINT8) image_width; // Nf *output_ptr++ = number_of_components; /* type 422 */ *output_ptr++ = 0x01; /*id (y)*/ *output_ptr++ = 0x21; /*horiz|vertical */ *output_ptr++ = 0x00; /*quantization table used*/ *output_ptr++ = 0x02; /*id (u)*/ *output_ptr++ = 0x11; /*horiz|vertical*/ *output_ptr++ = 0x01; /*quantization table used*/ *output_ptr++ = 0x03; /*id (v)*/ *output_ptr++ = 0x11; /*horiz|vertical*/ *output_ptr++ = 0x01; /*quantization table used*/ // Scan header(SOF) // Start of scan marker *output_ptr++ = 0xFF; *output_ptr++ = 0xDA; header_length = (UINT16) (6 + (number_of_components << 1)); // Scan header length *output_ptr++ = (UINT8) (header_length >> 8); *output_ptr++ = (UINT8) header_length; // Ns = number of scans *output_ptr++ = number_of_components; /* type 422*/ *output_ptr++ = 0x01; /*component id (y)*/ *output_ptr++ = 0x00; /*dc|ac tables*/ *output_ptr++ = 0x02; /*component id (u)*/ *output_ptr++ = 0x11; /*dc|ac tables*/ *output_ptr++ = 0x03; /*component id (v)*/ *output_ptr++ = 0x11; /*dc|ac tables*/ *output_ptr++ = 0x00; /*0 */ *output_ptr++ = 0x3F; /*63*/ *output_ptr++ = 0x00; /*0 */ return output_ptr; } guvcview-src-1.7.1/src/globals.h0000775000175000017500000001576412173235416015577 0ustar paulopaulo/*******************************************************************************# # guvcview http://guvcview.sourceforge.net # # # # Paulo Assis # # # # 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # # ********************************************************************************/ #ifndef GLOBALS_H #define GLOBALS_H #include #include #include "defs.h" #include "utils.h" typedef struct _sndDev { int id; int chan; int samprate; char name[512]; char description[256]; //PaTime Hlatency; //PaTime Llatency; } sndDev; typedef struct _VidBuff { gboolean used; QWORD time_stamp; BYTE *frame; int bytes_used; } VidBuff; /*global variables used in guvcview*/ struct GLOBAL { __MUTEX_TYPE mutex; //global struct mutex __MUTEX_TYPE file_mutex; //video file mutex __COND_TYPE IO_cond; //IO thread semaphore VidBuff *videoBuff; //video Buffer int video_buff_size; //size in frmaes of video buffer char *videodevice; // video device (def. /dev/video0) char *confPath; //configuration file path char *vidfile; //video filename passed through argument options with -n char *WVcaption; //video preview title bar caption //char *imageinc_str; //label for File inc //char *vidinc_str; //label for File inc char *mode; //mjpg (default) pchar* vidFPath; //video path [0] - filename [1] - dir pchar* imgFPath; //image path [0] - filename [1] - dir pchar* profile_FPath; //profile path [0] - filename [1] - dir sndDev *Sound_IndexDev;//list of sound input devices BYTE *jpeg; // jpeg buffer int64_t av_drift; // amount of A/V time correction DWORD currtime; DWORD lasttime; UINT64 Vidstarttime; //video start time UINT64 Vidstoptime; //video stop time QWORD v_ts; //video time stamp QWORD a_ts; //audio time stamp uint64_t vid_inc; //video name increment DWORD framecount; //video frame count DWORD frmCount; //frame count for fps display calc uint64_t image_inc; //image name increment int stack_size; //thread stack size int vid_sleep; //video thread sleep time (0 by default) int cap_meth; //capture method: 1-mmap 2-read int Capture_time; //video capture time passed through argument options with -t int imgFormat; //image format: 0-"jpg", 1-"png", 2-"bmp" int VidCodec; //0-"MJPG" 1-"YUY2" 2-"DIB "(rgb32) 3-.... int AudCodec; int VidFormat; //0-AVI 1-MKV .... int Sound_API; //audio API: 0-PORTAUDIO 1-PULSEAUDIO int Sound_SampRate; //audio sample rate int Sound_SampRateInd; //audio sample rate combo index int Sound_numInputDev; //number of audio input devices int Sound_DefDev; //audio default device index int Sound_UseDev; //audio used device index int Sound_NumChan; //audio number of channels int Sound_NumChanInd; //audio number of channels combo index WORD Sound_Format; //audio codec - fourcc (avilib.h) UINT64 Sound_delay; //sound delay in nanosec int PanStep; //step angle for Pan int TiltStep; //step angle for Tilt int FpsCount; //frames counter for fps calc int timer_id; //fps count timer int image_timer_id; //auto image capture timer int udev_timer_id; //timer id for udev device events check int disk_timer_id; //timer id for disk check (free space) int image_timer; //auto image capture time int image_npics; //number of captures int image_picn; //capture number int fps; //fps denominator int fps_num; //fps numerator (usually 1) int bpp; //current bytes per pixel int hwaccel; //use hardware acceleration int desktop_w; //Desktop width int desktop_h; //Desktop height int width; //frame width int height; //frame height int winwidth; //control windoe width int winheight; //control window height int spinbehave; //spin: 0-non editable 1-editable int format; //v4l2 pixel format int Frame_Flags; //frame filter flags int osdFlags; // Flags to control onscreen display int skip_n; //initial frames to skip int w_ind; //write frame index int r_ind; //read frame index int default_action; // 0 for taking picture, 1 for video float DispFps; //fps value gboolean no_display; //flag if guvcview will present the gui or not. gboolean exit_on_close;//exit guvcview after closing video when capturing from start gboolean Sound_enable; //Enable/disable Sound (Def. enable) gboolean AFcontrol; //Autofocus control flag (exists or not) gboolean autofocus; //autofocus flag (enable/disable) gboolean flg_config; //flag confPath if set in args gboolean lprofile; //flag for command line -l option gboolean flg_npics; //flag npics if set in args gboolean flg_hwaccel; //flag hwaccel if set in args gboolean flg_res; //flag resol if set in args gboolean flg_mode; //flag mode if set in args gboolean flg_imgFPath; //flag imgFPath if set in args gboolean flg_FpsCount; //flag FpsCount if set in args gboolean flg_cap_meth; //flag if cap_meth is set in args gboolean debug; //debug mode flag (--verbose) gboolean VidButtPress; gboolean control_only; //if set don't stream video (enables image control in other apps e.g. ekiga, skype, mplayer) gboolean change_res; //flag for reseting resolution gboolean add_ctrls; //flag for exiting after adding extension controls }; /*----------------------------- prototypes ------------------------------------*/ int initGlobals(struct GLOBAL *global); int closeGlobals(struct GLOBAL *global); #endif guvcview-src-1.7.1/src/quant.c0000664000175000017500000001700312173235416015260 0ustar paulopaulo/*******************************************************************************# # guvcview http://guvcview.sourceforge.net # # # # Paulo Assis # # # # 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # # ********************************************************************************/ /*******************************************************************************# # # # quantization for Jpeg encoder # # # # Adapted for linux, Paulo Assis, 2007 # ********************************************************************************/ #include "jpgenc.h" UINT8 zigzag_table [] = { 0, 1, 5, 6, 14, 15, 27, 28, 2, 4, 7, 13, 16, 26, 29, 42, 3, 8, 12, 17, 25, 30, 41, 43, 9, 11, 18, 24, 31, 40, 44, 53, 10, 19, 23, 32, 39, 45, 52, 54, 20, 22, 33, 38, 46, 51, 55, 60, 21, 34, 37, 47, 50, 56, 59, 61, 35, 36, 48, 49, 57, 58, 62, 63 }; /* This function implements 16 Step division for Q.15 format data */ UINT16 DSP_Division (UINT32 numer, UINT32 denom) { UINT16 i; denom <<= 15; for (i=16; i>0; i--) { if (numer > denom) { numer -= denom; numer <<= 1; numer++; } else numer <<= 1; } return (UINT16) numer; } /* Multiply Quantization table with quality factor to get LQT and CQT */ /* Will use constant Quantization tables to make it faster */ void initialize_quantization_tables (struct JPEG_ENCODER_STRUCTURE * jpeg_encoder_structure) { UINT16 i, index; UINT32 value; /* comment next line to use JPEG default tables*/ #define QCAM_TABLES #ifndef QCAM_TABLES /* JPEG default tables (good Quality) */ static UINT8 luminance_quant_table [] = { 16, 11, 10, 16, 24, 40, 51, 61, 12, 12, 14, 19, 26, 58, 60, 55, 14, 13, 16, 24, 40, 57, 69, 56, 14, 17, 22, 29, 51, 87, 80, 62, 18, 22, 37, 56, 68, 109, 103, 77, 24, 35, 55, 64, 81, 104, 113, 92, 49, 64, 78, 87, 103, 121, 120, 101, 72, 92, 95, 98, 112, 100, 103, 99 }; static UINT8 chrominance_quant_table [] = { 17, 18, 24, 47, 99, 99, 99, 99, 18, 21, 26, 66, 99, 99, 99, 99, 24, 26, 56, 99, 99, 99, 99, 99, 47, 66, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99 }; #else /* quickcam 5000pro tables (very good quality) */ static UINT8 luminance_quant_table [] = { 0x04, 0x02, 0x03, 0x03, 0x03, 0x02, 0x04, 0x03, 0x03, 0x03, 0x04, 0x04, 0x04, 0x04, 0x06, 0x0a, 0x06, 0x06, 0x05, 0x05, 0x06, 0x0c, 0x08, 0x09, 0x07, 0x0a, 0x0e, 0x0c, 0x0f, 0x0f, 0x0e, 0x0c, 0x0e, 0x0f, 0x10, 0x12, 0x17, 0x13, 0x10, 0x11, 0x15, 0x11, 0x0d, 0x0e, 0x14, 0x1a, 0x14, 0x15, 0x17, 0x18, 0x19, 0x1a, 0x19, 0x0f, 0x13, 0x1c, 0x1e, 0x1c, 0x19, 0x1e, 0x17, 0x19, 0x19, 0x18 }; static UINT8 chrominance_quant_table [] = { 0x04, 0x04, 0x04, 0x06, 0x05, 0x06, 0x0b, 0x06, 0x06, 0x0b, 0x18, 0x10, 0x0e, 0x10, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18 }; #endif /* static UINT8 qtable_jpeg_flattened[] = * { 18, 23, 22, 28, 34, 44, 50, 55, * 24, 24, 26, 31, 36, 53, 54, 52, * 26, 25, 28, 34, 44, 53, 58, 52, * 26, 29, 33, 38, 50, 65, 63, 55, * 30, 33, 43, 52, 58, 73, 71, 61, * 34, 41, 52, 56, 63, 71, 74, 67, * 49, 56, 62, 65, 71, 77, 77, 70, * 59, 67, 68, 69, 74, 70, 71, 70}; * * static UINT8 qtable_semiuniform[] = * { 16, 32, 64, 64, 64, 64, 64, 64, * 32, 64, 64, 64, 64, 64, 64, 64, * 64, 64, 64, 64, 64, 64, 64, 64, * 64, 64, 64, 64, 64, 64, 64, 64, * 64, 64, 64, 64, 64, 64, 64, 64, * 64, 64, 64, 64, 64, 64, 64, 64, * 64, 64, 64, 64, 64, 64, 64, 64, * 64, 64, 64, 64, 64, 64, 64, 64 }; * * static UINT8 qtable_uniform[] = * { 100, 100, 100, 100, 100, 100, 100, 100, * 100, 100, 100, 100, 100, 100, 100, 100, * 100, 100, 100, 100, 100, 100, 100, 100, * 100, 100, 100, 100, 100, 100, 100, 100, * 100, 100, 100, 100, 100, 100, 100, 100, * 100, 100, 100, 100, 100, 100, 100, 100, * 100, 100, 100, 100, 100, 100, 100, 100, * 100, 100, 100, 100, 100, 100, 100, 100 }; * * static UINT8 qtable_none[] = * { 1, 1, 1, 1, 1, 1, 1, 1, * 1, 1, 1, 1, 1, 1, 1, 1, * 1, 1, 1, 1, 1, 1, 1, 1, * 1, 1, 1, 1, 1, 1, 1, 1, * 1, 1, 1, 1, 1, 1, 1, 1, * 1, 1, 1, 1, 1, 1, 1, 1, * 1, 1, 1, 1, 1, 1, 1, 1, * 1, 1, 1, 1, 1, 1, 1, 1 }; * * static UINT8 qtable_jpeg_squashed[] = { //4*sqrt(jpeg_flat) * 18, 19, 19, 21, 23, 27, 28, 30, * 20, 20, 21, 22, 24, 29, 30, 29, * 21, 20, 21, 23, 27, 29, 31, 29, * 21, 22, 23, 25, 28, 32, 32, 30, * 22, 23, 26, 29, 31, 34, 34, 31, * 23, 26, 29, 30, 32, 34, 35, 33, * 28, 30, 32, 32, 34, 35, 35, 34, * 31, 33, 33, 33, 35, 34, 34, 34 }; */ for (i=0; i<64; i++) { index = zigzag_table [i]; value= luminance_quant_table [i]; jpeg_encoder_structure->Lqt [index] = (UINT8) value; jpeg_encoder_structure->ILqt [i] = DSP_Division (0x8000, value); value = chrominance_quant_table [i]; jpeg_encoder_structure->Cqt[index] = (UINT8) value; jpeg_encoder_structure->ICqt [i] = DSP_Division (0x8000, value); } } /* multiply DCT Coefficients with Quantization table and store in ZigZag location */ void quantization (struct JPEG_ENCODER_STRUCTURE * jpeg_encoder_structure, INT16* const data, UINT16* const quant_table_ptr) { INT16 i; INT32 value; for (i=63; i>=0; i--) { value = data [i] * quant_table_ptr [i]; value = (value + 0x4000) >> 15; jpeg_encoder_structure->Temp [zigzag_table [i]] = (INT16) value; } } guvcview-src-1.7.1/src/port_audio.h0000664000175000017500000000457112173235416016310 0ustar paulopaulo/*******************************************************************************# # guvcview http://guvcview.sourceforge.net # # # # Paulo Assis # # # # 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # # ********************************************************************************/ #ifndef PORT_AUDIO_H #define PORT_AUDIO_H #include #include "guvcview.h" #include "sound.h" /*------------- portaudio defs ----------------*/ /*---- can be override in rc file or GUI ------*/ #define DEFAULT_LATENCY_DURATION 100.0 #define DEFAULT_LATENCY_CORRECTION -130.0 #define SAMPLE_RATE (0) /* 0 device default*/ //#define FRAMES_PER_BUFFER (4096) /* sound can go for more 1 seconds than video */ #define NUM_CHANNELS (0) /* 0-device default 1-mono 2-stereo */ #define PA_SAMPLE_TYPE paFloat32 #define PA_FOURCC WAVE_FORMAT_PCM //use PCM 16 bits converted from float int portaudio_list_snd_devices(struct GLOBAL *global); int port_init_audio(struct paRecordData* pdata); int port_close_audio(struct paRecordData *pdata); #endifguvcview-src-1.7.1/src/utils.h0000664000175000017500000001014112173235416015271 0ustar paulopaulo/*******************************************************************************# # guvcview http://guvcview.sourceforge.net # # # # Paulo Assis # # # # 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # # ********************************************************************************/ /*******************************************************************************# # # # MJpeg decoding and frame capture taken from luvcview # # # # # ********************************************************************************/ #ifndef UTILS_H #define UTILS_H #include "defs.h" /*video defs*/ //#define BI_RGB 0; //#define BI_RLE4 1; //#define BI_RLE8 2; //#define BI_BITFIELDS 3; /* Fixed point arithmetic */ //#define FIXED Sint32 //#define FIXED_BITS 16 //#define TO_FIXED(X) (((Sint32)(X))<<(FIXED_BITS)) //#define FROM_FIXED(X) (((Sint32)(X))>>(FIXED_BITS)) #define ISHIFT 11 #define IFIX(a) ((int)((a) * (1 << ISHIFT) + .5)) #ifndef __P # define __P(x) x #endif /* special markers */ #define M_BADHUFF -1 #define M_EOF 0x80 struct jpeg_decdata { int dcts[6 * 64 + 16]; int out[64 * 6]; int dquant[3][64]; }; struct in { BYTE *p; DWORD bits; int left; int marker; int (*func) __P((void *)); void *data; }; /*********************************/ #define DECBITS 10 /* seems to be the optimum */ struct dec_hufftbl { int maxcode[17]; int valptr[16]; BYTE vals[256]; DWORD llvals[1 << DECBITS]; }; //struct enc_hufftbl; union hufftblp { struct dec_hufftbl *dhuff; //struct enc_hufftbl *ehuff; }; struct scan { int dc; /* old dc value */ union hufftblp hudc; union hufftblp huac; int next; /* when to switch to next scan */ int cid; /* component id */ int hv; /* horiz/vert, copied from comp */ int tq; /* quant tbl, copied from comp */ }; /******** Markers *********/ #define M_SOI 0xd8 #define M_APP0 0xe0 #define M_DQT 0xdb #define M_SOF0 0xc0 #define M_DHT 0xc4 #define M_DRI 0xdd #define M_SOS 0xda #define M_RST0 0xd0 #define M_EOI 0xd9 #define M_COM 0xfe /*******Error codes *******/ #define ERR_NO_SOI 1 #define ERR_NOT_8BIT 2 #define ERR_HEIGHT_MISMATCH 3 #define ERR_WIDTH_MISMATCH 4 #define ERR_BAD_WIDTH_OR_HEIGHT 5 #define ERR_TOO_MANY_COMPPS 6 #define ERR_ILLEGAL_HV 7 #define ERR_QUANT_TABLE_SELECTOR 8 #define ERR_NOT_YCBCR_221111 9 #define ERR_UNKNOWN_CID_IN_SCAN 10 #define ERR_NOT_SEQUENTIAL_DCT 11 #define ERR_WRONG_MARKER 12 #define ERR_NO_EOI 13 #define ERR_BAD_TABLES 14 #define ERR_DEPTH_MISMATCH 15 int jpeg_decode(unsigned char **pic, unsigned char *buf, int width, int height); #endif guvcview-src-1.7.1/src/Makefile.am0000775000175000017500000000364012173235416016025 0ustar paulopaulo## Process this file with automake to produce Makefile.in EXTRA_CFLAGS = @PULSE_CFLAGS@ EXTRA_LIBS = @PULSE_LIBS@ INCLUDES = \ -DPACKAGE_LOCALE_DIR=\""$(prefix)/$(DATADIRNAME)/locale"\" \ -DPACKAGE_SRC_DIR=\""$(srcdir)"\" \ -DPACKAGE_DATA_DIR=\""$(datadir)"\" \ $(DEPS_CFLAGS) $(EXTRA_CFLAGS) $(PTHREAD_CFLAGS) AM_CFLAGS =\ -D_REENTRANT\ -D_FILE_OFFSET_BITS=64\ -Wall bin_PROGRAMS = guvcview guvcview_SOURCES = \ audio_effects.h \ audio_effects.c \ audio_tab.h \ audio_tab.c \ autofocus.h \ autofocus.c \ acodecs.h \ acodecs.c \ avilib.c \ avilib.h \ callbacks.h \ callbacks.c \ close.h \ close.c \ colorspaces.h \ colorspaces.c \ create_video.h \ create_video.c \ create_image.h \ create_image.c \ dct.h \ dct.c \ defs.h \ file_io.h \ file_io.c \ globals.h \ globals.c \ guvcview.h \ guvcview.c \ huffman.h \ huffman.c \ img_controls.h \ img_controls.c \ image_format.h \ image_format.c\ io_stream.h \ io_stream.c \ jdatatype.h \ jpgenc.h \ jpgenc.c \ lavc_common.h \ lavc_common.c \ matroska.h \ matroska.c \ marker.c \ menubar.h \ menubar.c \ ms_time.h \ ms_time.c \ options.h \ options.c \ osd.h \ osd.c \ picture.h \ picture.c \ profile.h \ profile.c \ port_audio.h \ port_audio.c \ pulse_audio.h \ pulse_audio.c \ quant.c \ readYUV.c \ sound.h \ sound.c \ snd_devices.h \ snd_devices.c \ string_utils.h \ string_utils.c \ timers.h \ timers.c \ utils.h \ utils.c \ v4l2_controls.h \ v4l2_controls.c \ v4l2_devices.h \ v4l2_devices.c \ v4l2_dyna_ctrls.h \ v4l2_dyna_ctrls.c \ v4l2_formats.h \ v4l2_formats.c \ v4l2uvc.h \ v4l2uvc.c \ vcodecs.h \ vcodecs.c \ video.h \ video.c \ video_filters.h \ video_filters.c \ video_format.h \ video_format.c \ video_tab.h \ video_tab.c guvcview_LDFLAGS = $(LIBINTL) guvcview_LDADD = $(DEPS_LIBS) $(EXTRA_LIBS) $(PTHREAD_LIBS) localedir = $(datadir)/locale DEFS = -DLOCALEDIR=\"$(localedir)\" @DEFS@ guvcview-src-1.7.1/src/picture.c0000664000175000017500000002566312173235416015616 0ustar paulopaulo/*******************************************************************************# # guvcview http://guvcview.sourceforge.net # # # # Paulo Assis # # # # 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # # ********************************************************************************/ #include "picture.h" #include "huffman.h" #include "jpgenc.h" #include #include #include #include /*----------------------------------- Image Files ----------------------------*/ int SaveJPG(const char *Filename,int imgsize,BYTE *ImagePix) { int ret=0; int jpgsize=0; BYTE *jpgtmp=NULL; BYTE *Pimg=NULL; BYTE *Pjpg=NULL; BYTE *tp=NULL; JPGFILEHEADER JpgFileh; int jpghsize=sizeof(JpgFileh); FILE *fp; jpgsize=jpghsize+imgsize+sizeof(JPEGHuffmanTable)+4;/*header+huffman+marker+buffsize*/ Pimg=ImagePix; if((jpgtmp=g_malloc0(jpgsize))!=NULL) { Pjpg=jpgtmp; /*Fill JFIF header*/ JpgFileh.SOI[0]=0xff; JpgFileh.SOI[1]=0xd8; JpgFileh.APP0[0]=0xff; JpgFileh.APP0[1]=0xe0; JpgFileh.length[0]=0x00; JpgFileh.length[1]=0x10; JpgFileh.JFIF[0]=0x4a;//JFIF0 JpgFileh.JFIF[1]=0x46; JpgFileh.JFIF[2]=0x49; JpgFileh.JFIF[3]=0x46; JpgFileh.JFIF[4]=0x00; JpgFileh.VERS[0]=0x01;//version 1.2 JpgFileh.VERS[1]=0x02; JpgFileh.density=0x00; JpgFileh.xdensity[0]=0x00; JpgFileh.xdensity[1]=0x78; JpgFileh.ydensity[0]=0x00; JpgFileh.ydensity[1]=0x78; JpgFileh.WTN=0; JpgFileh.HTN=0; /*adds header (JFIF)*/ memmove(Pjpg,&JpgFileh,jpghsize); /*moves to the end of the header struct (JFIF)*/ Pjpg+=jpghsize; int headSize = ImagePix[4]*256+ImagePix[5] + 4;/*length + SOI+APP0*/ /*moves to the end of header (MJPG)*/ Pimg+=headSize; /*adds Quantization tables and everything else until * * start of frame marker (FFC0) */ tp=Pimg; int qtsize=0; while(!((tp[qtsize]== 0xff) && (tp[qtsize+1]== 0xc0))) { qtsize++; } memmove(Pjpg,Pimg,qtsize); /*moves to the begining of frame marker*/ Pjpg+=qtsize; Pimg+=qtsize; /*insert huffman table with marker (FFC4) and length(x01a2)*/ BYTE HUFMARK[4]; HUFMARK[0]=0xff; HUFMARK[1]=0xc4; HUFMARK[2]=0x01; HUFMARK[3]=0xa2; memmove(Pjpg,&HUFMARK,4); Pjpg+=4; memmove(Pjpg,&JPEGHuffmanTable,JPG_HUFFMAN_TABLE_LENGTH);/*0x01a0*/ /*moves to the end of huffman tables (JFIF)*/ Pjpg+=JPG_HUFFMAN_TABLE_LENGTH; /*copys frame data(JFIF)*/ memmove(Pjpg,Pimg,(imgsize-(Pimg-ImagePix))); Pjpg+=imgsize-(Pimg-ImagePix); int totSize = Pjpg - jpgtmp; if ((fp = fopen(Filename,"wb"))!=NULL) { ret=fwrite(jpgtmp,totSize,1,fp);/*jpeg - jfif*/ if (ret< 1) ret=1; //write error else ret=0; fflush(fp); //flush data stream to file system if(fsync(fileno(fp)) || fclose(fp)) perror("JPEG ERROR - couldn't write to file"); } else ret=1; g_free(jpgtmp); jpgtmp=NULL; Pimg=NULL; Pjpg=NULL; tp=NULL; } else { g_printerr("could not allocate memmory for jpg file\n"); ret=1; } return ret; } int SaveBuff(const char *Filename,int imgsize,BYTE *data) { FILE *fp; int ret = 0; if ((fp = fopen(Filename,"wb"))!=NULL) { ret=fwrite(data,imgsize,1,fp); if (ret<1) ret=1;//write error else ret=0; fflush(fp); //flush data stream to file system if(fsync(fileno(fp)) || fclose(fp)) perror("BUFF WRITE ERROR - couldn't write buffer to file"); } else ret = 1; return (ret); } int SaveBPM(const char *Filename, long width, long height, int BitCount, BYTE *ImagePix) { int ret=0; BITMAPFILEHEADER BmpFileh; BITMAPINFOHEADER BmpInfoh; DWORD imgsize; FILE *fp; imgsize=width*height*BitCount/8; BmpFileh.bfType=0x4d42;//must be BM (x4d42) /*Specifies the size, in bytes, of the bitmap file*/ BmpFileh.bfSize=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+imgsize; BmpFileh.bfReserved1=0; //Reserved; must be zero BmpFileh.bfReserved2=0; //Reserved; must be zero /*Specifies the offset, in bytes, */ /*from the beginning of the BITMAPFILEHEADER structure */ /* to the bitmap bits */ BmpFileh.bfOffBits=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER); BmpInfoh.biSize=40; BmpInfoh.biWidth=width; BmpInfoh.biHeight=height; BmpInfoh.biPlanes=1; BmpInfoh.biBitCount=BitCount; BmpInfoh.biCompression=0; // 0 BmpInfoh.biSizeImage=imgsize; BmpInfoh.biXPelsPerMeter=0; BmpInfoh.biYPelsPerMeter=0; BmpInfoh.biClrUsed=0; BmpInfoh.biClrImportant=0; if ((fp = fopen(Filename,"wb"))!=NULL) { // (wb) write in binary mode ret=fwrite(&BmpFileh, sizeof(BITMAPFILEHEADER), 1, fp); ret+=fwrite(&BmpInfoh, sizeof(BITMAPINFOHEADER),1,fp); ret+=fwrite(ImagePix,imgsize,1,fp); if (ret<3) ret=1;//write error else ret=0; fflush(fp); //flush data stream to file system if(fsync(fileno(fp)) || fclose(fp)) { perror("BMP ERROR - couldn't write to file"); ret=1; } } else { ret=1; g_printerr("ERROR: Could not open file %s for write \n",Filename); } return ret; } /* write a png file */ int write_png(char *file_name, int width, int height,BYTE *prgb_data) { int l=0; FILE *fp; png_structp png_ptr; png_infop info_ptr; png_text text_ptr[3]; png_bytep row_pointers[height]; /* open the file */ fp = fopen(file_name, "wb"); if (fp == NULL) return (1); /* Create and initialize the png_struct with the desired error handler * functions. If you want to use the default stderr and longjump method, * you can supply NULL for the last three parameters. We also check that * the library version is compatible with the one used at compile time, * in case we are using dynamically linked libraries. */ png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); if (png_ptr == NULL) { fclose(fp); return (2); } /* Allocate/initialize the image information data. */ info_ptr = png_create_info_struct(png_ptr); if (info_ptr == NULL) { fclose(fp); png_destroy_write_struct(&png_ptr, NULL); return (3); } /* Set error handling. REQUIRED if you aren't supplying your own * error handling functions in the png_create_write_struct() call. */ if (setjmp(png_jmpbuf(png_ptr))) { /* If we get here, we had a problem reading the file */ fclose(fp); png_destroy_write_struct(&png_ptr, &info_ptr); return (4); } /* set up the output control using standard C streams */ png_init_io(png_ptr, fp); /* turn on or off filtering, and/or choose specific filters. You can use either a single PNG_FILTER_VALUE_NAME or the bitwise OR of one or more PNG_FILTER_NAME masks. */ /* png_set_filter(png_ptr, 0, PNG_FILTER_NONE | PNG_FILTER_VALUE_NONE | PNG_FILTER_SUB | PNG_FILTER_VALUE_SUB | PNG_FILTER_UP | PNG_FILTER_VALUE_UP | PNG_FILTER_AVE | PNG_FILTER_VALUE_AVE | PNG_FILTER_PAETH | PNG_FILTER_VALUE_PAETH| PNG_ALL_FILTERS);*/ /* set the zlib compression level */ //png_set_compression_level(png_ptr, // Z_BEST_COMPRESSION); /* set other zlib parameters */ //png_set_compression_mem_level(png_ptr, 8); //png_set_compression_strategy(png_ptr, // Z_DEFAULT_STRATEGY); //png_set_compression_window_bits(png_ptr, 15); //png_set_compression_method(png_ptr, 8); //png_set_compression_buffer_size(png_ptr, 8192); png_set_IHDR(png_ptr, info_ptr, width, height, 8, PNG_COLOR_TYPE_RGB, PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT); /* Optional gamma chunk is strongly suggested if you have any guess * as to the correct gamma of the image. */ //png_set_gAMA(png_ptr, info_ptr, gamma); /* Optionally write comments into the image */ text_ptr[0].key = "Title"; text_ptr[0].text = file_name; text_ptr[0].compression = PNG_TEXT_COMPRESSION_NONE; text_ptr[1].key = "Software"; text_ptr[1].text = "guvcview"; text_ptr[1].compression = PNG_TEXT_COMPRESSION_NONE; text_ptr[2].key = "Description"; text_ptr[2].text = "File generated by guvcview "; text_ptr[2].compression = PNG_TEXT_COMPRESSION_NONE; #ifdef PNG_iTXt_SUPPORTED text_ptr[0].lang = NULL; text_ptr[1].lang = NULL; text_ptr[2].lang = NULL; #endif png_set_text(png_ptr, info_ptr, text_ptr, 3); /* Write the file header information. REQUIRED */ png_write_info(png_ptr, info_ptr); /* flip BGR pixels to RGB */ //png_set_bgr(png_ptr); /*?no longuer required?*/ /* Write the image data.*/ for (l = 0; l < height; l++) row_pointers[l] = prgb_data + l*width*3; png_write_image(png_ptr, row_pointers); /* You can write optional chunks like tEXt, zTXt, and tIME at the end * as well. Shouldn't be necessary in 1.1.0 and up as all the public * chunks are supported and you can use png_set_unknown_chunks() to * register unknown chunks into the info structure to be written out. */ /* It is REQUIRED to call this to finish writing the rest of the file */ png_write_end(png_ptr, info_ptr); /* If you png_malloced a palette, free it here (don't free info_ptr->palette, as recommended in versions 1.0.5m and earlier of this example; if libpng mallocs info_ptr->palette, libpng will free it). If you allocated it with malloc() instead of png_malloc(), use free() instead of png_free(). */ //png_free(png_ptr, palette); //palette=NULL; /* Similarly, if you png_malloced any data that you passed in with png_set_something(), such as a hist or trans array, free it here, when you can be sure that libpng is through with it. */ //png_free(png_ptr, trans); //trans=NULL; /* clean up after the write, and free any memory allocated */ png_destroy_write_struct(&png_ptr, &info_ptr); /* close the file */ fflush(fp); //flush data stream to file system if(fsync(fileno(fp)) || fclose(fp)) { perror("PNG ERROR - couldn't write to file"); return(5); } for(l=0;l # # # # 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # # ********************************************************************************/ #ifndef V4L2UVC_H #define V4L2UVC_H #include #include #include #include "globals.h" #include "v4l2_devices.h" #include "v4l2_formats.h" #include "v4l2_controls.h" #define NB_BUFFER 4 #define VDIN_DYNCTRL_OK 3 #define VDIN_SELETIMEOUT_ERR 2 #define VDIN_SELEFAIL_ERR 1 #define VDIN_OK 0 #define VDIN_DEVICE_ERR -1 #define VDIN_FORMAT_ERR -2 #define VDIN_REQBUFS_ERR -3 #define VDIN_ALLOC_ERR -4 #define VDIN_RESOL_ERR -5 #define VDIN_FBALLOC_ERR -6 #define VDIN_UNKNOWN_ERR -7 #define VDIN_DEQBUFS_ERR -8 #define VDIN_DECODE_ERR -9 #define VDIN_QUERYCAP_ERR -10 #define VDIN_QUERYBUF_ERR -11 #define VDIN_QBUF_ERR -12 #define VDIN_MMAP_ERR -13 #define VDIN_READ_ERR -14 #define VDIN_STREAMON_ERR -15 #define VDIN_STREAMOFF_ERR -16 #define VDIN_DYNCTRL_ERR -17 #define HEADERFRAME1 0xaf //set ioctl retries to 4 - linux uvc as increased timeout from 1000 to 3000 ms #define IOCTL_RETRY 4 enum v4l2_uvc_exposure_auto_type { V4L2_UVC_EXPOSURE_MANUAL = 1, V4L2_UVC_EXPOSURE_AUTO = 2, V4L2_UVC_EXPOSURE_SHUTTER_PRIORITY = 4, V4L2_UVC_EXPOSURE_APERTURE_PRIORITY = 8 }; static const int exp_vals[]= { V4L2_UVC_EXPOSURE_MANUAL, V4L2_UVC_EXPOSURE_AUTO, V4L2_UVC_EXPOSURE_SHUTTER_PRIORITY, V4L2_UVC_EXPOSURE_APERTURE_PRIORITY }; struct vdIn { __MUTEX_TYPE mutex; struct udev *udev; // pointer to a udev struct (lib udev) struct udev_monitor *udev_mon; // udev monitor int udev_fd; // udev monitor file descriptor int fd; // device file descriptor char *videodevice; // video device string (default "/dev/video0)" int cap_meth; // capture method : IO_MMAP (1) IO_READ (0) struct v4l2_capability cap; // v4l2 capability struct struct v4l2_format fmt; // v4l2 formar struct struct v4l2_buffer buf; // v4l2 buffer struct struct v4l2_requestbuffers rb; // v4l2 request buffers struct //struct v4l2_timecode timecode; // v4l2 timecode struct struct v4l2_streamparm streamparm; // v4l2 stream parameters struct struct v4l2_jpegcompression jpgcomp;// v4l2 jpeg compression settings void *mem[NB_BUFFER]; // memory buffers for mmap driver frames UINT32 buff_length[NB_BUFFER]; // memory buffers length as set by VIDIOC_QUERYBUF UINT32 buff_offset[NB_BUFFER]; // memory buffers offset as set by VIDIOC_QUERYBUF unsigned char *tmpbuffer; // temp buffer for decoding compressed data unsigned char *framebuffer; // frame buffer (YUYV), for rendering in SDL overlay int isstreaming; // video stream flag (1- ON 0- OFF) int isbayer; // raw bayer flag int pix_order; // raw bayer pixel order (rg/gb, bg/gr, ...) int setFPS; // set FPS flag (0-do nothing, 1-change fps value, 2-query and queue buffer) int setJPEGCOMP; // set jpeg compression flag (0-do nothing, 1-change compression value, 2-query and queue buffer) int grabmethod; // only mmap available UVC doesn't support read UINT64 timestamp; //video frame time stamp char *VidFName; // Video File name (with full path) int capImage; // Image capture flag (raised for capturing a frame) char *ImageFName; // Image File name (with full path) int cap_raw; // raw frame capture flag int available_exp[4]; //backward compatible (old v4l2 exposure menu interface) int PanTilt; //1-if PanTilt Camera 0-otherwise gboolean signalquit; // video loop exit flag gboolean capVid; // Video capture flag (raised while capturing) gboolean VidCapStop; // Video capture stop flag (raised when video capture has stopped) gboolean IOfinished; // Signals that IO thread has finished LFormats *listFormats; // structure with frame formats list LDevices *listDevices; // structure with devices list }; /* ioctl with a number of retries in the case of I/O failure * args: * fd - device descriptor * IOCTL_X - ioctl reference * arg - pointer to ioctl data * returns - ioctl result */ int xioctl(int fd, int IOCTL_X, void *arg); /* Init VdIn struct with default and/or global values * args: * vd: pointer to a VdIn struct ( must be allready allocated ) * global: pointer to a GLOBAL struct ( must be allready initiated ) * * returns: error code ( 0 - VDIN_OK) */ int init_videoIn(struct vdIn *vd, struct GLOBAL *global); /* Grabs video frame and decodes it if necessary * args: * vd: pointer to a VdIn struct ( must be allready initiated) * format: pixel v4l2_format * width: frame width * height: frame height * returns: error code ( 0 - VDIN_OK) */ int uvcGrab(struct vdIn *vd, int format, int width, int height, int *fps, int *fps_num); /* cleans VdIn struct and allocations * args: * pointer to initiated vdIn struct * * returns: void */ void close_v4l2(struct vdIn *vd, gboolean control_only); /* restarts v4l2 device with new format * args: * vd: pointer to vdIn struct * global: poiter to GLOBAL struct * * returns: error code ( 0 - VDIN_OK) */ int restart_v4l2(struct vdIn *vd, struct GLOBAL *global); /* sets video device frame rate * args: * vd: pointer to a VdIn struct ( must be allready initiated) * fps: pointer to int containing fps value * fps_num: pointer to int containing fps numerator value * * returns: VIDIOC_S_PARM ioctl result value * sets fps and fps_num to device value */ int input_set_framerate (struct vdIn * device, int *fps, int *fps_num); /* gets video device defined frame rate (not real - consider it a maximum value) * args: * vd: pointer to a VdIn struct ( must be allready initiated) * fps: pointer to int containing fps value * fps_num: pointer to int containing fps numerator value * * returns: VIDIOC_G_PARM ioctl result value * sets fps and fps_num to device value */ int input_get_framerate (struct vdIn * device, int *fps, int *fps_num); /* gets video stream jpeg compression parameters * args: * vd: pointer to a VdIn struct ( must be allready initiated) * * returns: VIDIOC_G_JPEGCOMP ioctl result value */ int get_jpegcomp(struct vdIn *vd); /* sets video stream jpeg compression parameters * args: * vd: pointer to a VdIn struct ( must be allready initiated) * * returns: VIDIOC_S_JPEGCOMP ioctl result value */ int set_jpegcomp(struct vdIn *vd); /* Enable video stream * args: * vd: pointer to a VdIn struct ( must be allready initiated) * * returns: VIDIOC_STREAMON ioctl result (0- OK) */ int video_enable(struct vdIn *vd); /* Disable video stream * args: * vd: pointer to a VdIn struct ( must be allready initiated) * * returns: VIDIOC_STREAMOFF ioctl result (0- OK) */ int video_disable(struct vdIn *vd); #endif guvcview-src-1.7.1/src/create_image.c0000664000175000017500000001047112173235416016537 0ustar paulopaulo/*******************************************************************************# # guvcview http://guvcview.sourceforge.net # # # # Paulo Assis # # # # 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # # ********************************************************************************/ #include #include #include "defs.h" #include "guvcview.h" #include "v4l2uvc.h" #include "colorspaces.h" #include "jpgenc.h" #include "picture.h" #include "ms_time.h" #include "string_utils.h" int store_picture(void *data) { struct ALL_DATA *all_data = (struct ALL_DATA *) data; struct GLOBAL *global = all_data->global; struct vdIn *videoIn = all_data->videoIn; struct JPEG_ENCODER_STRUCTURE *jpeg_struct = NULL; BYTE *pim = NULL; BYTE *jpeg = NULL; int jpeg_size = 0; switch(global->imgFormat) { case 0:/*jpg*/ /* Save directly from MJPG frame */ if((global->Frame_Flags==0) && (global->format==V4L2_PIX_FMT_MJPEG)) { if(SaveJPG(videoIn->ImageFName,videoIn->buf.bytesused,videoIn->tmpbuffer)) { g_printerr ("Error: Couldn't capture Image to %s \n", videoIn->ImageFName); return(-1); } } else if ((global->Frame_Flags==0) && (global->format==V4L2_PIX_FMT_JPEG)) { if (SaveBuff(videoIn->ImageFName,videoIn->buf.bytesused,videoIn->tmpbuffer)) { g_printerr ("Error: Couldn't capture Image to %s \n", videoIn->ImageFName); return(-1); } } else { /* use built in encoder */ jpeg = g_new0(BYTE, ((global->width)*(global->height))>>1); jpeg_struct = g_new0(struct JPEG_ENCODER_STRUCTURE, 1); /* Initialization of JPEG control structure */ initialization (jpeg_struct,global->width,global->height); /* Initialization of Quantization Tables */ initialize_quantization_tables (jpeg_struct); jpeg_size = encode_image(videoIn->framebuffer, jpeg, jpeg_struct, 1, global->width, global->height); if(SaveBuff(videoIn->ImageFName, jpeg_size, jpeg)) { g_printerr ("Error: Couldn't capture Image to %s \n", videoIn->ImageFName); return(-1); } } break; case 1:/*bmp*/ /*24 bits -> 3bytes 32 bits ->4 bytes*/ pim = g_new0(BYTE, (global->width)*(global->height)*3); yuyv2bgr(videoIn->framebuffer,pim,global->width,global->height); if(SaveBPM(videoIn->ImageFName, global->width, global->height, 24, pim)) { g_printerr ("Error: Couldn't capture Image to %s \n", videoIn->ImageFName); return(-1); } break; case 2:/*png*/ /*24 bits -> 3bytes 32 bits ->4 bytes*/ pim = g_new0(BYTE, (global->width)*(global->height)*3); yuyv2rgb(videoIn->framebuffer,pim,global->width,global->height); write_png(videoIn->ImageFName, global->width, global->height, pim); break; case 3:/*raw*/ videoIn->cap_raw = 1; return 1; } if(jpeg_struct) g_free(jpeg_struct); jpeg_struct=NULL; if(jpeg) g_free(jpeg); jpeg = NULL; if(pim) g_free(pim); pim=NULL; return 0; } guvcview-src-1.7.1/src/matroska.c0000775000175000017500000006731212173235416015764 0ustar paulopaulo/*******************************************************************************# # guvcview http://guvcview.sourceforge.net # # # # Paulo Assis # # # # This is a heavily modified version of the matroska interface from x264 # # Copyright (C) 2005 Mike Matsnev # # # # 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # # ********************************************************************************/ #include #include #include #include #include #include #include "ms_time.h" #include "defs.h" #include "video_format.h" #include "matroska.h" #include "acodecs.h" #include "vcodecs.h" #include "lavc_common.h" /** 2 bytes * 3 for EBML IDs, 3 1-byte EBML lengths, 8 bytes for 64 bit * offset, 4 bytes for target EBML ID */ #define MAX_SEEKENTRY_SIZE 21 /** per-cuepoint-track - 3 1-byte EBML IDs, 3 1-byte EBML sizes, 2 * 8-byte uint max */ #define MAX_CUETRACKPOS_SIZE 22 /** per-cuepoint - 2 1-byte EBML IDs, 2 1-byte EBML sizes, 8-byte uint max */ #define MAX_CUEPOINT_SIZE(num_tracks) 12 + MAX_CUETRACKPOS_SIZE*num_tracks /** Some utilities for * float and double conversion to/from int */ union mkv_union_intfloat32 { uint32_t i; float f; }; union mkv_union_intfloat64 { uint64_t i; double f; }; //static float mkv_int2float(uint32_t i) //{ // union mkv_union_intfloat32 v; // v.i = i; // return v.f; //} //static uint32_t mkv_float2int(float f) //{ // union mkv_union_intfloat32 v; // v.f = f; // return v.i; //} //static double mkv_int2double(uint64_t i) //{ // union mkv_union_intfloat64 v; // v.i = i; // return v.f; //} static uint64_t mkv_double2int(double f) { union mkv_union_intfloat64 v; v.f = f; return v.i; } /** get id size */ static int ebml_id_size(unsigned int id) { int bytes = 4, mask = 0x10; while (!(id & (mask << ((bytes - 1) * 8))) && bytes > 0) { mask <<= 1; bytes--; } return bytes; } /** write an id */ static void mkv_put_ebml_id(mkv_Context* MKV, unsigned int id) { int i = ebml_id_size(id); while (i--) io_write_w8(MKV->writer, id >> (i*8)); } /** * Write an EBML size meaning "unknown size". * * @param bytes The number of bytes the size should occupy (maximum: 8). */ static void mkv_put_ebml_size_unknown(mkv_Context* MKV, int bytes) { if(bytes <= 8) //max is 64 bits { io_write_w8(MKV->writer, 0x1ff >> bytes); while (--bytes) io_write_w8(MKV->writer, 0xff); } else fprintf(stderr, "MKV: bad unknown size (%i > 8) bytes)\n", bytes); } /** * Calculate how many bytes are needed to represent a given number in EBML. */ static int ebml_num_size(uint64_t num) { int bytes = 1; while ((num+1) >> bytes*7) bytes++; return bytes; } /** * Write a number in EBML variable length format. * * @param bytes The number of bytes that need to be used to write the number. * If zero, any number of bytes can be used. */ static void mkv_put_ebml_num(mkv_Context* MKV, uint64_t num, int bytes) { int i, needed_bytes = ebml_num_size(num); // sizes larger than this are currently undefined in EBML if(num >= (1ULL<<56)-1) { fprintf(stderr, "MKV: ebml number: %" PRIu64 "\n", num); return; } if (bytes == 0) // don't care how many bytes are used, so use the min bytes = needed_bytes; // the bytes needed to write the given size would exceed the bytes // that we need to use, so write unknown size. This shouldn't happen. if(bytes < needed_bytes) { fprintf(stderr, "MKV: bad requested size for ebml number: %" PRIu64 " (%i < %i)\n", num, bytes, needed_bytes); return; } num |= 1ULL << bytes*7; for (i = bytes - 1; i >= 0; i--) io_write_w8(MKV->writer, num >> i*8); } static void mkv_put_ebml_uint(mkv_Context* MKV, unsigned int elementid, uint64_t val) { int i, bytes = 1; uint64_t tmp = val; while (tmp>>=8) bytes++; mkv_put_ebml_id(MKV, elementid); mkv_put_ebml_num(MKV, bytes, 0); for (i = bytes - 1; i >= 0; i--) io_write_w8(MKV->writer, val >> i*8); } static void mkv_put_ebml_float(mkv_Context* MKV, unsigned int elementid, double val) { mkv_put_ebml_id(MKV, elementid); mkv_put_ebml_num(MKV, 8, 0); io_write_wb64(MKV->writer, mkv_double2int(val)); } static void mkv_put_ebml_binary(mkv_Context* MKV, unsigned int elementid, void *buf, int size) { mkv_put_ebml_id(MKV, elementid); mkv_put_ebml_num(MKV, size, 0); io_write_buf(MKV->writer, buf, size); } static void mkv_put_ebml_string(mkv_Context* MKV, unsigned int elementid, char *str) { mkv_put_ebml_binary(MKV, elementid, str, strlen(str)); } /** * Write a void element of a given size. Useful for reserving space in * the file to be written to later. * * @param size The number of bytes to reserve, which must be at least 2. */ static void mkv_put_ebml_void(mkv_Context* MKV, uint64_t size) { int64_t currentpos = io_get_offset(MKV->writer); if(size < 2) { fprintf(stderr, "MKV: wrong void size %" PRIu64 " < 2", size); } mkv_put_ebml_id(MKV, EBML_ID_VOID); // we need to subtract the length needed to store the size from the // size we need to reserve so 2 cases, we use 8 bytes to store the // size if possible, 1 byte otherwise if (size < 10) mkv_put_ebml_num(MKV, size-1, 0); else mkv_put_ebml_num(MKV, size-9, 8); while(io_get_offset(MKV->writer) < currentpos + size) io_write_w8(MKV->writer, 0); } static ebml_master mkv_start_ebml_master(mkv_Context* MKV, unsigned int elementid, uint64_t expectedsize) { //if 0 reserve max (8 bytes) int bytes = expectedsize ? ebml_num_size(expectedsize) : 8; mkv_put_ebml_id(MKV, elementid); mkv_put_ebml_size_unknown(MKV, bytes); return (ebml_master){ io_get_offset(MKV->writer), bytes }; } static void mkv_end_ebml_master(mkv_Context* MKV, ebml_master master) { int64_t pos = io_get_offset(MKV->writer); if (io_seek(MKV->writer, master.pos - master.sizebytes) < 0) return; mkv_put_ebml_num(MKV, pos - master.pos, master.sizebytes); io_seek(MKV->writer, pos); } //static void mkv_put_xiph_size(mkv_Context* MKV, int size) //{ // int i; // for (i = 0; i < size / 255; i++) // io_write_w8(MKV->writer, 255); // io_write_w8(MKV->writer, size % 255); //} /** * Initialize a mkv_seekhead element to be ready to index level 1 Matroska * elements. If a maximum number of elements is specified, enough space * will be reserved at the current file location to write a seek head of * that size. * * @param segment_offset The absolute offset to the position in the file * where the segment begins. * @param numelements The maximum number of elements that will be indexed * by this seek head, 0 if unlimited. */ static mkv_seekhead * mkv_start_seekhead(mkv_Context* MKV, int64_t segment_offset, int numelements) { mkv_seekhead *new_seekhead = g_new0(mkv_seekhead, 1); if (new_seekhead == NULL) return NULL; new_seekhead->segment_offset = segment_offset; if (numelements > 0) { new_seekhead->filepos = io_get_offset(MKV->writer); // 21 bytes max for a seek entry, 10 bytes max for the SeekHead ID // and size, and 3 bytes to guarantee that an EBML void element // will fit afterwards new_seekhead->reserved_size = numelements * MAX_SEEKENTRY_SIZE + 13; new_seekhead->max_entries = numelements; mkv_put_ebml_void(MKV, new_seekhead->reserved_size); } return new_seekhead; } static int mkv_add_seekhead_entry(mkv_seekhead *seekhead, unsigned int elementid, uint64_t filepos) { mkv_seekhead_entry *entries = seekhead->entries; fprintf(stderr,"MKV: add seekhead entry %i (max %i)\n", seekhead->num_entries, seekhead->max_entries); // don't store more elements than we reserved space for if (seekhead->max_entries > 0 && seekhead->max_entries <= seekhead->num_entries) return -1; entries = g_renew(mkv_seekhead_entry, entries, seekhead->num_entries + 1); //entries = av_realloc(entries, (seekhead->num_entries + 1) * sizeof(mkv_seekhead_entry)); if (entries == NULL) { fprintf(stderr, "MKV: couldn't allocate memory for seekhead entries\n"); return -1; } entries[seekhead->num_entries].elementid = elementid; entries[seekhead->num_entries].segmentpos = filepos - seekhead->segment_offset; seekhead->num_entries++; seekhead->entries = entries; return 0; } /** * Write the seek head to the file and free it. If a maximum number of * elements was specified to mkv_start_seekhead(), the seek head will * be written at the location reserved for it. Otherwise, it is written * at the current location in the file. * * @return The file offset where the seekhead was written, * -1 if an error occurred. */ static int64_t mkv_write_seekhead(mkv_Context* MKV, mkv_seekhead *seekhead) { ebml_master metaseek, seekentry; int64_t currentpos; int i; currentpos = io_get_offset(MKV->writer); if (seekhead->reserved_size > 0) { if (io_seek(MKV->writer, seekhead->filepos) < 0) { fprintf(stderr, "MKV: failed to write seekhead at pos %" PRIu64 "\n", seekhead->filepos); currentpos = -1; goto fail; } } metaseek = mkv_start_ebml_master(MKV, MATROSKA_ID_SEEKHEAD, seekhead->reserved_size); for (i = 0; i < seekhead->num_entries; i++) { mkv_seekhead_entry *entry = &seekhead->entries[i]; seekentry = mkv_start_ebml_master(MKV, MATROSKA_ID_SEEKENTRY, MAX_SEEKENTRY_SIZE); mkv_put_ebml_id(MKV, MATROSKA_ID_SEEKID); mkv_put_ebml_num(MKV, ebml_id_size(entry->elementid), 0); mkv_put_ebml_id(MKV, entry->elementid); mkv_put_ebml_uint(MKV, MATROSKA_ID_SEEKPOSITION, entry->segmentpos); mkv_end_ebml_master(MKV, seekentry); } mkv_end_ebml_master(MKV, metaseek); if (seekhead->reserved_size > 0) { uint64_t remaining = seekhead->filepos + seekhead->reserved_size - io_get_offset(MKV->writer); mkv_put_ebml_void(MKV, remaining); io_seek(MKV->writer, currentpos); currentpos = seekhead->filepos; } fail: g_free(seekhead->entries); g_free(seekhead); return currentpos; } static mkv_cues * mkv_start_cues(int64_t segment_offset) { mkv_cues *cues = g_new0(mkv_cues, 1); if (cues == NULL) return NULL; cues->segment_offset = segment_offset; return cues; } static int mkv_add_cuepoint(mkv_cues *cues, int stream, int64_t ts, int64_t cluster_pos) { mkv_cuepoint *entries = cues->entries; if (ts < 0) return 0; entries = g_renew(mkv_cuepoint, entries, cues->num_entries + 1); //entries = av_realloc(entries, (cues->num_entries + 1) * sizeof(mkv_cuepoint)); if (entries == NULL) return AVERROR(ENOMEM); entries[cues->num_entries].pts = ts; entries[cues->num_entries].tracknum = stream + 1; entries[cues->num_entries].cluster_pos = cluster_pos - cues->segment_offset; cues->num_entries++; cues->entries = entries; return 0; } static int64_t mkv_write_cues(mkv_Context* MKV, mkv_cues *cues, int num_tracks) { ebml_master cues_element; int64_t currentpos; int i, j; currentpos = io_get_offset(MKV->writer); cues_element = mkv_start_ebml_master(MKV, MATROSKA_ID_CUES, 0); for (i = 0; i < cues->num_entries; i++) { ebml_master cuepoint, track_positions; mkv_cuepoint *entry = &cues->entries[i]; uint64_t pts = entry->pts; cuepoint = mkv_start_ebml_master(MKV, MATROSKA_ID_POINTENTRY, MAX_CUEPOINT_SIZE(num_tracks)); mkv_put_ebml_uint(MKV, MATROSKA_ID_CUETIME, pts); // put all the entries from different tracks that have the exact same // timestamp into the same CuePoint for (j = 0; j < cues->num_entries - i && entry[j].pts == pts; j++) { track_positions = mkv_start_ebml_master(MKV, MATROSKA_ID_CUETRACKPOSITION, MAX_CUETRACKPOS_SIZE); mkv_put_ebml_uint(MKV, MATROSKA_ID_CUETRACK , entry[j].tracknum ); mkv_put_ebml_uint(MKV, MATROSKA_ID_CUECLUSTERPOSITION, entry[j].cluster_pos); mkv_end_ebml_master(MKV, track_positions); } i += j - 1; mkv_end_ebml_master(MKV, cuepoint); } mkv_end_ebml_master(MKV, cues_element); return currentpos; } static void mkv_write_codecprivate(mkv_Context* MKV, io_Stream* stream) { if (stream->extra_data_size && stream->extra_data != NULL) mkv_put_ebml_binary(MKV, MATROSKA_ID_CODECPRIVATE, stream->extra_data, stream->extra_data_size); } static int mkv_write_tracks(mkv_Context* MKV) { ebml_master tracks; int i, ret; ret = mkv_add_seekhead_entry(MKV->main_seekhead, MATROSKA_ID_TRACKS, io_get_offset(MKV->writer)); if (ret < 0) return ret; tracks = mkv_start_ebml_master(MKV, MATROSKA_ID_TRACKS, 0); for (i = 0; i < MKV->stream_list_size; i++) { io_Stream* stream = get_stream(MKV->stream_list, i); ebml_master subinfo, track; track = mkv_start_ebml_master(MKV, MATROSKA_ID_TRACKENTRY, 0); mkv_put_ebml_uint (MKV, MATROSKA_ID_TRACKNUMBER , i + 1); mkv_put_ebml_uint (MKV, MATROSKA_ID_TRACKUID , i + 1); mkv_put_ebml_uint (MKV, MATROSKA_ID_TRACKFLAGLACING , 0); // no lacing (yet) mkv_put_ebml_uint(MKV, MATROSKA_ID_TRACKFLAGDEFAULT, 1); char* mkv_codec_name; if(stream->type == STREAM_TYPE_VIDEO) { int codec_index = get_vcodec_index(stream->codec_id); if(codec_index < 0) { fprintf(stderr, "MKV: bad video codec index for id:0x%x\n",stream->codec_id); return -1; } mkv_codec_name = (char *) get_mkvCodec(codec_index); } else { int codec_index = get_acodec_index(stream->codec_id); if(codec_index < 0) { fprintf(stderr, "MKV: bad audio codec index for id:0x%x\n",stream->codec_id); return -1; } mkv_codec_name = (char *) get_mkvACodec(codec_index); } mkv_put_ebml_string(MKV, MATROSKA_ID_CODECID, mkv_codec_name); if (MKV->mode == WEBM_FORMAT && !(stream->codec_id == AV_CODEC_ID_VP8 || stream->codec_id == AV_CODEC_ID_VORBIS)) { fprintf(stderr, "MKV: Only VP8 video and Vorbis audio are supported for WebM.\n"); return -2; } switch (stream->type) { case STREAM_TYPE_VIDEO: mkv_put_ebml_uint(MKV, MATROSKA_ID_TRACKTYPE, MATROSKA_TRACK_TYPE_VIDEO); subinfo = mkv_start_ebml_master(MKV, MATROSKA_ID_TRACKVIDEO, 0); // XXX: interlace flag? mkv_put_ebml_uint (MKV, MATROSKA_ID_VIDEOPIXELWIDTH , stream->width); mkv_put_ebml_uint (MKV, MATROSKA_ID_VIDEOPIXELHEIGHT, stream->height); mkv_put_ebml_uint(MKV, MATROSKA_ID_VIDEODISPLAYWIDTH , stream->width); mkv_put_ebml_uint(MKV, MATROSKA_ID_VIDEODISPLAYHEIGHT, stream->height); mkv_put_ebml_uint(MKV, MATROSKA_ID_VIDEODISPLAYUNIT, 3); mkv_end_ebml_master(MKV, subinfo); break; case STREAM_TYPE_AUDIO: mkv_put_ebml_uint(MKV, MATROSKA_ID_TRACKTYPE, MATROSKA_TRACK_TYPE_AUDIO); //no mkv-specific ID, use ACM mode //put_ebml_string(pb, MATROSKA_ID_CODECID, "A_MS/ACM"); subinfo = mkv_start_ebml_master(MKV, MATROSKA_ID_TRACKAUDIO, 0); mkv_put_ebml_uint(MKV, MATROSKA_ID_AUDIOCHANNELS, stream->a_chans); mkv_put_ebml_float(MKV, MATROSKA_ID_AUDIOSAMPLINGFREQ, stream->a_rate); mkv_put_ebml_uint(MKV, MATROSKA_ID_AUDIOBITDEPTH, stream->a_bits); mkv_end_ebml_master(MKV, subinfo); break; default: fprintf(stderr, "MKV: Only audio and video are supported by the Matroska muxer.\n"); break; } mkv_write_codecprivate(MKV, stream); mkv_end_ebml_master(MKV, track); } mkv_end_ebml_master(MKV, tracks); return 0; } int mkv_write_header(mkv_Context* MKV) { ebml_master ebml_header, segment_info; int ret; ebml_header = mkv_start_ebml_master(MKV, EBML_ID_HEADER, 0); mkv_put_ebml_uint (MKV, EBML_ID_EBMLVERSION , 1); mkv_put_ebml_uint (MKV, EBML_ID_EBMLREADVERSION , 1); mkv_put_ebml_uint (MKV, EBML_ID_EBMLMAXIDLENGTH , 4); mkv_put_ebml_uint (MKV, EBML_ID_EBMLMAXSIZELENGTH , 8); if (MKV->mode == WEBM_FORMAT) mkv_put_ebml_string (MKV, EBML_ID_DOCTYPE , "webm"); else mkv_put_ebml_string (MKV, EBML_ID_DOCTYPE , "matroska"); mkv_put_ebml_uint (MKV, EBML_ID_DOCTYPEVERSION , 2); mkv_put_ebml_uint (MKV, EBML_ID_DOCTYPEREADVERSION , 2); mkv_end_ebml_master(MKV, ebml_header); MKV->segment = mkv_start_ebml_master(MKV, MATROSKA_ID_SEGMENT, 0); MKV->segment_offset = io_get_offset(MKV->writer); // we write 2 seek heads - one at the end of the file to point to each // cluster, and one at the beginning to point to all other level one // elements (including the seek head at the end of the file), which // isn't more than 10 elements if we only write one of each other // currently defined level 1 element MKV->main_seekhead = mkv_start_seekhead(MKV, MKV->segment_offset, 10); //fprintf(stderr, "MKV: allocated main seekhead at 0x%x\n", MKV->main_seekhead); if (!MKV->main_seekhead) { fprintf(stderr,"MKV: couldn't allocate seekhead\n"); return -1; } ret = mkv_add_seekhead_entry(MKV->main_seekhead, MATROSKA_ID_INFO, io_get_offset(MKV->writer)); if (ret < 0) return ret; segment_info = mkv_start_ebml_master(MKV, MATROSKA_ID_INFO, 0); mkv_put_ebml_uint(MKV, MATROSKA_ID_TIMECODESCALE, MKV->timescale); mkv_put_ebml_string(MKV, MATROSKA_ID_MUXINGAPP , "Guvcview Muxer-2013.01"); mkv_put_ebml_string(MKV, MATROSKA_ID_WRITINGAPP, "Guvcview"); /*generate seg uid - 16 byte random int*/ GRand* rand_uid= g_rand_new_with_seed(2); int seg_uid[4] = {0,0,0,0}; seg_uid[0] = g_rand_int_range(rand_uid, G_MININT32, G_MAXINT32); seg_uid[1] = g_rand_int_range(rand_uid, G_MININT32, G_MAXINT32); seg_uid[2] = g_rand_int_range(rand_uid, G_MININT32, G_MAXINT32); seg_uid[3] = g_rand_int_range(rand_uid, G_MININT32, G_MAXINT32); mkv_put_ebml_binary(MKV, MATROSKA_ID_SEGMENTUID, seg_uid, 16); // reserve space for the duration MKV->duration = 0; MKV->duration_offset = io_get_offset(MKV->writer); mkv_put_ebml_void(MKV, 11); // assumes double-precision float to be written mkv_end_ebml_master(MKV, segment_info); ret = mkv_write_tracks(MKV); if (ret < 0) return ret; MKV->cues = mkv_start_cues(MKV->segment_offset); if (MKV->cues == NULL) { fprintf(stderr,"MKV: couldn't allocate cues\n"); return -1; } io_flush_buffer(MKV->writer); return 0; } static int mkv_blockgroup_size(int pkt_size) { int size = pkt_size + 4; size += ebml_num_size(size); size += 2; // EBML ID for block and block duration size += 8; // max size of block duration size += ebml_num_size(size); size += 1; // blockgroup EBML ID return size; } static void mkv_write_block(mkv_Context* MKV, unsigned int blockid, int stream_index, BYTE* data, int size, uint64_t pts, int flags) { mkv_put_ebml_id(MKV, blockid); mkv_put_ebml_num(MKV, size+4, 0); io_write_w8(MKV->writer, 0x80 | (stream_index + 1));// this assumes stream_index is less than 126 io_write_wb16(MKV->writer, pts - MKV->cluster_pts); //pts and cluster_pts are scaled io_write_w8(MKV->writer, flags); io_write_buf(MKV->writer, data, size); } static int mkv_write_packet_internal(mkv_Context* MKV, int stream_index, BYTE* data, int size, int duration, uint64_t pts, int flags) { int keyframe = !!(flags & AV_PKT_FLAG_KEY); int ret; uint64_t ts = pts / MKV->timescale; //scale the time stamp io_Stream* stream = get_stream(MKV->stream_list, stream_index); stream->packet_count++; if (!MKV->cluster_pos) { MKV->cluster_pos = io_get_offset(MKV->writer); MKV->cluster = mkv_start_ebml_master(MKV, MATROSKA_ID_CLUSTER, 0); mkv_put_ebml_uint(MKV, MATROSKA_ID_CLUSTERTIMECODE, MAX(0, ts)); MKV->cluster_pts = MAX(0, ts); } ebml_master blockgroup = mkv_start_ebml_master(MKV, MATROSKA_ID_BLOCKGROUP, mkv_blockgroup_size(size)); mkv_write_block(MKV, MATROSKA_ID_BLOCK, stream_index, data, size, ts, flags); if(duration) mkv_put_ebml_uint(MKV, MATROSKA_ID_BLOCKDURATION, duration); mkv_end_ebml_master(MKV, blockgroup); if (get_stream(MKV->stream_list, stream_index)->type == STREAM_TYPE_VIDEO && keyframe) { //fprintf(stderr,"MKV: add a cue point\n"); ret = mkv_add_cuepoint(MKV->cues, stream_index, ts, MKV->cluster_pos); if (ret < 0) return ret; } MKV->duration = MAX(MKV->duration, ts + duration); return 0; } static int mkv_copy_packet(mkv_Context* MKV, int stream_index, BYTE* data, int size, int duration, uint64_t pts, int flags) { if(size > MKV->pkt_buffer_size) { MKV->pkt_buffer_size = size; MKV->pkt_buffer = g_renew(BYTE, MKV->pkt_buffer, MKV->pkt_buffer_size); } if (!MKV->pkt_buffer) { fprintf(stderr,"MKV: couldn't allocate mem for packet\n"); return -1; } memcpy(MKV->pkt_buffer, data, size); MKV->pkt_size = size; MKV->pkt_duration = duration; MKV->pkt_pts = pts; MKV->pkt_flags = flags; MKV->pkt_stream_index = stream_index; return 0; } /** public interface */ int mkv_write_packet(mkv_Context* MKV, int stream_index, BYTE* data, int size, int duration, uint64_t pts, int flags) { int ret, keyframe = !!(flags & AV_PKT_FLAG_KEY); uint64_t ts = pts; ts -= MKV->first_pts; int cluster_size = io_get_offset(MKV->writer) - MKV->cluster_pos; io_Stream* stream = get_stream(MKV->stream_list, stream_index); // start a new cluster every 5 MB or 5 sec, or 32k / 1 sec for streaming or // after 4k and on a keyframe if (MKV->cluster_pos && ((cluster_size > 32*1024 && ts > MKV->cluster_pts + 1000) || (cluster_size > 5*1024*1024 && ts > MKV->cluster_pts + 5000) || (stream->type == STREAM_TYPE_VIDEO && keyframe && cluster_size > 4*1024))) { //fprintf(stderr, "MKV: Starting new cluster at offset %" PRIu64 " bytes, pts %" PRIu64 "\n", io_get_offset(MKV->writer), ts); mkv_end_ebml_master(MKV, MKV->cluster); MKV->cluster_pos = 0; } // check if we have an audio packet cached if (MKV->pkt_size > 0) { ret = mkv_write_packet_internal(MKV, MKV->pkt_stream_index, MKV->pkt_buffer, MKV->pkt_size, MKV->pkt_duration, MKV->pkt_pts, MKV->pkt_flags); MKV->pkt_size = 0; if (ret < 0) { fprintf(stderr, "MKV: Could not write cached audio packet\n"); return ret; } } // buffer an audio packet to ensure the packet containing the video // keyframe's timecode is contained in the same cluster for WebM if (stream->type == STREAM_TYPE_AUDIO) ret = mkv_copy_packet(MKV, stream_index, data, size, duration, ts, flags); else ret = mkv_write_packet_internal(MKV, stream_index, data, size, duration, ts, flags); return ret; } int mkv_close(mkv_Context* MKV) { int64_t currentpos, cuespos; int ret; // check if we have an audio packet cached if (MKV->pkt_size > 0) { ret = mkv_write_packet_internal(MKV, MKV->pkt_stream_index, MKV->pkt_buffer, MKV->pkt_size, MKV->pkt_duration, MKV->pkt_pts, MKV->pkt_flags); MKV->pkt_size = 0; if (ret < 0) { fprintf(stderr, "MKV: Could not write cached audio packet\n"); return ret; } } if(MKV->cluster_pos) mkv_end_ebml_master(MKV, MKV->cluster); if (MKV->cues->num_entries) { cuespos = mkv_write_cues(MKV, MKV->cues, MKV->stream_list_size); ret = mkv_add_seekhead_entry(MKV->main_seekhead, MATROSKA_ID_CUES, cuespos); if (ret < 0) return ret; } mkv_write_seekhead(MKV, MKV->main_seekhead); // update the duration fprintf(stderr,"MKV: end duration = %" PRIu64 " (%f) \n", MKV->duration, (float) MKV->duration); currentpos = io_get_offset(MKV->writer); io_seek(MKV->writer, MKV->duration_offset); mkv_put_ebml_float(MKV, MATROSKA_ID_DURATION, (float) MKV->duration); io_seek(MKV->writer, currentpos); mkv_end_ebml_master(MKV, MKV->segment); av_freep(&MKV->cues->entries); av_freep(&MKV->cues); return 0; } mkv_Context* mkv_create_context(char* filename, int mode) { mkv_Context* MKV = g_new0(mkv_Context, 1); MKV->writer = io_create_writer(filename, 0); MKV->mode = mode; MKV->main_seekhead = NULL; MKV->cues = NULL; MKV->pkt_buffer = NULL; MKV->stream_list = NULL; MKV->timescale = 1000000; return MKV; } void mkv_destroy_context(mkv_Context* MKV) { io_destroy_writer(MKV->writer); destroy_stream_list(MKV->stream_list, &MKV->stream_list_size); if(MKV->pkt_buffer != NULL) g_free(MKV->pkt_buffer); g_free(MKV); } io_Stream* mkv_add_video_stream(mkv_Context *MKV, int32_t width, int32_t height, int32_t codec_id) { io_Stream* stream = add_new_stream(&MKV->stream_list, &MKV->stream_list_size); stream->type = STREAM_TYPE_VIDEO; stream->width = width; stream->height = height; stream->codec_id = codec_id; stream->indexes = NULL; return stream; } io_Stream* mkv_add_audio_stream(mkv_Context *MKV, int32_t channels, int32_t rate, int32_t bits, int32_t mpgrate, int32_t codec_id, int32_t format) { io_Stream* stream = add_new_stream(&MKV->stream_list, &MKV->stream_list_size); stream->type = STREAM_TYPE_AUDIO; stream->a_rate = rate; stream->a_bits = bits; stream->mpgrate = mpgrate; stream->a_vbr = 0; stream->codec_id = codec_id; stream->a_fmt = format; stream->indexes = NULL; return stream; } guvcview-src-1.7.1/src/v4l2_controls.c0000664000175000017500000015730312173235416016652 0ustar paulopaulo/*******************************************************************************# # guvcview http://guvcview.sourceforge.net # # # # Paulo Assis # # # # 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # # ********************************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include "v4l2uvc.h" #include "string_utils.h" #include "v4l2_controls.h" #include "v4l2_dyna_ctrls.h" #include "callbacks.h" /* * don't use xioctl for control query when using V4L2_CTRL_FLAG_NEXT_CTRL */ static int query_ioctl(int hdevice, int current_ctrl, struct v4l2_queryctrl *ctrl) { int ret = 0; int tries = 4; do { if(ret) ctrl->id = current_ctrl | V4L2_CTRL_FLAG_NEXT_CTRL; ret = v4l2_ioctl(hdevice, VIDIOC_QUERYCTRL, ctrl); } while (ret && tries-- && ((errno == EIO || errno == EPIPE || errno == ETIMEDOUT))); return(ret); } gboolean is_special_case_control(int control_id) { switch(control_id) { case V4L2_CID_PAN_RELATIVE: case V4L2_CID_TILT_RELATIVE: case V4L2_CID_PAN_RESET: case V4L2_CID_TILT_RESET: case V4L2_CID_LED1_MODE_LOGITECH: case V4L2_CID_RAW_BITS_PER_PIXEL_LOGITECH: return TRUE; break; default: return FALSE; break; } } /* * returns a Control structure NULL terminated linked list * with all of the device controls with Read/Write permissions. * These are the only ones that we can store/restore. * Also sets num_ctrls with the controls count. */ Control *get_control_list(int hdevice, int *num_ctrls) { int ret=0; Control *first = NULL; Control *current = NULL; Control *control = NULL; int n = 0; struct v4l2_queryctrl queryctrl={0}; struct v4l2_querymenu querymenu={0}; int currentctrl = 0; queryctrl.id = 0 | V4L2_CTRL_FLAG_NEXT_CTRL; if ((ret=query_ioctl (hdevice, currentctrl, &queryctrl)) == 0) { // The driver supports the V4L2_CTRL_FLAG_NEXT_CTRL flag queryctrl.id = 0; currentctrl= queryctrl.id; queryctrl.id |= V4L2_CTRL_FLAG_NEXT_CTRL; while((ret = query_ioctl(hdevice, currentctrl, &queryctrl)), ret ? errno != EINVAL : 1) { struct v4l2_querymenu *menu = NULL; // Prevent infinite loop for buggy V4L2_CTRL_FLAG_NEXT_CTRL implementations if(ret && queryctrl.id <= currentctrl) { printf("buggy V4L2_CTRL_FLAG_NEXT_CTRL flag implementation (workaround enabled)\n"); // increment the control id manually currentctrl++; queryctrl.id = currentctrl; goto next_control; } else if ((queryctrl.id == V4L2_CTRL_FLAG_NEXT_CTRL) || (!ret && queryctrl.id == currentctrl)) { printf("buggy V4L2_CTRL_FLAG_NEXT_CTRL flag implementation (failed enumeration for id=0x%08x)\n", queryctrl.id); // stop control enumeration *num_ctrls = n; return first; } currentctrl = queryctrl.id; // skip if control failed if (ret) { printf("Control 0x%08x failed to query\n", queryctrl.id); goto next_control; } // skip if control is disabled if (queryctrl.flags & V4L2_CTRL_FLAG_DISABLED) { printf("Disabling control 0x%08x\n", queryctrl.id); goto next_control; } //check menu items if needed if(queryctrl.type == V4L2_CTRL_TYPE_MENU) { int i = 0; int ret = 0; for (querymenu.index = queryctrl.minimum; querymenu.index <= queryctrl.maximum; querymenu.index++) { querymenu.id = queryctrl.id; ret = xioctl (hdevice, VIDIOC_QUERYMENU, &querymenu); if (ret < 0) continue; if(!menu) menu = g_new0(struct v4l2_querymenu, i+1); else menu = g_renew(struct v4l2_querymenu, menu, i+1); memcpy(&(menu[i]), &querymenu, sizeof(struct v4l2_querymenu)); i++; } if(!menu) menu = g_new0(struct v4l2_querymenu, i+1); else menu = g_renew(struct v4l2_querymenu, menu, i+1); menu[i].id = querymenu.id; menu[i].index = queryctrl.maximum+1; menu[i].name[0] = 0; } // Add the control to the linked list control = calloc (1, sizeof(Control)); memcpy(&(control->control), &queryctrl, sizeof(struct v4l2_queryctrl)); control->class = (control->control.id & 0xFFFF0000); //add the menu adress (NULL if not a menu) control->menu = menu; #ifndef DISABLE_STRING_CONTROLS //allocate a string with max size if needed if(control->control.type == V4L2_CTRL_TYPE_STRING) control->string = calloc(control->control.maximum + 1, sizeof(char)); else #endif control->string = NULL; if(first != NULL) { current->next = control; current = control; } else { first = control; current = first; } n++; next_control: queryctrl.id |= V4L2_CTRL_FLAG_NEXT_CTRL; } } else { printf("NEXT_CTRL flag not supported\n"); int currentctrl; for(currentctrl = V4L2_CID_BASE; currentctrl < V4L2_CID_LASTP1; currentctrl++) { struct v4l2_querymenu *menu = NULL; queryctrl.id = currentctrl; ret = xioctl(hdevice, VIDIOC_QUERYCTRL, &queryctrl); if (ret || (queryctrl.flags & V4L2_CTRL_FLAG_DISABLED) ) continue; //check menu items if needed if(queryctrl.type == V4L2_CTRL_TYPE_MENU) { int i = 0; int ret = 0; for (querymenu.index = queryctrl.minimum; querymenu.index <= queryctrl.maximum; querymenu.index++) { querymenu.id = queryctrl.id; ret = xioctl (hdevice, VIDIOC_QUERYMENU, &querymenu); if (ret < 0) break; if(!menu) menu = g_new0(struct v4l2_querymenu, i+1); else menu = g_renew(struct v4l2_querymenu, menu, i+1); memcpy(&(menu[i]), &querymenu, sizeof(struct v4l2_querymenu)); i++; } if(!menu) menu = g_new0(struct v4l2_querymenu, i+1); else menu = g_renew(struct v4l2_querymenu, menu, i+1); menu[i].id = querymenu.id; menu[i].index = queryctrl.maximum+1; menu[i].name[0] = 0; } // Add the control to the linked list control = calloc (1, sizeof(Control)); memcpy(&(control->control), &queryctrl, sizeof(struct v4l2_queryctrl)); control->class = 0x00980000; //add the menu adress (NULL if not a menu) control->menu = menu; if(first != NULL) { current->next = control; current = control; } else { first = control; current = first; } n++; } for (queryctrl.id = V4L2_CID_PRIVATE_BASE;;queryctrl.id++) { struct v4l2_querymenu *menu = NULL; ret = xioctl(hdevice, VIDIOC_QUERYCTRL, &queryctrl); if(ret) break; else if (queryctrl.flags & V4L2_CTRL_FLAG_DISABLED) continue; //check menu items if needed if(queryctrl.type == V4L2_CTRL_TYPE_MENU) { int i = 0; int ret = 0; for (querymenu.index = queryctrl.minimum; querymenu.index <= queryctrl.maximum; querymenu.index++) { querymenu.id = queryctrl.id; ret = xioctl (hdevice, VIDIOC_QUERYMENU, &querymenu); if (ret < 0) break; if(!menu) menu = g_new0(struct v4l2_querymenu, i+1); else menu = g_renew(struct v4l2_querymenu, menu, i+1); memcpy(&(menu[i]), &querymenu, sizeof(struct v4l2_querymenu)); i++; } if(!menu) menu = g_new0(struct v4l2_querymenu, i+1); else menu = g_renew(struct v4l2_querymenu, menu, i+1); menu[i].id = querymenu.id; menu[i].index = queryctrl.maximum+1; menu[i].name[0] = 0; } // Add the control to the linked list control = calloc (1, sizeof(Control)); memcpy(&(control->control), &queryctrl, sizeof(struct v4l2_queryctrl)); control->class = 0x00980000; //add the menu adress (NULL if not a menu) control->menu = menu; if(first != NULL) { current->next = control; current = control; } else { first = control; current = first; } n++; } } *num_ctrls = n; return first; } /* * called when setting controls */ static void update_ctrl_flags(Control *control_list, int id) { switch (id) { case V4L2_CID_EXPOSURE_AUTO: { Control *ctrl_this = get_ctrl_by_id(control_list, id ); if(ctrl_this == NULL) break; switch (ctrl_this->value) { case V4L2_EXPOSURE_AUTO: { //printf("auto\n"); Control *ctrl_that = get_ctrl_by_id(control_list, V4L2_CID_IRIS_ABSOLUTE ); if (ctrl_that) ctrl_that->control.flags |= V4L2_CTRL_FLAG_GRABBED; ctrl_that = get_ctrl_by_id(control_list, V4L2_CID_IRIS_RELATIVE ); if (ctrl_that) ctrl_that->control.flags |= V4L2_CTRL_FLAG_GRABBED; ctrl_that = get_ctrl_by_id(control_list, V4L2_CID_EXPOSURE_ABSOLUTE ); if (ctrl_that) ctrl_that->control.flags |= V4L2_CTRL_FLAG_GRABBED; } break; case V4L2_EXPOSURE_APERTURE_PRIORITY: { //printf("AP\n"); Control *ctrl_that = get_ctrl_by_id(control_list, V4L2_CID_EXPOSURE_ABSOLUTE ); if (ctrl_that) ctrl_that->control.flags |= V4L2_CTRL_FLAG_GRABBED; ctrl_that = get_ctrl_by_id(control_list, V4L2_CID_IRIS_ABSOLUTE ); if (ctrl_that) ctrl_that->control.flags &= !(V4L2_CTRL_FLAG_GRABBED); ctrl_that = get_ctrl_by_id(control_list, V4L2_CID_IRIS_RELATIVE ); if (ctrl_that) ctrl_that->control.flags &= !(V4L2_CTRL_FLAG_GRABBED); } break; case V4L2_EXPOSURE_SHUTTER_PRIORITY: { //printf("SP\n"); Control *ctrl_that = get_ctrl_by_id(control_list, V4L2_CID_IRIS_ABSOLUTE ); if (ctrl_that) ctrl_that->control.flags |= V4L2_CTRL_FLAG_GRABBED; ctrl_that = get_ctrl_by_id(control_list, V4L2_CID_IRIS_RELATIVE ); if (ctrl_that) ctrl_that->control.flags |= V4L2_CTRL_FLAG_GRABBED; ctrl_that = get_ctrl_by_id(control_list, V4L2_CID_EXPOSURE_ABSOLUTE ); if (ctrl_that) ctrl_that->control.flags &= !(V4L2_CTRL_FLAG_GRABBED); } break; default: { //printf("manual\n"); Control *ctrl_that = get_ctrl_by_id(control_list, V4L2_CID_EXPOSURE_ABSOLUTE ); if (ctrl_that) ctrl_that->control.flags &= !(V4L2_CTRL_FLAG_GRABBED); ctrl_that = get_ctrl_by_id(control_list, V4L2_CID_IRIS_ABSOLUTE ); if (ctrl_that) ctrl_that->control.flags &= !(V4L2_CTRL_FLAG_GRABBED); ctrl_that = get_ctrl_by_id(control_list, V4L2_CID_IRIS_RELATIVE ); if (ctrl_that) ctrl_that->control.flags &= !(V4L2_CTRL_FLAG_GRABBED); } break; } } break; case V4L2_CID_FOCUS_AUTO: { Control *ctrl_this = get_ctrl_by_id(control_list, id ); if(ctrl_this == NULL) break; if(ctrl_this->value > 0) { Control *ctrl_that = get_ctrl_by_id(control_list, V4L2_CID_FOCUS_ABSOLUTE); if (ctrl_that) ctrl_that->control.flags |= V4L2_CTRL_FLAG_GRABBED; ctrl_that = get_ctrl_by_id(control_list, V4L2_CID_FOCUS_RELATIVE); if (ctrl_that) ctrl_that->control.flags |= V4L2_CTRL_FLAG_GRABBED; } else { Control *ctrl_that = get_ctrl_by_id(control_list, V4L2_CID_FOCUS_ABSOLUTE); if (ctrl_that) ctrl_that->control.flags &= !(V4L2_CTRL_FLAG_GRABBED); ctrl_that = get_ctrl_by_id(control_list, V4L2_CID_FOCUS_RELATIVE); if (ctrl_that) ctrl_that->control.flags &= !(V4L2_CTRL_FLAG_GRABBED); } } break; case V4L2_CID_HUE_AUTO: { Control *ctrl_this = get_ctrl_by_id(control_list, id ); if(ctrl_this == NULL) break; if(ctrl_this->value > 0) { Control *ctrl_that = get_ctrl_by_id(control_list, V4L2_CID_HUE); if (ctrl_that) ctrl_that->control.flags |= V4L2_CTRL_FLAG_GRABBED; } else { Control *ctrl_that = get_ctrl_by_id(control_list, V4L2_CID_HUE); if (ctrl_that) ctrl_that->control.flags &= !(V4L2_CTRL_FLAG_GRABBED); } } break; case V4L2_CID_AUTO_WHITE_BALANCE: { Control *ctrl_this = get_ctrl_by_id(control_list, id ); if(ctrl_this == NULL) break; if(ctrl_this->value > 0) { Control *ctrl_that = get_ctrl_by_id(control_list, V4L2_CID_WHITE_BALANCE_TEMPERATURE); if (ctrl_that) ctrl_that->control.flags |= V4L2_CTRL_FLAG_GRABBED; ctrl_that = get_ctrl_by_id(control_list, V4L2_CID_BLUE_BALANCE); if (ctrl_that) ctrl_that->control.flags |= V4L2_CTRL_FLAG_GRABBED; ctrl_that = get_ctrl_by_id(control_list, V4L2_CID_RED_BALANCE); if (ctrl_that) ctrl_that->control.flags |= V4L2_CTRL_FLAG_GRABBED; } else { Control *ctrl_that = get_ctrl_by_id(control_list, V4L2_CID_WHITE_BALANCE_TEMPERATURE); if (ctrl_that) ctrl_that->control.flags &= !(V4L2_CTRL_FLAG_GRABBED); ctrl_that = get_ctrl_by_id(control_list, V4L2_CID_BLUE_BALANCE); if (ctrl_that) ctrl_that->control.flags &= !(V4L2_CTRL_FLAG_GRABBED); ctrl_that = get_ctrl_by_id(control_list, V4L2_CID_RED_BALANCE); if (ctrl_that) ctrl_that->control.flags &= !(V4L2_CTRL_FLAG_GRABBED); } } break; } } /* * update flags of entire control list */ static void update_ctrl_list_flags(Control *control_list) { Control *current = control_list; Control *next = current->next; for(; next != NULL; current = next, next = current->next) update_ctrl_flags(control_list, current->control.id); } /* * Disables special auto-controls with higher IDs than * their absolute/relative counterparts * this is needed before restoring controls state */ void disable_special_auto (int hdevice, Control *control_list, int id) { Control *current = get_ctrl_by_id(control_list, id); if(current && ((id == V4L2_CID_FOCUS_AUTO) || (id == V4L2_CID_HUE_AUTO))) { current->value = 0; set_ctrl(hdevice, control_list, id); } } static void update_widget_state(Control *control_list, void *all_data) { Control *current = control_list; Control *next = current->next; for(; next != NULL; current = next, next = current->next) { if(all_data && current->widget) { switch(current->control.type) { case V4L2_CTRL_TYPE_BOOLEAN: //disable widget signals g_signal_handlers_block_by_func(GTK_TOGGLE_BUTTON(current->widget), G_CALLBACK (check_changed), all_data); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (current->widget), current->value ? TRUE : FALSE); //enable widget signals g_signal_handlers_unblock_by_func(GTK_TOGGLE_BUTTON(current->widget), G_CALLBACK (check_changed), all_data); break; case V4L2_CTRL_TYPE_INTEGER: if(!(is_special_case_control(current->control.id))) { //disable widget signals g_signal_handlers_block_by_func(GTK_SCALE (current->widget), G_CALLBACK (slider_changed), all_data); gtk_range_set_value (GTK_RANGE (current->widget), current->value); //enable widget signals g_signal_handlers_unblock_by_func(GTK_SCALE (current->widget), G_CALLBACK (slider_changed), all_data); if(current->spinbutton) { //disable widget signals g_signal_handlers_block_by_func(GTK_SPIN_BUTTON(current->spinbutton), G_CALLBACK (spin_changed), all_data); gtk_spin_button_set_value (GTK_SPIN_BUTTON(current->spinbutton), current->value); //enable widget signals g_signal_handlers_unblock_by_func(GTK_SPIN_BUTTON(current->spinbutton), G_CALLBACK (spin_changed), all_data); } } break; case V4L2_CTRL_TYPE_MENU: { //disable widget signals g_signal_handlers_block_by_func(GTK_COMBO_BOX_TEXT(current->widget), G_CALLBACK (combo_changed), all_data); //get new index int j = 0; int def = 0; for (j = 0; current->menu[j].index <= current->control.maximum; j++) { if(current->value == current->menu[j].index) def = j; } gtk_combo_box_set_active(GTK_COMBO_BOX(current->widget), def); //enable widget signals g_signal_handlers_unblock_by_func(GTK_COMBO_BOX_TEXT(current->widget), G_CALLBACK (combo_changed), all_data); break; } default: break; } } if((current->control.flags & V4L2_CTRL_FLAG_GRABBED) || (current->control.flags & V4L2_CTRL_FLAG_DISABLED)) { if(current->label) gtk_widget_set_sensitive (current->label, FALSE); if(current->widget) gtk_widget_set_sensitive (current->widget, FALSE); if(current->spinbutton) gtk_widget_set_sensitive (current->spinbutton, FALSE); } else { if(current->label) gtk_widget_set_sensitive (current->label, TRUE); if(current->widget) gtk_widget_set_sensitive (current->widget, TRUE); if(current->spinbutton) gtk_widget_set_sensitive (current->spinbutton, TRUE); } } } /* * creates the control associated widgets for all controls in the list */ void create_control_widgets(Control *control_list, void *all_data, int control_only, int verbose) { struct ALL_DATA *data = (struct ALL_DATA *) all_data; struct vdIn *videoIn = data->videoIn; Control *current; int i = 0; for(current = control_list; current != NULL; current = current->next) { get_ctrl(videoIn->fd, control_list, current->control.id, all_data); if (verbose) { g_print("control[%d]: 0x%x",i ,current->control.id); g_print (" %s, %d:%d:%d, default %d , current %d\n", current->control.name, current->control.minimum, current->control.maximum, current->control.step, current->control.default_value, current->value); } if(!current->control.step) current->control.step = 1; gchar *tmp; tmp = g_strdup_printf ("%s:", gettext((char *) current->control.name)); current->label = gtk_label_new (tmp); g_free(tmp); gtk_widget_show (current->label); gtk_misc_set_alignment (GTK_MISC (current->label), 1, 0.5); switch(current->control.type) { #ifndef DISABLE_STRING_CONTROLS case V4L2_CTRL_TYPE_STRING: //text box and set button break; #endif case V4L2_CTRL_TYPE_INTEGER64: //slider break; case V4L2_CTRL_TYPE_BUTTON: { current->widget = gtk_button_new_with_label(" "); gtk_widget_show (current->widget); g_object_set_data (G_OBJECT (current->widget), "control_info", GINT_TO_POINTER(current->control.id)); g_signal_connect (GTK_BUTTON(current->widget), "clicked", G_CALLBACK (button_clicked), all_data); } break; case V4L2_CTRL_TYPE_INTEGER: { switch (current->control.id) { //special cases case V4L2_CID_PAN_RELATIVE: case V4L2_CID_TILT_RELATIVE: { //videoIn->PanTilt++; current->widget = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 1); GtkWidget *PanTilt1 = NULL; GtkWidget *PanTilt2 = NULL; if(current->control.id == V4L2_CID_PAN_RELATIVE) { PanTilt1 = gtk_button_new_with_label(_("Left")); PanTilt2 = gtk_button_new_with_label(_("Right")); } else { PanTilt1 = gtk_button_new_with_label(_("Down")); PanTilt2 = gtk_button_new_with_label(_("Up")); } gtk_widget_show (PanTilt1); gtk_widget_show (PanTilt2); gtk_box_pack_start(GTK_BOX(current->widget),PanTilt1,TRUE,TRUE,2); gtk_box_pack_start(GTK_BOX(current->widget),PanTilt2,TRUE,TRUE,2); g_object_set_data (G_OBJECT (PanTilt1), "control_info", GINT_TO_POINTER(current->control.id)); g_object_set_data (G_OBJECT (PanTilt2), "control_info", GINT_TO_POINTER(current->control.id)); g_signal_connect (GTK_BUTTON(PanTilt1), "clicked", G_CALLBACK (button_PanTilt1_clicked), all_data); g_signal_connect (GTK_BUTTON(PanTilt2), "clicked", G_CALLBACK (button_PanTilt2_clicked), all_data); gtk_widget_show (current->widget); current->spinbutton = gtk_spin_button_new_with_range(-256, 256, 64); /*can't edit the spin value by hand*/ gtk_editable_set_editable(GTK_EDITABLE(current->spinbutton),FALSE); gtk_spin_button_set_value (GTK_SPIN_BUTTON(current->spinbutton), 128); gtk_widget_show (current->spinbutton); }; break; case V4L2_CID_PAN_RESET: case V4L2_CID_TILT_RESET: { current->widget = gtk_button_new_with_label(" "); gtk_widget_show (current->widget); g_object_set_data (G_OBJECT (current->widget), "control_info", GINT_TO_POINTER(current->control.id)); g_signal_connect (GTK_BUTTON(current->widget), "clicked", G_CALLBACK (button_clicked), all_data); }; break; case V4L2_CID_LED1_MODE_LOGITECH: { char* LEDMenu[4] = {_("Off"),_("On"),_("Blinking"),_("Auto")}; /*turn it into a menu control*/ if(!current->menu) current->menu = g_new0(struct v4l2_querymenu, 4+1); else current->menu = g_renew(struct v4l2_querymenu, current->menu, 4+1); current->menu[0].id = current->control.id; current->menu[0].index = 0; current->menu[0].name[0] = 'N'; //just set something here current->menu[1].id = current->control.id; current->menu[1].index = 1; current->menu[1].name[0] = 'O'; current->menu[2].id = current->control.id; current->menu[2].index = 2; current->menu[2].name[0] = 'B'; current->menu[3].id = current->control.id; current->menu[3].index = 3; current->menu[3].name[0] = 'A'; current->menu[4].id = current->control.id; current->menu[4].index = current->control.maximum+1; current->menu[4].name[0] = '\0'; int j = 0; int def = 0; current->widget = gtk_combo_box_text_new (); for (j = 0; current->menu[j].index <= current->control.maximum; j++) { if (verbose) printf("adding menu entry %d: %d, %s\n",j, current->menu[j].index, current->menu[j].name); gtk_combo_box_text_append_text ( GTK_COMBO_BOX_TEXT (current->widget), (char *) LEDMenu[j]); if(current->value == current->menu[j].index) def = j; } gtk_combo_box_set_active (GTK_COMBO_BOX(current->widget), def); gtk_widget_show (current->widget); g_object_set_data (G_OBJECT (current->widget), "control_info", GINT_TO_POINTER(current->control.id)); //connect signal g_signal_connect (GTK_COMBO_BOX_TEXT(current->widget), "changed", G_CALLBACK (combo_changed), all_data); }; break; case V4L2_CID_RAW_BITS_PER_PIXEL_LOGITECH: { /*turn it into a menu control*/ char* BITSMenu[2] = {_("8 bit"),_("12 bit")}; /*turn it into a menu control*/ if(!current->menu) current->menu = g_new0(struct v4l2_querymenu, 2+1); else current->menu = g_renew(struct v4l2_querymenu, current->menu, 2+1); current->menu[0].id = current->control.id; current->menu[0].index = 0; current->menu[0].name[0] = 'o'; //just set something here current->menu[1].id = current->control.id; current->menu[1].index = 1; current->menu[1].name[0] = 'd'; current->menu[2].id = current->control.id; current->menu[2].index = 2; current->menu[2].name[0] = '\0'; int j = 0; int def = 0; current->widget = gtk_combo_box_text_new (); for (j = 0; current->menu[j].index <= current->control.maximum; j++) { if (verbose) printf("adding menu entry %d: %d, %s\n",j, current->menu[j].index, current->menu[j].name); gtk_combo_box_text_append_text ( GTK_COMBO_BOX_TEXT (current->widget), (char *) BITSMenu[j]); if(current->value == current->menu[j].index) def = j; } gtk_combo_box_set_active (GTK_COMBO_BOX(current->widget), def); gtk_widget_show (current->widget); g_object_set_data (G_OBJECT (current->widget), "control_info", GINT_TO_POINTER(current->control.id)); //connect signal g_signal_connect (GTK_COMBO_BOX_TEXT(current->widget), "changed", G_CALLBACK (combo_changed), all_data); }; break; default: //standard case - hscale { /* check for valid range */ if((current->control.maximum > current->control.minimum) && (current->control.step != 0)) { GtkAdjustment *adjustment = gtk_adjustment_new ( current->value, current->control.minimum, current->control.maximum, current->control.step, current->control.step*10, 0); current->widget = gtk_scale_new (GTK_ORIENTATION_HORIZONTAL, adjustment); gtk_scale_set_draw_value (GTK_SCALE (current->widget), FALSE); gtk_range_set_round_digits(GTK_RANGE (current->widget), 0); gtk_widget_show (current->widget); current->spinbutton = gtk_spin_button_new(adjustment,current->control.step, 0); /*can't edit the spin value by hand*/ gtk_editable_set_editable(GTK_EDITABLE(current->spinbutton),TRUE); gtk_widget_show (current->spinbutton); g_object_set_data (G_OBJECT (current->widget), "control_info", GINT_TO_POINTER(current->control.id)); g_object_set_data (G_OBJECT (current->spinbutton), "control_info", GINT_TO_POINTER(current->control.id)); //connect signal g_signal_connect (GTK_SCALE(current->widget), "value-changed", G_CALLBACK (slider_changed), all_data); g_signal_connect(GTK_SPIN_BUTTON(current->spinbutton),"value-changed", G_CALLBACK (spin_changed), all_data); } else { printf("INVALID RANGE (MAX <= MIN) for control id: 0x%08x \n", current->control.id); } }; break; }; }; break; case V4L2_CTRL_TYPE_MENU: { if(current->menu) { int j = 0; int def = 0; current->widget = gtk_combo_box_text_new (); for (j = 0; current->menu[j].index <= current->control.maximum; j++) { if (verbose) printf("adding menu entry %d: %d, %s\n",j, current->menu[j].index, current->menu[j].name); gtk_combo_box_text_append_text ( GTK_COMBO_BOX_TEXT (current->widget), (char *) current->menu[j].name); if(current->value == current->menu[j].index) def = j; } gtk_combo_box_set_active (GTK_COMBO_BOX(current->widget), def); gtk_widget_show (current->widget); g_object_set_data (G_OBJECT (current->widget), "control_info", GINT_TO_POINTER(current->control.id)); //connect signal g_signal_connect (GTK_COMBO_BOX_TEXT(current->widget), "changed", G_CALLBACK (combo_changed), all_data); } } break; case V4L2_CTRL_TYPE_BOOLEAN: { if(current->control.id ==V4L2_CID_DISABLE_PROCESSING_LOGITECH) { //a little hack :D we use the spin widget as a combo current->spinbutton = gtk_combo_box_text_new (); gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(current->spinbutton), "GBGB... | RGRG..."); gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(current->spinbutton), "GRGR... | BGBG..."); gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(current->spinbutton), "BGBG... | GRGR..."); gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(current->spinbutton), "RGRG... | GBGB..."); gtk_combo_box_set_active(GTK_COMBO_BOX(current->spinbutton), 0); gtk_widget_show (current->spinbutton); g_signal_connect (GTK_COMBO_BOX_TEXT (current->spinbutton), "changed", G_CALLBACK (pix_ord_changed), all_data); videoIn->isbayer = (current->value ? TRUE : FALSE); } current->widget = gtk_check_button_new(); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (current->widget), current->value ? TRUE : FALSE); gtk_widget_show (current->widget); g_object_set_data (G_OBJECT (current->widget), "control_info", GINT_TO_POINTER(current->control.id)); //connect signal g_signal_connect (GTK_TOGGLE_BUTTON(current->widget), "toggled", G_CALLBACK (check_changed), all_data); } break; default: printf("control type: 0x%08x not supported\n", current->control.type); break; } } update_widget_state(control_list, all_data); } /* * Returns the Control structure corresponding to control id, * from the control list. */ Control *get_ctrl_by_id(Control *control_list, int id) { Control *current = control_list; Control *next = current->next; for(; next != NULL; current = next, next = current->next) { if(current->control.id == id) return (current); } if(current->control.id == id) return (current); else//no id match return(NULL); } /* * Goes through the control list and gets the controls current values * also updates flags and widget states */ void get_ctrl_values (int hdevice, Control *control_list, int num_controls, void *all_data) { int ret = 0; struct v4l2_ext_control clist[num_controls]; Control *current = control_list; Control *next = current->next; int count = 0; int i = 0; for(; next != NULL; current = next, next = current->next) { if(current->control.flags & V4L2_CTRL_FLAG_WRITE_ONLY) continue; clist[count].id = current->control.id; #ifndef DISABLE_STRING_CONTROLS clist[count].size = 0; if(current->control.type == V4L2_CTRL_TYPE_STRING) { clist[count].size = current->control.maximum + 1; clist[count].string = current->string; } #endif count++; if((next == NULL) || (next->class != current->class)) { struct v4l2_ext_controls ctrls = {0}; ctrls.ctrl_class = current->class; ctrls.count = count; ctrls.controls = clist; ret = xioctl(hdevice, VIDIOC_G_EXT_CTRLS, &ctrls); if(ret) { printf("VIDIOC_G_EXT_CTRLS failed\n"); struct v4l2_control ctrl; //get the controls one by one if( current->class == V4L2_CTRL_CLASS_USER) { printf(" using VIDIOC_G_CTRL for user class controls\n"); for(i=0; i < count; i++) { ctrl.id = clist[i].id; ctrl.value = 0; ret = xioctl(hdevice, VIDIOC_G_CTRL, &ctrl); if(ret) continue; clist[i].value = ctrl.value; } } else { printf(" using VIDIOC_G_EXT_CTRLS on single controls for class: 0x%08x\n", current->class); for(i=0;i < count; i++) { ctrls.count = 1; ctrls.controls = &clist[i]; ret = xioctl(hdevice, VIDIOC_G_EXT_CTRLS, &ctrls); if(ret) printf("control id: 0x%08x failed to get (error %i)\n", clist[i].id, ret); } } } //fill in the values on the control list for(i=0; icontrol.type) { #ifndef DISABLE_STRING_CONTROLS case V4L2_CTRL_TYPE_STRING: //string gets set on VIDIOC_G_EXT_CTRLS //add the maximum size to value ctrl->value = clist[i].size; break; #endif case V4L2_CTRL_TYPE_INTEGER64: ctrl->value64 = clist[i].value64; break; default: ctrl->value = clist[i].value; //printf("control %i [0x%08x] = %i\n", // i, clist[i].id, clist[i].value); break; } } count = 0; } } update_ctrl_list_flags(control_list); update_widget_state(control_list, all_data); } /* * Gets the value for control id * and updates control flags and widgets */ int get_ctrl(int hdevice, Control *control_list, int id, void *all_data) { Control *control = get_ctrl_by_id(control_list, id ); int ret = 0; if(!control) return (-1); if(control->control.flags & V4L2_CTRL_FLAG_WRITE_ONLY) return (-1); if( control->class == V4L2_CTRL_CLASS_USER) { struct v4l2_control ctrl; //printf(" using VIDIOC_G_CTRL for user class controls\n"); ctrl.id = control->control.id; ctrl.value = 0; ret = xioctl(hdevice, VIDIOC_G_CTRL, &ctrl); if(ret) printf("control id: 0x%08x failed to get value (error %i)\n", ctrl.id, ret); else control->value = ctrl.value; } else { //printf(" using VIDIOC_G_EXT_CTRLS on single controls for class: 0x%08x\n", // current->class); struct v4l2_ext_controls ctrls = {0}; struct v4l2_ext_control ctrl = {0}; ctrl.id = control->control.id; #ifndef DISABLE_STRING_CONTROLS ctrl.size = 0; if(control->control.type == V4L2_CTRL_TYPE_STRING) { ctrl.size = control->control.maximum + 1; ctrl.string = control->string; } #endif ctrls.ctrl_class = control->class; ctrls.count = 1; ctrls.controls = &ctrl; ret = xioctl(hdevice, VIDIOC_G_EXT_CTRLS, &ctrls); if(ret) printf("control id: 0x%08x failed to get value (error %i)\n", ctrl.id, ret); else { switch(control->control.type) { #ifndef DISABLE_STRING_CONTROLS case V4L2_CTRL_TYPE_STRING: //string gets set on VIDIOC_G_EXT_CTRLS //add the maximum size to value control->value = ctrl.size; break; #endif case V4L2_CTRL_TYPE_INTEGER64: control->value64 = ctrl.value64; break; default: control->value = ctrl.value; //printf("control %i [0x%08x] = %i\n", // i, clist[i].id, clist[i].value); break; } } } update_ctrl_flags(control_list, id); update_widget_state(control_list, all_data); return (ret); } /* * Goes through the control list and tries to set the controls values */ void set_ctrl_values (int hdevice, Control *control_list, int num_controls) { int ret = 0; struct v4l2_ext_control clist[num_controls]; Control *current = control_list; Control *next = current->next; int count = 0; int i = 0; for(; next != NULL; current = next, next = current->next) { if(current->control.flags & V4L2_CTRL_FLAG_READ_ONLY) continue; clist[count].id = current->control.id; switch (current->control.type) { #ifndef DISABLE_STRING_CONTROLS case V4L2_CTRL_TYPE_STRING: clist[count].size = current->value; clist[count].string = current->string; break; #endif case V4L2_CTRL_TYPE_INTEGER64: clist[count].value64 = current->value64; break; default: clist[count].value = current->value; break; } count++; if((next == NULL) || (next->class != current->class)) { struct v4l2_ext_controls ctrls = {0}; ctrls.ctrl_class = current->class; ctrls.count = count; ctrls.controls = clist; ret = xioctl(hdevice, VIDIOC_S_EXT_CTRLS, &ctrls); if(ret) { printf("VIDIOC_S_EXT_CTRLS for multiple controls failed (error %i)\n", ret); struct v4l2_control ctrl; //set the controls one by one if( current->class == V4L2_CTRL_CLASS_USER) { printf(" using VIDIOC_S_CTRL for user class controls\n"); for(i=0;i < count; i++) { ctrl.id = clist[i].id; ctrl.value = clist[i].value; ret = xioctl(hdevice, VIDIOC_S_CTRL, &ctrl); if(ret) { Control *ctrl = get_ctrl_by_id(control_list, clist[i].id); if(ctrl) printf("control(0x%08x) \"%s\" failed to set (error %i)\n", clist[i].id, ctrl->control.name, ret); else printf("control(0x%08x) failed to set (error %i)\n", clist[i].id, ret); } } } else { printf(" using VIDIOC_S_EXT_CTRLS on single controls for class: 0x%08x\n", current->class); for(i=0;i < count; i++) { ctrls.count = 1; ctrls.controls = &clist[i]; ret = xioctl(hdevice, VIDIOC_S_EXT_CTRLS, &ctrls); if(ret) { Control *ctrl = get_ctrl_by_id(control_list, clist[i].id); if(ctrl) printf("control(0x%08x) \"%s\" failed to set (error %i)\n", clist[i].id, ctrl->control.name, ret); else printf("control(0x%08x) failed to set (error %i)\n", clist[i].id, ret); } } } } count = 0; } } //update list with real values //get_ctrl_values (hdevice, control_list, num_controls); } /* * sets all controls to default values */ void set_default_values(int hdevice, Control *control_list, int num_controls, void *all_data) { Control *current = control_list; Control *next = current->next; for(; next != NULL; current = next, next = current->next) { if(current->control.flags & V4L2_CTRL_FLAG_READ_ONLY) { if(next == NULL) break; else { current = next; next = current->next; } continue; } //printf("setting 0x%08X to %i\n",current->control.id, current->control.default_value); switch (current->control.type) { #ifndef DISABLE_STRING_CONTROLS case V4L2_CTRL_TYPE_STRING: break; #endif case V4L2_CTRL_TYPE_INTEGER64: current->value64 = current->control.default_value; break; default: //if its one of the special auto controls disable it first disable_special_auto (hdevice, control_list, current->control.id); current->value = current->control.default_value; break; } } set_ctrl_values (hdevice, control_list, num_controls); get_ctrl_values (hdevice, control_list, num_controls, all_data); } /* * sets the value for control id */ int set_ctrl(int hdevice, Control *control_list, int id) { Control *control = get_ctrl_by_id(control_list, id ); int ret = 0; if(!control) return (-1); if(control->control.flags & V4L2_CTRL_FLAG_READ_ONLY) return (-1); if( control->class == V4L2_CTRL_CLASS_USER) { struct v4l2_control ctrl; //printf(" using VIDIOC_G_CTRL for user class controls\n"); ctrl.id = control->control.id; ctrl.value = control->value; ret = xioctl(hdevice, VIDIOC_S_CTRL, &ctrl); } else { //printf(" using VIDIOC_G_EXT_CTRLS on single controls for class: 0x%08x\n", // current->class); struct v4l2_ext_controls ctrls = {0}; struct v4l2_ext_control ctrl = {0}; ctrl.id = control->control.id; switch (control->control.type) { #ifndef DISABLE_STRING_CONTROLS case V4L2_CTRL_TYPE_STRING: ctrl.size = control->value; ctrl.string = control->string; break; #endif case V4L2_CTRL_TYPE_INTEGER64: ctrl.value64 = control->value64; break; default: ctrl.value = control->value; break; } ctrls.ctrl_class = control->class; ctrls.count = 1; ctrls.controls = &ctrl; ret = xioctl(hdevice, VIDIOC_S_EXT_CTRLS, &ctrls); if(ret) printf("control id: 0x%08x failed to set (error %i)\n", ctrl.id, ret); } //update real value get_ctrl(hdevice, control_list, id, NULL); return (ret); } /* * frees the control list allocations */ void free_control_list (Control *control_list) { Control *first = control_list; Control *next = first->next; while (next != NULL) { if(first->string) free(first->string); if(first->menu) g_free(first->menu); free(first); first = next; next = first->next; } //clean the last one if(first->string) free(first->string); if(first) free(first); control_list = NULL; } /* * sets pan tilt (direction = 1 or -1) */ void uvcPanTilt (int hdevice, Control *control_list, int is_pan, int direction) { Control *ctrl = NULL; int id = V4L2_CID_TILT_RELATIVE; if (is_pan) id = V4L2_CID_PAN_RELATIVE; ctrl = get_ctrl_by_id(control_list, id ); if (ctrl && ctrl->spinbutton) { ctrl->value = direction * gtk_spin_button_get_value_as_int ( GTK_SPIN_BUTTON(ctrl->spinbutton)); set_ctrl(hdevice, control_list, id); } } guvcview-src-1.7.1/src/jpgenc.c0000664000175000017500000001330312173235416015375 0ustar paulopaulo/*******************************************************************************# # guvcview http://guvcview.sourceforge.net # # # # Paulo Assis # # # # 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # # ********************************************************************************/ /*******************************************************************************# * # * Jpeg encoder # * # * Adapted for linux, Paulo Assis, 2007 # * # ********************************************************************************/ #include #include #include #include #include "jpgenc.h" void initialization (struct JPEG_ENCODER_STRUCTURE * jpeg, int image_width, int image_height) { UINT16 mcu_width, mcu_height, bytes_per_pixel; jpeg->mcu_width = mcu_width = 16; jpeg->horizontal_mcus = (UINT16) (image_width >> 4);/* width/16 */ jpeg->mcu_height = mcu_height = 8; jpeg->vertical_mcus = (UINT16) (image_height >> 3); /* height/8 */ bytes_per_pixel = 2; jpeg->length_minus_mcu_width = (UINT16) ((image_width - mcu_width) * bytes_per_pixel); jpeg->length_minus_width = (UINT16) (image_width * bytes_per_pixel); jpeg->mcu_width_size = (UINT16) (mcu_width * bytes_per_pixel); jpeg->rows = jpeg->mcu_height; jpeg->cols = jpeg->mcu_width; jpeg->incr = jpeg->length_minus_mcu_width; jpeg->offset = (UINT16) ((image_width * mcu_height) * bytes_per_pixel); jpeg->ldc1 = 0; jpeg->ldc2 = 0; jpeg->ldc3 = 0; jpeg->lcode = 0; jpeg->bitindex = 0; } void jpeg_restart (struct JPEG_ENCODER_STRUCTURE * jpeg_encoder_structure) { jpeg_encoder_structure->ldc1 = 0; jpeg_encoder_structure->ldc2 = 0; jpeg_encoder_structure->ldc3 = 0; jpeg_encoder_structure->lcode = 0; jpeg_encoder_structure->bitindex = 0; } int encode_image (UINT8 *input_ptr,UINT8 *output_ptr, struct JPEG_ENCODER_STRUCTURE * jpeg_encoder_structure, int huff, UINT32 image_width,UINT32 image_height) { int size; UINT16 i, j; UINT8 *tmp_ptr=NULL; UINT8 *tmp_iptr=NULL; UINT8 *tmp_optr=NULL; tmp_iptr=input_ptr; tmp_optr=output_ptr; /* clean jpeg parameters*/ jpeg_restart(jpeg_encoder_structure); /* Writing Marker Data */ tmp_optr = write_markers (jpeg_encoder_structure, tmp_optr, huff, image_width, image_height); for (i=0; ivertical_mcus; i++) /* height /8 */ { tmp_ptr=tmp_iptr; for (j=0; jhorizontal_mcus; j++) /* width /16 */ { /*reads a block*/ read_422_format (jpeg_encoder_structure, tmp_iptr); /*YUYV*/ /* Encode the data in MCU */ tmp_optr = encodeMCU (jpeg_encoder_structure, tmp_optr); if(j<(jpeg_encoder_structure->horizontal_mcus -1)) { tmp_iptr += jpeg_encoder_structure->mcu_width_size; } else { tmp_iptr=tmp_ptr; } } tmp_iptr += jpeg_encoder_structure->offset; } /* Close Routine */ tmp_optr=close_bitstream (jpeg_encoder_structure, tmp_optr); size=tmp_optr-output_ptr; tmp_iptr=NULL; tmp_optr=NULL; return (size); } UINT8* encodeMCU (struct JPEG_ENCODER_STRUCTURE * jpeg_encoder_structure, UINT8 *output_ptr) { levelshift (jpeg_encoder_structure->Y1); DCT (jpeg_encoder_structure->Y1); quantization (jpeg_encoder_structure, jpeg_encoder_structure->Y1, jpeg_encoder_structure->ILqt); output_ptr = huffman (jpeg_encoder_structure, 1, output_ptr); levelshift (jpeg_encoder_structure->Y2); DCT (jpeg_encoder_structure->Y2); quantization (jpeg_encoder_structure, jpeg_encoder_structure->Y2, jpeg_encoder_structure->ILqt); output_ptr = huffman (jpeg_encoder_structure, 1, output_ptr); levelshift (jpeg_encoder_structure->CB); DCT (jpeg_encoder_structure->CB); quantization (jpeg_encoder_structure, jpeg_encoder_structure->CB, jpeg_encoder_structure->ICqt); output_ptr = huffman (jpeg_encoder_structure, 2, output_ptr); levelshift (jpeg_encoder_structure->CR); DCT (jpeg_encoder_structure->CR); quantization (jpeg_encoder_structure, jpeg_encoder_structure->CR, jpeg_encoder_structure->ICqt); output_ptr = huffman (jpeg_encoder_structure, 3, output_ptr); return output_ptr; } guvcview-src-1.7.1/src/colorspaces.c0000664000175000017500000010744512173235416016457 0ustar paulopaulo/*******************************************************************************# # guvcview http://guvcview.sourceforge.net # # # # Paulo Assis # # Nobuhiro Iwamatsu # # # # 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # # ********************************************************************************/ #include #include #include #include "colorspaces.h" #include "v4l2uvc.h" /*------------------------------- Color space conversions --------------------*/ /* regular yuv (YUYV) to rgb24*/ void yuyv2rgb (BYTE *pyuv, BYTE *prgb, int width, int height) { int l=0; int SizeYUV=height * width * 2; /* 2 bytes per pixel*/ for(l=0;l> bitsIn) & mask; } } /*convert y10b (bit-packed array greyscale format) to yuyv (packed) * args: * framebuffer: pointer to frame buffer (yuyv) * tmpbuffer: pointer to temp buffer containing y10b (bit-packed array) data frame * width: picture width * height: picture height */ void y10b_to_yuyv (BYTE *framebuffer, BYTE *tmpbuffer, int width, int height) { UINT16 *unpacked_buffer = NULL; UINT16 *ptmp; int h = 0; int w = 0; unpacked_buffer = malloc(width * height * sizeof(UINT16)); convert_packed_to_16bit(tmpbuffer, unpacked_buffer, 10, width * height); ptmp = unpacked_buffer; for (h = 0; h < height; h++) { for (w = 0; w < width; w += 2) { /* Y0 */ *framebuffer++ = (BYTE) ((ptmp[0] & 0x3FF) >> 2); /* U */ *framebuffer++ = 0x80; /* Y1 */ *framebuffer++ = (BYTE) ((ptmp[1] & 0x3FF) >> 2); /* V */ *framebuffer++ = 0x80; ptmp += 2; } } free(unpacked_buffer); } /*convert y16 (grey) to yuyv (packed) * args: * framebuffer: pointer to frame buffer (yuyv) * tmpbuffer: pointer to temp buffer containing y16 (grey) data frame * width: picture width * height: picture height */ void y16_to_yuyv (BYTE *framebuffer, BYTE *tmpbuffer, int width, int height) { UINT16 *ptmp= (UINT16 *) tmpbuffer; int h=0; int w=0; for(h=0;h> 8); /* U */ *framebuffer++ = 0x80; /* Y1 */ *framebuffer++ = (BYTE) ((ptmp[1] & 0xFF00) >> 8); /* V */ *framebuffer++ = 0x80; ptmp += 2; } } } /*convert yyuv (packed) to yuyv (packed) * args: * framebuffer: pointer to frame buffer (yuyv) * tmpbuffer: pointer to temp buffer containing yyuv packed data frame * width: picture width * height: picture height */ void yyuv_to_yuyv (BYTE *framebuffer, BYTE *tmpbuffer, int width, int height) { BYTE *ptmp=NULL; BYTE *pfmb=NULL; ptmp = tmpbuffer; pfmb = framebuffer; int h=0; int w=0; for(h=0;h= 0; ) { *framebuffer++ = 0x80 + *Y0++; *framebuffer++ = 0x80 + *U; *framebuffer++ = 0x80 + *Y0++; *framebuffer++ = 0x80 + *V; *line2++ = 0x80 + *Y1++; *line2++ = 0x80 + *U++; *line2++ = 0x80 + *Y1++; *line2++ = 0x80 + *V++; } Y0 += width * 2; /* next block of lines */ framebuffer = line2; } } /*convert SPCA505 (s505) to yuv 422 * s505 |Y0..width..Y0|Y1..width..Y1|U..width/2..U|V..width/2..V| * signed values (-128;+127) must be converted to unsigned (0; 255) * args: * framebuffer: pointer to frame buffer (yuyv) * tmpbuffer: pointer to temp buffer containing s501 data frame * width: picture width * height: picture height */ void s505_to_yuyv(BYTE *framebuffer, BYTE *tmpbuffer, int width, int height) { BYTE *U, *V, *Y0, *Y1; BYTE *line2; int h, w; Y0 = tmpbuffer; /*fisrt line*/ for (h = 0; h < height/2; h++ ) { line2 = framebuffer + width * 2; /* next line */ Y1 = Y0 + width; U = Y1 + width; V = U + width/2; for (w = width / 2; --w >= 0; ) { *framebuffer++ = 0x80 + *Y0++; *framebuffer++ = 0x80 + *U; *framebuffer++ = 0x80 + *Y0++; *framebuffer++ = 0x80 + *V; *line2++ = 0x80 + *Y1++; *line2++ = 0x80 + *U++; *line2++ = 0x80 + *Y1++; *line2++ = 0x80 + *V++; } Y0 += width * 2; /* next block of lines */ framebuffer = line2; } } /*convert SPCA508 (s508) to yuv 422 * s508 |Y0..width..Y0|U..width/2..U|V..width/2..V|Y1..width..Y1| * signed values (-128;+127) must be converted to unsigned (0; 255) * args: * framebuffer: pointer to frame buffer (yuyv) * tmpbuffer: pointer to temp buffer containing s501 data frame * width: picture width * height: picture height */ void s508_to_yuyv(BYTE *framebuffer, BYTE *tmpbuffer, int width, int height) { BYTE *U, *V, *Y0, *Y1; BYTE *line2; int h, w; Y0 = tmpbuffer; /*fisrt line*/ for (h = 0; h < height/2; h++ ) { line2 = framebuffer + width * 2; /* next line */ U = Y0 + width; V = U + width/2; Y1= V + width/2; for (w = width / 2; --w >= 0; ) { *framebuffer++ = 0x80 + *Y0++; *framebuffer++ = 0x80 + *U; *framebuffer++ = 0x80 + *Y0++; *framebuffer++ = 0x80 + *V; *line2++ = 0x80 + *Y1++; *line2++ = 0x80 + *U++; *line2++ = 0x80 + *Y1++; *line2++ = 0x80 + *V++; } Y0 += width * 2; /* next block of lines */ framebuffer = line2; } } // raw bayer functions // from libv4l bayer.c, (C) 2008 Hans de Goede //Note: original bayer_to_bgr24 code from : // 1394-Based Digital Camera Control Library // // Bayer pattern decoding functions // // Written by Damien Douxchamps and Frederic Devernay static void convert_border_bayer_line_to_bgr24( BYTE* bayer, BYTE* adjacent_bayer, BYTE *bgr, int width, gboolean start_with_green, gboolean blue_line) { int t0, t1; if (start_with_green) { /* First pixel */ if (blue_line) { *bgr++ = bayer[1]; *bgr++ = bayer[0]; *bgr++ = adjacent_bayer[0]; } else { *bgr++ = adjacent_bayer[0]; *bgr++ = bayer[0]; *bgr++ = bayer[1]; } /* Second pixel */ t0 = (bayer[0] + bayer[2] + adjacent_bayer[1] + 1) / 3; t1 = (adjacent_bayer[0] + adjacent_bayer[2] + 1) >> 1; if (blue_line) { *bgr++ = bayer[1]; *bgr++ = t0; *bgr++ = t1; } else { *bgr++ = t1; *bgr++ = t0; *bgr++ = bayer[1]; } bayer++; adjacent_bayer++; width -= 2; } else { /* First pixel */ t0 = (bayer[1] + adjacent_bayer[0] + 1) >> 1; if (blue_line) { *bgr++ = bayer[0]; *bgr++ = t0; *bgr++ = adjacent_bayer[1]; } else { *bgr++ = adjacent_bayer[1]; *bgr++ = t0; *bgr++ = bayer[0]; } width--; } if (blue_line) { for ( ; width > 2; width -= 2) { t0 = (bayer[0] + bayer[2] + 1) >> 1; *bgr++ = t0; *bgr++ = bayer[1]; *bgr++ = adjacent_bayer[1]; bayer++; adjacent_bayer++; t0 = (bayer[0] + bayer[2] + adjacent_bayer[1] + 1) / 3; t1 = (adjacent_bayer[0] + adjacent_bayer[2] + 1) >> 1; *bgr++ = bayer[1]; *bgr++ = t0; *bgr++ = t1; bayer++; adjacent_bayer++; } } else { for ( ; width > 2; width -= 2) { t0 = (bayer[0] + bayer[2] + 1) >> 1; *bgr++ = adjacent_bayer[1]; *bgr++ = bayer[1]; *bgr++ = t0; bayer++; adjacent_bayer++; t0 = (bayer[0] + bayer[2] + adjacent_bayer[1] + 1) / 3; t1 = (adjacent_bayer[0] + adjacent_bayer[2] + 1) >> 1; *bgr++ = t1; *bgr++ = t0; *bgr++ = bayer[1]; bayer++; adjacent_bayer++; } } if (width == 2) { /* Second to last pixel */ t0 = (bayer[0] + bayer[2] + 1) >> 1; if (blue_line) { *bgr++ = t0; *bgr++ = bayer[1]; *bgr++ = adjacent_bayer[1]; } else { *bgr++ = adjacent_bayer[1]; *bgr++ = bayer[1]; *bgr++ = t0; } /* Last pixel */ t0 = (bayer[1] + adjacent_bayer[2] + 1) >> 1; if (blue_line) { *bgr++ = bayer[2]; *bgr++ = t0; *bgr++ = adjacent_bayer[1]; } else { *bgr++ = adjacent_bayer[1]; *bgr++ = t0; *bgr++ = bayer[2]; } } else { /* Last pixel */ if (blue_line) { *bgr++ = bayer[0]; *bgr++ = bayer[1]; *bgr++ = adjacent_bayer[1]; } else { *bgr++ = adjacent_bayer[1]; *bgr++ = bayer[1]; *bgr++ = bayer[0]; } } } /* From libdc1394, which on turn was based on OpenCV's Bayer decoding */ static void bayer_to_rgbbgr24(BYTE *bayer, BYTE *bgr, int width, int height, gboolean start_with_green, gboolean blue_line) { /* render the first line */ convert_border_bayer_line_to_bgr24(bayer, bayer + width, bgr, width, start_with_green, blue_line); bgr += width * 3; /* reduce height by 2 because of the special case top/bottom line */ for (height -= 2; height; height--) { int t0, t1; /* (width - 2) because of the border */ BYTE *bayerEnd = bayer + (width - 2); if (start_with_green) { /* OpenCV has a bug in the next line, which was t0 = (bayer[0] + bayer[width * 2] + 1) >> 1; */ t0 = (bayer[1] + bayer[width * 2 + 1] + 1) >> 1; /* Write first pixel */ t1 = (bayer[0] + bayer[width * 2] + bayer[width + 1] + 1) / 3; if (blue_line) { *bgr++ = t0; *bgr++ = t1; *bgr++ = bayer[width]; } else { *bgr++ = bayer[width]; *bgr++ = t1; *bgr++ = t0; } /* Write second pixel */ t1 = (bayer[width] + bayer[width + 2] + 1) >> 1; if (blue_line) { *bgr++ = t0; *bgr++ = bayer[width + 1]; *bgr++ = t1; } else { *bgr++ = t1; *bgr++ = bayer[width + 1]; *bgr++ = t0; } bayer++; } else { /* Write first pixel */ t0 = (bayer[0] + bayer[width * 2] + 1) >> 1; if (blue_line) { *bgr++ = t0; *bgr++ = bayer[width]; *bgr++ = bayer[width + 1]; } else { *bgr++ = bayer[width + 1]; *bgr++ = bayer[width]; *bgr++ = t0; } } if (blue_line) { for (; bayer <= bayerEnd - 2; bayer += 2) { t0 = (bayer[0] + bayer[2] + bayer[width * 2] + bayer[width * 2 + 2] + 2) >> 2; t1 = (bayer[1] + bayer[width] + bayer[width + 2] + bayer[width * 2 + 1] + 2) >> 2; *bgr++ = t0; *bgr++ = t1; *bgr++ = bayer[width + 1]; t0 = (bayer[2] + bayer[width * 2 + 2] + 1) >> 1; t1 = (bayer[width + 1] + bayer[width + 3] + 1) >> 1; *bgr++ = t0; *bgr++ = bayer[width + 2]; *bgr++ = t1; } } else { for (; bayer <= bayerEnd - 2; bayer += 2) { t0 = (bayer[0] + bayer[2] + bayer[width * 2] + bayer[width * 2 + 2] + 2) >> 2; t1 = (bayer[1] + bayer[width] + bayer[width + 2] + bayer[width * 2 + 1] + 2) >> 2; *bgr++ = bayer[width + 1]; *bgr++ = t1; *bgr++ = t0; t0 = (bayer[2] + bayer[width * 2 + 2] + 1) >> 1; t1 = (bayer[width + 1] + bayer[width + 3] + 1) >> 1; *bgr++ = t1; *bgr++ = bayer[width + 2]; *bgr++ = t0; } } if (bayer < bayerEnd) { /* write second to last pixel */ t0 = (bayer[0] + bayer[2] + bayer[width * 2] + bayer[width * 2 + 2] + 2) >> 2; t1 = (bayer[1] + bayer[width] + bayer[width + 2] + bayer[width * 2 + 1] + 2) >> 2; if (blue_line) { *bgr++ = t0; *bgr++ = t1; *bgr++ = bayer[width + 1]; } else { *bgr++ = bayer[width + 1]; *bgr++ = t1; *bgr++ = t0; } /* write last pixel */ t0 = (bayer[2] + bayer[width * 2 + 2] + 1) >> 1; if (blue_line) { *bgr++ = t0; *bgr++ = bayer[width + 2]; *bgr++ = bayer[width + 1]; } else { *bgr++ = bayer[width + 1]; *bgr++ = bayer[width + 2]; *bgr++ = t0; } bayer++; } else { /* write last pixel */ t0 = (bayer[0] + bayer[width * 2] + 1) >> 1; t1 = (bayer[1] + bayer[width * 2 + 1] + bayer[width] + 1) / 3; if (blue_line) { *bgr++ = t0; *bgr++ = t1; *bgr++ = bayer[width + 1]; } else { *bgr++ = bayer[width + 1]; *bgr++ = t1; *bgr++ = t0; } } /* skip 2 border pixels */ bayer += 2; blue_line = !blue_line; start_with_green = !start_with_green; } /* render the last line */ convert_border_bayer_line_to_bgr24(bayer + width, bayer, bgr, width, !start_with_green, !blue_line); } /*convert bayer raw data to rgb24 * args: * pBay: pointer to buffer containing Raw bayer data data * pRGB24: pointer to buffer containing rgb24 data * width: picture width * height: picture height * pix_order: bayer pixel order (0=gb/rg 1=gr/bg 2=bg/gr 3=rg/bg) */ void bayer_to_rgb24(BYTE *pBay, BYTE *pRGB24, int width, int height, int pix_order) { switch (pix_order) { //conversion functions are build for bgr, by switching b and r lines we get rgb case 0: /* gbgbgb... | rgrgrg... (V4L2_PIX_FMT_SGBRG8)*/ bayer_to_rgbbgr24(pBay, pRGB24, width, height, TRUE, FALSE); break; case 1: /* grgrgr... | bgbgbg... (V4L2_PIX_FMT_SGRBG8)*/ bayer_to_rgbbgr24(pBay, pRGB24, width, height, TRUE, TRUE); break; case 2: /* bgbgbg... | grgrgr... (V4L2_PIX_FMT_SBGGR8)*/ bayer_to_rgbbgr24(pBay, pRGB24, width, height, FALSE, FALSE); break; case 3: /* rgrgrg... ! gbgbgb... (V4L2_PIX_FMT_SRGGB8)*/ bayer_to_rgbbgr24(pBay, pRGB24, width, height, FALSE, TRUE); break; default: /* default is 0*/ bayer_to_rgbbgr24(pBay, pRGB24, width, height, TRUE, FALSE); break; } } void rgb2yuyv(BYTE *prgb, BYTE *pyuv, int width, int height) { int i=0; for(i=0;i<(width*height*3);i=i+6) { /* y */ *pyuv++ =CLIP(0.299 * (prgb[i] - 128) + 0.587 * (prgb[i+1] - 128) + 0.114 * (prgb[i+2] - 128) + 128); /* u */ *pyuv++ =CLIP(((- 0.147 * (prgb[i] - 128) - 0.289 * (prgb[i+1] - 128) + 0.436 * (prgb[i+2] - 128) + 128) + (- 0.147 * (prgb[i+3] - 128) - 0.289 * (prgb[i+4] - 128) + 0.436 * (prgb[i+5] - 128) + 128))/2); /* y1 */ *pyuv++ =CLIP(0.299 * (prgb[i+3] - 128) + 0.587 * (prgb[i+4] - 128) + 0.114 * (prgb[i+5] - 128) + 128); /* v*/ *pyuv++ =CLIP(((0.615 * (prgb[i] - 128) - 0.515 * (prgb[i+1] - 128) - 0.100 * (prgb[i+2] - 128) + 128) + (0.615 * (prgb[i+3] - 128) - 0.515 * (prgb[i+4] - 128) - 0.100 * (prgb[i+5] - 128) + 128))/2); } } void bgr2yuyv(BYTE *pbgr, BYTE *pyuv, int width, int height) { int i=0; for(i=0;i<(width*height*3);i=i+6) { /* y */ *pyuv++ =CLIP(0.299 * (pbgr[i+2] - 128) + 0.587 * (pbgr[i+1] - 128) + 0.114 * (pbgr[i] - 128) + 128); /* u */ *pyuv++ =CLIP(((- 0.147 * (pbgr[i+2] - 128) - 0.289 * (pbgr[i+1] - 128) + 0.436 * (pbgr[i] - 128) + 128) + (- 0.147 * (pbgr[i+5] - 128) - 0.289 * (pbgr[i+4] - 128) + 0.436 * (pbgr[i+3] - 128) + 128))/2); /* y1 */ *pyuv++ =CLIP(0.299 * (pbgr[i+5] - 128) + 0.587 * (pbgr[i+4] - 128) + 0.114 * (pbgr[i+3] - 128) + 128); /* v*/ *pyuv++ =CLIP(((0.615 * (pbgr[i+2] - 128) - 0.515 * (pbgr[i+1] - 128) - 0.100 * (pbgr[i] - 128) + 128) + (0.615 * (pbgr[i+5] - 128) - 0.515 * (pbgr[i+4] - 128) - 0.100 * (pbgr[i+3] - 128) + 128))/2); } } /*use in utils.c for jpeg decoding 420 planar to 422 * args: * out: pointer to data output of idct (macroblocks yyyy u v) * pic: pointer to picture buffer (yuyv) * width: picture width */ void yuv420pto422(int * out,unsigned char *pic,int width) { int j, k; unsigned char *pic0, *pic1; int *outy, *outu, *outv; int outy1 = 0; int outy2 = 8; //yyyyuv pic0 = pic; pic1 = pic + width; outy = out; outu = out + 64 * 4; outv = out + 64 * 5; for (j = 0; j < 8; j++) { for (k = 0; k < 8; k++) { if( k == 4) { outy1 += 56; outy2 += 56; } *pic0++ = CLIP(outy[outy1]); //y1 line 1 *pic0++ = CLIP(128 + *outu); //u line 1-2 *pic0++ = CLIP(outy[outy1+1]); //y2 line 1 *pic0++ = CLIP(128 + *outv); //v line 1-2 *pic1++ = CLIP(outy[outy2]); //y1 line 2 *pic1++ = CLIP(128 + *outu); //u line 1-2 *pic1++ = CLIP(outy[outy2+1]); //y2 line 2 *pic1++ = CLIP(128 + *outv); //v line 1-2 outy1 +=2; outy2 += 2; outu++; outv++; } if(j==3) { outy = out + 128; } else { outy += 16; } outy1 = 0; outy2 = 8; pic0 += 2 * (width -16); pic1 += 2 * (width -16); } } /*use in utils.c for jpeg decoding 422 planar to 422 * args: * out: pointer to data output of idct (macroblocks yyyy u v) * pic: pointer to picture buffer (yuyv) * width: picture width */ void yuv422pto422(int * out,unsigned char *pic,int width) { int j, k; unsigned char *pic0, *pic1; int *outy, *outu, *outv; int outy1 = 0; int outy2 = 8; int outu1 = 0; int outv1 = 0; //yyyyuv pic0 = pic; pic1 = pic + width; outy = out; outu = out + 64 * 4; outv = out + 64 * 5; for (j = 0; j < 4; j++) { for (k = 0; k < 8; k++) { if( k == 4) { outy1 += 56; outy2 += 56; } *pic0++ = CLIP(outy[outy1]); //y1 line 1 *pic0++ = CLIP(128 + outu[outu1]); //u line 1 *pic0++ = CLIP(outy[outy1+1]); //y2 line 1 *pic0++ = CLIP(128 + outv[outv1]); //v line 1 *pic1++ = CLIP(outy[outy2]); //y1 line 2 *pic1++ = CLIP(128 + outu[outu1+8]);//u line 2 *pic1++ = CLIP(outy[outy2+1]); //y2 line 2 *pic1++ = CLIP(128 + outv[outv1+8]);//v line 2 outv1 += 1; outu1 += 1; outy1 +=2; outy2 +=2; } outy += 16;outu +=8; outv +=8; outv1 = 0; outu1=0; outy1 = 0; outy2 = 8; pic0 += 2 * (width -16); pic1 += 2 * (width -16); } } /*use in utils.c for jpeg decoding 444 planar to 422 * args: * out: pointer to data output of idct (macroblocks yyyy u v) * pic: pointer to picture buffer (yuyv) * width: picture width */ void yuv444pto422(int * out,unsigned char *pic,int width) { int j, k; unsigned char *pic0, *pic1; int *outy, *outu, *outv; int outy1 = 0; int outy2 = 8; int outu1 = 0; int outv1 = 0; //yyyyuv pic0 = pic; pic1 = pic + width; outy = out; outu = out + 64 * 4; // Ooops where did i invert ?? outv = out + 64 * 5; for (j = 0; j < 4; j++) { for (k = 0; k < 4; k++) { *pic0++ =CLIP( outy[outy1]); //y1 line 1 *pic0++ =CLIP( 128 + outu[outu1]); //u line 1 *pic0++ =CLIP( outy[outy1+1]); //y2 line 1 *pic0++ =CLIP( 128 + outv[outv1]); //v line 1 *pic1++ =CLIP( outy[outy2]); //y1 line 2 *pic1++ =CLIP( 128 + outu[outu1+8]);//u line 2 *pic1++ =CLIP( outy[outy2+1]); //y2 line 2 *pic1++ =CLIP( 128 + outv[outv1+8]);//v line 2 outv1 += 2; outu1 += 2; outy1 +=2; outy2 +=2; } outy += 16;outu +=16; outv +=16; outv1 = 0; outu1=0; outy1 = 0; outy2 = 8; pic0 += 2 * (width -8); pic1 += 2 * (width -8); } } /*use in utils.c for jpeg decoding 400 planar to 422 * args: * out: pointer to data output of idct (macroblocks yyyy ) * pic: pointer to picture buffer (yuyv) * width: picture width */ void yuv400pto422(int * out,unsigned char *pic,int width) { int j, k; unsigned char *pic0, *pic1; int *outy ; int outy1 = 0; int outy2 = 8; pic0 = pic; pic1 = pic + width; outy = out; //yyyy for (j = 0; j < 4; j++) { for (k = 0; k < 4; k++) { *pic0++ = CLIP(outy[outy1]); //y1 line 1 *pic0++ = 128 ; //u *pic0++ = CLIP(outy[outy1+1]);//y2 line 1 *pic0++ = 128 ; //v *pic1++ = CLIP(outy[outy2]); //y1 line 2 *pic1++ = 128 ; //u *pic1++ = CLIP(outy[outy2+1]);//y2 line 2 *pic1++ = 128 ; //v outy1 +=2; outy2 +=2; } outy += 16; outy1 = 0; outy2 = 8; pic0 += 2 * (width -8); pic1 += 2 * (width -8); } } guvcview-src-1.7.1/src/autofocus.c0000664000175000017500000003413312173235416016143 0ustar paulopaulo/*******************************************************************************# # guvcview http://guvcview.sourceforge.net # # # # Paulo Assis # # Dr. Alexander K. Seewald # # # # 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # # ********************************************************************************/ /*******************************************************************************# # # # autofocus - using dct # # # # # ********************************************************************************/ #include "autofocus.h" #include "dct.h" #include "defs.h" #include "ms_time.h" #include #include #include #include #include /*use insert sort - it's the fastest for small and almost sorted arrays (our case)*/ #define SORT (3) //1 - Quick sort 2 - Shell sort 3- insert sort other - bubble sort #define _TH_ (80) // default treshold = 1/80 of focus sharpness value #define FLAT (0) #define LOCAL_MAX (1) #define LEFT (2) #define RIGHT (3) #define INCSTEP (4) #define SWAP(x, y) temp = (x); (x) = (y); (y) = temp static double sumAC[64]; static int ACweight[64] = { 0,1,2,3,4,5,6,7, 1,1,2,3,4,5,6,7, 2,2,2,3,4,5,6,7, 3,3,3,3,4,5,6,7, 4,4,4,4,4,5,6,7, 5,5,5,5,5,5,6,7, 7,7,7,7,7,7,7,7 }; struct focusData *initFocusData (int f_max, int f_min, int step, int id) { struct focusData *AFdata = g_new0(struct focusData, 1); if(AFdata == NULL) return (AFdata); AFdata->id = id; AFdata->f_max = f_max; AFdata->f_min = f_min; AFdata->f_step = step; AFdata->i_step = (f_max + 1 - f_min)/32; if(AFdata->i_step <= step) AFdata->i_step = step * 2; //g_print("focus step:%i\n", AFdata->i_step); AFdata->right = f_max; AFdata->left = f_min + AFdata->i_step; /*start with focus at 8*/ AFdata->focus = -1; AFdata->focus_wait = 0; memset(sumAC,0,64); /*all other values are 0 */ return (AFdata); } #if (SORT == 1) /*quick sort (the fastest and more complex - recursive, doesn't do well on almost sorted data)*/ static void q_sort(struct focusData *AFdata, int left, int right) { int pivot, l_hold, r_hold, temp; l_hold = left; r_hold = right; pivot = AFdata->arr_sharp[left]; temp = AFdata->arr_foc[left]; while(left < right) { while((AFdata->arr_sharp[right] >= pivot) && (left < right)) right--; if (left != right) { AFdata->arr_sharp[left] = AFdata->arr_sharp[right]; AFdata->arr_foc[left] = AFdata->arr_foc[right]; left++; } while((AFdata->arr_sharp[left] <= pivot) && (left < right)) left++; if (left != right) { AFdata->arr_sharp[right] = AFdata->arr_sharp[left]; AFdata->arr_foc[right] = AFdata->arr_foc[left]; right--; } } AFdata->arr_sharp[left] = pivot; AFdata->arr_foc[left] = temp; pivot = left; left = l_hold; right = r_hold; if (left < pivot) q_sort(AFdata, left, pivot-1); if (right > pivot) q_sort(AFdata, pivot+1, right); } #elif (SORT == 2) /* shell sort (based on insert sort, but with some optimization)*/ /* for small arrays insert sort is still faster */ void s_sort(struct focusData *AFdata, int size) { int i, j, temp, gap; for (gap = size / 2; gap > 0; gap /= 2) { for (i = gap; i <= size; i++) { for (j = i-gap; j >= 0 && (AFdata->arr_sharp[j] > AFdata->arr_sharp[j + gap]); j -= gap) { SWAP(AFdata->arr_sharp[j], AFdata->arr_sharp[j + gap]); SWAP(AFdata->arr_foc[j], AFdata->arr_foc[j + gap]); } } } } #elif (SORT == 3) /*insert sort (fastest for small arrays, around 15 elements)*/ static void i_sort (struct focusData *AFdata, int size) { int i,j,temp; for (i = 1; i <= size; i++) { for(j = i; j > 0 && (AFdata->arr_sharp[j-1] > AFdata->arr_sharp[j]); j--) { SWAP(AFdata->arr_sharp[j],AFdata->arr_sharp[j-1]); SWAP(AFdata->arr_foc[j],AFdata->arr_foc[j-1]); } } } #else /*buble sort (the simplest and most inefficient) - in real test with focus data*/ /*it did better than shell or quick sort (focus data is almost sorted)*/ static void b_sort (struct focusData *AFdata, int size) { int i, temp, swapped; do { swapped = 0; size--; for (i=0;i<=size;i++) { if (AFdata->arr_sharp[i+1] < AFdata->arr_sharp[i]) { SWAP(AFdata->arr_sharp[i],AFdata->arr_sharp[i+1]); SWAP(AFdata->arr_foc[i],AFdata->arr_foc[i+1]); swapped = 1; } } } while (swapped); } #endif static int Sort(struct focusData *AFdata, int size) { if (size>=20) { g_printerr("WARNING: focus array size=%d exceeds 20\n",size); size = 10; } #if (SORT == 1) q_sort(AFdata, 0, size); #elif (SORT == 2) s_sort(AFdata, size); #elif (SORT == 3) i_sort(AFdata, size); #else b_sort(AFdata, size); #endif /*better focus value*/ return(AFdata->arr_foc[size]); } /* extract lum (y) data from image (YUYV) */ /* img - image data pointer */ /* dataY - pointer for lum (y) data */ /* width - width of img (in pixels) */ /* height - height of img (in pixels) */ static INT16* extractY (BYTE* img, INT16* dataY, int width, int height) { int i=0; BYTE *pimg; pimg=img; for (i=0;i<(height*width);i++) { dataY[i]=(INT16) *pimg++; pimg++; } return (dataY); } /* measure sharpness in MCU */ /* data - MCU data [8x8] */ /* t - highest order coef. */ static void getSharpnessMCU (INT16 *data, double weight) { int i=0; int j=0; levelshift (data); DCT (data); for (i=0;i<8;i++) { for(j=0;j<8;j++) { sumAC[i*8+j]+=data[i*8+j]*data[i*8+j]*weight; } } } /* sharpness in focus window */ int getSharpness (BYTE* img, int width, int height, int t) { float res=0; int numMCUx = width/(8*2); /*covers 1/2 of width - width should be even*/ int numMCUy = height/(8*2); /*covers 1/2 of height- height should be even*/ INT16 dataMCU[64]; INT16* data; INT16 dataY[width*height]; INT16 *Y = dataY; double weight; double xp_; double yp_; int ctx = numMCUx >> 1; /*center*/ int cty = numMCUy >> 1; double rad=ctx/2; if (cty>1)+i)*width +(((width-(numMCUx-(xp*2))*8)>>1)+j)]; } } getSharpnessMCU(data,weight); cnt2++; } } for (i=0;i<=t;i++) { for(j=0;jfocus_sharpness < (5 * _TH_)) TH = _TH_ * 4 ; if (AFdata->step <= AFdata->i_step) { if (abs((AFdata->sharpLeft-AFdata->focus_sharpness)<(AFdata->focus_sharpness/TH)) && (abs(AFdata->sharpRight-AFdata->focus_sharpness)<(AFdata->focus_sharpness/TH))) { return (FLAT); } else if (((AFdata->focus_sharpness-AFdata->sharpRight))>=(AFdata->focus_sharpness/TH) && ((AFdata->focus_sharpness-AFdata->sharpLeft))>=(AFdata->focus_sharpness/TH)) { // significantly down in both directions -> check another step // outside for local maximum //AFdata->step=16; return (INCSTEP); } else { // one is significant, the other is not... int left=0; int right=0; if (abs((AFdata->sharpLeft-AFdata->focus_sharpness))>=(AFdata->focus_sharpness/TH)) { if (AFdata->sharpLeft>AFdata->focus_sharpness) left++; else right++; } if (abs((AFdata->sharpRight-AFdata->focus_sharpness))>=(AFdata->focus_sharpness/TH)) { if (AFdata->sharpRight>AFdata->focus_sharpness) right++; else left++; } if (left==right) return (FLAT); else if (left>right) return (LEFT); else return (RIGHT); } } else { if (((AFdata->focus_sharpness-AFdata->sharpRight))>=(AFdata->focus_sharpness/TH) && ((AFdata->focus_sharpness-AFdata->sharpLeft))>=(AFdata->focus_sharpness/TH)) { return (LOCAL_MAX); } else { return (FLAT); } } } int getFocusVal (struct focusData *AFdata) { int step = AFdata->i_step * 2; int step2 = AFdata->i_step / 2; if (step2 <= 0 ) step2 = 1; int focus=0; switch (AFdata->flag) { /*--------- first time - run sharpness algorithm -----------------*/ if(AFdata->ind >= 20) { g_printerr ("WARNING ind=%d exceeds 20\n",AFdata->ind); AFdata->ind = 10; } case 0: /*sample left to right at higher step*/ AFdata->arr_sharp[AFdata->ind] = AFdata->sharpness; AFdata->arr_foc[AFdata->ind] = AFdata->focus; /*reached max focus value*/ if (AFdata->focus >= AFdata->right ) { /*get left and right from arr_sharp*/ focus=Sort(AFdata,AFdata->ind); /*get a window around the best value*/ AFdata->left = (focus- step/2); AFdata->right = (focus + step/2); if (AFdata->left < AFdata->f_min) AFdata->left = AFdata->f_min; if (AFdata->right > AFdata->f_max) AFdata->right = AFdata->f_max; AFdata->focus = AFdata->left; AFdata->ind=0; AFdata->flag = 1; } else /*increment focus*/ { AFdata->focus=AFdata->arr_foc[AFdata->ind] + step; /*next focus*/ AFdata->ind++; AFdata->flag = 0; } break; case 1: /*sample left to right at lower step - fine tune*/ AFdata->arr_sharp[AFdata->ind] = AFdata->sharpness; AFdata->arr_foc[AFdata->ind] = AFdata->focus; /*reached window max focus*/ if (AFdata->focus >= AFdata->right ) { /*get left and right from arr_sharp*/ focus=Sort(AFdata,AFdata->ind); /*get the best value*/ AFdata->focus = focus; AFdata->focus_sharpness = AFdata->arr_sharp[AFdata->ind]; AFdata->step = AFdata->i_step; /*first step for focus tracking*/ AFdata->focusDir = FLAT; /*no direction for focus*/ AFdata->flag = 2; } else /*increment focus*/ { AFdata->focus=AFdata->arr_foc[AFdata->ind] + step2; /*next focus*/ AFdata->ind++; AFdata->flag = 1; } break; case 2: /* set treshold in order to sharpness*/ if (AFdata->setFocus) { /*reset*/ AFdata->setFocus = 0; AFdata->flag= 0; AFdata->right = AFdata->f_max; AFdata->left = AFdata->f_min + AFdata->i_step; AFdata->ind = 0; } else { /*track focus*/ AFdata->focus_sharpness = AFdata->sharpness; AFdata->flag = 3; AFdata->sharpLeft = 0; AFdata->sharpRight = 0; AFdata->focus += AFdata->step; /*check right*/ } break; case 3: /*track focus*/ AFdata->flag = 4; AFdata->sharpRight = AFdata->sharpness; AFdata->focus -= (2*AFdata->step); /*check left*/ break; case 4: /*track focus*/ AFdata->sharpLeft=AFdata->sharpness; int ret=0; ret=checkFocus(AFdata); switch (ret) { case LOCAL_MAX: AFdata->focus += AFdata->step; /*return to orig. focus*/ AFdata->step = AFdata->i_step; AFdata->flag = 2; break; case FLAT: if(AFdata->focusDir == FLAT) { AFdata->step = AFdata->i_step; if(AFdata->focus_sharpness < 4 * _TH_) { /* 99% chance we lost focus */ /* move focus to half the range */ AFdata->focus = AFdata->f_max / 2; } else { AFdata->focus += AFdata->step; /*return to orig. focus*/ } AFdata->flag = 2; } else if (AFdata->focusDir == RIGHT) { AFdata->focus += 2*AFdata->step; /*go right*/ AFdata->step = AFdata->i_step; AFdata->flag = 2; } else { /*go left*/ AFdata->step = AFdata->i_step; AFdata->flag = 2; } break; case RIGHT: AFdata->focus += 2*AFdata->step; /*go right*/ AFdata->flag = 2; break; case LEFT: /*keep focus on left*/ AFdata->flag = 2; break; case INCSTEP: AFdata->focus += AFdata->step; /*return to orig. focus*/ AFdata->step = 2 * AFdata->i_step; AFdata->flag = 2; break; } break; } /*clip focus, right and left*/ AFdata->focus=(AFdata->focus > AFdata->f_max) ? AFdata->f_max : ((AFdata->focus < AFdata->f_min) ? AFdata->f_min : AFdata->focus); AFdata->right=(AFdata->right > AFdata->f_max) ? AFdata->f_max : ((AFdata->right < AFdata->f_min) ? AFdata->f_min : AFdata->right); AFdata->left =(AFdata->left > AFdata->f_max) ? AFdata->f_max : ((AFdata->left < AFdata->f_min) ? AFdata->f_min : AFdata->left); return AFdata->focus; } guvcview-src-1.7.1/src/defs.h0000664000175000017500000001171312173235416015060 0ustar paulopaulo/*******************************************************************************# # guvcview http://guvcview.sourceforge.net # # # # Paulo Assis # # # # 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # # ********************************************************************************/ #ifndef DEFS_H #define DEFS_H #include #include #define CLEAR_LINE "\x1B[K" #ifdef WORDS_BIGENDIAN #define BIGENDIAN 1 #else #define BIGENDIAN 0 #endif #define IO_MMAP 1 #define IO_READ 2 #define ODD(x) ((x%2)?TRUE:FALSE) #define __THREAD_TYPE pthread_t #define __THREAD_CREATE(t,f,d) (pthread_create(t,NULL,f,d)) #define __THREAD_JOIN(t) (pthread_join(t, NULL)) #define __MUTEX_TYPE pthread_mutex_t #define __COND_TYPE pthread_cond_t #define __INIT_MUTEX(m) ( pthread_mutex_init(m, NULL) ) #define __CLOSE_MUTEX(m) ( pthread_mutex_destroy(m) ) #define __LOCK_MUTEX(m) ( pthread_mutex_lock(m) ) #define __UNLOCK_MUTEX(m) ( pthread_mutex_unlock(m) ) #define __INIT_COND(c) ( pthread_cond_init (c, NULL) ) #define __CLOSE_COND(c) ( pthread_cond_destroy(c) ) #define __COND_BCAST(c) ( pthread_cond_broadcast(c) ) #define __COND_TIMED_WAIT(c,m,t) ( pthread_cond_timedwait(c,m,t) ) /*next index of ring buffer with size elements*/ #define NEXT_IND(ind,size) ind++;if(ind>=size) ind=0 /*previous index of ring buffer with size elements*/ //#define PREV_IND(ind,size) ind--;if(ind<0) ind=size-1 #define VIDBUFF_SIZE 45 //number of video frames in the ring buffer #define MPG_NUM_SAMP 1152 //number of samples in a audio MPEG frame #define AUDBUFF_SIZE 2 //number of audio mpeg frames in each audio buffer // direct impact on latency as buffer is only processed when full #define AUDBUFF_NUM 80 //number of audio buffers //#define MPG_NUM_FRAMES 2 //number of MPEG frames in a audio frame typedef uint64_t QWORD; typedef uint32_t DWORD; typedef uint16_t WORD; typedef uint8_t BYTE; typedef unsigned int LONG; typedef unsigned int UINT; typedef unsigned long long ULLONG; typedef unsigned long ULONG; typedef char* pchar; typedef int8_t INT8; typedef uint8_t UINT8; typedef int16_t INT16; typedef uint16_t UINT16; typedef int32_t INT32; typedef uint32_t UINT32; typedef int64_t INT64; typedef uint64_t UINT64; typedef float SAMPLE; /* 0 is device default*/ static const int stdSampleRates[] = { 0, 8000, 9600, 11025, 12000, 16000, 22050, 24000, 32000, 44100, 48000, 88200, 96000, -1 /* Negative terminated list. */ }; /*----------- guvcview version ----------------*/ //#define VERSION ("") /*defined in config.h*/ #define DEBUG (0) /*---------- Thread Stack Size (bytes) --------*/ #define TSTACK (128*64*1024) /* Debian Default 128 pages of 64k = 8388608 bytes*/ #define INCPANTILT 64 // 1° #define WINSIZEX 560 #define WINSIZEY 560 #define AUTO_EXP 8 #define MAN_EXP 1 #define DHT_SIZE 432 #define DEFAULT_WIDTH 640 #define DEFAULT_HEIGHT 480 #define DEFAULT_FPS 25 #define DEFAULT_FPS_NUM 1 #define SDL_WAIT_TIME 30 /*SDL - Thread loop sleep time */ /*clip value between 0 and 255*/ #define CLIP(value) (BYTE)(((value)>0xFF)?0xff:(((value)<0)?0:(value))) /*MAX macro - gets the bigger value*/ #ifndef MAX #define MAX(a,b) (((a) < (b)) ? (b) : (a)) #endif /*FILTER FLAGS*/ #define YUV_NOFILT (0) #define YUV_MIRROR (1<<0) #define YUV_UPTURN (1<<1) #define YUV_NEGATE (1<<2) #define YUV_MONOCR (1<<3) #define YUV_PIECES (1<<4) #define YUV_PARTICLES (1<<5) /*Audio Effects*/ #define SND_NOEF (0) #define SND_ECHO (1<<0) #define SND_FUZZ (1<<1) #define SND_REVERB (1<<2) #define SND_WAHWAH (1<<3) #define SND_DUCKY (1<<4) /* On Screen Display flags*/ #define OSD_METER (1<<0) #endif guvcview-src-1.7.1/src/lavc_common.h0000775000175000017500000001177712173235416016451 0ustar paulopaulo/*******************************************************************************# # guvcview http://guvcview.sourceforge.net # # # # Paulo Assis # # George Sedov # # - Threaded encoding # # # # 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # # ********************************************************************************/ #ifndef LAVC_COMMON_H #define LAVC_COMMON_H #include "../config.h" #include "defs.h" #include "sound.h" #include "video_format.h" #ifdef HAS_AVCODEC_H #include #include #else #ifdef HAS_LIBAVCODEC_AVCODEC_H #include #include //channel_layout definitions #else #ifdef HAS_FFMPEG_AVCODEC_H #include #include #else #include #include #endif #endif #endif #define LIBAVCODEC_VER_AT_LEAST(major,minor) (LIBAVCODEC_VERSION_MAJOR > major || \ (LIBAVCODEC_VERSION_MAJOR == major && \ LIBAVCODEC_VERSION_MINOR >= minor)) #if !LIBAVCODEC_VER_AT_LEAST(53,0) #define AV_SAMPLE_FMT_S16 SAMPLE_FMT_S16 #define AV_SAMPLE_FMT_FLT SAMPLE_FMT_FLT #endif #if !LIBAVCODEC_VER_AT_LEAST(54,25) #define AV_CODEC_ID_NONE CODEC_ID_NONE #define AV_CODEC_ID_MJPEG CODEC_ID_MJPEG #define AV_CODEC_ID_MPEG1VIDEO CODEC_ID_MPEG1VIDEO #define AV_CODEC_ID_FLV1 CODEC_ID_FLV1 #define AV_CODEC_ID_WMV1 CODEC_ID_WMV1 #define AV_CODEC_ID_MPEG2VIDEO CODEC_ID_MPEG2VIDEO #define AV_CODEC_ID_MSMPEG4V3 CODEC_ID_MSMPEG4V3 #define AV_CODEC_ID_MPEG4 CODEC_ID_MPEG4 #define AV_CODEC_ID_H264 CODEC_ID_H264 #define AV_CODEC_ID_VP8 CODEC_ID_VP8 #define AV_CODEC_ID_THEORA CODEC_ID_THEORA #define AV_CODEC_ID_PCM_S16LE CODEC_ID_PCM_S16LE #define AV_CODEC_ID_MP2 CODEC_ID_MP2 #define AV_CODEC_ID_MP3 CODEC_ID_MP3 #define AV_CODEC_ID_AC3 CODEC_ID_AC3 #define AV_CODEC_ID_AAC CODEC_ID_AAC #define AV_CODEC_ID_VORBIS CODEC_ID_VORBIS #endif #define MAX_DELAYED_FRAMES 50 //Maximum supported delayed frames /*video*/ struct lavcData { AVCodec *codec; #if LIBAVCODEC_VER_AT_LEAST(53,6) AVDictionary *private_options; #endif AVCodecContext *codec_context; AVFrame *picture; AVPacket *outpkt; int delayed_frames; int index_of_df; //index of delayed frame pts in use; INT64 delayed_pts[MAX_DELAYED_FRAMES]; //delayed frames pts int flush_delayed_frames; int flushed_buffers; int flush_done; BYTE* tmpbuf; BYTE* priv_data; int outbuf_size; BYTE* outbuf; int codec_id; int monotonic_pts; }; /*Audio*/ struct lavcAData { AVCodec *codec; AVCodecContext *codec_context; AVFrame *frame; AVPacket *outpkt; BYTE* priv_data; int outbuf_size; BYTE* outbuf; int codec_id; int monotonic_pts; }; //split the private codec data into xiph headers for mkv muxer (vorbis and theora) int avpriv_split_xiph_headers(uint8_t *extradata, int extradata_size, int first_header_size, uint8_t *header_start[3], int header_len[3]); int encode_lavc_frame (BYTE *picture_buf, struct lavcData* data, int format, struct VideoFormatData *videoF); int encode_lavc_audio_frame (void *audio_buf, struct lavcAData* data, struct VideoFormatData *videoF); /* arg = pointer to lavcData struct => * *arg = struct lavcData** */ int clean_lavc (void *arg); int clean_lavc_audio (void* arg); struct lavcData* init_lavc(int width, int height, int fps_num, int fps_den, int codec_ind); struct lavcAData* init_lavc_audio(struct paRecordData *pdata, int codec_ind); #endif guvcview-src-1.7.1/src/image_format.c0000664000175000017500000000513412173235416016564 0ustar paulopaulo/*******************************************************************************# # guvcview http://guvcview.sourceforge.net # # # # Paulo Assis # # # # 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # # ********************************************************************************/ #include #include /* support for internationalization - i18n */ #include #include "defs.h" #include "image_format.h" static iformats_data listSupIFormats[] = //list of supported image formats { { .name = "Jpeg", .description = N_("Jpeg (jpg)"), .extension = "jpg", .pattern ="*.jpg", }, { .name = "Bmp", .description = N_("Bitmap (Bmp)"), .extension = "bmp", .pattern = "*.bmp", }, { .name = "Png", .description = N_("Portable Network Graphics (Png)"), .extension = "png", .pattern = "*.png", }, { .name = "Raw", .description = N_("Raw Image (raw)"), .extension = "raw", .pattern = "*.raw", } }; const char *get_iformat_extension(int ind) { return (listSupIFormats[ind].extension); } const char *get_iformat_pattern(int ind) { return (listSupIFormats[ind].pattern); } const char *get_iformat_desc(int ind) { return (listSupIFormats[ind].description); } guvcview-src-1.7.1/src/video_format.h0000775000175000017500000000623612173235416016624 0ustar paulopaulo/*******************************************************************************# # guvcview http://guvcview.sourceforge.net # # # # Paulo Assis # # # # 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # # ********************************************************************************/ #ifndef VIDEO_FORMAT_H #define VIDEO_FORMAT_H #include "../config.h" #include "defs.h" #include "avilib.h" #include "matroska.h" #define AVI_FORMAT 0 #define MKV_FORMAT 1 #define WEBM_FORMAT 2 #define MAX_VFORMATS 3 typedef struct _vformats_data { gboolean avformat; //is a avformat format const char *name; //format name const char *description; //format description const char *extension; //format extension const char *format_str; const char *pattern; //file filter pattern int flags; //lavf flags } vformats_data; struct VideoFormatData { avi_Context *avi; mkv_Context *mkv; int b_writing_frame; //set when writing frame int b_header_written; //set after mkv header written INT64 old_vpts; //previous video pts INT64 vpts; //video stream presentation time stamp INT64 old_apts; //previous audio time stamp INT64 apts; //audio stream presentation time stamp int vcodec; int64_t vdts; int vblock_align; int vduration; int32_t vflags; int keyframe; int acodec; int64_t adts; int ablock_align; int aduration; int32_t aflags; }; const char *get_vformat_extension(int codec_ind); const char *get_vformat_desc(int codec_ind); const char *get_vformat_pattern(int codec_ind); /** int init_FormatContext(void *data, int format); int clean_FormatContext (void* arg); int write_video_packet (BYTE *picture_buf, int size, int fps, struct VideoFormatData* data); int write_audio_packet (BYTE *audio_buf, int size, struct VideoFormatData* data); **/ #endif guvcview-src-1.7.1/src/port_audio.c0000664000175000017500000002164512173235416016304 0ustar paulopaulo/*******************************************************************************# # guvcview http://guvcview.sourceforge.net # # # # Paulo Assis # # # # 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # # ********************************************************************************/ #include #include "port_audio.h" int portaudio_list_snd_devices(struct GLOBAL *global) { int it, numDevices, defaultDisplayed; const PaDeviceInfo *deviceInfo; //reset device count global->Sound_numInputDev = 0; numDevices = Pa_GetDeviceCount(); if( numDevices < 0 ) { g_print( "SOUND DISABLE: Pa_CountDevices returned 0x%x\n", numDevices ); //err = numDevices; global->Sound_enable=0; } else { global->Sound_DefDev = 0; for( it=0; itdebug) g_print( "--------------------------------------- device #%d\n", it ); // Mark global and API specific default devices defaultDisplayed = 0; // with pulse, ALSA is now listed first and doesn't set a API default- 11-2009 if( it == Pa_GetDefaultInputDevice() ) { if (global->debug) g_print( "[ Default Input" ); defaultDisplayed = 1; global->Sound_DefDev=global->Sound_numInputDev;/*default index in array of input devs*/ } else if( it == Pa_GetHostApiInfo( deviceInfo->hostApi )->defaultInputDevice ) { const PaHostApiInfo *hostInfo = Pa_GetHostApiInfo( deviceInfo->hostApi ); if (global->debug) g_print( "[ Default %s Input", hostInfo->name ); defaultDisplayed = 2; //global->Sound_DefDev=global->Sound_numInputDev;/*index in array of input devs*/ } // OUTPUT device doesn't matter for capture if( it == Pa_GetDefaultOutputDevice() ) { if (global->debug) { g_print( (defaultDisplayed ? "," : "[") ); g_print( " Default Output" ); } defaultDisplayed = 3; } else if( it == Pa_GetHostApiInfo( deviceInfo->hostApi )->defaultOutputDevice ) { const PaHostApiInfo *hostInfo = Pa_GetHostApiInfo( deviceInfo->hostApi ); if (global->debug) { g_print( (defaultDisplayed ? "," : "[") ); g_print( " Default %s Output", hostInfo->name );/* OSS ALSA etc*/ } defaultDisplayed = 4; } if( defaultDisplayed!=0 ) if (global->debug) g_print( " ]\n" ); /* print device info fields */ if (global->debug) { g_print( "Name = %s\n", deviceInfo->name ); g_print( "Host API = %s\n", Pa_GetHostApiInfo( deviceInfo->hostApi )->name ); g_print( "Max inputs = %d", deviceInfo->maxInputChannels ); } // INPUT devices (if it has input channels it's a capture device) if (deviceInfo->maxInputChannels >0) { global->Sound_numInputDev++; //allocate new Sound Device Info global->Sound_IndexDev = g_renew(sndDev, global->Sound_IndexDev, global->Sound_numInputDev); //fill structure with sound data global->Sound_IndexDev[global->Sound_numInputDev-1].id=it; /*saves dev id*/ strncpy(global->Sound_IndexDev[global->Sound_numInputDev-1].name, deviceInfo->name, 511); strncpy(global->Sound_IndexDev[global->Sound_numInputDev-1].description, deviceInfo->name, 255); global->Sound_IndexDev[global->Sound_numInputDev-1].chan=deviceInfo->maxInputChannels; global->Sound_IndexDev[global->Sound_numInputDev-1].samprate=deviceInfo->defaultSampleRate; //Sound_IndexDev[Sound_numInputDev].Hlatency=deviceInfo->defaultHighInputLatency; //Sound_IndexDev[Sound_numInputDev].Llatency=deviceInfo->defaultLowInputLatency; } if (global->debug) { g_print( ", Max outputs = %d\n", deviceInfo->maxOutputChannels ); g_print( "Def. low input latency = %8.3f\n", deviceInfo->defaultLowInputLatency ); g_print( "Def. low output latency = %8.3f\n", deviceInfo->defaultLowOutputLatency ); g_print( "Def. high input latency = %8.3f\n", deviceInfo->defaultHighInputLatency ); g_print( "Def. high output latency = %8.3f\n", deviceInfo->defaultHighOutputLatency ); g_print( "Def. sample rate = %8.2f\n", deviceInfo->defaultSampleRate ); } } if (global->debug) g_print("----------------------------------------------\n"); } return 0; } /*--------------------------- audio record callback -----------------------*/ static int recordCallback (const void *inputBuffer, void *outputBuffer, unsigned long framesPerBuffer, const PaStreamCallbackTimeInfo* timeInfo, PaStreamCallbackFlags statusFlags, void *userData ) { struct paRecordData *pdata = (struct paRecordData*)userData; int channels = pdata->channels; unsigned long numSamples = framesPerBuffer * channels; int res = record_sound ( inputBuffer, numSamples, userData ); if(res < 0 ) return (paComplete); /*capture stopped*/ else return (paContinue); /*still capturing*/ } /*--------------------------- API initialization -------------------------*/ int port_init_audio(struct paRecordData* pdata) { PaError err = paNoError; PaStream *stream = NULL; PaStreamParameters inputParameters; if(stream) { if( !(Pa_IsStreamStopped( stream ))) { Pa_AbortStream( pdata->stream ); Pa_CloseStream( pdata->stream ); pdata->stream = NULL; } } inputParameters.device = pdata->device_id; inputParameters.channelCount = pdata->channels; inputParameters.sampleFormat = PA_SAMPLE_TYPE; if (Pa_GetDeviceInfo( inputParameters.device )) inputParameters.suggestedLatency = Pa_GetDeviceInfo( inputParameters.device )->defaultHighInputLatency; else inputParameters.suggestedLatency = DEFAULT_LATENCY_DURATION/1000.0; inputParameters.hostApiSpecificStreamInfo = NULL; /*---------------------------- start recording Audio. ----------------------------- */ err = Pa_OpenStream( &stream, &inputParameters, NULL, /* &outputParameters, */ pdata->samprate, /* sample rate */ MPG_NUM_SAMP, /* buffer in frames => Mpeg frame size (samples = 1152 samples * channels)*/ paNoFlag, /* PaNoFlag - clip and dhiter*/ recordCallback, /* sound callback */ pdata ); /* callback userData */ if( err != paNoError ) goto error; err = Pa_StartStream( stream ); pdata->stream = (void *) stream; //store stream pointer if( err != paNoError ) goto error; /*should close the stream if error ?*/ return 0; error: g_printerr("An error occured while starting the audio API\n" ); g_printerr("Error number: %d\n", err ); g_printerr("Error message: %s\n", Pa_GetErrorText( err ) ); pdata->streaming=FALSE; if(stream) Pa_AbortStream( stream ); /*lavc is allways checked and cleaned when finishing worker thread*/ return(-1); } int port_close_audio (struct paRecordData *pdata) { PaError err = paNoError; PaStream *stream = (PaStream *) pdata->stream; int ret = 0; /*stops and closes the audio stream*/ if(stream) { if(Pa_IsStreamActive( stream ) > 0) { g_print("Aborting audio stream\n"); err = Pa_AbortStream( stream ); } else { g_print("Stoping audio stream\n"); err = Pa_StopStream( stream ); } if( err != paNoError ) { g_printerr("An error occured while stoping the audio stream\n" ); g_printerr("Error number: %d\n", err ); g_printerr("Error message: %s\n", Pa_GetErrorText( err ) ); ret = -1; } g_print("Closing audio stream...\n"); err = Pa_CloseStream( stream ); if( err != paNoError ) { g_printerr("An error occured while closing the audio stream\n" ); g_printerr("Error number: %d\n", err ); g_printerr("Error message: %s\n", Pa_GetErrorText( err ) ); ret = -1; } } else g_print("Invalid stream pointer.\n"); pdata->stream = NULL; return (ret); } guvcview-src-1.7.1/src/audio_effects.c0000664000175000017500000005126112173235416016734 0ustar paulopaulo/*******************************************************************************# # guvcview http://guvcview.sourceforge.net # # # # Paulo Assis # # # # 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # # ********************************************************************************/ #include #include #include #include "audio_effects.h" #ifndef M_PI #define M_PI 3.14159265358979323846 #endif //clip float samples [-1.0 ; 1.0] static float clip_float (float in) { in = (in < -1.0) ? -1.0 : (in > 1.0) ? 1.0 : in; return in; } /*------------------------------------- Effects ------------------------------------------*/ /* Echo effect */ /*delay_ms: echo delay in ms*/ /*decay: feedback gain (<1) */ void Echo(struct paRecordData* data, AudBuff *proc_buff, struct audio_effects *aud_eff, int delay_ms, float decay) { int samp=0; SAMPLE out; if(aud_eff->ECHO == NULL) { aud_eff->ECHO = g_new0(delay_data, 1); aud_eff->ECHO->buff_size = (int) delay_ms * data->samprate * 0.001; aud_eff->ECHO->delayBuff1 = g_new0(SAMPLE, aud_eff->ECHO->buff_size); aud_eff->ECHO->delayBuff2 = NULL; if(data->channels > 1) aud_eff->ECHO->delayBuff2 = g_new0(SAMPLE, aud_eff->ECHO->buff_size); } for(samp = 0; samp < data->aud_numSamples; samp = samp + data->channels) { out = (0.7 * proc_buff->frame[samp]) + (0.3 * aud_eff->ECHO->delayBuff1[aud_eff->ECHO->delayIndex]); aud_eff->ECHO->delayBuff1[aud_eff->ECHO->delayIndex] = proc_buff->frame[samp] + (aud_eff->ECHO->delayBuff1[aud_eff->ECHO->delayIndex] * decay); proc_buff->frame[samp] = clip_float(out); /*if stereo process second channel in separate*/ if (data->channels > 1) { out = (0.7 * proc_buff->frame[samp+1]) + (0.3 * aud_eff->ECHO->delayBuff2[aud_eff->ECHO->delayIndex]); aud_eff->ECHO->delayBuff2[aud_eff->ECHO->delayIndex] = proc_buff->frame[samp] + (aud_eff->ECHO->delayBuff2[aud_eff->ECHO->delayIndex] * decay); proc_buff->frame[samp+1] = clip_float(out); } if(++(aud_eff->ECHO->delayIndex) >= aud_eff->ECHO->buff_size) aud_eff->ECHO->delayIndex=0; } } /*Butterworth Filter for HP or LP out(n) = a1 * in + a2 * in(n-1) + a3 * in(n-2) - b1*out(n-1) - b2*out(n-2) */ static void Butt(Filt_data *FILT, SAMPLE *Buff, int NumSamples, int channels) { int index = 0; SAMPLE out; for (index = 0; index < NumSamples; index = index + channels) { out = FILT->a1 * Buff[index] + FILT->a2 * FILT->buff_in1[0] + FILT->a3 * FILT->buff_in1[1] - FILT->b1 * FILT->buff_out1[0] - FILT->b2 * FILT->buff_out1[1]; FILT->buff_in1[1] = FILT->buff_in1[0]; //in(n-2) = in(n-1) FILT->buff_in1[0] = Buff[index]; // in(n-1) = in FILT->buff_out1[1] = FILT->buff_out1[0]; //out(n-2) = out(n-1) FILT->buff_out1[0] = out; //out(n-1) = out Buff[index] = clip_float(out); /*process second channel*/ if(channels > 1) { out = FILT->a1 * Buff[index+1] + FILT->a2 * FILT->buff_in2[0] + FILT->a3 * FILT->buff_in2[1] - FILT->b1 * FILT->buff_out2[0] - FILT->b2 * FILT->buff_out2[1]; FILT->buff_in2[1] = FILT->buff_in2[0]; //in(n-2) = in(n-1) FILT->buff_in2[0] = Buff[index+1]; // in(n-1) = in FILT->buff_out2[1] = FILT->buff_out2[0]; //out(n-2) = out(n-1) FILT->buff_out2[0] = out; //out(n-1) = out Buff[index+1] = clip_float(out); } } } /* HP Filter: out(n) = a1 * in + a2 * in(n-1) + a3 * in(n-2) - b1*out(n-1) - b2*out(n-2) f - cuttof freq., from ~0 Hz to SampleRate/2 - though many synths seem to filter only up to SampleRate/4 r = rez amount, from sqrt(2) to ~ 0.1 c = tan(pi * f / sample_rate); a1 = 1.0 / ( 1.0 + r * c + c * c); a2 = -2*a1; a3 = a1; b1 = 2.0 * ( c*c - 1.0) * a1; b2 = ( 1.0 - r * c + c * c) * a1; */ static void HPF(struct paRecordData* data, AudBuff *proc_buff, struct audio_effects *aud_eff, int cutoff_freq, float res) { if(aud_eff->HPF == NULL) { float inv_samprate = 1.0 / data->samprate; aud_eff->HPF = g_new0(Filt_data, 1); aud_eff->HPF->c = tan(M_PI * cutoff_freq * inv_samprate); aud_eff->HPF->a1 = 1.0 / (1.0 + (res * aud_eff->HPF->c) + (aud_eff->HPF->c * aud_eff->HPF->c)); aud_eff->HPF->a2 = -2.0 * aud_eff->HPF->a1; aud_eff->HPF->a3 = aud_eff->HPF->a1; aud_eff->HPF->b1 = 2.0 * ((aud_eff->HPF->c * aud_eff->HPF->c) - 1.0) * aud_eff->HPF->a1; aud_eff->HPF->b2 = (1.0 - (res * aud_eff->HPF->c) + (aud_eff->HPF->c * aud_eff->HPF->c)) * aud_eff->HPF->a1; } Butt(aud_eff->HPF, proc_buff->frame, data->aud_numSamples, data->channels); } /* LP Filter: out(n) = a1 * in + a2 * in(n-1) + a3 * in(n-2) - b1*out(n-1) - b2*out(n-2) f - cuttof freq., from ~0 Hz to SampleRate/2 - though many synths seem to filter only up to SampleRate/4 r = rez amount, from sqrt(2) to ~ 0.1 c = 1.0 / tan(pi * f / sample_rate); a1 = 1.0 / ( 1.0 + r * c + c * c); a2 = 2* a1; a3 = a1; b1 = 2.0 * ( 1.0 - c*c) * a1; b2 = ( 1.0 - r * c + c * c) * a1; */ static void LPF(struct paRecordData* data, AudBuff *proc_buff, struct audio_effects *aud_eff, float cutoff_freq, float res) { if(aud_eff->LPF1 == NULL) { aud_eff->LPF1 = g_new0(Filt_data, 1); aud_eff->LPF1->c = 1.0 / tan(M_PI * cutoff_freq / data->samprate); aud_eff->LPF1->a1 = 1.0 / (1.0 + (res * aud_eff->LPF1->c) + (aud_eff->LPF1->c * aud_eff->LPF1->c)); aud_eff->LPF1->a2 = 2.0 * aud_eff->LPF1->a1; aud_eff->LPF1->a3 = aud_eff->LPF1->a1; aud_eff->LPF1->b1 = 2.0 * (1.0 - (aud_eff->LPF1->c * aud_eff->LPF1->c)) * aud_eff->LPF1->a1; aud_eff->LPF1->b2 = (1.0 - (res * aud_eff->LPF1->c) + (aud_eff->LPF1->c * aud_eff->LPF1->c)) * aud_eff->LPF1->a1; } Butt(aud_eff->LPF1, proc_buff->frame, data->aud_numSamples, data->channels); } /* Wave distort parameters: in - input from [-1..1] a - distort parameter from 1 to infinity */ /* SAMPLE waveshape_distort( SAMPLE in, float a ) { return (in*(abs(in) + a)/(in*in + (a-1)*abs(in) + 1)); } */ /* fold back distortion parameters: in input from [-1..1] treshold - fold treshold value [-1..1] */ /* SAMPLE foldback(SAMPLE in, float threshold) { if (in > threshold || in < -threshold) { in = fabs(fabs(fmod(in - threshold, threshold * 4)) - threshold * 2) - threshold; } return in; } */ /* Non-linear amplifier with soft distortion curve. */ static SAMPLE CubicAmplifier( SAMPLE input ) { SAMPLE out; float temp; if( input < SAMPLE_SILENCE ) { temp = input + 1.0f; out = (temp * temp * temp) - 1.0f; } else { temp = input - 1.0f; out = (temp * temp * temp) + 1.0f; } return clip_float(out); } #define FUZZ(x) CubicAmplifier(CubicAmplifier(CubicAmplifier(CubicAmplifier(x)))) /* Fuzz distortion */ void Fuzz (struct paRecordData* data, AudBuff *proc_buff, struct audio_effects *aud_eff) { int samp=0; for(samp = 0; samp < data->aud_numSamples; samp++) proc_buff->frame[samp] = FUZZ(proc_buff->frame[samp]); HPF(data, proc_buff, aud_eff, 1000, 0.9); } /* four paralell Comb filters for reverb */ static void CombFilter4 (struct paRecordData* data, AudBuff *proc_buff, struct audio_effects *aud_eff, int delay1_ms, // delay for filter 1 int delay2_ms, //delay for filter 2 int delay3_ms, //delay for filter 3 int delay4_ms, //delay for filter 4 float gain1, // feed gain for filter 1 float gain2, //feed gain for filter 2 float gain3, //feed gain for filter 3 float gain4, //feed gain for filter 4 float in_gain) //input line gain { int samp=0; SAMPLE out1, out2, out3, out4; /*buff_size in samples*/ if (aud_eff->COMB4 == NULL) { aud_eff->COMB4 = g_new0(Comb4_data, 1); /*buff_size in samples*/ aud_eff->COMB4->buff_size1 = (int) delay1_ms * (data->samprate * 0.001); aud_eff->COMB4->buff_size2 = (int) delay2_ms * (data->samprate * 0.001); aud_eff->COMB4->buff_size3 = (int) delay3_ms * (data->samprate * 0.001); aud_eff->COMB4->buff_size4 = (int) delay4_ms * (data->samprate * 0.001); aud_eff->COMB4->CombBuff10 = g_new0(SAMPLE, aud_eff->COMB4->buff_size1); aud_eff->COMB4->CombBuff20 = g_new0(SAMPLE, aud_eff->COMB4->buff_size2); aud_eff->COMB4->CombBuff30 = g_new0(SAMPLE, aud_eff->COMB4->buff_size3); aud_eff->COMB4->CombBuff40 = g_new0(SAMPLE, aud_eff->COMB4->buff_size4); aud_eff->COMB4->CombBuff11 = NULL; aud_eff->COMB4->CombBuff21 = NULL; aud_eff->COMB4->CombBuff31 = NULL; aud_eff->COMB4->CombBuff41 = NULL; if(data->channels > 1) { aud_eff->COMB4->CombBuff11 = g_new0(SAMPLE, aud_eff->COMB4->buff_size1); aud_eff->COMB4->CombBuff21 = g_new0(SAMPLE, aud_eff->COMB4->buff_size2); aud_eff->COMB4->CombBuff31 = g_new0(SAMPLE, aud_eff->COMB4->buff_size3); aud_eff->COMB4->CombBuff41 = g_new0(SAMPLE, aud_eff->COMB4->buff_size4); } } for(samp = 0; samp < data->aud_numSamples; samp = samp + data->channels) { out1 = in_gain * proc_buff->frame[samp] + gain1 * aud_eff->COMB4->CombBuff10[aud_eff->COMB4->CombIndex1]; out2 = in_gain * proc_buff->frame[samp] + gain2 * aud_eff->COMB4->CombBuff20[aud_eff->COMB4->CombIndex2]; out3 = in_gain * proc_buff->frame[samp] + gain3 * aud_eff->COMB4->CombBuff30[aud_eff->COMB4->CombIndex3]; out4 = in_gain * proc_buff->frame[samp] + gain4 * aud_eff->COMB4->CombBuff40[aud_eff->COMB4->CombIndex4]; aud_eff->COMB4->CombBuff10[aud_eff->COMB4->CombIndex1] = proc_buff->frame[samp] + gain1 * aud_eff->COMB4->CombBuff10[aud_eff->COMB4->CombIndex1]; aud_eff->COMB4->CombBuff20[aud_eff->COMB4->CombIndex2] = proc_buff->frame[samp] + gain2 * aud_eff->COMB4->CombBuff20[aud_eff->COMB4->CombIndex2]; aud_eff->COMB4->CombBuff30[aud_eff->COMB4->CombIndex3] = proc_buff->frame[samp] + gain3 * aud_eff->COMB4->CombBuff30[aud_eff->COMB4->CombIndex3]; aud_eff->COMB4->CombBuff40[aud_eff->COMB4->CombIndex4] = proc_buff->frame[samp] + gain4 * aud_eff->COMB4->CombBuff40[aud_eff->COMB4->CombIndex4]; proc_buff->frame[samp] = clip_float(out1 + out2 + out3 + out4); /*if stereo process second channel */ if(data->channels > 1) { out1 = in_gain * proc_buff->frame[samp+1] + gain1 * aud_eff->COMB4->CombBuff11[aud_eff->COMB4->CombIndex1]; out2 = in_gain * proc_buff->frame[samp+1] + gain2 * aud_eff->COMB4->CombBuff21[aud_eff->COMB4->CombIndex2]; out3 = in_gain * proc_buff->frame[samp+1] + gain3 * aud_eff->COMB4->CombBuff31[aud_eff->COMB4->CombIndex3]; out4 = in_gain * proc_buff->frame[samp+1] + gain4 * aud_eff->COMB4->CombBuff41[aud_eff->COMB4->CombIndex4]; aud_eff->COMB4->CombBuff11[aud_eff->COMB4->CombIndex1] = proc_buff->frame[samp+1] + gain1 * aud_eff->COMB4->CombBuff11[aud_eff->COMB4->CombIndex1]; aud_eff->COMB4->CombBuff21[aud_eff->COMB4->CombIndex2] = proc_buff->frame[samp+1] + gain2 * aud_eff->COMB4->CombBuff21[aud_eff->COMB4->CombIndex2]; aud_eff->COMB4->CombBuff31[aud_eff->COMB4->CombIndex3] = proc_buff->frame[samp+1] + gain3 * aud_eff->COMB4->CombBuff31[aud_eff->COMB4->CombIndex3]; aud_eff->COMB4->CombBuff41[aud_eff->COMB4->CombIndex4] = proc_buff->frame[samp+1] + gain4 * aud_eff->COMB4->CombBuff41[aud_eff->COMB4->CombIndex4]; proc_buff->frame[samp+1] = clip_float(out1 + out2 + out3 + out4); } if(++(aud_eff->COMB4->CombIndex1) >= aud_eff->COMB4->buff_size1) aud_eff->COMB4->CombIndex1=0; if(++(aud_eff->COMB4->CombIndex2) >= aud_eff->COMB4->buff_size2) aud_eff->COMB4->CombIndex2=0; if(++(aud_eff->COMB4->CombIndex3) >= aud_eff->COMB4->buff_size3) aud_eff->COMB4->CombIndex3=0; if(++(aud_eff->COMB4->CombIndex4) >= aud_eff->COMB4->buff_size4) aud_eff->COMB4->CombIndex4=0; } } /* all pass filter */ /*delay_ms: delay in ms */ /*gain: filter gain */ static void all_pass (delay_data *AP, SAMPLE *Buff, int NumSamples, int channels, float gain) { int samp = 0; float inv_gain = 1.0 / gain; for(samp = 0; samp < NumSamples; samp += channels) { AP->delayBuff1[AP->delayIndex] = Buff[samp] + (gain * AP->delayBuff1[AP->delayIndex]); Buff[samp] = ((AP->delayBuff1[AP->delayIndex] * (1 - gain*gain)) - Buff[samp]) * inv_gain; if(channels > 1) { AP->delayBuff2[AP->delayIndex] = Buff[samp+1] + (gain * AP->delayBuff2[AP->delayIndex]); Buff[samp+1] = ((AP->delayBuff2[AP->delayIndex] * (1 - gain*gain)) - Buff[samp+1]) * inv_gain; } if(++(AP->delayIndex) >= AP->buff_size) AP->delayIndex=0; } } /*all pass for reverb*/ static void all_pass1 (struct paRecordData* data, AudBuff *proc_buff, struct audio_effects *aud_eff, int delay_ms, float gain) { if(aud_eff->AP1 == NULL) { aud_eff->AP1 = g_new0(delay_data, 1); aud_eff->AP1->buff_size = (int) delay_ms * (data->samprate * 0.001); aud_eff->AP1->delayBuff1 = g_new0(SAMPLE, aud_eff->AP1->buff_size); aud_eff->AP1->delayBuff2 = NULL; if(data->channels > 1) aud_eff->AP1->delayBuff2 = g_new0(SAMPLE, aud_eff->AP1->buff_size); } all_pass (aud_eff->AP1, proc_buff->frame, data->aud_numSamples, data->channels, gain); } void Reverb (struct paRecordData* data, AudBuff *proc_buff, struct audio_effects *aud_eff, int delay_ms) { /*4 parallel comb filters*/ CombFilter4 (data, proc_buff, aud_eff, delay_ms, delay_ms - 5, delay_ms -10, delay_ms -15, 0.55, 0.6, 0.5, 0.45, 0.7); /*all pass*/ all_pass1 (data, proc_buff, aud_eff, delay_ms, 0.75); } /* Parameters: freq - LFO frequency (1.5) startphase - LFO startphase in RADIANS - usefull for stereo WahWah (0) depth - Wah depth (0.7) freqofs - Wah frequency offset (0.3) res - Resonance (2.5) !!!!!!!!!!!!! IMPORTANT!!!!!!!!! : depth and freqofs should be from 0(min) to 1(max) ! res should be greater than 0 ! */ #define lfoskipsamples 30 void WahWah (struct paRecordData* data, AudBuff *proc_buff, struct audio_effects *aud_eff, float freq, float startphase, float depth, float freqofs, float res) { float frequency, omega, sn, cs, alpha; float in, out; if(aud_eff->wahData == NULL) { aud_eff->wahData = g_new0(WAHData, 1); aud_eff->wahData->lfoskip = freq * 2 * M_PI / data->samprate; aud_eff->wahData->phase = startphase; //if right channel set: phase += (float)M_PI; } int samp = 0; for(samp = 0; samp < data->aud_numSamples; samp++) { in = proc_buff->frame[samp]; if ((aud_eff->wahData->skipcount++) % lfoskipsamples == 0) { frequency = (1 + cos(aud_eff->wahData->skipcount * aud_eff->wahData->lfoskip + aud_eff->wahData->phase)) * 0.5; frequency = frequency * depth * (1 - freqofs) + freqofs; frequency = exp((frequency - 1) * 6); omega = M_PI * frequency; sn = sin(omega); cs = cos(omega); alpha = sn / (2 * res); aud_eff->wahData->b0 = (1 - cs) * 0.5; aud_eff->wahData->b1 = 1 - cs; aud_eff->wahData->b2 = (1 - cs) * 0.5; aud_eff->wahData->a0 = 1 + alpha; aud_eff->wahData->a1 = -2 * cs; aud_eff->wahData->a2 = 1 - alpha; } out = (aud_eff->wahData->b0 * in + aud_eff->wahData->b1 * aud_eff->wahData->xn1 + aud_eff->wahData->b2 * aud_eff->wahData->xn2 - aud_eff->wahData->a1 * aud_eff->wahData->yn1 - aud_eff->wahData->a2 * aud_eff->wahData->yn2) / aud_eff->wahData->a0; aud_eff->wahData->xn2 = aud_eff->wahData->xn1; aud_eff->wahData->xn1 = in; aud_eff->wahData->yn2 = aud_eff->wahData->yn1; aud_eff->wahData->yn1 = out; proc_buff->frame[samp] = clip_float(out); } } /*reduce number of samples with linear interpolation*/ //rate - rate of samples to remove [1,...[ // rate = 1-> XXX (splits channels) 2 -> X0X0X 3 -> X00X00X 4 -> X000X000X static void change_rate_less(RATE_data *RT, SAMPLE *Buff, int rate, int NumSamples, int channels) { int samp = 0; int n = 0, i = 0; //float mid1 = 0.0; //float mid2 = 0.0; //float inv_rate = 1.0 / rate; for (samp = 0; samp < NumSamples; samp += channels) { if (n==0) { RT->rBuff1[i] = Buff[samp]; if(channels > 1) RT->rBuff2[i] = Buff[samp + 1]; i++; } if(++n >= rate) n=0; } RT->numsamples = i; } /*increase audio tempo by adding audio windows of wtime_ms in given rate */ /*rate: 2 -> [w1..w2][w1..w2][w2..w3][w2..w3] 3-> [w1..w2][w1..w2][w1..w2][w2..w3][w2..w3][w2..w3]*/ static void change_tempo_more(struct paRecordData* data, AudBuff *proc_buff, struct audio_effects *aud_eff, int rate, int wtime_ms) { int samp = 0; int i = 0; int r = 0; int index = 0; if(aud_eff->RT1->wBuff1 == NULL) { aud_eff->RT1->wSize = wtime_ms * data->samprate * 0.001; aud_eff->RT1->wBuff1 = g_new0(SAMPLE, aud_eff->RT1->wSize); if (data->channels >1) aud_eff->RT1->wBuff2 = g_new0(SAMPLE, aud_eff->RT1->wSize); } //printf("samples = %i\n", data->RT1->numsamples); for(samp = 0; samp < aud_eff->RT1->numsamples; samp++) { aud_eff->RT1->wBuff1[i] = aud_eff->RT1->rBuff1[samp]; if(data->channels > 1) aud_eff->RT1->wBuff2[i] = aud_eff->RT1->rBuff2[samp]; if((++i) > aud_eff->RT1->wSize) { for (r = 0; r < rate; r++) { for(i = 0; i < aud_eff->RT1->wSize; i++) { proc_buff->frame[index] = aud_eff->RT1->wBuff1[i]; if (data->channels > 1) proc_buff->frame[index +1] = aud_eff->RT1->wBuff2[i]; index += data->channels; } } i = 0; } } } void change_pitch (struct paRecordData* data, AudBuff *proc_buff, struct audio_effects *aud_eff, int rate) { if(aud_eff->RT1 == NULL) { aud_eff->RT1 = g_new0(RATE_data, 1); aud_eff->RT1->wBuff1 = NULL; aud_eff->RT1->wBuff2 = NULL; aud_eff->RT1->rBuff1 = g_new0(SAMPLE, (data->aud_numSamples/data->channels)); aud_eff->RT1->rBuff2 = NULL; if(data->channels > 1) aud_eff->RT1->rBuff2 = g_new0(SAMPLE, (data->aud_numSamples/data->channels)); } //printf("all samples: %i\n",data->aud_numSamples); change_rate_less(aud_eff->RT1, proc_buff->frame, rate, data->aud_numSamples, data->channels); change_tempo_more(data, proc_buff, aud_eff, rate, 20); LPF(data, proc_buff, aud_eff, (data->samprate * 0.25), 0.9); } struct audio_effects* init_audio_effects (void) { struct audio_effects* aud_eff; aud_eff = g_new0(struct audio_effects, 1); /*Echo effect data */ aud_eff->ECHO = NULL; /* 4 parallel comb filters data*/ aud_eff->COMB4 = NULL; /*all pass 1 filter data*/ aud_eff->AP1 = NULL; /*WahWah effect data*/ aud_eff->wahData = NULL; /*high pass filter data*/ aud_eff->HPF = NULL; /*rate transposer*/ aud_eff->RT1 = NULL; /*low pass filter*/ aud_eff->LPF1 = NULL; return (aud_eff); } void close_DELAY(delay_data *DELAY) { if(DELAY != NULL) { g_free(DELAY->delayBuff1); g_free(DELAY->delayBuff2); g_free(DELAY); } } static void close_COMB4(Comb4_data *COMB4) { if(COMB4 != NULL) { g_free(COMB4->CombBuff10); g_free(COMB4->CombBuff20); g_free(COMB4->CombBuff30); g_free(COMB4->CombBuff40); g_free(COMB4->CombBuff11); g_free(COMB4->CombBuff21); g_free(COMB4->CombBuff31); g_free(COMB4->CombBuff41); g_free(COMB4); } } void close_FILT(Filt_data *FILT) { if(FILT != NULL) { g_free(FILT); } } void close_WAHWAH(WAHData *wahData) { if(wahData != NULL) { g_free(wahData); } } void close_REVERB(struct audio_effects *aud_eff) { close_DELAY(aud_eff->AP1); aud_eff->AP1 = NULL; close_COMB4(aud_eff->COMB4); aud_eff->COMB4 = NULL; } void close_pitch (struct audio_effects *aud_eff) { if(aud_eff->RT1 != NULL) { g_free(aud_eff->RT1->rBuff1); g_free(aud_eff->RT1->rBuff2); g_free(aud_eff->RT1->wBuff1); g_free(aud_eff->RT1->wBuff2); g_free(aud_eff->RT1); aud_eff->RT1 = NULL; close_FILT(aud_eff->LPF1); aud_eff->LPF1 = NULL; } } void close_audio_effects (struct audio_effects *aud_eff) { close_DELAY(aud_eff->ECHO); aud_eff->ECHO = NULL; close_REVERB(aud_eff); close_WAHWAH(aud_eff->wahData); aud_eff->wahData = NULL; close_FILT(aud_eff->HPF); aud_eff->HPF = NULL; close_pitch(aud_eff); g_free(aud_eff); aud_eff = NULL; } guvcview-src-1.7.1/src/v4l2_controls.h0000664000175000017500000001042312173235416016646 0ustar paulopaulo/*******************************************************************************# # guvcview http://guvcview.sourceforge.net # # # # Paulo Assis # # # # 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # # ********************************************************************************/ #ifndef V4L2_CONTROLS_H #define V4L2_CONTROLS_H #include #include #include typedef struct _Control { struct v4l2_queryctrl control; struct v4l2_querymenu *menu; int32_t class; int32_t value; //also used for string max size int64_t value64; char *string; //widgets GtkWidget * widget; GtkWidget * label; GtkWidget *spinbutton; //next control in the list struct _Control *next; } Control; struct VidState { GtkWidget * table; Control *control_list; int num_controls; int width_req; int height_req; }; /* * returns a Control structure NULL terminated linked list * with all of the device controls with Read/Write permissions. * These are the only ones that we can store/restore. * Also sets num_ctrls with the controls count. */ Control *get_control_list(int hdevice, int *num_ctrls); /* * creates the control associated widgets for all controls in the list */ void create_control_widgets(Control *control_list, void *all_data, int control_only, int verbose); /* * Returns the Control structure corresponding to control id, * from the control list. */ Control *get_ctrl_by_id(Control *control_list, int id); /* * Goes through the control list and gets the controls current values */ void get_ctrl_values (int hdevice, Control *control_list, int num_controls, void *all_data); /* * Gets the value for control id * and updates control flags and widgets */ int get_ctrl(int hdevice, Control *control_list, int id, void *all_data); /* * Disables special auto-controls with higher IDs than * their absolute/relative counterparts * this is needed before restoring controls state */ void disable_special_auto (int hdevice, Control *control_list, int id); /* * Goes through the control list and tries to set the controls values */ void set_ctrl_values (int hdevice, Control *control_list, int num_controls); /* * sets all controls to default values */ void set_default_values(int hdevice, Control *control_list, int num_controls, void *all_data); /* * sets the value for control id */ int set_ctrl(int hdevice, Control *control_list, int id); /* * frees the control list allocations */ void free_control_list (Control *control_list); /* * sets pan tilt (direction = 1 or -1) */ void uvcPanTilt (int hdevice, Control *control_list, int is_pan, int direction); #ifndef V4L2_CID_IRIS_ABSOLUTE #define V4L2_CID_IRIS_ABSOLUTE (V4L2_CID_CAMERA_CLASS_BASE +17) #endif #ifndef V4L2_CID_IRIS_RELATIVE #define V4L2_CID_IRIS_RELATIVE (V4L2_CID_CAMERA_CLASS_BASE +18) #endif #ifndef V4L2_CTRL_TYPE_STRING #define V4L2_CTRL_TYPE_STRING 7 #define DISABLE_STRING_CONTROLS #endif #endif guvcview-src-1.7.1/src/menubar.c0000775000175000017500000002576612173235416015603 0ustar paulopaulo/*******************************************************************************# # guvcview http://guvcview.sourceforge.net # # # # Paulo Assis # # Nobuhiro Iwamatsu # # Dr. Alexander K. Seewald # # Autofocus algorithm # # Flemming Frandsen # # George Sedov # # # # 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # # ********************************************************************************/ #include #include /* support for internationalization - i18n */ #include /* locale.h is needed if -O0 used (no optimiztions) */ /* otherwise included from libintl.h on glib/gi18n.h */ #include #include #include "../config.h" #include "string_utils.h" #include "options.h" #include "vcodecs.h" #include "acodecs.h" #include "callbacks.h" GtkWidget *create_menu(struct ALL_DATA *all_data, int control_only) { struct GLOBAL *global = all_data->global; struct GWIDGET *gwidget = all_data->gwidget; GtkWidget *menubar; GtkWidget *controls_menu; GtkWidget *controls_top; GtkWidget *controls_load; GtkWidget *controls_save; GtkWidget *controls_default; GtkWidget *camera_button_menu; GtkWidget *camera_button_top; menubar = gtk_menu_bar_new(); gtk_menu_bar_set_pack_direction(GTK_MENU_BAR(menubar), GTK_PACK_DIRECTION_LTR); controls_menu = gtk_menu_new(); //controls menu controls_top = gtk_menu_item_new_with_label(_("Settings")); controls_load = gtk_menu_item_new_with_label(_("Load Profile")); controls_save = gtk_menu_item_new_with_label(_("Save Profile")); controls_default = gtk_menu_item_new_with_label(_("Hardware Defaults")); gtk_widget_show (controls_top); gtk_widget_show (controls_load); gtk_widget_show (controls_save); gtk_widget_show (controls_default); camera_button_menu = gtk_menu_new(); camera_button_top = gtk_menu_item_new_with_label(_("Camera Button")); GSList *camera_button_group = NULL; GtkWidget *def_image = gtk_radio_menu_item_new_with_label(camera_button_group, _("Capture Image")); g_object_set_data (G_OBJECT (def_image), "camera_default", GINT_TO_POINTER(0)); gtk_menu_shell_append(GTK_MENU_SHELL(camera_button_menu), def_image); camera_button_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (def_image)); GtkWidget *def_video = gtk_radio_menu_item_new_with_label(camera_button_group, _("Capture Video")); g_object_set_data (G_OBJECT (def_video), "camera_default", GINT_TO_POINTER(1)); gtk_menu_shell_append(GTK_MENU_SHELL(camera_button_menu), def_video); gtk_widget_show (camera_button_top); gtk_widget_show (def_image); gtk_widget_show (def_video); gtk_menu_item_set_submenu(GTK_MENU_ITEM(camera_button_top), camera_button_menu); if (global->default_action == 0) gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (def_image), TRUE); else gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (def_video), TRUE); g_signal_connect (GTK_RADIO_MENU_ITEM(def_image), "toggled", G_CALLBACK (camera_button_menu_changed), all_data); g_signal_connect (GTK_RADIO_MENU_ITEM(def_video), "toggled", G_CALLBACK (camera_button_menu_changed), all_data); g_object_set_data (G_OBJECT (controls_save), "profile_dialog", GINT_TO_POINTER(1)); g_signal_connect (GTK_MENU_ITEM(controls_save), "activate", G_CALLBACK (Profile_clicked), all_data); g_object_set_data (G_OBJECT (controls_load), "profile_dialog", GINT_TO_POINTER(0)); g_signal_connect (GTK_MENU_ITEM(controls_load), "activate", G_CALLBACK (Profile_clicked), all_data); g_signal_connect (GTK_MENU_ITEM(controls_default), "activate", G_CALLBACK (Defaults_clicked), all_data); gtk_menu_item_set_submenu(GTK_MENU_ITEM(controls_top), controls_menu); gtk_menu_shell_append(GTK_MENU_SHELL(controls_menu), controls_load); gtk_menu_shell_append(GTK_MENU_SHELL(controls_menu), controls_save); gtk_menu_shell_append(GTK_MENU_SHELL(controls_menu), controls_default); gtk_menu_shell_append(GTK_MENU_SHELL(controls_menu), camera_button_top); gtk_menu_shell_append(GTK_MENU_SHELL(menubar), controls_top); if(!control_only) /*control_only exclusion */ { GtkWidget *item = NULL; GtkWidget *video_menu; //GtkWidget *video_top; GtkWidget *video_file; GtkWidget *video_timestamp; GtkWidget *video_codec_menu; GtkWidget *video_codec_top; GtkWidget *video_codec_prop; GtkWidget *audio_codec_menu; GtkWidget *audio_codec_top; GtkWidget *audio_codec_prop; GtkWidget *photo_menu; //GtkWidget *photo_top; GtkWidget *photo_file; GtkWidget *photo_timestamp; video_menu = gtk_menu_new(); photo_menu = gtk_menu_new(); //video menu gwidget->menu_video_top = gtk_menu_item_new_with_label(_("Video")); video_file = gtk_menu_item_new_with_label(_("File")); video_timestamp = gtk_check_menu_item_new_with_label(_("Increment Filename")); gtk_widget_show (gwidget->menu_video_top); gtk_widget_show (video_file); gtk_widget_show (video_timestamp); /** flag the file dialog as video file*/ g_object_set_data (G_OBJECT (video_file), "file_butt", GINT_TO_POINTER(1)); g_signal_connect (GTK_MENU_ITEM(video_file), "activate", G_CALLBACK (file_chooser), all_data); /** add callback to Append timestamp */ gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (video_timestamp), (global->vid_inc > 0)); g_signal_connect (GTK_CHECK_MENU_ITEM(video_timestamp), "toggled", G_CALLBACK (video_prefix_toggled), all_data); //video codec submenu video_codec_menu = gtk_menu_new(); video_codec_top = gtk_menu_item_new_with_label(_("Video Codec")); gtk_widget_show (video_codec_top); gtk_menu_item_set_submenu(GTK_MENU_ITEM(video_codec_top), video_codec_menu); //Add codecs to submenu gwidget->vgroup = NULL; int num_vcodecs = setVcodecVal(); int vcodec_ind =0; for (vcodec_ind =0; vcodec_ind < num_vcodecs; vcodec_ind++) { item = gtk_radio_menu_item_new_with_label(gwidget->vgroup, gettext(get_desc4cc(vcodec_ind))); if (vcodec_ind == global->VidCodec) gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (item), TRUE); //NOTE: GSList indexes (g_slist_index) are in reverse order: last inserted has index 0 gwidget->vgroup = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (item)); gtk_widget_show (item); gtk_menu_shell_append(GTK_MENU_SHELL(video_codec_menu), item); g_signal_connect (GTK_RADIO_MENU_ITEM(item), "toggled", G_CALLBACK (VidCodec_menu_changed), all_data); } video_codec_prop = gtk_menu_item_new_with_label(_("Video Codec Properties")); gtk_widget_show (video_codec_prop); g_signal_connect (GTK_MENU_ITEM(video_codec_prop), "activate", G_CALLBACK (lavc_properties), all_data); //Audio codec submenu audio_codec_menu = gtk_menu_new(); audio_codec_top = gtk_menu_item_new_with_label(_("Audio Codec")); gtk_widget_show (audio_codec_top); gtk_menu_item_set_submenu(GTK_MENU_ITEM(audio_codec_top), audio_codec_menu); //Add codecs to submenu gwidget->agroup = NULL; int num_acodecs = setAcodecVal(); int acodec_ind =0; for (acodec_ind =0; acodec_ind < num_acodecs; acodec_ind++) { item = gtk_radio_menu_item_new_with_label(gwidget->agroup, gettext(get_aud_desc4cc(acodec_ind))); gwidget->agroup = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (item)); if (acodec_ind == global->AudCodec) gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (item), TRUE); gtk_widget_show (item); gtk_menu_shell_append(GTK_MENU_SHELL(audio_codec_menu), item); g_signal_connect (GTK_RADIO_MENU_ITEM(item), "toggled", G_CALLBACK (AudCodec_menu_changed), all_data); } audio_codec_prop = gtk_menu_item_new_with_label(_("Audio Codec Properties")); gtk_widget_show (audio_codec_prop); g_signal_connect (GTK_MENU_ITEM(audio_codec_prop), "activate", G_CALLBACK (lavc_audio_properties), all_data); gtk_menu_item_set_submenu(GTK_MENU_ITEM(gwidget->menu_video_top), video_menu); gtk_menu_shell_append(GTK_MENU_SHELL(video_menu), video_file); gtk_menu_shell_append(GTK_MENU_SHELL(video_menu), video_timestamp); gtk_menu_shell_append(GTK_MENU_SHELL(video_menu), video_codec_top); gtk_menu_shell_append(GTK_MENU_SHELL(video_menu), video_codec_prop); gtk_menu_shell_append(GTK_MENU_SHELL(video_menu), audio_codec_top); gtk_menu_shell_append(GTK_MENU_SHELL(video_menu), audio_codec_prop); gtk_menu_shell_append(GTK_MENU_SHELL(menubar), gwidget->menu_video_top); //photo menu gwidget->menu_photo_top = gtk_menu_item_new_with_label(_("Photo")); photo_file = gtk_menu_item_new_with_label(_("File")); photo_timestamp = gtk_check_menu_item_new_with_label(_("Increment Filename")); gtk_widget_show (gwidget->menu_photo_top); gtk_widget_show (photo_file); gtk_widget_show (photo_timestamp); /** flag the file dialog as image file*/ g_object_set_data (G_OBJECT (photo_file), "file_butt", GINT_TO_POINTER(0)); g_signal_connect (GTK_MENU_ITEM(photo_file), "activate", G_CALLBACK (file_chooser), all_data); /** add callback to Append timestamp */ gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (photo_timestamp), (global->image_inc > 0)); g_signal_connect (GTK_CHECK_MENU_ITEM(photo_timestamp), "toggled", G_CALLBACK (image_prefix_toggled), all_data); gtk_menu_item_set_submenu(GTK_MENU_ITEM(gwidget->menu_photo_top), photo_menu); gtk_menu_shell_append(GTK_MENU_SHELL(photo_menu), photo_file); gtk_menu_shell_append(GTK_MENU_SHELL(photo_menu), photo_timestamp); gtk_menu_shell_append(GTK_MENU_SHELL(menubar), gwidget->menu_photo_top); } gtk_widget_show (menubar); gtk_container_set_resize_mode (GTK_CONTAINER(menubar), GTK_RESIZE_PARENT); return menubar; } guvcview-src-1.7.1/src/autofocus.h0000664000175000017500000000551212173235416016147 0ustar paulopaulo/*******************************************************************************# # guvcview http://guvcview.sourceforge.net # # # # Paulo Assis # # Dr. Alexander K. Seewald # # # # 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # # ********************************************************************************/ /*******************************************************************************# # # # autofocus - using dct for sharpness measure # # # # # ********************************************************************************/ #ifndef AUTOFOCUS_H #define AUTOFOCUS_H #include "defs.h" #define MAX_ARR_S 20 struct focusData { int focus; int step; int old_focus; int right; int left; int sharpness; int focus_sharpness; int sharpLeft; int sharpRight; int id; int f_max; int f_min; int f_step; int i_step; int focusDir; int arr_sharp[MAX_ARR_S]; int arr_foc[MAX_ARR_S]; int ind; int flag; int setFocus; int focus_wait; }; struct focusData *initFocusData (int f_max, int f_min, int step, int id); int getSharpness (BYTE* img, int width, int height, int t); int getSharpMeasure (BYTE *img, int width, int height, int t); int getFocusVal (struct focusData *AFdata); #endif guvcview-src-1.7.1/src/video.c0000775000175000017500000005620112173235416015244 0ustar paulopaulo/*******************************************************************************# # guvcview http://guvcview.sourceforge.net # # # # Paulo Assis # # Nobuhiro Iwamatsu # # Add UYVY color support(Macbook iSight) # # Flemming Frandsen # # Add VU meter OSD # # # # 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # # ********************************************************************************/ #include #include #include #include #include #include "defs.h" #include "video.h" #include "guvcview.h" #include "v4l2uvc.h" #include "colorspaces.h" #include "video_filters.h" #include "jpgenc.h" #include "autofocus.h" #include "picture.h" #include "ms_time.h" #include "string_utils.h" #include "callbacks.h" #include "create_video.h" #include "create_image.h" #include "timers.h" #include "osd.h" #define __AMUTEX &pdata->mutex #define __VMUTEX &videoIn->mutex #define __GMUTEX &global->mutex static Uint32 SDL_VIDEO_Flags = SDL_ANYFORMAT | SDL_RESIZABLE; static const SDL_VideoInfo *info; static SDL_Overlay * video_init(void *data, SDL_Surface **pscreen) { struct ALL_DATA *all_data = (struct ALL_DATA *) data; struct GLOBAL *global = all_data->global; int width = global->width; int height = global->height; if (*pscreen == NULL) //init SDL { char driver[128]; /*----------------------------- Test SDL capabilities ---------------------*/ if (SDL_Init(SDL_INIT_VIDEO|SDL_INIT_TIMER) < 0) { g_printerr("Couldn't initialize SDL: %s\n", SDL_GetError()); exit(1); } /* For this version, we will use hardware acceleration as default*/ if(global->hwaccel) { if ( ! getenv("SDL_VIDEO_YUV_HWACCEL") ) putenv("SDL_VIDEO_YUV_HWACCEL=1"); if ( ! getenv("SDL_VIDEO_YUV_DIRECT") ) putenv("SDL_VIDEO_YUV_DIRECT=1"); } else { if ( ! getenv("SDL_VIDEO_YUV_HWACCEL") ) putenv("SDL_VIDEO_YUV_HWACCEL=0"); if ( ! getenv("SDL_VIDEO_YUV_DIRECT") ) putenv("SDL_VIDEO_YUV_DIRECT=0"); } if (SDL_VideoDriverName(driver, sizeof(driver)) && global->debug) { g_print("Video driver: %s\n", driver); } info = SDL_GetVideoInfo(); if (info->wm_available && global->debug) g_print("A window manager is available\n"); if (info->hw_available) { if (global->debug) g_print("Hardware surfaces are available (%dK video memory)\n", info->video_mem); SDL_VIDEO_Flags |= SDL_HWSURFACE; SDL_VIDEO_Flags |= SDL_DOUBLEBUF; } else { SDL_VIDEO_Flags |= SDL_SWSURFACE; } if (info->blit_hw) { if (global->debug) g_print("Copy blits between hardware surfaces are accelerated\n"); SDL_VIDEO_Flags |= SDL_ASYNCBLIT; } if(!global->desktop_w) global->desktop_w = info->current_w; //get desktop width if(!global->desktop_h) global->desktop_h = info->current_h; //get desktop height if (global->debug) { if (info->blit_hw_CC) g_print ("Colorkey blits between hardware surfaces are accelerated\n"); if (info->blit_hw_A) g_print("Alpha blits between hardware surfaces are accelerated\n"); if (info->blit_sw) g_print ("Copy blits from software surfaces to hardware surfaces are accelerated\n"); if (info->blit_sw_CC) g_print ("Colorkey blits from software surfaces to hardware surfaces are accelerated\n"); if (info->blit_sw_A) g_print("Alpha blits from software surfaces to hardware surfaces are accelerated\n"); if (info->blit_fill) g_print("Color fills on hardware surfaces are accelerated\n"); } SDL_WM_SetCaption(global->WVcaption, NULL); /* enable key repeat */ SDL_EnableKeyRepeat(SDL_DEFAULT_REPEAT_DELAY,SDL_DEFAULT_REPEAT_INTERVAL); } /*------------------------------ SDL init video ---------------------*/ if(global->debug) g_print("(Desktop resolution = %ix%i)\n", global->desktop_w, global->desktop_h); g_print("Checking video mode %ix%i@32bpp : ", width, height); int bpp = SDL_VideoModeOK( width, height, 32, SDL_VIDEO_Flags); if(!bpp) { g_print("Not available \n"); /*resize video mode*/ if ((width > global->desktop_w) || (height > global->desktop_h)) { width = global->desktop_w; /*use desktop video resolution*/ height = global->desktop_h; } else { width = 800; height = 600; } g_print("Resizing to %ix%i\n", width, height); } else { g_print("OK \n"); if ((bpp != 32) && global->debug) g_print("recomended color depth = %i\n", bpp); global->bpp = bpp; } *pscreen = SDL_SetVideoMode( width, height, global->bpp, SDL_VIDEO_Flags); if(*pscreen == NULL) { return (NULL); } //use requested resolution for overlay even if not available as video mode SDL_Overlay* overlay=NULL; overlay = SDL_CreateYUVOverlay(global->width, global->height, SDL_YUY2_OVERLAY, *pscreen); SDL_ShowCursor(SDL_DISABLE); return (overlay); } /*-------------------------------- Main Video Loop ---------------------------*/ /* run in a thread (SDL overlay)*/ void *main_loop(void *data) { struct ALL_DATA *all_data = (struct ALL_DATA *) data; struct VidState *s = all_data->s; struct paRecordData *pdata = all_data->pdata; struct GLOBAL *global = all_data->global; struct focusData *AFdata = all_data->AFdata; struct vdIn *videoIn = all_data->videoIn; struct particle* particles = NULL; //for the particles video effect SDL_Event event; /*the main SDL surface*/ SDL_Surface *pscreen = NULL; SDL_Overlay *overlay = NULL; SDL_Rect drect; int width = global->width; int height = global->height; int format = global->format; SAMPLE vuPeak[2]; // The maximum vuLevel seen recently int vuPeakFreeze[2]; // The vuPeak values will be frozen for this many frames. vuPeak[0] = vuPeak[1] = 0; vuPeakFreeze[0] = vuPeakFreeze[1] = 0; BYTE *p = NULL; Control *focus_control = NULL; int last_focus = 0; if (global->AFcontrol) { focus_control = get_ctrl_by_id(s->control_list, AFdata->id); get_ctrl(videoIn->fd, s->control_list, AFdata->id, all_data); last_focus = focus_control->value; /*make sure we wait for focus to settle on first check*/ if (last_focus < 0) last_focus = AFdata->f_max; } gboolean capVid = FALSE; gboolean signalquit = FALSE; /*------------------------------ SDL init video ---------------------*/ if(!global->no_display) { overlay = video_init(data, &(pscreen)); if(overlay == NULL) { g_print("FATAL: Couldn't create yuv overlay - please disable hardware accelaration\n"); signalquit = TRUE; /*exit video thread*/ } else { p = (unsigned char *) overlay->pixels[0]; drect.x = 0; drect.y = 0; drect.w = pscreen->w; drect.h = pscreen->h; } } while (!signalquit) { __LOCK_MUTEX(__VMUTEX); capVid = videoIn->capVid; signalquit = videoIn->signalquit; __UNLOCK_MUTEX(__VMUTEX); /*-------------------------- Grab Frame ----------------------------------*/ if (uvcGrab(videoIn, format, width, height, &global->fps, &global->fps_num) < 0) { g_printerr("Error grabbing image \n"); continue; } else { if(!videoIn->timestamp) { global->skip_n++; //skip this frame } if(capVid) { if(global->framecount < 1) { /*reset video start time to first frame capture time */ global->Vidstarttime = videoIn->timestamp; /** set current time for audio ts(0) reference (MONOTONIC) * only used if we have no audio capture before video */ __LOCK_MUTEX(__AMUTEX); pdata->ts_ref = ns_time_monotonic(); __UNLOCK_MUTEX(__AMUTEX); //printf("video ts ref: %llu audio ts_ ref: %llu\n",global->Vidstarttime, pdata->ts_ref); global->v_ts = 0; } else { global->v_ts = videoIn->timestamp - global->Vidstarttime; /*always use the last frame time stamp for video stop time*/ global->Vidstoptime = videoIn->timestamp; } } if (global->FpsCount && !global->no_display) {/* sets fps count in window title bar */ global->frmCount++; if (global->DispFps>0) { /*set every 2 sec*/ g_snprintf(global->WVcaption,24,"GUVCVideo - %3.2f fps",global->DispFps); SDL_WM_SetCaption(global->WVcaption, NULL); global->frmCount=0;/*resets*/ global->DispFps=0; } } /*---------------- autofocus control ------------------*/ if (global->AFcontrol && (global->autofocus || AFdata->setFocus)) { /*AFdata = NULL if no focus control*/ if (AFdata->focus < 0) { /*starting autofocus*/ AFdata->focus = AFdata->left; /*start left*/ focus_control->value = AFdata->focus; if (set_ctrl (videoIn->fd, s->control_list, AFdata->id) != 0) g_printerr("ERROR: couldn't set focus to %d\n", AFdata->focus); /*number of frames until focus is stable*/ /*1.4 ms focus time - every 1 step*/ AFdata->focus_wait = (int) abs(AFdata->focus-last_focus)*1.4/(1000/global->fps)+1; last_focus = AFdata->focus; } else { if (AFdata->focus_wait == 0) { AFdata->sharpness=getSharpness (videoIn->framebuffer, width, height, 5); if (global->debug) g_print("sharp=%d focus_sharp=%d foc=%d right=%d left=%d ind=%d flag=%d\n", AFdata->sharpness,AFdata->focus_sharpness, AFdata->focus, AFdata->right, AFdata->left, AFdata->ind, AFdata->flag); AFdata->focus=getFocusVal (AFdata); if ((AFdata->focus != last_focus)) { focus_control->value = AFdata->focus; if (set_ctrl (videoIn->fd, s->control_list, AFdata->id) != 0) g_printerr("ERROR: couldn't set focus to %d\n", AFdata->focus); /*number of frames until focus is stable*/ /*1.4 ms focus time - every 1 step*/ AFdata->focus_wait = (int) abs(AFdata->focus-last_focus)*1.4/(1000/global->fps)+1; } last_focus = AFdata->focus; } else { AFdata->focus_wait--; if (global->debug) g_print("Wait Frame: %d\n",AFdata->focus_wait); } } } } /*------------------------- Filter Frame ---------------------------------*/ __LOCK_MUTEX(__GMUTEX); if(global->Frame_Flags>0) { if((global->Frame_Flags & YUV_PARTICLES)==YUV_PARTICLES) particles = particles_effect(videoIn->framebuffer, width, height, 20, 4, particles); if((global->Frame_Flags & YUV_MIRROR)==YUV_MIRROR) yuyv_mirror(videoIn->framebuffer, width, height); if((global->Frame_Flags & YUV_UPTURN)==YUV_UPTURN) yuyv_upturn(videoIn->framebuffer, width, height); if((global->Frame_Flags & YUV_NEGATE)==YUV_NEGATE) yuyv_negative (videoIn->framebuffer, width, height); if((global->Frame_Flags & YUV_MONOCR)==YUV_MONOCR) yuyv_monochrome (videoIn->framebuffer, width, height); if((global->Frame_Flags & YUV_PIECES)==YUV_PIECES) pieces (videoIn->framebuffer, width, height, 16 ); } __UNLOCK_MUTEX(__GMUTEX); /*-------------------------capture Image----------------------------------*/ if (videoIn->capImage) { /* * format and resolution can change(enabled) while capturing the frame * but you would need to be speedy gonzalez to press two buttons * at almost the same time :D */ int ret = 0; if((ret=store_picture(all_data)) < 0) g_printerr("saved image to:%s ...Failed \n",videoIn->ImageFName); else if (!ret && global->debug) g_print("saved image to:%s ...OK \n",videoIn->ImageFName); videoIn->capImage=FALSE; } /*---------------------------capture Video---------------------------------*/ if (capVid && !(global->skip_n)) { __LOCK_MUTEX(__VMUTEX); if(videoIn->VidCapStop) videoIn->VidCapStop = FALSE; __UNLOCK_MUTEX(__VMUTEX); int res=0; /* format and resolution don't change(disabled) while capturing video * store_video_frame may sleep if needed to avoid buffer overrun */ if((res=store_video_frame(all_data))<0) g_printerr("WARNING: droped frame (%i)\n",res); } /*video and audio capture have stopped */ else { __LOCK_MUTEX(__VMUTEX); if(!(videoIn->VidCapStop)) videoIn->VidCapStop=TRUE; __UNLOCK_MUTEX(__VMUTEX); } /* decrease skip frame count */ if (global->skip_n > 0) { if (global->debug && capVid) g_print("skiping frame %d...\n", global->skip_n); global->skip_n--; } __LOCK_MUTEX( __AMUTEX ); if (global->Sound_enable && capVid) pdata->skip_n = global->skip_n; __UNLOCK_MUTEX( __AMUTEX ); /*------------------------- Display Frame --------------------------------*/ if(!global->no_display) { if (global->osdFlags && pdata->audio_buff[0]) { draw_vu_meter(width, height, vuPeak, vuPeakFreeze, data); } SDL_LockYUVOverlay(overlay); memcpy(p, videoIn->framebuffer, width * height * 2); SDL_UnlockYUVOverlay(overlay); SDL_DisplayYUVOverlay(overlay, &drect); /*------------------------- Read Key events ------------------------------*/ /* Poll for events */ while( SDL_PollEvent(&event) ) { //printf("event type:%i event key:%i\n", event.type, event.key.keysym.scancode); if(event.type==SDL_KEYDOWN) { if (videoIn->PanTilt) { switch( event.key.keysym.sym ) { /* Keyboard event */ /* Pass the event data onto PrintKeyInfo() */ case SDLK_DOWN: /*Tilt Down*/ uvcPanTilt (videoIn->fd, s->control_list, 0, 1); break; case SDLK_UP: /*Tilt UP*/ uvcPanTilt (videoIn->fd, s->control_list, 0, -1); break; case SDLK_LEFT: /*Pan Left*/ uvcPanTilt (videoIn->fd, s->control_list, 1, 1); break; case SDLK_RIGHT: /*Pan Right*/ uvcPanTilt (videoIn->fd, s->control_list, 1, -1); break; default: break; } } switch( event.key.keysym.scancode ) { case 220: /*webcam button*/ //gdk_threads_enter(); if (all_data->global->default_action == 0) g_main_context_invoke(NULL, image_capture_callback, (gpointer) all_data); else g_main_context_invoke(NULL, video_capture_callback, (gpointer) all_data); break; } switch( event.key.keysym.sym ) { case SDLK_q: //shutDown g_timeout_add(200, shutd_timer, all_data); g_print("q pressed - Quiting...\n"); break; case SDLK_SPACE: { if(global->AFcontrol > 0) setfocus_clicked(NULL, all_data); } break; case SDLK_i: g_main_context_invoke(NULL, image_capture_callback, (gpointer) all_data); break; case SDLK_v: g_main_context_invoke(NULL, video_capture_callback, (gpointer) all_data); break; default: break; } } if(event.type==SDL_VIDEORESIZE) { pscreen = SDL_SetVideoMode(event.resize.w, event.resize.h, global->bpp, SDL_VIDEO_Flags); drect.w = event.resize.w; drect.h = event.resize.h; } if(event.type==SDL_QUIT) { //shutDown g_timeout_add(200, shutd_timer, all_data); } } } /* if set make the thread sleep - default no sleep (full throttle)*/ if(global->vid_sleep) sleep_ms(global->vid_sleep); /*------------------------------------------*/ /* restart video (new resolution/format) */ /*------------------------------------------*/ if (global->change_res) { g_print("setting new resolution (%d x %d)\n", global->width, global->height); /*clean up */ if(particles) g_free(particles); particles = NULL; if (global->debug) g_print("cleaning buffer allocations\n"); fflush(NULL);//flush all output buffers if(!global->no_display) { SDL_FreeYUVOverlay(overlay); overlay = NULL; } /*init device*/ restart_v4l2(videoIn, global); /*set new resolution for video thread*/ width = global->width; height = global->height; format = global->format; /* restart SDL with new values*/ if(!global->no_display) { overlay = video_init(data, &(pscreen)); if(overlay == NULL) { g_print("FATAL: Couldn't create yuv overlay - please disable hardware accelaration\n"); signalquit = TRUE; /*exit video thread*/ } else { if (global->debug) g_print("yuv overlay created (%ix%i).\n", overlay->w, overlay->h); p = (unsigned char *) overlay->pixels[0]; drect.x = 0; drect.y = 0; drect.w = pscreen->w; drect.h = pscreen->h; global->change_res = FALSE; } } else global->change_res = FALSE; } }/*loop end*/ __LOCK_MUTEX(__VMUTEX); capVid = videoIn->capVid; __UNLOCK_MUTEX(__VMUTEX); /*check if thread exited while in Video capture mode*/ if (capVid) { /*stop capture*/ if (global->debug) g_print("stoping Video capture\n"); //global->Vidstoptime = ns_time_monotonic(); /*this is set in IO thread*/ videoIn->VidCapStop=TRUE; capVid = FALSE; __LOCK_MUTEX(__VMUTEX); videoIn->capVid = capVid; __UNLOCK_MUTEX(__VMUTEX); __LOCK_MUTEX(__AMUTEX); pdata->capVid = capVid; __UNLOCK_MUTEX(__AMUTEX); /*join IO thread*/ if (global->debug) g_print("Shuting Down IO Thread\n"); __THREAD_JOIN( all_data->IO_thread ); if (global->debug) g_print("IO Thread finished\n"); } if (global->debug) g_print("Thread terminated...\n"); p = NULL; if(particles) g_free(particles); particles=NULL; if (global->debug) g_print("cleaning Thread allocations: 100%%\n"); fflush(NULL);//flush all output buffers if(!global->no_display) { if(overlay) SDL_FreeYUVOverlay(overlay); //SDL_FreeSurface(pscreen); SDL_Quit(); } if (global->debug) g_print("Video thread completed\n"); global = NULL; AFdata = NULL; videoIn = NULL; return ((void *) 0); } guvcview-src-1.7.1/src/ms_time.h0000664000175000017500000000436712173235416015603 0ustar paulopaulo/*******************************************************************************# # guvcview http://guvcview.sourceforge.net # # # # Paulo Assis # # # # 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # # ********************************************************************************/ #ifndef MS_TIME_H #define MS_TIME_H #include #include "defs.h" #ifndef G_NSEC_PER_SEC #define G_NSEC_PER_SEC 1000000000LL #endif /*time in miliseconds*/ DWORD ms_time (void); /*time in microseconds*/ ULLONG us_time(void); /*time in nanoseconds (real time for benchmark)*/ ULLONG ns_time (void); /*MONOTONIC CLOCK in nano sec for time stamps*/ UINT64 ns_time_monotonic(); /*sleep for given time in ms*/ void sleep_ms(int ms_time); /*wait on cond by sleeping for n_loops of sleep_ms ms */ /*(test (var == val) every loop) */ int wait_ms(gboolean* var, gboolean val, __MUTEX_TYPE *mutex, int ms_time, int n_loops); #endif guvcview-src-1.7.1/src/image_format.h0000664000175000017500000000425012173235416016567 0ustar paulopaulo/*******************************************************************************# # guvcview http://guvcview.sourceforge.net # # # # Paulo Assis # # # # 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # # ********************************************************************************/ #ifndef IMAGE_FORMAT_H #define IMAGE_FORMAT_H #include "../config.h" #include "defs.h" #define JPG_FORMAT 0 #define BMP_FORMAT 1 #define PNG_FORMAT 2 #define RAW_FORMAT 3 #define MAX_IFORMATS 4 typedef struct _iformats_data { const char *name; //format name const char *description; //format description const char *extension; //format extension const char *pattern; //file filter pattern } iformats_data; const char *get_iformat_extension(int ind); const char *get_iformat_desc(int ind); const char *get_iformat_pattern(int ind); #endif guvcview-src-1.7.1/src/vcodecs.h0000775000175000017500000001061512173235416015570 0ustar paulopaulo/*******************************************************************************# # guvcview http://guvcview.sourceforge.net # # # # Paulo Assis # # # # 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # # ********************************************************************************/ #ifndef VCODECS_H #define VCODECS_H #include #include "jpgenc.h" #include "lavc_common.h" #include "globals.h" #define MAX_VCODECS 12 #define CODEC_MJPEG 0 #define CODEC_YUV 1 #define CODEC_DIB 2 #define CODEC_LAVC 3 typedef struct _vcodecs_data { gboolean avcodec; //is a avcodec codec gboolean valid; //the encoding codec exists in ffmpeg const char *compressor; //fourcc - upper case int mkv_4cc; //fourcc WORD value const char *mkv_codec; //mkv codecID void *mkv_codecPriv; //mkv codec private data const char *description; //codec description //int frame_delay; //frame delay int fps; // encoder frame rate (used for time base) int bit_rate; //lavc default bit rate int qmax; //lavc qmax int qmin; //lavc qmin int max_qdiff; //lavc qmin int dia; //lavc dia_size int pre_dia; //lavc pre_dia_size int pre_me; //lavc pre_me int me_pre_cmp; //lavc me_pre_cmp int me_cmp; //lavc me_cmp int me_sub_cmp; //lavc me_sub_cmp int last_pred; //lavc last_predictor_count int gop_size; //lavc gop_size float qcompress; //lavc qcompress float qblur; //lavc qblur int subq; //lavc subq int framerefs; //lavc refs int codec_id; //lavc codec_id const char* codec_name; //lavc codec_name int mb_decision; //lavc mb_decision int trellis; //lavc trellis quantization int me_method; //lavc motion estimation method int mpeg_quant; //lavc mpeg quantization int max_b_frames; //lavc max b frames int num_threads; //lavc num threads int flags; //lavc flags int monotonic_pts; //use monotonic pts instead of timestamp based } vcodecs_data; /** must be called before all others * sets the valid flag */ int setVcodecVal(); /** returns codec data array (all) index: 0 indexed */ int get_vcodec_index(int codec_id); /** returns codec list (available) index: 0 indexed */ int get_list_vcodec_index(int codec_id); /** codec_ind is the available codec list index * -- refers to the dropdown list */ const char *get_vid4cc(int codec_ind); const char *get_desc4cc(int codec_ind); const char *get_mkvCodec(int codec_ind); int get_enc_fps(int codec_ind); void *get_mkvCodecPriv(int codec_ind); int set_mkvCodecPriv(int codec_ind, int width, int height, struct lavcData* data); int get_vcodec_id(int codec_ind); gboolean isLavcCodec(int codec_ind); gboolean isVcodecValid(int codec_ind); vcodecs_data *get_codec_defaults(int codec_ind); int compress_frame(void *data, void *jpeg_data, struct lavcData *lav_data, VidBuff *proc_buff); #endif guvcview-src-1.7.1/src/colorspaces.h0000664000175000017500000002340312173235416016453 0ustar paulopaulo/*******************************************************************************# # guvcview http://guvcview.sourceforge.net # # # # Paulo Assis # # # # 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # # ********************************************************************************/ #ifndef COLORSPACES_H #define COLORSPACES_H #include "defs.h" /*convert yuv 420 planar (yu12) to yuv 422 * args: * framebuffer: pointer to frame buffer (yuyv) * tmpbuffer: pointer to temp buffer containing yuv420 planar data frame * width: picture width * height: picture height */ void yuv420_to_yuyv (BYTE *framebuffer, BYTE *tmpbuffer, int width, int height); /*convert yvu 420 planar (yv12) to yuv 422 (yuyv) * args: * framebuffer: pointer to frame buffer (yuyv) * tmpbuffer: pointer to temp buffer containing yvu420 planar data frame * width: picture width * height: picture height */ void yvu420_to_yuyv (BYTE *framebuffer, BYTE *tmpbuffer, int width, int height); /*convert yuv 420 planar (uv interleaved) (nv12) to yuv 422 * args: * framebuffer: pointer to frame buffer (yuyv) * tmpbuffer: pointer to temp buffer containing yuv420 (nv12) planar data frame * width: picture width * height: picture height */ void nv12_to_yuyv (BYTE *framebuffer, BYTE *tmpbuffer, int width, int height); /*convert yuv 420 planar (vu interleaved) (nv21) to yuv 422 * args: * framebuffer: pointer to frame buffer (yuyv) * tmpbuffer: pointer to temp buffer containing yuv420 (nv21) planar data frame * width: picture width * height: picture height */ void nv21_to_yuyv (BYTE *framebuffer, BYTE *tmpbuffer, int width, int height); /*convert yuv 422 planar (uv interleaved) (nv16) to yuv 422 * args: * framebuffer: pointer to frame buffer (yuyv) * tmpbuffer: pointer to temp buffer containing yuv422 (nv16) planar data frame * width: picture width * height: picture height */ void nv16_to_yuyv (BYTE *framebuffer, BYTE *tmpbuffer, int width, int height); /*convert yuv 422 planar (vu interleaved) (nv61) to yuv 422 * args: * framebuffer: pointer to frame buffer (yuyv) * tmpbuffer: pointer to temp buffer containing yuv422 (nv61) planar data frame * width: picture width * height: picture height */ void nv61_to_yuyv (BYTE *framebuffer, BYTE *tmpbuffer, int width, int height); /*convert y10b (bit-packed array greyscale format) to yuyv (packed) * args: * framebuffer: pointer to frame buffer (yuyv) * tmpbuffer: pointer to temp buffer containing y10b (bit-packed array) data frame * width: picture width * height: picture height */ void y10b_to_yuyv (BYTE *framebuffer, BYTE *tmpbuffer, int width, int height); /*convert y16 (grey) to yuyv (packed) * args: * framebuffer: pointer to frame buffer (yuyv) * tmpbuffer: pointer to temp buffer containing y16 (grey) data frame * width: picture width * height: picture height */ void y16_to_yuyv (BYTE *framebuffer, BYTE *tmpbuffer, int width, int height); /*convert yyuv to yuyv * args: * framebuffer: pointer to frame buffer (yuyv) * tmpbuffer: pointer to temp buffer containing a yyuv data frame * width: picture width * height: picture height */ void yyuv_to_yuyv (BYTE *framebuffer, BYTE *tmpbuffer, int width, int height); /*convert uyvy (packed) to yuyv (packed) * args: * framebuffer: pointer to frame buffer (yuyv) * tmpbuffer: pointer to temp buffer containing uyvy packed data frame * width: picture width * height: picture height */ void uyvy_to_yuyv (BYTE *framebuffer, BYTE *tmpbuffer, int width, int height); /*convert yvyu (packed) to yuyv (packed) * args: * framebuffer: pointer to frame buffer (yuyv) * tmpbuffer: pointer to temp buffer containing yvyu packed data frame * width: picture width * height: picture height */ void yvyu_to_yuyv (BYTE *framebuffer, BYTE *tmpbuffer, int width, int height); /*convert yuv 411 packed (y41p) to yuv 422 * args: * framebuffer: pointer to frame buffer (yuyv) * tmpbuffer: pointer to temp buffer containing y41p data frame * width: picture width * height: picture height */ void y41p_to_yuyv (BYTE *framebuffer, BYTE *tmpbuffer, int width, int height); /*convert yuv mono (grey) to yuv 422 * args: * framebuffer: pointer to frame buffer (yuyv) * tmpbuffer: pointer to temp buffer containing grey (y only) data frame * width: picture width * height: picture height */ void grey_to_yuyv (BYTE *framebuffer, BYTE *tmpbuffer, int width, int height); /*convert SPCA501 (s501) to yuv 422 * s501 |Y0..width..Y0|U..width/2..U|Y1..width..Y1|V..width/2..V| * signed values (-128;+127) must be converted to unsigned (0; 255) * args: * framebuffer: pointer to frame buffer (yuyv) * tmpbuffer: pointer to temp buffer containing s501 data frame * width: picture width * height: picture height */ void s501_to_yuyv(BYTE *framebuffer, BYTE *tmpbuffer, int width, int height); /*convert SPCA505 (s505) to yuv 422 * s505 |Y0..width..Y0|Y1..width..Y1|U..width/2..U|V..width/2..V| * signed values (-128;+127) must be converted to unsigned (0; 255) * args: * framebuffer: pointer to frame buffer (yuyv) * tmpbuffer: pointer to temp buffer containing s501 data frame * width: picture width * height: picture height */ void s505_to_yuyv(BYTE *framebuffer, BYTE *tmpbuffer, int width, int height); /*convert SPCA508 (s508) to yuv 422 * s508 |Y0..width..Y0|U..width/2..U|V..width/2..V|Y1..width..Y1| * signed values (-128;+127) must be converted to unsigned (0; 255) * args: * framebuffer: pointer to frame buffer (yuyv) * tmpbuffer: pointer to temp buffer containing s501 data frame * width: picture width * height: picture height */ void s508_to_yuyv(BYTE *framebuffer, BYTE *tmpbuffer, int width, int height); /*convert yuyv to rgb24 * args: * pyuv: pointer to buffer containing yuv data (yuyv) * prgb: pointer to buffer containing rgb24 data * width: picture width * height: picture height */ void yuyv2rgb (BYTE *pyuv, BYTE *prgb, int width, int height); /*convert yuyv to bgr with lines upsidedown * used for bitmap files (DIB24) * args: * pyuv: pointer to buffer containing yuv data (yuyv) * prgb: pointer to buffer containing rgb24 data * width: picture width * height: picture height */ void yuyv2bgr (BYTE *pyuv, BYTE *pbgr, int width, int height); /* used for rgb video (fourcc="RGB ") * lines are in correct order */ void yuyv2bgr1 (BYTE *pyuv, BYTE *pbgr, int width, int height); /*convert bayer raw data to rgb24 * args: * pBay: pointer to buffer containing Raw bayer data data * pRGB24: pointer to buffer containing rgb24 data * width: picture width * height: picture height * pix_order: bayer pixel order (0=gb/rg 1=gr/bg 2=bg/gr 3=rg/bg) */ void bayer_to_rgb24(BYTE *pBay, BYTE *pRGB24, int width, int height, int pix_order); /*convert rgb24 to yuyv * args: * prgb: pointer to buffer containing rgb24 data * pyuv: pointer to buffer containing yuv data (yuyv) * width: picture width * height: picture height */ void rgb2yuyv(BYTE *prgb, BYTE *pyuv, int width, int height); /*convert bgr24 to yuyv * args: * pbgr: pointer to buffer containing bgr24 data * pyuv: pointer to buffer containing yuv data (yuyv) * width: picture width * height: picture height */ void bgr2yuyv(BYTE *pbgr, BYTE *pyuv, int width, int height); /*use in utils.c for jpeg decoding 420 planar to 422 * args: * out: pointer to data output of idct (macroblocks yyyy u v) * pic: pointer to picture buffer (yuyv) * width: picture width */ void yuv420pto422(int * out,unsigned char *pic,int width); /*use in utils.c for jpeg decoding 422 planar to 422 * args: * out: pointer to data output of idct (macroblocks yyyy u v) * pic: pointer to picture buffer (yuyv) * width: picture width */ void yuv422pto422(int * out,unsigned char *pic,int width); /*use in utils.c for jpeg decoding 444 planar to 422 * args: * out: pointer to data output of idct (macroblocks yyyy u v) * pic: pointer to picture buffer (yuyv) * width: picture width */ void yuv444pto422(int * out,unsigned char *pic,int width); /*use in utils.c for jpeg decoding 400 planar to 422 * args: * out: pointer to data output of idct (macroblocks yyyy ) * pic: pointer to picture buffer (yuyv) * width: picture width */ void yuv400pto422(int * out,unsigned char *pic,int width); #endif guvcview-src-1.7.1/src/snd_devices.h0000664000175000017500000000347712173235416016435 0ustar paulopaulo/*******************************************************************************# # guvcview http://guvcview.sourceforge.net # # # # Paulo Assis # # # # 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # # ********************************************************************************/ #ifndef SNDDEV_H #define SNDDEV_H #include #include "globals.h" #include "guvcview.h" GtkWidget * list_snd_devices(struct GLOBAL *global); void update_snd_devices(struct ALL_DATA *all_data); #endif guvcview-src-1.7.1/src/vcodecs.c0000775000175000017500000005451412173235416015571 0ustar paulopaulo/*******************************************************************************# # guvcview http://guvcview.sourceforge.net # # # # Paulo Assis # # # # 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # # ********************************************************************************/ #include #include "vcodecs.h" #include "guvcview.h" #include "picture.h" #include "colorspaces.h" #include "create_video.h" /* support for internationalization - i18n */ #include #include //if not defined don't set any bits but prevent build error #ifndef CODEC_FLAG2_INTRA_REFRESH #define CODEC_FLAG2_INTRA_REFRESH 0 #endif #define __FMUTEX &global->file_mutex static BITMAPINFOHEADER mkv_codecPriv = { .biSize = 0x00000028, //40 bytes .biWidth = 640, //default values (must be set before use) .biHeight = 480, .biPlanes = 1, .biBitCount = 24, .biCompression = V4L2_PIX_FMT_MJPEG, .biSizeImage = 640*480*2, //2 bytes per pixel (max buffer - use x3 for RGB) .biXPelsPerMeter = 0, .biYPelsPerMeter = 0, .biClrUsed = 0, .biClrImportant = 0 }; static vcodecs_data listSupVCodecs[] = //list of software supported formats { { .avcodec = FALSE, .valid = TRUE, .compressor = "MJPG", .mkv_4cc = v4l2_fourcc('M','J','P','G'), .mkv_codec = "V_MS/VFW/FOURCC", .mkv_codecPriv= &mkv_codecPriv, .description = N_("MJPG - compressed"), .fps = 0, .monotonic_pts= 0, .bit_rate = 0, .qmax = 0, .qmin = 0, .max_qdiff = 0, .dia = 0, .pre_dia = 0, .pre_me = 0, .me_pre_cmp = 0, .me_cmp = 0, .me_sub_cmp = 0, .last_pred = 0, .gop_size = 0, .qcompress = 0, .qblur = 0, .subq = 0, .framerefs = 0, .codec_id = AV_CODEC_ID_MJPEG, .codec_name = "mjpeg", .mb_decision = 0, .trellis = 0, .me_method = 0, .mpeg_quant = 0, .max_b_frames = 0, .num_threads = 0, .flags = 0 }, { .avcodec = FALSE, .valid = TRUE, .compressor = "YUY2", .mkv_4cc = v4l2_fourcc('Y','U','Y','2'), .mkv_codec = "V_MS/VFW/FOURCC", .mkv_codecPriv= &mkv_codecPriv, .description = N_("YUY2 - uncomp YUV"), .fps = 0, .monotonic_pts= 0, .bit_rate = 0, .qmax = 0, .qmin = 0, .max_qdiff = 0, .dia = 0, .pre_dia = 0, .pre_me = 0, .me_pre_cmp = 0, .me_cmp = 0, .me_sub_cmp = 0, .last_pred = 0, .gop_size = 0, .qcompress = 0, .qblur = 0, .subq = 0, .framerefs = 0, .codec_id = AV_CODEC_ID_NONE, .codec_name = "none", .mb_decision = 0, .trellis = 0, .me_method = 0, .mpeg_quant = 0, .max_b_frames = 0, .num_threads = 0, .flags = 0 }, { .avcodec = FALSE, .valid = TRUE, .compressor = "RGB ", .mkv_4cc = v4l2_fourcc('R','G','B',' '), .mkv_codec = "V_MS/VFW/FOURCC", .mkv_codecPriv= &mkv_codecPriv, .description = N_("RGB - uncomp BMP"), .fps = 0, .monotonic_pts= 0, .bit_rate = 0, .qmax = 0, .qmin = 0, .max_qdiff = 0, .dia = 0, .pre_dia = 0, .pre_me = 0, .me_pre_cmp = 0, .me_cmp = 0, .me_sub_cmp = 0, .last_pred = 0, .gop_size = 0, .qcompress = 0, .qblur = 0, .subq = 0, .framerefs = 0, .codec_id = AV_CODEC_ID_NONE, .codec_name = "none", .mb_decision = 0, .trellis = 0, .me_method = 0, .mpeg_quant = 0, .max_b_frames = 0, .num_threads = 0, .flags = 0 }, { .avcodec = TRUE, .valid = TRUE, .compressor = "MPEG", .mkv_4cc = v4l2_fourcc('M','P','E','G'), .mkv_codec = "V_MPEG1", .mkv_codecPriv= NULL, .description = N_("MPEG video 1"), .fps = 30, .monotonic_pts= 1, .bit_rate = 3000000, .qmax = 8, .qmin = 2, .max_qdiff = 2, .dia = 2, .pre_dia = 2, .pre_me = 2, .me_pre_cmp = 0, .me_cmp = 3, .me_sub_cmp = 3, .last_pred = 2, .gop_size = 12, .qcompress = 0.5, .qblur = 0.5, .subq = 0, .framerefs = 0, .codec_id = AV_CODEC_ID_MPEG1VIDEO, .codec_name = "mpeg1video", .mb_decision = FF_MB_DECISION_RD, .trellis = 1, .me_method = ME_EPZS, .mpeg_quant = 0, .max_b_frames = 0, .num_threads = 1, .flags = 0 }, { .avcodec = TRUE, .valid = TRUE, .compressor = "FLV1", .mkv_4cc = v4l2_fourcc('F','L','V','1'), .mkv_codec = "V_MS/VFW/FOURCC", .mkv_codecPriv= &mkv_codecPriv, .description = N_("FLV1 - flash video 1"), .fps = 0, .monotonic_pts= 1, .bit_rate = 3000000, .qmax = 31, .qmin = 2, .max_qdiff = 3, .dia = 2, .pre_dia = 2, .pre_me = 2, .me_pre_cmp = 0, .me_cmp = 3, .me_sub_cmp = 3, .last_pred = 2, .gop_size = 100, .qcompress = 0.5, .qblur = 0.5, .subq = 0, .framerefs = 0, .codec_id = AV_CODEC_ID_FLV1, .codec_name = "flv", .mb_decision = FF_MB_DECISION_RD, .trellis = 1, .me_method = ME_EPZS, .mpeg_quant = 0, .max_b_frames = 0, .num_threads = 1, .flags = CODEC_FLAG_4MV }, { .avcodec = TRUE, .valid = TRUE, .compressor = "WMV1", .mkv_4cc = v4l2_fourcc('W','M','V','1'), .mkv_codec = "V_MS/VFW/FOURCC", .mkv_codecPriv= &mkv_codecPriv, .description = N_("WMV1 - win. med. video 7"), .fps = 0, .monotonic_pts= 1, .bit_rate = 3000000, .qmax = 8, .qmin = 2, .max_qdiff = 2, .dia = 2, .pre_dia = 2, .pre_me = 2, .me_pre_cmp = 0, .me_cmp = 3, .me_sub_cmp = 3, .last_pred = 2, .gop_size = 100, .qcompress = 0.5, .qblur = 0.5, .subq = 0, .framerefs = 0, .codec_id = AV_CODEC_ID_WMV1, .codec_name = "wmv1", .mb_decision = FF_MB_DECISION_RD, .trellis = 1, .me_method = ME_EPZS, .mpeg_quant = 0, .max_b_frames = 0, .num_threads = 1, .flags = 0 }, { .avcodec = TRUE, .valid = TRUE, .compressor = "MPG2", .mkv_4cc = v4l2_fourcc('M','P','G','2'), .mkv_codec = "V_MPEG2", .mkv_codecPriv= NULL, .description = N_("MPG2 - MPG2 format"), .fps = 30, .monotonic_pts= 1, .bit_rate = 3000000, .qmax = 31, .qmin = 2, .max_qdiff = 3, .dia = 2, .pre_dia = 2, .pre_me = 2, .me_pre_cmp = 0, .me_cmp = 3, .me_sub_cmp = 3, .last_pred = 2, .gop_size = 12, .qcompress = 0.5, .qblur = 0.5, .subq = 0, .framerefs = 0, .codec_id = AV_CODEC_ID_MPEG2VIDEO, .codec_name = "mpeg2video", .mb_decision = FF_MB_DECISION_RD, .trellis = 1, .me_method = ME_EPZS, .mpeg_quant = 0, .max_b_frames = 0, .num_threads = 1, .flags = 0 }, { .avcodec = TRUE, .valid = TRUE, .compressor = "MP43", .mkv_4cc = v4l2_fourcc('M','P','4','3'), .mkv_codec = "V_MPEG4/MS/V3", .mkv_codecPriv= NULL, .description = N_("MS MP4 V3"), .fps = 0, .monotonic_pts= 1, .bit_rate = 3000000, .qmax = 31, .qmin = 2, .max_qdiff = 3, .dia = 2, .pre_dia = 2, .pre_me = 2, .me_pre_cmp = 0, .me_cmp = 3, .me_sub_cmp = 3, .last_pred = 2, .gop_size = 100, .qcompress = 0.5, .qblur = 0.5, .subq = 0, .framerefs = 0, .codec_id = AV_CODEC_ID_MSMPEG4V3, .codec_name = "msmpeg4v3", .mb_decision = FF_MB_DECISION_RD, .trellis = 1, .me_method = ME_EPZS, .mpeg_quant = 0, .max_b_frames = 0, .num_threads = 1, .flags = 0 }, { .avcodec = TRUE, .valid = TRUE, .compressor = "DX50", .mkv_4cc = v4l2_fourcc('D','X','5','0'), .mkv_codec = "V_MPEG4/ISO/ASP", .mkv_codecPriv= NULL, .description = N_("MPEG4-ASP"), .fps = 0, .monotonic_pts= 1, .bit_rate = 1500000, .qmax = 31, .qmin = 2, .max_qdiff = 3, .dia = 2, .pre_dia = 2, .pre_me = 2, .me_pre_cmp = 0, .me_cmp = 3, .me_sub_cmp = 3, .last_pred = 2, .gop_size = 100, .qcompress = 0.5, .qblur = 0.5, .subq = 0, .framerefs = 0, .codec_id = AV_CODEC_ID_MPEG4, .codec_name = "mpeg4", .mb_decision = FF_MB_DECISION_RD, .trellis = 1, .me_method = ME_EPZS, .mpeg_quant = 1, .max_b_frames = 0, .num_threads = 1, .flags = 0 }, { .avcodec = TRUE, .valid = TRUE, .compressor = "H264", .mkv_4cc = v4l2_fourcc('H','2','6','4'), .mkv_codec = "V_MPEG4/ISO/AVC", .mkv_codecPriv= NULL, .description = N_("MPEG4-AVC (H264)"), .fps = 0, .monotonic_pts= 1, .bit_rate = 1500000, .qmax = 51, .qmin = 10, .max_qdiff = 4, .dia = 2, .pre_dia = 2, .pre_me = 2, .me_pre_cmp = 0, .me_cmp = 3, .me_sub_cmp = 3, .last_pred = 2, .gop_size = 100, .qcompress = 0.6, .qblur = 0.5, .subq = 5, .framerefs = 0, .codec_id = AV_CODEC_ID_H264, .codec_name = "libx264", .mb_decision = FF_MB_DECISION_RD, .trellis = 0, .me_method = ME_HEX, .mpeg_quant = 1, .max_b_frames = 0, .num_threads = 1, #if LIBAVCODEC_VER_AT_LEAST(54,01) .flags = CODEC_FLAG2_INTRA_REFRESH #else .flags = CODEC_FLAG2_BPYRAMID | CODEC_FLAG2_WPRED | CODEC_FLAG2_FASTPSKIP | CODEC_FLAG2_INTRA_REFRESH #endif }, { .avcodec = TRUE, .valid = TRUE, .compressor = "VP80", .mkv_4cc = v4l2_fourcc('V','P','8','0'), .mkv_codec = "V_VP8", .mkv_codecPriv= NULL, .description = N_("VP8 (VP8)"), .fps = 0, .monotonic_pts= 1, .bit_rate = 600000, .qmax = 51, .qmin = 11, .max_qdiff = 4, .dia = 2, .pre_dia = 2, .pre_me = 2, .me_pre_cmp = 0, .me_cmp = 3, .me_sub_cmp = 3, .last_pred = 2, .gop_size = 120, .qcompress = 0.8, .qblur = 0.5, .subq = 5, .framerefs = 0, .codec_id = AV_CODEC_ID_VP8, .codec_name = "libvpx", .mb_decision = FF_MB_DECISION_RD, .trellis = 0, .me_method = ME_HEX, .mpeg_quant = 1, .max_b_frames = 0, .num_threads = 4, .flags = 0 }, { .avcodec = TRUE, .valid = TRUE, .compressor = "theo", .mkv_4cc = v4l2_fourcc('t','h','e','o'), .mkv_codec = "V_THEORA", .mkv_codecPriv= NULL, .description = N_("Theora (ogg theora)"), .fps = 0, .monotonic_pts= 1, .bit_rate = 600000, .qmax = 51, .qmin = 11, .max_qdiff = 4, .dia = 2, .pre_dia = 2, .pre_me = 2, .me_pre_cmp = 0, .me_cmp = 3, .me_sub_cmp = 3, .last_pred = 2, .gop_size = 120, .qcompress = 0.8, .qblur = 0.5, .subq = 5, .framerefs = 0, .codec_id = AV_CODEC_ID_THEORA, .codec_name = "libtheora", .mb_decision = FF_MB_DECISION_RD, .trellis = 0, .me_method = ME_HEX, .mpeg_quant = 1, .max_b_frames = 0, .num_threads = 1, .flags = 0 } }; static int get_real_index (int codec_ind) { int i = 0; int ind = -1; for (i=0;i= MAX_VCODECS || !listSupVCodecs[real_index].valid ) return -1; //error: real index is not valid int i = 0; int ind = -1; for (i=0;i<=real_index; i++) { if(listSupVCodecs[i].valid) ind++; } return (ind); } /** returns the real codec array index*/ int get_vcodec_index(int codec_id) { int i = 0; for(i=0; i= 0 && real_index < MAX_VCODECS) return (listSupVCodecs[real_index].compressor); else { fprintf(stderr, "VCODEC: (4cc) bad codec index\n"); return NULL; } } const char *get_desc4cc(int codec_ind) { int real_index = get_real_index (codec_ind); if(real_index >= 0 && real_index < MAX_VCODECS) return (listSupVCodecs[real_index].description); else { fprintf(stderr, "VCODEC: (desc4cc) bad codec index\n"); return NULL; } } int get_enc_fps(int codec_ind) { int real_index = get_real_index (codec_ind); if(real_index >= 0 && real_index < MAX_VCODECS) return (listSupVCodecs[real_index].fps); else { fprintf(stderr, "VCODEC: (enc_fps) bad codec index\n"); return 0; } } const char *get_mkvCodec(int codec_ind) { int real_index = get_real_index (codec_ind); if(real_index >= 0 && real_index < MAX_VCODECS) return (listSupVCodecs[get_real_index (codec_ind)].mkv_codec); else { fprintf(stderr, "VCODEC: (mkvCodec) bad codec index\n"); return NULL; } } void *get_mkvCodecPriv(int codec_ind) { int real_index = get_real_index (codec_ind); if(real_index >= 0 && real_index < MAX_VCODECS) return ((void *) listSupVCodecs[real_index].mkv_codecPriv); else { fprintf(stderr, "VCODEC: (mkvCodecPriv) bad codec index\n"); return NULL; } } int set_mkvCodecPriv(int codec_ind, int width, int height, struct lavcData* data) { int size = 0; int real_index = get_real_index (codec_ind); if(real_index < 0 || real_index >= MAX_VCODECS) { fprintf(stderr, "VCODEC: (set mkvCodecPriv) bad codec index\n"); return 0; } if(listSupVCodecs[real_index].codec_id == AV_CODEC_ID_THEORA) { //get the 3 first header packets uint8_t *header_start[3]; int header_len[3]; int first_header_size; first_header_size = 42; //vorbis = 30 if (avpriv_split_xiph_headers(data->codec_context->extradata, data->codec_context->extradata_size, first_header_size, header_start, header_len) < 0) { fprintf(stderr, "VCODEC: theora codec - Extradata corrupt.\n"); return -1; } //get the allocation needed for headers size int header_lace_size[2]; header_lace_size[0]=0; header_lace_size[1]=0; int i; for (i = 0; i < header_len[0] / 255; i++) header_lace_size[0]++; header_lace_size[0]++; for (i = 0; i < header_len[1] / 255; i++) header_lace_size[1]++; header_lace_size[1]++; size = 1 + //number of packets -1 header_lace_size[0] + //first packet size header_lace_size[1] + //second packet size header_len[0] + //first packet header header_len[1] + //second packet header header_len[2]; //third packet header //should check and clean before allocating ?? data->priv_data = g_new0(BYTE, size); //write header BYTE* tmp = data->priv_data; *tmp++ = 0x02; //number of packets -1 //size of head 1 for (i = 0; i < header_len[0] / 0xff; i++) *tmp++ = 0xff; *tmp++ = header_len[0] % 0xff; //size of head 2 for (i = 0; i < header_len[1] / 0xff; i++) *tmp++ = 0xff; *tmp++ = header_len[1] % 0xff; //add headers for(i=0; i<3; i++) { memcpy(tmp, header_start[i] , header_len[i]); tmp += header_len[i]; } listSupVCodecs[real_index].mkv_codecPriv = data->priv_data; } else if(listSupVCodecs[real_index].mkv_codecPriv != NULL) { mkv_codecPriv.biWidth = width; mkv_codecPriv.biHeight = height; mkv_codecPriv.biCompression = listSupVCodecs[real_index].mkv_4cc; if(listSupVCodecs[real_index].codec_id != CODEC_DIB) { mkv_codecPriv.biSizeImage = width*height*2; mkv_codecPriv.biHeight =-height; } else mkv_codecPriv.biSizeImage = width*height*3; /*rgb*/ size = 40; //40 bytes } return (size); } int get_vcodec_id(int codec_ind) { int real_index = get_real_index (codec_ind); if(real_index >= 0 && real_index < MAX_VCODECS) return (listSupVCodecs[real_index].codec_id); else { fprintf(stderr, "VCODEC: (id) bad codec index\n"); return 0; } } gboolean isLavcCodec(int codec_ind) { int real_index = get_real_index (codec_ind); if(real_index >= 0 && real_index < MAX_VCODECS) return (listSupVCodecs[real_index].avcodec); else { fprintf(stderr, "VCODEC: (isLavcCodec) bad codec index\n"); return FALSE; } } int setVcodecVal () { AVCodec *codec; int ind = 0; int num_codecs = 0; for (ind=0;ind= 0 && real_index < MAX_VCODECS) return (listSupVCodecs[real_index].valid); else { fprintf(stderr, "VCODEC: (isValid) bad codec index\n"); return FALSE; } } vcodecs_data *get_codec_defaults(int codec_ind) { int real_index = get_real_index (codec_ind); if(real_index >= 0 && real_index < MAX_VCODECS) return (&(listSupVCodecs[real_index])); else { fprintf(stderr, "VCODEC: (defaults) bad codec index\n"); return NULL; } } static int write_video_data(struct ALL_DATA *all_data, BYTE *buff, int size) { struct VideoFormatData *videoF = all_data->videoF; struct GLOBAL *global = all_data->global; int ret =0; __LOCK_MUTEX( __FMUTEX ); switch (global->VidFormat) { case AVI_FORMAT: if(size > 0) ret = avi_write_packet(videoF->avi, 0, buff, size, videoF->vdts, videoF->vblock_align, videoF->vflags); //ret = AVI_write_frame (videoF->AviOut, buff, size, videoF->keyframe); break; case WEBM_FORMAT: case MKV_FORMAT: if(size > 0) { ret = mkv_write_packet(videoF->mkv, 0, buff, size, videoF->vduration, videoF->vpts, videoF->vflags); //ret = write_video_packet (buff, size, global->fps, videoF); } break; default: break; } __UNLOCK_MUTEX( __FMUTEX ); return (ret); } static int encode_lavc (struct lavcData *lavc_data, struct ALL_DATA *all_data, VidBuff *proc_buff) { //struct vdIn *videoIn = all_data->videoIn; struct VideoFormatData *videoF = all_data->videoF; struct GLOBAL *global = all_data->global; int framesize = 0; int ret = 0; if(lavc_data) { /* * if no video filter applied take advantage * of possible raw formats nv12 and nv21 * else use internal format (yuyv) */ if ( !(global->Frame_Flags) ) framesize= encode_lavc_frame (proc_buff->frame, lavc_data, global->format, videoF); else framesize= encode_lavc_frame (proc_buff->frame, lavc_data, V4L2_PIX_FMT_YUYV, videoF); ret = write_video_data (all_data, lavc_data->outbuf, framesize); } return (ret); } int compress_frame(void *data, void *jpeg_data, struct lavcData *lavc_data, VidBuff *proc_buff) { struct JPEG_ENCODER_STRUCTURE **jpeg_struct = (struct JPEG_ENCODER_STRUCTURE **) jpeg_data; BYTE *prgb =NULL; struct ALL_DATA *all_data = (struct ALL_DATA *) data; struct GLOBAL *global = all_data->global; struct VideoFormatData *videoF = all_data->videoF; long framesize = 0; int jpeg_size = 0; int ret = 0; videoF->vpts = proc_buff->time_stamp; switch (global->VidCodec) { case CODEC_MJPEG: /*MJPG*/ /* save MJPG frame */ if((global->Frame_Flags==0) && (global->format==V4L2_PIX_FMT_MJPEG)) { ret = write_video_data (all_data, proc_buff->frame, proc_buff->bytes_used); } else { /* use built in encoder */ if (!global->jpeg) { global->jpeg = g_new0(BYTE, ((global->width)*(global->height))>>1); } if(!(*jpeg_struct)) { *jpeg_struct = g_new0(struct JPEG_ENCODER_STRUCTURE, 1); /* Initialization of JPEG control structure */ initialization (*jpeg_struct,global->width,global->height); /* Initialization of Quantization Tables */ initialize_quantization_tables (*jpeg_struct); } jpeg_size = encode_image(proc_buff->frame, global->jpeg, *jpeg_struct, 0, global->width, global->height); ret = write_video_data (all_data, global->jpeg, jpeg_size); } break; case CODEC_YUV: ret = write_video_data (all_data, proc_buff->frame, proc_buff->bytes_used); break; case CODEC_DIB: framesize=(global->width)*(global->height)*3; /*DIB 24/32 -> 3/4 bytes per pixel*/ prgb = g_new0(BYTE, framesize); switch (global->VidFormat) { case AVI_FORMAT: /* lines upside down */ yuyv2bgr(proc_buff->frame, prgb, global->width, global->height); break; case WEBM_FORMAT: case MKV_FORMAT: /* lines in correct order*/ yuyv2bgr1(proc_buff->frame, prgb, global->width, global->height); break; } ret = write_video_data (all_data, prgb, framesize); g_free(prgb); prgb=NULL; break; default: ret = encode_lavc (lavc_data, all_data, proc_buff); break; } return (ret); } guvcview-src-1.7.1/src/matroska.h0000775000175000017500000003107412173235416015765 0ustar paulopaulo/*******************************************************************************# # guvcview http://guvcview.sourceforge.net # # # # Paulo Assis # # # # This is a heavily modified version of the matroska interface from x264 # # Copyright (C) 2005 Mike Matsnev # # # # 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # # ********************************************************************************/ #ifndef GUVC_MATROSKA_H #define GUVC_MATROSKA_H #include "defs.h" #include #include #include #include #include "file_io.h" #include "io_stream.h" /* EBML version supported */ #define EBML_VERSION 1 /* top-level master-IDs */ #define EBML_ID_HEADER 0x1A45DFA3 /* IDs in the HEADER master */ #define EBML_ID_EBMLVERSION 0x4286 #define EBML_ID_EBMLREADVERSION 0x42F7 #define EBML_ID_EBMLMAXIDLENGTH 0x42F2 #define EBML_ID_EBMLMAXSIZELENGTH 0x42F3 #define EBML_ID_DOCTYPE 0x4282 #define EBML_ID_DOCTYPEVERSION 0x4287 #define EBML_ID_DOCTYPEREADVERSION 0x4285 /* general EBML types */ #define EBML_ID_VOID 0xEC #define EBML_ID_CRC32 0xBF /* * Matroska element IDs, max. 32 bits */ /* toplevel segment */ #define MATROSKA_ID_SEGMENT 0x18538067 /* Matroska top-level master IDs */ #define MATROSKA_ID_INFO 0x1549A966 #define MATROSKA_ID_TRACKS 0x1654AE6B #define MATROSKA_ID_CUES 0x1C53BB6B #define MATROSKA_ID_TAGS 0x1254C367 #define MATROSKA_ID_SEEKHEAD 0x114D9B74 #define MATROSKA_ID_ATTACHMENTS 0x1941A469 #define MATROSKA_ID_CLUSTER 0x1F43B675 #define MATROSKA_ID_CHAPTERS 0x1043A770 /* IDs in the info master */ #define MATROSKA_ID_TIMECODESCALE 0x2AD7B1 #define MATROSKA_ID_DURATION 0x4489 #define MATROSKA_ID_TITLE 0x7BA9 #define MATROSKA_ID_WRITINGAPP 0x5741 #define MATROSKA_ID_MUXINGAPP 0x4D80 #define MATROSKA_ID_DATEUTC 0x4461 #define MATROSKA_ID_SEGMENTUID 0x73A4 /* ID in the tracks master */ #define MATROSKA_ID_TRACKENTRY 0xAE /* IDs in the trackentry master */ #define MATROSKA_ID_TRACKNUMBER 0xD7 #define MATROSKA_ID_TRACKUID 0x73C5 #define MATROSKA_ID_TRACKTYPE 0x83 #define MATROSKA_ID_TRACKAUDIO 0xE1 #define MATROSKA_ID_TRACKVIDEO 0xE0 #define MATROSKA_ID_CODECID 0x86 #define MATROSKA_ID_CODECPRIVATE 0x63A2 #define MATROSKA_ID_CODECNAME 0x258688 #define MATROSKA_ID_CODECINFOURL 0x3B4040 #define MATROSKA_ID_CODECDOWNLOADURL 0x26B240 #define MATROSKA_ID_CODECDECODEALL 0xAA #define MATROSKA_ID_TRACKNAME 0x536E #define MATROSKA_ID_TRACKLANGUAGE 0x22B59C #define MATROSKA_ID_TRACKFLAGENABLED 0xB9 #define MATROSKA_ID_TRACKFLAGDEFAULT 0x88 #define MATROSKA_ID_TRACKFLAGFORCED 0x55AA #define MATROSKA_ID_TRACKFLAGLACING 0x9C #define MATROSKA_ID_TRACKMINCACHE 0x6DE7 #define MATROSKA_ID_TRACKMAXCACHE 0x6DF8 #define MATROSKA_ID_TRACKDEFAULTDURATION 0x23E383 #define MATROSKA_ID_TRACKCONTENTENCODINGS 0x6D80 #define MATROSKA_ID_TRACKCONTENTENCODING 0x6240 #define MATROSKA_ID_TRACKTIMECODESCALE 0x23314F #define MATROSKA_ID_TRACKMAXBLKADDID 0x55EE /* IDs in the trackvideo master */ #define MATROSKA_ID_VIDEOFRAMERATE 0x2383E3 #define MATROSKA_ID_VIDEODISPLAYWIDTH 0x54B0 #define MATROSKA_ID_VIDEODISPLAYHEIGHT 0x54BA #define MATROSKA_ID_VIDEOPIXELWIDTH 0xB0 #define MATROSKA_ID_VIDEOPIXELHEIGHT 0xBA #define MATROSKA_ID_VIDEOPIXELCROPB 0x54AA #define MATROSKA_ID_VIDEOPIXELCROPT 0x54BB #define MATROSKA_ID_VIDEOPIXELCROPL 0x54CC #define MATROSKA_ID_VIDEOPIXELCROPR 0x54DD #define MATROSKA_ID_VIDEODISPLAYUNIT 0x54B2 #define MATROSKA_ID_VIDEOFLAGINTERLACED 0x9A #define MATROSKA_ID_VIDEOSTEREOMODE 0x53B9 #define MATROSKA_ID_VIDEOASPECTRATIO 0x54B3 #define MATROSKA_ID_VIDEOCOLORSPACE 0x2EB524 /* IDs in the trackaudio master */ #define MATROSKA_ID_AUDIOSAMPLINGFREQ 0xB5 #define MATROSKA_ID_AUDIOOUTSAMPLINGFREQ 0x78B5 #define MATROSKA_ID_AUDIOBITDEPTH 0x6264 #define MATROSKA_ID_AUDIOCHANNELS 0x9F /* IDs in the content encoding master */ #define MATROSKA_ID_ENCODINGORDER 0x5031 #define MATROSKA_ID_ENCODINGSCOPE 0x5032 #define MATROSKA_ID_ENCODINGTYPE 0x5033 #define MATROSKA_ID_ENCODINGCOMPRESSION 0x5034 #define MATROSKA_ID_ENCODINGCOMPALGO 0x4254 #define MATROSKA_ID_ENCODINGCOMPSETTINGS 0x4255 /* ID in the cues master */ #define MATROSKA_ID_POINTENTRY 0xBB /* IDs in the pointentry master */ #define MATROSKA_ID_CUETIME 0xB3 #define MATROSKA_ID_CUETRACKPOSITION 0xB7 /* IDs in the cuetrackposition master */ #define MATROSKA_ID_CUETRACK 0xF7 #define MATROSKA_ID_CUECLUSTERPOSITION 0xF1 #define MATROSKA_ID_CUEBLOCKNUMBER 0x5378 /* IDs in the tags master */ #define MATROSKA_ID_TAG 0x7373 #define MATROSKA_ID_SIMPLETAG 0x67C8 #define MATROSKA_ID_TAGNAME 0x45A3 #define MATROSKA_ID_TAGSTRING 0x4487 #define MATROSKA_ID_TAGLANG 0x447A #define MATROSKA_ID_TAGDEFAULT 0x44B4 #define MATROSKA_ID_TAGTARGETS 0x63C0 #define MATROSKA_ID_TAGTARGETS_TYPE 0x63CA #define MATROSKA_ID_TAGTARGETS_TYPEVALUE 0x68CA #define MATROSKA_ID_TAGTARGETS_TRACKUID 0x63C5 #define MATROSKA_ID_TAGTARGETS_CHAPTERUID 0x63C4 #define MATROSKA_ID_TAGTARGETS_ATTACHUID 0x63C6 /* IDs in the seekhead master */ #define MATROSKA_ID_SEEKENTRY 0x4DBB /* IDs in the seekpoint master */ #define MATROSKA_ID_SEEKID 0x53AB #define MATROSKA_ID_SEEKPOSITION 0x53AC /* IDs in the cluster master */ #define MATROSKA_ID_CLUSTERTIMECODE 0xE7 #define MATROSKA_ID_CLUSTERPOSITION 0xA7 #define MATROSKA_ID_CLUSTERPREVSIZE 0xAB #define MATROSKA_ID_BLOCKGROUP 0xA0 #define MATROSKA_ID_SIMPLEBLOCK 0xA3 /* IDs in the blockgroup master */ #define MATROSKA_ID_BLOCK 0xA1 #define MATROSKA_ID_BLOCKDURATION 0x9B #define MATROSKA_ID_BLOCKREFERENCE 0xFB /* IDs in the attachments master */ #define MATROSKA_ID_ATTACHEDFILE 0x61A7 #define MATROSKA_ID_FILEDESC 0x467E #define MATROSKA_ID_FILENAME 0x466E #define MATROSKA_ID_FILEMIMETYPE 0x4660 #define MATROSKA_ID_FILEDATA 0x465C #define MATROSKA_ID_FILEUID 0x46AE /* IDs in the chapters master */ #define MATROSKA_ID_EDITIONENTRY 0x45B9 #define MATROSKA_ID_CHAPTERATOM 0xB6 #define MATROSKA_ID_CHAPTERTIMESTART 0x91 #define MATROSKA_ID_CHAPTERTIMEEND 0x92 #define MATROSKA_ID_CHAPTERDISPLAY 0x80 #define MATROSKA_ID_CHAPSTRING 0x85 #define MATROSKA_ID_CHAPLANG 0x437C #define MATROSKA_ID_EDITIONUID 0x45BC #define MATROSKA_ID_EDITIONFLAGHIDDEN 0x45BD #define MATROSKA_ID_EDITIONFLAGDEFAULT 0x45DB #define MATROSKA_ID_EDITIONFLAGORDERED 0x45DD #define MATROSKA_ID_CHAPTERUID 0x73C4 #define MATROSKA_ID_CHAPTERFLAGHIDDEN 0x98 #define MATROSKA_ID_CHAPTERFLAGENABLED 0x4598 #define MATROSKA_ID_CHAPTERPHYSEQUIV 0x63C3 /* track type*/ #define MATROSKA_TRACK_TYPE_NONE 0x0 #define MATROSKA_TRACK_TYPE_VIDEO 0x1 #define MATROSKA_TRACK_TYPE_AUDIO 0x2 #define MATROSKA_TRACK_TYPE_COMPLEX 0x3 #define MATROSKA_TRACK_TYPE_LOGO 0x10 #define MATROSKA_TRACK_TYPE_SUBTITLE 0x11 #define MATROSKA_TRACK_TYPE_CONTROL 0x20 /* typedef enum { MATROSKA_TRACK_ENCODING_COMP_ZLIB = 0, MATROSKA_TRACK_ENCODING_COMP_BZLIB = 1, MATROSKA_TRACK_ENCODING_COMP_LZO = 2, MATROSKA_TRACK_ENCODING_COMP_HEADERSTRIP = 3, } MatroskaTrackEncodingCompAlgo; */ typedef struct ebml_master { int64_t pos; ///< absolute offset in the file where the master's elements start int sizebytes; ///< how many bytes were reserved for the size } ebml_master; typedef struct mkv_seekhead_entry { unsigned int elementid; uint64_t segmentpos; } mkv_seekhead_entry; typedef struct mkv_seekhead { int64_t filepos; int64_t segment_offset; ///< the file offset to the beginning of the segment int reserved_size; ///< -1 if appending to file int max_entries; mkv_seekhead_entry *entries; int num_entries; } mkv_seekhead; typedef struct { uint64_t pts; int tracknum; int64_t cluster_pos; ///< file offset of the cluster containing the block } mkv_cuepoint; typedef struct { int64_t segment_offset; mkv_cuepoint *entries; int num_entries; } mkv_cues; typedef struct mkv_Context { int mode; //matroska or webm io_Writer* writer; ebml_master segment; int64_t segment_offset; ebml_master cluster; int64_t cluster_pos; ///< file offset of the current cluster int64_t cluster_pts; int64_t duration_offset; int64_t duration; mkv_seekhead *main_seekhead; mkv_cues *cues; uint64_t timescale; uint64_t first_pts; //pts of first packet // store one audio packet (webm) unsigned int pkt_buffer_size; BYTE* pkt_buffer; unsigned int pkt_size; uint64_t pkt_pts; int pkt_duration; int pkt_stream_index; int pkt_flags; io_Stream* stream_list; int stream_list_size; } mkv_Context; /** create a muxer context * mode : WEBM_FORMAT or MKV_FORMAT*/ mkv_Context* mkv_create_context(char* filename, int mode); /** add a video stream to the context */ io_Stream* mkv_add_video_stream(mkv_Context *MKV, int32_t width, int32_t height, int32_t codec_id); /** add a audio stream to the context */ io_Stream* mkv_add_audio_stream(mkv_Context *MKV, int32_t channels, int32_t rate, int32_t bits, int32_t mpgrate, int32_t codec_id, int32_t format); /** write the header*/ int mkv_write_header(mkv_Context* MKV); int mkv_write_packet(mkv_Context* MKV, int stream_index, BYTE* data, int size, int duration, uint64_t pts, int flags); /** finalize file operations*/ int mkv_close(mkv_Context* MKV); /** destroy the muxer context (clean up)*/ void mkv_destroy_context(mkv_Context* MKV); typedef struct mk_Writer mk_Writer; mk_Writer *mk_createWriter( const char *filename, int format ); int mk_writeHeader( mk_Writer *w, const char *writingApp, const char *codecID, const char *AcodecID, const void *codecPrivate, int64_t codecPrivateSize, UINT64 default_frame_duration, const void *AcodecPrivate, int64_t AcodecPrivateSize, UINT64 default_aframe_duration, int64_t timescale, unsigned width, unsigned height, unsigned d_width, unsigned d_height, float SampRate, int channels, int bitsSample ); void mk_setDef_Duration(mk_Writer *w, UINT64 def_duration); int mk_startFrame( mk_Writer *w ); int mk_startAudioFrame(mk_Writer *w); int mk_addFrameData( mk_Writer *w, const void *data, int64_t size ); int mk_addAudioFrameData(mk_Writer *w, const void *data, int64_t size); int mk_setFrameFlags( mk_Writer *w, int64_t timestamp, int keyframe ); int mk_setAudioFrameFlags(mk_Writer *w,int64_t timestamp, int keyframe); int mk_close( mk_Writer *w ); #endif guvcview-src-1.7.1/src/avilib.h0000775000175000017500000001537512173235416015420 0ustar paulopaulo/*******************************************************************************# # guvcview http://guvcview.sourceforge.net # # # # Paulo Assis # # # # 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # # ********************************************************************************/ /*******************************************************************************# # Some utilities for writing and reading AVI files. # # These are not intended to serve for a full blown # # AVI handling software (this would be much too complex) # # The only intention is to write out MJPEG encoded # # AVIs with sound and to be able to read them back again. # # These utilities should work with other types of codecs too, however. # # # # Copyright (C) 1999 Rainer Johanni # ********************************************************************************/ #ifndef AVILIB_H #define AVILIB_H #include "defs.h" #include #include #include #include #include "file_io.h" #include "io_stream.h" #define AVI_MAX_TRACKS 8 #define FRAME_RATE_SCALE 1000 //1000000 typedef struct _video_index_entry { off_t key; off_t pos; off_t len; } video_index_entry; typedef struct _audio_index_entry { off_t pos; off_t len; off_t tot; } audio_index_entry; typedef struct avi_Ientry { unsigned int flags, pos, len; } avi_Ientry; typedef struct avi_Index { int64_t indx_start; int entry; int ents_allocated; avi_Ientry** cluster; } avi_Index; struct avi_RIFF { int64_t riff_start, movi_list; //int64_t frames_hdr_all; int64_t time_delay_off; int id; struct avi_RIFF *previous, *next; }; typedef struct avi_RIFF avi_RIFF; struct avi_Context { io_Writer *writer; __MUTEX_TYPE mutex; int flags; /* 0 - AVI is recordind; 1 - AVI is not recording*/ uint32_t avi_flags; int32_t time_base_num; /* video time base numerator */ int32_t time_base_den; /* video time base denominator */ avi_RIFF* riff_list; // avi_riff list (NULL terminated) int riff_list_size; io_Stream* stream_list; int stream_list_size; double fps; int64_t odml_list /*,time_delay_off*/ ; //some file offsets }; typedef struct avi_Context avi_Context; avi_Context* avi_create_context(const char * filename); io_Stream* avi_add_video_stream(avi_Context *AVI, int32_t width, int32_t height, double fps, int32_t codec_id, const char* compressor); io_Stream* avi_add_audio_stream(avi_Context *AVI, int32_t channels, int32_t rate, int32_t bits, int32_t mpgrate, int32_t codec_id, int32_t format); int avi_write_packet(avi_Context* AVI, int stream_index, BYTE *data, uint32_t size, int64_t dts, int block_align, int32_t flags); avi_RIFF* avi_add_new_riff(avi_Context* AVI); int avi_close(avi_Context* AVI); void avi_destroy_context(avi_Context* AVI); /* Possible Audio formats */ #define WAVE_FORMAT_UNKNOWN (0x0000) #define WAVE_FORMAT_PCM (0x0001) #define WAVE_FORMAT_ADPCM (0x0002) #define WAVE_FORMAT_IEEE_FLOAT (0x0003) #define WAVE_FORMAT_IBM_CVSD (0x0005) #define WAVE_FORMAT_ALAW (0x0006) #define WAVE_FORMAT_MULAW (0x0007) #define WAVE_FORMAT_OKI_ADPCM (0x0010) #define WAVE_FORMAT_DVI_ADPCM (0x0011) #define WAVE_FORMAT_DIGISTD (0x0015) #define WAVE_FORMAT_DIGIFIX (0x0016) #define WAVE_FORMAT_YAMAHA_ADPCM (0x0020) #define WAVE_FORMAT_DSP_TRUESPEECH (0x0022) #define WAVE_FORMAT_GSM610 (0x0031) #define WAVE_FORMAT_MP3 (0x0055) #define WAVE_FORMAT_MPEG12 (0x0050) #define WAVE_FORMAT_AAC (0x00ff) #define WAVE_FORMAT_IBM_MULAW (0x0101) #define WAVE_FORMAT_IBM_ALAW (0x0102) #define WAVE_FORMAT_IBM_ADPCM (0x0103) #define WAVE_FORMAT_AC3 (0x2000) /*extra audio formats (codecs)*/ #define ANTEX_FORMAT_ADPCME (0x0033) #define AUDIO_FORMAT_APTX (0x0025) #define AUDIOFILE_FORMAT_AF10 (0x0026) #define AUDIOFILE_FORMAT_AF36 (0x0024) #define BROOKTREE_FORMAT_BTVD (0x0400) #define CANOPUS_FORMAT_ATRAC (0x0063) #define CIRRUS_FORMAT_CIRRUS (0x0060) #define CONTROL_FORMAT_CR10 (0x0037) #define CONTROL_FORMAT_VQLPC (0x0034) #define CREATIVE_FORMAT_ADPCM (0x0200) #define CREATIVE_FORMAT_FASTSPEECH10 (0x0203) #define CREATIVE_FORMAT_FASTSPEECH8 (0x0202) #define IMA_FORMAT_ADPCM (0x0039) #define CONSISTENT_FORMAT_CS2 (0x0260) #define HP_FORMAT_CU (0x0019) #define DEC_FORMAT_G723 (0x0123) #define DF_FORMAT_G726 (0x0085) #define DSP_FORMAT_ADPCM (0x0036) #define DOLBY_FORMAT_AC2 (0x0030) #define DOLBY_FORMAT_AC3_SPDIF (0x0092) #define ESS_FORMAT_ESPCM (0x0061) #define IEEE_FORMAT_FLOAT (0x0003) #define MS_FORMAT_MSAUDIO1_DIVX (0x0160) #define MS_FORMAT_MSAUDIO2_DIVX (0x0161) #define OGG_FORMAT_VORBIS (0x566f) #define OGG_FORMAT_VORBIS1 (0x674f) #define OGG_FORMAT_VORBIS1P (0x676f) #define OGG_FORMAT_VORBIS2 (0x6750) #define OGG_FORMAT_VORBIS2P (0x6770) #define OGG_FORMAT_VORBIS3 (0x6751) #define OGG_FORMAT_VORBIS3P (0x6771) #define MS_FORMAT_WMA9 (0x0163) #define MS_FORMAT_WMA9_PRO (0x0162) #endif guvcview-src-1.7.1/src/options.c0000664000175000017500000010720212173235416015624 0ustar paulopaulo/*******************************************************************************# # guvcview http://guvcview.sourceforge.net # # # # Paulo Assis # # # # 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # # ********************************************************************************/ #include #include #include #include #include #include /* support for internationalization - i18n */ #include /*needs locale.h when debug is enabled*/ #include #include "defs.h" #include "globals.h" #include "vcodecs.h" #include "acodecs.h" #include "string_utils.h" #include "avilib.h" #include "v4l2uvc.h" #include "../config.h" /*----------------------- write conf (.guvcviewrc) file ----------------------*/ int writeConf(struct GLOBAL *global, char *videodevice) { int ret=0; FILE *fp; //use c locale - make sure floats are writen with a "." and not a "," setlocale(LC_NUMERIC, "C"); //get pointers to codec properties vcodecs_data *vcodec_defaults = get_codec_defaults(global->VidCodec); acodecs_data *acodec_defaults = get_aud_codec_defaults(get_ind_by4cc(global->Sound_Format)); // write to tmp file then rename after sucessfull fsync // using fsync avois data loss on system crash // see: https://bugs.launchpad.net/ubuntu/+source/linux/+bug/317781/comments/54 char *tmpfile = g_strjoin (".", global->confPath, "tmp", NULL); if ((fp = g_fopen(tmpfile,"w"))!=NULL) { g_fprintf(fp,"# guvcview configuration file for %s\n\n",videodevice); g_fprintf(fp,"version='%s'\n",VERSION); g_fprintf(fp,"# Thread stack size: default 128 pages of 64k = 8388608 bytes\n"); g_fprintf(fp,"stack_size=%d\n",global->stack_size); g_fprintf(fp,"# video loop sleep time in ms: 0,1,2,3,...\n"); g_fprintf(fp,"# increased sleep time -> less cpu load, more droped frames\n"); g_fprintf(fp,"vid_sleep=%i\n",global->vid_sleep); g_fprintf(fp,"# capture method: 1- mmap 2- read\n"); g_fprintf(fp,"cap_meth=%i\n",global->cap_meth); g_fprintf(fp,"# video resolution \n"); g_fprintf(fp,"resolution='%ix%i'\n",global->width,global->height); g_fprintf(fp,"# control window size: default %ix%i\n",WINSIZEX,WINSIZEY); g_fprintf(fp,"windowsize='%ix%i'\n",global->winwidth,global->winheight); g_fprintf(fp,"#spin button behavior: 0-non editable 1-editable\n"); g_fprintf(fp,"spinbehave=%i\n", global->spinbehave); g_fprintf(fp,"#Default action. 0 for picture, 1 for video.\n"); g_fprintf(fp,"default_action=%i\n", global->default_action); g_fprintf(fp,"# mode video format 'yuvy' 'yvyu' 'uyvy' 'yyuv' 'yu12' 'yv12' 'nv12' 'nv21' 'nv16' 'nv61' 'y41p' 'grey' 'y10b' 'y16 ' 's501' 's505' 's508' 'gbrg' 'grbg' 'ba81' 'rggb' 'rgb3' 'bgr3' 'jpeg' 'mjpg'(default)\n"); g_fprintf(fp,"mode='%s'\n",global->mode); g_fprintf(fp,"# frames per sec. - hardware supported - default( %i )\n",DEFAULT_FPS); g_fprintf(fp,"fps='%d/%d'\n",global->fps_num,global->fps); g_fprintf(fp,"#Display Fps counter: 1- Yes 0- No\n"); g_fprintf(fp,"fps_display=%i\n",global->FpsCount); g_fprintf(fp,"#auto focus (continuous): 1- Yes 0- No\n"); g_fprintf(fp,"auto_focus=%i\n",global->autofocus); g_fprintf(fp,"# bytes per pixel: default (0 - current)\n"); g_fprintf(fp,"bpp=%i\n",global->bpp); g_fprintf(fp,"# hardware accelaration: 0 1 (default - 1)\n"); g_fprintf(fp,"hwaccel=%i\n",global->hwaccel); g_fprintf(fp,"# video compression format: 0-MJPG 1-YUY2/UYVY 2-DIB (BMP 24) 3-MPEG1 4-FLV1 5-MPEG2 6-MS MPEG4 V3(DIV3) 7-MPEG4 (DIV5)\n"); g_fprintf(fp,"vid_codec=%i\n",global->VidCodec); g_fprintf(fp,"# video muxer format: 0-AVI 1-MKV 2-WebM\n"); g_fprintf(fp,"vid_format=%i\n",global->VidFormat); g_fprintf(fp,"# Auto Video naming (ex: filename-n.avi)\n"); g_fprintf(fp,"vid_inc=%i\n",(global->vid_inc > 0 ? 1: 0)); g_fprintf(fp,"# sound 0 - disable 1 - enable\n"); g_fprintf(fp,"sound=%i\n",global->Sound_enable); g_fprintf(fp,"# sound API: 0- Portaudio 1- Pulseaudio\n"); g_fprintf(fp,"snd_api=%i\n", global->Sound_API); g_fprintf(fp,"# snd_device - sound device id as listed by portaudio (pulse uses default device)\n"); g_fprintf(fp,"snd_device=%i\n",global->Sound_UseDev); g_fprintf(fp,"# snd_samprate - sound sample rate\n"); g_fprintf(fp,"snd_samprate=%i\n",global->Sound_SampRateInd); g_fprintf(fp,"# snd_numchan - sound number of channels 0- dev def 1 - mono 2 -stereo\n"); g_fprintf(fp,"snd_numchan=%i\n",global->Sound_NumChanInd); g_fprintf(fp,"#snd_numsec - video audio blocks size in sec: 1,2,3,.. \n"); g_fprintf(fp,"# sound delay in nanosec - delays sound by the specified amount when capturing video\n"); g_fprintf(fp,"snd_delay=%llu\n",(unsigned long long) global->Sound_delay); g_fprintf(fp,"# Audio codec (PCM=0 MPG2=1 (\n"); g_fprintf(fp,"aud_codec=%i\n",global->AudCodec); g_fprintf(fp,"# video filters: 0 -none 1- flip 2- upturn 4- negate 8- mono (add the ones you want)\n"); g_fprintf(fp,"frame_flags=%i\n",global->Frame_Flags); g_fprintf(fp,"#on screen display flags (VU meter)\n"); g_fprintf(fp,"osd_flags=%i\n",global->osdFlags); g_fprintf(fp,"# Auto Image naming (filename-n.ext)\n"); g_fprintf(fp,"image_inc=%i\n",(global->image_inc > 0 ? 1: 0)); g_fprintf(fp,"# Image capture Full Path\n"); g_fprintf(fp,"image_path='%s/%s'\n",global->imgFPath[1],global->imgFPath[0]); g_fprintf(fp,"# Video capture Full Path\n"); g_fprintf(fp,"video_path='%s/%s'\n",global->vidFPath[1],global->vidFPath[0]); g_fprintf(fp,"# control profiles Full Path\n"); g_fprintf(fp,"profile_path='%s/%s'\n",global->profile_FPath[1],global->profile_FPath[0]); g_fprintf(fp, "# audio codec properties (remove for default values\n"); g_fprintf(fp, "acodec_bit_rate=%d\n",acodec_defaults->bit_rate); g_fprintf(fp, "# video codec (%s) properties (remove for default values\n", vcodec_defaults->compressor); g_fprintf(fp, "vcodec_bit_rate=%d\n",vcodec_defaults->bit_rate); g_fprintf(fp, "vcodec_fps=%d\n",vcodec_defaults->fps); g_fprintf(fp, "vcodec_monotonic_pts=%d\n",vcodec_defaults->monotonic_pts); g_fprintf(fp, "vcodec_qmax=%d\n",vcodec_defaults->qmax); g_fprintf(fp, "vcodec_qmin=%d\n",vcodec_defaults->qmin); g_fprintf(fp, "vcodec_max_qdiff=%d\n",vcodec_defaults->max_qdiff); g_fprintf(fp, "vcodec_dia=%d\n",vcodec_defaults->dia); g_fprintf(fp, "vcodec_pre_dia=%d\n",vcodec_defaults->pre_dia); g_fprintf(fp, "vcodec_pre_me=%d\n",vcodec_defaults->pre_me); g_fprintf(fp, "vcodec_me_pre_cmp=%d\n",vcodec_defaults->me_pre_cmp); g_fprintf(fp, "vcodec_me_cmp=%d\n",vcodec_defaults->me_cmp); g_fprintf(fp, "vcodec_me_sub_cmp=%d\n",vcodec_defaults->me_sub_cmp); g_fprintf(fp, "vcodec_last_pred=%d\n",vcodec_defaults->last_pred); g_fprintf(fp, "vcodec_gop_size=%d\n",vcodec_defaults->gop_size); g_fprintf(fp, "vcodec_qcompress=%.2f\n",vcodec_defaults->qcompress); g_fprintf(fp, "vcodec_qblur=%.2f\n",vcodec_defaults->qblur); g_fprintf(fp, "vcodec_subq=%d\n",vcodec_defaults->subq); g_fprintf(fp, "vcodec_framerefs=%d\n",vcodec_defaults->framerefs); g_fprintf(fp, "vcodec_mb_decision=%d\n",vcodec_defaults->mb_decision); g_fprintf(fp, "vcodec_trellis=%d\n",vcodec_defaults->trellis); g_fprintf(fp, "vcodec_me_method=%d\n",vcodec_defaults->me_method); g_fprintf(fp, "vcodec_mpeg_quant=%d\n",vcodec_defaults->mpeg_quant); g_fprintf(fp, "vcodec_max_b_frames=%d\n",vcodec_defaults->max_b_frames); g_fprintf(fp, "vcodec_num_threads=%d\n",vcodec_defaults->num_threads); g_fprintf(fp, "vcodec_flags=%d\n",vcodec_defaults->flags); printf("write %s OK\n",global->confPath); //flush stream buffers to filesystem fflush(fp); //close file after fsync (sync file data to disk) if (fsync(fileno(fp)) || fclose(fp)) { perror("error writing configuration data to file"); ret=-1; } else { //rename from tmp to real name g_rename (tmpfile, global->confPath); } } else { g_printerr("Could not write file %s \n Please check file permissions\n",tmpfile); ret=-2; } g_free(tmpfile); //return to system locale setlocale(LC_NUMERIC, ""); return ret; } /*----------------------- read conf (.config/guvcview/videoX) file -----------------------*/ int readConf(struct GLOBAL *global) { int ret=0; //int signal=1; /*1=>+ or -1=>-*/ GScanner *scanner; GTokenType ttype; GScannerConfig config = { " \t\r\n", /* characters to skip */ G_CSET_a_2_z "_" G_CSET_A_2_Z, /* identifier start */ G_CSET_a_2_z "_." G_CSET_A_2_Z G_CSET_DIGITS,/* identifier cont. */ "#\n", /* single line comment */ FALSE, /* case_sensitive */ TRUE, /* skip multi-line comments */ TRUE, /* skip single line comments */ FALSE, /* scan multi-line comments */ TRUE, /* scan identifiers */ TRUE, /* scan 1-char identifiers */ FALSE, /* scan NULL identifiers */ FALSE, /* scan symbols */ FALSE, /* scan binary */ FALSE, /* scan octal */ TRUE, /* scan float */ TRUE, /* scan hex */ FALSE, /* scan hex dollar */ TRUE, /* scan single quote strings */ TRUE, /* scan double quote strings */ TRUE, /* numbers to int */ FALSE, /* int to float */ TRUE, /* identifier to string */ TRUE, /* char to token */ FALSE, /* symbol to token */ FALSE, /* scope 0 fallback */ TRUE /* store int64 */ }; int fd = g_open (global->confPath, O_RDONLY, 0); if (fd < 0 ) { printf("Could not open %s for read,\n will try to create it\n",global->confPath); ret=writeConf(global, global->videodevice); } else { scanner = g_scanner_new (&config); g_scanner_input_file (scanner, fd); scanner->input_name = global->confPath; //temp codec values int ac_bit_rate =-1, vc_bit_rate=-1, vc_fps=-1, vc_qmax=-1, vc_qmin=-1, vc_max_qdiff=-1, vc_dia=-1; int vc_pre_dia=-1, vc_pre_me=-1, vc_me_pre_cmp=-1, vc_me_cmp=-1, vc_me_sub_cmp=-1, vc_last_pred=-1; int vc_gop_size=-1, vc_subq=-1, vc_framerefs=-1, vc_mb_decision=-1, vc_trellis=-1, vc_me_method=-1; int vc_mpeg_quant=-1, vc_max_b_frames=-1, vc_num_threads=-1, vc_flags=-1, vc_monotonic_pts=-1; float vc_qcompress=-1, vc_qblur=-1; int VMAJOR =-1, VMINOR=-1, VMICRO=-1; for (ttype = g_scanner_get_next_token (scanner); ttype != G_TOKEN_EOF; ttype = g_scanner_get_next_token (scanner)) { if (ttype == G_TOKEN_STRING) { //printf("reading %s...\n",scanner->value.v_string); char *name = g_strdup (scanner->value.v_string); ttype = g_scanner_get_next_token (scanner); if (ttype != G_TOKEN_EQUAL_SIGN) { g_scanner_unexp_token (scanner, G_TOKEN_EQUAL_SIGN, NULL, NULL, NULL, NULL, FALSE); } else { ttype = g_scanner_get_next_token (scanner); /*check for signed integers*/ if(ttype == '-') { //signal = -1; ttype = g_scanner_get_next_token (scanner); } if (ttype == G_TOKEN_STRING) { if (g_strcmp0(name,"version")==0) { sscanf(scanner->value.v_string,"%i.%i.%i", &(VMAJOR), &(VMINOR), &(VMICRO)); } else if (g_strcmp0(name,"resolution")==0) { if(global->flg_res < 1) /*must check for defaults since ReadOpts runs before ReadConf*/ sscanf(scanner->value.v_string,"%ix%i", &(global->width), &(global->height)); } else if (g_strcmp0(name,"windowsize")==0) { sscanf(scanner->value.v_string,"%ix%i", &(global->winwidth), &(global->winheight)); } else if (g_strcmp0(name,"mode")==0) { if(global->flg_mode < 1) { /*use fourcc but keep it compatible with luvcview*/ if(g_strcmp0(scanner->value.v_string,"yuv") == 0) g_snprintf(global->mode,5,"yuyv"); else g_snprintf(global->mode,5,"%s",scanner->value.v_string); } } else if (g_strcmp0(name,"fps")==0) { sscanf(scanner->value.v_string,"%i/%i", &(global->fps_num), &(global->fps)); } else if (g_strcmp0(name,"image_path")==0) { if(global->flg_imgFPath < 1) { global->imgFPath = splitPath(scanner->value.v_string,global->imgFPath); /*get the file type*/ global->imgFormat = check_image_type(global->imgFPath[0]); } else { /* check if new file != old file */ gchar * newPath = g_strjoin ("/", global->imgFPath[1], global->imgFPath[0], NULL); //printf("image path: %s\n old path: %s\n", newPath, scanner->value.v_string); if(g_strcmp0(scanner->value.v_string, newPath) !=0) { /* reset counter */ //printf("reset counter from: %i\n", global->image_inc); if(global->image_inc > 0) { global->image_inc = 1; //g_snprintf(global->imageinc_str,20,_("File num:%d"),global->image_inc); } } g_free(newPath); } } else if ((g_strcmp0(name,"video_path")==0) || (g_strcmp0(name,"avi_path")==0)) { if(global->vidfile == NULL) { global->vidFPath=splitPath(scanner->value.v_string,global->vidFPath); } } else if (g_strcmp0(name,"profile_path")==0) { if(global->lprofile < 1) global->profile_FPath=splitPath(scanner->value.v_string, global->profile_FPath); } else { printf("unexpected string value (%s) for %s\n", scanner->value.v_string, name); } } else if (ttype==G_TOKEN_INT) { if (g_strcmp0(name,"stack_size")==0) { global->stack_size = scanner->value.v_int; } else if (g_strcmp0(name,"vid_sleep")==0) { global->vid_sleep = scanner->value.v_int; } else if (g_strcmp0(name,"cap_meth")==0) { if(!(global->flg_cap_meth)) global->cap_meth = scanner->value.v_int; } else if (g_strcmp0(name,"spinbehave")==0) { global->spinbehave = scanner->value.v_int; } else if (g_strcmp0(name,"default_action")==0) { global->default_action = scanner->value.v_int; } else if (g_strcmp0(name,"fps")==0) { /*parse non-quoted fps values*/ int line = g_scanner_cur_line(scanner); global->fps_num = scanner->value.v_int; ttype = g_scanner_peek_next_token (scanner); if(ttype=='/') { /*get '/'*/ ttype = g_scanner_get_next_token (scanner); ttype = g_scanner_peek_next_token (scanner); if(ttype==G_TOKEN_INT) { ttype = g_scanner_get_next_token (scanner); global->fps = scanner->value.v_int; } else if (scanner->next_line>line) { /*start new loop*/ break; } else { ttype = g_scanner_get_next_token (scanner); g_scanner_unexp_token (scanner, G_TOKEN_NONE, NULL, NULL, NULL, "bad value for fps", FALSE); } } } else if (strcmp(name,"fps_display")==0) { if(global->flg_FpsCount < 1) global->FpsCount = (short) scanner->value.v_int; } else if (g_strcmp0(name,"auto_focus")==0) { global->autofocus = scanner->value.v_int; } else if (g_strcmp0(name,"bpp")==0) { global->bpp = scanner->value.v_int; } else if (g_strcmp0(name,"hwaccel")==0) { if(global->flg_hwaccel < 1) global->hwaccel = scanner->value.v_int; } else if (g_strcmp0(name,"vid_codec")==0 || (g_strcmp0(name,"avi_format")==0)) { global->VidCodec = scanner->value.v_int; } else if (g_strcmp0(name,"vid_format")==0) { global->VidFormat = scanner->value.v_int; } else if ((g_strcmp0(name,"vid_inc")==0) || (g_strcmp0(name,"avi_inc")==0)) { global->vid_inc = (DWORD) scanner->value.v_int; } else if (g_strcmp0(name,"sound")==0) { global->Sound_enable = (short) scanner->value.v_int; } else if (g_strcmp0(name,"snd_api")==0) { global->Sound_API = scanner->value.v_int; } else if (g_strcmp0(name,"snd_device")==0) { global->Sound_UseDev = scanner->value.v_int; } else if (g_strcmp0(name,"snd_samprate")==0) { global->Sound_SampRateInd = scanner->value.v_int; } else if (g_strcmp0(name,"snd_numchan")==0) { global->Sound_NumChanInd = scanner->value.v_int; } else if (g_strcmp0(name,"snd_delay")==0) { global->Sound_delay = scanner->value.v_int64; } else if (g_strcmp0(name,"aud_codec")==0) { global->AudCodec = scanner->value.v_int; global->Sound_Format = get_aud4cc(global->AudCodec); } else if (g_strcmp0(name,"frame_flags")==0) { global->Frame_Flags = scanner->value.v_int; } else if (g_strcmp0(name,"osd_flags")==0) { global->osdFlags = scanner->value.v_int; } else if (g_strcmp0(name,"image_inc")==0) { global->image_inc = (DWORD) scanner->value.v_int; } else if (g_strcmp0(name,"acodec_bit_rate")==0) { ac_bit_rate = scanner->value.v_int; } else if (g_strcmp0(name,"vcodec_bit_rate")==0) { vc_bit_rate = scanner->value.v_int; } else if (g_strcmp0(name,"vcodec_fps")==0) { vc_fps = scanner->value.v_int; } else if (g_strcmp0(name,"vcodec_monotonic_pts")==0) { vc_monotonic_pts = scanner->value.v_int; } else if (g_strcmp0(name,"vcodec_qmax")==0) { vc_qmax = scanner->value.v_int; } else if (g_strcmp0(name,"vcodec_qmin")==0) { vc_qmin = scanner->value.v_int; } else if (g_strcmp0(name,"vcodec_max_qdiff")==0) { vc_max_qdiff = scanner->value.v_int; } else if (g_strcmp0(name,"vcodec_dia")==0) { vc_dia = scanner->value.v_int; } else if (g_strcmp0(name,"vcodec_pre_dia")==0) { vc_pre_dia = scanner->value.v_int; } else if (g_strcmp0(name,"vcodec_pre_me")==0) { vc_pre_me= scanner->value.v_int; } else if (g_strcmp0(name,"vcodec_me_pre_cmp")==0) { vc_me_pre_cmp = scanner->value.v_int; } else if (g_strcmp0(name,"vcodec_me_cmp")==0) { vc_me_cmp = scanner->value.v_int; } else if (g_strcmp0(name,"vcodec_me_sub_cmp")==0) { vc_me_sub_cmp = scanner->value.v_int; } else if (g_strcmp0(name,"vcodec_last_pred")==0) { vc_last_pred = scanner->value.v_int; } else if (g_strcmp0(name,"vcodec_gop_size")==0) { vc_gop_size = scanner->value.v_int; } else if (g_strcmp0(name,"vcodec_subq")==0) { vc_subq = scanner->value.v_int; } else if (g_strcmp0(name,"vcodec_framerefs")==0) { vc_framerefs = scanner->value.v_int; } else if (g_strcmp0(name,"vcodec_mb_decision")==0) { vc_mb_decision = scanner->value.v_int; } else if (g_strcmp0(name,"vcodec_trellis")==0) { vc_trellis = scanner->value.v_int; } else if (g_strcmp0(name,"vcodec_me_method")==0) { vc_me_method = scanner->value.v_int; } else if (g_strcmp0(name,"vcodec_mpeg_quant")==0) { vc_mpeg_quant = scanner->value.v_int; } else if (g_strcmp0(name,"vcodec_max_b_frames")==0) { vc_max_b_frames = scanner->value.v_int; } else if (g_strcmp0(name,"vcodec_flags")==0) { vc_flags = scanner->value.v_int; } else if (g_strcmp0(name,"vcodec_num_threads")==0) { vc_num_threads = scanner->value.v_int; } else { printf("unexpected integer value (%lu) for %s\n", scanner->value.v_int, name); printf("Strings must be quoted\n"); } } else if (ttype==G_TOKEN_FLOAT) { if (g_strcmp0(name,"vcodec_qcompress")==0) { vc_qcompress = scanner->value.v_float; } else if (g_strcmp0(name,"vcodec_qblur")==0) { vc_qblur = scanner->value.v_float; } else printf("unexpected float value (%f) for %s\n", scanner->value.v_float, name); } else if (ttype==G_TOKEN_CHAR) { printf("unexpected char value (%c) for %s\n", scanner->value.v_char, name); } else { g_scanner_unexp_token (scanner, G_TOKEN_NONE, NULL, NULL, NULL, "string values must be quoted - skiping", FALSE); int line = g_scanner_cur_line (scanner); int stp=0; do { ttype = g_scanner_peek_next_token (scanner); if(scanner->next_line > line) { //printf("next line reached\n"); stp=1; break; } else { ttype = g_scanner_get_next_token (scanner); } } while (!stp); } } g_free(name); } } g_scanner_destroy (scanner); close (fd); //get pointers to codec properties vcodecs_data *vcodec_defaults = get_codec_defaults(global->VidCodec); acodecs_data *acodec_defaults = get_aud_codec_defaults(get_ind_by4cc(global->Sound_Format)); if (ac_bit_rate >= 0) acodec_defaults->bit_rate = ac_bit_rate; if (vc_bit_rate >= 0) vcodec_defaults->bit_rate = vc_bit_rate; if (vc_fps >= 0) vcodec_defaults->fps = vc_fps; //from 1.5.3 onwards we set version on conf file and monotonic is set by default for all codecs if ((vc_monotonic_pts >= 0) && (VMAJOR > 0)) vcodec_defaults->monotonic_pts = vc_monotonic_pts; if (vc_qmax >= 0) vcodec_defaults->qmax = vc_qmax; if (vc_qmin >= 0) vcodec_defaults->qmin = vc_qmin; if (vc_max_qdiff >=0) vcodec_defaults->max_qdiff = vc_max_qdiff; if (vc_dia >=0) vcodec_defaults->dia = vc_dia; if (vc_pre_dia >=0) vcodec_defaults->pre_dia = vc_pre_dia; if (vc_pre_me >=0) vcodec_defaults->pre_me = vc_pre_me; if (vc_me_pre_cmp >=0) vcodec_defaults->me_pre_cmp = vc_me_pre_cmp; if (vc_me_cmp >=0) vcodec_defaults->me_cmp = vc_me_cmp; if (vc_me_sub_cmp >=0) vcodec_defaults->me_sub_cmp = vc_me_sub_cmp; if (vc_last_pred >= 0) vcodec_defaults->last_pred = vc_last_pred; if (vc_gop_size >= 0) vcodec_defaults->gop_size = vc_gop_size; if (vc_subq >=0) vcodec_defaults->subq = vc_subq; if (vc_framerefs >=0) vcodec_defaults->framerefs = vc_framerefs; if (vc_mb_decision >=0) vcodec_defaults->mb_decision = vc_mb_decision; if (vc_trellis >=0) vcodec_defaults->trellis = vc_trellis; if (vc_me_method >=0) vcodec_defaults->me_method = vc_me_method; if (vc_mpeg_quant >=0) vcodec_defaults->mpeg_quant = vc_mpeg_quant; if (vc_max_b_frames >=0) vcodec_defaults->max_b_frames = vc_max_b_frames; if (vc_num_threads >=0) vcodec_defaults->num_threads = vc_num_threads; if (vc_flags >=0) vcodec_defaults->flags = vc_flags; if (vc_qcompress >= 0) vcodec_defaults->qcompress = vc_qcompress; if (vc_qblur >=0) vcodec_defaults->qblur = vc_qblur; if(global->vid_inc>0) { uint64_t suffix = get_file_suffix(global->vidFPath[1], global->vidFPath[0]); fprintf(stderr, "Video file suffix detected: %" PRIu64 "\n", suffix); if(suffix >= G_MAXUINT64) { global->vidFPath[0] = add_file_suffix(global->vidFPath[0], suffix); suffix = 0; } if(suffix > 0) global->vid_inc = suffix + 1; } if(global->image_inc>0) { uint64_t suffix = get_file_suffix(global->imgFPath[1], global->imgFPath[0]); fprintf(stderr, "Image file suffix detected: %" PRIu64 "\n", suffix); if(suffix >= G_MAXUINT64) { global->imgFPath[0] = add_file_suffix(global->imgFPath[0], suffix); suffix = 0; } if(suffix > 0) global->image_inc = suffix + 1; } if (global->debug) { g_print("video_device: %s\n",global->videodevice); g_print("vid_sleep: %i\n",global->vid_sleep); g_print("cap_meth: %i\n",global->cap_meth); g_print("resolution: %i x %i\n",global->width,global->height); g_print("windowsize: %i x %i\n",global->winwidth,global->winheight); g_print("spin behavior: %i\n",global->spinbehave); g_print("default action: %i\n",global->default_action); g_print("mode: %s\n",global->mode); g_print("fps: %i/%i\n",global->fps_num,global->fps); g_print("Display Fps: %i\n",global->FpsCount); g_print("bpp: %i\n",global->bpp); g_print("hwaccel: %i\n",global->hwaccel); g_print("avi_format: %i\n",global->VidCodec); g_print("sound: %i\n",global->Sound_enable); g_print("sound Device: %i\n",global->Sound_UseDev); g_print("sound samp rate: %i\n",global->Sound_SampRateInd); g_print("sound Channels: %i\n",global->Sound_NumChanInd); g_print("Sound delay: %llu nanosec\n",(unsigned long long) global->Sound_delay); g_print("Sound Format: %i \n",global->Sound_Format); g_print("Pan Step: %i degrees\n",global->PanStep); g_print("Tilt Step: %i degrees\n",global->TiltStep); g_print("Video Filter Flags: %i\n",global->Frame_Flags); g_print("image inc: %" PRIu64 "\n",global->image_inc); g_print("profile(default):%s/%s\n",global->profile_FPath[1],global->profile_FPath[0]); } } return (ret); } /*------------------------- read command line options ------------------------*/ void readOpts(int argc,char *argv[], struct GLOBAL *global) { gchar *device=NULL; gchar *format=NULL; gchar *size = NULL; gchar *image = NULL; gchar *video=NULL; gchar *profile=NULL; gchar *separateur=NULL; gboolean help = FALSE; gboolean help_gtk = FALSE; gboolean help_all = FALSE; gboolean vers = FALSE; gchar *help_str = NULL; gchar *help_gtk_str = NULL; gchar *help_all_str = NULL; gchar *config = NULL; int hwaccel=-1; int FpsCount=-1; int cap_meth=-1; GOptionEntry entries[] = { { "help-all", 'h', G_OPTION_FLAG_HIDDEN, G_OPTION_ARG_NONE, &help_all, "Display all help options", NULL}, { "help-gtk", '!', G_OPTION_FLAG_HIDDEN, G_OPTION_ARG_NONE, &help_gtk, "DISPLAY GTK+ help", NULL}, { "help", '?', G_OPTION_FLAG_HIDDEN, G_OPTION_ARG_NONE, &help, "Display help", NULL}, { "version", 0, 0, G_OPTION_ARG_NONE, &vers, N_("Prints version"), NULL}, { "verbose", 'v', 0, G_OPTION_ARG_NONE, &global->debug, N_("Displays debug information"), NULL }, { "device", 'd', 0, G_OPTION_ARG_STRING, &device, N_("Video Device to use [default: /dev/video0]"), "VIDEO_DEVICE" }, { "add_ctrls", 'a', 0, G_OPTION_ARG_NONE, &global->add_ctrls, N_("Exit after adding UVC extension controls (needs root/sudo)"), NULL}, { "control_only", 'o', 0, G_OPTION_ARG_NONE, &global->control_only, N_("Don't stream video (image controls only)"), NULL}, { "no_display", 0,0, G_OPTION_ARG_NONE, &global->no_display, N_("Don't display a GUI"), NULL}, { "capture_method", 'r', 0, G_OPTION_ARG_INT, &cap_meth, N_("Capture method (1-mmap (default) 2-read)"), "[1 | 2]"}, { "config", 'g', 0, G_OPTION_ARG_STRING, &config, N_("Configuration file"), "FILENAME" }, { "hwd_acel", 'w', 0, G_OPTION_ARG_INT, &hwaccel, N_("Hardware accelaration (enable(1) | disable(0))"), "[1 | 0]" }, { "format", 'f', 0, G_OPTION_ARG_STRING, &format, N_("Pixel format(mjpg|jpeg|yuyv|yvyu|uyvy|yyuv|yu12|yv12|nv12|nv21|nv16|nv61|y41p|grey|y10b|y16 |s501|s505|s508|gbrg|grbg|ba81|rggb|bgr3|rgb3)"), "FORMAT" }, { "size", 's', 0, G_OPTION_ARG_STRING, &size, N_("Frame size, default: 640x480"), "WIDTHxHEIGHT"}, { "image", 'i', 0, G_OPTION_ARG_STRING, &image, N_("Image File name"), "FILENAME"}, { "cap_time", 'c', 0, G_OPTION_ARG_INT, &global->image_timer, N_("Image capture interval in seconds"), "TIME"}, { "npics", 'm', 0, G_OPTION_ARG_INT, &global->image_npics, N_("Number of Pictures to capture"), "NUMPIC"}, { "video", 'n', 0, G_OPTION_ARG_STRING, &video, N_("Video File name (capture from start)"), "FILENAME"}, { "vid_time", 't', 0, G_OPTION_ARG_INT, &global->Capture_time,N_("Video capture time (in seconds)"), "TIME"}, { "exit_on_close", 0, 0, G_OPTION_ARG_NONE, &global->exit_on_close, N_("Exits guvcview after closing video"), NULL}, { "skip", 'j', 0, G_OPTION_ARG_INT, &global->skip_n, N_("Number of initial frames to skip"), "N_FRAMES"}, { "show_fps", 'p', 0, G_OPTION_ARG_INT, &FpsCount, N_("Show FPS value (enable(1) | disable (0))"), "[1 | 0]"}, { "profile", 'l', 0, G_OPTION_ARG_STRING, &profile, N_("Load Profile at start"), "FILENAME"}, { NULL } }; GError *error = NULL; GOptionContext *context; context = g_option_context_new (N_("- local options")); g_option_context_add_main_entries (context, entries, GETTEXT_PACKAGE); g_option_context_add_group (context, gtk_get_option_group (TRUE)); g_set_prgname (PACKAGE); help_str = g_option_context_get_help (context, TRUE, NULL); help_gtk_str = g_option_context_get_help (context, FALSE, gtk_get_option_group (TRUE)); help_all_str = g_option_context_get_help (context, FALSE, NULL); /*disable automatic help parsing - must clean global before exit*/ g_option_context_set_help_enabled (context, FALSE); if (!g_option_context_parse (context, &argc, &argv, &error)) { g_printerr ("option parsing failed: %s\n", error->message); g_error_free ( error ); closeGlobals(global); global=NULL; g_print("%s",help_all_str); g_free(help_all_str); g_free(help_str); g_free(help_gtk_str); g_option_context_free (context); exit (1); } if(vers) { //print version and exit //version already printed in guvcview.c closeGlobals(global); global=NULL; g_free(help_all_str); g_free(help_str); g_free(help_gtk_str); g_option_context_free (context); exit(0); } /*Display help message and exit*/ if(help_all) { closeGlobals(global); global=NULL; g_print("%s",help_all_str); g_free(help_all_str); g_free(help_str); g_free(help_gtk_str); g_option_context_free (context); exit(0); } else if(help) { closeGlobals(global); global=NULL; g_print("%s",help_str); g_free(help_str); g_free(help_gtk_str); g_free(help_all_str); g_option_context_free (context); exit(0); } else if(help_gtk) { closeGlobals(global); global=NULL; g_print("%s",help_gtk_str); g_free(help_str); g_free(help_gtk_str); g_free(help_all_str); g_option_context_free (context); exit(0); } /*regular options*/ if(device) { gchar *basename = NULL; gchar *dirname = NULL; basename = g_path_get_basename(device); if(!(g_str_has_prefix(basename,"video"))) { g_printerr("%s not a valid video device name\n", basename); } else { g_free(global->videodevice); global->videodevice=NULL; dirname = g_path_get_dirname(device); if(g_strcmp0(".",dirname)==0) { g_free(dirname); dirname=g_strdup("/dev"); } global->videodevice = g_strjoin("/", dirname, basename, NULL); if(global->flg_config < 1) { if(g_strcmp0("video0",basename) !=0 ) { g_free(global->confPath); global->confPath=NULL; global->confPath = g_strjoin("/", g_get_home_dir(), ".config", "guvcview", basename, NULL); } } } g_free(dirname); g_free(basename); } if(config) { g_free(global->confPath); global->confPath=NULL; global->confPath = g_strdup(config); global->flg_config = 1; } if(format) { /*use fourcc but keep compatability with luvcview*/ if(g_strcmp0("yuv",format)==0) g_snprintf(global->mode,5,"yuyv"); else if (g_strcmp0("bggr",format)==0) // be compatible with guvcview < 1.1.4 g_snprintf(global->mode,5,"ba81"); else g_snprintf(global->mode,5,"%s ",format); printf("requested format \"%s\" from command line\n", global->mode); global->flg_mode = TRUE; } if(size) { global->width = (int) g_ascii_strtoull(size, &separateur, 10); if (*separateur != 'x') { g_printerr("Error in size usage: -s[--size] WIDTHxHEIGHT \n"); } else { ++separateur; global->height = (int) g_ascii_strtoull(separateur, &separateur, 10); if (*separateur != 0) g_printerr("hmm.. don't like that!! trying this height \n"); } global->flg_res = 1; } if(image) { global->imgFPath=splitPath(image,global->imgFPath); /*get the file type*/ global->imgFormat = check_image_type(global->imgFPath[0]); global->flg_imgFPath = TRUE; if(global->image_inc>0) { uint64_t suffix = get_file_suffix(global->imgFPath[1], global->imgFPath[0]); fprintf(stderr, "Image file suffix detected: %" PRIu64 "\n", suffix); if(suffix >= G_MAXUINT64) { global->imgFPath[0] = add_file_suffix(global->imgFPath[0], suffix); suffix = 0; } if(suffix > 0) global->image_inc = suffix + 1; } } if(global->image_timer > 0 ) { g_print("capturing images every %i seconds\n",global->image_timer); } if(video) { global->vidFPath=splitPath(video, global->vidFPath); if(global->vid_inc>0) { uint64_t suffix = get_file_suffix(global->vidFPath[1], global->vidFPath[0]); fprintf(stderr, "Video file suffix detected: %" PRIu64 "\n", suffix); if(suffix >= G_MAXUINT64) { global->vidFPath[0] = add_file_suffix(global->vidFPath[0], suffix); suffix = 0; } if(suffix > 0) global->vid_inc = suffix + 1; } global->vidfile = joinPath(global->vidfile, global->vidFPath); g_print("capturing video: %s , from start\n",global->vidfile); /*get the file type*/ global->VidFormat = check_video_type(global->vidFPath[0]); } if(profile) { global->lprofile=1; global->profile_FPath=splitPath(profile,global->profile_FPath); } if(hwaccel != -1 ) { global->hwaccel = hwaccel; global->flg_hwaccel = 1; } if(FpsCount != -1) { global->FpsCount = FpsCount; global->flg_FpsCount = 1; } if(cap_meth != -1) { global->flg_cap_meth = TRUE; global->cap_meth = cap_meth; } //g_print("option capture meth is %i\n", global->cap_meth); g_free(help_str); g_free(help_gtk_str); g_free(help_all_str); g_free(device); g_free(config); g_free(format); g_free(size); g_free(image); g_free(video); g_free(profile); g_option_context_free (context); } guvcview-src-1.7.1/src/v4l2_dyna_ctrls.c0000664000175000017500000001733512173235416017151 0ustar paulopaulo/*******************************************************************************# # guvcview http://guvcview.sourceforge.net # # # # Paulo Assis # # # # 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # # ********************************************************************************/ #include #include #include /* support for internationalization - i18n */ #include #include #include "v4l2uvc.h" #include "v4l2_controls.h" #include "v4l2_dyna_ctrls.h" /* some Logitech webcams have pan/tilt/focus controls */ #define LENGTH_OF_XU_CTR (6) #define LENGTH_OF_XU_MAP (10) /* static struct uvc_xu_control_info xu_ctrls[] = { { .entity = UVC_GUID_LOGITECH_MOTOR_CONTROL, .selector = XU_MOTORCONTROL_PANTILT_RELATIVE, .index = 0, .size = 4, .flags = UVC_CONTROL_SET_CUR | UVC_CONTROL_GET_MIN | UVC_CONTROL_GET_MAX | UVC_CONTROL_GET_DEF | UVC_CONTROL_AUTO_UPDATE }, { .entity = UVC_GUID_LOGITECH_MOTOR_CONTROL, .selector = XU_MOTORCONTROL_PANTILT_RESET, .index = 1, .size = 1, .flags = UVC_CONTROL_SET_CUR | UVC_CONTROL_GET_MIN | UVC_CONTROL_GET_MAX | UVC_CONTROL_GET_RES | UVC_CONTROL_GET_DEF | UVC_CONTROL_AUTO_UPDATE }, { .entity = UVC_GUID_LOGITECH_MOTOR_CONTROL, .selector = XU_MOTORCONTROL_FOCUS, .index = 2, .size = 6, .flags = UVC_CONTROL_SET_CUR | UVC_CONTROL_GET_CUR | UVC_CONTROL_GET_MIN | UVC_CONTROL_GET_MAX |UVC_CONTROL_GET_DEF | UVC_CONTROL_AUTO_UPDATE }, { .entity = UVC_GUID_LOGITECH_VIDEO_PIPE, .selector = XU_COLOR_PROCESSING_DISABLE, .index = 4, .size = 1, .flags = UVC_CONTROL_SET_CUR | UVC_CONTROL_GET_CUR |UVC_CONTROL_GET_MIN | UVC_CONTROL_GET_MAX | UVC_CONTROL_GET_RES | UVC_CONTROL_GET_DEF | UVC_CONTROL_AUTO_UPDATE }, { .entity = UVC_GUID_LOGITECH_VIDEO_PIPE, .selector = XU_RAW_DATA_BITS_PER_PIXEL, .index = 7, .size = 1, .flags = UVC_CONTROL_SET_CUR | UVC_CONTROL_GET_CUR |UVC_CONTROL_GET_MIN | UVC_CONTROL_GET_MAX | UVC_CONTROL_GET_RES | UVC_CONTROL_GET_DEF | UVC_CONTROL_AUTO_UPDATE }, { .entity = UVC_GUID_LOGITECH_USER_HW_CONTROL, .selector = XU_HW_CONTROL_LED1, .index = 0, .size = 3, .flags = UVC_CONTROL_SET_CUR | UVC_CONTROL_GET_CUR |UVC_CONTROL_GET_MIN | UVC_CONTROL_GET_MAX | UVC_CONTROL_GET_RES | UVC_CONTROL_GET_DEF | UVC_CONTROL_AUTO_UPDATE }, }; */ static struct uvc_menu_info led_menu_entry[4] = {{0, "Off"}, {1, "On"}, {2, "Blinking"}, {3, "Auto"}}; /* mapping for Pan/Tilt/Focus */ static struct uvc_xu_control_mapping xu_mappings[] = { { .id = V4L2_CID_PAN_RELATIVE, .name = N_("Pan (relative)"), .entity = UVC_GUID_LOGITECH_MOTOR_CONTROL, .selector = XU_MOTORCONTROL_PANTILT_RELATIVE, .size = 16, .offset = 0, .v4l2_type = V4L2_CTRL_TYPE_INTEGER, .data_type = UVC_CTRL_DATA_TYPE_SIGNED, .menu_info = NULL, .menu_count = 0, .reserved = {0,0,0,0} }, { .id = V4L2_CID_TILT_RELATIVE, .name = N_("Tilt (relative)"), .entity = UVC_GUID_LOGITECH_MOTOR_CONTROL, .selector = XU_MOTORCONTROL_PANTILT_RELATIVE, .size = 16, .offset = 16, .v4l2_type = V4L2_CTRL_TYPE_INTEGER, .data_type = UVC_CTRL_DATA_TYPE_SIGNED, .menu_info = NULL, .menu_count = 0, .reserved = {0,0,0,0} }, { .id = V4L2_CID_PAN_RESET, .name = N_("Pan Reset"), .entity = UVC_GUID_LOGITECH_MOTOR_CONTROL, .selector = XU_MOTORCONTROL_PANTILT_RESET, .size = 1, .offset = 0, .v4l2_type = V4L2_CTRL_TYPE_BUTTON, .data_type = UVC_CTRL_DATA_TYPE_UNSIGNED, .menu_info = NULL, .menu_count = 0, .reserved = {0,0,0,0} }, { .id = V4L2_CID_TILT_RESET, .name = N_("Tilt Reset"), .entity = UVC_GUID_LOGITECH_MOTOR_CONTROL, .selector = XU_MOTORCONTROL_PANTILT_RESET, .size = 1, .offset = 1, .v4l2_type = V4L2_CTRL_TYPE_BUTTON, .data_type = UVC_CTRL_DATA_TYPE_UNSIGNED, .menu_info = NULL, .menu_count = 0, .reserved = {0,0,0,0} }, { .id = V4L2_CID_FOCUS_LOGITECH, .name = N_("Focus (absolute)"), .entity = UVC_GUID_LOGITECH_MOTOR_CONTROL, .selector = XU_MOTORCONTROL_FOCUS, .size = 8, .offset = 0, .v4l2_type = V4L2_CTRL_TYPE_INTEGER, .data_type = UVC_CTRL_DATA_TYPE_UNSIGNED, .menu_info = NULL, .menu_count = 0, .reserved = {0,0,0,0} }, { .id = V4L2_CID_LED1_MODE_LOGITECH, .name = N_("LED1 Mode"), .entity = UVC_GUID_LOGITECH_USER_HW_CONTROL, .selector = XU_HW_CONTROL_LED1, .size = 8, .offset = 0, .v4l2_type = V4L2_CTRL_TYPE_MENU, .data_type = UVC_CTRL_DATA_TYPE_UNSIGNED, .menu_info = led_menu_entry, .menu_count = 4, .reserved = {0,0,0,0} }, { .id = V4L2_CID_LED1_FREQUENCY_LOGITECH, .name = N_("LED1 Frequency"), .entity = UVC_GUID_LOGITECH_USER_HW_CONTROL, .selector = XU_HW_CONTROL_LED1, .size = 8, .offset = 16, .v4l2_type = V4L2_CTRL_TYPE_INTEGER, .data_type = UVC_CTRL_DATA_TYPE_UNSIGNED, .menu_info = NULL, .menu_count = 0, .reserved = {0,0,0,0} }, { .id = V4L2_CID_DISABLE_PROCESSING_LOGITECH, .name = N_("Disable video processing"), .entity = UVC_GUID_LOGITECH_VIDEO_PIPE, .selector = XU_COLOR_PROCESSING_DISABLE, .size = 8, .offset = 0, .v4l2_type = V4L2_CTRL_TYPE_BOOLEAN, .data_type = UVC_CTRL_DATA_TYPE_BOOLEAN, .menu_info = NULL, .menu_count = 0, .reserved = {0,0,0,0} }, { .id = V4L2_CID_RAW_BITS_PER_PIXEL_LOGITECH, .name = N_("Raw bits per pixel"), .entity = UVC_GUID_LOGITECH_VIDEO_PIPE, .selector = XU_RAW_DATA_BITS_PER_PIXEL, .size = 8, .offset = 0, .v4l2_type = V4L2_CTRL_TYPE_INTEGER, .data_type = UVC_CTRL_DATA_TYPE_UNSIGNED, .menu_info = NULL, .menu_count = 0, .reserved = {0,0,0,0} }, }; int initDynCtrls(int fd) { int i=0; int err=0; /* after adding the controls, add the mapping now */ for ( i=0; i # # # # 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # # ********************************************************************************/ #include #include #include #include "video_filters.h" #include "v4l2uvc.h" /* Flip YUYV frame - horizontal * args: * frame = pointer to frame buffer (yuyv format) * width = frame width * height= frame height * returns: void */ void yuyv_mirror (BYTE *frame, int width, int height) { int h=0; int w=0; int sizeline = width*2; /* 2 bytes per pixel*/ BYTE *pframe; pframe=frame; BYTE line[sizeline-1];/*line buffer*/ for (h=0; h < height; h++) { /*line iterator*/ for(w=sizeline-1; w > 0; w = w - 4) { /* pixel iterator */ line[w-1]=*pframe++; line[w-2]=*pframe++; line[w-3]=*pframe++; line[w]=*pframe++; } memcpy(frame+(h*sizeline), line, sizeline); /*copy reversed line to frame buffer*/ } } /* Invert YUV frame * args: * frame = pointer to frame buffer (yuyv format) * width = frame width * height= frame height * returns: void */ void yuyv_negative(BYTE* frame, int width, int height) { int size=width*height*2; int i=0; for(i=0; i < size; i++) frame[i] = ~frame[i]; } /* Flip YUV frame - vertical * args: * frame = pointer to frame buffer (yuyv format) * width = frame width * height= frame height * returns: void */ void yuyv_upturn(BYTE* frame, int width, int height) { int h=0; int sizeline = width*2; /* 2 bytes per pixel*/ //BYTE *pframe =frame; BYTE line1[sizeline-1];/*line1 buffer*/ BYTE line2[sizeline-1];/*line2 buffer*/ for (h=0; h < height/2; h++) { /*line iterator*/ memcpy(line1,frame+h*sizeline,sizeline); memcpy(line2,frame+(height-1-h)*sizeline,sizeline); memcpy(frame+h*sizeline, line2, sizeline); memcpy(frame+(height-1-h)*sizeline, line1, sizeline); } } /* monochromatic effect for YUYV frame * args: * frame = pointer to frame buffer (yuyv format) * width = frame width * height= frame height * returns: void */ void yuyv_monochrome(BYTE* frame, int width, int height) { int size=width*height*2; int i=0; for(i=0; i < size; i = i + 4) { /* keep Y - luma */ frame[i+1]=0x80;/*U - median (half the max value)=128*/ frame[i+3]=0x80;/*V - median (half the max value)=128*/ } } /*break image in little square pieces * args: * frame = pointer to frame buffer (yuyv format) * width = frame width * height = frame height * piece_size = multiple of 2 (we need at least 2 pixels to get the entire pixel information) * format = v4l2 pixel format */ void pieces(BYTE* frame, int width, int height, int piece_size ) { int numx = width / piece_size; int numy = height / piece_size; BYTE *piece = g_new0 (BYTE, (piece_size * piece_size * 2)); int i = 0, j = 0, row = 0, line = 0, column = 0, linep = 0, px = 0, py = 0; GRand* rand_= g_rand_new_with_seed(2); int rot = 0; for(j = 0; j < numy; j++) { row = j * piece_size; for(i = 0; i < numx; i++) { column = i * piece_size * 2; //get piece for(py = 0; py < piece_size; py++) { linep = py * piece_size * 2; line = (py + row) * width * 2; for(px=0 ; px < piece_size * 2; px++) { piece[px + linep] = frame[(px + column) + line]; } } /*rotate piece and copy it to frame*/ //rotation is random rot = g_rand_int_range(rand_, 0, 8); switch(rot) { case 0: // do nothing break; case 5: case 1: //mirror yuyv_mirror(piece, piece_size, piece_size); break; case 6: case 2: //upturn yuyv_upturn(piece, piece_size, piece_size); break; case 4: case 3://mirror upturn yuyv_upturn(piece, piece_size, piece_size); yuyv_mirror(piece, piece_size, piece_size); break; default: //do nothing break; } //write piece for(py = 0; py < piece_size; py++) { linep = py * piece_size * 2; line = (py + row) * width * 2; for(px=0 ; px < piece_size * 2; px++) { frame[(px + column) + line] = piece[px + linep]; } } } } g_free(piece); g_rand_free(rand_); } /*sets a trail of particles obtained from the image * args: * frame = pointer to frame buffer (yuyv format) * width = frame width * height = frame height * trail_size = trail size (in frames) * particle_size = maximum size in pixels - should be even (square - size x size) * particles = pointer to particles array (struct particle) */ struct particle* particles_effect(BYTE* frame, int width, int height, int trail_size, int particle_size, struct particle* particles) { int i,j,w,h = 0; int part_w = width>>7; int part_h = height>>6; int y_pos = 0; //luma position in the frame GRand* rand_= g_rand_new(); //allocation if (particles == NULL) { particles = g_new0(struct particle, trail_size * part_w * part_h); } struct particle* part = particles; struct particle* part1 = part; //move particles in trail for (i=trail_size; i > 1; i--) { part += (i - 1) * part_w * part_h; part1 += (i - 2) * part_w * part_h; for (j= 0; j < part_w * part_h; j++) { if(part1->decay > 0) { part->PX = part1->PX + g_rand_int_range(rand_, 0, 3); part->PY = part1->PY + g_rand_int_range(rand_, -4, 1); if(ODD(part->PX)) part->PX++; //make sure PX is allways even if((part->PX > (width-particle_size)) || (part->PY > (height-particle_size)) || (part->PX < 0) || (part->PY < 0)) { part->PX = 0; part->PY = 0; part->decay = 0; } else { part->decay = part1->decay - 1; } part->Y = part1->Y; part->U = part1->U; part->V = part1->V; part->size = part1->size; } else { part->decay = 0; } part++; part1++; } part = particles; //reset part1 = part; } part = particles; //reset //get particles from frame (one pixel per particle - make PX allways even) for(i=0; i < part_w * part_h; i++) { part->PX = g_rand_int_range(rand_, 2 * particle_size, width - 4 * particle_size); part->PY = g_rand_int_range(rand_, 2* particle_size, height - 4 * particle_size); if(ODD(part->PX)) part->PX++; y_pos = part->PX * 2 + (part->PY * width * 2); part->Y = frame[y_pos]; part->U = frame[y_pos +1]; part->V = frame[y_pos +3]; part->size = g_rand_int_range(rand_, 1, particle_size); if(ODD(part->size)) part->size++; part->decay = (float) trail_size; part->decay = (float) trail_size; part++; //next particle } part = particles; //reset int line = 0; float blend =0; float blend1 =0; //render particles to frame (expand pixel to particle size) for (i = 0; i < trail_size * part_w * part_h; i++) { if(part->decay > 0) { y_pos = part->PX * 2 + (part->PY * width * 2); blend = part->decay/trail_size; blend1= 1 -blend; for(h=0; h<(part->size); h++) { line = h * width * 2; for (w=0; w<(part->size)*2; w+=4) { frame[y_pos + w + line] = CLIP(part->Y*blend + frame[y_pos + w + line]*blend1); frame[(y_pos + w + 1) + line] = CLIP(part->U*blend + frame[(y_pos + w + 1) + line]*blend1); frame[(y_pos + w + 2) + line] = CLIP(part->Y*blend + frame[(y_pos + w + 2) + line]*blend1); frame[(y_pos + w + 3) + line] = CLIP(part->V*blend + frame[(y_pos + w + 3) + line]*blend1); } } } part++; } g_rand_free(rand_); return(particles); } /* * EffecTV - Realtime Digital Video Effector * Copyright (C) 2001-2006 FUKUCHI Kentaro * * VertigoTV - Alpha blending with zoomed and rotated images. * Copyright (C) 2001-2002 FUKUCHI Kentaro * * this effect was original done in rgb32 we change it it for yuyv */ //static struct dizzy_data* setParams(struct dizzy_data *dizzy, width, height) //{ // double vx, vy; // double t; // double x, y; // double dizz; // if(dizzy == NULL) // { // dizzy = g_new0(struct dizzy_data, 1); // } // dizz = sin(dizzy->phase) * 10 + sin(dizzy->phase*1.9+5) * 5; // // x = width / 2; // y = height / 2; // t = (x*x + y*y) * dizzy->zoomrate; // if(width > height) { // if(dizz >= 0) { // if(dizz > x) dizz = x; // vx = (x*(x-dizz) + y*y) / t; // } else { // if(dizz < -x) dizz = -x; // vx = (x*(x+dizz) + y*y) / t; // } // vy = (dizz*y) / t; // } else { // if(dizz >= 0) { // if(dizz > y) dizz = y; // vx = (x*x + y*(y-dizz)) / t; // } else { // if(dizz < -y) dizz = -y; // vx = (x*x + y*(y+dizz)) / t; // } // vy = (dizz*x) / t; // } // dizzy->dx = vx * 65536; // dizzy->dy = vy * 65536; // dizzy->sx = (-vx * x + vy * y + x + cos(phase*5) * 2) * 65536; // dizzy->sy = (-vx * y - vy * x + y + sin(phase*6) * 2) * 65536; // // dizzy->phase += dizzy->phase_increment; // if(dizzy->phase > 5700000) dizzy->phase = 0; // // return dizzy; //} //int dizzy_effect(BYTE *src, BYTE *dest, dizzy, width, height) //{ // BYTE *p; // BYTE v; // int x, y; // int ox, oy; // int i; // int video_area = width*height; // // dizzy = setParams(dizzy, width, height); // // p = dizzy->alt_buffer; // for(y=height; y>0; y--) { // ox = dizzy->sx; // oy = dizzy->sy; // for(x=width; x>0; x--) { // i = (oy>>16)*width + (ox>>16); // if(i<0) i = 0; // if(i>=video_area) i = video_area; // v = dizzy->current_buffer[i] & 0xfcfcff; // v = (v * 3) + ((*src++) & 0xfcfcff); // *p++ = (v>>2); // ox += dizzy->dx; // oy += dizzy->dy; // } // dizzy->sx -= dizzy->dy; // dizzy->sy += dizzy->dx; // } // // memcpy(dest, dizzy->alt_buffer, video_area*sizeof(BYTE)); // // p = dizzy->current_buffer; // dizzy->current_buffer = dizzy->alt_buffer; // dizzy->alt_buffer = p; // // return 0; //} guvcview-src-1.7.1/src/menubar.h0000664000175000017500000000362612173235416015574 0ustar paulopaulo/*******************************************************************************# # guvcview http://guvcview.sourceforge.net # # # # Paulo Assis # # Nobuhiro Iwamatsu # # Add UYVY color support(Macbook iSight) # # # # 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # # ********************************************************************************/ #ifndef MENUBAR_H #define MENUBAR_H #include "guvcview.h" GtkWidget *create_menu(struct ALL_DATA *all_data, int control_only); #endif guvcview-src-1.7.1/src/audio_effects.h0000664000175000017500000001146312173235416016741 0ustar paulopaulo/*******************************************************************************# # guvcview http://guvcview.sourceforge.net # # # # Paulo Assis # # # # 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # # ********************************************************************************/ #ifndef AUDIO_EFFECTS_H #define AUDIO_EFFECTS_H #include "sound.h" //----------- structs for effects (audio_effects.c)------------ //data for Butterworth filter (LP or HP) typedef struct _Filt_data { SAMPLE buff_in1[2]; SAMPLE buff_in2[2]; SAMPLE buff_out1[2]; SAMPLE buff_out2[2]; float c; float a1; float a2; float a3; float b1; float b2; } Filt_data; //data for Comb4 filter typedef struct _Comb4_data { int buff_size1; int buff_size2; int buff_size3; int buff_size4; SAMPLE *CombBuff10; // four parallel comb filters - first channel SAMPLE *CombBuff11; // four parallel comb filters - second channel SAMPLE *CombBuff20; // four parallel comb filters - first channel SAMPLE *CombBuff21; // four parallel comb filters - second channel SAMPLE *CombBuff30; // four parallel comb filters - first channel SAMPLE *CombBuff31; // four parallel comb filters - second channel SAMPLE *CombBuff40; // four parallel comb filters - first channel SAMPLE *CombBuff41; // four parallel comb filters - second channel int CombIndex1; //comb filter 1 index int CombIndex2; //comb filter 2 index int CombIndex3; //comb filter 3 index int CombIndex4; //comb filter 4 index } Comb4_data; // data for delay typedef struct _delay_data { int buff_size; SAMPLE *delayBuff1; // delay buffer 1 - first channel SAMPLE *delayBuff2; // delay buffer 2 - second channel (stereo) int delayIndex; // delay buffer index } delay_data; // data for WahWah effect typedef struct _WAHData { float lfoskip; unsigned long skipcount; float xn1; float xn2; float yn1; float yn2; float b0; float b1; float b2; float a0; float a1; float a2; float phase; } WAHData; typedef struct _TSD_data { float tempo; } TSD_data; typedef struct _RATE_data { SAMPLE *rBuff1; SAMPLE *rBuff2; SAMPLE *wBuff1; SAMPLE *wBuff2; int wSize; int numsamples; } RATE_data; struct audio_effects { delay_data *ECHO; delay_data *AP1; Comb4_data *COMB4; Filt_data *HPF; Filt_data *LPF1; RATE_data *RT1; WAHData* wahData; }; void Echo(struct paRecordData* data, AudBuff *proc_buff, struct audio_effects *aud_eff, int delay_ms, float decay); void Fuzz (struct paRecordData* data, AudBuff *proc_buff, struct audio_effects *aud_eff); void Reverb (struct paRecordData* data, AudBuff *proc_buff, struct audio_effects *aud_eff, int delay_ms); /* Parameters: freq - LFO frequency (1.5) startphase - LFO startphase in RADIANS - usefull for stereo WahWah (0) depth - Wah depth (0.7) freqofs - Wah frequency offset (0.3) res - Resonance (2.5) !!!!!!!!!!!!! IMPORTANT!!!!!!!!! : depth and freqofs should be from 0(min) to 1(max) ! res should be greater than 0 ! */ void WahWah (struct paRecordData* data, AudBuff *proc_buff, struct audio_effects *aud_eff, float freq, float startphase, float depth, float freqofs, float res); void change_pitch (struct paRecordData* data, AudBuff *proc_buff, struct audio_effects *aud_eff, int rate); struct audio_effects* init_audio_effects (void); void close_DELAY(delay_data *DELAY); void close_FILT(Filt_data *FILT); void close_WAHWAH(WAHData *wahData); void close_REVERB(struct audio_effects *aud_eff); void close_pitch (struct audio_effects *aud_eff); void close_audio_effects(struct audio_effects *aud_eff); #endif guvcview-src-1.7.1/src/img_controls.c0000664000175000017500000001434012173235416016630 0ustar paulopaulo/*******************************************************************************# # guvcview http://guvcview.sourceforge.net # # # # Paulo Assis # # Nobuhiro Iwamatsu # # Add UYVY color support(Macbook iSight) # # # # 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # # ********************************************************************************/ /* support for internationalization - i18n */ #include #include #include #include #include "img_controls.h" #include "v4l2uvc.h" #include "v4l2_controls.h" #include "v4l2_dyna_ctrls.h" #include "globals.h" #include "string_utils.h" #include "autofocus.h" #include "callbacks.h" /*exposure menu for old type controls */ // static const char *exp_typ[]={ // "Manual Mode", // "Auto Mode", // "Shutter Priority Mode", // "Aperture Priority Mode" // }; /*--------------------------- draw camera controls ---------------------------*/ void draw_controls (struct ALL_DATA *all_data) { struct VidState *s = all_data->s; struct GLOBAL *global = all_data->global; struct vdIn *videoIn = all_data->videoIn; struct focusData *AFdata = all_data->AFdata; if (s->control_list) { free_control_list(s->control_list); } s->num_controls = 0; //get the control list s->control_list = get_control_list(videoIn->fd, &(s->num_controls)); if(!s->control_list) { printf("Error: empty control list\n"); return; } get_ctrl_values (videoIn->fd, s->control_list, s->num_controls, NULL); s->table = gtk_grid_new (); gtk_grid_set_column_homogeneous (GTK_GRID(s->table), FALSE); gtk_widget_set_hexpand (s->table, TRUE); gtk_widget_set_halign (s->table, GTK_ALIGN_FILL); gtk_grid_set_row_spacing (GTK_GRID(s->table), 4); gtk_grid_set_column_spacing (GTK_GRID (s->table), 4); gtk_container_set_border_width (GTK_CONTAINER (s->table), 2); //add control widgets to control list create_control_widgets(s->control_list, (void *) all_data, global->control_only, global->debug); int done = 0; int row=0; Control *current = s->control_list; Control *next = current->next; while(!done) { //add some flags if ((current->control.id == V4L2_CID_PAN_RELATIVE) || (current->control.id == V4L2_CID_TILT_RELATIVE)) { videoIn->PanTilt++; } //special cases (extra software controls) if (((current->control.id == V4L2_CID_FOCUS_ABSOLUTE) || (current->control.id == V4L2_CID_FOCUS_LOGITECH)) && !(global->control_only)) { global->AFcontrol=1; if(!AFdata) { AFdata = initFocusData(current->control.maximum, current->control.minimum, current->control.step, current->control.id); all_data->AFdata = AFdata; } if(!AFdata) global->AFcontrol = 0; else { GtkWidget *Focus_box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); GtkWidget *AutoFocus = gtk_check_button_new_with_label (_("Auto Focus (continuous)")); GtkWidget *FocusButton = gtk_button_new_with_label (_("set Focus")); gtk_box_pack_start (GTK_BOX (Focus_box), AutoFocus, TRUE, TRUE, 0); gtk_box_pack_start (GTK_BOX (Focus_box), FocusButton, TRUE, TRUE, 0); gtk_widget_show (Focus_box); gtk_widget_show (AutoFocus); gtk_widget_show (FocusButton); gtk_grid_attach(GTK_GRID(s->table), Focus_box, 1, row, 1, 1); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (AutoFocus), global->autofocus ? TRUE: FALSE); g_signal_connect (G_OBJECT (AutoFocus), "toggled", G_CALLBACK (autofocus_changed), all_data); g_signal_connect (G_OBJECT (FocusButton), "clicked", G_CALLBACK (setfocus_clicked), all_data); row++; /*increment control row*/ } } if(current->label) gtk_grid_attach(GTK_GRID(s->table), current->label, 0, row, 1 , 1); if(current->widget) { gtk_grid_attach(GTK_GRID(s->table), current->widget, 1, row, 1 , 1); gtk_widget_set_halign (current->widget, GTK_ALIGN_FILL); gtk_widget_set_hexpand (current->widget, TRUE); } if(current->spinbutton) gtk_grid_attach(GTK_GRID(s->table), current->spinbutton, 2, row, 1 , 1); if(next == NULL) done = 1; else { row++; current = next; next = current->next; } } /* try to start the video stream */ /* do it here (after all ioctls) since some cameras take */ /* a long time to initialize after this */ /* it's OK if it fails since it is retried in uvcGrab */ if(!global->control_only) video_enable(videoIn); s = NULL; global = NULL; videoIn = NULL; } guvcview-src-1.7.1/src/options.h0000664000175000017500000000414512173235416015633 0ustar paulopaulo/*******************************************************************************# # guvcview http://guvcview.sourceforge.net # # # # Paulo Assis # # # # 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # # ********************************************************************************/ #ifndef OPTIONS_H #define OPTIONS_H #include "globals.h" /*----------------------- write conf (.guvcviewrc) file ----------------------*/ int writeConf(struct GLOBAL *global, char *videodevice); /*----------------------- read conf (.guvcviewrc) file -----------------------*/ int readConf(struct GLOBAL *global); /*------------------------- read command line options ------------------------*/ void readOpts(int argc,char *argv[], struct GLOBAL *global); #endif guvcview-src-1.7.1/src/close.c0000664000175000017500000001272512173235416015243 0ustar paulopaulo/*******************************************************************************# # guvcview http://guvcview.sourceforge.net # # # # Paulo Assis # # Nobuhiro Iwamatsu # # Add UYVY color support(Macbook iSight) # # # # 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # # ********************************************************************************/ #include #include /* support for internationalization - i18n */ #include #include #include #include #include #include "v4l2uvc.h" #include "avilib.h" #include "globals.h" #include "sound.h" #include "jpgenc.h" #include "autofocus.h" #include "ms_time.h" #include "options.h" #include "video.h" #include "close.h" #define __AMUTEX &pdata->mutex #define __VMUTEX &videoIn->mutex /*-------------------------- clean up and shut down --------------------------*/ void clean_struct (struct ALL_DATA *all_data) { struct GWIDGET *gwidget = all_data->gwidget; struct VidState *s = all_data->s; struct paRecordData *pdata = all_data->pdata; struct GLOBAL *global = all_data->global; struct focusData *AFdata = all_data->AFdata; struct vdIn *videoIn = all_data->videoIn; struct VideoFormatData *videoF = all_data->videoF; gboolean control_only = (global->control_only || global->add_ctrls); if((!control_only) && (pdata != NULL)) { /*destroy mutex for sound buffers*/ if (global->debug) g_print("free audio mutex\n"); __CLOSE_MUTEX( __AMUTEX ); g_free(pdata); pdata=NULL; all_data->pdata=NULL; g_free(videoF); videoF=NULL; } if(videoIn) close_v4l2(videoIn, control_only); videoIn=NULL; if (global->debug) g_print("closed v4l2 strutures\n"); if (s->control_list) { free_control_list (s->control_list); s->control_list = NULL; g_print("free controls\n"); } g_free(s); s = NULL; all_data->s = NULL; g_free(gwidget); gwidget = NULL; all_data->gwidget = NULL; if (global->debug) g_print("free controls - vidState\n"); g_free(AFdata); AFdata = NULL; all_data->AFdata = NULL; if(global) closeGlobals(global); global=NULL; all_data->global=NULL; g_print("cleaned allocations - 100%%\n"); } void shutd (gint restart, struct ALL_DATA *all_data) { int exec_status=0; gchar videodevice[16]; struct GWIDGET *gwidget = all_data->gwidget; //gchar *EXEC_CALL = all_data->EXEC_CALL; //struct paRecordData *pdata = all_data->pdata; struct GLOBAL *global = all_data->global; struct vdIn *videoIn = all_data->videoIn; gboolean control_only = (global->control_only || global->add_ctrls); /* wait for the video thread */ if(!(control_only)) { if (global->debug) g_print("Shuting Down Thread\n"); __LOCK_MUTEX(__VMUTEX); videoIn->signalquit=TRUE; __UNLOCK_MUTEX(__VMUTEX); __THREAD_JOIN(all_data->video_thread); if (global->debug) g_print("Video Thread finished\n"); } /* destroys fps timer*/ if (global->timer_id > 0) g_source_remove(global->timer_id); /* destroys udev device event check timer*/ if (global->udev_timer_id > 0) g_source_remove(global->udev_timer_id); if(!global->no_display) { gtk_window_get_size(GTK_WINDOW(gwidget->mainwin),&(global->winwidth),&(global->winheight));//mainwin or widget } /*save configuration*/ writeConf(global, videoIn->videodevice); g_snprintf(videodevice, 15, "%s", global->videodevice); clean_struct(all_data); gwidget = NULL; //pdata = NULL; global = NULL; videoIn = NULL; //end gtk main loop gtk_main_quit(); if (restart==1) { //closing portaudio if(!control_only) { g_print("Closing portaudio ..."); if (Pa_Terminate() != paNoError) g_print("Error\n"); else g_print("OK\n"); } /* replace running process with new one */ g_print("Restarting: guvcview -d %s\n", videodevice); exec_status = execlp(g_get_prgname(), g_get_prgname(), "-d", videodevice, NULL); if(exec_status < 0) perror("ERROR restarting guvcview"); } //if we didn't restart return to main after gtk_main() and close portaudio there //this reduces chances for segfault caused by Pa_Terminate() [probable race condition] } guvcview-src-1.7.1/src/audio_tab.c0000775000175000017500000003653412173235416016074 0ustar paulopaulo/*******************************************************************************# # guvcview http://guvcview.sourceforge.net # # # # Paulo Assis # # Nobuhiro Iwamatsu # # Add UYVY color support(Macbook iSight) # # # # 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # # ********************************************************************************/ #include #include /* support for internationalization - i18n */ #include #include #include "globals.h" #include "callbacks.h" #include "v4l2uvc.h" #include "snd_devices.h" #include "acodecs.h" #include "../config.h" void audio_tab(struct ALL_DATA *all_data) { struct GLOBAL *global = all_data->global; struct GWIDGET *gwidget = all_data->gwidget; struct paRecordData *pdata = all_data->pdata; GtkWidget *table3; GtkWidget *scroll3; GtkWidget *Tab3; GtkWidget *Tab3Label; GtkWidget *Tab3Icon; GtkWidget *label_SndSampRate; GtkWidget *label_SndDevice; GtkWidget *label_SndNumChan; GtkWidget *label_audioFilters; GtkWidget *table_snd_eff; GtkWidget *EffEchoEnable; GtkWidget *EffFuzzEnable; GtkWidget* EffRevEnable; GtkWidget* EffWahEnable; GtkWidget* EffDuckyEnable; int line = 0; int i = 0; //TABLE table3 = gtk_grid_new(); gtk_grid_set_column_homogeneous (GTK_GRID(table3), FALSE); gtk_widget_set_hexpand (table3, TRUE); gtk_widget_set_halign (table3, GTK_ALIGN_FILL); gtk_grid_set_row_spacing (GTK_GRID(table3), 4); gtk_grid_set_column_spacing (GTK_GRID (table3), 4); gtk_container_set_border_width (GTK_CONTAINER (table3), 2); gtk_widget_show (table3); //SCROLL scroll3=gtk_scrolled_window_new(NULL,NULL); //ADD TABLE TO SCROLL gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scroll3),table3); gtk_scrolled_window_set_placement(GTK_SCROLLED_WINDOW(scroll3), GTK_CORNER_TOP_LEFT); gtk_widget_show(scroll3); //new grid for tab label and icon Tab3 = gtk_grid_new(); Tab3Label = gtk_label_new(_("Audio")); gtk_widget_show (Tab3Label); //check for files gchar* Tab3IconPath = g_strconcat (PACKAGE_DATA_DIR,"/pixmaps/guvcview/audio_controls.png",NULL); //don't test for file - use default empty image if load fails //get icon image Tab3Icon = gtk_image_new_from_file(Tab3IconPath); g_free(Tab3IconPath); gtk_widget_show (Tab3Icon); gtk_grid_attach (GTK_GRID(Tab3), Tab3Icon, 0, 0, 1, 1); gtk_grid_attach (GTK_GRID(Tab3), Tab3Label, 1, 0, 1, 1); gtk_widget_show (Tab3); //ADD SCROLL to NOTEBOOK (TAB) gtk_notebook_append_page(GTK_NOTEBOOK(gwidget->boxh),scroll3,Tab3); //--------------------- sound controls ------------------------------ //enable sound line++; gwidget->SndEnable=gtk_check_button_new_with_label (_(" Sound")); gtk_grid_attach(GTK_GRID(table3), gwidget->SndEnable, 1, line, 1, 1); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(gwidget->SndEnable), (global->Sound_enable > 0)); gtk_widget_show (gwidget->SndEnable); g_signal_connect (GTK_CHECK_BUTTON(gwidget->SndEnable), "toggled", G_CALLBACK (SndEnable_changed), all_data); line++; // VU meter on the image (OSD) GtkWidget* vuMeterEnable=gtk_check_button_new_with_label(_(" Show VU meter")); g_object_set_data(G_OBJECT(vuMeterEnable), "flag", GINT_TO_POINTER(OSD_METER)); gtk_grid_attach(GTK_GRID(table3), vuMeterEnable, 1, line, 1, 1); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(vuMeterEnable),(global->osdFlags & OSD_METER)>0); gtk_widget_show(vuMeterEnable); g_signal_connect(GTK_CHECK_BUTTON(vuMeterEnable), "toggled", G_CALLBACK(osdChanged), all_data); //sound API #ifdef PULSEAUDIO line++; gwidget->label_SndAPI = gtk_label_new(_("Audio API:")); gtk_misc_set_alignment (GTK_MISC (gwidget->label_SndAPI), 1, 0.5); gtk_grid_attach (GTK_GRID(table3), gwidget->label_SndAPI, 0, line, 1, 1); gtk_widget_show (gwidget->label_SndAPI); gwidget->SndAPI = gtk_combo_box_text_new (); gtk_widget_set_halign (gwidget->SndAPI, GTK_ALIGN_FILL); gtk_widget_set_hexpand (gwidget->SndAPI, TRUE); gtk_grid_attach(GTK_GRID(table3), gwidget->SndAPI, 1, line, 1, 1); gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(gwidget->SndAPI),_("PORTAUDIO")); gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(gwidget->SndAPI),_("PULSEAUDIO")); gtk_widget_show (gwidget->SndAPI); //default API - portaudio gtk_combo_box_set_active(GTK_COMBO_BOX(gwidget->SndAPI),global->Sound_API); //if(global->Sound_API > 0) global->Sound_UseDev=-1; //force default device gtk_widget_set_sensitive (gwidget->SndAPI, TRUE); g_signal_connect (GTK_COMBO_BOX_TEXT(gwidget->SndAPI), "changed", G_CALLBACK (SndAPI_changed), all_data); #endif //sound device line++; label_SndDevice = gtk_label_new(_("Input Device:")); gtk_misc_set_alignment (GTK_MISC (label_SndDevice), 1, 0.5); gtk_grid_attach (GTK_GRID(table3), label_SndDevice, 0, line, 1, 1); gtk_widget_show (label_SndDevice); // get sound device list and info gwidget->SndDevice = list_snd_devices (global); gtk_widget_set_halign (gwidget->SndDevice, GTK_ALIGN_FILL); gtk_widget_set_hexpand (gwidget->SndDevice, TRUE); gtk_grid_attach(GTK_GRID(table3), gwidget->SndDevice, 1, line, 1, 1); gtk_widget_show (gwidget->SndDevice); //using default device if(global->Sound_UseDev < 0) global->Sound_UseDev=global->Sound_DefDev; gtk_combo_box_set_active(GTK_COMBO_BOX(gwidget->SndDevice),global->Sound_UseDev); //disable if using pulse api //if (global->Sound_enable && !global->Sound_API) gtk_widget_set_sensitive (gwidget->SndDevice, TRUE); //else gtk_widget_set_sensitive (gwidget->SndDevice, FALSE); g_signal_connect (GTK_COMBO_BOX_TEXT(gwidget->SndDevice), "changed", G_CALLBACK (SndDevice_changed), all_data); label_SndDevice = gtk_label_new(_("Input Device:")); gtk_misc_set_alignment (GTK_MISC (label_SndDevice), 1, 0.5); gtk_grid_attach (GTK_GRID(table3), label_SndDevice, 0, line, 1, 1); gtk_widget_show (label_SndDevice); //sample rate line++; gwidget->SndSampleRate= gtk_combo_box_text_new (); gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(gwidget->SndSampleRate),_("Dev. Default")); for( i=1; stdSampleRates[i] > 0; i++ ) { char dst[8]; g_snprintf(dst,7,"%d",stdSampleRates[i]); gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(gwidget->SndSampleRate),dst); } if (global->Sound_SampRateInd>(i-1)) global->Sound_SampRateInd=0; /*out of range*/ gtk_widget_set_halign (gwidget->SndSampleRate, GTK_ALIGN_FILL); gtk_widget_set_hexpand (gwidget->SndSampleRate, TRUE); gtk_grid_attach(GTK_GRID(table3), gwidget->SndSampleRate, 1, line, 1, 1); gtk_widget_show (gwidget->SndSampleRate); global->Sound_SampRate=stdSampleRates[global->Sound_SampRateInd]; gtk_combo_box_set_active(GTK_COMBO_BOX(gwidget->SndSampleRate),global->Sound_SampRateInd); /*device default*/ if (global->Sound_enable) gtk_widget_set_sensitive (gwidget->SndSampleRate, TRUE); else gtk_widget_set_sensitive (gwidget->SndSampleRate, FALSE); g_signal_connect (GTK_COMBO_BOX_TEXT(gwidget->SndSampleRate), "changed", G_CALLBACK (SndSampleRate_changed), all_data); label_SndSampRate = gtk_label_new(_("Sample Rate:")); gtk_misc_set_alignment (GTK_MISC (label_SndSampRate), 1, 0.5); gtk_grid_attach (GTK_GRID(table3), label_SndSampRate, 0, line, 1, 1); gtk_widget_show (label_SndSampRate); //channels line++; gwidget->SndNumChan= gtk_combo_box_text_new (); gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(gwidget->SndNumChan),_("Dev. Default")); gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(gwidget->SndNumChan),_("1 - mono")); gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(gwidget->SndNumChan),_("2 - stereo")); gtk_widget_set_halign (gwidget->SndNumChan, GTK_ALIGN_FILL); gtk_widget_set_hexpand (gwidget->SndNumChan, TRUE); gtk_grid_attach(GTK_GRID(table3), gwidget->SndNumChan, 1, line, 1, 1); gtk_widget_show (gwidget->SndNumChan); switch (global->Sound_NumChanInd) { case 0: //device default gtk_combo_box_set_active(GTK_COMBO_BOX(gwidget->SndNumChan),0); break; case 1: //mono gtk_combo_box_set_active(GTK_COMBO_BOX(gwidget->SndNumChan),1); global->Sound_NumChan=1; break; case 2: //stereo gtk_combo_box_set_active(GTK_COMBO_BOX(gwidget->SndNumChan),2); global->Sound_NumChan=2; break; default: //set Default to NUM_CHANNELS global->Sound_NumChan=NUM_CHANNELS; break; } if (global->Sound_enable) gtk_widget_set_sensitive (gwidget->SndNumChan, TRUE); else gtk_widget_set_sensitive (gwidget->SndNumChan, FALSE); g_signal_connect (GTK_COMBO_BOX_TEXT(gwidget->SndNumChan), "changed", G_CALLBACK (SndNumChan_changed), all_data); label_SndNumChan = gtk_label_new(_("Channels:")); gtk_misc_set_alignment (GTK_MISC (label_SndNumChan), 1, 0.5); gtk_grid_attach (GTK_GRID(table3), label_SndNumChan, 0, line, 1, 1); gtk_widget_show (label_SndNumChan); if (global->debug) g_print("SampleRate:%d Channels:%d\n",global->Sound_SampRate,global->Sound_NumChan); /** sound format * this is now done in the video menu */ //line++; //gwidget->SndComp = gtk_combo_box_text_new (); /**sets to valid only existing codecs*/ //int num_codecs = setAcodecVal(); //int acodec_ind =0; //for (acodec_ind =0; acodec_ind < num_codecs; acodec_ind++) //{ // gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(gwidget->SndComp),gettext(get_aud_desc4cc(acodec_ind))); //} //gtk_combo_box_set_active(GTK_COMBO_BOX(gwidget->SndComp), global->AudCodec); //global->Sound_Format = get_aud4cc(global->AudCodec); /*sync index returned with format*/ //if (global->Sound_enable) gtk_widget_set_sensitive (gwidget->SndComp, TRUE); //g_signal_connect (GTK_COMBO_BOX_TEXT(gwidget->SndComp), "changed", // G_CALLBACK (SndComp_changed), all_data); //gtk_widget_set_halign (gwidget->SndComp, GTK_ALIGN_FILL); //gtk_widget_set_hexpand (gwidget->SndComp, TRUE); //gtk_grid_attach(GTK_GRID(table3), gwidget->SndComp, 1, line, 1, 1); //gtk_widget_show (gwidget->SndComp); //label_SndComp = gtk_label_new(_("Audio Format:")); //gtk_misc_set_alignment (GTK_MISC (label_SndComp), 1, 0.5); //gtk_grid_attach (GTK_GRID(table3), label_SndComp, 0, line, 1, 1); //gtk_widget_show (label_SndComp); /** lavc codec properties button * this is now done in the video menu */ //gwidget->lavc_aud_button = gtk_button_new_with_label (_("properties")); //gtk_grid_attach (GTK_GRID(table3), gwidget->lavc_aud_button, 2, line, 1, 1); //gtk_widget_show (gwidget->lavc_aud_button); //g_signal_connect (GTK_BUTTON(gwidget->lavc_aud_button), "clicked", // G_CALLBACK (lavc_audio_properties), all_data); //gtk_widget_set_sensitive (gwidget->lavc_aud_button, isLavcACodec(get_ind_by4cc(global->Sound_Format))); // Audio effects line++; label_audioFilters = gtk_label_new(_("---- Audio Effects ----")); gtk_misc_set_alignment (GTK_MISC (label_audioFilters), 0.5, 0.5); gtk_grid_attach (GTK_GRID(table3), label_audioFilters, 0, line, 3, 1); gtk_widget_show (label_audioFilters); line++; table_snd_eff = gtk_grid_new(); gtk_grid_set_row_spacing (GTK_GRID (table_snd_eff), 4); gtk_grid_set_column_spacing (GTK_GRID (table_snd_eff), 4); gtk_container_set_border_width (GTK_CONTAINER (table_snd_eff), 4); gtk_widget_set_size_request (table_snd_eff, -1, -1); gtk_widget_set_halign (table_snd_eff, GTK_ALIGN_FILL); gtk_widget_set_hexpand (table_snd_eff, TRUE); gtk_grid_attach (GTK_GRID(table3), table_snd_eff, 0, line, 3, 1); gtk_widget_show (table_snd_eff); // Echo EffEchoEnable=gtk_check_button_new_with_label (_(" Echo")); g_object_set_data (G_OBJECT (EffEchoEnable), "effect_info", GINT_TO_POINTER(SND_ECHO)); gtk_widget_set_halign (EffEchoEnable, GTK_ALIGN_FILL); gtk_widget_set_hexpand (EffEchoEnable, TRUE); gtk_grid_attach(GTK_GRID(table_snd_eff), EffEchoEnable, 0, 0, 1, 1); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(EffEchoEnable),(pdata->snd_Flags & SND_ECHO)>0); gtk_widget_show (EffEchoEnable); g_signal_connect (GTK_CHECK_BUTTON(EffEchoEnable), "toggled", G_CALLBACK (EffEnable_changed), all_data); // FUZZ EffFuzzEnable=gtk_check_button_new_with_label (_(" Fuzz")); g_object_set_data (G_OBJECT (EffFuzzEnable), "effect_info", GINT_TO_POINTER(SND_FUZZ)); gtk_widget_set_halign (EffFuzzEnable, GTK_ALIGN_FILL); gtk_widget_set_hexpand (EffFuzzEnable, TRUE); gtk_grid_attach(GTK_GRID(table_snd_eff), EffFuzzEnable, 1, 0, 1, 1); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(EffFuzzEnable),(pdata->snd_Flags & SND_FUZZ)>0); gtk_widget_show (EffFuzzEnable); g_signal_connect (GTK_CHECK_BUTTON(EffFuzzEnable), "toggled", G_CALLBACK (EffEnable_changed), all_data); // Reverb EffRevEnable=gtk_check_button_new_with_label (_(" Reverb")); g_object_set_data (G_OBJECT (EffRevEnable), "effect_info", GINT_TO_POINTER(SND_REVERB)); gtk_widget_set_halign (EffRevEnable, GTK_ALIGN_FILL); gtk_widget_set_hexpand (EffRevEnable, TRUE); gtk_grid_attach(GTK_GRID(table_snd_eff), EffRevEnable, 2, 0, 1, 1); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(EffRevEnable),(pdata->snd_Flags & SND_REVERB)>0); gtk_widget_show (EffRevEnable); g_signal_connect (GTK_CHECK_BUTTON(EffRevEnable), "toggled", G_CALLBACK (EffEnable_changed), all_data); // WahWah EffWahEnable=gtk_check_button_new_with_label (_(" WahWah")); g_object_set_data (G_OBJECT (EffWahEnable), "effect_info", GINT_TO_POINTER(SND_WAHWAH)); gtk_widget_set_halign (EffWahEnable, GTK_ALIGN_FILL); gtk_widget_set_hexpand (EffWahEnable, TRUE); gtk_grid_attach(GTK_GRID(table_snd_eff), EffWahEnable, 3, 0, 1, 1); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(EffWahEnable),(pdata->snd_Flags & SND_WAHWAH)>0); gtk_widget_show (EffWahEnable); g_signal_connect (GTK_CHECK_BUTTON(EffWahEnable), "toggled", G_CALLBACK (EffEnable_changed), all_data); // Ducky EffDuckyEnable=gtk_check_button_new_with_label (_(" Ducky")); g_object_set_data (G_OBJECT (EffDuckyEnable), "effect_info", GINT_TO_POINTER(SND_DUCKY)); gtk_widget_set_halign (EffDuckyEnable, GTK_ALIGN_FILL); gtk_widget_set_hexpand (EffDuckyEnable, TRUE); gtk_grid_attach(GTK_GRID(table_snd_eff), EffDuckyEnable, 4, 0, 1, 1); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(EffDuckyEnable),(pdata->snd_Flags & SND_DUCKY)>0); gtk_widget_show (EffDuckyEnable); g_signal_connect (GTK_CHECK_BUTTON(EffDuckyEnable), "toggled", G_CALLBACK (EffEnable_changed), all_data); } guvcview-src-1.7.1/src/Makefile.in0000664000175000017500000005413112173257653016043 0ustar paulopaulo# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : bin_PROGRAMS = guvcview$(EXEEXT) subdir = src DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/intltool.m4 \ $(top_srcdir)/m4/nls.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" PROGRAMS = $(bin_PROGRAMS) am_guvcview_OBJECTS = audio_effects.$(OBJEXT) audio_tab.$(OBJEXT) \ autofocus.$(OBJEXT) acodecs.$(OBJEXT) avilib.$(OBJEXT) \ callbacks.$(OBJEXT) close.$(OBJEXT) colorspaces.$(OBJEXT) \ create_video.$(OBJEXT) create_image.$(OBJEXT) dct.$(OBJEXT) \ file_io.$(OBJEXT) globals.$(OBJEXT) guvcview.$(OBJEXT) \ huffman.$(OBJEXT) img_controls.$(OBJEXT) \ image_format.$(OBJEXT) io_stream.$(OBJEXT) jpgenc.$(OBJEXT) \ lavc_common.$(OBJEXT) matroska.$(OBJEXT) marker.$(OBJEXT) \ menubar.$(OBJEXT) ms_time.$(OBJEXT) options.$(OBJEXT) \ osd.$(OBJEXT) picture.$(OBJEXT) profile.$(OBJEXT) \ port_audio.$(OBJEXT) pulse_audio.$(OBJEXT) quant.$(OBJEXT) \ readYUV.$(OBJEXT) sound.$(OBJEXT) snd_devices.$(OBJEXT) \ string_utils.$(OBJEXT) timers.$(OBJEXT) utils.$(OBJEXT) \ v4l2_controls.$(OBJEXT) v4l2_devices.$(OBJEXT) \ v4l2_dyna_ctrls.$(OBJEXT) v4l2_formats.$(OBJEXT) \ v4l2uvc.$(OBJEXT) vcodecs.$(OBJEXT) video.$(OBJEXT) \ video_filters.$(OBJEXT) video_format.$(OBJEXT) \ video_tab.$(OBJEXT) guvcview_OBJECTS = $(am_guvcview_OBJECTS) am__DEPENDENCIES_1 = guvcview_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) guvcview_LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(guvcview_LDFLAGS) \ $(LDFLAGS) -o $@ DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(guvcview_SOURCES) DIST_SOURCES = $(guvcview_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = -DLOCALEDIR=\"$(localedir)\" @DEFS@ DEPDIR = @DEPDIR@ DEPS_CFLAGS = @DEPS_CFLAGS@ DEPS_LIBS = @DEPS_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ PULSE_CFLAGS = @PULSE_CFLAGS@ PULSE_LIBS = @PULSE_LIBS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = $(datadir)/locale localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ EXTRA_CFLAGS = @PULSE_CFLAGS@ EXTRA_LIBS = @PULSE_LIBS@ INCLUDES = \ -DPACKAGE_LOCALE_DIR=\""$(prefix)/$(DATADIRNAME)/locale"\" \ -DPACKAGE_SRC_DIR=\""$(srcdir)"\" \ -DPACKAGE_DATA_DIR=\""$(datadir)"\" \ $(DEPS_CFLAGS) $(EXTRA_CFLAGS) $(PTHREAD_CFLAGS) AM_CFLAGS = \ -D_REENTRANT\ -D_FILE_OFFSET_BITS=64\ -Wall guvcview_SOURCES = \ audio_effects.h \ audio_effects.c \ audio_tab.h \ audio_tab.c \ autofocus.h \ autofocus.c \ acodecs.h \ acodecs.c \ avilib.c \ avilib.h \ callbacks.h \ callbacks.c \ close.h \ close.c \ colorspaces.h \ colorspaces.c \ create_video.h \ create_video.c \ create_image.h \ create_image.c \ dct.h \ dct.c \ defs.h \ file_io.h \ file_io.c \ globals.h \ globals.c \ guvcview.h \ guvcview.c \ huffman.h \ huffman.c \ img_controls.h \ img_controls.c \ image_format.h \ image_format.c\ io_stream.h \ io_stream.c \ jdatatype.h \ jpgenc.h \ jpgenc.c \ lavc_common.h \ lavc_common.c \ matroska.h \ matroska.c \ marker.c \ menubar.h \ menubar.c \ ms_time.h \ ms_time.c \ options.h \ options.c \ osd.h \ osd.c \ picture.h \ picture.c \ profile.h \ profile.c \ port_audio.h \ port_audio.c \ pulse_audio.h \ pulse_audio.c \ quant.c \ readYUV.c \ sound.h \ sound.c \ snd_devices.h \ snd_devices.c \ string_utils.h \ string_utils.c \ timers.h \ timers.c \ utils.h \ utils.c \ v4l2_controls.h \ v4l2_controls.c \ v4l2_devices.h \ v4l2_devices.c \ v4l2_dyna_ctrls.h \ v4l2_dyna_ctrls.c \ v4l2_formats.h \ v4l2_formats.c \ v4l2uvc.h \ v4l2uvc.c \ vcodecs.h \ vcodecs.c \ video.h \ video.c \ video_filters.h \ video_filters.c \ video_format.h \ video_format.c \ video_tab.h \ video_tab.c guvcview_LDFLAGS = $(LIBINTL) guvcview_LDADD = $(DEPS_LIBS) $(EXTRA_LIBS) $(PTHREAD_LIBS) all: all-am .SUFFIXES: .SUFFIXES: .c .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p; \ then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) guvcview$(EXEEXT): $(guvcview_OBJECTS) $(guvcview_DEPENDENCIES) $(EXTRA_guvcview_DEPENDENCIES) @rm -f guvcview$(EXEEXT) $(AM_V_CCLD)$(guvcview_LINK) $(guvcview_OBJECTS) $(guvcview_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/acodecs.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/audio_effects.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/audio_tab.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/autofocus.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/avilib.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/callbacks.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/close.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/colorspaces.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/create_image.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/create_video.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dct.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/file_io.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/globals.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/guvcview.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/huffman.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/image_format.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/img_controls.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/io_stream.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jpgenc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lavc_common.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/marker.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/matroska.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/menubar.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ms_time.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/options.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/osd.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/picture.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/port_audio.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/profile.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pulse_audio.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/quant.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/readYUV.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/snd_devices.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sound.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/string_utils.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/timers.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/utils.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/v4l2_controls.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/v4l2_devices.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/v4l2_dyna_ctrls.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/v4l2_formats.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/v4l2uvc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vcodecs.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/video.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/video_filters.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/video_format.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/video_tab.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'` ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) installdirs: for dir in "$(DESTDIR)$(bindir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-binPROGRAMS clean-generic mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binPROGRAMS install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \ clean-generic ctags distclean distclean-compile \ distclean-generic distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-binPROGRAMS \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \ uninstall-am uninstall-binPROGRAMS # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: guvcview-src-1.7.1/src/sound.h0000775000175000017500000001312212173235416015266 0ustar paulopaulo/*******************************************************************************# # guvcview http://guvcview.sourceforge.net # # # # Paulo Assis # # # # 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # # ********************************************************************************/ #ifndef SOUND_H #define SOUND_H #include #include #include "globals.h" #include "../config.h" #include "defs.h" /*------------- portaudio defs ----------------*/ /*---- can be override in rc file or GUI ------*/ #define DEFAULT_LATENCY_DURATION 100.0 #define DEFAULT_LATENCY_CORRECTION -130.0 #define SAMPLE_RATE (0) /* 0 device default*/ //#define FRAMES_PER_BUFFER (4096) /* sound can go for more 1 seconds than video */ #define NUM_CHANNELS (0) /* 0-device default 1-mono 2-stereo */ #define PA_SAMPLE_TYPE paFloat32 #define PA_FOURCC WAVE_FORMAT_PCM //use PCM 16 bits converted from float #define PULSE_SAMPLE_TYPE PA_SAMPLE_FLOAT32LE //for PCM -> PA_SAMPLE_S16LE #define SAMPLE_SILENCE (0.0f) #define MAX_SAMPLE (1.0f) #define PRINTF_S_FORMAT "%.8f" /*buffer flags*/ #define AUD_IN_USE 0 /* in use by interrupt handler*/ #define AUD_PROCESS 1 /* ready to process */ #define AUD_PROCESSING 2 /* processing */ #define AUD_PROCESSED 3 /* ready to write to disk */ #define AUD_READY 4 /* ready to re-use by interrupt handler*/ //API index #define PORT 0 #define PULSE 1 typedef struct _AudBuff { gboolean used; QWORD time_stamp; SAMPLE *frame; } AudBuff; // main audio interface struct struct paRecordData { int api; //0-Portaudio 1-pulse audio int input_type; // audio SAMPLE type unsigned long framesPerBuffer; //frames per buffer passed in audio callback char device_name[512]; //device name - for pulse int device_id; //device id - for portaudio int w_ind; // producer index int r_ind; // consumer index int bw_ind; // audio_buffer in_use index int br_ind; // audio_buffer processing int blast_ind; // last in_use index (for vu meter) int last_ind; // last producer index (for vu meter) int channels; // channels gboolean streaming; // audio streaming flag int flush; // flush mp2 buffer flag int samprate; // samp rate int numsec; // aprox. number of seconds for out buffer size int aud_numBytes; // bytes copied to out buffer*/ int aud_numSamples; // samples copied to out buffer*/ int64_t snd_begintime; // audio recording start time*/ int capVid; // video capture flag SAMPLE *recordedSamples; // callback buffer int sampleIndex; AudBuff *audio_buff[AUDBUFF_NUM];// ring buffers for audio data captured from device int audio_buff_flag[AUDBUFF_NUM];// process_buffer flags int64_t a_ts; // audio frame time stamp int64_t ts_ref; // timestamp video reference int64_t ts_drift; // time drift between audio device clock and system clock gint16 *pcm_sndBuff; // buffer for pcm coding with int16 float *float_sndBuff; // buffer for pcm coding with float BYTE *mp2Buff; // mp2 encode buffer int mp2BuffSize; // mp2 buffer size int snd_Flags; // effects flag int skip_n; // video frames to skip UINT64 delay; // in nanosec - h264 has a two frame delay that must be compensated int outbuf_size; //size of output buffer struct lavcAData* lavc_data; //libavcodec data __MUTEX_TYPE mutex; //PORTAUDIO SUPPORT void *stream; //PULSE SUPPORT #ifdef PULSEAUDIO __THREAD_TYPE pulse_read_th; /*The main loop context*/ //GMainContext *maincontext; #endif }; int record_sound ( const void *inputBuffer, unsigned long numSamples, void *userData ); int fill_audio_buffer(struct paRecordData *pdata, UINT64 ts); void set_sound (struct GLOBAL *global, struct paRecordData* data); int init_sound(struct paRecordData* data); int close_sound (struct paRecordData *data); void SampleConverter (struct paRecordData* data); #endif guvcview-src-1.7.1/src/timers.h0000664000175000017500000000437312173235416015446 0ustar paulopaulo/*******************************************************************************# # guvcview http://guvcview.sourceforge.net # # # # Paulo Assis # # # # 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # # ********************************************************************************/ #ifndef TIMERS_H #define TIMERS_H #include gboolean shutd_timer(gpointer data); gboolean timer_callback(gpointer data); gboolean Image_capture_timer(gpointer data); gboolean FpsCount_callback(gpointer data); /* * Not a timer callback * Regular function to determine if enought free space is available * returns TRUE if still enough free space left on disk * FALSE otherwise */ gboolean DiskSupervisor(gpointer data); /* called by video capture every 10 sec for checking disk free space*/ gboolean FreeDiskCheck_timer(gpointer data); /* check for udev events for v4l2 devices*/ gboolean check_v4l2_udev_events(gpointer data); #endif guvcview-src-1.7.1/src/audio_tab.h0000664000175000017500000000370612173235416016071 0ustar paulopaulo/*******************************************************************************# # guvcview http://guvcview.sourceforge.net # # # # Paulo Assis # # Nobuhiro Iwamatsu # # Add UYVY color support(Macbook iSight) # # # # 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # # ********************************************************************************/ #ifndef AUDIO_TAB_H #define AUDIO_TAB_H #include "guvcview.h" //------------------------- Audio Tab --------------------------------- void audio_tab(struct ALL_DATA *all_data); #endif guvcview-src-1.7.1/src/v4l2_formats.c0000664000175000017500000004067712173235416016467 0ustar paulopaulo/*******************************************************************************# # guvcview http://guvcview.sourceforge.net # # # # Paulo Assis # # Nobuhiro Iwamatsu # # # # 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # # ********************************************************************************/ #include #include #include #include #include #include #include "v4l2uvc.h" #include "v4l2_formats.h" #define SUP_PIX_FMT 25 //total number of software(guvcview) //supported formats (list size) static SupFormats listSupFormats[SUP_PIX_FMT] = //list of software supported formats { { .format = V4L2_PIX_FMT_MJPEG, .mode = "mjpg", .hardware = 0 //.decoder = decode_jpeg }, { .format = V4L2_PIX_FMT_JPEG, .mode ="jpeg", .hardware = 0 //.decoder = decode_jpeg }, { .format = V4L2_PIX_FMT_YUYV, .mode = "yuyv", .hardware = 0 }, { .format = V4L2_PIX_FMT_YVYU, .mode = "yvyu", .hardware = 0 }, { .format = V4L2_PIX_FMT_UYVY, .mode = "uyvy", .hardware = 0 }, { .format = V4L2_PIX_FMT_YYUV, .mode = "yyuv", .hardware = 0 }, { .format = V4L2_PIX_FMT_Y41P, .mode = "y41p", .hardware = 0 }, { .format = V4L2_PIX_FMT_GREY, .mode = "grey", .hardware = 0 }, { .format = V4L2_PIX_FMT_Y10BPACK, .mode = "y10b", .hardware = 0 }, { .format = V4L2_PIX_FMT_Y16, .mode = "y16 ", .hardware = 0 }, { .format = V4L2_PIX_FMT_YUV420, .mode = "yu12", .hardware = 0 }, { .format = V4L2_PIX_FMT_YVU420, .mode = "yv12", .hardware = 0 }, { .format = V4L2_PIX_FMT_NV12, .mode = "nv12", .hardware = 0 }, { .format = V4L2_PIX_FMT_NV21, .mode = "nv21", .hardware = 0 }, { .format = V4L2_PIX_FMT_NV16, .mode = "nv16", .hardware = 0 }, { .format = V4L2_PIX_FMT_NV61, .mode = "nv61", .hardware = 0 }, { .format = V4L2_PIX_FMT_SPCA501, .mode = "s501", .hardware = 0 }, { .format = V4L2_PIX_FMT_SPCA505, .mode = "s505", .hardware = 0 }, { .format = V4L2_PIX_FMT_SPCA508, .mode = "s508", .hardware = 0 }, { .format = V4L2_PIX_FMT_SGBRG8, .mode = "gbrg", .hardware = 0 }, { .format = V4L2_PIX_FMT_SGRBG8, .mode = "grbg", .hardware = 0 }, { .format = V4L2_PIX_FMT_SBGGR8, .mode = "ba81", .hardware = 0 }, { .format = V4L2_PIX_FMT_SRGGB8, .mode = "rggb", .hardware = 0 }, { .format = V4L2_PIX_FMT_RGB24, .mode = "rgb3", .hardware = 0 }, { .format = V4L2_PIX_FMT_BGR24, .mode = "bgr3", .hardware = 0 } }; /* check if format is supported by guvcview * args: * pixfmt: V4L2 pixel format * return index from supported devices list * or -1 if not supported */ int check_PixFormat(int pixfmt) { int i=0; for (i=0; i 0) return (i); /*supported by hardware*/ } } return (-1); } /* convert v4l2 pix format to mode (Fourcc) * args: * pixfmt: V4L2 pixel format * mode: fourcc string (lower case) * returns 1 on success * and -1 on failure (not supported) */ int get_PixMode(int pixfmt, char *mode) { int i=0; for (i=0; inumb_formats;i++) { if(format == listFormats->listVidFormats[i].format) return (i); } return (-1); } /* clean video formats list * args: * listFormats: struct containing list of available video formats * * returns: void */ void freeFormats(LFormats *listFormats) { int i=0; int j=0; for(i=0;inumb_formats;i++) { for(j=0;jlistVidFormats[i].numb_res;j++) { //g_free should handle NULL but we check it anyway if(listFormats->listVidFormats[i].listVidCap[j].framerate_num != NULL) g_free(listFormats->listVidFormats[i].listVidCap[j].framerate_num); if(listFormats->listVidFormats[i].listVidCap[j].framerate_denom != NULL) g_free(listFormats->listVidFormats[i].listVidCap[j].framerate_denom); } g_free(listFormats->listVidFormats[i].listVidCap); } g_free(listFormats->listVidFormats); g_free(listFormats); } /* enumerate frame intervals (fps) * args: * listVidFormats: array of VidFormats (list of video formats) * pixfmt: v4l2 pixel format that we want to list frame intervals for * width: video width that we want to list frame intervals for * height: video height that we want to list frame intervals for * fmtind: current index of format list * fsizeind: current index of frame size list * fd: device file descriptor * * returns 0 if enumeration succeded or errno otherwise */ static int enum_frame_intervals(VidFormats *listVidFormats, __u32 pixfmt, __u32 width, __u32 height, int fmtind, int fsizeind, int fd) { int ret=0; struct v4l2_frmivalenum fival; int list_fps=0; memset(&fival, 0, sizeof(fival)); fival.index = 0; fival.pixel_format = pixfmt; fival.width = width; fival.height = height; listVidFormats[fmtind-1].listVidCap[fsizeind-1].framerate_num=NULL; listVidFormats[fmtind-1].listVidCap[fsizeind-1].framerate_denom=NULL; g_print("\tTime interval between frame: "); while ((ret = xioctl(fd, VIDIOC_ENUM_FRAMEINTERVALS, &fival)) == 0) { fival.index++; if (fival.type == V4L2_FRMIVAL_TYPE_DISCRETE) { g_print("%u/%u, ", fival.discrete.numerator, fival.discrete.denominator); list_fps++; listVidFormats[fmtind-1].listVidCap[fsizeind-1].framerate_num = g_renew( int, listVidFormats[fmtind-1].listVidCap[fsizeind-1].framerate_num, list_fps); listVidFormats[fmtind-1].listVidCap[fsizeind-1].framerate_denom = g_renew( int, listVidFormats[fmtind-1].listVidCap[fsizeind-1].framerate_denom, list_fps); listVidFormats[fmtind-1].listVidCap[fsizeind-1].framerate_num[list_fps-1] = fival.discrete.numerator; listVidFormats[fmtind-1].listVidCap[fsizeind-1].framerate_denom[list_fps-1] = fival.discrete.denominator; } else if (fival.type == V4L2_FRMIVAL_TYPE_CONTINUOUS) { g_print("{min { %u/%u } .. max { %u/%u } }, ", fival.stepwise.min.numerator, fival.stepwise.min.numerator, fival.stepwise.max.denominator, fival.stepwise.max.denominator); break; } else if (fival.type == V4L2_FRMIVAL_TYPE_STEPWISE) { g_print("{min { %u/%u } .. max { %u/%u } / " "stepsize { %u/%u } }, ", fival.stepwise.min.numerator, fival.stepwise.min.denominator, fival.stepwise.max.numerator, fival.stepwise.max.denominator, fival.stepwise.step.numerator, fival.stepwise.step.denominator); break; } } if (list_fps==0) { listVidFormats[fmtind-1].listVidCap[fsizeind-1].numb_frates = 1; listVidFormats[fmtind-1].listVidCap[fsizeind-1].framerate_num = g_renew( int, listVidFormats[fmtind-1].listVidCap[fsizeind-1].framerate_num, 1); listVidFormats[fmtind-1].listVidCap[fsizeind-1].framerate_denom = g_renew( int, listVidFormats[fmtind-1].listVidCap[fsizeind-1].framerate_denom, 1); listVidFormats[fmtind-1].listVidCap[fsizeind-1].framerate_num[0] = 1; listVidFormats[fmtind-1].listVidCap[fsizeind-1].framerate_denom[0] = 1; } else listVidFormats[fmtind-1].listVidCap[fsizeind-1].numb_frates = list_fps; g_print("\n"); if (ret != 0 && errno != EINVAL) { perror("VIDIOC_ENUM_FRAMEINTERVALS - Error enumerating frame intervals"); return errno; } return 0; } /* enumerate frame sizes * args: * listVidFormats: array of VidFormats (list of video formats) * pixfmt: v4l2 pixel format that we want to list frame sizes for * fmtind: format list current index * width: pointer to integer containing the selected video width * height: pointer to integer containing the selected video height * fd: device file descriptor * * returns 0 if enumeration succeded or errno otherwise */ static int enum_frame_sizes(VidFormats *listVidFormats, __u32 pixfmt, int fmtind, int *width, int *height, int fd) { int ret=0; int fsizeind=0; /*index for supported sizes*/ listVidFormats[fmtind-1].listVidCap = NULL; struct v4l2_frmsizeenum fsize; memset(&fsize, 0, sizeof(fsize)); fsize.index = 0; fsize.pixel_format = pixfmt; while ((ret = xioctl(fd, VIDIOC_ENUM_FRAMESIZES, &fsize)) == 0) { fsize.index++; if (fsize.type == V4L2_FRMSIZE_TYPE_DISCRETE) { g_print("{ discrete: width = %u, height = %u }\n", fsize.discrete.width, fsize.discrete.height); fsizeind++; listVidFormats[fmtind-1].listVidCap = g_renew(VidCap, listVidFormats[fmtind-1].listVidCap, fsizeind); listVidFormats[fmtind-1].listVidCap[fsizeind-1].width = fsize.discrete.width; listVidFormats[fmtind-1].listVidCap[fsizeind-1].height = fsize.discrete.height; ret = enum_frame_intervals(listVidFormats, pixfmt, fsize.discrete.width, fsize.discrete.height, fmtind, fsizeind, fd); if (ret != 0) perror(" Unable to enumerate frame sizes"); } else if (fsize.type == V4L2_FRMSIZE_TYPE_CONTINUOUS) { g_print("{ continuous: min { width = %u, height = %u } .. " "max { width = %u, height = %u } }\n", fsize.stepwise.min_width, fsize.stepwise.min_height, fsize.stepwise.max_width, fsize.stepwise.max_height); g_print(" will not enumerate frame intervals.\n"); } else if (fsize.type == V4L2_FRMSIZE_TYPE_STEPWISE) { g_print("{ stepwise: min { width = %u, height = %u } .. " "max { width = %u, height = %u } / " "stepsize { width = %u, height = %u } }\n", fsize.stepwise.min_width, fsize.stepwise.min_height, fsize.stepwise.max_width, fsize.stepwise.max_height, fsize.stepwise.step_width, fsize.stepwise.step_height); g_print(" will not enumerate frame intervals.\n"); } else { g_printerr(" fsize.type not supported: %d\n", fsize.type); g_printerr(" (Discrete: %d Continuous: %d Stepwise: %d)\n", V4L2_FRMSIZE_TYPE_DISCRETE, V4L2_FRMSIZE_TYPE_CONTINUOUS, V4L2_FRMSIZE_TYPE_STEPWISE); } } if (ret != 0 && errno != EINVAL) { perror("VIDIOC_ENUM_FRAMESIZES - Error enumerating frame sizes"); return errno; } else if ((ret != 0) && (fsizeind == 0)) { /* ------ gspca doesn't enumerate frame sizes ------ */ /* negotiate with VIDIOC_TRY_FMT instead */ fsizeind++; struct v4l2_format fmt; fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; fmt.fmt.pix.width = *width; fmt.fmt.pix.height = *height; fmt.fmt.pix.pixelformat = pixfmt; fmt.fmt.pix.field = V4L2_FIELD_ANY; ret = xioctl(fd, VIDIOC_TRY_FMT, &fmt); /*use the returned values*/ *width = fmt.fmt.pix.width; *height = fmt.fmt.pix.height; g_print("{ ?GSPCA? : width = %u, height = %u }\n", *width, *height); g_print("fmtind:%i fsizeind: %i\n",fmtind,fsizeind); if(listVidFormats[fmtind-1].listVidCap == NULL) { listVidFormats[fmtind-1].listVidCap = g_renew( VidCap, listVidFormats[fmtind-1].listVidCap, fsizeind); listVidFormats[fmtind-1].listVidCap[0].framerate_num = NULL; listVidFormats[fmtind-1].listVidCap[0].framerate_num = g_renew( int, listVidFormats[fmtind-1].listVidCap[0].framerate_num, 1); listVidFormats[fmtind-1].listVidCap[0].framerate_denom = NULL; listVidFormats[fmtind-1].listVidCap[0].framerate_denom = g_renew( int, listVidFormats[fmtind-1].listVidCap[0].framerate_denom, 1); } else { g_printerr("assert failed: listVidCap not Null\n"); return (-2); } listVidFormats[fmtind-1].listVidCap[0].width = *width; listVidFormats[fmtind-1].listVidCap[0].height = *height; listVidFormats[fmtind-1].listVidCap[0].framerate_num[0] = 1; listVidFormats[fmtind-1].listVidCap[0].framerate_denom[0] = 25; listVidFormats[fmtind-1].listVidCap[0].numb_frates = 1; } listVidFormats[fmtind-1].numb_res=fsizeind; return 0; } /* enumerate frames (formats, sizes and fps) * args: * width: current selected width * height: current selected height * fd: device file descriptor * * returns: pointer to LFormats struct containing list of available frame formats */ LFormats *enum_frame_formats(int *width, int *height, int fd) { int ret=0; int fmtind=0; struct v4l2_fmtdesc fmt; memset(&fmt, 0, sizeof(fmt)); fmt.index = 0; fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; LFormats *listFormats = NULL; listFormats = g_new0 ( LFormats, 1); listFormats->listVidFormats = NULL; while ((ret = xioctl(fd, VIDIOC_ENUM_FMT, &fmt)) == 0) { fmt.index++; g_print("{ pixelformat = '%c%c%c%c', description = '%s' }\n", fmt.pixelformat & 0xFF, (fmt.pixelformat >> 8) & 0xFF, (fmt.pixelformat >> 16) & 0xFF, (fmt.pixelformat >> 24) & 0xFF, fmt.description); /*check if format is supported by guvcview, set hardware flag and allocate on device list*/ if((ret=set_SupPixFormat(fmt.pixelformat)) >= 0) { fmtind++; listFormats->listVidFormats = g_renew(VidFormats, listFormats->listVidFormats, fmtind); listFormats->listVidFormats[fmtind-1].format=fmt.pixelformat; g_snprintf(listFormats->listVidFormats[fmtind-1].fourcc,5,"%c%c%c%c", fmt.pixelformat & 0xFF, (fmt.pixelformat >> 8) & 0xFF, (fmt.pixelformat >> 16) & 0xFF, (fmt.pixelformat >> 24) & 0xFF); //enumerate frame sizes ret = enum_frame_sizes(listFormats->listVidFormats, fmt.pixelformat, fmtind, width, height, fd); if (ret != 0) perror(" Unable to enumerate frame sizes.\n"); } else { g_printerr(" { not supported - request format(%i) support at http://guvcview.sourceforge.net }\n", fmt.pixelformat); } } if (errno != EINVAL) { perror("VIDIOC_ENUM_FMT - Error enumerating frame formats"); } listFormats->numb_formats=fmtind; return (listFormats); } guvcview-src-1.7.1/src/sound.c0000775000175000017500000003076612173235416015276 0ustar paulopaulo/*******************************************************************************# # guvcview http://guvcview.sourceforge.net # # # # Paulo Assis # # # # 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # # ********************************************************************************/ #include #include #include #include "sound.h" #include "port_audio.h" #include "pulse_audio.h" #include "vcodecs.h" #include "avilib.h" #include "acodecs.h" #include "lavc_common.h" #include "audio_effects.h" #include "ms_time.h" #define __AMUTEX &pdata->mutex int fill_audio_buffer(struct paRecordData *pdata, UINT64 ts) { int ret =0; UINT64 buffer_length; if(pdata->sampleIndex >= pdata->aud_numSamples) { buffer_length = (G_NSEC_PER_SEC * pdata->aud_numSamples)/(pdata->samprate * pdata->channels); /*first frame time stamp*/ if(pdata->a_ts < 0) { /* if sound begin time > first video frame ts then sync audio to video * else set audio ts to aprox. the video ts */ if((pdata->ts_ref > 0) && (pdata->ts_ref < pdata->snd_begintime)) pdata->a_ts = pdata->snd_begintime - pdata->ts_ref; else pdata->a_ts = 0; } else /*increment time stamp for audio frame*/ pdata->a_ts += buffer_length; /* check audio drift through timestamps */ if (ts > pdata->snd_begintime) ts -= pdata->snd_begintime; else ts = 0; if (ts > buffer_length) ts -= buffer_length; else ts = 0; pdata->ts_drift = ts - pdata->a_ts; pdata->sampleIndex = 0; /*reset*/ __LOCK_MUTEX( __AMUTEX ); int flag = pdata->audio_buff_flag[pdata->bw_ind]; __UNLOCK_MUTEX( __AMUTEX ); if( flag == AUD_READY || flag == AUD_IN_USE ) { if(flag == AUD_READY) { /*flag as IN_USE*/ __LOCK_MUTEX( __AMUTEX ); pdata->audio_buff_flag[pdata->bw_ind] = AUD_IN_USE; __UNLOCK_MUTEX( __AMUTEX ); } /*copy data to audio buffer*/ memcpy(pdata->audio_buff[pdata->bw_ind][pdata->w_ind].frame, pdata->recordedSamples, pdata->aud_numBytes); pdata->audio_buff[pdata->bw_ind][pdata->w_ind].time_stamp = pdata->a_ts + pdata->delay; pdata->audio_buff[pdata->bw_ind][pdata->w_ind].used = TRUE; pdata->blast_ind = pdata->bw_ind; pdata->last_ind = pdata->w_ind; /*doesn't need locking as it's only used in the callback*/ NEXT_IND(pdata->w_ind, AUDBUFF_SIZE); if(pdata->w_ind == 0) { /* reached end of current ring buffer * flag it as AUD_PROCESS * move to next one and flag it as AUD_IN_USE (if READY) */ pdata->audio_buff_flag[pdata->bw_ind] = AUD_PROCESS; __LOCK_MUTEX( __AMUTEX ); NEXT_IND(pdata->bw_ind, AUDBUFF_NUM); if(pdata->audio_buff_flag[pdata->bw_ind] != AUD_READY) { g_printf("AUDIO: next buffer is not yet ready\n"); } else { pdata->audio_buff_flag[pdata->bw_ind] = AUD_IN_USE; } __UNLOCK_MUTEX( __AMUTEX ); } } else { /*drop audio data*/ ret = -1; g_printerr("AUDIO: dropping audio data\n"); } } return ret; } /*--------------------------- sound callback ------------------------------*/ int record_sound ( const void *inputBuffer, unsigned long numSamples, void *userData ) { struct paRecordData *pdata = (struct paRecordData*)userData; __LOCK_MUTEX( __AMUTEX ); gboolean capVid = pdata->capVid; int channels = pdata->channels; int skip_n = pdata->skip_n; __UNLOCK_MUTEX( __AMUTEX ); const SAMPLE *rptr = (const SAMPLE*) inputBuffer; int i; UINT64 numFrames = numSamples / channels; /* buffer ends at timestamp "now", calculate beginning timestamp */ UINT64 nsec_per_frame = G_NSEC_PER_SEC / pdata->samprate; UINT64 ts = ns_time_monotonic() - numFrames * nsec_per_frame; if (skip_n > 0) /*skip audio while were skipping video frames*/ { if(capVid) { __LOCK_MUTEX( __AMUTEX ); pdata->snd_begintime = ns_time_monotonic(); /*reset first time stamp*/ __UNLOCK_MUTEX( __AMUTEX ); return (0); /*still capturing*/ } else { __LOCK_MUTEX( __AMUTEX ); pdata->streaming=FALSE; __LOCK_MUTEX( __AMUTEX ); return (-1); /*capture has stopped*/ } } // __LOCK_MUTEX( __AMUTEX ); // pdata->streaming=TRUE; // __UNLOCK_MUTEX( __AMUTEX ); for( i=0; irecordedSamples[pdata->sampleIndex] = inputBuffer ? *rptr++ : 0; pdata->sampleIndex++; fill_audio_buffer(pdata, ts); /* increment timestamp accordingly while copying */ if (i % channels == 0) ts += nsec_per_frame; } if(capVid) return (0); /*still capturing*/ else { __LOCK_MUTEX( __AMUTEX ); pdata->streaming=FALSE; /* mark current buffer as ready to process */ pdata->audio_buff_flag[pdata->bw_ind] = AUD_PROCESS; __UNLOCK_MUTEX( __AMUTEX ); } return(-1); /* audio capture stopped*/ } void set_sound (struct GLOBAL *global, struct paRecordData* pdata) { if(global->Sound_SampRateInd==0) global->Sound_SampRate=global->Sound_IndexDev[global->Sound_UseDev].samprate;/*using default*/ if(global->Sound_NumChanInd==0) { /*using default if channels <3 or stereo(2) otherwise*/ global->Sound_NumChan=(global->Sound_IndexDev[global->Sound_UseDev].chan < 3) ? global->Sound_IndexDev[global->Sound_UseDev].chan : 2; } pdata->api = global->Sound_API; pdata->audio_buff[0] = NULL; pdata->recordedSamples = NULL; pdata->samprate = global->Sound_SampRate; pdata->channels = global->Sound_NumChan; __LOCK_MUTEX( __AMUTEX ); pdata->skip_n = global->skip_n; /*initial video frames to skip*/ __UNLOCK_MUTEX( __AMUTEX ); if(global->debug) { g_print("using audio codec: 0x%04x\n",global->Sound_Format ); g_print("\tchannels: %d samplerate: %d\n", pdata->channels, pdata->samprate); } switch (global->Sound_Format) { case PA_FOURCC: { pdata->aud_numSamples = MPG_NUM_SAMP * pdata->channels; //outbuffer size in bytes (max value is for pcm 2 bytes per sample) pdata->outbuf_size = pdata->aud_numSamples * 2; //a good value is 240000; break; } default: { //outbuffer size in bytes (max value is for pcm 2 bytes per sample) pdata->outbuf_size = MPG_NUM_SAMP * pdata->channels * 2; //a good value is 240000; /*initialize lavc data*/ if(!(pdata->lavc_data)) { pdata->lavc_data = init_lavc_audio(pdata, global->AudCodec); } /*use lavc audio codec frame size to determine samples*/ pdata->aud_numSamples = (pdata->lavc_data)->codec_context->frame_size * pdata->channels; if(pdata->aud_numSamples <= 0) { pdata->aud_numSamples = MPG_NUM_SAMP * pdata->channels; } break; } } pdata->aud_numBytes = pdata->aud_numSamples * sizeof(SAMPLE); pdata->input_type = PA_SAMPLE_TYPE; pdata->mp2Buff = NULL; pdata->sampleIndex = 0; fprintf(stderr, "AUDIO: samples(%d)\n", pdata->aud_numSamples); pdata->flush = 0; pdata->a_ts= -1; pdata->ts_ref = 0; pdata->stream = NULL; /* some drivers, e.g. GSPCA, don't set fps( guvcview sets it to 1/1 ) * so we can't obtain the proper delay for H.264 (2 video frames) * if set, use the codec properties fps value */ int fps_num = 1; int fps_den = get_enc_fps(global->VidCodec); /*if set use encoder fps */ if(!fps_den) /*if not set use video combobox fps*/ { fps_num = global->fps_num; fps_den = global->fps; } if((get_vcodec_id(global->VidCodec) == CODEC_ID_H264) && (fps_den >= 5)) pdata->delay = (UINT64) 2*(fps_num * G_NSEC_PER_SEC / fps_den); /*2 frame delay in nanosec*/ pdata->delay += global->Sound_delay; /*add predefined delay - def = 0*/ /*reset the indexes*/ pdata->r_ind = 0; pdata->w_ind = 0; pdata->bw_ind = 0; pdata->br_ind = 0; pdata->blast_ind = 0; pdata->last_ind = 0; /*buffer for video PCM 16 bits*/ pdata->pcm_sndBuff=NULL; /*set audio device id to use (portaudio)*/ pdata->device_id = global->Sound_IndexDev[global->Sound_UseDev].id; /* input device */ /*set audio device to use (pulseudio)*/ strncpy(pdata->device_name, global->Sound_IndexDev[global->Sound_UseDev].name, 511); } int init_sound(struct paRecordData* pdata) { int err = paNoError; int i = 0; int j = 0; /*alloc audio ring buffers*/ if(!(pdata->audio_buff[0])) { for(j=0; j< AUDBUFF_NUM; j++) { pdata->audio_buff[j] = g_new0(AudBuff, AUDBUFF_SIZE); for(i=0; iaudio_buff[j][i].frame = g_new0(SAMPLE, pdata->aud_numSamples); pdata->audio_buff[j][i].used = FALSE; pdata->audio_buff[j][i].time_stamp = 0; } pdata->audio_buff_flag[j] = AUD_READY; } } /*alloc the callback buffer*/ pdata->recordedSamples = g_new0(SAMPLE, pdata->aud_numSamples); switch(pdata->api) { #ifdef PULSEAUDIO case PULSE: err = pulse_init_audio(pdata); if(err) goto error; break; #endif case PORT: default: err = port_init_audio(pdata); if(err) goto error; break; } /*sound start time - used to sync with video*/ pdata->snd_begintime = ns_time_monotonic(); return (0); error: pdata->streaming=FALSE; pdata->flush=0; pdata->delay=0; if(pdata->recordedSamples) g_free( pdata->recordedSamples ); pdata->recordedSamples=NULL; if(pdata->audio_buff) { for(j=0; j< AUDBUFF_NUM; j++) { for(i=0; iaudio_buff[j][i].frame); } g_free(pdata->audio_buff[j]); pdata->audio_buff[j] = NULL; } } /*lavc is allways checked and cleaned when finishing worker thread*/ return(-1); } int close_sound (struct paRecordData *pdata) { int err = 0; int i= 0, j= 0; pdata->capVid = 0; switch(pdata->api) { #ifdef PULSEAUDIO case PULSE: err = pulse_close_audio(pdata); break; #endif case PORT: default: err = port_close_audio(pdata); break; } pdata->flush = 0; pdata->delay = 0; /*reset the audio delay*/ /* --------------------------------------------------------------------- * make sure no operations are performed on the buffers */ __LOCK_MUTEX(__AMUTEX); if(pdata->lavc_data) clean_lavc_audio(&(pdata->lavc_data)); pdata->lavc_data = NULL; /*free primary buffer*/ g_free( pdata->recordedSamples ); pdata->recordedSamples=NULL; if(pdata->audio_buff) { for(j=0; j< AUDBUFF_NUM; j++) { for(i=0; iaudio_buff[j][i].frame); } g_free(pdata->audio_buff[j]); pdata->audio_buff[j] = NULL; } } if(pdata->pcm_sndBuff) g_free(pdata->pcm_sndBuff); pdata->pcm_sndBuff = NULL; __UNLOCK_MUTEX(__AMUTEX); return (err); } /* saturate float samples to int16 limits*/ static gint16 clip_int16 (float in) { in = (in < -32768) ? -32768 : (in > 32767) ? 32767 : in; return ((gint16) in); } void SampleConverter (struct paRecordData* pdata) { if(pdata->lavc_data && pdata->lavc_data->codec_context->sample_fmt == AV_SAMPLE_FMT_FLT) { if(!(pdata->float_sndBuff)) pdata->float_sndBuff = g_new0(float, pdata->aud_numSamples); int samp = 0; for(samp=0; samp < pdata->aud_numSamples; samp++) { pdata->float_sndBuff[samp] = pdata->audio_buff[pdata->br_ind][pdata->r_ind].frame[samp]; } } else { if (!(pdata->pcm_sndBuff)) pdata->pcm_sndBuff = g_new0(gint16, pdata->aud_numSamples); int samp = 0; for(samp=0; samp < pdata->aud_numSamples; samp++) { pdata->pcm_sndBuff[samp] = clip_int16(pdata->audio_buff[pdata->br_ind][pdata->r_ind].frame[samp] * 32767.0); //* 32768 + 385; } } } guvcview-src-1.7.1/src/dct.c0000664000175000017500000001111712173235416014702 0ustar paulopaulo/*******************************************************************************# # guvcview http://guvcview.sourceforge.net # # # # Paulo Assis # # # # 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # # ********************************************************************************/ /*******************************************************************************# # # # dct for Jpeg encoder # # # # Adapted for linux, Paulo Assis, 2007 # ********************************************************************************/ #include "dct.h" #include "defs.h" /* Level shifting to get 8 bit SIGNED values for the data */ void levelshift (INT16* const data) { INT16 i; for (i=63; i>=0; i--) data [i] -= 128; } /* DCT for One block(8x8) */ void DCT (INT16 *data) { UINT16 i; INT32 x0, x1, x2, x3, x4, x5, x6, x7, x8; INT16 *tmp_ptr; tmp_ptr=data; /* All values are shifted left by 10 */ /* and rounded off to nearest integer */ /* scale[0] = 1 * scale[k] = cos(k*PI/16)*root(2) */ static const UINT16 c1=1420; /* cos PI/16 * root(2) */ static const UINT16 c2=1338; /* cos PI/8 * root(2) */ static const UINT16 c3=1204; /* cos 3PI/16 * root(2) */ static const UINT16 c5=805; /* cos 5PI/16 * root(2) */ static const UINT16 c6=554; /* cos 3PI/8 * root(2) */ static const UINT16 c7=283; /* cos 7PI/16 * root(2) */ static const UINT16 s1=3; static const UINT16 s2=10; static const UINT16 s3=13; /* row pass */ for (i=8; i>0; i--) { x8 = data [0] + data [7]; x0 = data [0] - data [7]; x7 = data [1] + data [6]; x1 = data [1] - data [6]; x6 = data [2] + data [5]; x2 = data [2] - data [5]; x5 = data [3] + data [4]; x3 = data [3] - data [4]; x4 = x8 + x5; x8 -= x5; x5 = x7 + x6; x7 -= x6; data [0] = (INT16) (x4 + x5); data [4] = (INT16) (x4 - x5); data [2] = (INT16) ((x8*c2 + x7*c6) >> s2); data [6] = (INT16) ((x8*c6 - x7*c2) >> s2); data [7] = (INT16) ((x0*c7 - x1*c5 + x2*c3 - x3*c1) >> s2); data [5] = (INT16) ((x0*c5 - x1*c1 + x2*c7 + x3*c3) >> s2); data [3] = (INT16) ((x0*c3 - x1*c7 - x2*c1 - x3*c5) >> s2); data [1] = (INT16) ((x0*c1 + x1*c3 + x2*c5 + x3*c7) >> s2); data += 8; } data = tmp_ptr;/* return to start of mcu */ /* column pass */ for (i=8; i>0; i--) { x8 = data [0] + data [56]; x0 = data [0] - data [56]; x7 = data [8] + data [48]; x1 = data [8] - data [48]; x6 = data [16] + data [40]; x2 = data [16] - data [40]; x5 = data [24] + data [32]; x3 = data [24] - data [32]; x4 = x8 + x5; x8 -= x5; x5 = x7 + x6; x7 -= x6; data [0] = (INT16) ((x4 + x5) >> s1); data [32] = (INT16) ((x4 - x5) >> s1); data [16] = (INT16) ((x8*c2 + x7*c6) >> s3); data [48] = (INT16) ((x8*c6 - x7*c2) >> s3); data [56] = (INT16) ((x0*c7 - x1*c5 + x2*c3 - x3*c1) >> s3); data [40] = (INT16) ((x0*c5 - x1*c1 + x2*c7 + x3*c3) >> s3); data [24] = (INT16) ((x0*c3 - x1*c7 - x2*c1 - x3*c5) >> s3); data [8] = (INT16) ((x0*c1 + x1*c3 + x2*c5 + x3*c7) >> s3); data++; } data=tmp_ptr; /* return to start of mcu */ } guvcview-src-1.7.1/src/readYUV.c0000664000175000017500000000574012173235416015454 0ustar paulopaulo/*******************************************************************************# # guvcview http://guvcview.sourceforge.net # # # # Paulo Assis # # # # 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # # ********************************************************************************/ /*******************************************************************************# # # # read YUYV or UYVY data for Jpeg encoding # # # # Adapted for linux, Paulo Assis, 2007 # ********************************************************************************/ #include #include "jpgenc.h" /*YUYV*/ UINT8* read_422_format (struct JPEG_ENCODER_STRUCTURE * jpeg_encoder_structure, UINT8 *input_ptr) { INT32 i, j; INT16 *Y1_Ptr = jpeg_encoder_structure->Y1; /*64 int16 block*/ INT16 *Y2_Ptr = jpeg_encoder_structure->Y2; INT16 *CB_Ptr = jpeg_encoder_structure->CB; INT16 *CR_Ptr = jpeg_encoder_structure->CR; UINT16 incr = jpeg_encoder_structure->incr; UINT8 *tmp_ptr=NULL; tmp_ptr=input_ptr; for (i=8; i>0; i--) /*8 rows*/ { for (j=4; j>0; j--) /* 8 cols*/ { *Y1_Ptr++ = *tmp_ptr++; *CB_Ptr++ = *tmp_ptr++; *Y1_Ptr++ = *tmp_ptr++; *CR_Ptr++ = *tmp_ptr++; } for (j=4; j>0; j--) /* 8 cols*/ { *Y2_Ptr++ = *tmp_ptr++; *CB_Ptr++ = *tmp_ptr++; *Y2_Ptr++ = *tmp_ptr++; *CR_Ptr++ = *tmp_ptr++; } tmp_ptr += incr; /* next row (width - mcu_width)*/ } tmp_ptr=NULL;/*clean*/ return (input_ptr); } guvcview-src-1.7.1/src/acodecs.h0000775000175000017500000001046612173235416015547 0ustar paulopaulo/*******************************************************************************# # guvcview http://guvcview.sourceforge.net # # # # Paulo Assis # # # # 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # # ********************************************************************************/ #ifndef ACODECS_H #define ACODECS_H #include #include "lavc_common.h" #include "globals.h" #include "sound.h" #define MAX_ACODECS 6 #define CODEC_PCM 0 #define CODEC_MP2 1 typedef struct _acodecs_data { gboolean avcodec; //is a avcodec codec gboolean valid; //the encoding codec exists in ffmpeg int bits; //bits per sample (pcm only) int monotonic_pts; WORD avi_4cc; //fourcc WORD value const char *mkv_codec; //mkv codecID const char *description; //codec description int bit_rate; //lavc default bit rate int codec_id; //lavc codec_id const char *codec_name; //lavc codec name int sample_format; //lavc sample format int profile; //for AAC only void *mkv_codpriv; //pointer for codec private data int codpriv_size; //size in bytes of private data int flags; //lavc flags } acodecs_data; /** must be called before all others * sets the valid flag */ int setAcodecVal(); /** returns codec data array (all) index: 0 indexed */ int get_acodec_index(int codec_id); /** returns codec list (available) index: 0 indexed */ int get_list_acodec_index(int codec_id); /** codec_ind is the available codec list index * -- refers to the dropdown list (1 indexed) */ WORD get_aud4cc(int codec_ind); int get_aud_bit_rate(int codec_ind); int get_aud_bits(int codec_ind); int get_ind_by4cc(WORD avi_4cc); const char *get_aud_desc4cc(int codec_ind); const char *get_mkvACodec(int codec_ind); int get_acodec_id(int codec_ind); gboolean isLavcACodec(int codec_ind); gboolean isAcodecValid(int codec_ind); acodecs_data *get_aud_codec_defaults(int codec_ind); void* get_mkvACodecPriv(int codec_ind); int set_mkvACodecPriv(int codec_ind, int samprate, int channels, struct lavcAData* data); int compress_audio_frame(void *data); /** * Split a single extradata buffer into the three headers that most * Xiph codecs use. (e.g. Theora and Vorbis) * Works both with Matroska's packing and lavc's packing. * * @param[in] extradata The single chunk that combines all three headers * @param[in] extradata_size The size of the extradata buffer * @param[in] first_header_size The size of the first header, used to * differentiate between the Matroska packing and lavc packing. * @param[out] header_start Pointers to the start of the three separate headers. * @param[out] header_len The sizes of each of the three headers. * @return On error a negative value is returned, on success zero. */ int avpriv_split_xiph_headers(uint8_t *extradata, int extradata_size, int first_header_size, uint8_t *header_start[3], int header_len[3]); #endif guvcview-src-1.7.1/src/io_stream.c0000775000175000017500000000741012173235416016116 0ustar paulopaulo/*******************************************************************************# # guvcview http://guvcview.sourceforge.net # # # # Paulo Assis # # # # 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # # ********************************************************************************/ #ifndef STREAM_H #define STREAM_H #include "io_stream.h" #include #include #include #include #include #include io_Stream* add_new_stream(io_Stream** stream_list, int* list_size) { io_Stream* stream = g_new0(io_Stream, 1); stream->next = NULL; stream->id = *list_size; fprintf(stderr, "STREAM: add stream %i to stream list\n", stream->id); if(stream->id == 0) { stream->previous = NULL; *stream_list = stream; } else { io_Stream* last_stream = get_last_stream(*stream_list); stream->previous = last_stream; last_stream->next = stream; } stream->indexes = NULL; *list_size = *list_size + 1; return(stream); } void destroy_stream_list(io_Stream* stream_list, int* list_size) { io_Stream* stream = get_last_stream(stream_list); while(stream->previous != NULL) //from end to start { io_Stream* prev_stream = stream->previous; if(stream->indexes != NULL) g_free(stream->indexes); g_free(stream); stream = prev_stream; *list_size = *list_size - 1; } g_free(stream); //free the last one; } io_Stream* get_stream(io_Stream* stream_list, int index) { io_Stream* stream = stream_list; if(!stream) return NULL; int j = 0; while(stream->next != NULL && (j < index)) { stream = stream->next; j++; } if(j != index) return NULL; return stream; } io_Stream* get_first_video_stream(io_Stream* stream_list) { io_Stream* stream = stream_list; if(!stream) return NULL; if(stream->type == STREAM_TYPE_VIDEO) return stream; while(stream->next != NULL) { stream = stream->next; if(stream->type == STREAM_TYPE_VIDEO) return stream; } return NULL; } io_Stream* get_first_audio_stream(io_Stream* stream_list) { io_Stream* stream = stream_list; if(!stream) return NULL; if(stream->type == STREAM_TYPE_AUDIO) return stream; while(stream->next != NULL) { stream = stream->next; if(stream->type == STREAM_TYPE_AUDIO) return stream; } return NULL; } io_Stream* get_last_stream(io_Stream* stream_list) { io_Stream* stream = stream_list; if(!stream) return NULL; while(stream->next != NULL) stream = stream->next; return stream; } #endif guvcview-src-1.7.1/src/video_tab.h0000664000175000017500000000370712173235416016077 0ustar paulopaulo/*******************************************************************************# # guvcview http://guvcview.sourceforge.net # # # # Paulo Assis # # Nobuhiro Iwamatsu # # Add UYVY color support(Macbook iSight) # # # # 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # # ********************************************************************************/ #ifndef VIDEO_TAB_H #define VIDEO_TAB_H #include "guvcview.h" //------------------------- Video Tab --------------------------------- void video_tab(struct ALL_DATA *all_data); #endif guvcview-src-1.7.1/src/v4l2_devices.c0000664000175000017500000003031212173235416016417 0ustar paulopaulo/*******************************************************************************# # guvcview http://guvcview.sourceforge.net # # # # Paulo Assis # # # # 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # # ********************************************************************************/ #include #include #include #include #include #include #include #include #include #include "v4l2uvc.h" #include "v4l2_devices.h" /* (fall through - DEPRECATED) * enumerates system video devices * by checking /sys/class/video4linux * args: * videodevice: current device string (default "/dev/video0") * * returns: pointer to LDevices struct containing the video devices list */ LDevices *list_devices( gchar *videodevice ) { int ret=0; int fd=0; LDevices *listDevices = NULL; listDevices = g_new0( LDevices, 1); listDevices->listVidDevices = NULL; struct v4l2_capability v4l2_cap; GDir *v4l2_dir=NULL; GError *error=NULL; v4l2_dir = g_dir_open("/sys/class/video4linux",0,&error); if(v4l2_dir == NULL) { g_printerr ("opening '/sys/class/video4linux' failed: %s\n", error->message); g_error_free ( error ); error=NULL; return NULL; } const gchar *v4l2_device; int num_dev = 0; while((v4l2_device = g_dir_read_name(v4l2_dir)) != NULL) { if(!(g_str_has_prefix(v4l2_device, "video"))) continue; gchar *device = NULL; device = g_strjoin("/","/dev",v4l2_device,NULL); if ((fd = v4l2_open(device, O_RDWR | O_NONBLOCK, 0)) < 0) { g_printerr("ERROR opening V4L interface for %s\n", device); g_free(device); continue; /*next dir entry*/ } else { ret = xioctl(fd, VIDIOC_QUERYCAP, &v4l2_cap); if (ret < 0) { perror("VIDIOC_QUERYCAP error"); g_printerr(" couldn't query device %s\n", device); g_free(device); v4l2_close(fd); continue; /*next dir entry*/ } else { num_dev++; g_print("%s - device %d\n", device, num_dev); listDevices->listVidDevices = g_renew(VidDevice, listDevices->listVidDevices, num_dev); listDevices->listVidDevices[num_dev-1].device = g_strdup(device); listDevices->listVidDevices[num_dev-1].name = g_strdup((gchar *) v4l2_cap.card); listDevices->listVidDevices[num_dev-1].driver = g_strdup((gchar *) v4l2_cap.driver); listDevices->listVidDevices[num_dev-1].location = g_strdup((gchar *) v4l2_cap.bus_info); listDevices->listVidDevices[num_dev-1].valid = 1; if(g_strcmp0(videodevice,listDevices->listVidDevices[num_dev-1].device)==0) { listDevices->listVidDevices[num_dev-1].current = 1; listDevices->current_device = num_dev-1; } else listDevices->listVidDevices[num_dev-1].current = 0; } } g_free(device); v4l2_close(fd); listDevices->listVidDevices[num_dev-1].vendor = 0; listDevices->listVidDevices[num_dev-1].product = 0; gchar *vid_dev_lnk = g_strjoin("/","/sys/class/video4linux",v4l2_device,"device",NULL); gchar *device_lnk = g_file_read_link (vid_dev_lnk,&error); g_free(vid_dev_lnk); if(device_lnk == NULL) { g_printerr ("reading link '/sys/class/video4linux/%s/device' failed: %s\n", v4l2_device, error->message); g_error_free ( error ); error=NULL; //if standard way fails try to get vid, pid from uvc device name //we only need this info for Dynamic controls - uvc driver listDevices->listVidDevices[num_dev-1].vendor = 0; /*reset vid */ listDevices->listVidDevices[num_dev-1].product = 0; /*reset pid */ if(g_strcmp0(listDevices->listVidDevices[num_dev-1].driver,"uvcvideo") == 0) { sscanf(listDevices->listVidDevices[num_dev-1].name,"UVC Camera (%04x:%04x)", &(listDevices->listVidDevices[num_dev-1].vendor), &(listDevices->listVidDevices[num_dev-1].product)); } } else { gchar *d_dir = g_strjoin("/","/sys/class/video4linux", v4l2_device, device_lnk, NULL); gchar *id_dir = g_path_get_dirname(d_dir); g_free(d_dir); gchar *idVendor = g_strjoin("/", id_dir, "idVendor" ,NULL); gchar *idProduct = g_strjoin("/", id_dir, "idProduct" ,NULL); //g_print("idVendor: %s\n", idVendor); //g_print("idProduct: %s\n", idProduct); FILE *vid_fp = g_fopen(idVendor,"r"); if(vid_fp != NULL) { gchar code[5]; if(fgets(code, sizeof(code), vid_fp) != NULL) { listDevices->listVidDevices[num_dev-1].vendor = g_ascii_strtoull(code, NULL, 16); } fclose (vid_fp); } else { g_printerr("couldn't open idVendor: %s\n", idVendor); } vid_fp = g_fopen(idProduct,"r"); if(vid_fp != NULL) { gchar code[5]; if(fgets(code, sizeof(code), vid_fp) != NULL) { listDevices->listVidDevices[num_dev-1].product = g_ascii_strtoull(code, NULL, 16); } fclose (vid_fp); } else { g_printerr("couldn't open idProduct: %s\n", idProduct); } g_free(id_dir); g_free(idVendor); g_free(idProduct); } g_free(device_lnk); } if(v4l2_dir != NULL) g_dir_close(v4l2_dir); listDevices->num_devices = num_dev; return(listDevices); } /* enumerates v4l2 devices * by using libudev args: * videodevice: current device string (default "/dev/video0") * * returns: pointer to LDevices struct containing the video devices list */ LDevices *enum_devices( gchar *videodevice, struct udev *udev, int debug) { struct udev_enumerate *enumerate; struct udev_list_entry *devices, *dev_list_entry; struct udev_device *dev; int num_dev = 0; int fd = 0; struct v4l2_capability v4l2_cap; if (!udev) { /*use fall through method (sysfs)*/ g_print("Can't create udev...using sysfs method\n"); return(list_devices(videodevice)); } LDevices *listDevices = NULL; listDevices = g_new0( LDevices, 1); listDevices->listVidDevices = NULL; /* Create a list of the devices in the 'v4l2' subsystem. */ enumerate = udev_enumerate_new(udev); udev_enumerate_add_match_subsystem(enumerate, "video4linux"); udev_enumerate_scan_devices(enumerate); devices = udev_enumerate_get_list_entry(enumerate); /* For each item enumerated, print out its information. udev_list_entry_foreach is a macro which expands to a loop. The loop will be executed for each member in devices, setting dev_list_entry to a list entry which contains the device's path in /sys. */ udev_list_entry_foreach(dev_list_entry, devices) { const char *path; /* Get the filename of the /sys entry for the device and create a udev_device object (dev) representing it */ path = udev_list_entry_get_name(dev_list_entry); dev = udev_device_new_from_syspath(udev, path); /* usb_device_get_devnode() returns the path to the device node itself in /dev. */ const gchar *v4l2_device = udev_device_get_devnode(dev); if (debug) g_print("Device Node Path: %s\n", v4l2_device); /* open the device and query the capabilities */ if ((fd = v4l2_open(v4l2_device, O_RDWR | O_NONBLOCK, 0)) < 0) { g_printerr("ERROR opening V4L2 interface for %s\n", v4l2_device); v4l2_close(fd); continue; /*next dir entry*/ } if (xioctl(fd, VIDIOC_QUERYCAP, &v4l2_cap) < 0) { perror("VIDIOC_QUERYCAP error"); g_printerr(" couldn't query device %s\n", v4l2_device); v4l2_close(fd); continue; /*next dir entry*/ } v4l2_close(fd); num_dev++; /* Update the device list*/ listDevices->listVidDevices = g_renew(VidDevice, listDevices->listVidDevices, num_dev); listDevices->listVidDevices[num_dev-1].device = g_strdup(v4l2_device); listDevices->listVidDevices[num_dev-1].name = g_strdup((gchar *) v4l2_cap.card); listDevices->listVidDevices[num_dev-1].driver = g_strdup((gchar *) v4l2_cap.driver); listDevices->listVidDevices[num_dev-1].location = g_strdup((gchar *) v4l2_cap.bus_info); listDevices->listVidDevices[num_dev-1].valid = 1; if(g_strcmp0(videodevice,listDevices->listVidDevices[num_dev-1].device)==0) { listDevices->listVidDevices[num_dev-1].current = 1; listDevices->current_device = num_dev-1; } else listDevices->listVidDevices[num_dev-1].current = 0; /* The device pointed to by dev contains information about the v4l2 device. In order to get information about the USB device, get the parent device with the subsystem/devtype pair of "usb"/"usb_device". This will be several levels up the tree, but the function will find it.*/ dev = udev_device_get_parent_with_subsystem_devtype( dev, "usb", "usb_device"); if (!dev) { printf("Unable to find parent usb device."); continue; } /* From here, we can call get_sysattr_value() for each file in the device's /sys entry. The strings passed into these functions (idProduct, idVendor, serial, etc.) correspond directly to the files in the directory which represents the USB device. Note that USB strings are Unicode, UCS2 encoded, but the strings returned from udev_device_get_sysattr_value() are UTF-8 encoded. */ if (debug) { g_print(" VID/PID: %s %s\n", udev_device_get_sysattr_value(dev,"idVendor"), udev_device_get_sysattr_value(dev, "idProduct")); g_print(" %s\n %s\n", udev_device_get_sysattr_value(dev,"manufacturer"), udev_device_get_sysattr_value(dev,"product")); g_print(" serial: %s\n", udev_device_get_sysattr_value(dev, "serial")); } listDevices->listVidDevices[num_dev-1].vendor = g_ascii_strtoull(udev_device_get_sysattr_value(dev,"idVendor"), NULL, 16); listDevices->listVidDevices[num_dev-1].product = g_ascii_strtoull(udev_device_get_sysattr_value(dev, "idProduct"), NULL, 16); udev_device_unref(dev); } /* Free the enumerator object */ udev_enumerate_unref(enumerate); listDevices->num_devices = num_dev; return(listDevices); } /*clean video devices list * args: listVidDevices: array of VidDevice (list of video devices) * numb_devices: number of existing supported video devices * * returns: void */ void freeDevices(LDevices *listDevices) { int i=0; for(i=0;i<(listDevices->num_devices);i++) { g_free(listDevices->listVidDevices[i].device); g_free(listDevices->listVidDevices[i].name); g_free(listDevices->listVidDevices[i].driver); g_free(listDevices->listVidDevices[i].location); } g_free(listDevices->listVidDevices); g_free(listDevices); } guvcview-src-1.7.1/src/create_video.h0000664000175000017500000000336612173235416016575 0ustar paulopaulo/*******************************************************************************# # guvcview http://guvcview.sourceforge.net # # # # Paulo Assis # # # # 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # # ********************************************************************************/ #ifndef CREATE_VIDEO_H #define CREATE_VIDEO_H #include "guvcview.h" int store_video_frame(void *data); void *IO_loop(void *data); #endif guvcview-src-1.7.1/src/dct.h0000664000175000017500000000445112173235416014712 0ustar paulopaulo/*******************************************************************************# # guvcview http://guvcview.sourceforge.net # # # # Paulo Assis # # # # 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # # ********************************************************************************/ /*******************************************************************************# # # # dct for Jpeg encoder # # # # Adapted for linux, Paulo Assis, 2007 # ********************************************************************************/ #ifndef DCT_H #define DCT_H #include "defs.h" /* Level shifting to get 8 bit SIGNED values for the data */ void levelshift (INT16* const data); /* DCT for One block(8x8) */ void DCT (INT16 *data); #endif guvcview-src-1.7.1/src/avilib.c0000775000175000017500000007663412173235416015420 0ustar paulopaulo/*******************************************************************************# # guvcview http://guvcview.sourceforge.net # # # # Paulo Assis # # # # 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # # ********************************************************************************/ /*******************************************************************************# # Some utilities for writing and reading AVI files. # # These are not intended to serve for a full blown # # AVI handling software (this would be much too complex) # # The only intention is to write out MJPEG encoded # # AVIs with sound and to be able to read them back again. # # These utilities should work with other types of codecs too, however. # # # # Copyright (C) 1999 Rainer Johanni # ********************************************************************************/ /* Paulo Assis (6-4-2008): removed reading functions, cleaned build wranings */ #include #include #include #include #include #include #include #include #include #include "config.h" #include "avilib.h" #include "defs.h" #include "lavc_common.h" #include "file_io.h" /******************************************************************* * * * Utilities for writing an AVI File * * based for the most part in the avi encoder from libavformat * *******************************************************************/ #ifndef O_BINARY /* win32 wants a binary flag to open(); this sets it to null on platforms that don't have it. */ #define O_BINARY 0 #endif #define INFO_LIST //#define MAX_INFO_STRLEN 64 //static char id_str[MAX_INFO_STRLEN]; #ifndef PACKAGE #define PACKAGE "guvcview" #endif #ifndef VERSION #define VERSION "1.0" #endif #define __MUTEX &AVI->mutex #define AVI_INDEX_CLUSTER_SIZE 16384 #define AVIF_HASINDEX 0x00000010 /* Index at end of file */ #define AVIF_MUSTUSEINDEX 0x00000020 #define AVIF_ISINTERLEAVED 0x00000100 #define AVIF_TRUSTCKTYPE 0x00000800 /* Use CKType to find key frames */ #define AVIF_WASCAPTUREFILE 0x00010000 #define AVIF_COPYRIGHTED 0x00020000 #define AVI_MAX_RIFF_SIZE 0x40000000LL /*1Gb = 0x40000000LL*/ #define AVI_MASTER_INDEX_SIZE 256 #define AVI_MAX_STREAM_COUNT 10 /* index flags */ #define AVIIF_INDEX 0x10 // bIndexType codes // #define AVI_INDEX_OF_INDEXES 0x00 // when each entry in aIndex // array points to an index chunk #define AVI_INDEX_OF_CHUNKS 0x01 // when each entry in aIndex // array points to a chunk in the file #define AVI_INDEX_IS_DATA 0x80 // when each entry is aIndex is // really the data // bIndexSubtype codes for INDEX_OF_CHUNKS #define AVI_INDEX_2FIELD 0x01 // when fields within frames // are also indexed int64_t avi_open_tag (avi_Context* AVI, const char *tag) { io_write_4cc(AVI->writer, tag); io_write_wl32(AVI->writer, 0); return io_get_offset(AVI->writer); } static void avi_close_tag(avi_Context* AVI, int64_t start_pos) { int64_t current_offset = io_get_offset(AVI->writer); int32_t size = (int32_t) (current_offset - start_pos); io_seek(AVI->writer, start_pos-4); io_write_wl32(AVI->writer, size); io_seek(AVI->writer, current_offset); fprintf(stderr, "AVI:(%" PRIu64 ") closing tag at %" PRIu64 " with size %i\n",current_offset, start_pos-4, size); } /* Calculate audio sample size from number of bits and number of channels. This may have to be adjusted for eg. 12 bits and stereo */ static int avi_audio_sample_size(io_Stream* stream) { if(stream->type != STREAM_TYPE_AUDIO) return -1; int s; if (stream->a_fmt != WAVE_FORMAT_PCM) { s = 4; } else { s = ((stream->a_bits+7)/8)*stream->a_chans; if(s<4) s=4; /* avoid possible zero divisions */ } return s; } static char* avi_stream2fourcc(char* tag, io_Stream* stream) { tag[0] = '0' + (stream->id)/10; tag[1] = '0' + (stream->id)%10; switch(stream->type) { case STREAM_TYPE_VIDEO: tag[2] = 'd'; tag[3] = 'c'; break; case STREAM_TYPE_SUB: // note: this is not an official code tag[2] = 's'; tag[3] = 'b'; break; default: //audio tag[2] = 'w'; tag[3] = 'b'; break; } tag[4] = '\0'; return tag; } void avi_put_main_header(avi_Context* AVI, avi_RIFF* riff) { AVI->fps = get_first_video_stream(AVI->stream_list)->fps; int width = get_first_video_stream(AVI->stream_list)->width; int height = get_first_video_stream(AVI->stream_list)->height; int time_base_num = AVI->time_base_num; int time_base_den = AVI->time_base_den; uint32_t data_rate = 0; if(time_base_den > 0 || time_base_num > 0) //these are not set yet so it's always false data_rate = (uint32_t) (INT64_C(1000000) * time_base_num/time_base_den); else fprintf(stderr, "AVI: bad time base (%i/%i): set it later", time_base_num, time_base_den); /*do not force index yet -only when closing*/ /*this should prevent bad avi files even if it is not closed properly*/ //if(hasIndex) flag |= AVIF_HASINDEX; //if(hasIndex && AVI->must_use_index) flag |= AVIF_MUSTUSEINDEX; AVI->avi_flags = AVIF_WASCAPTUREFILE; int64_t avih = avi_open_tag(AVI, "avih"); // main avi header riff->time_delay_off = io_get_offset(AVI->writer); io_write_wl32(AVI->writer, 1000000 / FRAME_RATE_SCALE); // time per frame (milisec) io_write_wl32(AVI->writer, data_rate); // data rate io_write_wl32(AVI->writer, 0); // Padding multiple size (2048) io_write_wl32(AVI->writer, AVI->avi_flags); // parameter Flags //riff->frames_hdr_all = io_get_offset(AVI->writer); io_write_wl32(AVI->writer, 0); // number of video frames io_write_wl32(AVI->writer, 0); // number of preview frames io_write_wl32(AVI->writer, AVI->stream_list_size); // number of data streams (audio + video)*/ io_write_wl32(AVI->writer, 1024*1024); // suggested playback buffer size (bytes) io_write_wl32(AVI->writer, width); // width io_write_wl32(AVI->writer, height); // height io_write_wl32(AVI->writer, 0); // time scale: unit used to measure time (30) io_write_wl32(AVI->writer, 0); // data rate (frame rate * time scale) io_write_wl32(AVI->writer, 0); // start time (0) io_write_wl32(AVI->writer, 0); // size of AVI data chunk (in scale units) avi_close_tag(AVI, avih); //write the chunk size } int64_t avi_put_bmp_header(avi_Context* AVI, io_Stream* stream) { int frate = 15*FRAME_RATE_SCALE; if(stream->fps > 0.001) frate = (int) ((FRAME_RATE_SCALE*(stream->fps)) + 0.5); int64_t strh = avi_open_tag(AVI, "strh");// video stream header io_write_4cc(AVI->writer, "vids"); // stream type io_write_4cc(AVI->writer, stream->compressor); // Handler (VIDEO CODEC) io_write_wl32(AVI->writer, 0); // Flags io_write_wl16(AVI->writer, 0); // stream priority io_write_wl16(AVI->writer, 0); // language tag io_write_wl32(AVI->writer, 0); // initial frames io_write_wl32(AVI->writer, FRAME_RATE_SCALE); // Scale stream->rate_hdr_strm = io_get_offset(AVI->writer); //store this to set proper fps io_write_wl32(AVI->writer, frate); // Rate: Rate/Scale == sample/second (fps) */ io_write_wl32(AVI->writer, 0); // start time stream->frames_hdr_strm = io_get_offset(AVI->writer); io_write_wl32(AVI->writer, 0); // lenght of stream io_write_wl32(AVI->writer, 1024*1024); // suggested playback buffer size io_write_wl32(AVI->writer, -1); // Quality io_write_wl32(AVI->writer, 0); // SampleSize io_write_wl16(AVI->writer, 0); // rFrame (left) io_write_wl16(AVI->writer, 0); // rFrame (top) io_write_wl16(AVI->writer, stream->width); // rFrame (right) io_write_wl16(AVI->writer, stream->height); // rFrame (bottom) avi_close_tag(AVI, strh); //write the chunk size return strh; } int64_t avi_put_wav_header(avi_Context* AVI, io_Stream* stream) { int sampsize = avi_audio_sample_size(stream); int64_t strh = avi_open_tag(AVI, "strh");// audio stream header io_write_4cc(AVI->writer, "auds"); io_write_wl32(AVI->writer, 1); // codec tag on strf io_write_wl32(AVI->writer, 0); // Flags io_write_wl16(AVI->writer, 0); // stream priority io_write_wl16(AVI->writer, 0); // language tag io_write_wl32(AVI->writer, 0); // initial frames stream->rate_hdr_strm = io_get_offset(AVI->writer); io_write_wl32(AVI->writer, sampsize/4); // Scale io_write_wl32(AVI->writer, stream->mpgrate/8); // Rate: Rate/Scale == sample/second (fps) */ io_write_wl32(AVI->writer, 0); // start time stream->frames_hdr_strm = io_get_offset(AVI->writer); io_write_wl32(AVI->writer, 0); // lenght of stream io_write_wl32(AVI->writer, 12*1024); // suggested playback buffer size io_write_wl32(AVI->writer, -1); // Quality io_write_wl32(AVI->writer, sampsize/4); // SampleSize io_write_wl16(AVI->writer, 0); // rFrame (left) io_write_wl16(AVI->writer, 0); // rFrame (top) io_write_wl16(AVI->writer, 0); // rFrame (right) io_write_wl16(AVI->writer, 0); // rFrame (bottom) avi_close_tag(AVI, strh); //write the chunk size return strh; } void avi_put_vstream_format_header(avi_Context* AVI, io_Stream* stream) { int vxd_size = stream->extra_data_size; int vxd_size_align = (stream->extra_data_size+1) & ~1; int64_t strf = avi_open_tag(AVI, "strf"); // stream format header io_write_wl32(AVI->writer, 40 + vxd_size); // sruct Size io_write_wl32(AVI->writer, stream->width); // Width io_write_wl32(AVI->writer, stream->height); // Height io_write_wl16(AVI->writer, 1); // Planes io_write_wl16(AVI->writer, 24); // Count - bitsperpixel - 1,4,8 or 24 32 if(strncmp(stream->compressor,"DIB",3)==0) io_write_wl32(AVI->writer, 0); // Compression else io_write_4cc(AVI->writer, stream->compressor); io_write_wl32(AVI->writer, stream->width*stream->height*3);// image size (in bytes?) io_write_wl32(AVI->writer, 0); // XPelsPerMeter io_write_wl32(AVI->writer, 0); // YPelsPerMeter io_write_wl32(AVI->writer, 0); // ClrUsed: Number of colors used io_write_wl32(AVI->writer, 0); // ClrImportant: Number of colors important // write extradata (codec private) if (vxd_size > 0 && stream->extra_data) { io_write_buf(AVI->writer, stream->extra_data, vxd_size); if (vxd_size != vxd_size_align) { io_write_w8(AVI->writer, 0); //align } } avi_close_tag(AVI, strf); //write the chunk size } void avi_put_astream_format_header(avi_Context* AVI, io_Stream* stream) { int axd_size = stream->extra_data_size; int axd_size_align = (stream->extra_data_size+1) & ~1; int sampsize = avi_audio_sample_size(stream); int64_t strf = avi_open_tag(AVI, "strf");// audio stream format io_write_wl16(AVI->writer, stream->a_fmt); // Format (codec) tag io_write_wl16(AVI->writer, stream->a_chans); // Number of channels io_write_wl32(AVI->writer, stream->a_rate); // SamplesPerSec io_write_wl32(AVI->writer, stream->mpgrate/8);// Average Bytes per sec io_write_wl16(AVI->writer, sampsize/4); // BlockAlign io_write_wl16(AVI->writer, stream->a_bits); //BitsPerSample io_write_wl16(AVI->writer, axd_size); //size of extra data // write extradata (codec private) if (axd_size > 0 && stream->extra_data) { io_write_buf(AVI->writer, stream->extra_data, axd_size); if (axd_size != axd_size_align) { io_write_w8(AVI->writer, 0); //align } } avi_close_tag(AVI, strf); //write the chunk size } void avi_put_vproperties_header(avi_Context* AVI, io_Stream* stream) { uint32_t refresh_rate = (uint32_t) lrintf(2.0 * AVI->fps); if(AVI->time_base_den > 0 || AVI->time_base_num > 0) //these are not set yet so it's always false { double time_base = AVI->time_base_num / (double) AVI->time_base_den; refresh_rate = lrintf(1.0/time_base); } int vprp= avi_open_tag(AVI, "vprp"); io_write_wl32(AVI->writer, 0); //video format = unknown io_write_wl32(AVI->writer, 0); //video standard= unknown io_write_wl32(AVI->writer, refresh_rate); // dwVerticalRefreshRate io_write_wl32(AVI->writer, stream->width ); //horizontal pixels io_write_wl32(AVI->writer, stream->height); //vertical lines io_write_wl16(AVI->writer, stream->height); //Active Frame Aspect Ratio (4:3 - 16:9) io_write_wl16(AVI->writer, stream->width); //Active Frame Aspect Ratio io_write_wl32(AVI->writer, stream->width ); //Active Frame Height in Pixels io_write_wl32(AVI->writer, stream->height); //Active Frame Height in Lines io_write_wl32(AVI->writer, 1); //progressive FIXME //Field Framing Information io_write_wl32(AVI->writer, stream->height); io_write_wl32(AVI->writer, stream->width ); io_write_wl32(AVI->writer, stream->height); io_write_wl32(AVI->writer, stream->width ); io_write_wl32(AVI->writer, 0); io_write_wl32(AVI->writer, 0); io_write_wl32(AVI->writer, 0); io_write_wl32(AVI->writer, 0); avi_close_tag(AVI, vprp); } int64_t avi_create_riff_tags(avi_Context* AVI, avi_RIFF* riff) { int64_t off = 0; riff->riff_start = avi_open_tag(AVI, "RIFF"); if(riff->id == 1) { io_write_4cc(AVI->writer, "AVI "); off = avi_open_tag(AVI, "LIST"); io_write_4cc(AVI->writer, "hdrl"); } else { io_write_4cc(AVI->writer, "AVIX"); off = avi_open_tag(AVI, "LIST"); io_write_4cc(AVI->writer, "movi"); riff->movi_list = off; //update movi list pos for this riff } return off; } //only for riff id = 1 void avi_create_riff_header(avi_Context* AVI, avi_RIFF* riff) { int64_t list1 = avi_create_riff_tags(AVI, riff); avi_put_main_header(AVI, riff); int i, j = 0; for(j=0; j< AVI->stream_list_size; j++) { io_Stream* stream = get_stream(AVI->stream_list, j); int64_t list2 = avi_open_tag(AVI, "LIST"); io_write_4cc(AVI->writer,"strl"); //stream list if(stream->type == STREAM_TYPE_VIDEO) { avi_put_bmp_header(AVI, stream); avi_put_vstream_format_header(AVI, stream); } else { avi_put_wav_header(AVI, stream); avi_put_astream_format_header(AVI, stream); } /* Starting to lay out AVI OpenDML master index. * We want to make it JUNK entry for now, since we'd * like to get away without making AVI an OpenDML one * for compatibility reasons. */ char tag[5]; avi_Index* indexes = (avi_Index*) stream->indexes; indexes->entry = indexes->ents_allocated = 0; indexes->indx_start = io_get_offset(AVI->writer); int64_t ix = avi_open_tag(AVI, "JUNK"); // ’ix##’ io_write_wl16(AVI->writer, 4); // wLongsPerEntry must be 4 (size of each entry in aIndex array) io_write_w8(AVI->writer, 0); // bIndexSubType must be 0 (frame index) or AVI_INDEX_2FIELD io_write_w8(AVI->writer, AVI_INDEX_OF_INDEXES); // bIndexType (0 == AVI_INDEX_OF_INDEXES) io_write_wl32(AVI->writer, 0); // nEntriesInUse (will fill out later on) io_write_4cc(AVI->writer, avi_stream2fourcc(tag, stream)); // dwChunkId io_write_wl32(AVI->writer, 0); // dwReserved[3] must be 0 io_write_wl32(AVI->writer, 0); io_write_wl32(AVI->writer, 0); for (i=0; i < AVI_MASTER_INDEX_SIZE; i++) { io_write_wl64(AVI->writer, 0); // absolute file offset, offset 0 is unused entry io_write_wl32(AVI->writer, 0); // dwSize - size of index chunk at this offset io_write_wl32(AVI->writer, 0); // dwDuration - time span in stream ticks } avi_close_tag(AVI, ix); //write the chunk size if(stream->type == STREAM_TYPE_VIDEO) avi_put_vproperties_header(AVI, stream); avi_close_tag(AVI, list2); //write the chunk size } AVI->odml_list = avi_open_tag(AVI, "JUNK"); io_write_4cc(AVI->writer, "odml"); io_write_4cc(AVI->writer, "dmlh"); io_write_wl32(AVI->writer, 248); for (i = 0; i < 248; i+= 4) io_write_wl32(AVI->writer, 0); avi_close_tag(AVI, AVI->odml_list); avi_close_tag(AVI, list1); //write the chunk size /* some padding for easier tag editing */ int64_t list3 = avi_open_tag(AVI, "JUNK"); for (i = 0; i < 1016; i += 4) io_write_wl32(AVI->writer, 0); avi_close_tag(AVI, list3); //write the chunk size riff->movi_list = avi_open_tag(AVI, "LIST"); io_write_4cc(AVI->writer, "movi"); } avi_RIFF* avi_get_last_riff(avi_Context* AVI) { avi_RIFF* last_riff = AVI->riff_list; while(last_riff->next != NULL) last_riff = last_riff->next; return last_riff; } avi_RIFF* avi_get_riff(avi_Context* AVI, int index) { avi_RIFF* riff = AVI->riff_list; if(!riff) return NULL; int j = 1; while(riff->next != NULL && (j < index)) { riff = riff->next; j++; } if(j != index) return NULL; return riff; } static void clean_indexes(avi_Context* AVI) { int i=0, j=0; for (i=0; istream_list_size; i++) { io_Stream *stream = get_stream(AVI->stream_list, i); avi_Index* indexes = (avi_Index*) stream->indexes; for (j=0; jents_allocated/AVI_INDEX_CLUSTER_SIZE; j++) av_free(indexes->cluster[j]); av_freep(&indexes->cluster); indexes->ents_allocated = indexes->entry = 0; } } //call this after adding all the streams avi_RIFF* avi_add_new_riff(avi_Context* AVI) { avi_RIFF* riff = g_new0(avi_RIFF, 1); if(riff == NULL) return NULL; riff->next = NULL; riff->id = AVI->riff_list_size + 1; if(riff->id == 1) { riff->previous = NULL; AVI->riff_list = riff; avi_create_riff_header(AVI, riff); } else { avi_RIFF* last_riff = avi_get_last_riff(AVI); riff->previous = last_riff; last_riff->next = riff; avi_create_riff_tags(AVI, riff); } AVI->riff_list_size++; clean_indexes(AVI); fprintf(stderr, "AVI: adding new RIFF (%i)\n",riff->id); return riff; } //second function to get called (add video stream to avi_Context) io_Stream* avi_add_video_stream(avi_Context *AVI, int32_t width, int32_t height, double fps, int32_t codec_id, const char* compressor) { io_Stream* stream = add_new_stream(&AVI->stream_list, &AVI->stream_list_size); stream->type = STREAM_TYPE_VIDEO; stream->fps = fps; stream->width = width; stream->height = height; stream->codec_id = codec_id; stream->indexes = (void *) g_new0(avi_Index, 1); if(compressor) strncpy(stream->compressor, compressor, 8); return stream; } //third function to get called (add audio stream to avi_Context) io_Stream* avi_add_audio_stream(avi_Context *AVI, int32_t channels, int32_t rate, int32_t bits, int32_t mpgrate, int32_t codec_id, int32_t format) { io_Stream* stream = add_new_stream(&AVI->stream_list, &AVI->stream_list_size); stream->type = STREAM_TYPE_AUDIO; stream->a_rate = rate; stream->a_bits = bits; stream->mpgrate = mpgrate; stream->a_vbr = 0; stream->codec_id = codec_id; stream->a_fmt = format; stream->indexes = (void *) g_new0(avi_Index, 1); return stream; } /* first function to get called avi_create_context: Open an AVI File and write a bunch of zero bytes as space for the header. Creates a mutex. returns a pointer to avi_Context on success, a NULL pointer on error */ avi_Context* avi_create_context(const char * filename) { avi_Context* AVI = g_new0(avi_Context, 1); if(AVI == NULL) return NULL; AVI->writer = io_create_writer(filename, 0); if (AVI->writer == NULL) { perror("Could not open file for writing"); g_free(AVI); return NULL; } __INIT_MUTEX(__MUTEX); AVI->flags = 0; /*recordind*/ AVI->riff_list = NULL; AVI->riff_list_size = 0; AVI->stream_list = NULL; AVI->stream_list_size = 0; return AVI; } void avi_destroy_context(avi_Context* AVI) { //clean up io_destroy_writer(AVI->writer); avi_RIFF* riff = avi_get_last_riff(AVI); while(riff->previous != NULL) //from end to start { avi_RIFF* prev_riff = riff->previous; free(riff); riff = prev_riff; AVI->riff_list_size--; } free(riff); //free the last one; destroy_stream_list(AVI->stream_list, &AVI->stream_list_size); //free avi_Context free(AVI); } avi_Ientry* avi_get_ientry(avi_Index* idx, int ent_id) { int cl = ent_id / AVI_INDEX_CLUSTER_SIZE; int id = ent_id % AVI_INDEX_CLUSTER_SIZE; return &idx->cluster[cl][id]; } static int avi_write_counters(avi_Context* AVI, avi_RIFF* riff) { int n, nb_frames = 0; io_flush_buffer(AVI->writer); //int time_base_num = AVI->time_base_num; //int time_base_den = AVI->time_base_den; int64_t file_size = io_get_offset(AVI->writer);//avi_tell(AVI); fprintf(stderr, "AVI: file size = %" PRIu64 "\n", file_size); for(n = 0; n < AVI->stream_list_size; n++) { io_Stream *stream = get_stream(AVI->stream_list, n); if(stream->rate_hdr_strm <= 0) { fprintf(stderr, "AVI: stream rate header pos not valid\n"); } else { io_seek(AVI->writer, stream->rate_hdr_strm); if(stream->type == STREAM_TYPE_VIDEO && AVI->fps > 0.001) { uint32_t rate =(uint32_t) FRAME_RATE_SCALE * lrintf(AVI->fps); fprintf(stderr,"AVI: storing rate(%i)\n",rate); io_write_wl32(AVI->writer, rate); } } if(stream->frames_hdr_strm <= 0) { fprintf(stderr, "AVI: stream frames header pos not valid\n"); } else { io_seek(AVI->writer, stream->frames_hdr_strm); if(stream->type == STREAM_TYPE_VIDEO) { io_write_wl32(AVI->writer, stream->packet_count); nb_frames = MAX(nb_frames, stream->packet_count); } else { int sampsize = avi_audio_sample_size(stream); io_write_wl32(AVI->writer, 4*stream->audio_strm_length/sampsize); } } } avi_RIFF* riff_1 = avi_get_riff(AVI, 1); if(riff_1->id == 1) /*should always be true*/ { if(riff_1->time_delay_off <= 0) { fprintf(stderr, "AVI: riff main header pos not valid\n"); } else { uint32_t us_per_frame = 1000; //us if(AVI->fps > 0.001) us_per_frame=(uint32_t) lrintf(1000000.0 / AVI->fps); AVI->avi_flags |= AVIF_HASINDEX; io_seek(AVI->writer, riff_1->time_delay_off); io_write_wl32(AVI->writer, us_per_frame); // time_per_frame io_write_wl32(AVI->writer, 0); // data rate io_write_wl32(AVI->writer, 0); // Padding multiple size (2048) io_write_wl32(AVI->writer, AVI->avi_flags); // parameter Flags //io_seek(AVI->writer, riff_1->frames_hdr_all); io_write_wl32(AVI->writer, nb_frames); } } //return to position (EOF) io_seek(AVI->writer, file_size); return 0; } static int avi_write_ix(avi_Context* AVI) { char tag[5]; char ix_tag[] = "ix00"; int i, j; avi_RIFF *riff = avi_get_last_riff(AVI); if (riff->id > AVI_MASTER_INDEX_SIZE) return -1; for (i=0;istream_list_size;i++) { io_Stream *stream = get_stream(AVI->stream_list, i); int64_t ix, pos; avi_stream2fourcc(tag, stream); ix_tag[3] = '0' + i; /*only 10 streams supported*/ /* Writing AVI OpenDML leaf index chunk */ ix = io_get_offset(AVI->writer); io_write_4cc(AVI->writer, ix_tag); /* ix?? */ avi_Index* indexes = (avi_Index *) stream->indexes; io_write_wl32(AVI->writer, indexes->entry * 8 + 24); /* chunk size */ io_write_wl16(AVI->writer, 2); /* wLongsPerEntry */ io_write_w8(AVI->writer, 0); /* bIndexSubType (0 == frame index) */ io_write_w8(AVI->writer, AVI_INDEX_OF_CHUNKS); /* bIndexType (1 == AVI_INDEX_OF_CHUNKS) */ io_write_wl32(AVI->writer, indexes->entry); /* nEntriesInUse */ io_write_4cc(AVI->writer, tag); /* dwChunkId */ io_write_wl64(AVI->writer, riff->movi_list);/* qwBaseOffset */ io_write_wl32(AVI->writer, 0); /* dwReserved_3 (must be 0) */ for (j=0; j< indexes->entry; j++) { avi_Ientry* ie = avi_get_ientry(indexes, j); io_write_wl32(AVI->writer, ie->pos + 8); io_write_wl32(AVI->writer, ((uint32_t)ie->len & ~0x80000000) | (ie->flags & 0x10 ? 0 : 0x80000000)); } io_flush_buffer(AVI->writer); pos = io_get_offset(AVI->writer); //current position fprintf(stderr,"AVI: wrote ix %s with %i entries\n",tag, indexes->entry); /* Updating one entry in the AVI OpenDML master index */ io_seek(AVI->writer, indexes->indx_start); io_write_4cc(AVI->writer, "indx"); /* enabling this entry */ io_skip(AVI->writer, 8); io_write_wl32(AVI->writer, riff->id); /* nEntriesInUse */ io_skip(AVI->writer, 16*(riff->id)); io_write_wl64(AVI->writer, ix); /* qwOffset */ io_write_wl32(AVI->writer, pos - ix); /* dwSize */ io_write_wl32(AVI->writer, indexes->entry); /* dwDuration */ //return to position io_seek(AVI->writer, pos); } return 0; } static int avi_write_idx1(avi_Context* AVI, avi_RIFF *riff) { int64_t idx_chunk; int i; char tag[5]; io_Stream *stream; avi_Ientry* ie = 0, *tie; int empty, stream_id = -1; idx_chunk = avi_open_tag(AVI, "idx1"); for (i=0;istream_list_size;i++) { stream = get_stream(AVI->stream_list, i); stream->entry=0; } do { empty = 1; for (i=0;istream_list_size;i++) { stream = get_stream(AVI->stream_list, i); avi_Index* indexes = (avi_Index*) stream->indexes; if (indexes->entry <= stream->entry) continue; tie = avi_get_ientry(indexes, stream->entry); if (empty || tie->pos < ie->pos) { ie = tie; stream_id = i; } empty = 0; } if (!empty) { stream = get_stream(AVI->stream_list, stream_id); avi_stream2fourcc(tag, stream); io_write_4cc(AVI->writer, tag); io_write_wl32(AVI->writer, ie->flags); io_write_wl32(AVI->writer, ie->pos); io_write_wl32(AVI->writer, ie->len); stream->entry++; } } while (!empty); avi_close_tag(AVI, idx_chunk); fprintf(stderr, "AVI: wrote idx1\n"); avi_write_counters(AVI, riff); return 0; } int avi_write_packet(avi_Context* AVI, int stream_index, BYTE *data, uint32_t size, int64_t dts, int block_align, int32_t flags) { char tag[5]; unsigned int i_flags=0; io_Stream *stream= get_stream(AVI->stream_list, stream_index); avi_RIFF* riff = avi_get_last_riff(AVI); //align while(block_align==0 && dts != AV_NOPTS_VALUE && dts > stream->packet_count) avi_write_packet(AVI, stream_index, NULL, 0, AV_NOPTS_VALUE, 0, 0); stream->packet_count++; // Make sure to put an OpenDML chunk when the file size exceeds the limits if (io_get_offset(AVI->writer) - riff->riff_start > AVI_MAX_RIFF_SIZE) { avi_write_ix(AVI); avi_close_tag(AVI, riff->movi_list); if (riff->id == 1) avi_write_idx1(AVI, riff); avi_close_tag(AVI, riff->riff_start); avi_add_new_riff(AVI); riff = avi_get_last_riff(AVI); //update riff } avi_stream2fourcc(tag, stream); if(flags & AV_PKT_FLAG_KEY) //key frame i_flags = 0x10; if (stream->type == STREAM_TYPE_AUDIO) stream->audio_strm_length += size; avi_Index* idx = (avi_Index*) stream->indexes; int cl = idx->entry / AVI_INDEX_CLUSTER_SIZE; int id = idx->entry % AVI_INDEX_CLUSTER_SIZE; if (idx->ents_allocated <= idx->entry) { idx->cluster = av_realloc(idx->cluster, (cl+1)*sizeof(void*)); if (!idx->cluster) return -1; idx->cluster[cl] = av_malloc(AVI_INDEX_CLUSTER_SIZE*sizeof(avi_Ientry)); if (!idx->cluster[cl]) return -1; idx->ents_allocated += AVI_INDEX_CLUSTER_SIZE; } idx->cluster[cl][id].flags = i_flags; idx->cluster[cl][id].pos = io_get_offset(AVI->writer) - riff->movi_list; idx->cluster[cl][id].len = size; idx->entry++; io_write_4cc(AVI->writer, tag); io_write_wl32(AVI->writer, size); io_write_buf(AVI->writer, data, size); if (size & 1) io_write_w8(AVI->writer, 0); io_flush_buffer(AVI->writer); return 0; } int avi_close(avi_Context* AVI) { int res = 0; int n, nb_frames; int64_t file_size; avi_RIFF* riff = avi_get_last_riff(AVI); if (riff->id == 1) { avi_close_tag(AVI, riff->movi_list); fprintf(stderr, "AVI: (%" PRIu64 ") close movi tag\n",io_get_offset(AVI->writer)); res = avi_write_idx1(AVI, riff); avi_close_tag(AVI, riff->riff_start); } else { avi_write_ix(AVI); avi_close_tag(AVI, riff->movi_list); avi_close_tag(AVI, riff->riff_start); file_size = io_get_offset(AVI->writer); io_seek(AVI->writer, AVI->odml_list - 8); io_write_4cc(AVI->writer, "LIST"); /* Making this AVI OpenDML one */ io_skip(AVI->writer, 16); for (n=nb_frames=0;nstream_list_size;n++) { io_Stream *stream = get_stream(AVI->stream_list, n); if (stream->type == STREAM_TYPE_VIDEO) { if (nb_frames < stream->packet_count) nb_frames = stream->packet_count; } else { if (stream->codec_id == CODEC_ID_MP2 || stream->codec_id == CODEC_ID_MP3) nb_frames += stream->packet_count; } } io_write_wl32(AVI->writer, nb_frames); io_seek(AVI->writer, file_size); avi_write_counters(AVI, riff); } clean_indexes(AVI); return res; } guvcview-src-1.7.1/src/picture.h0000664000175000017500000000660612173235416015617 0ustar paulopaulo/*******************************************************************************# # guvcview http://guvcview.sourceforge.net # # # # Paulo Assis # # # # 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # # ********************************************************************************/ #ifndef PICTURE_H #define PICTURE_H #include "defs.h" typedef struct tagBITMAPFILEHEADER { WORD bfType; //Specifies the file type, must be BM DWORD bfSize; //Specifies the size, in bytes, of the bitmap file WORD bfReserved1; //Reserved; must be zero WORD bfReserved2; //Reserved; must be zero DWORD bfOffBits; /*Specifies the offset, in bytes, from the beginning of the BITMAPFILEHEADER structure to the bitmap bits= FileHeader+InfoHeader+RGBQUAD(0 for 24bit BMP)=64*/ } __attribute__ ((packed)) BITMAPFILEHEADER, *PBITMAPFILEHEADER; typedef struct tagBITMAPINFOHEADER { DWORD biSize; LONG biWidth; LONG biHeight; WORD biPlanes; WORD biBitCount; DWORD biCompression; DWORD biSizeImage; LONG biXPelsPerMeter; LONG biYPelsPerMeter; DWORD biClrUsed; DWORD biClrImportant; } __attribute__ ((packed)) BITMAPINFOHEADER, *PBITMAPINFOHEADER; typedef struct tagJPGFILEHEADER { BYTE SOI[2];/*SOI Marker 0xFFD8*/ BYTE APP0[2];/*APP0 MARKER 0xFF0E*/ BYTE length[2];/*length of header without APP0 in bytes*/ BYTE JFIF[5];/*set to JFIF0 0x4A46494600*/ BYTE VERS[2];/*1-2 0x0102*/ BYTE density;/* 0 - No units, aspect ratio only specified 1 - Pixels per Inch on quickcam5000pro 2 - Pixels per Centimetre */ BYTE xdensity[2];/*120 on quickcam5000pro*/ BYTE ydensity[2];/*120 on quickcam5000pro*/ BYTE WTN;/*width Thumbnail 0*/ BYTE HTN;/*height Thumbnail 0*/ } __attribute__ ((packed)) JPGFILEHEADER, *PJPGFILEHEADER; int SaveJPG(const char *Filename,int imgsize,BYTE *ImagePix); int SaveBuff(const char *Filename,int imgsize,BYTE *data); int SaveBPM(const char *Filename, long width, long height, int BitCount, BYTE *ImagePix); int write_png(char *file_name, int width, int height,BYTE *prgb_data); #endif guvcview-src-1.7.1/src/video_filters.h0000664000175000017500000000735012173235416016777 0ustar paulopaulo/*******************************************************************************# # guvcview http://guvcview.sourceforge.net # # # # Paulo Assis # # # # 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # # ********************************************************************************/ #ifndef VIDEO_FILTERS_H #define VIDEO_FILTERS_H #include "defs.h" struct particle { int PX; int PY; BYTE Y; BYTE U; BYTE V; int size; float decay; }; //struct dizzy_data //{ // BYTE *buffer; // BYTE *current_buffer, *alt_buffer; // int dx; // int dy; // int sx; // int sy; // double phase = 0.0; // double phase_increment = 0.02; // double zoomrate = 1.01; //}; /* Flip YUYV frame - horizontal * args: * frame = pointer to frame buffer (yuyv format) * width = frame width * height= frame height * returns: void */ void yuyv_mirror (BYTE *frame, int width, int height); /* Flip YUV frame - vertical * args: * frame = pointer to frame buffer (yuyv or uyvy format) * width = frame width * height= frame height * returns: void */ void yuyv_upturn(BYTE* frame, int width, int height); /* Invert YUV frame * args: * frame = pointer to frame buffer (yuyv or uyvy format) * width = frame width * height= frame height * returns: void */ void yuyv_negative(BYTE* frame, int width, int height); /* monochromatic effect for YUYV frame * args: * frame = pointer to frame buffer (yuyv format) * width = frame width * height= frame height * returns: void */ void yuyv_monochrome(BYTE* frame, int width, int height); /*break image in little square pieces * args: * frame = pointer to frame buffer (yuyv or uyvy format) * width = frame width * height = frame height * piece_size = multiple of 2 (we need at least 2 pixels to get the entire pixel information) * format = v4l2 pixel format */ void pieces(BYTE* frame, int width, int height, int piece_size ); /*sets a trail of particles obtained from the image * args: * frame = pointer to frame buffer (yuyv format) * width = frame width * height = frame height * trail_size = trail size (in frames) * particle_size = maximum size in pixels - should be even (square - size x size) * particles = pointer to particles array (struct particle) */ struct particle* particles_effect(BYTE* frame, int width, int height, int trail_size, int particle_size, struct particle* particles); #endif guvcview-src-1.7.1/src/huffman.h0000664000175000017500000001763612173235416015575 0ustar paulopaulo/*******************************************************************************# # guvcview http://guvcview.sourceforge.net # # # # Paulo Assis # # # # 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # # ********************************************************************************/ /*******************************************************************************# # # # huffman tables for Jpeg encoder/decoder # # # # Adapted for linux, Paulo Assis, 2007 # ********************************************************************************/ #ifndef HUFFMAN_H #define HUFFMAN_H #include "defs.h" #define DHT_SIZE 432 static const unsigned char dht_data[DHT_SIZE] = { 0xff, 0xc4, 0x00, 0x1f, 0x00, 0x00, 0x01, 0x05, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0xff, 0xc4, 0x00, 0xb5, 0x10, 0x00, 0x02, 0x01, 0x03, 0x03, 0x02, 0x04, 0x03, 0x05, 0x05, 0x04, 0x04, 0x00, 0x00, 0x01, 0x7d, 0x01, 0x02, 0x03, 0x00, 0x04, 0x11, 0x05, 0x12, 0x21, 0x31, 0x41, 0x06, 0x13, 0x51, 0x61, 0x07, 0x22, 0x71, 0x14, 0x32, 0x81, 0x91, 0xa1, 0x08, 0x23, 0x42, 0xb1, 0xc1, 0x15, 0x52, 0xd1, 0xf0, 0x24, 0x33, 0x62, 0x72, 0x82, 0x09, 0x0a, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xff, 0xc4, 0x00, 0x1f, 0x01, 0x00, 0x03, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0xff, 0xc4, 0x00, 0xb5, 0x11, 0x00, 0x02, 0x01, 0x02, 0x04, 0x04, 0x03, 0x04, 0x07, 0x05, 0x04, 0x04, 0x00, 0x01, 0x02, 0x77, 0x00, 0x01, 0x02, 0x03, 0x11, 0x04, 0x05, 0x21, 0x31, 0x06, 0x12, 0x41, 0x51, 0x07, 0x61, 0x71, 0x13, 0x22, 0x32, 0x81, 0x08, 0x14, 0x42, 0x91, 0xa1, 0xb1, 0xc1, 0x09, 0x23, 0x33, 0x52, 0xf0, 0x15, 0x62, 0x72, 0xd1, 0x0a, 0x16, 0x24, 0x34, 0xe1, 0x25, 0xf1, 0x17, 0x18, 0x19, 0x1a, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa }; #define JPG_HUFFMAN_TABLE_LENGTH 0x01A0 static const unsigned char JPEGHuffmanTable[JPG_HUFFMAN_TABLE_LENGTH] = { // luminance dc - length bits 0x00, 0x00, 0x01, 0x05, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // luminance dc - code 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, // chrominance dc - length bits 0x01, 0x00, 0x03, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, // chrominance dc - code 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, // luminance ac - number of codes with # bits (ordered by code length 1-16) 0x10, 0x00, 0x02, 0x01, 0x03, 0x03, 0x02, 0x04, 0x03, 0x05, 0x05, 0x04, 0x04, 0x00, 0x00, 0x01, 0x7D, // luminance ac - run size (ordered by code length) 0x01, 0x02, 0x03, 0x00, 0x04, 0x11, 0x05, 0x12, 0x21, 0x31, 0x41, 0x06, 0x13, 0x51, 0x61, 0x07, 0x22, 0x71, 0x14, 0x32, 0x81, 0x91, 0xA1, 0x08, 0x23, 0x42, 0xB1, 0xC1, 0x15, 0x52, 0xD1, 0xF0, 0x24, 0x33, 0x62, 0x72, 0x82, 0x09, 0x0A, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9A, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9, 0xEA, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, 0xF9, 0xFA, // chrominance ac -number of codes with # bits (ordered by code length 1-16) 0x11, 0x00, 0x02, 0x01, 0x02, 0x04, 0x04, 0x03, 0x04, 0x07, 0x05, 0x04, 0x04, 0x00, 0x01, 0x02, 0x77, // chrominance ac - run size (ordered by code length) 0x00, 0x01, 0x02, 0x03, 0x11, 0x04, 0x05, 0x21, 0x31, 0x06, 0x12, 0x41, 0x51, 0x07, 0x61, 0x71, 0x13, 0x22, 0x32, 0x81, 0x08, 0x14, 0x42, 0x91, 0xA1, 0xB1, 0xC1, 0x09, 0x23, 0x33, 0x52, 0xF0, 0x15, 0x62, 0x72, 0xD1, 0x0A, 0x16, 0x24, 0x34, 0xE1, 0x25, 0xF1, 0x17, 0x18, 0x19, 0x1A, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9A, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9, 0xEA, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, 0xF9, 0xFA }; #endif guvcview-src-1.7.1/src/string_utils.c0000775000175000017500000001635612173235416016673 0ustar paulopaulo/*******************************************************************************# # guvcview http://guvcview.sourceforge.net # # # # Paulo Assis # # # # 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # # ********************************************************************************/ #include #include #include #include "defs.h" #include "string_utils.h" #include "video_format.h" /* counts chars needed for n*/ int int_num_chars (int n) { int i = 0; if (n <= 0) { i++; n = -n; } while (n != 0) { n /= 10; i++; } return i; } int uint64_num_chars (uint64_t n) { int i = 0; while (n != 0) { n /= 10; i++; } return i; } /* check image file extension and return image type*/ int check_image_type (char *filename) { int format=0; /*get the file extension*/ GString * file_str = g_string_new(filename); file_str = g_string_ascii_down(file_str); if (g_str_has_suffix (file_str->str, ".jpg")) { format = 0; } else if (g_str_has_suffix (file_str->str, ".bmp")) { format = 1; } else if (g_str_has_suffix (file_str->str, ".png")) { format = 2; } else if (g_str_has_suffix (file_str->str, ".raw")) { format = 3; } else format = 0; fprintf(stderr, "file %s has extension type %i\n", filename, format); g_string_free(file_str, TRUE); return (format); } /* check video file extension and return video format*/ int check_video_type (char *filename) { int format=0; /*get the file extension*/ GString * file_str = g_string_new(filename); file_str = g_string_ascii_down(file_str); if (g_str_has_suffix (file_str->str, ".avi")) { format = AVI_FORMAT; } else if (g_str_has_suffix (file_str->str, ".mkv")) { format = MKV_FORMAT; } else if (g_str_has_suffix (file_str->str, ".webm")) { format = WEBM_FORMAT; } else format = MKV_FORMAT; fprintf(stderr, "file %s has extension type %i\n", filename, format); g_string_free(file_str, TRUE); return (format); } /* split fullpath in Path (splited[1]) and filename (splited[0])*/ pchar* splitPath(char *FullPath, char* splited[2]) { char *basename = g_path_get_basename(FullPath); char *dirname = g_path_get_dirname(FullPath); //fprintf(stderr, "base: '%s' dir: '%s'\n",basename, dirname); int cpysize = 0; int size = strlen(basename)+1; if (size > (strlen(splited[0])+1)) { /* strlen doesn't count '/0' so add 1 char*/ splited[0]=g_renew(char, splited[0], size); } cpysize = g_strlcpy(splited[0], basename, size*sizeof(char)); if ( (cpysize+1) < (size*sizeof(char)) ) g_printerr("filename copy size error:(%i != %lu)\n", cpysize+1, (unsigned long) size*sizeof(char)); size = strlen(dirname)+1; if (size > (strlen(splited[1])+1)) { /* strlen doesn't count '/0' so add 1 char*/ splited[1]=g_renew(char, splited[1], size); } cpysize = g_strlcpy(splited[1], dirname, size*sizeof(char)); if ( (cpysize + 1) < (size*sizeof(char)) ) g_printerr("dirname copy size error:(%i != %lu)\n", cpysize+1, (unsigned long) size*sizeof(char)); g_free(basename); g_free(dirname); return (splited); } char *joinPath(char *fullPath, pchar *splited) { /*clean existing string allocation*/ if(fullPath != NULL) g_free(fullPath); /*allocate newly formed string*/ fullPath = g_strjoin ("/", splited[1], splited[0], NULL); return (fullPath); } char *incFilename(char *fullPath, pchar *splited, uint64_t inc) { /** we don't want to change the base filename (splited[0]) * so copy it */ char* filename = g_strdup(splited[0]); filename = add_file_suffix(filename, inc); /*clean existing string allocation*/ g_free(fullPath); fullPath = g_strjoin ("/", splited[1], filename, NULL); if(filename) g_free(filename); return(fullPath); } char *setImgExt(char *filename, int format) { int sname = strlen(filename)+1; /*include '\0' terminator*/ char basename[sname]; sscanf(filename,"%[^.]",basename); switch(format) { case 0: g_snprintf(filename, sname, "%s.jpg", basename); break; case 1: g_snprintf(filename, sname, "%s.bmp", basename); break; case 2: g_snprintf(filename, sname, "%s.png", basename); break; case 3: g_snprintf(filename, sname, "%s.raw", basename); break; default: g_printerr("Image format not supported\n"); } return (filename); } char *setVidExt(char *filename, int format_ind) { //include '\0' terminator int size = strlen(filename) + 1; char basename[size]; sscanf(filename,"%[^.]",basename); const char* extension = get_vformat_extension(format_ind); //add '.' and '\0' int total_size = strlen(basename) + strlen(extension) + 2; if(total_size > size) filename = g_renew(char, filename, total_size); g_snprintf(filename, total_size, "%s.%s", basename, extension); return (filename); } char *add_file_suffix(char *filename, uint64_t suffix) { int fsize=strlen(filename); char basename[fsize+1]; char extension[5]; sscanf(filename, "%[^.].%4s", basename, extension); fsize += uint64_num_chars(suffix) + 2; filename = g_renew(char, filename, fsize+1); snprintf(filename, fsize, "%s-%llu.%s", basename, (unsigned long long) suffix, extension); return(filename); } uint64_t get_file_suffix(const char *path, const char* filename) { uint64_t suffix = 0; GDir *dir = g_dir_open(path, 0, NULL); if(dir == NULL) { fprintf(stderr, "ERROR: Couldn't open %s directory\n", path); return suffix; } int fsize=strlen(filename); char basename[fsize]; char extension[5]; sscanf(filename,"%[^.].%4s", basename, extension); fsize += 8; char format_str[fsize]; g_snprintf(format_str, fsize-1, "%s-%%20s.%s", basename, extension); char* file_name = NULL; while ((file_name = (char *) g_dir_read_name (dir)) != NULL) { if( g_str_has_prefix (file_name, basename) && g_str_has_suffix (file_name, extension)) { char sfix_str[21]; sscanf(file_name, format_str, sfix_str); uint64_t sfix = g_ascii_strtoull(sfix_str, NULL, 10); if(sfix > suffix) suffix = sfix; } } g_dir_close(dir); return suffix; } guvcview-src-1.7.1/src/jpgenc.h0000664000175000017500000000636512173235416015414 0ustar paulopaulo/*******************************************************************************# # guvcview http://guvcview.sourceforge.net # # # # Paulo Assis # # # # 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # # ********************************************************************************/ /*******************************************************************************# # # # prototypes for Jpeg encoder # # # # Adapted for linux, Paulo Assis, 2007 # ********************************************************************************/ #ifndef JPGENC_H #define JPGENC_H #include "jdatatype.h" #include "dct.h" void initialization (struct JPEG_ENCODER_STRUCTURE * jpeg, int image_width, int image_height); UINT16 DSP_Division (UINT32 numer, UINT32 denom); void initialize_quantization_tables (struct JPEG_ENCODER_STRUCTURE * jpeg_encoder_structure); UINT8* write_markers (struct JPEG_ENCODER_STRUCTURE * jpeg_encoder_structure, UINT8 * output_ptr,int huff, UINT32 image_width, UINT32 image_height); int encode_image (UINT8 * input_ptr,UINT8 * output_ptr, struct JPEG_ENCODER_STRUCTURE * jpeg_encoder_structure, int huff, UINT32 image_width, UINT32 image_height); UINT8* read_422_format (struct JPEG_ENCODER_STRUCTURE * jpeg_encoder_structure, UINT8 *input_ptr); UINT8* encodeMCU (struct JPEG_ENCODER_STRUCTURE * jpeg_encoder_structure, UINT8 *output_ptr); void quantization (struct JPEG_ENCODER_STRUCTURE * jpeg_encoder_structure, INT16* const data, UINT16* const quant_table_ptr); UINT8* huffman (struct JPEG_ENCODER_STRUCTURE * jpeg_encoder_structure, UINT16 component, UINT8 *output_ptr); UINT8* close_bitstream (struct JPEG_ENCODER_STRUCTURE * jpeg_encoder_structure, UINT8 *output_ptr); #endif guvcview-src-1.7.1/src/v4l2_devices.h0000664000175000017500000000472412173235416016434 0ustar paulopaulo/*******************************************************************************# # guvcview http://guvcview.sourceforge.net # # # # Paulo Assis # # # # 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # # ********************************************************************************/ #ifndef V4L2_DEVICES_H #define V4L2_DEVICES_H #include typedef struct _VidDevice { char *device; char *name; char *driver; char *location; guint vendor; guint product; int valid; int current; } VidDevice; typedef struct _LDevices { VidDevice *listVidDevices; int num_devices; int current_device; } LDevices; /* enumerates system video devices * by checking /sys/class/video4linux * args: * videodevice: current device string (default "/dev/video0") * * returns: pointer to LDevices struct containing the video devices list */ LDevices *enum_devices( gchar *videodevice, struct udev *udev, int debug); /*clean video devices list * args: * listDevices: pointer to LDevices struct containing the video devices list * * returns: void */ void freeDevices(LDevices *listDevices); #endif guvcview-src-1.7.1/src/video.h0000664000175000017500000000356712173235416015255 0ustar paulopaulo/*******************************************************************************# # guvcview http://guvcview.sourceforge.net # # # # Paulo Assis # # Nobuhiro Iwamatsu # # Add UYVY color support(Macbook iSight) # # # # 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # # ********************************************************************************/ #ifndef VIDEO_H #define VIDEO_H /* run in a thread (SDL overlay)*/ void *main_loop(void *data); #endif guvcview-src-1.7.1/src/profile.c0000664000175000017500000003205412173235416015573 0ustar paulopaulo/*******************************************************************************# # guvcview http://guvcview.sourceforge.net # # # # Paulo Assis # # # # 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # # ********************************************************************************/ #include #include #include #include #include #include #include #include "defs.h" #include "profile.h" #include "../config.h" int SaveControls(struct ALL_DATA *all_data) { struct VidState *s = all_data->s; struct GLOBAL *global = all_data->global; FILE *fp; int i=0; char *filename; filename = g_strjoin("/", global->profile_FPath[1], global->profile_FPath[0], NULL); fp = g_fopen(filename, "w"); if( fp == NULL ) { g_printerr("Could not open profile data file: %s.\n",filename); return (-1); } else { if (s->control_list) { Control *current = s->control_list; Control *next = current->next; //write header fprintf(fp, "#V4L2/CTRL/0.0.2\n"); fprintf(fp, "APP{\"%s\"}\n", PACKAGE_STRING); //write control data fprintf(fp, "# control data\n"); for(i=0; inum_controls; i++) { if((current->control.flags & V4L2_CTRL_FLAG_WRITE_ONLY) || (current->control.flags & V4L2_CTRL_FLAG_READ_ONLY) || (current->control.flags & V4L2_CTRL_FLAG_GRABBED)) { if(next == NULL) break; else { current = next; next = current->next; } continue; } fprintf(fp, "#%s\n", current->control.name); switch(current->control.type) { case V4L2_CTRL_TYPE_STRING : fprintf(fp, "ID{0x%08x};CHK{%i:%i:%i:0}=STR{\"%s\"}\n", current->control.id, current->control.minimum, current->control.maximum, current->control.step, current->string); break; case V4L2_CTRL_TYPE_INTEGER64 : fprintf(fp, "ID{0x%08x};CHK{0:0:0:0}=VAL64{%" PRId64 "}\n", current->control.id, current->value64); break; default : fprintf(fp, "ID{0x%08x};CHK{%i:%i:%i:%i}=VAL{%i}\n", current->control.id, current->control.minimum, current->control.maximum, current->control.step, current->control.default_value, current->value); break; } if(next == NULL) break; else { current = next; next = current->next; } } } } g_free(filename); fflush(fp); //flush stream buffers to filesystem if(fsync(fileno(fp)) || fclose(fp)) { perror("PROFILE ERROR - write to file failed"); return(-1); } return (0); } int LoadControls(struct ALL_DATA *all_data) { struct VidState *s = all_data->s; struct GLOBAL *global = all_data->global; struct vdIn *videoIn = all_data->videoIn; FILE *fp; int major=0, minor=0, rev=0; int num_controls = 0; Control *current = NULL; Control *set_list= NULL; Control *set_curr= NULL; Control *set_next= NULL; char *filename; filename = g_strjoin("/", global->profile_FPath[1], global->profile_FPath[0], NULL); if((fp = g_fopen(filename,"r"))!=NULL) { char line[200]; if(fgets(line, sizeof(line), fp) != NULL) { if(sscanf(line,"#V4L2/CTRL/%i.%i.%i", &major, &minor, &rev) == 3) { //check standard version if needed } else { printf("no valid header found\n"); goto finish; } } else { printf("no valid header found\n"); goto finish; } while (fgets(line, sizeof(line), fp) != NULL) { int id = 0; int min = 0, max = 0, step = 0, def = 0; int32_t val = 0; int64_t val64 = 0; if ((line[0]!='#') && (line[0]!='\n')) { if(sscanf(line,"ID{0x%08x};CHK{%i:%i:%i:%i}=VAL{%i}", &id, &min, &max, &step, &def, &val) == 6) { current = get_ctrl_by_id(s->control_list, id); if(current) { //check values if(current->control.minimum == min && current->control.maximum == max && current->control.step == step && current->control.default_value == def) { //if its one of the special auto controls disable it first disable_special_auto (videoIn->fd, s->control_list, id); //control exists add it to set_list if(!set_list) { set_list = calloc (1, sizeof(Control)); set_curr = set_list; memcpy(&(set_curr->control), &(current->control), sizeof(struct v4l2_queryctrl)); set_curr->class = set_curr->control.id & 0xFFFF0000; set_curr->next = NULL; set_curr->menu = NULL; set_curr->string = NULL; set_curr->value = val; } else { set_next = calloc (1, sizeof(Control)); memcpy(&(set_next->control), &(current->control), sizeof(struct v4l2_queryctrl)); set_next->next = NULL; set_curr->next = set_next; set_curr = set_next; set_curr->class = set_curr->control.id & 0xFFFF0000; set_curr->menu = NULL; set_curr->string = NULL; set_curr->value = val; } num_controls++; } } } else if(sscanf(line,"ID{0x%08x};CHK{0:0:0:0}=VAL64{%" PRId64 "}", &id, &val64) == 2) { current = get_ctrl_by_id(s->control_list, id); if(current) { //control exists add it to set_list if(!set_list) { set_list = calloc (1, sizeof(Control)); set_curr = set_list; memcpy(&(set_curr->control), &(current->control), sizeof(struct v4l2_queryctrl)); set_curr->class = set_curr->control.id & 0xFFFF0000; set_curr->next = NULL; set_curr->value64 = val64; } else { set_next = calloc (1, sizeof(Control)); memcpy(&(set_next->control), &(current->control), sizeof(struct v4l2_queryctrl)); set_next->next = NULL; set_curr->next = set_next; set_curr = set_next; set_curr->class = set_curr->control.id & 0xFFFF0000; set_curr->menu = NULL; set_curr->string = NULL; set_curr->value64 = val64; } num_controls++; } } else if(sscanf(line,"ID{0x%08x};CHK{%i:%i:%i:0}=STR{\"%*s\"}", &id, &min, &max, &step) == 5) { current = get_ctrl_by_id(s->control_list, id); if(current) { //check values if(current->control.minimum == min && current->control.maximum == max && current->control.step == step) { char str[max+1]; sscanf(line, "ID{0x%*x};CHK{%*i:%*i:%*i:0}==STR{\"%s\"}", str); if(strlen(str) > max) //FIXME: should also check (minimum +N*step) { printf("string bigger than maximum buffer size"); } else { //control exists add it to set_list if(!set_list) { set_list = calloc (1, sizeof(Control)); set_curr = set_list; memcpy(&(set_curr->control), &(current->control), sizeof(struct v4l2_queryctrl)); set_curr->class = set_curr->control.id & 0xFFFF0000; set_curr->next = NULL; set_curr->menu = NULL; set_curr->value = strlen(str) + 1; set_curr->string = calloc(set_curr->value, sizeof(char)); strcpy(set_curr->string, str); } else { set_next = calloc (1, sizeof(Control)); memcpy(&(set_next->control), &(current->control), sizeof(struct v4l2_queryctrl)); set_next->next = NULL; set_curr->next = set_next; set_curr = set_next; set_curr->class = set_curr->control.id & 0xFFFF0000; set_curr->menu = NULL; set_curr->value = strlen(str) + 1; set_curr->string = calloc(set_curr->value, sizeof(char)); strcpy(set_curr->string, str); } num_controls++; } } } } } } set_ctrl_values(videoIn->fd, set_list, num_controls); get_ctrl_values(videoIn->fd, s->control_list, s->num_controls, all_data); } else { g_printerr("Could not open profile data file: %s.\n",filename); return (-1); } finish: free_control_list (set_list); fclose(fp); g_free(filename); return (0); } guvcview-src-1.7.1/src/pulse_audio.c0000664000175000017500000003610212173235416016442 0ustar paulopaulo/*******************************************************************************# # guvcview http://guvcview.sourceforge.net # # # # Paulo Assis # # # # 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # # ********************************************************************************/ #include "../config.h" #ifdef PULSEAUDIO #include #include #include "pulse_audio.h" #include "audio_effects.h" #include "ms_time.h" #include static int latency = 20000; // start latency in micro seconds static int underflows = 0; static int sink_index = 0; static int source_index = 0; static void finish(pa_context *pa_ctx, pa_mainloop *pa_ml) { /* clean up and disconnect */ pa_context_disconnect(pa_ctx); pa_context_unref(pa_ctx); pa_mainloop_free(pa_ml); } /* This callback gets called when our context changes state. We really only * care about when it's ready or if it has failed */ void pa_state_cb(pa_context *c, void *userdata) { pa_context_state_t state; int *pa_ready = userdata; state = pa_context_get_state(c); switch (state) { // These are just here for reference case PA_CONTEXT_UNCONNECTED: case PA_CONTEXT_CONNECTING: case PA_CONTEXT_AUTHORIZING: case PA_CONTEXT_SETTING_NAME: default: break; case PA_CONTEXT_FAILED: case PA_CONTEXT_TERMINATED: *pa_ready = 2; break; case PA_CONTEXT_READY: *pa_ready = 1; break; } } /* * pa_mainloop will call this function when it's ready to tell us about a sink. * Since we're not threading when listing devices, there's no need for mutexes * on the devicelist structure */ void pa_sourcelist_cb(pa_context *c, const pa_source_info *l, int eol, void *userdata) { struct GLOBAL *global = userdata; int channels = 1; if (eol > 0) { return; } source_index++; if(l->sample_spec.channels <1) channels = 1; else if (l->sample_spec.channels > 2) channels = 2; else channels = l->sample_spec.channels; g_print("=======[ Input Device #%d ]=======\n", source_index); g_print("Description: %s\n", l->description); g_print("Name: %s\n", l->name); g_print("Index: %d\n", l->index); g_print("Channels: %d (default to: %d)\n", l->sample_spec.channels, channels); g_print("SampleRate: %d\n", l->sample_spec.rate); g_print("Latency: %llu (usec)\n", (long long unsigned) l->latency); g_print("Card: %d\n", l->card); g_print("\n"); if(l->monitor_of_sink == PA_INVALID_INDEX) { global->Sound_numInputDev++; //allocate new Sound Device Info global->Sound_IndexDev = g_renew(sndDev, global->Sound_IndexDev, global->Sound_numInputDev); //fill structure with sound data global->Sound_IndexDev[global->Sound_numInputDev-1].id = l->index; /*saves dev id*/ strncpy(global->Sound_IndexDev[global->Sound_numInputDev-1].name, l->name, 511); strncpy(global->Sound_IndexDev[global->Sound_numInputDev-1].description, l->description, 255); global->Sound_IndexDev[global->Sound_numInputDev-1].chan = channels; global->Sound_IndexDev[global->Sound_numInputDev-1].samprate = l->sample_spec.rate; } } /* * See above. This callback is pretty much identical to the previous * but it will only print the output devices */ void pa_sinklist_cb(pa_context *c, const pa_sink_info *l, int eol, void *userdata) { /* If eol is set to a positive number, you're at the end of the list */ if (eol > 0) { return; } sink_index++; g_print("=======[ Output Device #%d ]=======\n", sink_index); g_print("Description: %s\n", l->description); g_print("Name: %s\n", l->name); g_print("Index: %d\n", l->index); g_print("Channels: %d\n", l->channel_map.channels); g_print("SampleRate: %d\n", l->sample_spec.rate); g_print("Latency: %llu (usec)\n", (long long unsigned) l->latency); g_print("Card: %d\n", l->card); g_print("\n"); } /* * iterate the main loop until all devices are listed */ int pa_get_devicelist(struct GLOBAL *global) { /* Define our pulse audio loop and connection variables */ pa_mainloop *pa_ml; pa_mainloop_api *pa_mlapi; pa_operation *pa_op = NULL; pa_context *pa_ctx; /* We'll need these state variables to keep track of our requests */ int state = 0; int pa_ready = 0; /* Create a mainloop API and connection to the default server */ pa_ml = pa_mainloop_new(); pa_mlapi = pa_mainloop_get_api(pa_ml); pa_ctx = pa_context_new(pa_mlapi, "getDevices"); /* This function connects to the pulse server */ pa_context_connect(pa_ctx, NULL, 0, NULL); /* * This function defines a callback so the server will tell us it's state. * Our callback will wait for the state to be ready. The callback will * modify the variable to 1 so we know when we have a connection and it's * ready. * If there's an error, the callback will set pa_ready to 2 */ pa_context_set_state_callback(pa_ctx, pa_state_cb, &pa_ready); /* * Now we'll enter into an infinite loop until we get the data we receive * or if there's an error */ for (;;) { /* * We can't do anything until PA is ready, so just iterate the mainloop * and continue */ if (pa_ready == 0) { pa_mainloop_iterate(pa_ml, 1, NULL); continue; } /* We couldn't get a connection to the server, so exit out */ if (pa_ready == 2) { finish(pa_ctx, pa_ml); return -1; } /* * At this point, we're connected to the server and ready to make * requests */ switch (state) { /* State 0: we haven't done anything yet */ case 0: /* * This sends an operation to the server. pa_sinklist_cb is * our callback function and a pointer to our devicelist will * be passed to the callback (global) The operation ID is stored in the * pa_op variable */ pa_op = pa_context_get_sink_info_list(pa_ctx, pa_sinklist_cb, NULL //userdata ); /* Update state for next iteration through the loop */ state++; break; case 1: /* * Now we wait for our operation to complete. When it's * complete our pa_output_devicelist is filled out, and we move * along to the next state */ if (pa_operation_get_state(pa_op) == PA_OPERATION_DONE) { pa_operation_unref(pa_op); /* * Now we perform another operation to get the source * (input device) list just like before. This time we pass * a pointer to our input structure */ pa_op = pa_context_get_source_info_list(pa_ctx, pa_sourcelist_cb, global //userdata ); /* Update the state so we know what to do next */ state++; } break; case 2: if (pa_operation_get_state(pa_op) == PA_OPERATION_DONE) { /* Now we're done, clean up and disconnect and return */ pa_operation_unref(pa_op); finish(pa_ctx, pa_ml); return 0; } break; default: /* We should never see this state */ g_print("in state %d\n", state); return -1; } /* * Iterate the main loop and go again. The second argument is whether * or not the iteration should block until something is ready to be * done. Set it to zero for non-blocking. */ pa_mainloop_iterate(pa_ml, 1, NULL); } } /* * get the device list from pulse server */ int pulse_list_snd_devices(struct GLOBAL *global) { global->Sound_numInputDev = 0; //reset input device count global->Sound_DefDev = 0; if (pa_get_devicelist(global) < 0) { g_print("failed to get audio device list from PULSE server\n"); return 1; } return 0; } /* * underflow callback */ static void stream_underflow_cb(pa_stream *s, void *userdata) { /* We increase the latency by 50% if we get 6 underflows and latency is under 2s */ g_print("AUDIO: underflow\n"); underflows++; if (underflows >= 6 && latency < 2000000) { latency = (latency*3)/2; pa_sample_spec *ss = (pa_sample_spec *) pa_stream_get_sample_spec (s); pa_buffer_attr *bufattr = (pa_buffer_attr *) pa_stream_get_buffer_attr (s); bufattr->fragsize = pa_usec_to_bytes(latency, ss); bufattr->maxlength = pa_usec_to_bytes(latency, ss) * 2; pa_stream_set_buffer_attr(s, bufattr, NULL, NULL); underflows = 0; g_print("AUDIO: latency increased to %d\n", latency); } } /* * audio record callback */ static void stream_request_cb(pa_stream *s, size_t length, void *userdata) { //struct paRecordData *pdata = (struct paRecordData*) userdata; const void *inputBuffer; //pa_usec_t usec; //int neg; //pa_stream_get_latency(s, &usec, &neg); //g_print(" latency %8d us\n",(int)usec); /*read from stream*/ if (pa_stream_peek(s, &inputBuffer, &length) < 0) { g_print( "pa_stream_peek() failed\n"); //quit(1); return; } int numSamples= length / sizeof(SAMPLE); record_sound ( inputBuffer, numSamples, userdata ); pa_stream_drop(s); } /* * Iterate the main loop while recording is on. * This function runs under it's own thread called by pulse_init_audio */ static int pulse_read_audio(void *userdata) { struct paRecordData *pdata = (struct paRecordData*) userdata; g_print("Pulse audio Thread started\n"); pa_mainloop *pa_ml; pa_mainloop_api *pa_mlapi; pa_context *pa_ctx; pa_stream *recordstream; pa_buffer_attr bufattr; pa_sample_spec ss; int r; int pa_ready = 0; /* Create a mainloop API and connection to the default server */ pa_ml = pa_mainloop_new(); pa_mlapi = pa_mainloop_get_api(pa_ml); pa_ctx = pa_context_new(pa_mlapi, "guvcview Pulse API"); pa_context_connect(pa_ctx, NULL, 0, NULL); /* * This function defines a callback so the server will tell us it's state. * Our callback will wait for the state to be ready. The callback will * modify the variable to 1 so we know when we have a connection and it's * ready. * If there's an error, the callback will set pa_ready to 2 */ pa_context_set_state_callback(pa_ctx, pa_state_cb, &pa_ready); /* * We can't do anything until PA is ready, so just iterate the mainloop * and continue */ while (pa_ready == 0) { pa_mainloop_iterate(pa_ml, 1, NULL); } if (pa_ready == 2) { finish(pa_ctx, pa_ml); return -1; } /* set the sample spec (frame rate, channels and format) */ ss.rate = pdata->samprate; ss.channels = pdata->channels; ss.format = PULSE_SAMPLE_TYPE; recordstream = pa_stream_new(pa_ctx, "Record", &ss, NULL); if (!recordstream) g_print("AUDIO: pa_stream_new failed\n"); /* define the callbacks */ pa_stream_set_read_callback(recordstream, stream_request_cb, (void *) pdata); pa_stream_set_underflow_callback(recordstream, stream_underflow_cb, NULL); /* a possible value is (uint32_t)-1 ~= 2 sec */ bufattr.fragsize = pa_usec_to_bytes(latency, &ss); bufattr.maxlength = pa_usec_to_bytes(latency, &ss) * 2; /* maximum value supported is (uint32_t)-1 */ //bufattr.maxlength = pdata->aud_numSamples * sizeof(SAMPLE) * 2; //bufattr.minreq = pa_usec_to_bytes(0,&ss); //bufattr.prebuf = (uint32_t)-1; //bufattr.tlength = pa_usec_to_bytes(latency,&ss); char * dev = pdata->device_name; g_print("AUDIO: connecting to pulse audio device %s\n\t (channels %d rate %d)\n", dev, ss.channels, ss.rate); r = pa_stream_connect_record(recordstream, dev, &bufattr, PA_STREAM_INTERPOLATE_TIMING |PA_STREAM_ADJUST_LATENCY |PA_STREAM_AUTO_TIMING_UPDATE); if (r < 0) { g_print("AUDIO: skip latency adjustment\n"); /* Old pulse audio servers don't like the ADJUST_LATENCY flag, * so retry without that */ r = pa_stream_connect_record(recordstream, dev, &bufattr, PA_STREAM_INTERPOLATE_TIMING| PA_STREAM_AUTO_TIMING_UPDATE); } if (r < 0) { g_print("AUDIO: pa_stream_connect_record failed\n"); finish(pa_ctx, pa_ml); return -1; } pdata->streaming=TRUE; /* * Iterate the main loop while streaming. The second argument is whether * or not the iteration should block until something is ready to be * done. Set it to zero for non-blocking. */ while (pdata->capVid) { pa_mainloop_iterate(pa_ml, 1, NULL); //sleep_ms(4); } pa_stream_disconnect (recordstream); pa_stream_unref (recordstream); finish(pa_ctx, pa_ml); return 0; } /* * Launch the main loop iteration thread */ int pulse_init_audio(struct paRecordData* pdata) { /* start audio capture thread */ if(__THREAD_CREATE(&pdata->pulse_read_th, (GThreadFunc) pulse_read_audio, pdata)) { g_printerr("Pulse thread creation failed\n"); pdata->streaming=FALSE; return (-1); } return 0; } /* * join the main loop iteration thread */ int pulse_close_audio(struct paRecordData* pdata) { __THREAD_JOIN( pdata->pulse_read_th ); g_print("AUDIO: pulse read thread joined\n"); return 0; } #endif guvcview-src-1.7.1/src/img_controls.h0000664000175000017500000000361212173235416016635 0ustar paulopaulo/*******************************************************************************# # guvcview http://guvcview.sourceforge.net # # # # Paulo Assis # # Nobuhiro Iwamatsu # # Add UYVY color support(Macbook iSight) # # # # 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # # ********************************************************************************/ #ifndef IMG_CONTROLS_H #define IMG_CONTROLS_H #include "guvcview.h" void draw_controls (struct ALL_DATA *all_data); #endif guvcview-src-1.7.1/src/pulse_audio.h0000664000175000017500000000360312173235416016447 0ustar paulopaulo/*******************************************************************************# # guvcview http://guvcview.sourceforge.net # # # # Paulo Assis # # # # 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # # ********************************************************************************/ #ifdef PULSEAUDIO #ifndef PULSE_AUDIO_H #define PULSE_AUDIO_H #include #include "sound.h" int pulse_list_snd_devices(struct GLOBAL *global); int pulse_init_audio(struct paRecordData* pdata); int pulse_close_audio(struct paRecordData* pdata); #endif #endif guvcview-src-1.7.1/src/video_tab.c0000775000175000017500000003704212173235416016074 0ustar paulopaulo/*******************************************************************************# # guvcview http://guvcview.sourceforge.net # # # # Paulo Assis # # Nobuhiro Iwamatsu # # # # # # 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # # ********************************************************************************/ #include #include /* support for internationalization - i18n */ #include #include #include "globals.h" #include "callbacks.h" #include "v4l2uvc.h" #include "string_utils.h" #include "vcodecs.h" #include "video_format.h" /*--------------------------- file chooser dialog ----------------------------*/ void video_tab(struct ALL_DATA *all_data) { struct GLOBAL *global = all_data->global; struct vdIn *videoIn = all_data->videoIn; struct GWIDGET *gwidget = all_data->gwidget; //struct paRecordData *pdata = all_data->pdata; GtkWidget *table2; GtkWidget *scroll2; GtkWidget *Tab2; GtkWidget *Tab2Label; GtkWidget *Tab2Icon; GtkWidget *label_Device; //GtkWidget *FrameRate; GtkWidget *label_FPS; GtkWidget *ShowFPS; GtkWidget *labelResol; GtkWidget *label_InpType; GtkWidget *label_videoFilters; GtkWidget *table_filt; GtkWidget *FiltMirrorEnable; GtkWidget *FiltUpturnEnable; GtkWidget *FiltNegateEnable; GtkWidget *FiltMonoEnable; GtkWidget *FiltPiecesEnable; GtkWidget *FiltParticlesEnable; GtkWidget *set_jpeg_comp; GtkWidget *label_jpeg_comp; int line = 0; int i = 0; VidFormats *listVidFormats; //TABLE table2 = gtk_grid_new(); gtk_grid_set_column_homogeneous (GTK_GRID(table2), FALSE); gtk_widget_set_hexpand (table2, TRUE); gtk_widget_set_halign (table2, GTK_ALIGN_FILL); gtk_grid_set_row_spacing (GTK_GRID(table2), 4); gtk_grid_set_column_spacing (GTK_GRID (table2), 4); gtk_container_set_border_width (GTK_CONTAINER (table2), 2); gtk_widget_show (table2); //SCROLL scroll2 = gtk_scrolled_window_new(NULL,NULL); //ADD TABLE TO SCROLL gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scroll2),table2); gtk_scrolled_window_set_placement(GTK_SCROLLED_WINDOW(scroll2), GTK_CORNER_TOP_LEFT); gtk_widget_show(scroll2); //new hbox for tab label and icon Tab2 = gtk_grid_new(); Tab2Label = gtk_label_new(_("Video")); gtk_widget_show (Tab2Label); gchar* Tab2IconPath = g_strconcat (PACKAGE_DATA_DIR,"/pixmaps/guvcview/video_controls.png",NULL); //don't test for file - use default empty image if load fails //get icon image Tab2Icon = gtk_image_new_from_file(Tab2IconPath); g_free(Tab2IconPath); gtk_widget_show (Tab2Icon); gtk_grid_attach (GTK_GRID(Tab2), Tab2Icon, 0, 0, 1, 1); gtk_grid_attach (GTK_GRID(Tab2), Tab2Label, 1, 0, 1, 1); gtk_widget_show (Tab2); gtk_notebook_append_page(GTK_NOTEBOOK(gwidget->boxh),scroll2,Tab2); //Devices label_Device = gtk_label_new(_("Device:")); gtk_misc_set_alignment (GTK_MISC (label_Device), 1, 0.5); gtk_grid_attach (GTK_GRID(table2), label_Device, 0, line, 1, 1); gtk_widget_show (label_Device); gwidget->Devices = gtk_combo_box_text_new (); gtk_widget_set_halign (gwidget->Devices, GTK_ALIGN_FILL); gtk_widget_set_hexpand (gwidget->Devices, TRUE); if (videoIn->listDevices->num_devices < 1) { //use current gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(gwidget->Devices), videoIn->videodevice); gtk_combo_box_set_active(GTK_COMBO_BOX(gwidget->Devices),0); } else { for(i=0;i<(videoIn->listDevices->num_devices);i++) { gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(gwidget->Devices), videoIn->listDevices->listVidDevices[i].name); if(videoIn->listDevices->listVidDevices[i].current) gtk_combo_box_set_active(GTK_COMBO_BOX(gwidget->Devices),i); } } gtk_grid_attach (GTK_GRID(table2), gwidget->Devices, 1, line, 1 ,1); gtk_widget_show (gwidget->Devices); g_signal_connect (GTK_COMBO_BOX_TEXT(gwidget->Devices), "changed", G_CALLBACK (Devices_changed), all_data); // Resolution gwidget->Resolution = gtk_combo_box_text_new (); gtk_widget_set_halign (gwidget->Resolution, GTK_ALIGN_FILL); gtk_widget_set_hexpand (gwidget->Resolution, TRUE); char temp_str[20]; int defres=0; { int current_format = videoIn->listFormats->current_format; listVidFormats = &videoIn->listFormats->listVidFormats[current_format]; } if (global->debug) g_print("resolutions of format(%d) = %d \n", videoIn->listFormats->current_format+1, listVidFormats->numb_res); for(i = 0 ; i < listVidFormats->numb_res ; i++) { if (listVidFormats->listVidCap[i].width>0) { g_snprintf(temp_str,18,"%ix%i", listVidFormats->listVidCap[i].width, listVidFormats->listVidCap[i].height); gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(gwidget->Resolution),temp_str); if ((global->width == listVidFormats->listVidCap[i].width) && (global->height == listVidFormats->listVidCap[i].height)) defres=i;//set selected resolution index } } // Frame Rate line++; gwidget->FrameRate = gtk_combo_box_text_new (); gtk_widget_set_halign (gwidget->FrameRate, GTK_ALIGN_FILL); gtk_widget_set_hexpand (gwidget->FrameRate, TRUE); int deffps=0; if (global->debug) g_print("frame rates of %dº resolution=%d \n", defres+1, listVidFormats->listVidCap[defres].numb_frates); for ( i = 0 ; i < listVidFormats->listVidCap[defres].numb_frates ; i++) { g_snprintf(temp_str,18,"%i/%i fps", listVidFormats->listVidCap[defres].framerate_denom[i], listVidFormats->listVidCap[defres].framerate_num[i]); gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(gwidget->FrameRate),temp_str); if (( global->fps_num == listVidFormats->listVidCap[defres].framerate_num[i]) && (global->fps == listVidFormats->listVidCap[defres].framerate_denom[i])) deffps=i;//set selected } gtk_grid_attach (GTK_GRID(table2), gwidget->FrameRate, 1, line, 1 ,1); gtk_widget_show (gwidget->FrameRate); gtk_combo_box_set_active(GTK_COMBO_BOX(gwidget->FrameRate),deffps); if (deffps==0) { if (listVidFormats->listVidCap[defres].framerate_denom) global->fps = listVidFormats->listVidCap[defres].framerate_denom[0]; if (listVidFormats->listVidCap[defres].framerate_num) global->fps_num = listVidFormats->listVidCap[defres].framerate_num[0]; g_print("fps is set to %i/%i\n", global->fps_num, global->fps); } gtk_widget_set_sensitive (gwidget->FrameRate, TRUE); g_signal_connect (GTK_COMBO_BOX_TEXT(gwidget->FrameRate), "changed", G_CALLBACK (FrameRate_changed), all_data); label_FPS = gtk_label_new(_("Frame Rate:")); gtk_misc_set_alignment (GTK_MISC (label_FPS), 1, 0.5); gtk_grid_attach (GTK_GRID(table2), label_FPS, 0, line, 1, 1); gtk_widget_show (label_FPS); ShowFPS=gtk_check_button_new_with_label (_(" Show")); gtk_grid_attach (GTK_GRID(table2), ShowFPS, 2, line, 1, 1); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ShowFPS),(global->FpsCount > 0)); gtk_widget_show (ShowFPS); g_signal_connect (GTK_CHECK_BUTTON(ShowFPS), "toggled", G_CALLBACK (ShowFPS_changed), all_data); // add resolution combo box line++; gtk_combo_box_set_active(GTK_COMBO_BOX(gwidget->Resolution),defres); if(global->debug) g_print("Def. Res: %i numb. fps:%i\n",defres,videoIn->listFormats->listVidFormats[videoIn->listFormats->current_format].listVidCap[defres].numb_frates); gtk_grid_attach (GTK_GRID(table2), gwidget->Resolution, 1, line, 1 ,1); gtk_widget_show (gwidget->Resolution); gtk_widget_set_sensitive (gwidget->Resolution, TRUE); g_signal_connect (gwidget->Resolution, "changed", G_CALLBACK (resolution_changed), all_data); labelResol = gtk_label_new(_("Resolution:")); gtk_misc_set_alignment (GTK_MISC (labelResol), 1, 0.5); gtk_grid_attach (GTK_GRID(table2), labelResol, 0, line, 1, 1); gtk_widget_show (labelResol); // Input Format line++; gwidget->InpType= gtk_combo_box_text_new (); gtk_widget_set_halign (gwidget->InpType, GTK_ALIGN_FILL); gtk_widget_set_hexpand (gwidget->InpType, TRUE); int fmtind=0; for (fmtind=0; fmtind < videoIn->listFormats->numb_formats; fmtind++) { gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(gwidget->InpType),videoIn->listFormats->listVidFormats[fmtind].fourcc); if(global->format == videoIn->listFormats->listVidFormats[fmtind].format) gtk_combo_box_set_active(GTK_COMBO_BOX(gwidget->InpType),fmtind); /*set active*/ } gtk_grid_attach (GTK_GRID(table2), gwidget->InpType, 1, line, 1 ,1); gtk_widget_set_sensitive (gwidget->InpType, TRUE); g_signal_connect (GTK_COMBO_BOX_TEXT(gwidget->InpType), "changed", G_CALLBACK (InpType_changed), all_data); gtk_widget_show (gwidget->InpType); label_InpType = gtk_label_new(_("Camera Output:")); gtk_misc_set_alignment (GTK_MISC (label_InpType), 1, 0.5); gtk_grid_attach (GTK_GRID(table2), label_InpType, 0, line, 1, 1); gtk_widget_show (label_InpType); //jpeg compression quality for MJPEG and JPEG input formats if((global->format == V4L2_PIX_FMT_MJPEG || global->format == V4L2_PIX_FMT_JPEG) && videoIn->jpgcomp.quality > 0) { line++; gwidget->jpeg_comp = gtk_spin_button_new_with_range(0,100,1); gtk_widget_set_halign (gwidget->jpeg_comp, GTK_ALIGN_FILL); gtk_widget_set_hexpand (gwidget->jpeg_comp, TRUE); /*can't edit the spin value by hand*/ gtk_editable_set_editable(GTK_EDITABLE(gwidget->jpeg_comp),FALSE); gtk_spin_button_set_value (GTK_SPIN_BUTTON(gwidget->jpeg_comp), videoIn->jpgcomp.quality); gtk_grid_attach (GTK_GRID(table2), gwidget->jpeg_comp, 1, line, 1 ,1); gtk_widget_set_sensitive (gwidget->jpeg_comp, TRUE); gtk_widget_show (gwidget->jpeg_comp); set_jpeg_comp = gtk_button_new_with_label(_("Apply")); gtk_grid_attach (GTK_GRID(table2), set_jpeg_comp, 2, line, 1 ,1); g_signal_connect (GTK_BUTTON (set_jpeg_comp), "clicked", G_CALLBACK (set_jpeg_comp_clicked), all_data); gtk_widget_set_sensitive (set_jpeg_comp, TRUE); gtk_widget_show (set_jpeg_comp); label_jpeg_comp = gtk_label_new(_("Quality:")); gtk_misc_set_alignment (GTK_MISC (label_jpeg_comp), 1, 0.5); gtk_grid_attach (GTK_GRID(table2), label_jpeg_comp, 0, line, 1 ,1); gtk_widget_show (label_jpeg_comp); } // Filter controls line++; label_videoFilters = gtk_label_new(_("---- Video Filters ----")); gtk_misc_set_alignment (GTK_MISC (label_videoFilters), 0.5, 0.5); gtk_grid_attach (GTK_GRID(table2), label_videoFilters, 0, line, 3, 1); gtk_widget_show (label_videoFilters); line++; table_filt = gtk_grid_new(); gtk_grid_set_row_spacing (GTK_GRID (table_filt), 4); gtk_grid_set_column_spacing (GTK_GRID (table_filt), 4); gtk_container_set_border_width (GTK_CONTAINER (table_filt), 4); gtk_widget_set_size_request (table_filt, -1, -1); gtk_widget_set_halign (table_filt, GTK_ALIGN_FILL); gtk_widget_set_hexpand (table_filt, TRUE); gtk_grid_attach (GTK_GRID(table2), table_filt, 0, line, 3, 1); gtk_widget_show (table_filt); // Mirror FiltMirrorEnable=gtk_check_button_new_with_label (_(" Mirror")); g_object_set_data (G_OBJECT (FiltMirrorEnable), "filt_info", GINT_TO_POINTER(YUV_MIRROR)); gtk_widget_set_halign (FiltMirrorEnable, GTK_ALIGN_FILL); gtk_widget_set_hexpand (FiltMirrorEnable, TRUE); gtk_grid_attach(GTK_GRID(table_filt), FiltMirrorEnable, 0, 0, 1, 1); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(FiltMirrorEnable),(global->Frame_Flags & YUV_MIRROR)>0); gtk_widget_show (FiltMirrorEnable); g_signal_connect (GTK_CHECK_BUTTON(FiltMirrorEnable), "toggled", G_CALLBACK (FiltEnable_changed), all_data); // Upturn FiltUpturnEnable=gtk_check_button_new_with_label (_(" Invert")); g_object_set_data (G_OBJECT (FiltUpturnEnable), "filt_info", GINT_TO_POINTER(YUV_UPTURN)); gtk_widget_set_halign (FiltUpturnEnable, GTK_ALIGN_FILL); gtk_widget_set_hexpand (FiltUpturnEnable, TRUE); gtk_grid_attach(GTK_GRID(table_filt), FiltUpturnEnable, 1, 0, 1, 1); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(FiltUpturnEnable),(global->Frame_Flags & YUV_UPTURN)>0); gtk_widget_show (FiltUpturnEnable); g_signal_connect (GTK_CHECK_BUTTON(FiltUpturnEnable), "toggled", G_CALLBACK (FiltEnable_changed), all_data); // Negate FiltNegateEnable=gtk_check_button_new_with_label (_(" Negative")); g_object_set_data (G_OBJECT (FiltNegateEnable), "filt_info", GINT_TO_POINTER(YUV_NEGATE)); gtk_widget_set_halign (FiltNegateEnable, GTK_ALIGN_FILL); gtk_widget_set_hexpand (FiltNegateEnable, TRUE); gtk_grid_attach(GTK_GRID(table_filt), FiltNegateEnable, 2, 0, 1, 1); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(FiltNegateEnable),(global->Frame_Flags & YUV_NEGATE)>0); gtk_widget_show (FiltNegateEnable); g_signal_connect (GTK_CHECK_BUTTON(FiltNegateEnable), "toggled", G_CALLBACK (FiltEnable_changed), all_data); // Mono FiltMonoEnable=gtk_check_button_new_with_label (_(" Mono")); g_object_set_data (G_OBJECT (FiltMonoEnable), "filt_info", GINT_TO_POINTER(YUV_MONOCR)); gtk_widget_set_halign (FiltMonoEnable, GTK_ALIGN_FILL); gtk_widget_set_hexpand (FiltMonoEnable, TRUE); gtk_grid_attach(GTK_GRID(table_filt), FiltMonoEnable, 3, 0, 1, 1); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(FiltMonoEnable),(global->Frame_Flags & YUV_MONOCR)>0); gtk_widget_show (FiltMonoEnable); g_signal_connect (GTK_CHECK_BUTTON(FiltMonoEnable), "toggled", G_CALLBACK (FiltEnable_changed), all_data); // Pieces FiltPiecesEnable=gtk_check_button_new_with_label (_(" Pieces")); g_object_set_data (G_OBJECT (FiltPiecesEnable), "filt_info", GINT_TO_POINTER(YUV_PIECES)); gtk_widget_set_halign (FiltPiecesEnable, GTK_ALIGN_FILL); gtk_widget_set_hexpand (FiltPiecesEnable, TRUE); gtk_grid_attach(GTK_GRID(table_filt), FiltPiecesEnable, 4, 0, 1, 1); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(FiltPiecesEnable),(global->Frame_Flags & YUV_PIECES)>0); gtk_widget_show (FiltPiecesEnable); g_signal_connect (GTK_CHECK_BUTTON(FiltPiecesEnable), "toggled", G_CALLBACK (FiltEnable_changed), all_data); // Particles FiltParticlesEnable=gtk_check_button_new_with_label (_(" Particles")); g_object_set_data (G_OBJECT (FiltParticlesEnable), "filt_info", GINT_TO_POINTER(YUV_PARTICLES)); gtk_widget_set_halign (FiltParticlesEnable, GTK_ALIGN_FILL); gtk_widget_set_hexpand (FiltParticlesEnable, TRUE); gtk_grid_attach(GTK_GRID(table_filt), FiltParticlesEnable, 5, 0, 1, 1); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(FiltParticlesEnable),(global->Frame_Flags & YUV_PARTICLES)>0); gtk_widget_show (FiltParticlesEnable); g_signal_connect (GTK_CHECK_BUTTON(FiltParticlesEnable), "toggled", G_CALLBACK (FiltEnable_changed), all_data); } guvcview-src-1.7.1/src/timers.c0000664000175000017500000002614412173235416015441 0ustar paulopaulo/*******************************************************************************# # guvcview http://guvcview.sourceforge.net # # # # Paulo Assis # # # # 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # # ********************************************************************************/ #include /* support for internationalization - i18n */ #include #include #include #include #include #include #include "string_utils.h" #include "v4l2uvc.h" #include "globals.h" #include "guvcview.h" #include "callbacks.h" #include "close.h" #define __VMUTEX &videoIn->mutex /* called for timed shutdown (from video thread)*/ gboolean shutd_timer(gpointer data) { /*stop video capture*/ shutd (0, data); return (FALSE);/*destroys the timer*/ } /* called by video capture from start timer */ gboolean timer_callback(gpointer data) { struct ALL_DATA * all_data = (struct ALL_DATA *) data; struct GLOBAL *global = all_data->global; struct GWIDGET *gwidget = all_data->gwidget; /*stop video capture*/ if(global->debug) g_print("setting video toggle to FALSE\n"); if(!global->no_display) { //gdk_threads_enter(); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(gwidget->CapVidButt), FALSE); gdk_flush(); //gdk_threads_leave(); } else { capture_vid(NULL, all_data); } global->Capture_time=0; //if exit_on_close then shutdown if(global->exit_on_close) shutd (0, data); return (FALSE);/*destroys the timer*/ } /*called by timed capture [-c seconds] command line option*/ gboolean Image_capture_timer(gpointer data) { struct ALL_DATA * all_data = (struct ALL_DATA *) data; struct GLOBAL *global = all_data->global; struct GWIDGET *gwidget = all_data->gwidget; struct vdIn *videoIn = all_data->videoIn; global->image_picn++; if(global->image_inc > 0) { /*increment image name */ videoIn->ImageFName = incFilename(videoIn->ImageFName, global->imgFPath, global->image_inc); if(!global->no_display) { char *message = g_strjoin(" ", _("capturing photo to"), videoIn->ImageFName, NULL); gtk_statusbar_pop (GTK_STATUSBAR(gwidget->status_bar), gwidget->status_warning_id); gtk_statusbar_push (GTK_STATUSBAR(gwidget->status_bar), gwidget->status_warning_id, message); g_free(message); } global->image_inc++; } else videoIn->ImageFName = joinPath(videoIn->ImageFName, global->imgFPath); videoIn->capImage = TRUE; if(global->image_picn >= global->image_npics) { /*destroy timer*/ if(!global->no_display) { //gdk_threads_enter(); gtk_button_set_label(GTK_BUTTON(gwidget->CapImageButt),_("Cap. Image")); set_sensitive_img_contrls(TRUE, gwidget);/*enable image controls*/ gdk_flush(); //gdk_threads_leave(); } global->image_timer=0; global->image_picn=0; //if exit_on_close then shutdown if(global->exit_on_close) shutd (0, data); return (FALSE); } else return (TRUE);/*keep the timer*/ } /* called by fps counter every 2 sec */ gboolean FpsCount_callback(gpointer data) { struct ALL_DATA * all_data = (struct ALL_DATA *) data; struct GLOBAL *global = all_data->global; global->DispFps = (double) global->frmCount / 2; if (global->FpsCount>0) return(TRUE); /*keeps the timer*/ else { if(!global->no_display) { g_snprintf(global->WVcaption,10,"GUVCVideo"); SDL_WM_SetCaption(global->WVcaption, NULL); } return (FALSE);/*destroys the timer*/ } } /* * Not a timer callback * Regular function to determine if enought free space is available * returns TRUE if still enough free space left on disk * FALSE otherwise */ gboolean DiskSupervisor(gpointer data) { struct ALL_DATA * all_data = (struct ALL_DATA *) data; struct GLOBAL *global = all_data->global; struct vdIn *videoIn = all_data->videoIn; int free_tresh = 51200; //50Mb - default for compressed data int percent = 0; QWORD free_kbytes=0; QWORD total_kbytes=0; struct statfs buf; switch(global->VidCodec) { case 0: //MJPEG free_tresh = 102400; // 100Mb break; case 1: //yuyv free_tresh = 358400; // 300Mb break; case 2: //rgb free_tresh = 512000; // 500Mb break; default: //lavc free_tresh = 51200; //50Mb break; } statfs(global->vidFPath[1], &buf); total_kbytes= buf.f_blocks * (buf.f_bsize/1024); free_kbytes= buf.f_bavail * (buf.f_bsize/1024); if(total_kbytes > 0) percent = (int) ((1.0f-((float)free_kbytes/(float)total_kbytes))*100.0f); else { g_printerr("couldn't get disk stats for %s\n", videoIn->VidFName); return (TRUE); /* don't invalidate video capture*/ } if(global->debug) g_print("(%s) %lluK bytes free on a total of %lluK (used: %d %%) treshold=%iK\n", global->vidFPath[1], (unsigned long long) free_kbytes, (unsigned long long) total_kbytes, percent, free_tresh); if(free_kbytes < free_tresh) { g_printerr("Not enough free disk space (%lluKb) left on disk, need > %ik \n", (unsigned long long) free_kbytes, free_tresh); WARN_DIALOG(N_("Guvcview Warning:"), N_("Not enough free space left on disk"), data); return(FALSE); /* not enough free space left on disk */ } else return (TRUE); /* still have enough free space on disk */ } /* called by video capture every 10 sec for checking disk free space*/ gboolean FreeDiskCheck_timer(gpointer data) { struct ALL_DATA * all_data = (struct ALL_DATA *) data; struct vdIn *videoIn = all_data->videoIn; struct GLOBAL *global = all_data->global; struct GWIDGET *gwidget = all_data->gwidget; __LOCK_MUTEX(__VMUTEX); gboolean capVid = videoIn->capVid; __UNLOCK_MUTEX(__VMUTEX); if (capVid) { if(!DiskSupervisor(data)) { g_printerr("Stopping video Capture\n"); /*stop video capture*/ if(global->debug) g_print("setting video toggle to FALSE\n"); if(!global->no_display) { //gdk_threads_enter(); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(gwidget->CapVidButt), FALSE); gdk_flush(); //gdk_threads_leave(); } else capture_vid(NULL, all_data); } else return(TRUE); /*keeps the timer*/ } return (FALSE);/*destroys the timer*/ } /* check for udev events for v4l2 devices*/ gboolean check_v4l2_udev_events(gpointer data) { struct ALL_DATA * all_data = (struct ALL_DATA *) data; struct vdIn *videoIn = all_data->videoIn; struct GLOBAL *global = all_data->global; struct GWIDGET *gwidget = all_data->gwidget; fd_set fds; struct timeval tv; int ret; FD_ZERO(&fds); FD_SET(videoIn->udev_fd, &fds); tv.tv_sec = 0; tv.tv_usec = 0; ret = select(videoIn->udev_fd+1, &fds, NULL, NULL, &tv); /* Check if our file descriptor has received data. */ if (ret > 0 && FD_ISSET(videoIn->udev_fd, &fds)) { /* Make the call to receive the device. select() ensured that this will not block. */ struct udev_device *dev = udev_monitor_receive_device(videoIn->udev_mon); if (dev) { if (global->debug) { g_print("Got Device event\n"); g_print(" Node: %s\n", udev_device_get_devnode(dev)); g_print(" Subsystem: %s\n", udev_device_get_subsystem(dev)); g_print(" Devtype: %s\n", udev_device_get_devtype(dev)); g_print(" Action: %s\n",udev_device_get_action(dev)); } /*update device list*/ g_signal_handlers_block_by_func(GTK_COMBO_BOX_TEXT(gwidget->Devices), G_CALLBACK (Devices_changed), all_data); /* clear out the old device list... */ if(videoIn->listDevices != NULL) freeDevices(videoIn->listDevices); GtkListStore *store = GTK_LIST_STORE(gtk_combo_box_get_model (GTK_COMBO_BOX(gwidget->Devices))); gtk_list_store_clear(store); /*create new device list*/ videoIn->listDevices = enum_devices( videoIn->videodevice, videoIn->udev, global->debug ); if (videoIn->listDevices->num_devices < 1) { //use current gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(gwidget->Devices), videoIn->videodevice); gtk_combo_box_set_active(GTK_COMBO_BOX(gwidget->Devices),0); } else { int i=0; for(i=0;i<(videoIn->listDevices->num_devices);i++) { gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(gwidget->Devices), videoIn->listDevices->listVidDevices[i].name); if(videoIn->listDevices->listVidDevices[i].current) gtk_combo_box_set_active(GTK_COMBO_BOX(gwidget->Devices),i); } } g_signal_handlers_unblock_by_func(GTK_COMBO_BOX_TEXT(gwidget->Devices), G_CALLBACK (Devices_changed), all_data); udev_device_unref(dev); } else g_printerr("No Device from receive_device(). An error occured.\n"); } return(TRUE); } guvcview-src-1.7.1/src/guvcview.h0000775000175000017500000000654512173235416016010 0ustar paulopaulo/*******************************************************************************# # guvcview http://guvcview.sourceforge.net # # # # Paulo Assis # # Nobuhiro Iwamatsu # # Add UYVY color support(Macbook iSight) # # George Sedov # # Threaded encoding # # default action selector for Webcam button # # # # 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # # ********************************************************************************/ #ifndef GUVCVIEW_H #define GUVCVIEW_H #include "v4l2uvc.h" #include "sound.h" #include "autofocus.h" #include "video_format.h" /* Must set this as global so they */ /* can be set from any callback. */ struct GWIDGET { /* The main window*/ GtkWidget *mainwin; /* A restart Dialog */ GtkWidget *restartdialog; /*Paned containers*/ GtkWidget *maintable; GtkWidget *boxh; //group list for menu video codecs GSList *vgroup; //group list for menu audio codecs GSList *agroup; //menu top widgets GtkWidget *menu_photo_top; GtkWidget *menu_video_top; GtkWidget *status_bar; GtkWidget *label_SndAPI; GtkWidget *SndAPI; GtkWidget *SndEnable; GtkWidget *SndSampleRate; GtkWidget *SndDevice; GtkWidget *SndNumChan; GtkWidget *SndComp; /*must be called from main loop if capture timer enabled*/ GtkWidget *ImageType; GtkWidget *CapImageButt; GtkWidget *CapVidButt; GtkWidget *Resolution; GtkWidget *InpType; GtkWidget *FrameRate; GtkWidget *Devices; GtkWidget *jpeg_comp; GtkWidget *quitButton; gboolean vid_widget_state; int status_warning_id; }; struct ALL_DATA { struct paRecordData *pdata; struct GLOBAL *global; struct focusData *AFdata; struct vdIn *videoIn; struct VideoFormatData *videoF; struct GWIDGET *gwidget; struct VidState *s; __THREAD_TYPE video_thread; __THREAD_TYPE audio_thread; __THREAD_TYPE IO_thread; }; #endif guvcview-src-1.7.1/src/v4l2_dyna_ctrls.h0000664000175000017500000000624212173235416017151 0ustar paulopaulo/*******************************************************************************# # guvcview http://guvcview.sourceforge.net # # # # Paulo Assis # # # # 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # # ********************************************************************************/ #ifndef V4L2_DYNA_CTRLS_H #define V4L2_DYNA_CTRLS_H #include #include /* * Dynamic controls */ #define V4L2_CID_BASE_EXTCTR 0x0A046D01 #define V4L2_CID_BASE_LOGITECH V4L2_CID_BASE_EXTCTR //#define V4L2_CID_PAN_RELATIVE_LOGITECH V4L2_CID_BASE_LOGITECH //#define V4L2_CID_TILT_RELATIVE_LOGITECH V4L2_CID_BASE_LOGITECH+1 #define V4L2_CID_PANTILT_RESET_LOGITECH V4L2_CID_BASE_LOGITECH+2 /*this should realy be replaced by V4L2_CID_FOCUS_ABSOLUTE in libwebcam*/ #define V4L2_CID_FOCUS_LOGITECH V4L2_CID_BASE_LOGITECH+3 #define V4L2_CID_LED1_MODE_LOGITECH V4L2_CID_BASE_LOGITECH+4 #define V4L2_CID_LED1_FREQUENCY_LOGITECH V4L2_CID_BASE_LOGITECH+5 #define V4L2_CID_DISABLE_PROCESSING_LOGITECH V4L2_CID_BASE_LOGITECH+0x70 #define V4L2_CID_RAW_BITS_PER_PIXEL_LOGITECH V4L2_CID_BASE_LOGITECH+0x71 #define V4L2_CID_LAST_EXTCTR V4L2_CID_RAW_BITS_PER_PIXEL_LOGITECH #define UVC_GUID_LOGITECH_VIDEO_PIPE {0x82, 0x06, 0x61, 0x63, 0x70, 0x50, 0xab, 0x49, 0xb8, 0xcc, 0xb3, 0x85, 0x5e, 0x8d, 0x22, 0x50} #define UVC_GUID_LOGITECH_MOTOR_CONTROL {0x82, 0x06, 0x61, 0x63, 0x70, 0x50, 0xab, 0x49, 0xb8, 0xcc, 0xb3, 0x85, 0x5e, 0x8d, 0x22, 0x56} #define UVC_GUID_LOGITECH_USER_HW_CONTROL {0x82, 0x06, 0x61, 0x63, 0x70, 0x50, 0xab, 0x49, 0xb8, 0xcc, 0xb3, 0x85, 0x5e, 0x8d, 0x22, 0x1f} #define XU_HW_CONTROL_LED1 1 #define XU_MOTORCONTROL_PANTILT_RELATIVE 1 #define XU_MOTORCONTROL_PANTILT_RESET 2 #define XU_MOTORCONTROL_FOCUS 3 #define XU_COLOR_PROCESSING_DISABLE 5 #define XU_RAW_DATA_BITS_PER_PIXEL 8 int initDynCtrls(int fd); #endif guvcview-src-1.7.1/src/profile.h0000664000175000017500000000346212173235416015601 0ustar paulopaulo/*******************************************************************************# # guvcview http://guvcview.sourceforge.net # # # # Paulo Assis # # # # 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # # ********************************************************************************/ #ifndef PROFILE_H #define PROFILE_H #include "v4l2uvc.h" #include "guvcview.h" #include "globals.h" int SaveControls(struct ALL_DATA *all_data); int LoadControls(struct ALL_DATA *all_data); #endif guvcview-src-1.7.1/src/callbacks.c0000775000175000017500000020032112173235416016047 0ustar paulopaulo/*******************************************************************************# # guvcview http://guvcview.sourceforge.net # # # # Paulo Assis # # Nobuhiro Iwamatsu # # # # # # 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # # ********************************************************************************/ #include /* support for internationalization - i18n */ #include #include #include #include #include #include "v4l2uvc.h" #include "v4l2_dyna_ctrls.h" #include "avilib.h" #include "globals.h" #include "sound.h" #include "snd_devices.h" #include "ms_time.h" #include "string_utils.h" #include "video.h" #include "acodecs.h" #include "profile.h" #include "close.h" #include "timers.h" #include "callbacks.h" #include "vcodecs.h" #include "lavc_common.h" #include "create_video.h" #include "video_format.h" #include "image_format.h" #define __AMUTEX &pdata->mutex #define __VMUTEX &videoIn->mutex #define __GMUTEX &global->mutex /*--------------------------- warning message dialog ----------------------------*/ void WARN_DIALOG(const char *warn_title, const char* warn_msg, struct ALL_DATA *all_data) { struct GLOBAL *global = all_data->global; struct GWIDGET *gwidget = all_data->gwidget; if(global->no_display) { g_print("WARNING: %s\n", warn_msg); } else { GtkWidget *warndialog; warndialog = gtk_message_dialog_new (GTK_WINDOW(gwidget->mainwin), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_WARNING, GTK_BUTTONS_CLOSE, "%s",gettext(warn_title)); gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(warndialog), "%s",gettext(warn_msg)); gtk_widget_show(warndialog); gtk_dialog_run (GTK_DIALOG (warndialog)); gtk_widget_destroy (warndialog); } } /*---------------------------- error message dialog -----------------------------*/ void ERR_DIALOG(const char *err_title, const char* err_msg, struct ALL_DATA *all_data) { struct GWIDGET *gwidget = all_data->gwidget; struct GLOBAL *global = all_data->global; struct vdIn *videoIn = all_data->videoIn; gboolean control_only = (global->control_only || global->add_ctrls); if(global->no_display) { g_printerr("ERROR: %s\n", err_msg); } else { int i=0; GtkWidget *errdialog=NULL; GtkWidget *Devices=NULL; if (videoIn->listDevices->num_devices > 1) { errdialog = gtk_dialog_new_with_buttons (_("Error"), GTK_WINDOW(gwidget->mainwin), GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT, NULL); GtkWidget *table = gtk_grid_new(); GtkWidget *title = gtk_label_new (gettext(err_title)); gtk_widget_modify_font(title, pango_font_description_from_string ("Sans bold 10")); gtk_misc_set_alignment (GTK_MISC (title), 0, 0); gtk_grid_attach (GTK_GRID (table), title, 0, 0, 2, 1); gtk_widget_show (title); GtkWidget *text = gtk_label_new (gettext(err_msg)); gtk_widget_modify_font(text, pango_font_description_from_string ("Sans italic 8")); gtk_misc_set_alignment (GTK_MISC (text), 0, 0); gtk_grid_attach (GTK_GRID (table), text, 0, 1, 2, 1); gtk_widget_show (text); GtkWidget *text2 = gtk_label_new (_("\nYou have more than one video device installed.\n" "Do you want to try another one ?\n")); gtk_widget_modify_font(text2, pango_font_description_from_string ("Sans 10")); gtk_misc_set_alignment (GTK_MISC (text2), 0, 0); gtk_grid_attach (GTK_GRID (table), text2, 0, 2, 2, 1); gtk_widget_show (text2); GtkWidget *lbl_dev = gtk_label_new(_("Device:")); gtk_misc_set_alignment (GTK_MISC (lbl_dev), 0.5, 0.5); gtk_grid_attach (GTK_GRID(table), lbl_dev, 0, 3, 1, 1); gtk_widget_show (lbl_dev); Devices = gtk_combo_box_text_new (); for(i=0;i<(videoIn->listDevices->num_devices);i++) { gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(Devices), videoIn->listDevices->listVidDevices[i].name); } gtk_combo_box_set_active(GTK_COMBO_BOX(Devices),videoIn->listDevices->num_devices-1); gtk_grid_attach(GTK_GRID(table), Devices, 1, 3, 1, 1); gtk_widget_show (Devices); GtkWidget *content_area = gtk_dialog_get_content_area (GTK_DIALOG (errdialog)); gtk_container_add (GTK_CONTAINER (content_area), table); gtk_widget_show (table); } else { errdialog = gtk_message_dialog_new (GTK_WINDOW(gwidget->mainwin), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE, "%s",gettext(err_title)); gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(errdialog), "%s",gettext(err_msg)); } //gtk_widget_show(errdialog); gint result = gtk_dialog_run (GTK_DIALOG (errdialog)); switch (result) { case GTK_RESPONSE_ACCEPT: { /*launch another guvcview instance for the selected device*/ int index = gtk_combo_box_get_active(GTK_COMBO_BOX(Devices)); //if(index == videoIn->listDevices->current_device) // break; g_free(global->videodevice); global->videodevice = g_strdup(videoIn->listDevices->listVidDevices[index].device); gchar *command = g_strjoin("", g_get_prgname(), " --device=", global->videodevice, NULL); /*spawn new process*/ GError *error = NULL; if(!(g_spawn_command_line_async(command, &error))) { g_printerr ("spawn failed: %s\n", error->message); g_error_free ( error ); } } break; default: /* do nothing since dialog was cancelled or closed */ break; } gtk_widget_destroy (errdialog); } clean_struct(all_data); /* error dialog is allways called before creating the main loop */ /* so no need for gtk_main_quit() */ /* but this means we must close portaudio before exiting */ if(!control_only) { g_print("Closing portaudio ..."); if (Pa_Terminate() != paNoError) g_print("Error\n"); else g_print("OK\n"); } g_print("Terminated.\n");; exit(1); }; static void filename_update_extension (GtkComboBox *chooser, GtkWidget *file_dialog) { int index = gtk_combo_box_get_active (chooser); fprintf(stderr, "DEBUG: file filter changed to %i\n", index); gchar* filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER (file_dialog)); char *basename = g_path_get_basename(filename); //GtkFileFilter *filter = gtk_file_chooser_get_filter(GTK_FILE_CHOOSER (file_dialog)); //if(G_IS_OBJECT(filter)) // g_object_unref(filter); GtkFileFilter *filter = gtk_file_filter_new(); int flag_vid = GPOINTER_TO_INT(g_object_get_data (G_OBJECT (chooser), "format_combo")); if(flag_vid) { gtk_file_chooser_set_current_name (GTK_FILE_CHOOSER (file_dialog), setVidExt(basename, index)); gtk_file_filter_add_pattern(filter, get_vformat_pattern(index)); } else { gtk_file_chooser_set_current_name (GTK_FILE_CHOOSER (file_dialog), setImgExt(basename, index)); gtk_file_filter_add_pattern(filter, get_iformat_pattern(index)); } gtk_file_chooser_set_filter(GTK_FILE_CHOOSER (file_dialog), filter); g_free(basename); g_free(filename); } void file_chooser (GtkWidget * FileButt, struct ALL_DATA *all_data) { struct GWIDGET *gwidget = all_data->gwidget; struct GLOBAL *global = all_data->global; GtkWidget *FileDialog = gtk_file_chooser_dialog_new (_("Save File"), GTK_WINDOW(gwidget->mainwin), GTK_FILE_CHOOSER_ACTION_SAVE, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT, NULL); gtk_file_chooser_set_do_overwrite_confirmation (GTK_FILE_CHOOSER (FileDialog), TRUE); /** create a file filter */ GtkFileFilter *filter = gtk_file_filter_new(); GtkWidget *FBox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 2); GtkWidget *format_label = gtk_label_new(_("File Format:")); gtk_widget_set_halign (FBox, GTK_ALIGN_FILL); gtk_widget_set_hexpand (FBox, TRUE); gtk_widget_set_hexpand (format_label, FALSE); gtk_widget_show(FBox); gtk_widget_show(format_label); gtk_box_pack_start(GTK_BOX(FBox), format_label, FALSE, FALSE, 2); int flag_vid = GPOINTER_TO_INT(g_object_get_data (G_OBJECT (FileButt), "file_butt")); if(flag_vid) { /* video File chooser*/ gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (FileDialog), global->vidFPath[1]); gtk_file_chooser_set_current_name (GTK_FILE_CHOOSER (FileDialog), global->vidFPath[0]); /** add format file filters*/ GtkWidget *VidFormat = gtk_combo_box_text_new (); gtk_widget_set_halign (VidFormat, GTK_ALIGN_FILL); gtk_widget_set_hexpand (VidFormat, TRUE); int vformat_ind =0; for (vformat_ind =0; vformat_indVidFormat); gtk_box_pack_start(GTK_BOX(FBox), VidFormat, FALSE, FALSE, 2); gtk_widget_show(VidFormat); /**add a pattern to the filter*/ gtk_file_filter_add_pattern(filter, get_vformat_pattern(global->VidFormat)); gtk_file_chooser_set_filter(GTK_FILE_CHOOSER (FileDialog), filter); gtk_file_chooser_set_extra_widget(GTK_FILE_CHOOSER (FileDialog), FBox); g_object_set_data (G_OBJECT (VidFormat), "format_combo", GINT_TO_POINTER(1)); g_signal_connect (GTK_COMBO_BOX(VidFormat), "changed", G_CALLBACK (filename_update_extension), FileDialog); if (gtk_dialog_run (GTK_DIALOG (FileDialog)) == GTK_RESPONSE_ACCEPT) { gchar *fullname = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (FileDialog)); global->vidFPath=splitPath(fullname, global->vidFPath); g_free(fullname); /*get the file type*/ global->VidFormat = check_video_type(global->vidFPath[0]); /** check for webm and change codecs acordingly */ if(global->VidFormat == WEBM_FORMAT) { int vcodec_ind = get_list_vcodec_index(CODEC_ID_VP8); int acodec_ind = get_list_acodec_index(CODEC_ID_VORBIS); if(vcodec_ind >= 0 && acodec_ind >= 0) { if(global->AudCodec != acodec_ind) { fprintf(stderr, "WARN: changing audio codec ind (%i --> %i)\n", global->AudCodec, acodec_ind); global->AudCodec = acodec_ind; //this is also set by the gwidget->SndComp calback int index = g_slist_length (gwidget->agroup) - (global->AudCodec + 1); GtkWidget* codec_item = g_slist_nth_data (gwidget->agroup, index); gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(codec_item), TRUE); //gtk_combo_box_set_active(GTK_COMBO_BOX(gwidget->SndComp), global->AudCodec); } if(global->VidCodec != vcodec_ind) { fprintf(stderr, "WARN: changing video codec ind (%i --> %i)\n", global->VidCodec, vcodec_ind); global->VidCodec = vcodec_ind;//this is also set by the gwidget->VidCodec calback int index = g_slist_length (gwidget->vgroup) - (global->VidCodec + 1); GtkWidget* codec_item = g_slist_nth_data (gwidget->vgroup, index); gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(codec_item), TRUE); //gtk_combo_box_set_active(GTK_COMBO_BOX(gwidget->VidCodec), global->VidCodec); } } else { fprintf(stderr, "ERROR: can't find webm codecs (VP8 , VORBIS)\n"); fprintf(stderr, " using matroska muxer instead\n"); global->VidFormat = MKV_FORMAT; gtk_combo_box_set_active (GTK_COMBO_BOX(VidFormat), global->VidFormat); } } if(global->vid_inc>0) { uint64_t suffix = get_file_suffix(global->vidFPath[1], global->vidFPath[0]); fprintf(stderr, "Video file suffix detected: %" PRIu64 "\n", suffix); if(suffix >= G_MAXUINT64) { global->vidFPath[0] = add_file_suffix(global->vidFPath[0], suffix); suffix = 0; } if(suffix >= 0) global->vid_inc = suffix + 1; } } } else { /* Image File chooser*/ gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (FileDialog), global->imgFPath[1]); gtk_file_chooser_set_current_name (GTK_FILE_CHOOSER (FileDialog), global->imgFPath[0]); /** add format file filters*/ GtkWidget *ImgFormat = gtk_combo_box_text_new (); gtk_widget_set_halign (ImgFormat, GTK_ALIGN_FILL); gtk_widget_set_hexpand (ImgFormat, TRUE); int iformat_ind =0; for (iformat_ind =0; iformat_indimgFormat); gtk_box_pack_start(GTK_BOX(FBox), ImgFormat, FALSE, FALSE, 2); gtk_widget_show(ImgFormat); /**add a pattern to the filter*/ gtk_file_filter_add_pattern(filter, get_iformat_pattern(global->imgFormat)); gtk_file_chooser_set_filter(GTK_FILE_CHOOSER (FileDialog), filter); gtk_file_chooser_set_extra_widget(GTK_FILE_CHOOSER (FileDialog), FBox); g_object_set_data (G_OBJECT (ImgFormat), "format_combo", GINT_TO_POINTER(0)); g_signal_connect (GTK_COMBO_BOX(ImgFormat), "changed", G_CALLBACK (filename_update_extension), FileDialog); if (gtk_dialog_run (GTK_DIALOG (FileDialog)) == GTK_RESPONSE_ACCEPT) { gchar *fullname = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (FileDialog)); global->imgFPath=splitPath(fullname, global->imgFPath); g_free(fullname); /*get the file type*/ global->imgFormat = check_image_type(global->imgFPath[0]); if(global->image_inc>0) { uint64_t suffix = get_file_suffix(global->imgFPath[1], global->imgFPath[0]); fprintf(stderr, "Image file suffix detected: %" PRIu64 "\n", suffix); if(suffix >= G_MAXUINT64) { global->imgFPath[0] = add_file_suffix(global->imgFPath[0], suffix); suffix = 0; } if(suffix >= 0) global->image_inc = suffix + 1; } } } //GtkFileFilter* current_filter = gtk_file_chooser_get_filter(GTK_FILE_CHOOSER (FileDialog)); //if(G_IS_OBJECT(current_filter)) // g_object_unref(current_filter); gtk_widget_destroy (FileDialog); } void lavc_properties(GtkMenuItem * codec_prop, struct ALL_DATA *all_data) { struct GLOBAL *global = all_data->global; struct GWIDGET *gwidget = all_data->gwidget; int line = 0; vcodecs_data *codec_defaults = get_codec_defaults(global->VidCodec); if (!(codec_defaults->avcodec)) return; GtkWidget *codec_dialog = gtk_dialog_new_with_buttons (_("codec values"), GTK_WINDOW(gwidget->mainwin), GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT, NULL); GtkWidget *table = gtk_grid_new(); GtkWidget *lbl_fps = gtk_label_new(_(" encoder fps: \n (0 - use fps combobox value)")); gtk_misc_set_alignment (GTK_MISC (lbl_fps), 1, 0.5); gtk_grid_attach (GTK_GRID(table), lbl_fps, 0, line, 1, 1); gtk_widget_show (lbl_fps); GtkWidget *enc_fps = gtk_spin_button_new_with_range(0,30,5); gtk_editable_set_editable(GTK_EDITABLE(enc_fps),TRUE); gtk_spin_button_set_value (GTK_SPIN_BUTTON(enc_fps), codec_defaults->fps); gtk_grid_attach (GTK_GRID(table), enc_fps, 1, line, 1, 1); gtk_widget_show (enc_fps); line++; GtkWidget *monotonic_pts = gtk_check_button_new_with_label (_(" monotonic pts")); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(monotonic_pts),(codec_defaults->monotonic_pts != 0)); gtk_grid_attach (GTK_GRID(table), monotonic_pts, 1, line, 1, 1); gtk_widget_show (monotonic_pts); line++; GtkWidget *lbl_bit_rate = gtk_label_new(_("bit rate: ")); gtk_misc_set_alignment (GTK_MISC (lbl_bit_rate), 1, 0.5); gtk_grid_attach (GTK_GRID(table), lbl_bit_rate, 0, line, 1, 1); gtk_widget_show (lbl_bit_rate); GtkWidget *bit_rate = gtk_spin_button_new_with_range(160000,4000000,10000); gtk_editable_set_editable(GTK_EDITABLE(bit_rate),TRUE); gtk_spin_button_set_value (GTK_SPIN_BUTTON(bit_rate), codec_defaults->bit_rate); gtk_grid_attach (GTK_GRID(table), bit_rate, 1, line, 1, 1); gtk_widget_show (bit_rate); line++; GtkWidget *lbl_qmax = gtk_label_new(_("qmax: ")); gtk_misc_set_alignment (GTK_MISC (lbl_qmax), 1, 0.5); gtk_grid_attach (GTK_GRID(table), lbl_qmax, 0, line, 1 ,1); gtk_widget_show (lbl_qmax); GtkWidget *qmax = gtk_spin_button_new_with_range(1,60,1); gtk_editable_set_editable(GTK_EDITABLE(qmax),TRUE); gtk_spin_button_set_value (GTK_SPIN_BUTTON(qmax), codec_defaults->qmax); gtk_grid_attach (GTK_GRID(table), qmax, 1, line, 1, 1); gtk_widget_show (qmax); line++; GtkWidget *lbl_qmin = gtk_label_new(_("qmin: ")); gtk_misc_set_alignment (GTK_MISC (lbl_qmin), 1, 0.5); gtk_grid_attach (GTK_GRID(table), lbl_qmin, 0, line, 1, 1); gtk_widget_show (lbl_qmin); GtkWidget *qmin = gtk_spin_button_new_with_range(1,31,1); gtk_editable_set_editable(GTK_EDITABLE(qmin),TRUE); gtk_spin_button_set_value (GTK_SPIN_BUTTON(qmin), codec_defaults->qmin); gtk_grid_attach (GTK_GRID(table), qmin, 1, line, 1, 1); gtk_widget_show (qmin); line++; GtkWidget *lbl_max_qdiff = gtk_label_new(_("max. qdiff: ")); gtk_misc_set_alignment (GTK_MISC (lbl_max_qdiff), 1, 0.5); gtk_grid_attach (GTK_GRID(table), lbl_max_qdiff, 0, line, 1, 1); gtk_widget_show (lbl_max_qdiff); GtkWidget *max_qdiff = gtk_spin_button_new_with_range(1,4,1); gtk_editable_set_editable(GTK_EDITABLE(max_qdiff),TRUE); gtk_spin_button_set_value (GTK_SPIN_BUTTON(max_qdiff), codec_defaults->max_qdiff); gtk_grid_attach (GTK_GRID(table), max_qdiff, 1, line, 1, 1); gtk_widget_show (max_qdiff); line++; GtkWidget *lbl_dia = gtk_label_new(_("dia size: ")); gtk_misc_set_alignment (GTK_MISC (lbl_dia), 1, 0.5); gtk_grid_attach (GTK_GRID(table), lbl_dia, 0, line, 1, 1); gtk_widget_show (lbl_dia); GtkWidget *dia = gtk_spin_button_new_with_range(-1,4,1); gtk_editable_set_editable(GTK_EDITABLE(dia),TRUE); gtk_spin_button_set_value (GTK_SPIN_BUTTON(dia), codec_defaults->dia); gtk_grid_attach (GTK_GRID(table), dia, 1, line, 1, 1); gtk_widget_show (dia); line++; GtkWidget *lbl_pre_dia = gtk_label_new(_("pre dia size: ")); gtk_misc_set_alignment (GTK_MISC (lbl_pre_dia), 1, 0.5); gtk_grid_attach (GTK_GRID(table), lbl_pre_dia, 0, line, 1, 1); gtk_widget_show (lbl_pre_dia); GtkWidget *pre_dia = gtk_spin_button_new_with_range(1,4,1); gtk_editable_set_editable(GTK_EDITABLE(pre_dia),TRUE); gtk_spin_button_set_value (GTK_SPIN_BUTTON(pre_dia), codec_defaults->pre_dia); gtk_grid_attach (GTK_GRID(table), pre_dia, 1, line, 1, 1); gtk_widget_show (pre_dia); line++; GtkWidget *lbl_pre_me = gtk_label_new(_("pre me: ")); gtk_misc_set_alignment (GTK_MISC (lbl_pre_me), 1, 0.5); gtk_grid_attach (GTK_GRID(table), lbl_pre_me, 0, line, 1, 1); gtk_widget_show (lbl_pre_me); GtkWidget *pre_me = gtk_spin_button_new_with_range(0,2,1); gtk_editable_set_editable(GTK_EDITABLE(pre_me),TRUE); gtk_spin_button_set_value (GTK_SPIN_BUTTON(pre_me), codec_defaults->pre_me); gtk_grid_attach (GTK_GRID(table), pre_me, 1, line, 1, 1); gtk_widget_show (pre_me); line++; GtkWidget *lbl_me_pre_cmp = gtk_label_new(_("pre cmp: ")); gtk_misc_set_alignment (GTK_MISC (lbl_me_pre_cmp), 1, 0.5); gtk_grid_attach (GTK_GRID(table), lbl_me_pre_cmp, 0, line, 1, 1); gtk_widget_show (lbl_me_pre_cmp); GtkWidget *me_pre_cmp = gtk_spin_button_new_with_range(0,6,1); gtk_editable_set_editable(GTK_EDITABLE(me_pre_cmp),TRUE); gtk_spin_button_set_value (GTK_SPIN_BUTTON(me_pre_cmp), codec_defaults->me_pre_cmp); gtk_grid_attach (GTK_GRID(table), me_pre_cmp, 1, line, 1, 1); gtk_widget_show (me_pre_cmp); line++; GtkWidget *lbl_me_cmp = gtk_label_new(_("cmp: ")); gtk_misc_set_alignment (GTK_MISC (lbl_me_cmp), 1, 0.5); gtk_grid_attach (GTK_GRID(table), lbl_me_cmp, 0, line, 1, 1); gtk_widget_show (lbl_me_cmp); GtkWidget *me_cmp = gtk_spin_button_new_with_range(0,6,1); gtk_editable_set_editable(GTK_EDITABLE(me_cmp),TRUE); gtk_spin_button_set_value (GTK_SPIN_BUTTON(me_cmp), codec_defaults->me_cmp); gtk_grid_attach (GTK_GRID(table), me_cmp, 1, line, 1, 1); gtk_widget_show (me_cmp); line++; GtkWidget *lbl_me_sub_cmp = gtk_label_new(_("sub cmp: ")); gtk_misc_set_alignment (GTK_MISC (lbl_me_sub_cmp), 1, 0.5); gtk_grid_attach (GTK_GRID(table), lbl_me_sub_cmp, 0, line, 1, 1); gtk_widget_show (lbl_me_sub_cmp); GtkWidget *me_sub_cmp = gtk_spin_button_new_with_range(0,6,1); gtk_editable_set_editable(GTK_EDITABLE(me_sub_cmp),TRUE); gtk_spin_button_set_value (GTK_SPIN_BUTTON(me_sub_cmp), codec_defaults->me_sub_cmp); gtk_grid_attach (GTK_GRID(table), me_sub_cmp, 1, line, 1, 1); gtk_widget_show (me_sub_cmp); line++; GtkWidget *lbl_last_pred = gtk_label_new(_("last predictor count: ")); gtk_misc_set_alignment (GTK_MISC (lbl_last_pred), 1, 0.5); gtk_grid_attach (GTK_GRID(table), lbl_last_pred, 0, line, 1, 1); gtk_widget_show (lbl_last_pred); GtkWidget *last_pred = gtk_spin_button_new_with_range(1,3,1); gtk_editable_set_editable(GTK_EDITABLE(last_pred),TRUE); gtk_spin_button_set_value (GTK_SPIN_BUTTON(last_pred), codec_defaults->last_pred); gtk_grid_attach (GTK_GRID(table), last_pred, 1, line, 1, 1); gtk_widget_show (last_pred); line++; GtkWidget *lbl_gop_size = gtk_label_new(_("gop size: ")); gtk_misc_set_alignment (GTK_MISC (lbl_gop_size), 1, 0.5); gtk_grid_attach (GTK_GRID(table), lbl_gop_size, 0, line, 1, 1); gtk_widget_show (lbl_gop_size); GtkWidget *gop_size = gtk_spin_button_new_with_range(1,250,1); gtk_editable_set_editable(GTK_EDITABLE(gop_size),TRUE); gtk_spin_button_set_value (GTK_SPIN_BUTTON(gop_size), codec_defaults->gop_size); gtk_grid_attach (GTK_GRID(table), gop_size, 1, line, 1, 1); gtk_widget_show (gop_size); line++; GtkWidget *lbl_qcompress = gtk_label_new(_("qcompress: ")); gtk_misc_set_alignment (GTK_MISC (lbl_qcompress), 1, 0.5); gtk_grid_attach (GTK_GRID(table), lbl_qcompress, 0, line, 1, 1); gtk_widget_show (lbl_qcompress); GtkWidget *qcompress = gtk_spin_button_new_with_range(0,1,0.1); gtk_editable_set_editable(GTK_EDITABLE(qcompress),TRUE); gtk_spin_button_set_value (GTK_SPIN_BUTTON(qcompress), codec_defaults->qcompress); gtk_grid_attach (GTK_GRID(table), qcompress, 1, line, 1 ,1); gtk_widget_show (qcompress); line++; GtkWidget *lbl_qblur = gtk_label_new(_("qblur: ")); gtk_misc_set_alignment (GTK_MISC (lbl_qblur), 1, 0.5); gtk_grid_attach (GTK_GRID(table), lbl_qblur, 0, line, 1 ,1); gtk_widget_show (lbl_qblur); GtkWidget *qblur = gtk_spin_button_new_with_range(0,1,0.1); gtk_editable_set_editable(GTK_EDITABLE(qblur),TRUE); gtk_spin_button_set_value (GTK_SPIN_BUTTON(qblur), codec_defaults->qblur); gtk_grid_attach (GTK_GRID(table), qblur, 1, line, 1 ,1); gtk_widget_show (qblur); line++; GtkWidget *lbl_subq = gtk_label_new(_("subq: ")); gtk_misc_set_alignment (GTK_MISC (lbl_subq), 1, 0.5); gtk_grid_attach (GTK_GRID(table), lbl_subq, 0, line, 1 ,1); gtk_widget_show (lbl_subq); GtkWidget *subq = gtk_spin_button_new_with_range(0,8,1); gtk_editable_set_editable(GTK_EDITABLE(subq),TRUE); gtk_spin_button_set_value (GTK_SPIN_BUTTON(subq), codec_defaults->subq); gtk_grid_attach (GTK_GRID(table), subq, 1, line, 1 ,1); gtk_widget_show (subq); line++; GtkWidget *lbl_framerefs = gtk_label_new(_("framerefs: ")); gtk_misc_set_alignment (GTK_MISC (lbl_framerefs), 1, 0.5); gtk_grid_attach (GTK_GRID(table), lbl_framerefs, 0, line, 1 ,1); gtk_widget_show (lbl_framerefs); GtkWidget *framerefs = gtk_spin_button_new_with_range(0,12,1); gtk_editable_set_editable(GTK_EDITABLE(framerefs),TRUE); gtk_spin_button_set_value (GTK_SPIN_BUTTON(framerefs), codec_defaults->framerefs); gtk_grid_attach (GTK_GRID(table), framerefs, 1, line, 1 ,1); gtk_widget_show (framerefs); line++; GtkWidget *lbl_me_method = gtk_label_new(_("me method: ")); gtk_misc_set_alignment (GTK_MISC (lbl_me_method), 1, 0.5); gtk_grid_attach (GTK_GRID(table), lbl_me_method, 0, line, 1 ,1); gtk_widget_show (lbl_me_method); GtkWidget *me_method = gtk_spin_button_new_with_range(1,10,1); gtk_editable_set_editable(GTK_EDITABLE(me_method),TRUE); gtk_spin_button_set_value (GTK_SPIN_BUTTON(me_method), codec_defaults->me_method); gtk_grid_attach (GTK_GRID(table), me_method, 1, line, 1 ,1); gtk_widget_show (me_method); line++; GtkWidget *lbl_mb_decision = gtk_label_new(_("mb decision: ")); gtk_misc_set_alignment (GTK_MISC (lbl_mb_decision), 1, 0.5); gtk_grid_attach (GTK_GRID(table), lbl_mb_decision, 0, line, 1 ,1); gtk_widget_show (lbl_mb_decision); GtkWidget *mb_decision = gtk_spin_button_new_with_range(0,2,1); gtk_editable_set_editable(GTK_EDITABLE(mb_decision),TRUE); gtk_spin_button_set_value (GTK_SPIN_BUTTON(mb_decision), codec_defaults->mb_decision); gtk_grid_attach (GTK_GRID(table), mb_decision, 1, line, 1 ,1); gtk_widget_show (mb_decision); line++; GtkWidget *lbl_max_b_frames = gtk_label_new(_("max B frames: ")); gtk_misc_set_alignment (GTK_MISC (lbl_max_b_frames), 1, 0.5); gtk_grid_attach (GTK_GRID(table), lbl_max_b_frames, 0, line, 1 ,1); gtk_widget_show (lbl_max_b_frames); GtkWidget *max_b_frames = gtk_spin_button_new_with_range(0,4,1); gtk_editable_set_editable(GTK_EDITABLE(max_b_frames),TRUE); gtk_spin_button_set_value (GTK_SPIN_BUTTON(max_b_frames), codec_defaults->max_b_frames); gtk_grid_attach (GTK_GRID(table), max_b_frames, 1, line, 1 ,1); gtk_widget_show (max_b_frames); line++; GtkWidget *lbl_num_threads = gtk_label_new(_("num threads: ")); gtk_misc_set_alignment (GTK_MISC (lbl_num_threads), 1, 0.5); gtk_grid_attach (GTK_GRID(table), lbl_num_threads, 0, line, 1 ,1); gtk_widget_show (lbl_num_threads); GtkWidget *num_threads = gtk_spin_button_new_with_range(0,8,1); gtk_editable_set_editable(GTK_EDITABLE(num_threads),TRUE); gtk_spin_button_set_value (GTK_SPIN_BUTTON(num_threads), codec_defaults->num_threads); gtk_grid_attach (GTK_GRID(table), num_threads, 1, line, 1 ,1); gtk_widget_show (num_threads); line++; GtkWidget *content_area = gtk_dialog_get_content_area (GTK_DIALOG (codec_dialog)); gtk_container_add (GTK_CONTAINER (content_area), table); gtk_widget_show (table); gint result = gtk_dialog_run (GTK_DIALOG (codec_dialog)); switch (result) { case GTK_RESPONSE_ACCEPT: codec_defaults->fps = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON(enc_fps)); codec_defaults->monotonic_pts = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(monotonic_pts)); codec_defaults->bit_rate = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON(bit_rate)); codec_defaults->qmax = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON(qmax)); codec_defaults->qmin = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON(qmin)); codec_defaults->max_qdiff = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON(max_qdiff)); codec_defaults->dia = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON(dia)); codec_defaults->pre_dia = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON(pre_dia)); codec_defaults->pre_me = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON(pre_me)); codec_defaults->me_pre_cmp = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON(me_pre_cmp)); codec_defaults->me_cmp = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON(me_cmp)); codec_defaults->me_sub_cmp = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON(me_sub_cmp)); codec_defaults->last_pred = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON(last_pred)); codec_defaults->gop_size = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON(gop_size)); codec_defaults->qcompress = (float) gtk_spin_button_get_value (GTK_SPIN_BUTTON(qcompress)); codec_defaults->qblur = (float) gtk_spin_button_get_value (GTK_SPIN_BUTTON(qblur)); codec_defaults->subq = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON(subq)); codec_defaults->framerefs = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON(framerefs)); codec_defaults->me_method = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON(me_method)); codec_defaults->mb_decision = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON(mb_decision)); codec_defaults->max_b_frames = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON(max_b_frames)); codec_defaults->num_threads = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON(num_threads)); break; default: // do nothing since dialog was cancelled break; } gtk_widget_destroy (codec_dialog); } void lavc_audio_properties(GtkMenuItem * codec_prop, struct ALL_DATA *all_data) { struct GLOBAL *global = all_data->global; struct GWIDGET *gwidget = all_data->gwidget; int line = 0; acodecs_data *codec_defaults = get_aud_codec_defaults(global->AudCodec); if (!(codec_defaults->avcodec)) return; GtkWidget *codec_dialog = gtk_dialog_new_with_buttons (_("audio codec values"), GTK_WINDOW(gwidget->mainwin), GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT, NULL); GtkWidget *table = gtk_grid_new(); gtk_grid_set_column_homogeneous (GTK_GRID(table), TRUE); /*bit rate*/ GtkWidget *lbl_bit_rate = gtk_label_new(_("bit rate: ")); gtk_misc_set_alignment (GTK_MISC (lbl_bit_rate), 1, 0.5); gtk_grid_attach (GTK_GRID(table), lbl_bit_rate, 0, line, 1, 1); gtk_widget_show (lbl_bit_rate); GtkWidget *bit_rate = gtk_spin_button_new_with_range(48000,384000,8000); gtk_editable_set_editable(GTK_EDITABLE(bit_rate),TRUE); gtk_spin_button_set_value (GTK_SPIN_BUTTON(bit_rate), codec_defaults->bit_rate); gtk_grid_attach (GTK_GRID(table), bit_rate, 1, line, 1, 1); gtk_widget_show (bit_rate); line++; /*sample format*/ GtkWidget *lbl_sample_fmt = gtk_label_new(_("sample format: ")); gtk_misc_set_alignment (GTK_MISC (lbl_sample_fmt), 1, 0.5); gtk_grid_attach (GTK_GRID(table), lbl_sample_fmt, 0, line, 1, 1); gtk_widget_show (lbl_sample_fmt); GtkWidget *sample_fmt = gtk_spin_button_new_with_range(0, AV_SAMPLE_FMT_NB, 1); gtk_editable_set_editable(GTK_EDITABLE(sample_fmt),TRUE); gtk_spin_button_set_value (GTK_SPIN_BUTTON(sample_fmt), codec_defaults->sample_format); gtk_grid_attach (GTK_GRID(table), sample_fmt, 1, line, 1, 1); gtk_widget_show (sample_fmt); line++; GtkWidget *content_area = gtk_dialog_get_content_area (GTK_DIALOG (codec_dialog)); gtk_container_add (GTK_CONTAINER (content_area), table); gtk_widget_show (table); gint result = gtk_dialog_run (GTK_DIALOG (codec_dialog)); switch (result) { case GTK_RESPONSE_ACCEPT: codec_defaults->bit_rate = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON(bit_rate)); codec_defaults->sample_format = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON(sample_fmt)); break; default: // do nothing since dialog was cancelled break; } gtk_widget_destroy (codec_dialog); } /*------------------------------ Event handlers -------------------------------*/ /* window close */ gint delete_event (GtkWidget *widget, GdkEventConfigure *event, void *data) { struct ALL_DATA *all_data = (struct ALL_DATA *) data; shutd(0, all_data);//shutDown return 0; } /*--------------------------- controls enable/disable --------------------------*/ /*image controls*/ void set_sensitive_img_contrls (const int flag, struct GWIDGET *gwidget) { gtk_widget_set_sensitive(gwidget->menu_photo_top, flag);/*image menu entry*/ } /* sound controls*/ void set_sensitive_snd_contrls (const int flag, struct GWIDGET *gwidget) { gtk_widget_set_sensitive (gwidget->SndAPI, flag); gtk_widget_set_sensitive (gwidget->SndSampleRate, flag); gtk_widget_set_sensitive (gwidget->SndDevice, flag); gtk_widget_set_sensitive (gwidget->SndNumChan, flag); } /*video controls*/ void set_sensitive_vid_contrls (const int flag, const int sndEnable, struct GWIDGET *gwidget) { /* sound and video compression controls */ gtk_widget_set_sensitive(gwidget->menu_video_top, flag);/*video menu entry*/ gtk_widget_set_sensitive (gwidget->SndEnable, flag); /* resolution and input format combos */ gtk_widget_set_sensitive (gwidget->Resolution, flag); gtk_widget_set_sensitive (gwidget->InpType, flag); gtk_widget_set_sensitive (gwidget->FrameRate, flag); if(sndEnable > 0) { set_sensitive_snd_contrls(flag, gwidget); } gwidget->vid_widget_state = flag; } gboolean key_pressed (GtkWidget *win, GdkEventKey *event, struct ALL_DATA *all_data) { struct VidState *s = all_data->s; struct GWIDGET *gwidget = all_data->gwidget; struct vdIn *videoIn = all_data->videoIn; //struct GLOBAL *global = all_data->global; /* If we have modifiers, and either Ctrl, Mod1 (Alt), or any * of Mod3 to Mod5 (Mod2 is num-lock...) are pressed, we * let Gtk+ handle the key */ //printf("camera key pressed (key:%i)\n", event->keyval); if (event->state != 0 && ((event->state & GDK_CONTROL_MASK) || (event->state & GDK_MOD1_MASK) || (event->state & GDK_MOD3_MASK) || (event->state & GDK_MOD4_MASK) || (event->state & GDK_MOD5_MASK))) return FALSE; if(videoIn->PanTilt) { switch (event->keyval) { case GDK_KEY_Down: case GDK_KEY_KP_Down: /*Tilt Down*/ uvcPanTilt (videoIn->fd, s->control_list, 0, 1); return TRUE; case GDK_KEY_Up: case GDK_KEY_KP_Up: /*Tilt UP*/ uvcPanTilt (videoIn->fd, s->control_list, 0, -1); return TRUE; case GDK_KEY_Left: case GDK_KEY_KP_Left: /*Pan Left*/ uvcPanTilt (videoIn->fd, s->control_list, 1, 1); return TRUE; case GDK_KEY_Right: case GDK_KEY_KP_Right: /*Pan Right*/ uvcPanTilt (videoIn->fd, s->control_list, 1, -1); return TRUE; default: break; } } switch (event->keyval) { case GDK_KEY_WebCam: /* camera button pressed - trigger image capture*/ if (all_data->global->default_action == 0) { gtk_button_clicked (GTK_BUTTON(gwidget->CapImageButt)); } else { gtk_toggle_button_toggled (GTK_TOGGLE_BUTTON(gwidget->CapVidButt)); } return TRUE; case GDK_KEY_V: case GDK_KEY_v: gtk_toggle_button_toggled (GTK_TOGGLE_BUTTON(gwidget->CapVidButt)); return TRUE; case GDK_KEY_I: case GDK_KEY_i: gtk_button_clicked (GTK_BUTTON(gwidget->CapImageButt)); return TRUE; } return FALSE; } /*----------------------------- Callbacks ------------------------------------*/ /*slider controls callback*/ void slider_changed (GtkRange * range, struct ALL_DATA *all_data) { struct VidState *s = all_data->s; //struct GLOBAL *global = all_data->global; struct vdIn *videoIn = all_data->videoIn; int id = GPOINTER_TO_INT(g_object_get_data (G_OBJECT (range), "control_info")); Control *c = get_ctrl_by_id(s->control_list, id); int val = (int) gtk_range_get_value (range); c->value = val; set_ctrl(videoIn->fd, s->control_list, id); //update spin if(c->spinbutton) { //disable widget signals g_signal_handlers_block_by_func(GTK_SPIN_BUTTON(c->spinbutton), G_CALLBACK (spin_changed), all_data); gtk_spin_button_set_value (GTK_SPIN_BUTTON(c->spinbutton), c->value); //enable widget signals g_signal_handlers_unblock_by_func(GTK_SPIN_BUTTON(c->spinbutton), G_CALLBACK (spin_changed), all_data); } s = NULL; //global = NULL; videoIn = NULL; } /*spin controls callback*/ void spin_changed (GtkSpinButton * spin, struct ALL_DATA *all_data) { struct VidState *s = all_data->s; //struct GLOBAL *global = all_data->global; struct vdIn *videoIn = all_data->videoIn; int id = GPOINTER_TO_INT(g_object_get_data (G_OBJECT (spin), "control_info")); Control *c = get_ctrl_by_id(s->control_list, id); int val = gtk_spin_button_get_value_as_int (spin); c->value = val; set_ctrl(videoIn->fd, s->control_list, id); if(c->widget) { //disable widget signals g_signal_handlers_block_by_func(GTK_SCALE (c->widget), G_CALLBACK (slider_changed), all_data); gtk_range_set_value (GTK_RANGE (c->widget), c->value); //enable widget signals g_signal_handlers_unblock_by_func(GTK_SCALE (c->widget), G_CALLBACK (slider_changed), all_data); } s = NULL; //global = NULL; videoIn = NULL; } /*set video frame jpeg quality/compression*/ void set_jpeg_comp_clicked (GtkButton * jpeg_comp, struct ALL_DATA *all_data) { struct GWIDGET *gwidget = all_data->gwidget; struct vdIn *videoIn = all_data->videoIn; videoIn->jpgcomp.quality = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON(gwidget->jpeg_comp)); videoIn->setJPEGCOMP = 1; videoIn = NULL; } /*check box controls callback*/ void autofocus_changed (GtkToggleButton * toggle, struct ALL_DATA *all_data) { struct VidState *s = all_data->s; struct GLOBAL *global = all_data->global; struct focusData *AFdata = all_data->AFdata; struct vdIn *videoIn = all_data->videoIn; //int id = GPOINTER_TO_INT(g_object_get_data (G_OBJECT (toggle), "control_info")); Control *c = get_ctrl_by_id(s->control_list, AFdata->id); int val = gtk_toggle_button_get_active (toggle) ? 1 : 0; /*if autofocus disable manual focus control*/ gtk_widget_set_sensitive (c->widget, !val); gtk_widget_set_sensitive (c->spinbutton, !val); /*reset flag*/ AFdata->flag = 0; AFdata->ind = 0; AFdata->focus = -1; /*reset focus*/ AFdata->right = AFdata->f_max; AFdata->left = AFdata->i_step; /*set focus to first value if autofocus enabled*/ if (val>0) { c->value = AFdata->focus; set_ctrl(videoIn->fd, s->control_list, AFdata->id); } global->autofocus = val; global = NULL; AFdata = NULL; videoIn = NULL; } void check_changed (GtkToggleButton * toggle, struct ALL_DATA *all_data) { struct VidState *s = all_data->s; //struct GLOBAL *global = all_data->global; struct vdIn *videoIn = all_data->videoIn; int id = GPOINTER_TO_INT(g_object_get_data (G_OBJECT (toggle), "control_info")); Control *c = get_ctrl_by_id(s->control_list, id); int val = gtk_toggle_button_get_active (toggle) ? 1 : 0; c->value = val; set_ctrl(videoIn->fd, s->control_list, id); if(id == V4L2_CID_DISABLE_PROCESSING_LOGITECH) { if (c->value > 0) videoIn->isbayer=1; else videoIn->isbayer=0; //restart stream by changing fps videoIn->setFPS = 1; } s = NULL; //global = NULL; videoIn = NULL; } void pix_ord_changed (GtkComboBox * combo, struct ALL_DATA *all_data) { struct vdIn *videoIn = all_data->videoIn; int index = gtk_combo_box_get_active (combo); videoIn->pix_order=index; videoIn=NULL; } /*combobox controls callback*/ void combo_changed (GtkComboBox * combo, struct ALL_DATA *all_data) { struct VidState *s = all_data->s; struct vdIn *videoIn = all_data->videoIn; int id = GPOINTER_TO_INT(g_object_get_data (G_OBJECT (combo), "control_info")); Control *c = get_ctrl_by_id(s->control_list, id); int index = gtk_combo_box_get_active (combo); c->value = c->menu[index].index; set_ctrl(videoIn->fd, s->control_list, id); s = NULL; videoIn = NULL; } /* generic button control */ void button_clicked (GtkButton * Button, struct ALL_DATA *all_data) { struct VidState *s = all_data->s; struct vdIn *videoIn = all_data->videoIn; int id = GPOINTER_TO_INT(g_object_get_data (G_OBJECT (Button), "control_info")); Control *c = get_ctrl_by_id(s->control_list, id); c->value = 1; set_ctrl(videoIn->fd, s->control_list, id); } /* Pan Tilt button 1 control */ void button_PanTilt1_clicked (GtkButton * Button, struct ALL_DATA *all_data) { struct VidState *s = all_data->s; struct vdIn *videoIn = all_data->videoIn; int id = GPOINTER_TO_INT(g_object_get_data (G_OBJECT (Button), "control_info")); Control *c = get_ctrl_by_id(s->control_list, id); int val = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON(c->spinbutton)); c->value = val; set_ctrl(videoIn->fd, s->control_list, id); } /* Pan Tilt button 2 control */ void button_PanTilt2_clicked (GtkButton * Button, struct ALL_DATA *all_data) { struct VidState *s = all_data->s; struct vdIn *videoIn = all_data->videoIn; int id = GPOINTER_TO_INT(g_object_get_data (G_OBJECT (Button), "control_info")); Control *c = get_ctrl_by_id(s->control_list, id); int val = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON(c->spinbutton)); c->value = -val; set_ctrl(videoIn->fd, s->control_list, id); } /* set focus (for focus motor cameras ex: Logitech Orbit/Sphere and 9000 pro) */ void setfocus_clicked (GtkButton * FocusButton, struct ALL_DATA *all_data) { struct focusData *AFdata = all_data->AFdata; struct vdIn *videoIn = all_data->videoIn; struct VidState *s = all_data->s; AFdata->setFocus = 1; AFdata->ind = 0; AFdata->flag = 0; AFdata->right = 255; AFdata->left = 8; AFdata->focus = -1; /*reset focus*/ Control *c = get_ctrl_by_id(s->control_list, AFdata->id); c->value = AFdata->focus; set_ctrl(videoIn->fd, s->control_list, AFdata->id); AFdata = NULL; videoIn = NULL; } void Devices_changed (GtkComboBox * Devices, struct ALL_DATA *all_data) { struct GWIDGET *gwidget = all_data->gwidget; struct GLOBAL *global = all_data->global; struct vdIn *videoIn = all_data->videoIn; GError *error=NULL; int index = gtk_combo_box_get_active(Devices); if(index == videoIn->listDevices->current_device) return; g_free(global->videodevice); global->videodevice = g_strdup(videoIn->listDevices->listVidDevices[index].device); gchar *command = g_strjoin("", g_get_prgname(), " --device=", global->videodevice, NULL); gwidget->restartdialog = gtk_dialog_new_with_buttons (_("start new"), GTK_WINDOW(gwidget->mainwin), GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, _("restart"), GTK_RESPONSE_ACCEPT, _("new"), GTK_RESPONSE_REJECT, _("cancel"), GTK_RESPONSE_CANCEL, NULL); GtkWidget * content_area = gtk_dialog_get_content_area (GTK_DIALOG (gwidget->restartdialog)); GtkWidget *message = gtk_label_new (_("launch new process or restart?.\n\n")); gtk_container_add (GTK_CONTAINER (content_area), message); gtk_widget_show_all(gwidget->restartdialog); gint result = gtk_dialog_run (GTK_DIALOG (gwidget->restartdialog)); switch (result) { case GTK_RESPONSE_ACCEPT: /*restart app*/ shutd(1, all_data); break; case GTK_RESPONSE_REJECT: /*spawn new process*/ if(!(g_spawn_command_line_async(command, &error))) { g_printerr ("spawn failed: %s\n", error->message); g_error_free ( error ); } break; default: /* do nothing since dialog was canceled*/ break; } /*reset to current device*/ gtk_combo_box_set_active(GTK_COMBO_BOX(Devices), videoIn->listDevices->current_device); gtk_widget_destroy (gwidget->restartdialog); g_free(command); } /*resolution control callback*/ void resolution_changed (GtkComboBox * Resolution, struct ALL_DATA *all_data) { struct GWIDGET *gwidget = all_data->gwidget; struct GLOBAL *global = all_data->global; struct vdIn *videoIn = all_data->videoIn; VidCap *listVidCap = NULL; int current_format = videoIn->listFormats->current_format; int cmb_index = gtk_combo_box_get_active(Resolution); char temp_str[20]; __LOCK_MUTEX(__VMUTEX); gboolean capVid = videoIn->capVid; __UNLOCK_MUTEX(__VMUTEX); /*disable fps combobox signals*/ g_signal_handlers_block_by_func(GTK_COMBO_BOX_TEXT(gwidget->FrameRate), G_CALLBACK (FrameRate_changed), all_data); /* clear out the old fps list... */ GtkListStore *store = GTK_LIST_STORE(gtk_combo_box_get_model (GTK_COMBO_BOX(gwidget->FrameRate))); gtk_list_store_clear(store); listVidCap = &videoIn->listFormats->listVidFormats[current_format].listVidCap[cmb_index]; global->width = listVidCap->width; global->height = listVidCap->height; /*check if frame rate is available at the new resolution*/ int i=0; int deffps=0; for ( i = 0 ; i < listVidCap->numb_frates ; i++) { g_snprintf(temp_str,18,"%i/%i fps", listVidCap->framerate_denom[i], listVidCap->framerate_num[i]); gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(gwidget->FrameRate),temp_str); if (( global->fps_num == listVidCap->framerate_num[i]) && (global->fps == listVidCap->framerate_denom[i])) deffps=i;//set selected } /*set default fps in combo*/ gtk_combo_box_set_active(GTK_COMBO_BOX(gwidget->FrameRate),deffps); /*enable fps combobox signals*/ g_signal_handlers_unblock_by_func(GTK_COMBO_BOX_TEXT(gwidget->FrameRate), G_CALLBACK (FrameRate_changed), all_data); if (listVidCap->framerate_num) global->fps_num = listVidCap->framerate_num[deffps]; if (listVidCap->framerate_denom) global->fps = listVidCap->framerate_denom[deffps]; if(capVid) { gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(gwidget->CapVidButt), FALSE); gdk_flush(); } global->change_res = TRUE; gwidget = NULL; global = NULL; videoIn = NULL; } /* Input Format control */ void InpType_changed(GtkComboBox * InpType, struct ALL_DATA *all_data) { struct GWIDGET *gwidget = all_data->gwidget; struct GLOBAL *global = all_data->global; struct vdIn *videoIn = all_data->videoIn; int format = 0; char temp_str[20]; int index = gtk_combo_box_get_active(InpType); int i=0; //int j=0; int defres = 0; VidFormats *listVidFormats; /*disable resolution combobox signals*/ g_signal_handlers_block_by_func(GTK_COMBO_BOX_TEXT(gwidget->Resolution), G_CALLBACK (resolution_changed), all_data); /* clear out the old resolution list... */ GtkListStore *store = GTK_LIST_STORE(gtk_combo_box_get_model (GTK_COMBO_BOX(gwidget->Resolution))); gtk_list_store_clear(store); videoIn->listFormats->current_format = index; listVidFormats = &videoIn->listFormats->listVidFormats[index]; format = videoIn->listFormats->listVidFormats[videoIn->listFormats->current_format].format; get_PixMode(format, global->mode); /*redraw resolution combo for new format*/ for(i = 0 ; i < listVidFormats->numb_res ; i++) { if (listVidFormats->listVidCap[i].width>0) { g_snprintf(temp_str,18,"%ix%i", listVidFormats->listVidCap[i].width, listVidFormats->listVidCap[i].height); gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(gwidget->Resolution),temp_str); if ((global->width == listVidFormats->listVidCap[i].width) && (global->height == listVidFormats->listVidCap[i].height)) defres=i;//set selected resolution index } } global->height = listVidFormats->listVidCap[defres].height; global->width = listVidFormats->listVidCap[defres].width; global->format = format; /*enable resolution combobox signals*/ g_signal_handlers_unblock_by_func(GTK_COMBO_BOX_TEXT(gwidget->Resolution), G_CALLBACK (resolution_changed), all_data); /*reset resolution/format*/ gtk_combo_box_set_active(GTK_COMBO_BOX(gwidget->Resolution),defres); gwidget = NULL; global = NULL; videoIn = NULL; } /*frame rate control callback*/ void FrameRate_changed (GtkComboBox * FrameRate, struct ALL_DATA *all_data) { struct GWIDGET *gwidget = all_data->gwidget; struct GLOBAL *global = all_data->global; struct vdIn *videoIn = all_data->videoIn; int resind = gtk_combo_box_get_active(GTK_COMBO_BOX(gwidget->Resolution)); int index = gtk_combo_box_get_active (FrameRate); global->fps=videoIn->listFormats->listVidFormats[videoIn->listFormats->current_format].listVidCap[resind].framerate_denom[index]; global->fps_num=videoIn->listFormats->listVidFormats[videoIn->listFormats->current_format].listVidCap[resind].framerate_num[index]; /*fps change is done in two fases: * 1- in video.c we try to change device fps (and set flag to 2) * 2- in v4l2uvc.c (uvcGrab) we query and queue the buffers if using MMAP (and reset flag to 0)*/ videoIn->setFPS=1; gwidget = NULL; global = NULL; videoIn = NULL; } /*sound sample rate control callback*/ void SndSampleRate_changed (GtkComboBox * SampleRate, struct ALL_DATA *all_data) { struct GLOBAL *global = all_data->global; global->Sound_SampRateInd = gtk_combo_box_get_active (SampleRate); global->Sound_SampRate=stdSampleRates[global->Sound_SampRateInd]; global = NULL; } /*Audio API control callback*/ void SndAPI_changed (GtkComboBox * SoundAPI, struct ALL_DATA *all_data) { struct GLOBAL *global = all_data->global; struct paRecordData *pdata = all_data->pdata; //struct GWIDGET *gwidget = all_data->gwidget; global->Sound_API=gtk_combo_box_get_active (SoundAPI); pdata->api = global->Sound_API; update_snd_devices(all_data); g_print("using audio API n:%d\n",global->Sound_API); global = NULL; } /*sound device control callback*/ void SndDevice_changed (GtkComboBox * SoundDevice, struct ALL_DATA *all_data) { struct GLOBAL *global = all_data->global; global->Sound_UseDev=gtk_combo_box_get_active (SoundDevice); g_print("using device id:%d\n",global->Sound_IndexDev[global->Sound_UseDev].id); global = NULL; } /*sound channels control callback*/ void SndNumChan_changed (GtkComboBox * SoundChan, struct ALL_DATA *all_data) { struct GLOBAL *global = all_data->global; /*0-device default 1-mono 2-stereo*/ global->Sound_NumChanInd = gtk_combo_box_get_active (SoundChan); global->Sound_NumChan=global->Sound_NumChanInd; global = NULL; } /*audio compression control callback*/ void AudCodec_menu_changed (GtkRadioMenuItem *acodec_item, struct ALL_DATA *all_data) { struct GLOBAL *global = all_data->global; struct GWIDGET *gwidget = all_data->gwidget; if (gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(acodec_item))) { /**GSList indexes (g_slist_index) are in reverse order: * last inserted has index 0 * so count backwards */ int num_acodecs = g_slist_length(gwidget->agroup); int index = g_slist_index (gwidget->agroup, acodec_item); index = num_acodecs - (index + 1); //reverse order and 0 indexed fprintf(stderr,"DEBUG: audio codec changed to %i\n", index); global->AudCodec = index; } if( global->VidFormat == WEBM_FORMAT && get_acodec_id(global->AudCodec) != CODEC_ID_VORBIS) { //change VidFormat to Matroska fprintf(stderr, "WARN: webm can only use VORBIS audio codec \n"); fprintf(stderr, " using matroska muxer instead\n"); global->VidFormat = MKV_FORMAT; //FIXME: change file extension if needed } global->Sound_Format = get_aud4cc(global->AudCodec); global = NULL; } /*video compression control callback*/ void VidCodec_menu_changed (GtkRadioMenuItem *vcodec_item, struct ALL_DATA *all_data) { struct GLOBAL *global = all_data->global; struct GWIDGET *gwidget = all_data->gwidget; if (gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(vcodec_item))) { /**GSList indexes (g_slist_index) are in reverse order: * last inserted has index 0 * so count backwards */ int num_vcodecs = g_slist_length(gwidget->vgroup); int index = g_slist_index (gwidget->vgroup, vcodec_item); index = num_vcodecs - (index + 1); //reverse order and 0 indexed fprintf(stderr,"DEBUG: video codec changed to %i\n", index); global->VidCodec = index; } if( global->VidFormat == WEBM_FORMAT && get_vcodec_id(global->VidCodec) != CODEC_ID_VP8) { //change VidFormat to Matroska fprintf(stderr, "WARN: webm can only use VP8 video codec (0x%x != 0x%x)\n", global->VidCodec, CODEC_ID_VP8); fprintf(stderr, " using matroska muxer instead\n"); global->VidFormat = MKV_FORMAT; //FIXME: change file extension if needed } global = NULL; } /* sound enable check box callback */ void SndEnable_changed (GtkToggleButton * toggle, struct ALL_DATA *all_data) { struct GWIDGET *gwidget = all_data->gwidget; struct GLOBAL *global = all_data->global; global->Sound_enable = gtk_toggle_button_get_active (toggle) ? 1 : 0; if (!global->Sound_enable) { if(global->debug) g_print("disabling sound.\n"); set_sensitive_snd_contrls(FALSE, gwidget); } else { if(global->debug) g_print("enabling sound.\n"); set_sensitive_snd_contrls(TRUE, gwidget); } gwidget = NULL; global = NULL; } /* Video Filters check box callback */ void FiltEnable_changed(GtkToggleButton * toggle, struct ALL_DATA *all_data) { struct GLOBAL *global = all_data->global; int filter = GPOINTER_TO_INT(g_object_get_data (G_OBJECT (toggle), "filt_info")); __LOCK_MUTEX(__GMUTEX); global->Frame_Flags = gtk_toggle_button_get_active (toggle) ? (global->Frame_Flags | filter) : (global->Frame_Flags & ~(filter)); __UNLOCK_MUTEX(__GMUTEX); global = NULL; } /* Audio effect checkbox callback*/ void EffEnable_changed(GtkToggleButton * toggle, struct ALL_DATA *all_data) { struct paRecordData *pdata = all_data->pdata; int effect = GPOINTER_TO_INT(g_object_get_data (G_OBJECT (toggle), "effect_info")); __LOCK_MUTEX(__AMUTEX); pdata->snd_Flags = gtk_toggle_button_get_active (toggle) ? (pdata->snd_Flags | effect) : (pdata->snd_Flags & ~(effect)); __UNLOCK_MUTEX(__AMUTEX); pdata = NULL; } void osdChanged(GtkToggleButton * toggle, struct ALL_DATA *all_data) { struct GLOBAL *global = all_data->global; int flag = GPOINTER_TO_INT(g_object_get_data (G_OBJECT (toggle), "flag")); global->osdFlags = gtk_toggle_button_get_active(toggle) ? (global->osdFlags | flag) : (global->osdFlags & ~(flag)); } void image_prefix_toggled(GtkWidget * toggle, struct ALL_DATA *all_data) { //struct GWIDGET *gwidget = all_data->gwidget; struct GLOBAL *global = all_data->global; global->image_inc = gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(toggle)) ? 1 : 0; if(global->image_inc > 0) { uint64_t suffix = get_file_suffix(global->imgFPath[1], global->imgFPath[0]); fprintf(stderr, "Image file suffix detected: %" PRIu64 "\n", suffix); if(suffix >= G_MAXUINT64) { global->imgFPath[0] = add_file_suffix(global->imgFPath[0], suffix); suffix = 0; } if(suffix >= 0) global->image_inc = suffix + 1; } global = NULL; } void video_prefix_toggled(GtkWidget * toggle, struct ALL_DATA *all_data) { //struct GWIDGET *gwidget = all_data->gwidget; struct GLOBAL *global = all_data->global; global->vid_inc = gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(toggle)) ? 1 : 0; if(global->vid_inc > 0) { uint64_t suffix = get_file_suffix(global->vidFPath[1], global->vidFPath[0]); fprintf(stderr, "Video file suffix detected: %" PRIu64 "\n", suffix); if(suffix >= G_MAXUINT64) { global->vidFPath[0] = add_file_suffix(global->vidFPath[0], suffix); suffix = 0; } if(suffix >= 0) global->vid_inc = suffix + 1; } global = NULL; } /*----------------------------- Capture Image --------------------------------*/ /*image capture button callback*/ void capture_image (GtkButton *ImageButt, struct ALL_DATA *all_data) { struct GWIDGET *gwidget = all_data->gwidget; struct GLOBAL *global = all_data->global; struct vdIn *videoIn = all_data->videoIn; /** a previous image hasn't been captured yet * no use flaging it again so return */ if(videoIn->capImage) return; if ((global->image_timer == 0) && (global->image_inc>0)) { videoIn->ImageFName = incFilename(videoIn->ImageFName, global->imgFPath, global->image_inc); global->image_inc++; } else { videoIn->ImageFName = joinPath(videoIn->ImageFName, global->imgFPath); } if(global->image_timer > 0) { /*auto capture on -> stop it*/ if (global->image_timer_id > 0) g_source_remove(global->image_timer_id); global->image_timer=0; if(!global->no_display) { gtk_button_set_label(GTK_BUTTON(gwidget->CapImageButt),_("Cap. Image (I)")); set_sensitive_img_contrls(TRUE, gwidget);/*enable image controls*/ } } else { videoIn->capImage = TRUE; } if(!global->no_display) { char *message = g_strjoin(" ", _("capturing photo to"), videoIn->ImageFName, NULL); printf("status message: %s\n", message); gtk_statusbar_pop (GTK_STATUSBAR(gwidget->status_bar), gwidget->status_warning_id); gtk_statusbar_push (GTK_STATUSBAR(gwidget->status_bar), gwidget->status_warning_id, message); g_free(message); } gwidget = NULL; global = NULL; videoIn = NULL; } /*--------------------------- Capture Video ------------------------------------*/ /*video capture button callback*/ void capture_vid (GtkToggleButton *VidButt, struct ALL_DATA *all_data) { struct GWIDGET *gwidget = all_data->gwidget; struct paRecordData *pdata = all_data->pdata; struct GLOBAL *global = all_data->global; struct vdIn *videoIn = all_data->videoIn; __LOCK_MUTEX(__VMUTEX); gboolean capVid = videoIn->capVid; __UNLOCK_MUTEX(__VMUTEX); //char *fileEntr = NULL; gboolean state=!capVid; if(!global->no_display) { //disable signals for this callback g_signal_handlers_block_by_func(GTK_TOGGLE_BUTTON(gwidget->CapVidButt), G_CALLBACK (capture_vid), all_data); //widgets are enable/disable in create_video.c } if(global->debug) g_print("Cap Video toggled: %d\n", state); if(capVid || !state) { /****************** Stop Video ************************/ capVid = FALSE; __LOCK_MUTEX(__VMUTEX); videoIn->capVid = capVid; __UNLOCK_MUTEX(__VMUTEX); __LOCK_MUTEX(__AMUTEX); pdata->capVid = capVid; __UNLOCK_MUTEX(__AMUTEX); /*join IO thread*/ if (global->debug) g_print("Shuting Down IO Thread\n"); __THREAD_JOIN( all_data->IO_thread ); if (global->debug) g_print("IO Thread finished\n"); if(!global->no_display) { if(global->debug) g_print("enabling controls\n"); /*enabling sound and video compression controls*/ set_sensitive_vid_contrls(TRUE, global->Sound_enable, gwidget); if(!(state)) { gtk_button_set_label(GTK_BUTTON(gwidget->CapVidButt),_("Cap. Video (V)")); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(gwidget->CapVidButt), FALSE); //gtk_widget_show (gwidget->VidButton_Img); } } if(global->disk_timer_id) g_source_remove(global->disk_timer_id); global->disk_timer_id = 0; } else if(!(capVid) /*&& state*/) { /******************** Start Video *********************/ if (global->vid_inc>0) { videoIn->VidFName = incFilename(videoIn->VidFName, global->vidFPath, global->vid_inc); global->vid_inc++; } else { videoIn->VidFName = joinPath(videoIn->VidFName, global->vidFPath); } if(!global->no_display) { char * message = g_strjoin(" ", _("capturing video to"), videoIn->VidFName, NULL); gtk_statusbar_pop (GTK_STATUSBAR(gwidget->status_bar), gwidget->status_warning_id); gtk_statusbar_push (GTK_STATUSBAR(gwidget->status_bar), gwidget->status_warning_id, message); g_free(message); } /* check if enough free space is available on disk*/ if(!DiskSupervisor(all_data)) { g_print("Cap Video failed\n"); state = FALSE; } else { /*start disk check timed callback (every 10 sec)*/ if (!global->disk_timer_id) global->disk_timer_id=g_timeout_add(10*1000, FreeDiskCheck_timer, all_data); /*disabling sound and video compression controls*/ if(!global->no_display) set_sensitive_vid_contrls(FALSE, global->Sound_enable, gwidget); /*start IO thread*/ if( __THREAD_CREATE(&all_data->IO_thread, IO_loop, (void *) all_data)) { g_printerr("Thread creation failed\n"); state = FALSE; } } if(!global->no_display) { if(state) { gtk_button_set_label(GTK_BUTTON(gwidget->CapVidButt),_("Stop Video (V)")); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(gwidget->CapVidButt), TRUE); //gtk_widget_show (gwidget->VidButton_Img); } else { gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(gwidget->CapVidButt), FALSE); } } } /*enable signals for this callback*/ if(!global->no_display) g_signal_handlers_unblock_by_func(GTK_TOGGLE_BUTTON(gwidget->CapVidButt), G_CALLBACK (capture_vid), all_data); gwidget = NULL; pdata = NULL; global = NULL; videoIn = NULL; } void camera_button_menu_changed (GtkWidget *item, struct ALL_DATA *all_data) { int flag = GPOINTER_TO_INT(g_object_get_data (G_OBJECT (item), "camera_default")); if (gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(item))) { all_data->global->default_action = flag; //0-image; 1-video } } /*--------------------- buttons callbacks ------------------*/ void Defaults_clicked (GtkWidget *item, struct ALL_DATA *all_data) { struct VidState *s = all_data->s; struct vdIn *videoIn = all_data->videoIn; set_default_values(videoIn->fd, s->control_list, s->num_controls, all_data); } void Profile_clicked (GtkWidget *item, struct ALL_DATA *all_data) { struct GWIDGET *gwidget = all_data->gwidget; //struct VidState *s = all_data->s; struct GLOBAL *global = all_data->global; //struct vdIn *videoIn = all_data->videoIn; GtkWidget *FileDialog; int save = GPOINTER_TO_INT(g_object_get_data (G_OBJECT (item), "profile_dialog")); if(global->debug) g_print("Profile dialog (%d)\n", save); if (save > 0) { FileDialog = gtk_file_chooser_dialog_new (_("Save Profile"), GTK_WINDOW(gwidget->mainwin), GTK_FILE_CHOOSER_ACTION_SAVE, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT, NULL); gtk_file_chooser_set_do_overwrite_confirmation (GTK_FILE_CHOOSER (FileDialog), TRUE); gtk_file_chooser_set_current_name (GTK_FILE_CHOOSER (FileDialog), global->profile_FPath[0]); } else { FileDialog = gtk_file_chooser_dialog_new (_("Load Profile"), GTK_WINDOW(gwidget->mainwin), GTK_FILE_CHOOSER_ACTION_OPEN, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, NULL); } gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (FileDialog), global->profile_FPath[1]); if (gtk_dialog_run (GTK_DIALOG (FileDialog)) == GTK_RESPONSE_ACCEPT) { /*Save Controls Data*/ char *filename= gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (FileDialog)); global->profile_FPath=splitPath(filename,global->profile_FPath); if(save > 0) SaveControls(all_data); else LoadControls(all_data); } gtk_widget_destroy (FileDialog); gwidget = NULL; //s = NULL; global = NULL; //videoIn = NULL; } void ShowFPS_changed(GtkToggleButton * toggle, struct ALL_DATA *all_data) { struct GLOBAL *global = all_data->global; global->FpsCount = gtk_toggle_button_get_active (toggle) ? 1 : 0; if(global->FpsCount > 0) { /*sets the Fps counter timer function every 2 sec*/ global->timer_id = g_timeout_add(2*1000,FpsCount_callback, all_data); } else { if (global->timer_id > 0) g_source_remove(global->timer_id); g_snprintf(global->WVcaption,10,"GUVCVideo"); SDL_WM_SetCaption(global->WVcaption, NULL); } global = NULL; } gboolean image_capture_callback (gpointer data) { struct ALL_DATA *all_data = (struct ALL_DATA *) data; struct GWIDGET *gwidget = all_data->gwidget; gtk_button_clicked (GTK_BUTTON(gwidget->CapImageButt)); return FALSE; } gboolean video_capture_callback (gpointer data) { struct ALL_DATA *all_data = (struct ALL_DATA *) data; struct GWIDGET *gwidget = all_data->gwidget; gtk_toggle_button_toggled (GTK_TOGGLE_BUTTON(gwidget->CapVidButt)); return FALSE; } void quitButton_clicked (GtkButton * quitButton, struct ALL_DATA *all_data) { shutd(0, all_data);//shutDown } guvcview-src-1.7.1/src/lavc_common.c0000775000175000017500000005221512173235416016434 0ustar paulopaulo/*******************************************************************************# # guvcview http://guvcview.sourceforge.net # # # # Paulo Assis # # George Sedov # # - Threaded encoding # # # # 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # # ********************************************************************************/ #include #include #include #include "lavc_common.h" #include "v4l2uvc.h" #include "vcodecs.h" #include "acodecs.h" #include "sound.h" # define AV_RB16(x) \ ((((const uint8_t*)(x))[0] << 8) | \ ((const uint8_t*)(x))[1]) int avpriv_split_xiph_headers(uint8_t *extradata, int extradata_size, int first_header_size, uint8_t *header_start[3], int header_len[3]) { int i; if (extradata_size >= 6 && AV_RB16(extradata) == first_header_size) { int overall_len = 6; for (i=0; i<3; i++) { header_len[i] = AV_RB16(extradata); extradata += 2; header_start[i] = extradata; extradata += header_len[i]; if (overall_len > extradata_size - header_len[i]) return -1; overall_len += header_len[i]; } } else if (extradata_size >= 3 && extradata_size < INT_MAX - 0x1ff && extradata[0] == 2) { int overall_len = 3; extradata++; for (i=0; i<2; i++, extradata++) { header_len[i] = 0; for (; overall_len < extradata_size && *extradata==0xff; extradata++) { header_len[i] += 0xff; overall_len += 0xff + 1; } header_len[i] += *extradata; overall_len += *extradata; if (overall_len > extradata_size) return -1; } header_len[2] = extradata_size - overall_len; header_start[0] = extradata; header_start[1] = header_start[0] + header_len[0]; header_start[2] = header_start[1] + header_len[1]; } else { return -1; } return 0; } static void yuv422to420p(BYTE* pic, struct lavcData* data ) { int i,j; int width = data->codec_context->width; int height = data->codec_context->height; int linesize=width*2; int size = width * height; BYTE *y; BYTE *y1; BYTE *u; BYTE* v; y = data->tmpbuf; y1 = data->tmpbuf + width; u = data->tmpbuf + size; v = u + size/4; for(j=0;j<(height-1);j+=2) { for(i=0;i<(linesize-3);i+=4) { *y++ = pic[i+j*linesize]; *y++ = pic[i+2+j*linesize]; *y1++ = pic[i+(j+1)*linesize]; *y1++ = pic[i+2+(j+1)*linesize]; *u++ = (pic[i+1+j*linesize] + pic[i+1+(j+1)*linesize])>>1; // div by 2 *v++ = (pic[i+3+j*linesize] + pic[i+3+(j+1)*linesize])>>1; } y += width; y1 += width;//2 lines } data->picture->data[0] = data->tmpbuf; //Y data->picture->data[1] = data->tmpbuf + size; //U data->picture->data[2] = data->picture->data[1] + size/4; //V data->picture->linesize[0] = data->codec_context->width; data->picture->linesize[1] = data->codec_context->width / 2; data->picture->linesize[2] = data->codec_context->width / 2; } static void nv12to420p(BYTE* pic, struct lavcData* data ) { int width = data->codec_context->width; int height = data->codec_context->height; int size = width * height; /*FIXME: do we really need this or can we use pic directly ?*/ data->tmpbuf = memcpy(data->tmpbuf, pic, (width*height*3)/2); data->picture->data[0] = data->tmpbuf; //Y data->picture->data[1] = data->tmpbuf + size; //U data->picture->data[2] = data->picture->data[1] + size/4; //V data->picture->linesize[0] = data->codec_context->width; data->picture->linesize[1] = data->codec_context->width / 2; data->picture->linesize[2] = data->codec_context->width / 2; } static void nv21to420p(BYTE* pic, struct lavcData* data ) { int width = data->codec_context->width; int height = data->codec_context->height; int size = width * height; /*FIXME: do we really need this or can we use pic directly ?*/ data->tmpbuf = memcpy(data->tmpbuf, pic, (width*height*3)/2); data->picture->data[0] = data->tmpbuf; //Y data->picture->data[2] = data->tmpbuf + size; //V data->picture->data[1] = data->picture->data[2] + size/4; //U data->picture->linesize[0] = data->codec_context->width; data->picture->linesize[1] = data->codec_context->width / 2; data->picture->linesize[2] = data->codec_context->width / 2; } int encode_lavc_frame (BYTE *picture_buf, struct lavcData* data , int format, struct VideoFormatData *videoF) { int out_size = 0; videoF->vblock_align = data->codec_context->block_align; //videoF->avi->time_base_num = data->codec_context->time_base.num; //videoF->avi->time_base_den = data->codec_context->time_base.den; //convert to 4:2:0 switch (format) { case V4L2_PIX_FMT_NV12: nv12to420p(picture_buf, data ); break; case V4L2_PIX_FMT_NV21: nv21to420p(picture_buf, data ); break; default: yuv422to420p(picture_buf, data ); break; } /* encode the image */ //videoF->frame_number++; if(!data->monotonic_pts) //generate a real pts based on the frame timestamp data->picture->pts += ((videoF->vpts - videoF->old_vpts)/1000) * 90; else //generate a true monotonic pts based on the codec fps data->picture->pts += (data->codec_context->time_base.num*1000/data->codec_context->time_base.den) * 90; videoF->old_vpts = videoF->vpts; if(data->flush_delayed_frames) { //pkt.size = 0; if(!data->flushed_buffers) { avcodec_flush_buffers(data->codec_context); data->flushed_buffers = 1; } } #if LIBAVCODEC_VER_AT_LEAST(54,01) AVPacket pkt; int got_packet = 0; av_init_packet(&pkt); pkt.data = data->outbuf; pkt.size = data->outbuf_size; //if(data->outbuf_size < FF_MIN_BUFFER_SIZE) //{ // av_log(avctx, AV_LOG_ERROR, "buffer smaller than minimum size\n"); // return -1; //} int ret = 0; if(!data->flush_delayed_frames) ret = avcodec_encode_video2(data->codec_context, &pkt, data->picture, &got_packet); else ret = avcodec_encode_video2(data->codec_context, &pkt, NULL, &got_packet); if (!ret && got_packet && data->codec_context->coded_frame) { // Do we really need to set this ??? data->codec_context->coded_frame->pts = pkt.pts; data->codec_context->coded_frame->key_frame = !!(pkt.flags & AV_PKT_FLAG_KEY); } videoF->vdts = pkt.dts; videoF->vflags = pkt.flags; videoF->vduration = pkt.duration; /* free any side data since we cannot return it */ if (pkt.side_data_elems > 0) { int i; for (i = 0; i < pkt.side_data_elems; i++) av_free(pkt.side_data[i].data); av_freep(&pkt.side_data); pkt.side_data_elems = 0; } out_size = pkt.size; #else if(!data->flush_delayed_frames) out_size = avcodec_encode_video(data->codec_context, data->outbuf, data->outbuf_size, data->picture); else out_size = avcodec_encode_video(data->codec_context, data->outbuf, data->outbuf_size, NULL); videoF->vflags = 0; if (data->codec_context->coded_frame->key_frame) videoF->vflags |= AV_PKT_FLAG_KEY; videoF->vdts = AV_NOPTS_VALUE; videoF->vduration = videoF->vpts - videoF->old_vpts; #endif if(data->flush_delayed_frames && out_size == 0) data->flush_done = 1; if(out_size == 0 && data->index_of_df < 0) { data->delayed_pts[data->delayed_frames] = videoF->vpts; data->delayed_frames++; if(data->delayed_frames > MAX_DELAYED_FRAMES) { data->delayed_frames = MAX_DELAYED_FRAMES; printf("WARNING: Maximum of %i delayed video frames reached...\n", MAX_DELAYED_FRAMES); } } else { if(data->delayed_frames > 0) { if(data->index_of_df < 0) { data->index_of_df = 0; printf("WARNING: video codec is using %i delayed video frames\n", data->delayed_frames); } INT64 pts = videoF->vpts; videoF->vpts = data->delayed_pts[data->index_of_df]; data->delayed_pts[data->index_of_df] = pts; data->index_of_df++; if(data->index_of_df >= data->delayed_frames) data->index_of_df = 0; } } return (out_size); } int encode_lavc_audio_frame (void *audio_buf, struct lavcAData* data, struct VideoFormatData *videoF) { int out_size = 0; int ret = 0; videoF->ablock_align = data->codec_context->block_align; /* encode the audio */ #if LIBAVCODEC_VER_AT_LEAST(53,34) AVPacket pkt; int got_packet; av_init_packet(&pkt); pkt.data = data->outbuf; pkt.size = data->outbuf_size; data->frame->nb_samples = data->codec_context->frame_size; int samples_size = av_samples_get_buffer_size(NULL, data->codec_context->channels, data->frame->nb_samples, data->codec_context->sample_fmt, 1); avcodec_fill_audio_frame(data->frame, data->codec_context->channels, data->codec_context->sample_fmt, (const uint8_t *) audio_buf, samples_size, 1); if(!data->monotonic_pts) //generate a real pts based on the frame timestamp data->frame->pts += ((videoF->apts - videoF->old_apts)/1000) * 90; else //generate a true monotonic pts based on the codec fps data->frame->pts += (data->codec_context->time_base.num*1000/data->codec_context->time_base.den) * 90; ret = avcodec_encode_audio2(data->codec_context, &pkt, data->frame, &got_packet); if (!ret && got_packet && data->codec_context->coded_frame) { data->codec_context->coded_frame->pts = pkt.pts; data->codec_context->coded_frame->key_frame = !!(pkt.flags & AV_PKT_FLAG_KEY); } videoF->adts = pkt.dts; videoF->aflags = pkt.flags; videoF->aduration = pkt.duration; /* free any side data since we cannot return it */ //ff_packet_free_side_data(&pkt); if (data->frame && data->frame->extended_data != data->frame->data) av_freep(data->frame->extended_data); out_size = pkt.size; #else out_size = avcodec_encode_audio(data->codec_context, data->outbuf, data->outbuf_size, audio_buf); videoF->adts = AV_NOPTS_VALUE; videoF->aflags = 0; if (data->codec_context->coded_frame->key_frame) videoF->aflags |= AV_PKT_FLAG_KEY; videoF->aduration = videoF->apts - videoF->old_apts;; #endif return (out_size); } int clean_lavc (void* arg) { struct lavcData** data= (struct lavcData**) arg; //int enc_frames =0; if(*data) { if((*data)->priv_data != NULL) g_free((*data)->priv_data); //enc_frames = (*data)->codec_context->real_pict_num; if(!(*data)->flushed_buffers) { avcodec_flush_buffers((*data)->codec_context); (*data)->flushed_buffers = 1; } //close codec avcodec_close((*data)->codec_context); #if LIBAVCODEC_VER_AT_LEAST(53,6) //free private options; struct lavcData *pdata = *data; av_dict_free(&(pdata->private_options)); #endif //free codec context g_free((*data)->codec_context); (*data)->codec_context = NULL; g_free((*data)->tmpbuf); g_free((*data)->outbuf); g_free((*data)->picture); g_free(*data); *data = NULL; } return (0); } int clean_lavc_audio (void* arg) { struct lavcAData** data= (struct lavcAData**) arg; //int enc_frames =0; if(*data) { if((*data)->priv_data != NULL) g_free((*data)->priv_data); //enc_frames = (*data)->codec_context->real_pict_num; avcodec_flush_buffers((*data)->codec_context); //close codec avcodec_close((*data)->codec_context); //free codec context g_free((*data)->codec_context); (*data)->codec_context = NULL; g_free((*data)->outbuf); g_free((*data)->frame); g_free(*data); *data = NULL; } return (0); } struct lavcData* init_lavc(int width, int height, int fps_num, int fps_den, int codec_ind) { //allocate struct lavcData* data = g_new0(struct lavcData, 1); data->priv_data = NULL; data->codec_context = NULL; vcodecs_data *defaults = get_codec_defaults(codec_ind); // find the audio encoder //try specific codec (by name) data->codec = avcodec_find_encoder_by_name(defaults->codec_name); if(!data->codec) //if it fails try any codec with matching AV_CODEC_ID data->codec = avcodec_find_encoder(defaults->codec_id); if (!data->codec) { fprintf(stderr, "ffmpeg codec not found\n"); return(NULL); } #if LIBAVCODEC_VER_AT_LEAST(53,6) data->codec_context = avcodec_alloc_context3(data->codec); #else data->codec_context = avcodec_alloc_context(); #endif data->codec_id = defaults->codec_id; //alloc picture data->picture= avcodec_alloc_frame(); data->picture->pts = 0; // define bit rate (lower = more compression but lower quality) data->codec_context->bit_rate = defaults->bit_rate; // resolution must be a multiple of two data->codec_context->width = width; data->codec_context->height = height; data->codec_context->flags |= defaults->flags; if (defaults->num_threads > 0) data->codec_context->thread_count = defaults->num_threads; /* * mb_decision *0 (FF_MB_DECISION_SIMPLE) Use mbcmp (default). *1 (FF_MB_DECISION_BITS) Select the MB mode which needs the fewest bits (=vhq). *2 (FF_MB_DECISION_RD) Select the MB mode which has the best rate distortion. */ data->codec_context->mb_decision = defaults->mb_decision; /*use trellis quantization*/ data->codec_context->trellis = defaults->trellis; //motion estimation method epzs data->codec_context->me_method = defaults->me_method; data->codec_context->dia_size = defaults->dia; data->codec_context->pre_dia_size = defaults->pre_dia; data->codec_context->pre_me = defaults->pre_me; data->codec_context->me_pre_cmp = defaults->me_pre_cmp; data->codec_context->me_cmp = defaults->me_cmp; data->codec_context->me_sub_cmp = defaults->me_sub_cmp; data->codec_context->me_subpel_quality = defaults->subq; //NEW data->codec_context->refs = defaults->framerefs; //NEW data->codec_context->last_predictor_count = defaults->last_pred; data->codec_context->mpeg_quant = defaults->mpeg_quant; //h.263 data->codec_context->qmin = defaults->qmin; // best detail allowed - worst compression data->codec_context->qmax = defaults->qmax; // worst detail allowed - best compression data->codec_context->max_qdiff = defaults->max_qdiff; data->codec_context->max_b_frames = defaults->max_b_frames; data->codec_context->qcompress = defaults->qcompress; data->codec_context->qblur = defaults->qblur; data->codec_context->strict_std_compliance = FF_COMPLIANCE_NORMAL; data->codec_context->codec_id = defaults->codec_id; data->monotonic_pts = defaults->monotonic_pts; #if !LIBAVCODEC_VER_AT_LEAST(53,0) #define AVMEDIA_TYPE_VIDEO CODEC_TYPE_VIDEO #endif data->codec_context->codec_type = AVMEDIA_TYPE_VIDEO; data->codec_context->pix_fmt = PIX_FMT_YUV420P; //only yuv420p available for mpeg if(defaults->fps) data->codec_context->time_base = (AVRational){1,defaults->fps}; //use codec properties fps else if (fps_den >= 5) data->codec_context->time_base = (AVRational){fps_num,fps_den}; //default fps (for gspca this is 1/1) else data->codec_context->time_base = (AVRational){1,15}; //fallback to 15 fps (e.g gspca) if(defaults->gop_size > 0) data->codec_context->gop_size = defaults->gop_size; else data->codec_context->gop_size = data->codec_context->time_base.den; if(defaults->codec_id == AV_CODEC_ID_H264) { data->codec_context->me_range = 16; //the first compressed frame will be empty (1 frame out of sync) //but avoids x264 warning on lookaheadless mb-tree #if LIBAVCODEC_VER_AT_LEAST(53,6) av_dict_set(&data->private_options, "rc_lookahead", "1", 0); #else data->codec_context->rc_lookahead=1; #endif //TODO: // add rc_lookahead to codec properties and handle it gracefully by // fixing the frames timestamps => shift them by rc_lookahead frames } // open codec #if LIBAVCODEC_VER_AT_LEAST(53,6) if (avcodec_open2(data->codec_context, data->codec, &data->private_options) < 0) #else if (avcodec_open(data->codec_context, data->codec) < 0) #endif { fprintf(stderr, "could not open codec\n"); return(NULL); } //alloc tmpbuff (yuv420p) data->tmpbuf = g_new0(BYTE, (width*height*3)/2); //alloc outbuf data->outbuf_size = 240000;//1792 data->outbuf = g_new0(BYTE, data->outbuf_size); data->delayed_frames = 0; data->index_of_df = -1; data->flushed_buffers = 0; data->flush_delayed_frames = 0; data->flush_done = 0; return(data); } struct lavcAData* init_lavc_audio(struct paRecordData *pdata, int codec_ind) { //allocate pdata->lavc_data = g_new0(struct lavcAData, 1); pdata->lavc_data->priv_data = NULL; pdata->lavc_data->codec_context = NULL; acodecs_data *defaults = get_aud_codec_defaults(codec_ind); // find the audio encoder //try specific codec (by name) pdata->lavc_data->codec = avcodec_find_encoder_by_name(defaults->codec_name); fprintf(stderr, "AUDIO: codec %s selected\n", defaults->codec_name); if(!pdata->lavc_data->codec) //if it fails try any codec with matching AV_CODEC_ID { fprintf(stderr, "ffmpeg audio codec %s not found\n", defaults->codec_name); pdata->lavc_data->codec = avcodec_find_encoder(defaults->codec_id); if (!pdata->lavc_data->codec) { fprintf(stderr, "ffmpeg no audio codec for ID: %i found\n", defaults->codec_id); return(NULL); } } #if LIBAVCODEC_VER_AT_LEAST(53,6) pdata->lavc_data->codec_context = avcodec_alloc_context3(pdata->lavc_data->codec); #else pdata->lavc_data->codec_context = avcodec_alloc_context(); #endif // define bit rate (lower = more compression but lower quality) pdata->lavc_data->codec_context->bit_rate = defaults->bit_rate; pdata->lavc_data->codec_context->profile = defaults->profile; /*for AAC*/ pdata->lavc_data->codec_context->flags |= defaults->flags; pdata->lavc_data->codec_context->sample_rate = pdata->samprate; pdata->lavc_data->codec_context->channels = pdata->channels; #ifdef AV_CH_LAYOUT_MONO if(pdata->channels < 2) pdata->lavc_data->codec_context->channel_layout = AV_CH_LAYOUT_MONO; else pdata->lavc_data->codec_context->channel_layout = AV_CH_LAYOUT_STEREO; #endif pdata->lavc_data->codec_context->cutoff = 0; /*automatic*/ pdata->lavc_data->codec_context->sample_fmt = defaults->sample_format; pdata->lavc_data->codec_context->codec_id = defaults->codec_id; #if !LIBAVCODEC_VER_AT_LEAST(53,0) #define AVMEDIA_TYPE_AUDIO CODEC_TYPE_AUDIO #endif pdata->lavc_data->codec_context->codec_type = AVMEDIA_TYPE_AUDIO; // open codec #if LIBAVCODEC_VER_AT_LEAST(53,6) if (avcodec_open2(pdata->lavc_data->codec_context, pdata->lavc_data->codec, NULL) < 0) #else if (avcodec_open(pdata->lavc_data->codec_context, pdata->lavc_data->codec) < 0) #endif { switch(defaults->sample_format) { case AV_SAMPLE_FMT_S16: defaults->sample_format = AV_SAMPLE_FMT_FLT; pdata->lavc_data->codec_context->sample_fmt = defaults->sample_format; fprintf(stderr, "could not open codec...trying again with float sample format\n"); break; case AV_SAMPLE_FMT_FLT: defaults->sample_format = AV_SAMPLE_FMT_S16; pdata->lavc_data->codec_context->sample_fmt = defaults->sample_format; fprintf(stderr, "could not open codec...trying again with int16 sample format\n"); break; } #if LIBAVCODEC_VER_AT_LEAST(53,6) if (avcodec_open2(pdata->lavc_data->codec_context, pdata->lavc_data->codec, NULL) < 0) #else if (avcodec_open(pdata->lavc_data->codec_context, pdata->lavc_data->codec) < 0) #endif { fprintf(stderr, "could not open codec...giving up\n"); return(NULL); } } /* the codec gives us the frame size, in samples */ int frame_size = pdata->lavc_data->codec_context->frame_size; g_print("Audio frame size is %d samples for selected codec\n", frame_size); pdata->lavc_data->monotonic_pts = defaults->monotonic_pts; //alloc outbuf pdata->lavc_data->outbuf_size = pdata->outbuf_size; pdata->lavc_data->outbuf = g_new0(BYTE, pdata->lavc_data->outbuf_size); #if LIBAVCODEC_VER_AT_LEAST(53,34) pdata->lavc_data->frame= avcodec_alloc_frame(); avcodec_get_frame_defaults(pdata->lavc_data->frame); #endif return(pdata->lavc_data); } guvcview-src-1.7.1/src/callbacks.h0000775000175000017500000001266212173235416016065 0ustar paulopaulo/*******************************************************************************# # guvcview http://guvcview.sourceforge.net # # # # Paulo Assis # # Nobuhiro Iwamatsu # # Add UYVY color support(Macbook iSight) # # # # 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # # ********************************************************************************/ #ifndef CALLBACKS_H #define CALLBACKS_H #include #include "guvcview.h" #ifndef GDK_KEY_WebCam #define GDK_KEY_WebCam 0x1008ff8f #endif void WARN_DIALOG(const char *warn_title, const char* warn_msg, struct ALL_DATA *all_data); void ERR_DIALOG(const char *err_title, const char* err_msg, struct ALL_DATA *all_data); void file_chooser (GtkWidget * FileButt, struct ALL_DATA *all_data); void lavc_properties(GtkMenuItem * codec_prop, struct ALL_DATA *all_data); void lavc_audio_properties(GtkMenuItem * codec_prop, struct ALL_DATA *all_data); /* sound controls*/ void set_sensitive_snd_contrls (const int flag, struct GWIDGET *gwidget); /*video controls*/ void set_sensitive_vid_contrls (const int flag, const int sndEnable, struct GWIDGET *gwidget); gint delete_event (GtkWidget *widget, GdkEventConfigure *event, void *data); void set_sensitive_img_contrls (const int flag, struct GWIDGET *gwidget); gboolean key_pressed (GtkWidget *win, GdkEventKey *event, struct ALL_DATA *all_data); void vidClose (struct ALL_DATA *all_data); void slider_changed (GtkRange * range, struct ALL_DATA *all_data); void spin_changed (GtkSpinButton * spin, struct ALL_DATA *all_data); void set_jpeg_comp_clicked (GtkButton * jpeg_comp, struct ALL_DATA *all_data); void autofocus_changed (GtkToggleButton * toggle, struct ALL_DATA *all_data); void check_changed (GtkToggleButton * toggle, struct ALL_DATA *all_data); void pix_ord_changed (GtkComboBox * combo, struct ALL_DATA *all_data); void combo_changed (GtkComboBox * combo, struct ALL_DATA *all_data); void button_clicked (GtkButton * Button, struct ALL_DATA *all_data); void setfocus_clicked (GtkButton * FocusButton, struct ALL_DATA *all_data); void button_PanTilt1_clicked (GtkButton * Button, struct ALL_DATA *all_data); void button_PanTilt2_clicked (GtkButton * Button, struct ALL_DATA *all_data); void quitButton_clicked (GtkButton * quitButton, struct ALL_DATA *all_data); void Devices_changed (GtkComboBox * Devices, struct ALL_DATA *all_data); void resolution_changed (GtkComboBox * Resolution, struct ALL_DATA *all_data); void InpType_changed(GtkComboBox * ImpType, struct ALL_DATA *all_data); void FrameRate_changed (GtkComboBox * FrameRate, struct ALL_DATA *all_data); void SndSampleRate_changed (GtkComboBox * SampleRate, struct ALL_DATA *all_data); void SndAPI_changed (GtkComboBox * SoundAPI, struct ALL_DATA *all_data); void SndDevice_changed (GtkComboBox * SoundDevice, struct ALL_DATA *all_data); void SndNumChan_changed (GtkComboBox * SoundChan, struct ALL_DATA *all_data); void AudCodec_menu_changed (GtkRadioMenuItem *acodec_item, struct ALL_DATA *all_data); void VidCodec_menu_changed (GtkRadioMenuItem *vcodec_item, struct ALL_DATA *all_data); void SndEnable_changed (GtkToggleButton * toggle, struct ALL_DATA *all_data); void FiltEnable_changed(GtkToggleButton * toggle, struct ALL_DATA *all_data); void osdChanged(GtkToggleButton * toggle, struct ALL_DATA *all_data); void EffEnable_changed(GtkToggleButton * toggle, struct ALL_DATA *all_data); void image_prefix_toggled(GtkWidget * toggle, struct ALL_DATA *all_data); void video_prefix_toggled(GtkWidget * toggle, struct ALL_DATA *all_data); void capture_image (GtkButton *ImageButt, struct ALL_DATA *all_data); void capture_vid (GtkToggleButton *VidButt, struct ALL_DATA *all_data); void camera_button_menu_changed (GtkWidget *item, struct ALL_DATA *all_data); void Profile_clicked (GtkWidget *item, struct ALL_DATA *all_data); void Defaults_clicked (GtkWidget *item, struct ALL_DATA *all_data); void ShowFPS_changed(GtkToggleButton * toggle, struct ALL_DATA *all_data); gboolean image_capture_callback (gpointer data); gboolean video_capture_callback (gpointer data); #endif guvcview-src-1.7.1/src/string_utils.h0000664000175000017500000000470612173235416016671 0ustar paulopaulo/*******************************************************************************# # guvcview http://guvcview.sourceforge.net # # # # Paulo Assis # # # # 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # # ********************************************************************************/ #ifndef STRING_UTILS_H #define STRING_UTILS_H #include "defs.h" int int_num_chars (int n); int uint64_num_chars (uint64_t n); /* check image file extension and return image type*/ int check_image_type (char *filename); /* check video file extension and return video format*/ int check_video_type (char *filename); /* split fullpath in Path (splited[1]) and filename (splited[0])*/ pchar* splitPath(char *FullPath, char* splited[2]); /*join splited path into fullpath*/ char * joinPath(char *fullPath, pchar * splited); /*increment file name with inc*/ char * incFilename(char *fullPath, pchar *splited, uint64_t inc); char * setImgExt(char *filename, int format); char * setVidExt(char *filename, int format_ind); char * add_file_suffix(char *filename, uint64_t suffix); uint64_t get_file_suffix(const char *path, const char* filename); #endif guvcview-src-1.7.1/src/osd.c0000664000175000017500000001114012173235416014711 0ustar paulopaulo/*******************************************************************************# # guvcview http://guvcview.sourceforge.net # # # # Paulo Assis # # Nobuhiro Iwamatsu # # Add UYVY color support(Macbook iSight) # # Flemming Frandsen # # Add VU meter OSD # # # # 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # # ********************************************************************************/ #include #include #include "defs.h" #include "guvcview.h" #define __AMUTEX &pdata->mutex #define AUDIO_REFERENCE_LEVEL 0.2 void draw_vu_meter(int width, int height, SAMPLE vuPeak[2], int vuPeakFreeze[2], void *data) { struct ALL_DATA *all_data = (struct ALL_DATA *) data; struct paRecordData *pdata = all_data->pdata; struct vdIn *videoIn = all_data->videoIn; int i,j; // Fuck pre-C99 sucks. __LOCK_MUTEX( __AMUTEX ); SAMPLE vuLevel[2]; // The maximum sample for this frame. for (i=0;i<2;i++) { vuLevel[i] = 0; // Run through all available samples and find the current level. SAMPLE *samples = pdata->audio_buff[pdata->blast_ind][pdata->last_ind].frame; for (j=0;jaud_numSamples;j++) { int channel = j % pdata->channels; if (channel < 2) { SAMPLE s = samples[j]; if (s > vuLevel[channel]) { vuLevel[channel] = s; } } } } __UNLOCK_MUTEX( __AMUTEX ); BYTE *vuFrame = videoIn->framebuffer; int bh = height / 20; int bw = width / 150; int channel; for (channel=0;channel<2;channel++) { // Handle peak calculation and falloff. if (vuPeak[channel] < vuLevel[channel]) { vuPeak[channel] = vuLevel[channel]; vuPeakFreeze[channel] = 30; } else if (vuPeakFreeze[channel] > 0) { vuPeakFreeze[channel]--; } else if (vuPeak[channel] > vuLevel[channel]) { vuPeak[channel] -= (vuPeak[channel]-vuLevel[channel]) / 10; } float dBuLevel = 10*log10(vuLevel[channel]/AUDIO_REFERENCE_LEVEL); float dBuPeak = 10*log10(vuPeak[channel] /AUDIO_REFERENCE_LEVEL); // Draw the pretty bars, but only if there actually is an audio channel with samples present if (vuLevel[channel] == 0) continue; int peaked = 0; int box; for (box=0;box<=26;box++) { float db = box-20; // The dB it takes to light the current box. int bx = (5+box)*bw*2*4; // Start byte for box on each line int by = (channel*(bh+5) + bh*2)* 2*width; // Start byte for box top. BYTE u = 0; BYTE v = 0; if (db > 4) { u=128; v=255; } else if (db > 0) { u=0; v=200; } int light = dBuLevel > db; if (dBuPeak < db+1 && !peaked) { peaked = 1; light = 1; } if (light) { int yc; for (yc=0;yc 0) { int bi = bx + by + width*2*bh/2; for (j=0;j # # Nobuhiro Iwamatsu # # Add UYVY color support(Macbook iSight) # # Flemming Frandsen # # Add VU meter OSD # # # # 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # # ********************************************************************************/ #ifndef OSD_H #define OSD_H #include "defs.h" void draw_vu_meter(int width, int height, SAMPLE vuPeak[2], int vuPeakFreeze[2], void *data); #endif guvcview-src-1.7.1/src/create_video.c0000775000175000017500000007162712173235416016600 0ustar paulopaulo/*******************************************************************************# # guvcview http://guvcview.sourceforge.net # # # # Paulo Assis # # # # 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # # ********************************************************************************/ #include #include #include #include #include #include #include "../config.h" #include "defs.h" #include "create_video.h" #include "v4l2uvc.h" #include "avilib.h" #include "globals.h" #include "sound.h" #include "acodecs.h" #include "ms_time.h" #include "string_utils.h" #include "callbacks.h" #include "vcodecs.h" #include "video_format.h" #include "audio_effects.h" #include "globals.h" #define __AMUTEX &pdata->mutex #define __VMUTEX &videoIn->mutex #define __GMUTEX &global->mutex #define __FMUTEX &global->file_mutex #define __GCOND &global->IO_cond /*video capture can only start after buffer allocation*/ static void alloc_videoBuff(struct ALL_DATA *all_data) { struct GLOBAL *global = all_data->global; int i = 0; int framesize = global->height*global->width*2; /*yuyv (maximum size)*/ if((global->fps > 0) && (global->fps_num > 0)) global->video_buff_size = (global->fps * 3) / (global->fps_num * 2); /* 1,5 seconds of video in buffer*/ if (global->video_buff_size < 16) global->video_buff_size = 16; /*keep at least 16 frames*/ /*alloc video ring buffer*/ __LOCK_MUTEX(__GMUTEX); if (global->videoBuff == NULL) { /*alloc video frames to videoBuff*/ global->videoBuff = g_new0(VidBuff, global->video_buff_size); for(i=0;ivideo_buff_size;i++) { global->videoBuff[i].frame = g_new0(BYTE,framesize); global->videoBuff[i].used = FALSE; } } else { /*free video frames to videoBuff*/ for(i=0;ivideo_buff_size;i++) { if(global->videoBuff[i].frame) g_free(global->videoBuff[i].frame); global->videoBuff[i].frame = NULL; } g_free(global->videoBuff); /*alloc video frames to videoBuff*/ global->videoBuff = g_new0(VidBuff,global->video_buff_size); for(i=0;ivideo_buff_size;i++) { global->videoBuff[i].frame = g_new0(BYTE,framesize); global->videoBuff[i].used = FALSE; } } //reset indexes global->r_ind=0; global->w_ind=0; __UNLOCK_MUTEX(__GMUTEX); } static int initVideoFile(struct ALL_DATA *all_data, void* lav_data) { //struct GWIDGET *gwidget = all_data->gwidget; struct paRecordData *pdata = all_data->pdata; struct GLOBAL *global = all_data->global; struct vdIn *videoIn = all_data->videoIn; struct VideoFormatData *videoF = all_data->videoF; io_Stream *vstream, *astream; struct lavcData **lavc_data = (struct lavcData **) lav_data; videoF->vcodec = get_vcodec_id(global->VidCodec); videoF->acodec = get_acodec_id(global->AudCodec); videoF->keyframe = 0; int ret = 0; __LOCK_MUTEX(__VMUTEX); gboolean capVid = videoIn->capVid; __UNLOCK_MUTEX(__VMUTEX); /*alloc video ring buffer*/ alloc_videoBuff(all_data); if(isLavcCodec(global->VidCodec)) *lavc_data = init_lavc(global->width, global->height, global->fps_num, global->fps, global->VidCodec); switch (global->VidFormat) { case AVI_FORMAT: if(videoF->avi != NULL) { avi_destroy_context(videoF->avi); videoF->avi = NULL; } videoF->avi = avi_create_context(videoIn->VidFName); if(!videoF->avi) { g_printerr("Error: Couldn't create AVI context.\n"); capVid = FALSE; /*don't start video capture*/ __LOCK_MUTEX(__VMUTEX); videoIn->capVid = capVid; __UNLOCK_MUTEX(__VMUTEX); pdata->capVid = capVid; return(-1); } vstream = avi_add_video_stream(videoF->avi, global->width, global->height, global->fps, videoF->vcodec, get_vid4cc(global->VidCodec)); if(videoF->vcodec == AV_CODEC_ID_THEORA) { vstream->extra_data = (BYTE*) (*lavc_data)->codec_context->extradata; vstream->extra_data_size = (*lavc_data)->codec_context->extradata_size; } if(global->Sound_enable > 0) { /*get channels and sample rate*/ set_sound(global, pdata); /*sample size - only used for PCM*/ int32_t a_bits = get_aud_bits(global->AudCodec); /*bit rate (compressed formats)*/ int32_t b_rate = get_aud_bit_rate(global->AudCodec); astream = avi_add_audio_stream(videoF->avi, global->Sound_NumChan, global->Sound_SampRate, a_bits, b_rate, videoF->acodec, global->Sound_Format); if(videoF->acodec == AV_CODEC_ID_VORBIS) { astream->extra_data = (BYTE*) pdata->lavc_data->codec_context->extradata; astream->extra_data_size = pdata->lavc_data->codec_context->extradata_size; } } /* add first riff header */ avi_add_new_riff(videoF->avi); /* start video capture*/ capVid = TRUE; __LOCK_MUTEX(__VMUTEX); videoIn->capVid = capVid; __UNLOCK_MUTEX(__VMUTEX); pdata->capVid = capVid; /* start sound capture*/ if(global->Sound_enable > 0 && init_sound (pdata)) { //FIXME: enable capture button g_printerr("Audio initialization error\n"); global->Sound_enable=0; } break; case WEBM_FORMAT: case MKV_FORMAT: if(videoF->mkv != NULL) { mkv_destroy_context(videoF->mkv); videoF->mkv = NULL; } videoF->mkv = mkv_create_context(videoIn->VidFName, global->VidFormat); if(!videoF->mkv) { g_printerr("Error: Couldn't create MKV context.\n"); capVid = FALSE; /*don't start video capture*/ __LOCK_MUTEX(__VMUTEX); videoIn->capVid = capVid; __UNLOCK_MUTEX(__VMUTEX); pdata->capVid = capVid; return(-1); } vstream = mkv_add_video_stream(videoF->mkv, global->width, global->height, videoF->vcodec); vstream->extra_data_size = set_mkvCodecPriv(global->VidCodec, global->width, global->height, *lavc_data); if(vstream->extra_data_size > 0) vstream->extra_data = get_mkvCodecPriv(global->VidCodec); if(global->Sound_enable > 0) { /*get channels and sample rate*/ set_sound(global, pdata); /*sample size - only used for PCM*/ int32_t a_bits = get_aud_bits(global->AudCodec); /*bit rate (compressed formats)*/ int32_t b_rate = get_aud_bit_rate(global->AudCodec); astream = mkv_add_audio_stream( videoF->mkv, pdata->channels, pdata->samprate, a_bits, b_rate, videoF->acodec, global->Sound_Format); astream->extra_data_size = set_mkvACodecPriv( global->AudCodec, pdata->samprate, pdata->channels, pdata->lavc_data); if(astream->extra_data_size > 0) astream->extra_data = get_mkvACodecPriv(global->AudCodec); } /** write the file header */ mkv_write_header(videoF->mkv); /* start video capture*/ capVid = TRUE; __LOCK_MUTEX(__VMUTEX); videoIn->capVid = capVid; __UNLOCK_MUTEX(__VMUTEX); pdata->capVid = capVid; /* start sound capture*/ if(global->Sound_enable > 0 && init_sound (pdata)) { //FIXME: enable capture button g_printerr("Audio initialization error\n"); global->Sound_enable=0; } break; default: break; } return (ret); } /* Called at avi capture stop */ static void aviClose (struct ALL_DATA *all_data) { float tottime = 0; struct GLOBAL *global = all_data->global; //struct vdIn *videoIn = all_data->videoIn; struct VideoFormatData *videoF = all_data->videoF; struct paRecordData *pdata = all_data->pdata; if (videoF->avi) { tottime = (float) ((int64_t) (global->Vidstoptime - global->Vidstarttime) / 1000000); // convert to miliseconds if (global->debug) g_print("stop= %llu start=%llu \n", (unsigned long long) global->Vidstoptime, (unsigned long long) global->Vidstarttime); if (tottime > 0) { /*try to find the real frame rate*/ videoF->avi->fps = (double) (global->framecount * 1000) / tottime; } else { /*set the hardware frame rate*/ videoF->avi->fps = global->fps; } if (global->debug) g_print("VIDEO: %d frames in %f ms = %f fps\n",global->framecount,tottime,videoF->avi->fps); /*------------------- close audio stream and clean up -------------------*/ if (global->Sound_enable > 0) { if (close_sound (pdata)) g_printerr("Sound Close error\n"); } avi_close(videoF->avi); global->framecount = 0; global->Vidstarttime = 0; if (global->debug) g_print ("close avi\n"); } avi_destroy_context(videoF->avi); pdata = NULL; global = NULL; //videoIn = NULL; videoF->avi = NULL; } static void mkvClose(struct ALL_DATA *all_data) { float tottime = 0; struct GLOBAL *global = all_data->global; //struct vdIn *videoIn = all_data->videoIn; struct VideoFormatData *videoF = all_data->videoF; struct paRecordData *pdata = all_data->pdata; if (videoF->mkv) { tottime = (float) ((int64_t) (global->Vidstoptime - global->Vidstarttime) / 1000000); // convert to miliseconds if (global->debug) g_print("stop= %llu start=%llu \n", (unsigned long long) global->Vidstoptime, (unsigned long long) global->Vidstarttime); if (global->debug) g_print("VIDEO: %d frames in %f ms \n",global->framecount,tottime); /*------------------- close audio stream and clean up -------------------*/ if (global->Sound_enable > 0) { if (close_sound (pdata)) g_printerr("Sound Close error\n"); } mkv_close(videoF->mkv); global->framecount = 0; global->Vidstarttime = 0; if (global->debug) g_print ("close mkv\n"); } mkv_destroy_context(videoF->mkv); pdata = NULL; global = NULL; //videoIn = NULL; videoF->mkv = NULL; } static void closeVideoFile(struct ALL_DATA *all_data) { struct GLOBAL *global = all_data->global; struct vdIn *videoIn = all_data->videoIn; struct paRecordData *pdata = all_data->pdata; int i=0; /*we are streaming so we need to lock a mutex*/ gboolean capVid = FALSE; __LOCK_MUTEX(__VMUTEX); videoIn->capVid = capVid; /*flag video thread to stop recording frames*/ __UNLOCK_MUTEX(__VMUTEX); __LOCK_MUTEX(__AMUTEX); pdata->capVid = capVid; __UNLOCK_MUTEX(__AMUTEX); /*wait for flag from video thread that recording has stopped */ /*wait on videoIn->VidCapStop by sleeping for 200 loops of 10 ms*/ /*(test VidCapStop == TRUE on every loop)*/ int stall = wait_ms(&(videoIn->VidCapStop), TRUE, __VMUTEX, 10, 200); if( !(stall > 0) ) { g_printerr("video capture stall on exit(%d) - timeout\n", videoIn->VidCapStop); } /*free video buffer allocations*/ __LOCK_MUTEX(__GMUTEX); //reset the indexes global->r_ind=0; global->w_ind=0; if (global->videoBuff != NULL) { /*free video frames to videoBuff*/ for(i=0;ivideo_buff_size;i++) { g_free(global->videoBuff[i].frame); global->videoBuff[i].frame = NULL; } g_free(global->videoBuff); global->videoBuff = NULL; } __UNLOCK_MUTEX(__GMUTEX); switch (global->VidFormat) { case AVI_FORMAT: aviClose(all_data); break; case WEBM_FORMAT: case MKV_FORMAT: mkvClose(all_data); break; default: break; } global->Vidstoptime = 0; global->Vidstarttime = 0; global->framecount = 0; } static int write_video_frame (struct ALL_DATA *all_data, void *jpeg_struct, struct lavcData *lavc_data, VidBuff *proc_buff) { struct GLOBAL *global = all_data->global; //struct GWIDGET *gwidget = all_data->gwidget; int ret=0; switch (global->VidFormat) { case AVI_FORMAT: ret = compress_frame(all_data, jpeg_struct, lavc_data, proc_buff); break; case WEBM_FORMAT: case MKV_FORMAT: //global->framecount++; ret = compress_frame(all_data, jpeg_struct, lavc_data, proc_buff); break; default: break; } return (ret); } static int write_audio_frame (struct ALL_DATA *all_data) { struct paRecordData *pdata = all_data->pdata; struct GLOBAL *global = all_data->global; struct VideoFormatData *videoF = all_data->videoF; //struct GWIDGET *gwidget = all_data->gwidget; int ret =0; switch (global->VidFormat) { case AVI_FORMAT: ret = compress_audio_frame(all_data); break; case WEBM_FORMAT: case MKV_FORMAT: __LOCK_MUTEX( __AMUTEX ); //why do we need this ??? /*set pts*/ videoF->apts = pdata->audio_buff[pdata->br_ind][pdata->r_ind].time_stamp; /*write audio chunk*/ ret = compress_audio_frame(all_data); __UNLOCK_MUTEX( __AMUTEX ); break; default: break; } return (ret); } static int sync_audio_frame(struct ALL_DATA *all_data, AudBuff *proc_buff) { struct paRecordData *pdata = all_data->pdata; struct GLOBAL *global = all_data->global; struct VideoFormatData *videoF = all_data->videoF; switch (global->VidFormat) { case AVI_FORMAT: /*first audio data - sync with video (audio stream capture can take */ /*a bit longer to start) */ /*no need of locking the audio mutex yet, since we are not reading from the buffer*/ if (!get_stream(videoF->avi->stream_list, 1)->audio_strm_length) { /*only 1 audio stream*/ /*time diff for audio-video*/ int synctime= (int) (pdata->delay + pdata->snd_begintime - pdata->ts_ref)/1000000; /*convert to miliseconds*/ if (global->debug) g_print("shift sound by %d ms\n", synctime); if(synctime>10 && synctime<2000) { /*only sync between 10ms and 2 seconds*/ if(global->Sound_Format == PA_FOURCC) { /*shift sound by synctime*/ UINT32 shiftFrames = abs(synctime * global->Sound_SampRate / 1000); UINT32 shiftSamples = shiftFrames * global->Sound_NumChan; if (global->debug) g_print("shift sound forward by %d samples\n", shiftSamples); short *EmptySamp; EmptySamp=g_new0(short, shiftSamples); avi_write_packet(videoF->avi, 1, (BYTE *) EmptySamp, shiftSamples*sizeof(short), 0, -1, 0); //AVI_write_audio(videoF->AviOut,(BYTE *) EmptySamp,shiftSamples*sizeof(short)); g_free(EmptySamp); } else { /*use lavc encoder*/ } } } break; case WEBM_FORMAT: case MKV_FORMAT: break; default: break; } return (0); } static int buff_scheduler(int w_ind, int r_ind, int buff_size) { int diff_ind = 0; int sched_sleep = 0; /* try to balance buffer overrun in read/write operations */ if(w_ind >= r_ind) diff_ind = w_ind - r_ind; else diff_ind = (buff_size - r_ind) + w_ind; int th = (int) lround((double) buff_size * 0.7); if(diff_ind <= th) /* from 0 to 50 ms (down below 20 fps)*/ sched_sleep = (int) lround((double) (diff_ind * 71) / buff_size); else /*from 50 to 210 ms (down below 5 fps)*/ sched_sleep = (int) lround((double) ((diff_ind * 320) / buff_size) - 110); if(sched_sleep < 0) sched_sleep = 0; /*clip to positive values just in case*/ //g_printf("diff index: %i sleep %i\n",diff_ind, sched_sleep); return sched_sleep; } static int get_audio_flag(struct paRecordData *pdata) { int flag = 0; __LOCK_MUTEX(__AMUTEX); flag = pdata->audio_buff_flag[pdata->br_ind]; __UNLOCK_MUTEX(__AMUTEX); return flag; } static gboolean is_audio_processing(struct paRecordData *pdata, gboolean set_processing) { int flag = get_audio_flag(pdata); if((set_processing) && (flag == AUD_PROCESS)) { __LOCK_MUTEX(__AMUTEX); pdata->audio_buff_flag[pdata->br_ind] = AUD_PROCESSING; __UNLOCK_MUTEX(__AMUTEX); flag = AUD_PROCESSING; } if(flag == AUD_PROCESSING) return TRUE; else return FALSE; } //static gboolean is_audioTS_lessThan_videoTS(void *data) //{ // struct ALL_DATA *all_data = (struct ALL_DATA *) data; // struct paRecordData *pdata = all_data->pdata; // struct GLOBAL *global = all_data->global; // // __LOCK_MUTEX(__AMUTEX); // QWORD audioTS = pdata->audio_buff[pdata->br_ind][pdata->r_ind].time_stamp; // __UNLOCK_MUTEX(__AMUTEX); // // __LOCK_MUTEX( __GMUTEX ); // QWORD videoTS = global->videoBuff[global->r_ind].time_stamp; // __UNLOCK_MUTEX( __GMUTEX ); // // if (audioTS < videoTS) // return TRUE; // else // return FALSE; //} static gboolean process_audio(struct ALL_DATA *all_data, struct audio_effects **aud_eff) { struct vdIn *videoIn = all_data->videoIn; struct paRecordData *pdata = all_data->pdata; __LOCK_MUTEX(__VMUTEX); gboolean capVid = videoIn->capVid; __UNLOCK_MUTEX(__VMUTEX); /*read audio Frames (1152 * channels samples each)*/ gboolean finish = FALSE; /*used - doesn't need locking as current buffer must be on AUD_PROCESSING state*/ if(is_audio_processing(pdata, TRUE) && pdata->audio_buff[pdata->br_ind][pdata->r_ind].used) { sync_audio_frame(all_data, &pdata->audio_buff[pdata->br_ind][pdata->r_ind]); /*run effects on data*/ /*echo*/ if((pdata->snd_Flags & SND_ECHO)==SND_ECHO) { Echo(pdata, &pdata->audio_buff[pdata->br_ind][pdata->r_ind], *aud_eff, 300, 0.5); } else { close_DELAY((*aud_eff)->ECHO); (*aud_eff)->ECHO = NULL; } /*fuzz*/ if((pdata->snd_Flags & SND_FUZZ)==SND_FUZZ) { Fuzz(pdata, &pdata->audio_buff[pdata->br_ind][pdata->r_ind], *aud_eff); } else { close_FILT((*aud_eff)->HPF); (*aud_eff)->HPF = NULL; } /*reverb*/ if((pdata->snd_Flags & SND_REVERB)==SND_REVERB) { Reverb(pdata, &pdata->audio_buff[pdata->br_ind][pdata->r_ind], *aud_eff, 50); } else { close_REVERB(*aud_eff); } /*wahwah*/ if((pdata->snd_Flags & SND_WAHWAH)==SND_WAHWAH) { WahWah (pdata, &pdata->audio_buff[pdata->br_ind][pdata->r_ind], *aud_eff, 1.5, 0, 0.7, 0.3, 2.5); } else { close_WAHWAH((*aud_eff)->wahData); (*aud_eff)->wahData = NULL; } /*Ducky*/ if((pdata->snd_Flags & SND_DUCKY)==SND_DUCKY) { change_pitch(pdata, &pdata->audio_buff[pdata->br_ind][pdata->r_ind], *aud_eff, 2); } else { close_pitch (*aud_eff); } write_audio_frame(all_data); pdata->audio_buff[pdata->br_ind][pdata->r_ind].used = FALSE; NEXT_IND(pdata->r_ind, AUDBUFF_SIZE); /*start of new buffer block*/ if(pdata->r_ind == 0) { __LOCK_MUTEX(__AMUTEX); pdata->audio_buff_flag[pdata->br_ind] = AUD_READY; NEXT_IND(pdata->br_ind, AUDBUFF_NUM); __UNLOCK_MUTEX(__AMUTEX); } } else { if (capVid) { /*video buffer underrun */ /*wait for next frame (sleep 10 ms)*/ sleep_ms(10); } else { finish = TRUE; /*all frames processed and no longer capturing so finish*/ } } return finish; } static gboolean process_video(struct ALL_DATA *all_data, VidBuff *proc_buff, struct lavcData *lavc_data, struct JPEG_ENCODER_STRUCTURE **jpeg_struct) { struct GLOBAL *global = all_data->global; struct vdIn *videoIn = all_data->videoIn; struct paRecordData *pdata = all_data->pdata; int64_t max_drift = 0, audio_drift = 0; if (global->Sound_enable) { __LOCK_MUTEX(__AMUTEX); audio_drift = pdata->ts_drift; __UNLOCK_MUTEX(__AMUTEX); max_drift = 1000000000 / global->fps; /* one frame */ } __LOCK_MUTEX(__VMUTEX); gboolean capVid = videoIn->capVid; __UNLOCK_MUTEX(__VMUTEX); gboolean finish = FALSE; __LOCK_MUTEX(__GMUTEX); gboolean used = global->videoBuff[global->r_ind].used; __UNLOCK_MUTEX(__GMUTEX); if (used) { __LOCK_MUTEX(__GMUTEX); /*read video Frame*/ proc_buff->bytes_used = global->videoBuff[global->r_ind].bytes_used; memcpy(proc_buff->frame, global->videoBuff[global->r_ind].frame, proc_buff->bytes_used); proc_buff->time_stamp = global->videoBuff[global->r_ind].time_stamp; global->videoBuff[global->r_ind].used = FALSE; /*signals an empty slot in the video buffer*/ __COND_BCAST(__GCOND); NEXT_IND(global->r_ind,global->video_buff_size); audio_drift -= global->av_drift; __UNLOCK_MUTEX(__GMUTEX); /* fprintf(stderr, "audio drift = %lli ms\n", audio_drift / 1000000); */ /*process video Frame*/ if (audio_drift > max_drift) { /* audio delayed */ g_print("audio drift: dropping/shifting frame\n"); __LOCK_MUTEX(__GMUTEX); global->av_drift += max_drift; __UNLOCK_MUTEX(__GMUTEX); switch (global->VidFormat) { case AVI_FORMAT: /* drop frame */ break; case WEBM_FORMAT: case MKV_FORMAT: write_video_frame(all_data, (void *) jpeg_struct, lavc_data, proc_buff); break; default: break; } } else if (audio_drift < -1 * max_drift) { /* audio too fast */ g_print("audio drift: duplicating/shifting frame\n"); __LOCK_MUTEX(__GMUTEX); global->av_drift -= max_drift; __UNLOCK_MUTEX(__GMUTEX); switch (global->VidFormat) { case AVI_FORMAT: /* write frame twice */ write_video_frame(all_data, (void *) jpeg_struct, lavc_data, proc_buff); write_video_frame(all_data, (void *) jpeg_struct, lavc_data, proc_buff); break; case WEBM_FORMAT: case MKV_FORMAT: write_video_frame(all_data, (void *) jpeg_struct, lavc_data, proc_buff); break; default: break; } } else write_video_frame(all_data, (void *) jpeg_struct, lavc_data, proc_buff); } else { if (capVid) { /*video buffer underrun */ /*wait for next frame (sleep 10 ms)*/ sleep_ms(10); } else if (lavc_data != NULL) //if we are using a lavc encoder flush the last frames { //flush video encoder lavc_data->flush_delayed_frames = 1; write_video_frame(all_data, (void *) jpeg_struct, lavc_data, proc_buff); finish = lavc_data->flush_done; /*all frames processed and no longer capturing so finish*/ } else //finish finish = TRUE; } return finish; } /* this function can only be called after a lock on global->mutex */ static void store_at_index(void *data) { struct ALL_DATA *all_data = (struct ALL_DATA *) data; struct GLOBAL *global = all_data->global; struct vdIn *videoIn = all_data->videoIn; global->videoBuff[global->w_ind].time_stamp = global->v_ts - global->av_drift; /*store frame at index*/ if ((global->VidCodec == CODEC_MJPEG) && (global->Frame_Flags==0) && (global->format==V4L2_PIX_FMT_MJPEG)) { /*store MJPEG frame*/ global->videoBuff[global->w_ind].bytes_used = videoIn->buf.bytesused; memcpy(global->videoBuff[global->w_ind].frame, videoIn->tmpbuffer, global->videoBuff[global->w_ind].bytes_used); } else if ((global->VidCodec == CODEC_LAVC) && (global->Frame_Flags==0) && ((global->format==V4L2_PIX_FMT_NV12) || (global->format==V4L2_PIX_FMT_NV21))) { /*store yuv420p frame*/ global->videoBuff[global->w_ind].bytes_used = videoIn->buf.bytesused; memcpy(global->videoBuff[global->w_ind].frame, videoIn->tmpbuffer, global->videoBuff[global->w_ind].bytes_used); } else { /*store YUYV frame*/ global->videoBuff[global->w_ind].bytes_used = global->height*global->width*2; memcpy(global->videoBuff[global->w_ind].frame, videoIn->framebuffer, global->videoBuff[global->w_ind].bytes_used); } global->videoBuff[global->w_ind].used = TRUE; } /* called from main video loop* * stores current frame in video ring buffer */ int store_video_frame(void *data) { struct ALL_DATA *all_data = (struct ALL_DATA *) data; struct GLOBAL *global = all_data->global; int ret = 0; int producer_sleep = 0; __LOCK_MUTEX(__GMUTEX); if(!global->videoBuff) { g_printerr("WARNING: video ring buffer not allocated yet - dropping frame."); __UNLOCK_MUTEX(__GMUTEX); return(-1); } if (!global->videoBuff[global->w_ind].used) { store_at_index(data); producer_sleep = buff_scheduler(global->w_ind, global->r_ind, global->video_buff_size); NEXT_IND(global->w_ind, global->video_buff_size); } else { if(global->debug) g_printerr("WARNING: buffer full waiting for free space\n"); /*wait for IO_cond at least 100ms*/ struct timespec endtime; clock_gettime(CLOCK_REALTIME, &endtime); endtime.tv_nsec += 10000; if(__COND_TIMED_WAIT(__GCOND, __GMUTEX, &endtime)) { /*try to store the frame again*/ if (!global->videoBuff[global->w_ind].used) { store_at_index(data); producer_sleep = buff_scheduler(global->w_ind, global->r_ind, global->video_buff_size); NEXT_IND(global->w_ind, global->video_buff_size); } else ret = -2;/*drop frame*/ } else ret = -3;/*drop frame*/ } if(!ret) global->framecount++; __UNLOCK_MUTEX(__GMUTEX); /*-------------if needed, make the thread sleep for a while----------------*/ if(producer_sleep) sleep_ms(producer_sleep); return ret; } void *Audio_loop(void *data) { struct ALL_DATA *all_data = (struct ALL_DATA *) data; struct GLOBAL *global = all_data->global; struct paRecordData *pdata = all_data->pdata; struct vdIn *videoIn = all_data->videoIn; struct audio_effects *aud_eff = init_audio_effects (); global->av_drift = 0; pdata->ts_drift = 0; gboolean capVid = TRUE; gboolean finished = FALSE; int max_loops = 60; while(!finished) { __LOCK_MUTEX(__VMUTEX); capVid = videoIn->capVid; __UNLOCK_MUTEX(__VMUTEX); finished = process_audio(all_data, &(aud_eff)); if(!capVid) { /* if capture has stopped then limit the number of iterations * fixes any possible loop lock on process_audio */ max_loops--; if(max_loops < 1) finished = TRUE; } } close_audio_effects (aud_eff); return ((void *) 0); } void *IO_loop(void *data) { struct ALL_DATA *all_data = (struct ALL_DATA *) data; struct GWIDGET *gwidget = all_data->gwidget; struct GLOBAL *global = all_data->global; struct vdIn *videoIn = all_data->videoIn; struct JPEG_ENCODER_STRUCTURE *jpg_data=NULL; struct lavcData *lavc_data = NULL; //struct audio_effects *aud_eff = NULL; gboolean capVid = TRUE; gboolean finished=FALSE; int max_loops = 60; __LOCK_MUTEX(__VMUTEX); videoIn->IOfinished=FALSE; __UNLOCK_MUTEX(__VMUTEX); gboolean failed = FALSE; gboolean audio_failed = FALSE; //video buffers to be processed int frame_size=0; VidBuff *proc_buff = NULL; if(initVideoFile(all_data, &(lavc_data))<0) { g_printerr("Cap Video failed\n"); if(!(global->no_display)) { //gdk_threads_enter(); /*disable signals for video capture callback*/ g_signal_handlers_block_by_func(GTK_TOGGLE_BUTTON(gwidget->CapVidButt), G_CALLBACK (capture_vid), all_data); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(gwidget->CapVidButt), FALSE); gtk_button_set_label(GTK_BUTTON(gwidget->CapVidButt),_("Cap. Video")); /*enable signals for video capture callback*/ g_signal_handlers_unblock_by_func(GTK_TOGGLE_BUTTON(gwidget->CapVidButt), G_CALLBACK (capture_vid), all_data); gdk_flush(); //gdk_threads_leave(); /*enabling sound and video compression controls*/ set_sensitive_vid_contrls(TRUE, global->Sound_enable, gwidget); } finished = TRUE; failed = TRUE; } else { if(global->debug) g_print("IO thread started...OK\n"); frame_size = global->height*global->width*2; proc_buff = g_new0(VidBuff, 1); proc_buff->frame = g_new0(BYTE, frame_size); if (global->Sound_enable) { /*start audio process thread*/ if( __THREAD_CREATE(&all_data->audio_thread, Audio_loop, (void *) all_data)) { g_printerr("Audio thread creation failed\n"); audio_failed = TRUE; } } } /*process video frames*/ if(!failed) { while(!finished) { __LOCK_MUTEX(__VMUTEX); capVid = videoIn->capVid; __UNLOCK_MUTEX(__VMUTEX); finished = process_video (all_data, proc_buff, lavc_data, &(jpg_data)); if(!capVid) { /* if capture has stopped then limit the number of iterations * fixes any possible loop lock on process_video */ max_loops--; if(max_loops < 1) finished = TRUE; } } if (global->Sound_enable && !audio_failed) { /* join audio thread*/ __THREAD_JOIN( all_data->audio_thread ); } /*finish capture*/ closeVideoFile(all_data); /*free proc buffer*/ g_free(proc_buff->frame); g_free(proc_buff); //if (global->Sound_enable) close_audio_effects (aud_eff); } if(lavc_data != NULL) { clean_lavc(&lavc_data); lavc_data = NULL; } if(jpg_data != NULL) g_free(jpg_data); jpg_data = NULL; if(global->jpeg != NULL) g_free(global->jpeg); //jpeg buffer used in encoding global->jpeg = NULL; if(global->debug) g_print("IO thread finished...OK\n"); global->VidButtPress = FALSE; __LOCK_MUTEX(__VMUTEX); videoIn->IOfinished=TRUE; __UNLOCK_MUTEX(__VMUTEX); return ((void *) 0); } guvcview-src-1.7.1/src/utils.c0000664000175000017500000005465512173235416015306 0ustar paulopaulo/*******************************************************************************# # guvcview http://guvcview.sourceforge.net # # # # Paulo Assis # # Nobuhiro Iwamatsu # # Add UYVY color support(Macbook iSight) # # # # 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # # ********************************************************************************/ /*******************************************************************************# # # # MJpeg decoding and frame capture taken from luvcview # # # # # ********************************************************************************/ #include #include /* support for internationalization - i18n */ #include #include "utils.h" #include "v4l2uvc.h" #include "huffman.h" #include "colorspaces.h" /*********************************/ static int huffman_init(void); static void decode_mcus __P((struct in *, int *, int, struct scan *, int *)); static int dec_readmarker __P((struct in *)); static void dec_makehuff __P((struct dec_hufftbl *, int *, BYTE *)); static void setinput __P((struct in *, BYTE *)); /*********************************/ #undef PREC #define PREC int static void idctqtab __P((BYTE *, PREC *)); inline static void idct(int *in, int *out, int *quant, long off, int max); /*********************************/ //static void col221111 __P((int *, unsigned char *, int)); typedef void (*ftopict) (int * out, BYTE *pic, int width) ; /*********************************/ static BYTE *datap; static int getbyte(void) { return *datap++; } static int getword(void) { int c1, c2; c1 = *datap++; c2 = *datap++; return c1 << 8 | c2; } struct comp { int cid; int hv; int tq; }; #define MAXCOMP 4 struct jpginfo { int nc; /* number of components */ int ns; /* number of scans */ int dri; /* restart interval */ int nm; /* mcus til next marker */ int rm; /* next restart marker */ }; static struct jpginfo info; static struct comp comps[MAXCOMP]; static struct scan dscans[MAXCOMP]; static unsigned char quant[4][64]; static struct dec_hufftbl dhuff[4]; #define dec_huffdc (dhuff + 0) #define dec_huffac (dhuff + 2) static struct in in; /*read jpeg tables (huffman and quantization) * args: * till: Marker (frame - SOF0 scan - SOS) * isDHT: flag indicating the presence of huffman tables (if 0 must use default ones - MJPG frame) */ static int readtables(int till, int *isDHT) { int m, l, i, j, lq, pq, tq; int tc, th, tt; for (;;) { if (getbyte() != 0xff) return -1; if ((m = getbyte()) == till) break; switch (m) { case 0xc2: return 0; /*read quantization tables (Lqt and Cqt)*/ case M_DQT: lq = getword(); while (lq > 2) { pq = getbyte(); /*Lqt=0x00 Cqt=0x01*/ tq = pq & 15; if (tq > 3) return -1; pq >>= 4; if (pq != 0) return -1; for (i = 0; i < 64; i++) quant[tq][i] = getbyte(); lq -= 64 + 1; } break; /*read huffman table*/ case M_DHT: l = getword(); while (l > 2) { int hufflen[16], k; BYTE huffvals[256]; tc = getbyte(); th = tc & 15; tc >>= 4; tt = tc * 2 + th; if (tc > 1 || th > 1) return -1; for (i = 0; i < 16; i++) hufflen[i] = getbyte(); l -= 1 + 16; k = 0; for (i = 0; i < 16; i++) { for (j = 0; j < hufflen[i]; j++) huffvals[k++] = getbyte(); l -= hufflen[i]; } dec_makehuff(dhuff + tt, hufflen, huffvals); } /* has huffman tables defined (JPEG)*/ *isDHT= 1; break; /*restart interval*/ case M_DRI: l = getword(); info.dri = getword(); break; default: l = getword(); while (l-- > 2) getbyte(); break; } } return 0; } static void dec_initscans(void) { int i; info.nm = info.dri + 1; info.rm = M_RST0; for (i = 0; i < info.ns; i++) dscans[i].dc = 0; } static int dec_checkmarker(void) { int i; if (dec_readmarker(&in) != info.rm) return -1; info.nm = info.dri; info.rm = (info.rm + 1) & ~0x08; for (i = 0; i < info.ns; i++) dscans[i].dc = 0; return 0; } /*jpeg decode * args: * pic: pointer to picture data ( decoded image - yuyv format) * buf: pointer to input data ( compressed jpeg ) * with: picture width * height: picture height */ int jpeg_decode(BYTE **pic, BYTE *buf, int width, int height) { struct jpeg_decdata *decdata; int i=0, j=0, m=0, tac=0, tdc=0; int intwidth=0, intheight=0; int mcusx=0, mcusy=0, mx=0, my=0; int ypitch=0 ,xpitch=0,bpp=0,pitch=0,x=0,y=0; int mb=0; int max[6]; ftopict convert; int err = 0; int isInitHuffman = 0; decdata = g_new0(struct jpeg_decdata, 1); for(i=0;i<6;i++) max[i]=0; if (!decdata) { err = -1; goto error; } if (buf == NULL) { err = -1; goto error; } datap = buf; /*check SOI (0xFFD8)*/ if (getbyte() != 0xff) { err = ERR_NO_SOI; goto error; } if (getbyte() != M_SOI) { err = ERR_NO_SOI; goto error; } /*read tables - if exist, up to start frame marker (0xFFC0)*/ if (readtables(M_SOF0, &isInitHuffman)) { err = ERR_BAD_TABLES; goto error; } getword(); /*header lenght*/ i = getbyte(); /*precision (8 bit)*/ if (i != 8) { err = ERR_NOT_8BIT; goto error; } intheight = getword(); /*height*/ intwidth = getword(); /*width */ if ((intheight & 7) || (intwidth & 7)) /*must be even*/ { err = ERR_BAD_WIDTH_OR_HEIGHT; goto error; } info.nc = getbyte(); /*number of components*/ if (info.nc > MAXCOMP) { err = ERR_TOO_MANY_COMPPS; goto error; } /*for each component*/ for (i = 0; i < info.nc; i++) { int h, v; comps[i].cid = getbyte(); /*component id*/ comps[i].hv = getbyte(); v = comps[i].hv & 15; /*vertical sampling */ h = comps[i].hv >> 4; /*horizontal sampling */ comps[i].tq = getbyte(); /*quantization table used*/ if (h > 3 || v > 3) { err = ERR_ILLEGAL_HV; goto error; } if (comps[i].tq > 3) { err = ERR_QUANT_TABLE_SELECTOR; goto error; } } /*read tables - if exist, up to start of scan marker (0xFFDA)*/ if (readtables(M_SOS,&isInitHuffman)) { err = ERR_BAD_TABLES; goto error; } getword(); /* header lenght */ info.ns = getbyte(); /* number of scans */ if (!info.ns) { g_print("info ns %d/n",info.ns); err = ERR_NOT_YCBCR_221111; goto error; } /*for each scan*/ for (i = 0; i < info.ns; i++) { dscans[i].cid = getbyte(); /*component id*/ tdc = getbyte(); tac = tdc & 15; /*ac table*/ tdc >>= 4; /*dc table*/ if (tdc > 1 || tac > 1) { err = ERR_QUANT_TABLE_SELECTOR; goto error; } for (j = 0; j < info.nc; j++) if (comps[j].cid == dscans[i].cid) break; if (j == info.nc) { err = ERR_UNKNOWN_CID_IN_SCAN; goto error; } dscans[i].hv = comps[j].hv; dscans[i].tq = comps[j].tq; dscans[i].hudc.dhuff = dec_huffdc + tdc; dscans[i].huac.dhuff = dec_huffac + tac; } i = getbyte(); /*0 */ j = getbyte(); /*63*/ m = getbyte(); /*0 */ if (i != 0 || j != 63 || m != 0) { g_printerr("hmm FW error,not seq DCT ??\n"); } /*build huffman tables*/ if(!isInitHuffman) { if(huffman_init() < 0) return -ERR_BAD_TABLES; } /* if (dscans[0].cid != 1 || dscans[1].cid != 2 || dscans[2].cid != 3) { err = ERR_NOT_YCBCR_221111; goto error; } if (dscans[1].hv != 0x11 || dscans[2].hv != 0x11) { err = ERR_NOT_YCBCR_221111; goto error; } */ /* if internal width and external are not the same or heigth too and pic not allocated realloc the good size and mark the change need 1 macroblock line more ?? */ if (intwidth != width || intheight != height || *pic == NULL) { width = intwidth; height = intheight; // BytesperPixel 2 yuyv , 3 rgb24 *pic = g_renew(unsigned char, *pic, intwidth * (intheight + 8) * 2); } switch (dscans[0].hv) { case 0x22: // 411 mb=6; mcusx = width >> 4; mcusy = height >> 4; bpp=2; xpitch = 16 * bpp; pitch = width * bpp; // YUYV out ypitch = 16 * pitch; convert = yuv420pto422; //choose the right conversion function break; case 0x21: //422 mb=4; mcusx = width >> 4; mcusy = height >> 3; bpp=2; xpitch = 16 * bpp; pitch = width * bpp; // YUYV out ypitch = 8 * pitch; convert = yuv422pto422; //choose the right conversion function break; case 0x11: //444 mcusx = width >> 3; mcusy = height >> 3; bpp=2; xpitch = 8 * bpp; pitch = width * bpp; // YUYV out ypitch = 8 * pitch; if (info.ns==1) { mb = 1; convert = yuv400pto422; //choose the right conversion function } else { mb=3; convert = yuv444pto422; //choose the right conversion function } break; default: err = ERR_NOT_YCBCR_221111; goto error; break; } idctqtab(quant[dscans[0].tq], decdata->dquant[0]); idctqtab(quant[dscans[1].tq], decdata->dquant[1]); idctqtab(quant[dscans[2].tq], decdata->dquant[2]); setinput(&in, datap); dec_initscans(); dscans[0].next = 2; dscans[1].next = 1; dscans[2].next = 0; /* 4xx encoding */ for (my = 0,y=0; my < mcusy; my++,y+=ypitch) { for (mx = 0,x=0; mx < mcusx; mx++,x+=xpitch) { if (info.dri && !--info.nm) if (dec_checkmarker()) { err = ERR_WRONG_MARKER; goto error; } switch (mb) { case 6: decode_mcus(&in, decdata->dcts, mb, dscans, max); idct(decdata->dcts, decdata->out, decdata->dquant[0], IFIX(128.5), max[0]); idct(decdata->dcts + 64, decdata->out + 64, decdata->dquant[0], IFIX(128.5), max[1]); idct(decdata->dcts + 128, decdata->out + 128, decdata->dquant[0], IFIX(128.5), max[2]); idct(decdata->dcts + 192, decdata->out + 192, decdata->dquant[0], IFIX(128.5), max[3]); idct(decdata->dcts + 256, decdata->out + 256, decdata->dquant[1], IFIX(0.5), max[4]); idct(decdata->dcts + 320, decdata->out + 320, decdata->dquant[2], IFIX(0.5), max[5]); break; case 4: decode_mcus(&in, decdata->dcts, mb, dscans, max); idct(decdata->dcts, decdata->out, decdata->dquant[0], IFIX(128.5), max[0]); idct(decdata->dcts + 64, decdata->out + 64, decdata->dquant[0], IFIX(128.5), max[1]); idct(decdata->dcts + 128, decdata->out + 256, decdata->dquant[1], IFIX(0.5), max[4]); idct(decdata->dcts + 192, decdata->out + 320, decdata->dquant[2], IFIX(0.5), max[5]); break; case 3: decode_mcus(&in, decdata->dcts, mb, dscans, max); idct(decdata->dcts, decdata->out, decdata->dquant[0], IFIX(128.5), max[0]); idct(decdata->dcts + 64, decdata->out + 256, decdata->dquant[1], IFIX(0.5), max[4]); idct(decdata->dcts + 128, decdata->out + 320, decdata->dquant[2], IFIX(0.5), max[5]); break; case 1: decode_mcus(&in, decdata->dcts, mb, dscans, max); idct(decdata->dcts, decdata->out, decdata->dquant[0], IFIX(128.5), max[0]); break; } // switch enc411 convert(decdata->out,*pic+y+x,pitch); //convert to 422 } } m = dec_readmarker(&in); if (m != M_EOI) { err = ERR_NO_EOI; goto error; } g_free(decdata); return 0; error: g_free(decdata); return err; } /****************************************************************/ /************** huffman decoder ***************/ /****************************************************************/ static int huffman_init(void) { int tc, th, tt; unsigned char *ptr= (unsigned char *) JPEGHuffmanTable ; int i, j, l; l = JPG_HUFFMAN_TABLE_LENGTH ; while (l > 0) { int hufflen[16], k; unsigned char huffvals[256]; tc = *ptr++; th = tc & 15; tc >>= 4; tt = tc * 2 + th; if (tc > 1 || th > 1) return -ERR_BAD_TABLES; for (i = 0; i < 16; i++) hufflen[i] = *ptr++; l -= 1 + 16; k = 0; for (i = 0; i < 16; i++) { for (j = 0; j < hufflen[i]; j++) huffvals[k++] = *ptr++; l -= hufflen[i]; } dec_makehuff(dhuff + tt, hufflen, huffvals); } return 0; } static int fillbits __P((struct in *, int, unsigned int)); static int dec_rec2 __P((struct in *, struct dec_hufftbl *, int *, int, int)); static void setinput(in, p) struct in *in; unsigned char *p; { in->p = p; in->left = 0; in->bits = 0; in->marker = 0; } static int fillbits(in, le, bi) struct in *in; int le; unsigned int bi; { int b, m; if (in->marker) { if (le <= 16) in->bits = bi << 16, le += 16; return le; } while (le <= 24) { b = *in->p++; if (b == 0xff && (m = *in->p++) != 0) { if (m == M_EOF) { if (in->func && (m = in->func(in->data)) == 0) continue; } in->marker = m; if (le <= 16) bi = bi << 16, le += 16; break; } bi = bi << 8 | b; le += 8; } in->bits = bi; /* tmp... 2 return values needed */ return le; } static int dec_readmarker(in) struct in *in; { int m; in->left = fillbits(in, in->left, in->bits); if ((m = in->marker) == 0) return 0; in->left = 0; in->marker = 0; return m; } #define LEBI_DCL int le, bi #define LEBI_GET(in) (le = in->left, bi = in->bits) #define LEBI_PUT(in) (in->left = le, in->bits = bi) #define GETBITS(in, n) ( \ (le < (n) ? le = fillbits(in, le, bi), bi = in->bits : 0), \ (le -= (n)), \ bi >> le & ((1 << (n)) - 1) \ ) #define UNGETBITS(in, n) ( \ le += (n) \ ) static int dec_rec2(in, hu, runp, c, i) struct in *in; struct dec_hufftbl *hu; int *runp; int c, i; { LEBI_DCL; LEBI_GET(in); if (i) { UNGETBITS(in, i & 127); *runp = i >> 8 & 15; i >>= 16; } else { for (i = DECBITS; (c = ((c << 1) | GETBITS(in, 1))) >= (hu->maxcode[i]); i++); if (i >= 16) { in->marker = M_BADHUFF; return 0; } i = hu->vals[hu->valptr[i] + c - hu->maxcode[i - 1] * 2]; *runp = i >> 4; i &= 15; } if (i == 0) { /* sigh, 0xf0 is 11 bit */ LEBI_PUT(in); return 0; } /* receive part */ c = GETBITS(in, i); if (c < (1 << (i - 1))) c += (-1 << i) + 1; LEBI_PUT(in); return c; } #define DEC_REC(in, hu, r, i) ( \ r = GETBITS(in, DECBITS), \ i = hu->llvals[r], \ i & 128 ? \ ( \ UNGETBITS(in, i & 127), \ r = i >> 8 & 15, \ i >> 16 \ ) \ : \ ( \ LEBI_PUT(in), \ i = dec_rec2(in, hu, &r, r, i), \ LEBI_GET(in), \ i \ ) \ ) static void decode_mcus(in, dct, n, sc, maxp) struct in *in; int *dct; int n; struct scan *sc; int *maxp; { struct dec_hufftbl *hu; int i = 0, r = 0, t = 0; LEBI_DCL; memset(dct, 0, n * 64 * sizeof(*dct)); LEBI_GET(in); while (n-- > 0) { hu = sc->hudc.dhuff; *dct++ = (sc->dc += DEC_REC(in, hu, r, t)); hu = sc->huac.dhuff; i = 63; while (i > 0) { t = DEC_REC(in, hu, r, t); if (t == 0 && r == 0) { dct += i; break; } dct += r; *dct++ = t; i -= r + 1; } *maxp++ = 64 - i; if (n == sc->next) sc++; } LEBI_PUT(in); } static void dec_makehuff(hu, hufflen, huffvals) struct dec_hufftbl *hu; int *hufflen; unsigned char *huffvals; { int code, k, i, j, d, x, c, v; for (i = 0; i < (1 << DECBITS); i++) hu->llvals[i] = 0; /* * llvals layout: * * value v already known, run r, backup u bits: * vvvvvvvvvvvvvvvv 0000 rrrr 1 uuuuuuu * value unknown, size b bits, run r, backup u bits: * 000000000000bbbb 0000 rrrr 0 uuuuuuu * value and size unknown: * 0000000000000000 0000 0000 0 0000000 */ code = 0; k = 0; for (i = 0; i < 16; i++, code <<= 1) { /* sizes */ hu->valptr[i] = k; for (j = 0; j < hufflen[i]; j++) { hu->vals[k] = *huffvals++; if (i < DECBITS) { c = code << (DECBITS - 1 - i); v = hu->vals[k] & 0x0f; /* size */ for (d = 1 << (DECBITS - 1 - i); --d >= 0;) { if (v + i < DECBITS) { /* both fit in table */ x = d >> (DECBITS - 1 - v - i); if (v && x < (1 << (v - 1))) x += (-1 << v) + 1; x = x << 16 | (hu->vals[k] & 0xf0) << 4 | (DECBITS - (i + 1 + v)) | 128; } else x = v << 16 | (hu->vals[k] & 0xf0) << 4 | (DECBITS - (i + 1)); hu->llvals[c | d] = x; } } code++; k++; } hu->maxcode[i] = code; } hu->maxcode[16] = 0x20000; /* always terminate decode */ } /****************************************************************/ /************** idct ***************/ /****************************************************************/ #define IMULT(a, b) (((a) * (b)) >> ISHIFT) #define ITOINT(a) ((a) >> ISHIFT) #define S22 ((PREC)IFIX(2 * 0.382683432)) #define C22 ((PREC)IFIX(2 * 0.923879532)) #define IC4 ((PREC)IFIX(1 / 0.707106781)) //zigzag order used by idct static unsigned char zig2[64] = { 0, 2, 3, 9, 10, 20, 21, 35, 14, 16, 25, 31, 39, 46, 50, 57, 5, 7, 12, 18, 23, 33, 37, 48, 27, 29, 41, 44, 52, 55, 59, 62, 15, 26, 30, 40, 45, 51, 56, 58, 1, 4, 8, 11, 19, 22, 34, 36, 28, 42, 43, 53, 54, 60, 61, 63, 6, 13, 17, 24, 32, 38, 47, 49 }; /*inverse dct for jpeg decoding * args: * in: pointer to input data ( mcu - after huffman decoding) * out: pointer to data with output of idct (to be filled) * quant: pointer to quantization data tables * off: offset value (128.5 or 0.5) * max: maximum input mcu index? */ inline static void idct(int *in, int *out, int *quant, long off, int max) { long t0, t1, t2, t3, t4, t5, t6, t7; // t ; long tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6; long tmp[64], *tmpp; int i, j, te; unsigned char *zig2p; t0 = off; if (max == 1) //single color mcu { t0 += in[0] * quant[0]; //only DC available for (i = 0; i < 64; i++) // fill mcu with DC value out[i] = ITOINT(t0); return; } zig2p = zig2; tmpp = tmp; for (i = 0; i < 8; i++) //apply quantization table in zigzag order { j = *zig2p++; t0 += in[j] * (long) quant[j]; j = *zig2p++; t5 = in[j] * (long) quant[j]; j = *zig2p++; t2 = in[j] * (long) quant[j]; j = *zig2p++; t7 = in[j] * (long) quant[j]; j = *zig2p++; t1 = in[j] * (long) quant[j]; j = *zig2p++; t4 = in[j] * (long) quant[j]; j = *zig2p++; t3 = in[j] * (long) quant[j]; j = *zig2p++; t6 = in[j] * (long) quant[j]; if ((t1 | t2 | t3 | t4 | t5 | t6 | t7) == 0) { tmpp[0 * 8] = t0; //DC tmpp[1 * 8] = t0; tmpp[2 * 8] = t0; tmpp[3 * 8] = t0; tmpp[4 * 8] = t0; tmpp[5 * 8] = t0; tmpp[6 * 8] = t0; tmpp[7 * 8] = t0; tmpp++; t0 = 0; continue; } //IDCT; tmp0 = t0 + t1; t1 = t0 - t1; tmp2 = t2 - t3; t3 = t2 + t3; tmp2 = IMULT(tmp2, IC4) - t3; tmp3 = tmp0 + t3; t3 = tmp0 - t3; tmp1 = t1 + tmp2; tmp2 = t1 - tmp2; tmp4 = t4 - t7; t7 = t4 + t7; tmp5 = t5 + t6; t6 = t5 - t6; tmp6 = tmp5 - t7; t7 = tmp5 + t7; tmp5 = IMULT(tmp6, IC4); tmp6 = IMULT((tmp4 + t6), S22); tmp4 = IMULT(tmp4, (C22 - S22)) + tmp6; t6 = IMULT(t6, (C22 + S22)) - tmp6; t6 = t6 - t7; t5 = tmp5 - t6; t4 = tmp4 - t5; tmpp[0 * 8] = tmp3 + t7; //t0; tmpp[1 * 8] = tmp1 + t6; //t1; tmpp[2 * 8] = tmp2 + t5; //t2; tmpp[3 * 8] = t3 + t4; //t3; tmpp[4 * 8] = t3 - t4; //t4; tmpp[5 * 8] = tmp2 - t5; //t5; tmpp[6 * 8] = tmp1 - t6; //t6; tmpp[7 * 8] = tmp3 - t7; //t7; tmpp++; t0 = 0; } for (i = 0, j = 0; i < 8; i++) { t0 = tmp[j + 0]; t1 = tmp[j + 1]; t2 = tmp[j + 2]; t3 = tmp[j + 3]; t4 = tmp[j + 4]; t5 = tmp[j + 5]; t6 = tmp[j + 6]; t7 = tmp[j + 7]; if ((t1 | t2 | t3 | t4 | t5 | t6 | t7) == 0) { te = ITOINT(t0); out[j + 0] = te; out[j + 1] = te; out[j + 2] = te; out[j + 3] = te; out[j + 4] = te; out[j + 5] = te; out[j + 6] = te; out[j + 7] = te; j += 8; continue; } //IDCT; tmp0 = t0 + t1; t1 = t0 - t1; tmp2 = t2 - t3; t3 = t2 + t3; tmp2 = IMULT(tmp2, IC4) - t3; tmp3 = tmp0 + t3; t3 = tmp0 - t3; tmp1 = t1 + tmp2; tmp2 = t1 - tmp2; tmp4 = t4 - t7; t7 = t4 + t7; tmp5 = t5 + t6; t6 = t5 - t6; tmp6 = tmp5 - t7; t7 = tmp5 + t7; tmp5 = IMULT(tmp6, IC4); tmp6 = IMULT((tmp4 + t6), S22); tmp4 = IMULT(tmp4, (C22 - S22)) + tmp6; t6 = IMULT(t6, (C22 + S22)) - tmp6; t6 = t6 - t7; t5 = tmp5 - t6; t4 = tmp4 - t5; out[j + 0] = ITOINT(tmp3 + t7); out[j + 1] = ITOINT(tmp1 + t6); out[j + 2] = ITOINT(tmp2 + t5); out[j + 3] = ITOINT(t3 + t4); out[j + 4] = ITOINT(t3 - t4); out[j + 5] = ITOINT(tmp2 - t5); out[j + 6] = ITOINT(tmp1 - t6); out[j + 7] = ITOINT(tmp3 - t7); j += 8; } } static unsigned char zig[64] = { 0, 1, 5, 6, 14, 15, 27, 28, 2, 4, 7, 13, 16, 26, 29, 42, 3, 8, 12, 17, 25, 30, 41, 43, 9, 11, 18, 24, 31, 40, 44, 53, 10, 19, 23, 32, 39, 45, 52, 54, 20, 22, 33, 38, 46, 51, 55, 60, 21, 34, 37, 47, 50, 56, 59, 61, 35, 36, 48, 49, 57, 58, 62, 63 }; //coef used in idct static PREC aaidct[8] = { IFIX(0.3535533906), IFIX(0.4903926402), IFIX(0.4619397663), IFIX(0.4157348062), IFIX(0.3535533906), IFIX(0.2777851165), IFIX(0.1913417162), IFIX(0.0975451610) }; static void idctqtab(qin, qout) unsigned char *qin; PREC *qout; { int i, j; for (i = 0; i < 8; i++) for (j = 0; j < 8; j++) qout[zig[i * 8 + j]] = qin[zig[i * 8 + j]] * IMULT(aaidct[i], aaidct[j]); } guvcview-src-1.7.1/src/v4l2uvc.c0000664000175000017500000011402312173235416015435 0ustar paulopaulo/*******************************************************************************# # guvcview http://guvcview.sourceforge.net # # # # Paulo Assis # # # # 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # # ********************************************************************************/ /*******************************************************************************# # # # V4L2 interface # # # ********************************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include /* support for internationalization - i18n */ #include #include "v4l2uvc.h" #include "v4l2_dyna_ctrls.h" #include "utils.h" #include "picture.h" #include "colorspaces.h" #include "ms_time.h" #define __VMUTEX &videoIn->mutex /* needed only for language files (not used)*/ // V4L2 control strings #define CSTR_USER_CLASS N_("User Controls") #define CSTR_BRIGHT N_("Brightness") #define CSTR_CONTRAST N_("Contrast") #define CSTR_HUE N_("Hue") #define CSTR_SATURAT N_("Saturation") #define CSTR_SHARP N_("Sharpness") #define CSTR_GAMMA N_("Gamma") #define CSTR_BLCOMP N_("Backlight Compensation") #define CSTR_PLFREQ N_("Power Line Frequency") #define CSTR_HUEAUTO N_("Hue, Automatic") #define CSTR_FOCUSAUTO N_("Focus, Auto") #define CSTR_EXPMENU1 N_("Manual Mode") #define CSTR_EXPMENU2 N_("Auto Mode") #define CSTR_EXPMENU3 N_("Shutter Priority Mode") #define CSTR_EXPMENU4 N_("Aperture Priority Mode") #define CSTR_BLACK_LEVEL N_("Black Level") #define CSTR_AUTO_WB N_("White Balance, Automatic") #define CSTR_DO_WB N_("Do White Balance") #define CSTR_RB N_("Red Balance") #define CSTR_BB N_("Blue Balance") #define CSTR_EXP N_("Exposure") #define CSTR_AUTOGAIN N_("Gain, Automatic") #define CSTR_GAIN N_("Gain") #define CSTR_HFLIP N_("Horizontal Flip") #define CSTR_VFLIP N_("Vertical Flip") #define CSTR_HCENTER N_("Horizontal Center") #define CSTR_VCENTER N_("Vertical Center") #define CSTR_CHR_AGC N_("Chroma AGC") #define CSTR_CLR_KILL N_("Color Killer") #define CSTR_COLORFX N_("Color Effects") // CAMERA CLASS control strings #define CSTR_CAMERA_CLASS N_("Camera Controls") #define CSTR_EXPAUTO N_("Auto Exposure") #define CSTR_EXPABS N_("Exposure Time, Absolute") #define CSTR_EXPAUTOPRI N_("Exposure, Dynamic Framerate") #define CSTR_PAN_REL N_("Pan, Relative") #define CSTR_TILT_REL N_("Tilt, Relative") #define CSTR_PAN_RESET N_("Pan, Reset") #define CSTR_TILT_RESET N_("Tilt, Reset") #define CSTR_PAN_ABS N_("Pan, Absolute") #define CSTR_TILT_ABS N_"Tilt, Absolute") #define CSTR_FOCUS_ABS N_("Focus, Absolute") #define CSTR_FOCUS_REL N_("Focus, Relative") #define CSTR_FOCUS_AUTO N_("Focus, Automatic") #define CSTR_ZOOM_ABS N_("Zoom, Absolute") #define CSTR_ZOOM_REL N_("Zoom, Relative") #define CSTR_ZOOM_CONT N_("Zoom, Continuous") #define CSTR_PRIV N_("Privacy") //UVC specific control strings #define CSTR_EXPAUTO_UVC N_("Exposure, Auto") #define CSTR_EXPAUTOPRI_UVC N_("Exposure, Auto Priority") #define CSTR_EXPABS_UVC N_("Exposure (Absolute)") #define CSTR_WBTAUTO_UVC N_("White Balance Temperature, Auto") #define CSTR_WBT_UVC N_("White Balance Temperature") #define CSTR_WBCAUTO_UVC N_("White Balance Component, Auto") #define CSTR_WBCB_UVC N_("White Balance Blue Component") #define CSTR_WBCR_UVC N_("White Balance Red Component") //libwebcam specific control strings #define CSTR_FOCUS_LIBWC N_("Focus") #define CSTR_FOCUSABS_LIBWC N_("Focus (Absolute)") /* ioctl with a number of retries in the case of failure * args: * fd - device descriptor * IOCTL_X - ioctl reference * arg - pointer to ioctl data * returns - ioctl result */ int xioctl(int fd, int IOCTL_X, void *arg) { int ret = 0; int tries= IOCTL_RETRY; do { ret = v4l2_ioctl(fd, IOCTL_X, arg); } while (ret && tries-- && ((errno == EINTR) || (errno == EAGAIN) || (errno == ETIMEDOUT))); if (ret && (tries <= 0)) g_printerr("ioctl (%i) retried %i times - giving up: %s)\n", IOCTL_X, IOCTL_RETRY, strerror(errno)); return (ret); } /* Query video device capabilities and supported formats * args: * vd: pointer to a VdIn struct ( must be allready allocated ) * * returns: error code (0- OK) */ static int check_videoIn(struct vdIn *vd, int *width, int *height) { if (vd == NULL) return VDIN_ALLOC_ERR; memset(&vd->cap, 0, sizeof(struct v4l2_capability)); if ( xioctl(vd->fd, VIDIOC_QUERYCAP, &vd->cap) < 0 ) { perror("VIDIOC_QUERYCAP error"); return VDIN_QUERYCAP_ERR; } if ( ( vd->cap.capabilities & V4L2_CAP_VIDEO_CAPTURE ) == 0) { g_printerr("Error opening device %s: video capture not supported.\n", vd->videodevice); return VDIN_QUERYCAP_ERR; } if (!(vd->cap.capabilities & V4L2_CAP_STREAMING)) { g_printerr("%s does not support streaming i/o\n", vd->videodevice); return VDIN_QUERYCAP_ERR; } if(vd->cap_meth == IO_READ) { vd->mem[vd->buf.index] = NULL; if (!(vd->cap.capabilities & V4L2_CAP_READWRITE)) { g_printerr("%s does not support read i/o\n", vd->videodevice); return VDIN_READ_ERR; } } g_print("Init. %s (location: %s)\n", vd->cap.card, vd->cap.bus_info); vd->listFormats = enum_frame_formats( width, height, vd->fd); if(!(vd->listFormats->listVidFormats)) g_printerr("Couldn't detect any supported formats on your device (%i)\n", vd->listFormats->numb_formats); return VDIN_OK; } static int unmap_buff(struct vdIn *vd) { int i=0; int ret=0; switch(vd->cap_meth) { case IO_READ: break; case IO_MMAP: for (i = 0; i < NB_BUFFER; i++) { // unmap old buffer if((vd->mem[i] != MAP_FAILED) && vd->buff_length[i]) if((ret=v4l2_munmap(vd->mem[i], vd->buff_length[i]))<0) { perror("couldn't unmap buff"); } } } return ret; } static int map_buff(struct vdIn *vd) { int i = 0; // map new buffer for (i = 0; i < NB_BUFFER; i++) { vd->mem[i] = v4l2_mmap( NULL, // start anywhere vd->buff_length[i], PROT_READ | PROT_WRITE, MAP_SHARED, vd->fd, vd->buff_offset[i]); if (vd->mem[i] == MAP_FAILED) { perror("Unable to map buffer"); return VDIN_MMAP_ERR; } } return (0); } /* Query and map buffers * args: * vd: pointer to a VdIn struct ( must be allready allocated ) * setUNMAP: ( flag )if set unmap old buffers first * * returns: error code (0- OK) */ static int query_buff(struct vdIn *vd) { int i=0; int ret=0; switch(vd->cap_meth) { case IO_READ: break; case IO_MMAP: for (i = 0; i < NB_BUFFER; i++) { memset(&vd->buf, 0, sizeof(struct v4l2_buffer)); vd->buf.index = i; vd->buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; //vd->buf.flags = V4L2_BUF_FLAG_TIMECODE; //vd->buf.timecode = vd->timecode; //vd->buf.timestamp.tv_sec = 0;//get frame as soon as possible //vd->buf.timestamp.tv_usec = 0; vd->buf.memory = V4L2_MEMORY_MMAP; ret = xioctl(vd->fd, VIDIOC_QUERYBUF, &vd->buf); if (ret < 0) { perror("VIDIOC_QUERYBUF - Unable to query buffer"); if(errno == EINVAL) { g_printerr("trying with read method instead\n"); vd->cap_meth = IO_READ; } return VDIN_QUERYBUF_ERR; } if (vd->buf.length <= 0) g_printerr("WARNING VIDIOC_QUERYBUF - buffer length is %d\n", vd->buf.length); vd->buff_length[i] = vd->buf.length; vd->buff_offset[i] = vd->buf.m.offset; } // map the new buffers if(map_buff(vd) != 0) return VDIN_MMAP_ERR; } return VDIN_OK; } /* Queue Buffers * args: * vd: pointer to a VdIn struct ( must be allready allocated ) * * returns: error code (0- OK) */ static int queue_buff(struct vdIn *vd) { int i=0; int ret=0; switch(vd->cap_meth) { case IO_READ: break; case IO_MMAP: default: for (i = 0; i < NB_BUFFER; ++i) { memset(&vd->buf, 0, sizeof(struct v4l2_buffer)); vd->buf.index = i; vd->buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; //vd->buf.flags = V4L2_BUF_FLAG_TIMECODE; //vd->buf.timecode = vd->timecode; //vd->buf.timestamp.tv_sec = 0;//get frame as soon as possible //vd->buf.timestamp.tv_usec = 0; vd->buf.memory = V4L2_MEMORY_MMAP; ret = xioctl(vd->fd, VIDIOC_QBUF, &vd->buf); if (ret < 0) { perror("VIDIOC_QBUF - Unable to queue buffer"); return VDIN_QBUF_ERR; } } vd->buf.index = 0; /*reset index*/ } return VDIN_OK; } /* Enable video stream * args: * vd: pointer to a VdIn struct ( must be allready initiated) * * returns: VIDIOC_STREAMON ioctl result (0- OK) */ int video_enable(struct vdIn *vd) { int type = V4L2_BUF_TYPE_VIDEO_CAPTURE; int ret=0; switch(vd->cap_meth) { case IO_READ: //do nothing break; case IO_MMAP: default: ret = xioctl(vd->fd, VIDIOC_STREAMON, &type); if (ret < 0) { perror("VIDIOC_STREAMON - Unable to start capture"); return VDIN_STREAMON_ERR; } break; } vd->isstreaming = 1; return 0; } /* Disable video stream * args: * vd: pointer to a VdIn struct ( must be allready initiated) * * returns: VIDIOC_STREAMOFF ioctl result (0- OK) */ int video_disable(struct vdIn *vd) { int type = V4L2_BUF_TYPE_VIDEO_CAPTURE; int ret=0; switch(vd->cap_meth) { case IO_READ: //do nothing break; case IO_MMAP: default: ret = xioctl(vd->fd, VIDIOC_STREAMOFF, &type); if (ret < 0) { perror("VIDIOC_STREAMOFF - Unable to stop capture"); if(errno == 9) vd->isstreaming = 0;/*capture as allready stoped*/ return VDIN_STREAMOFF_ERR; } break; } vd->isstreaming = 0; return 0; } /* gets video stream jpeg compression parameters * args: * vd: pointer to a VdIn struct ( must be allready initiated) * * returns: VIDIOC_G_JPEGCOMP ioctl result value */ int get_jpegcomp(struct vdIn *vd) { int ret = xioctl(vd->fd, VIDIOC_G_JPEGCOMP, &vd->jpgcomp); if(!ret) { g_print("VIDIOC_G_COMP:\n"); g_print(" quality: %i\n", vd->jpgcomp.quality); g_print(" APPn: %i\n", vd->jpgcomp.APPn); g_print(" APP_len: %i\n", vd->jpgcomp.APP_len); g_print(" APP_data: %s\n", vd->jpgcomp.APP_data); g_print(" COM_len: %i\n", vd->jpgcomp.COM_len); g_print(" COM_data: %s\n", vd->jpgcomp.COM_data); g_print(" jpeg_markers: 0x%x\n", vd->jpgcomp.jpeg_markers); } else { perror("VIDIOC_G_COMP:"); if(errno == EINVAL) { vd->jpgcomp.quality = -1; //not supported g_print(" compression control not supported\n"); } } return (ret); } /* sets video stream jpeg compression parameters * args: * vd: pointer to a VdIn struct ( must be allready initiated) * * returns: VIDIOC_S_JPEGCOMP ioctl result value */ int set_jpegcomp(struct vdIn *vd) { int ret = xioctl(vd->fd, VIDIOC_S_JPEGCOMP, &vd->jpgcomp); if(ret != 0) { perror("VIDIOC_S_COMP:"); if(errno == EINVAL) { vd->jpgcomp.quality = -1; //not supported g_print(" compression control not supported\n"); } } return (ret); } /* Try/Set device video stream format * args: * vd: pointer to a VdIn struct ( must be allready allocated ) * * returns: error code ( 0 - VDIN_OK) */ static int init_v4l2(struct vdIn *vd, int *format, int *width, int *height, int *fps, int *fps_num) { int ret = 0; // make sure we set a valid format g_print("checking format: %i\n", *format); if ((ret=check_SupPixFormat(*format)) < 0) { // not available - Fail so we can check other formats (don't bother trying it) g_printerr("Format unavailable: %d.\n",*format); return VDIN_FORMAT_ERR; } vd->timestamp = 0; // set format vd->fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; vd->fmt.fmt.pix.width = *width; vd->fmt.fmt.pix.height = *height; vd->fmt.fmt.pix.pixelformat = *format; vd->fmt.fmt.pix.field = V4L2_FIELD_ANY; ret = xioctl(vd->fd, VIDIOC_S_FMT, &vd->fmt); if (ret < 0) { perror("VIDIOC_S_FORMAT - Unable to set format"); return VDIN_FORMAT_ERR; } if ((vd->fmt.fmt.pix.width != *width) || (vd->fmt.fmt.pix.height != *height)) { g_printerr("Requested Format unavailable: get width %d height %d \n", vd->fmt.fmt.pix.width, vd->fmt.fmt.pix.height); *width = vd->fmt.fmt.pix.width; *height = vd->fmt.fmt.pix.height; } //deprecated in v4l2 - still waiting for new API implementation if(*format == V4L2_PIX_FMT_MJPEG || *format == V4L2_PIX_FMT_JPEG) { get_jpegcomp(vd); } /* ----------- FPS --------------*/ input_set_framerate(vd, fps, fps_num); switch (vd->cap_meth) { case IO_READ: //allocate buffer for read memset(&vd->buf, 0, sizeof(struct v4l2_buffer)); vd->buf.length = (*width) * (*height) * 3; //worst case (rgb) vd->mem[vd->buf.index] = g_new0(BYTE, vd->buf.length); break; case IO_MMAP: default: // request buffers memset(&vd->rb, 0, sizeof(struct v4l2_requestbuffers)); vd->rb.count = NB_BUFFER; vd->rb.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; vd->rb.memory = V4L2_MEMORY_MMAP; ret = xioctl(vd->fd, VIDIOC_REQBUFS, &vd->rb); if (ret < 0) { perror("VIDIOC_REQBUFS - Unable to allocate buffers"); return VDIN_REQBUFS_ERR; } // map the buffers if (query_buff(vd)) { //delete requested buffers //no need to unmap as mmap failed for sure memset(&vd->rb, 0, sizeof(struct v4l2_requestbuffers)); vd->rb.count = 0; vd->rb.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; vd->rb.memory = V4L2_MEMORY_MMAP; if(xioctl(vd->fd, VIDIOC_REQBUFS, &vd->rb)<0) perror("VIDIOC_REQBUFS - Unable to delete buffers"); return VDIN_QUERYBUF_ERR; } // Queue the buffers if (queue_buff(vd)) { //delete requested buffers unmap_buff(vd); memset(&vd->rb, 0, sizeof(struct v4l2_requestbuffers)); vd->rb.count = 0; vd->rb.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; vd->rb.memory = V4L2_MEMORY_MMAP; if(xioctl(vd->fd, VIDIOC_REQBUFS, &vd->rb)<0) perror("VIDIOC_REQBUFS - Unable to delete buffers"); return VDIN_QBUF_ERR; } } return VDIN_OK; } /* Alloc image buffers for decoding video stream * args: * vd: pointer to a VdIn struct ( must be allready allocated ) * * returns: error code ( 0 - VDIN_OK) */ static int videoIn_frame_alloca(struct vdIn *vd, int format, int width, int height) { int ret = VDIN_OK; size_t framebuf_size=0; size_t tmpbuf_size=0; int framesizeIn = (width * height << 1); //2 bytes per pixel switch (format) { case V4L2_PIX_FMT_JPEG: case V4L2_PIX_FMT_MJPEG: // alloc a temp buffer to reconstruct the pict (MJPEG) tmpbuf_size= framesizeIn; vd->tmpbuffer = g_new0(unsigned char, tmpbuf_size); framebuf_size = width * (height + 8) * 2; vd->framebuffer = g_new0(unsigned char, framebuf_size); break; case V4L2_PIX_FMT_UYVY: case V4L2_PIX_FMT_YVYU: case V4L2_PIX_FMT_YYUV: case V4L2_PIX_FMT_YUV420: // only needs 3/2 bytes per pixel but we alloc 2 bytes per pixel case V4L2_PIX_FMT_YVU420: // only needs 3/2 bytes per pixel but we alloc 2 bytes per pixel case V4L2_PIX_FMT_Y41P: // only needs 3/2 bytes per pixel but we alloc 2 bytes per pixel case V4L2_PIX_FMT_NV12: case V4L2_PIX_FMT_NV21: case V4L2_PIX_FMT_NV16: case V4L2_PIX_FMT_NV61: case V4L2_PIX_FMT_SPCA501: case V4L2_PIX_FMT_SPCA505: case V4L2_PIX_FMT_SPCA508: // alloc a temp buffer for converting to YUYV tmpbuf_size= framesizeIn; vd->tmpbuffer = g_new0(unsigned char, tmpbuf_size); framebuf_size = framesizeIn; vd->framebuffer = g_new0(unsigned char, framebuf_size); break; case V4L2_PIX_FMT_GREY: // alloc a temp buffer for converting to YUYV tmpbuf_size= width * height; // 1 byte per pixel vd->tmpbuffer = g_new0(unsigned char, tmpbuf_size); framebuf_size = framesizeIn; vd->framebuffer = g_new0(unsigned char, framebuf_size); break; case V4L2_PIX_FMT_Y10BPACK: case V4L2_PIX_FMT_Y16: // alloc a temp buffer for converting to YUYV tmpbuf_size= width * height * 2; // 2 byte per pixel vd->tmpbuffer = g_new0(unsigned char, tmpbuf_size); framebuf_size = framesizeIn; vd->framebuffer = g_new0(unsigned char, framebuf_size); break; case V4L2_PIX_FMT_YUYV: // YUYV doesn't need a temp buffer but we will set it if/when // video processing disable control is checked (bayer processing). // (logitech cameras only) framebuf_size = framesizeIn; vd->framebuffer = g_new0(unsigned char, framebuf_size); break; case V4L2_PIX_FMT_SGBRG8: //0 case V4L2_PIX_FMT_SGRBG8: //1 case V4L2_PIX_FMT_SBGGR8: //2 case V4L2_PIX_FMT_SRGGB8: //3 // Raw 8 bit bayer // when grabbing use: // bayer_to_rgb24(bayer_data, RGB24_data, width, height, 0..3) // rgb2yuyv(RGB24_data, vd->framebuffer, width, height) // alloc a temp buffer for converting to YUYV // rgb buffer for decoding bayer data tmpbuf_size = width * height * 3; vd->tmpbuffer = g_new0(unsigned char, tmpbuf_size); framebuf_size = framesizeIn; vd->framebuffer = g_new0(unsigned char, framebuf_size); break; case V4L2_PIX_FMT_RGB24: case V4L2_PIX_FMT_BGR24: //rgb or bgr (8-8-8) // alloc a temp buffer for converting to YUYV // rgb buffer tmpbuf_size = width * height * 3; vd->tmpbuffer = g_new0(unsigned char, tmpbuf_size); framebuf_size = framesizeIn; vd->framebuffer = g_new0(unsigned char, framebuf_size); break; default: g_printerr("(v4l2uvc.c) should never arrive (1)- exit fatal !!\n"); ret = VDIN_UNKNOWN_ERR; g_free(vd->framebuffer); vd->framebuffer = NULL; g_free(vd->tmpbuffer); vd->tmpbuffer = NULL; return (ret); } if ((!vd->framebuffer) || (framebuf_size <=0)) { g_printerr("couldn't calloc %lu bytes of memory for frame buffer\n", (unsigned long) framebuf_size); ret = VDIN_FBALLOC_ERR; g_free(vd->framebuffer); vd->framebuffer = NULL; g_free(vd->tmpbuffer); vd->tmpbuffer = NULL; return (ret); } else { int i = 0; // set framebuffer to black (y=0x00 u=0x80 v=0x80) by default for (i=0; i<(framebuf_size-4); i+=4) { vd->framebuffer[i]=0x00; //Y vd->framebuffer[i+1]=0x80;//U vd->framebuffer[i+2]=0x00;//Y vd->framebuffer[i+3]=0x80;//V } } return (ret); } /* cleans VdIn struct and allocations * args: * pointer to initiated vdIn struct * * returns: void */ void clear_v4l2(struct vdIn *videoIn) { v4l2_close(videoIn->fd); videoIn->fd=0; g_free(videoIn->videodevice); g_free(videoIn->VidFName); g_free(videoIn->ImageFName); videoIn->videodevice = NULL; videoIn->VidFName = NULL; videoIn->ImageFName = NULL; if(videoIn->cap_meth == IO_READ) { g_print("cleaning read buffer\n"); if((videoIn->buf.length > 0) && videoIn->mem[0]) { g_free(videoIn->mem[0]); videoIn->mem[0] = NULL; } } __CLOSE_MUTEX( __VMUTEX ); } /* Init VdIn struct with default and/or global values * args: * vd: pointer to a VdIn struct ( must be allready allocated ) * global: pointer to a GLOBAL struct ( must be allready initiated ) * * returns: error code ( 0 - VDIN_OK) */ int init_videoIn(struct vdIn *videoIn, struct GLOBAL *global) { int ret = VDIN_OK; char *device = global->videodevice; /* Create a udev object */ videoIn->udev = udev_new(); __INIT_MUTEX( __VMUTEX ); if (videoIn == NULL || device == NULL) return VDIN_ALLOC_ERR; if (global->width == 0 || global->height == 0) return VDIN_RESOL_ERR; if (global->cap_meth < IO_MMAP || global->cap_meth > IO_READ) global->cap_meth = IO_MMAP; //mmap by default videoIn->cap_meth = global->cap_meth; if(global->debug) g_print("capture method = %i\n",videoIn->cap_meth); videoIn->videodevice = NULL; videoIn->videodevice = g_strdup(device); g_print("video device: %s \n", videoIn->videodevice); //flag to video thread videoIn->capVid = FALSE; //flag from video thread videoIn->VidCapStop=TRUE; videoIn->VidFName = g_strdup(global->vidFPath[0]); videoIn->signalquit = FALSE; videoIn->PanTilt=0; videoIn->isbayer = 0; //bayer mode off videoIn->pix_order=0; // pix order for bayer mode def: gbgbgb..|rgrgrg.. videoIn->setFPS=0; videoIn->capImage=FALSE; videoIn->cap_raw=0; videoIn->ImageFName = g_strdup(global->imgFPath[0]); //timestamps not supported by UVC driver //vd->timecode.type = V4L2_TC_TYPE_25FPS; //vd->timecode.flags = V4L2_TC_FLAG_DROPFRAME; videoIn->available_exp[0]=-1; videoIn->available_exp[1]=-1; videoIn->available_exp[2]=-1; videoIn->available_exp[3]=-1; videoIn->tmpbuffer = NULL; videoIn->framebuffer = NULL; /*start udev device monitoring*/ /* Set up a monitor to monitor v4l2 devices */ if(videoIn->udev) { videoIn->udev_mon = udev_monitor_new_from_netlink(videoIn->udev, "udev"); udev_monitor_filter_add_match_subsystem_devtype(videoIn->udev_mon, "video4linux", NULL); udev_monitor_enable_receiving(videoIn->udev_mon); /* Get the file descriptor (fd) for the monitor */ videoIn->udev_fd = udev_monitor_get_fd(videoIn->udev_mon); } videoIn->listDevices = enum_devices( videoIn->videodevice, videoIn->udev, (int) global->debug); if (videoIn->listDevices != NULL) { if(!(videoIn->listDevices->listVidDevices)) g_printerr("unable to detect video devices on your system (%i)\n", videoIn->listDevices->num_devices); } else g_printerr("Unable to detect devices on your system\n"); if (videoIn->fd <=0 ) //open device { if ((videoIn->fd = v4l2_open(videoIn->videodevice, O_RDWR | O_NONBLOCK, 0)) < 0) { perror("ERROR opening V4L interface"); ret = VDIN_DEVICE_ERR; clear_v4l2(videoIn); return (ret); } } //reset v4l2_format memset(&videoIn->fmt, 0, sizeof(struct v4l2_format)); // populate video capabilities structure array // should only be called after all vdIn struct elements // have been initialized if((ret = check_videoIn(videoIn, &global->width, &global->height)) != VDIN_OK) { clear_v4l2(videoIn); return (ret); } //add dynamic controls //only for uvc logitech cameras //needs admin rights if(videoIn->listDevices->num_devices > 0) { g_print("vid:%04x \npid:%04x \ndriver:%s\n", videoIn->listDevices->listVidDevices[videoIn->listDevices->current_device].vendor, videoIn->listDevices->listVidDevices[videoIn->listDevices->current_device].product, videoIn->listDevices->listVidDevices[videoIn->listDevices->current_device].driver); if(g_strcmp0(videoIn->listDevices->listVidDevices[videoIn->listDevices->current_device].driver,"uvcvideo") == 0) { if(videoIn->listDevices->listVidDevices[videoIn->listDevices->current_device].vendor != 0) { //check for logitech vid if (videoIn->listDevices->listVidDevices[videoIn->listDevices->current_device].vendor == 0x046d) (ret=initDynCtrls(videoIn->fd)); else ret= VDIN_DYNCTRL_ERR; } else (ret=initDynCtrls(videoIn->fd)); } else ret = VDIN_DYNCTRL_ERR; } if(global->add_ctrls) { //added extension controls so now we can exit //set a return code for enabling the correct warning window ret = (ret ? VDIN_DYNCTRL_ERR: VDIN_DYNCTRL_OK); clear_v4l2(videoIn); return (ret); } else ret = 0; //clean ret code if(!(global->control_only)) { if ((ret=init_v4l2(videoIn, &global->format, &global->width, &global->height, &global->fps, &global->fps_num)) < 0) { g_printerr("Init v4L2 failed !! \n"); clear_v4l2(videoIn); return (ret); } g_print("fps is set to %i/%i\n", global->fps_num, global->fps); /*allocations*/ if((ret = videoIn_frame_alloca(videoIn, global->format, global->width, global->height)) != VDIN_OK) { clear_v4l2(videoIn); return (ret); } } return (ret); } /* decode video stream (frame buffer in yuyv format) * args: * vd: pointer to a VdIn struct ( must be allready allocated ) * * returns: error code ( 0 - VDIN_OK) */ static int frame_decode(struct vdIn *vd, int format, int width, int height) { int ret = VDIN_OK; int framesizeIn =(width * height << 1);//2 bytes per pixel switch (format) { case V4L2_PIX_FMT_JPEG: case V4L2_PIX_FMT_MJPEG: if(vd->buf.bytesused <= HEADERFRAME1) { // Prevent crash on empty image g_print("Ignoring empty buffer ...\n"); return (ret); } memcpy(vd->tmpbuffer, vd->mem[vd->buf.index],vd->buf.bytesused); if (jpeg_decode(&vd->framebuffer, vd->tmpbuffer, width, height) < 0) { g_printerr("jpeg decode errors\n"); ret = VDIN_DECODE_ERR; return ret; } break; case V4L2_PIX_FMT_UYVY: memcpy(vd->tmpbuffer, vd->mem[vd->buf.index],vd->buf.bytesused); uyvy_to_yuyv(vd->framebuffer, vd->tmpbuffer, width, height); break; case V4L2_PIX_FMT_YVYU: memcpy(vd->tmpbuffer, vd->mem[vd->buf.index],vd->buf.bytesused); yvyu_to_yuyv(vd->framebuffer, vd->tmpbuffer, width, height); break; case V4L2_PIX_FMT_YYUV: memcpy(vd->tmpbuffer, vd->mem[vd->buf.index],vd->buf.bytesused); yyuv_to_yuyv(vd->framebuffer, vd->tmpbuffer, width, height); break; case V4L2_PIX_FMT_YUV420: memcpy(vd->tmpbuffer, vd->mem[vd->buf.index],vd->buf.bytesused); yuv420_to_yuyv(vd->framebuffer, vd->tmpbuffer, width, height); break; case V4L2_PIX_FMT_YVU420: memcpy(vd->tmpbuffer, vd->mem[vd->buf.index],vd->buf.bytesused); yvu420_to_yuyv(vd->framebuffer, vd->tmpbuffer, width, height); break; case V4L2_PIX_FMT_NV12: memcpy(vd->tmpbuffer, vd->mem[vd->buf.index],vd->buf.bytesused); nv12_to_yuyv(vd->framebuffer, vd->tmpbuffer, width, height); break; case V4L2_PIX_FMT_NV21: memcpy(vd->tmpbuffer, vd->mem[vd->buf.index],vd->buf.bytesused); nv21_to_yuyv(vd->framebuffer, vd->tmpbuffer, width, height); break; case V4L2_PIX_FMT_NV16: memcpy(vd->tmpbuffer, vd->mem[vd->buf.index],vd->buf.bytesused); nv16_to_yuyv(vd->framebuffer, vd->tmpbuffer, width, height); break; case V4L2_PIX_FMT_NV61: memcpy(vd->tmpbuffer, vd->mem[vd->buf.index],vd->buf.bytesused); nv61_to_yuyv(vd->framebuffer, vd->tmpbuffer, width, height); break; case V4L2_PIX_FMT_Y41P: memcpy(vd->tmpbuffer, vd->mem[vd->buf.index],vd->buf.bytesused); y41p_to_yuyv(vd->framebuffer, vd->tmpbuffer, width, height); break; case V4L2_PIX_FMT_GREY: memcpy(vd->tmpbuffer, vd->mem[vd->buf.index],vd->buf.bytesused); grey_to_yuyv(vd->framebuffer, vd->tmpbuffer, width, height); break; case V4L2_PIX_FMT_Y10BPACK: memcpy(vd->tmpbuffer, vd->mem[vd->buf.index],vd->buf.bytesused); y10b_to_yuyv(vd->framebuffer, vd->tmpbuffer, width, height); break; case V4L2_PIX_FMT_Y16: memcpy(vd->tmpbuffer, vd->mem[vd->buf.index],vd->buf.bytesused); y16_to_yuyv(vd->framebuffer, vd->tmpbuffer, width, height); break; case V4L2_PIX_FMT_SPCA501: memcpy(vd->tmpbuffer, vd->mem[vd->buf.index],vd->buf.bytesused); s501_to_yuyv(vd->framebuffer, vd->tmpbuffer, width, height); break; case V4L2_PIX_FMT_SPCA505: memcpy(vd->tmpbuffer, vd->mem[vd->buf.index],vd->buf.bytesused); s505_to_yuyv(vd->framebuffer, vd->tmpbuffer, width, height); break; case V4L2_PIX_FMT_SPCA508: memcpy(vd->tmpbuffer, vd->mem[vd->buf.index],vd->buf.bytesused); s508_to_yuyv(vd->framebuffer, vd->tmpbuffer, width, height); break; case V4L2_PIX_FMT_YUYV: if(vd->isbayer>0) { if (!(vd->tmpbuffer)) { // rgb buffer for decoding bayer data vd->tmpbuffer = g_new0(unsigned char, width * height * 3); } bayer_to_rgb24 (vd->mem[vd->buf.index],vd->tmpbuffer, width, height, vd->pix_order); // raw bayer is only available in logitech cameras in yuyv mode rgb2yuyv (vd->tmpbuffer,vd->framebuffer, width, height); } else { if (vd->buf.bytesused > framesizeIn) memcpy(vd->framebuffer, vd->mem[vd->buf.index], (size_t) framesizeIn); else memcpy(vd->framebuffer, vd->mem[vd->buf.index], (size_t) vd->buf.bytesused); } break; case V4L2_PIX_FMT_SGBRG8: //0 bayer_to_rgb24 (vd->mem[vd->buf.index],vd->tmpbuffer, width, height, 0); rgb2yuyv (vd->tmpbuffer, vd->framebuffer, width, height); break; case V4L2_PIX_FMT_SGRBG8: //1 bayer_to_rgb24 (vd->mem[vd->buf.index], vd->tmpbuffer, width, height, 1); rgb2yuyv (vd->tmpbuffer, vd->framebuffer, width, height); break; case V4L2_PIX_FMT_SBGGR8: //2 bayer_to_rgb24 (vd->mem[vd->buf.index], vd->tmpbuffer, width, height, 2); rgb2yuyv (vd->tmpbuffer, vd->framebuffer, width, height); break; case V4L2_PIX_FMT_SRGGB8: //3 bayer_to_rgb24 (vd->mem[vd->buf.index], vd->tmpbuffer, width, height, 3); rgb2yuyv (vd->tmpbuffer, vd->framebuffer, width, height); break; case V4L2_PIX_FMT_RGB24: memcpy(vd->tmpbuffer, vd->mem[vd->buf.index], vd->buf.bytesused); rgb2yuyv(vd->tmpbuffer, vd->framebuffer, width, height); break; case V4L2_PIX_FMT_BGR24: memcpy(vd->tmpbuffer, vd->mem[vd->buf.index],vd->buf.bytesused); bgr2yuyv(vd->tmpbuffer, vd->framebuffer, width, height); break; default: g_printerr("error grabbing (v4l2uvc.c) unknown format: %i\n", format); ret = VDIN_UNKNOWN_ERR; return ret; } return ret; } /* Grabs video frame and decodes it if necessary * args: * vd: pointer to a VdIn struct ( must be allready initiated) * * returns: error code ( 0 - VDIN_OK) */ int uvcGrab(struct vdIn *vd, int format, int width, int height, int *fps, int *fps_num) { int ret = VDIN_OK; fd_set rdset; struct timeval timeout; UINT64 ts = 0; //make sure streaming is on if (!vd->isstreaming) if (video_enable(vd)) { vd->signalquit = TRUE; return ret; } FD_ZERO(&rdset); FD_SET(vd->fd, &rdset); timeout.tv_sec = 1; // 1 sec timeout timeout.tv_usec = 0; // select - wait for data or timeout ret = select(vd->fd + 1, &rdset, NULL, NULL, &timeout); if (ret < 0) { perror(" Could not grab image (select error)"); vd->timestamp = 0; return VDIN_SELEFAIL_ERR; } else if (ret == 0) { perror(" Could not grab image (select timeout)"); vd->timestamp = 0; return VDIN_SELETIMEOUT_ERR; } else if ((ret > 0) && (FD_ISSET(vd->fd, &rdset))) { switch(vd->cap_meth) { case IO_READ: if(vd->setFPS > 0) { video_disable(vd); input_set_framerate (vd, fps, fps_num); video_enable(vd); vd->setFPS = 0; /*no need to query and queue buffers*/ } vd->buf.bytesused = v4l2_read (vd->fd, vd->mem[vd->buf.index], vd->buf.length); vd->timestamp = ns_time_monotonic(); if (-1 == vd->buf.bytesused ) { switch (errno) { case EAGAIN: g_print("No data available for read\n"); return VDIN_SELETIMEOUT_ERR; break; case EINVAL: perror("Read method error, try mmap instead"); return VDIN_READ_ERR; break; case EIO: perror("read I/O Error"); return VDIN_READ_ERR; break; default: perror("read"); return VDIN_READ_ERR; break; } vd->timestamp = 0; } break; case IO_MMAP: default: /*query and queue buffers since fps or compression as changed*/ if((vd->setFPS > 0) || (vd->setJPEGCOMP > 0)) { /*------------------------------------------*/ /* change video fps or frame compression */ /*------------------------------------------*/ if(vd->setFPS) //change fps { video_disable(vd); unmap_buff(vd); input_set_framerate (vd, fps, fps_num); vd->setFPS = 0; query_buff(vd); queue_buff(vd); video_enable(vd); } else if(vd->setJPEGCOMP) //change jpeg quality/compression in video frame { video_disable(vd); unmap_buff(vd); set_jpegcomp(vd); get_jpegcomp(vd); query_buff(vd); queue_buff(vd); video_enable(vd); vd->setJPEGCOMP = 0; } } else { memset(&vd->buf, 0, sizeof(struct v4l2_buffer)); vd->buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; vd->buf.memory = V4L2_MEMORY_MMAP; ret = xioctl(vd->fd, VIDIOC_DQBUF, &vd->buf); if (ret < 0) { perror("VIDIOC_DQBUF - Unable to dequeue buffer "); ret = VDIN_DEQBUFS_ERR; return ret; } ts = (UINT64) vd->buf.timestamp.tv_sec * G_NSEC_PER_SEC + vd->buf.timestamp.tv_usec * 1000; //in nanosec /* use buffer timestamp if set by the driver, otherwise use current system time */ if(ts > 0) vd->timestamp = ts; else vd->timestamp = ns_time_monotonic(); ret = xioctl(vd->fd, VIDIOC_QBUF, &vd->buf); if (ret < 0) { perror("VIDIOC_QBUF - Unable to queue buffer"); ret = VDIN_QBUF_ERR; return ret; } } } } // save raw frame if (vd->cap_raw > 0) { SaveBuff (vd->ImageFName,vd->buf.bytesused,vd->mem[vd->buf.index]); vd->cap_raw=0; } if ((ret = frame_decode(vd, format, width, height)) != VDIN_OK) { vd->signalquit = TRUE; return ret; } return VDIN_OK; } static int close_v4l2_buffers (struct vdIn *vd) { //clean frame buffers if(vd->tmpbuffer != NULL) g_free(vd->tmpbuffer); vd->tmpbuffer = NULL; if(vd->framebuffer != NULL) g_free(vd->framebuffer); vd->framebuffer = NULL; // unmap queue buffers switch(vd->cap_meth) { case IO_READ: if(vd->mem[vd->buf.index]!= NULL) { g_free(vd->mem[vd->buf.index]); vd->mem[vd->buf.index] = NULL; } break; case IO_MMAP: default: //delete requested buffers unmap_buff(vd); memset(&vd->rb, 0, sizeof(struct v4l2_requestbuffers)); vd->rb.count = 0; vd->rb.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; vd->rb.memory = V4L2_MEMORY_MMAP; if(xioctl(vd->fd, VIDIOC_REQBUFS, &vd->rb)<0) { g_printerr("VIDIOC_REQBUFS - Failed to delete buffers: %s (errno %d)\n", strerror(errno), errno); return(VDIN_REQBUFS_ERR); } break; } return (VDIN_OK); } int restart_v4l2(struct vdIn *vd, struct GLOBAL *global) { int ret = VDIN_OK; video_disable(vd); close_v4l2_buffers(vd); if ((ret=init_v4l2(vd, &global->format, &global->width, &global->height, &global->fps, &global->fps_num)) < 0) { g_printerr("Init v4L2 failed !! \n"); vd->signalquit = TRUE; return ret; } /*allocations*/ if((ret = videoIn_frame_alloca(vd, global->format, global->width, global->height)) != VDIN_OK) { vd->signalquit = TRUE; return ret; } /*try to start the video stream*/ //it's OK if it fails since it is retried in uvcGrab video_enable(vd); return (ret); } /* cleans VdIn struct and allocations * args: * pointer to initiated vdIn struct * * returns: void */ void close_v4l2(struct vdIn *videoIn, gboolean control_only) { if (videoIn->isstreaming) video_disable(videoIn); if (videoIn->udev) udev_unref(videoIn->udev); if(videoIn->videodevice) g_free(videoIn->videodevice); if(videoIn->ImageFName)g_free(videoIn->ImageFName); if(videoIn->VidFName)g_free(videoIn->VidFName); // free format allocations if(videoIn->listFormats) freeFormats(videoIn->listFormats); if (!control_only) { close_v4l2_buffers(videoIn); } videoIn->videodevice = NULL; videoIn->tmpbuffer = NULL; videoIn->framebuffer = NULL; videoIn->ImageFName = NULL; videoIn->VidFName = NULL; if(videoIn->listDevices != NULL) freeDevices(videoIn->listDevices); // close device descriptor if(videoIn->fd) v4l2_close(videoIn->fd); __CLOSE_MUTEX( __VMUTEX ); // free struct allocation if(videoIn) g_free(videoIn); videoIn=NULL; } /* sets video device frame rate * args: * vd: pointer to a VdIn struct ( must be allready initiated) * * returns: VIDIOC_S_PARM ioctl result value */ int input_set_framerate (struct vdIn * device, int *fps, int *fps_num) { int fd; int ret=0; fd = device->fd; device->streamparm.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; ret = xioctl(fd, VIDIOC_G_PARM, &device->streamparm); if (ret < 0) return ret; if (!(device->streamparm.parm.capture.capability & V4L2_CAP_TIMEPERFRAME)) return -ENOTSUP; device->streamparm.parm.capture.timeperframe.numerator = *fps_num; device->streamparm.parm.capture.timeperframe.denominator = *fps; ret = xioctl(fd,VIDIOC_S_PARM,&device->streamparm); if (ret < 0) { g_printerr("Unable to set %d/%d fps\n", *fps_num, *fps); perror("VIDIOC_S_PARM error"); } /*make sure we now have the correct fps*/ input_get_framerate (device, fps, fps_num); return ret; } /* gets video device defined frame rate (not real - consider it a maximum value) * args: * vd: pointer to a VdIn struct ( must be allready initiated) * * returns: VIDIOC_G_PARM ioctl result value */ int input_get_framerate (struct vdIn * device, int *fps, int *fps_num) { int fd; int ret=0; fd = device->fd; device->streamparm.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; ret = xioctl(fd,VIDIOC_G_PARM,&device->streamparm); if (ret < 0) { perror("VIDIOC_G_PARM - Unable to get timeperframe"); } else { if (device->streamparm.parm.capture.capability & V4L2_CAP_TIMEPERFRAME) { // it seems numerator is allways 1 but we don't do assumptions here :-) *fps = device->streamparm.parm.capture.timeperframe.denominator; *fps_num = device->streamparm.parm.capture.timeperframe.numerator; } } if(*fps == 0 ) *fps = 1; if(*fps_num == 0) *fps_num = 1; return ret; } guvcview-src-1.7.1/src/jdatatype.h0000664000175000017500000000532412173235416016125 0ustar paulopaulo/*******************************************************************************# # guvcview http://guvcview.sourceforge.net # # # # Paulo Assis # # # # 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # # ********************************************************************************/ /*******************************************************************************# # # # jpeg encoder struct used in Jpeg encoder # # # # Adapted for linux, Paulo Assis, 2007 # ********************************************************************************/ #ifndef JDATATYPE_H #define JDATATYPE_H #include "defs.h" typedef struct JPEG_ENCODER_STRUCTURE { UINT16 mcu_width; UINT16 mcu_height; UINT16 horizontal_mcus; UINT16 vertical_mcus; UINT16 rows; UINT16 cols; UINT16 length_minus_mcu_width; UINT16 length_minus_width; UINT16 incr; UINT16 mcu_width_size; UINT16 offset; INT16 ldc1; INT16 ldc2; INT16 ldc3; UINT32 lcode; UINT16 bitindex; /* MCUs */ INT16 Y1 [64]; INT16 Y2 [64]; INT16 Temp [64]; INT16 CB [64]; INT16 CR [64]; /* Quantization Tables */ UINT8 Lqt [64]; UINT8 Cqt [64]; UINT16 ILqt [64]; UINT16 ICqt [64]; } _JPEG_ENCODER_STRUCTURE; #endif guvcview-src-1.7.1/src/close.h0000664000175000017500000000366412173235416015252 0ustar paulopaulo/*******************************************************************************# # guvcview http://guvcview.sourceforge.net # # # # Paulo Assis # # Nobuhiro Iwamatsu # # Add UYVY color support(Macbook iSight) # # # # 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # # ********************************************************************************/ #ifndef CLOSE_H #define CLOSE_H #include "guvcview.h" void clean_struct (struct ALL_DATA *all_data); void shutd (gint restart, struct ALL_DATA *all_data); #endif guvcview-src-1.7.1/src/io_stream.h0000775000175000017500000000707612173235416016133 0ustar paulopaulo/*******************************************************************************# # guvcview http://guvcview.sourceforge.net # # # # Paulo Assis # # # # 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # # ********************************************************************************/ #ifndef IO_STREAM_H #define IO_STREAM_H #include "../config.h" #include "defs.h" enum STREAM_TYPE { STREAM_TYPE_VIDEO = 0, STREAM_TYPE_AUDIO = 1, STREAM_TYPE_SUB = 2 //not supported }; typedef enum STREAM_TYPE STREAM_TYPE; struct io_Stream { STREAM_TYPE type; //stream type int32_t id; uint32_t packet_count; /** AVI specific data */ void* indexes; //pointer to avi_Index struct int32_t entry; int64_t rate_hdr_strm, frames_hdr_strm; char compressor[8]; /* Type of compressor, 4 bytes + padding for 0 byte */ int32_t codec_id; //video int32_t width; /* Width of a video frame */ int32_t height; /* Height of a video frame */ double fps; /* Frames per second */ //audio int32_t a_fmt; /* Audio format, see #defines below */ int32_t a_chans; /* Audio channels, 0 for no audio */ int32_t a_rate; /* Rate in Hz */ int32_t a_bits; /* bits per audio sample */ int32_t mpgrate; /* mpg bitrate kbs*/ int32_t a_vbr; /* 0 == no Variable BitRate */ uint64_t audio_strm_length; /* Total number of bytes of audio data */ //stream private data (codec private data) BYTE* extra_data; int32_t extra_data_size; struct io_Stream *previous, *next; }; typedef struct io_Stream io_Stream; /** adds a new stream to the stream list*/ io_Stream* add_new_stream(io_Stream** stream_list, int* list_size); /** destroys all streams in stream list*/ void destroy_stream_list(io_Stream* stream_list, int* list_size); /** get stream with index from stream list*/ io_Stream* get_stream(io_Stream* stream_list, int index); /** get the first video stream from stream list */ io_Stream* get_first_video_stream(io_Stream* stream_list); /** get the first audio stream from the stream list */ io_Stream* get_first_audio_stream(io_Stream* stream_list); /** get the last stream from stream list */ io_Stream* get_last_stream(io_Stream* stream_list); #endif guvcview-src-1.7.1/src/video_format.c0000664000175000017500000000573212173235416016614 0ustar paulopaulo/*******************************************************************************# # guvcview http://guvcview.sourceforge.net # # # # Paulo Assis # # # # 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # # ********************************************************************************/ #include #include /* support for internationalization - i18n */ #include #include #include "guvcview.h" #include "ms_time.h" #include "colorspaces.h" #include "lavc_common.h" #include "video_format.h" #include "vcodecs.h" #include "acodecs.h" #include "defs.h" static vformats_data listSupVFormats[] = //list of software supported formats { { .avformat = FALSE, .name = "AVI", .description = N_("AVI - avi format"), .extension = "avi", .format_str = "avi", .pattern ="*.avi", .flags = 0 }, { .avformat = FALSE, .name = "MATROSKA", .description = N_("MKV - Matroska format"), .extension = "mkv", .format_str = "mkv", .pattern = "*.mkv", .flags = 0 }, { .avformat = FALSE, .name = "WEBM", .description = N_("WEBM - format"), .extension = "webm", .format_str = "webm", .pattern = "*.webm", .flags = 0 } }; const char *get_vformat_extension(int codec_ind) { return (listSupVFormats[codec_ind].extension); } const char *get_vformat_pattern(int codec_ind) { return (listSupVFormats[codec_ind].pattern); } const char *get_vformat_desc(int codec_ind) { return (listSupVFormats[codec_ind].description); } gboolean isLavfFormat(int codec_ind) { return (listSupVFormats[codec_ind].avformat); } guvcview-src-1.7.1/src/create_image.h0000664000175000017500000000327712173235416016552 0ustar paulopaulo/*******************************************************************************# # guvcview http://guvcview.sourceforge.net # # # # Paulo Assis # # # # 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # # ********************************************************************************/ #ifndef CREATE_IMAGE_H #define CREATE_IMAGE_H int store_picture(void *data); #endif guvcview-src-1.7.1/src/file_io.h0000775000175000017500000000774312173235416015560 0ustar paulopaulo/*******************************************************************************# # guvcview http://guvcview.sourceforge.net # # # # Paulo Assis # # # # 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # # ********************************************************************************/ #ifndef FILE_IO_H #define FILE_IO_H #include "../config.h" #include "defs.h" #define IO_BUFFER_SIZE 32768 typedef struct io_Writer { FILE *fp; /* file pointer */ BYTE *buffer; /**< Start of the buffer. */ int buffer_size; /**< Maximum buffer size */ BYTE *buf_ptr; /**< Current position in the buffer */ BYTE *buf_end; /**< End of the buffer. */ int64_t size; //file size (end of file position) int64_t position; //file pointer position (updates on buffer flush) } io_Writer; /** create a new writer: * params: filename - file for write to (if NULL mem only writer) * max_size - mem buffer size (if 0 use default)*/ io_Writer* io_create_writer(const char *filename, int max_size); /* destroy the writer*/ void io_destroy_writer(io_Writer* writer); /*flush the writer buffer to disk */ int64_t io_flush_buffer(io_Writer* writer); /* move the writer pointer to position */ int io_seek(io_Writer* writer, int64_t position); /* move file pointer by amount*/ int io_skip(io_Writer* writer, int amount); /* get writer offset (current position) */ int64_t io_get_offset(io_Writer* writer); /* write 1 octet */ void io_write_w8(io_Writer* writer, BYTE b); /* write a buffer of size*/ void io_write_buf(io_Writer* writer, BYTE *buf, int size); /* write 2 octets le */ void io_write_wl16(io_Writer* writer, uint16_t val); /* write 2 octets be */ void io_write_wb16(io_Writer* writer, uint16_t val); /* write 3 octets le */ void io_write_wl24(io_Writer* writer, uint32_t val); /* write 3 octets be */ void io_write_wb24(io_Writer* writer, uint32_t val); /* write 4 octets le */ void io_write_wl32(io_Writer* writer, uint32_t val); /* write 4 octets be */ void io_write_wb32(io_Writer* writer, uint32_t val); /* write 8 octets le */ void io_write_wl64(io_Writer* writer, uint64_t val); /* write 8 octets be */ void io_write_wb64(io_Writer* writer, uint64_t val); /* write a 4cc (4 char word)*/ void io_write_4cc(io_Writer* writer, const char *str); /* write a string (null terminated) returns the size writen*/ int io_write_str(io_Writer* writer, const char *str); #if BIGENDIAN #define io_write_w16 io_write_wb16 #define io_write_w24 io_write_wb24 #define io_write_w32 io_write_wb32 #define io_write_w64 io_write_wb64 #else #define io_write_w16 io_write_wl16 #define io_write_w24 io_write_wl24 #define io_write_w32 io_write_wl32 #define io_write_w64 io_write_wl64 #endif #endif guvcview-src-1.7.1/src/globals.c0000664000175000017500000001531112173235416015553 0ustar paulopaulo/*******************************************************************************# # guvcview http://guvcview.sourceforge.net # # # # Paulo Assis # # # # 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # # ********************************************************************************/ #include /* support for internationalization - i18n */ #include #include "globals.h" #include "avilib.h" #include "sound.h" #include "v4l2uvc.h" #include "string_utils.h" #include "vcodecs.h" #include "acodecs.h" #define __AMUTEX &pdata->mutex #define __VMUTEX &videoIn->mutex #define __GMUTEX &global->mutex #define __FMUTEX &global->file_mutex #define __GCOND &global->IO_cond int initGlobals (struct GLOBAL *global) { __INIT_MUTEX( __GMUTEX ); __INIT_MUTEX( __FMUTEX ); __INIT_COND( __GCOND ); /* Initialized video buffer semaphore */ global->debug = DEBUG; const gchar *home = g_get_home_dir(); global->videodevice = g_strdup("/dev/video0"); global->confPath = g_strjoin("/", home, ".config", "guvcview", NULL); int ret = g_mkdir_with_parents(global->confPath, 0777); if(ret) fprintf(stderr, "Couldn't create configuration dir: %s \n", global->confPath); g_free(global->confPath); global->confPath = g_strjoin("/", home, ".config", "guvcview", "video0", NULL); global->vidFPath = g_new(pchar, 2); global->imgFPath = g_new(pchar, 2); global->profile_FPath = g_new(pchar, 2); global->vidFPath[1] = g_strdup(home); global->imgFPath[1] = g_strdup(home); global->profile_FPath[1] = g_strdup(home); global->vidFPath[0] = g_strdup("guvcview_video.mkv"); global->VidFormat = check_video_type(global->vidFPath[0]); global->imgFPath[0] = g_strdup("guvcview_image.jpg"); global->imgFormat = check_image_type(global->imgFPath[0]); global->profile_FPath[0] = g_strdup("default.gpfl"); global->WVcaption = g_new(char, 32); g_snprintf(global->WVcaption,10,"GUVCVIdeo"); global->videoBuff = NULL; global->video_buff_size = VIDBUFF_SIZE; global->stack_size=TSTACK; global->image_inc = 1; //increment filename by default global->vid_inc = 1; //increment filename by default global->vid_sleep=0; global->vidfile=NULL; /*vid filename passed through argument options with -n */ global->Capture_time=0; /*vid capture time passed through argument options with -t */ global->lprofile=0; /* flag for -l command line option*/ /** try to set video codec default to mpeg4*/ setVcodecVal (); int vcodec = get_list_vcodec_index(AV_CODEC_ID_MPEG4); if(vcodec < 0) vcodec = 0; global->VidCodec= vcodec; /*0-"MJPG" 1-"YUY2" 2-"DIB "(rgb32) 3-...*/ /** try to set audio codec default to mp2*/ setAcodecVal(); int acodec = get_list_acodec_index(AV_CODEC_ID_MP2); if(acodec < 0) acodec = 0; global->AudCodec = acodec; /*0-"PCM" 1-"MPG2" 2-...*/ global->av_drift=0; global->currtime=0; global->lasttime=0; global->Vidstarttime=0; global->Vidstoptime=0; global->framecount=0; global->w_ind=0; global->r_ind=0; global->Sound_enable=TRUE; /*Enable Sound by Default*/ global->Sound_IndexDev=NULL; global->Sound_SampRate=SAMPLE_RATE; global->Sound_SampRateInd=0; global->Sound_numInputDev=0; global->Sound_Format=WAVE_FORMAT_MPEG12; /*set MP2 by default*/ global->Sound_DefDev=0; global->Sound_UseDev=0; global->Sound_NumChan=NUM_CHANNELS; global->Sound_NumChanInd=0; global->Sound_delay=0; global->Sound_delay=0; /*sound delay in nanosec*/ global->FpsCount=0; global->disk_timer_id=0; global->timer_id=0; global->image_timer_id=0; global->image_timer=0; global->image_npics=9999;/*default max number of captures*/ global->image_picn =0; global->frmCount=0; global->PanStep=2;/*2 degree step for Pan*/ global->TiltStep=2;/*2 degree step for Tilt*/ global->DispFps=0; global->fps = DEFAULT_FPS; global->fps_num = DEFAULT_FPS_NUM; global->bpp = 0; //current bytes per pixel global->hwaccel = 1; //use hardware acceleration global->desktop_w = 0; global->desktop_h = 0; global->cap_meth = IO_MMAP;//default mmap(1) or read(0) global->flg_cap_meth = FALSE; global->width = DEFAULT_WIDTH; global->height = DEFAULT_HEIGHT; global->winwidth=WINSIZEX; global->winheight=WINSIZEY; global->spinbehave=0; global->default_action=0; global->mode = g_new(char, 6); g_snprintf(global->mode, 5, "mjpg"); global->format = V4L2_PIX_FMT_MJPEG; global->Frame_Flags = YUV_NOFILT; global->osdFlags = 0; global->no_display = FALSE; global->exit_on_close = FALSE; global->skip_n=0; global->jpeg=NULL; /* reset with videoIn parameters */ global->autofocus = FALSE; global->AFcontrol = FALSE; global->VidButtPress = FALSE; global->change_res = FALSE; global->add_ctrls = FALSE; return (0); } int closeGlobals(struct GLOBAL *global) { g_free(global->videodevice); g_free(global->confPath); g_free(global->vidFPath[1]); g_free(global->imgFPath[1]); g_free(global->imgFPath[0]); g_free(global->vidFPath[0]); g_free(global->profile_FPath[1]); g_free(global->profile_FPath[0]); g_free(global->vidFPath); g_free(global->imgFPath); g_free(global->profile_FPath); g_free (global->WVcaption); g_free(global->vidfile); g_free(global->mode); g_free(global->Sound_IndexDev); __CLOSE_MUTEX( __GMUTEX ); __CLOSE_MUTEX( __FMUTEX ); __CLOSE_COND( __GCOND ); global->videodevice=NULL; global->confPath=NULL; global->vidfile=NULL; global->mode=NULL; if(global->jpeg) g_free(global->jpeg); global->jpeg=NULL; g_free(global); global=NULL; return (0); } guvcview-src-1.7.1/configure0000775000175000017500000073471712173257652015134 0ustar paulopaulo#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.69 for guvcview 1.7.1. # # Report bugs to . # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 as_fn_exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org and $0: http://guvcview.sourceforge.net/ about your system, $0: including any error possibly output before this $0: message. Then install a modern shell, or manually run $0: the script under such a shell if you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='guvcview' PACKAGE_TARNAME='guvcview' PACKAGE_VERSION='1.7.1' PACKAGE_STRING='guvcview 1.7.1' PACKAGE_BUGREPORT='http://guvcview.sourceforge.net/' PACKAGE_URL='' ac_default_prefix=/usr/local # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS LIBOBJS PULSE_LIBS PULSE_CFLAGS DESKTOP_FALSE DESKTOP_TRUE DEBIAN_MENU_FALSE DEBIAN_MENU_TRUE DEPS_LIBS DEPS_CFLAGS PKG_CONFIG_LIBDIR PKG_CONFIG_PATH PKG_CONFIG MKINSTALLDIRS POSUB POFILES PO_IN_DATADIR_FALSE PO_IN_DATADIR_TRUE INTLLIBS INSTOBJEXT GMOFILES CATOBJEXT CATALOGS MSGFMT_OPTS DATADIRNAME ALL_LINGUAS INTLTOOL_PERL GMSGFMT MSGFMT MSGMERGE XGETTEXT INTLTOOL_POLICY_RULE INTLTOOL_SERVICE_RULE INTLTOOL_THEME_RULE INTLTOOL_SCHEMAS_RULE INTLTOOL_CAVES_RULE INTLTOOL_XML_NOMERGE_RULE INTLTOOL_XML_RULE INTLTOOL_KBD_RULE INTLTOOL_XAM_RULE INTLTOOL_UI_RULE INTLTOOL_SOUNDLIST_RULE INTLTOOL_SHEET_RULE INTLTOOL_SERVER_RULE INTLTOOL_PONG_RULE INTLTOOL_OAF_RULE INTLTOOL_PROP_RULE INTLTOOL_KEYS_RULE INTLTOOL_DIRECTORY_RULE INTLTOOL_DESKTOP_RULE INTLTOOL_EXTRACT INTLTOOL_MERGE INTLTOOL_UPDATE USE_NLS GETTEXT_PACKAGE EGREP GREP CPP am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE am__nodep AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE am__quote am__include DEPDIR OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC MAINT MAINTAINER_MODE_FALSE MAINTAINER_MODE_TRUE am__untar am__tar AMTAR am__leading_dot SET_MAKE AWK mkdir_p MKDIR_P INSTALL_STRIP_PROGRAM STRIP install_sh MAKEINFO AUTOHEADER AUTOMAKE AUTOCONF ACLOCAL VERSION PACKAGE CYGPATH_W am__isrc INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM AM_BACKSLASH AM_DEFAULT_VERBOSITY AM_DEFAULT_V AM_V target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking enable_silent_rules enable_maintainer_mode enable_dependency_tracking enable_debug enable_nls enable_debian_menu enable_desktop enable_pulse ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS CPP PKG_CONFIG PKG_CONFIG_PATH PKG_CONFIG_LIBDIR DEPS_CFLAGS DEPS_LIBS PULSE_CFLAGS PULSE_LIBS' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures guvcview 1.7.1 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/guvcview] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of guvcview 1.7.1:";; esac cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-silent-rules less verbose build output (undo: `make V=1') --disable-silent-rules verbose build output (undo: `make V=0') --enable-maintainer-mode enable make rules and dependencies not useful (and sometimes confusing) to the casual installer --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors --enable-debug enable debug compile w/ debugging - if \$CFLAGS is set, add -g there, too --disable-nls do not use Native Language Support --disable-debian-menu disable debian menu (default: enabled) --disable-desktop disable desktop file (default: enabled) --disable-pulse disable pulseaudio support (default: enabled) Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CPP C preprocessor PKG_CONFIG path to pkg-config utility PKG_CONFIG_PATH directories to add to pkg-config's search path PKG_CONFIG_LIBDIR path overriding pkg-config's built-in search path DEPS_CFLAGS C compiler flags for DEPS, overriding pkg-config DEPS_LIBS linker flags for DEPS, overriding pkg-config PULSE_CFLAGS C compiler flags for PULSE, overriding pkg-config PULSE_LIBS linker flags for PULSE, overriding pkg-config Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to . _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF guvcview configure 1.7.1 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_cpp # ac_fn_c_try_run LINENO # ---------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes # that executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then : ac_retval=0 else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_run # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $2 /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $2 (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$2 || defined __stub___$2 choke me #endif int main () { return $2 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func # ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists, giving a warning if it cannot be compiled using # the include files in INCLUDES and setting the cache variable VAR # accordingly. ac_fn_c_check_header_mongrel () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if eval \${$3+:} false; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 $as_echo_n "checking $2 usability... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_header_compiler=yes else ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 $as_echo_n "checking $2 presence... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <$2> _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : ac_header_preproc=yes else ac_header_preproc=no fi rm -f conftest.err conftest.i conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( yes:no: ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; no:yes:* ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ( $as_echo "## ----------------------------------------------- ## ## Report this to http://guvcview.sourceforge.net/ ## ## ----------------------------------------------- ##" ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=\$ac_header_compiler" fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_mongrel # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by guvcview $as_me 1.7.1, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h $as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_URL "$PACKAGE_URL" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then # We do not want a PATH search for config.site. case $CONFIG_SITE in #(( -*) ac_site_file1=./$CONFIG_SITE;; */*) ac_site_file1=$CONFIG_SITE;; *) ac_site_file1=./$CONFIG_SITE;; esac elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # Check whether --enable-silent-rules was given. if test "${enable_silent_rules+set}" = set; then : enableval=$enable_silent_rules; fi case $enable_silent_rules in yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=0;; esac am_make=${MAKE-make} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 $as_echo_n "checking whether $am_make supports nested variables... " >&6; } if ${am_cv_make_support_nested_variables+:} false; then : $as_echo_n "(cached) " >&6 else if $as_echo 'TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 $as_echo "$am_cv_make_support_nested_variables" >&6; } if test $am_cv_make_support_nested_variables = yes; then AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AM_BACKSLASH='\' am__api_version='1.11' ac_aux_dir= for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 $as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if ${ac_cv_path_install+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in #(( ./ | .// | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 $as_echo "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 $as_echo_n "checking whether build environment is sane... " >&6; } # Just in case sleep 1 echo timestamp > conftest.file # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[\\\"\#\$\&\'\`$am_lf]*) as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) as_fn_error $? "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;; esac # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi rm -f conftest.file if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". as_fn_error $? "ls -t appears to fail. Make sure there is not a broken alias in your environment" "$LINENO" 5 fi test "$2" = conftest.file ) then # Ok. : else as_fn_error $? "newly created file is older than distributed files! Check your system clock" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" # Double any \ or $. # By default was `s,x,x', remove it if useless. ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5 $as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} fi if test x"${install_sh}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi # Installed binaries are usually stripped using `strip' when the user # run `make install-strip'. However `strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the `STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 $as_echo_n "checking for a thread-safe mkdir -p... " >&6; } if test -z "$MKDIR_P"; then if ${ac_cv_path_mkdir+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir (GNU coreutils) '* | \ 'mkdir (coreutils) '* | \ 'mkdir (fileutils) '4.1*) ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext break 3;; esac done done done IFS=$as_save_IFS fi test -d ./--version && rmdir ./--version if test "${ac_cv_path_mkdir+set}" = set; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use the slow shell script. Don't cache a # value for MKDIR_P within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. MKDIR_P="$ac_install_sh -d" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 $as_echo "$MKDIR_P" >&6; } mkdir_p="$MKDIR_P" case $mkdir_p in [\\/$]* | ?:[\\/]*) ;; */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; esac for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AWK+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 $as_echo "$AWK" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AWK" && break done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." am__isrc=' -I$(srcdir)' # test to see if srcdir already configured if test -f $srcdir/config.status; then as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE='guvcview' VERSION='1.7.1' cat >>confdefs.h <<_ACEOF #define PACKAGE "$PACKAGE" _ACEOF cat >>confdefs.h <<_ACEOF #define VERSION "$VERSION" _ACEOF # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} # We need awk for the "check" target. The system "awk" is bad on # some platforms. # Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AMTAR='$${TAR-tar}' am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' ac_config_headers="$ac_config_headers config.h" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5 $as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; } # Check whether --enable-maintainer-mode was given. if test "${enable_maintainer_mode+set}" = set; then : enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval else USE_MAINTAINER_MODE=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE" >&5 $as_echo "$USE_MAINTAINER_MODE" >&6; } if test $USE_MAINTAINER_MODE = yes; then MAINTAINER_MODE_TRUE= MAINTAINER_MODE_FALSE='#' else MAINTAINER_MODE_TRUE='#' MAINTAINER_MODE_FALSE= fi MAINT=$MAINTAINER_MODE_TRUE # autoconf 2.5x defaults to no cache file; we need the cache file's information # for building the config page. But start with it empty to avoid confusion by # people who don't do a "make distclean" after applying patches. cache_file=config.cache rm -f config.cache; touch config.cache DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 $as_echo_n "checking for style of include used by $am_make... " >&6; } am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from `make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 $as_echo "$_am_result" >&6; } rm -f confinc confmf # Check whether --enable-dependency-tracking was given. if test "${enable_dependency_tracking+set}" = set; then : enableval=$enable_dependency_tracking; fi if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 $as_echo_n "checking whether the C compiler works... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi if test -z "$ac_file"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 $as_echo_n "checking for C compiler default output file name... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 $as_echo_n "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } if ${ac_cv_objext+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu depcc="$CC" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CC_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok `-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 $as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing strerror" >&5 $as_echo_n "checking for library containing strerror... " >&6; } if ${ac_cv_search_strerror+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char strerror (); int main () { return strerror (); ; return 0; } _ACEOF for ac_lib in '' cposix; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_strerror=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_strerror+:} false; then : break fi done if ${ac_cv_search_strerror+:} false; then : else ac_cv_search_strerror=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_strerror" >&5 $as_echo "$ac_cv_search_strerror" >&6; } ac_res=$ac_cv_search_strerror if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu depcc="$CC" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CC_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok `-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 $as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if ${ac_cv_prog_CPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if ${ac_cv_path_GREP+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_GREP" || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } if ${ac_cv_path_EGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_EGREP" || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 $as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi ACX_PTHREAD() # The comment about adding -g to $CFLAGS is unclear. Autoconf tries to add # a -g flag; we remove it if the user's $CFLAGS was not set and debugging is # disabled. { $as_echo "$as_me:${as_lineno-$LINENO}: checking if you specifically want to enable debug-code -g" >&5 $as_echo_n "checking if you specifically want to enable debug-code -g... " >&6; } # Check whether --enable-debug was given. if test "${enable_debug+set}" = set; then : enableval=$enable_debug; enable_debug=yes else enable_debug=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_debug" >&5 $as_echo "$enable_debug" >&6; } if test "x$enable_debug" = "xyes" ; then test -z "$ORIGINAL_CFLAGS" && CFLAGS=`echo ${CFLAGS} | sed -e 's/-O[1-9]\? //' -e 's/-O[1-9]\?$//'` if test "$CC" = gcc; then CFLAGS="$CFLAGS -g" fi #else # CF_STRIP_G_OPT(CFLAGS) fi GETTEXT_PACKAGE=guvcview cat >>confdefs.h <<_ACEOF #define GETTEXT_PACKAGE "$GETTEXT_PACKAGE" _ACEOF { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether NLS is requested" >&5 $as_echo_n "checking whether NLS is requested... " >&6; } # Check whether --enable-nls was given. if test "${enable_nls+set}" = set; then : enableval=$enable_nls; USE_NLS=$enableval else USE_NLS=yes fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5 $as_echo "$USE_NLS" >&6; } case "$am__api_version" in 1.01234) as_fn_error $? "Automake 1.5 or newer is required to use intltool" "$LINENO" 5 ;; *) ;; esac if test -n "0.40"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for intltool >= 0.40" >&5 $as_echo_n "checking for intltool >= 0.40... " >&6; } INTLTOOL_REQUIRED_VERSION_AS_INT=`echo 0.40 | awk -F. '{ print $ 1 * 1000 + $ 2 * 100 + $ 3; }'` INTLTOOL_APPLIED_VERSION=`intltool-update --version | head -1 | cut -d" " -f3` INTLTOOL_APPLIED_VERSION_AS_INT=`echo $INTLTOOL_APPLIED_VERSION | awk -F. '{ print $ 1 * 1000 + $ 2 * 100 + $ 3; }'` { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INTLTOOL_APPLIED_VERSION found" >&5 $as_echo "$INTLTOOL_APPLIED_VERSION found" >&6; } test "$INTLTOOL_APPLIED_VERSION_AS_INT" -ge "$INTLTOOL_REQUIRED_VERSION_AS_INT" || as_fn_error $? "Your intltool is too old. You need intltool 0.40 or later." "$LINENO" 5 fi # Extract the first word of "intltool-update", so it can be a program name with args. set dummy intltool-update; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_INTLTOOL_UPDATE+:} false; then : $as_echo_n "(cached) " >&6 else case $INTLTOOL_UPDATE in [\\/]* | ?:[\\/]*) ac_cv_path_INTLTOOL_UPDATE="$INTLTOOL_UPDATE" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_INTLTOOL_UPDATE="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi INTLTOOL_UPDATE=$ac_cv_path_INTLTOOL_UPDATE if test -n "$INTLTOOL_UPDATE"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INTLTOOL_UPDATE" >&5 $as_echo "$INTLTOOL_UPDATE" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "intltool-merge", so it can be a program name with args. set dummy intltool-merge; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_INTLTOOL_MERGE+:} false; then : $as_echo_n "(cached) " >&6 else case $INTLTOOL_MERGE in [\\/]* | ?:[\\/]*) ac_cv_path_INTLTOOL_MERGE="$INTLTOOL_MERGE" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_INTLTOOL_MERGE="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi INTLTOOL_MERGE=$ac_cv_path_INTLTOOL_MERGE if test -n "$INTLTOOL_MERGE"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INTLTOOL_MERGE" >&5 $as_echo "$INTLTOOL_MERGE" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "intltool-extract", so it can be a program name with args. set dummy intltool-extract; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_INTLTOOL_EXTRACT+:} false; then : $as_echo_n "(cached) " >&6 else case $INTLTOOL_EXTRACT in [\\/]* | ?:[\\/]*) ac_cv_path_INTLTOOL_EXTRACT="$INTLTOOL_EXTRACT" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_INTLTOOL_EXTRACT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi INTLTOOL_EXTRACT=$ac_cv_path_INTLTOOL_EXTRACT if test -n "$INTLTOOL_EXTRACT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INTLTOOL_EXTRACT" >&5 $as_echo "$INTLTOOL_EXTRACT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test -z "$INTLTOOL_UPDATE" -o -z "$INTLTOOL_MERGE" -o -z "$INTLTOOL_EXTRACT"; then as_fn_error $? "The intltool scripts were not found. Please install intltool." "$LINENO" 5 fi INTLTOOL_DESKTOP_RULE='%.desktop: %.desktop.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_DIRECTORY_RULE='%.directory: %.directory.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_KEYS_RULE='%.keys: %.keys.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -k -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_PROP_RULE='%.prop: %.prop.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_OAF_RULE='%.oaf: %.oaf.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -o -p $(top_srcdir)/po $< $@' INTLTOOL_PONG_RULE='%.pong: %.pong.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_SERVER_RULE='%.server: %.server.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -o -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_SHEET_RULE='%.sheet: %.sheet.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_SOUNDLIST_RULE='%.soundlist: %.soundlist.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_UI_RULE='%.ui: %.ui.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_XML_RULE='%.xml: %.xml.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_XML_NOMERGE_RULE='%.xml: %.xml.in $(INTLTOOL_MERGE) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u /tmp $< $@' INTLTOOL_XAM_RULE='%.xam: %.xml.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_KBD_RULE='%.kbd: %.kbd.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -m -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_CAVES_RULE='%.caves: %.caves.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_SCHEMAS_RULE='%.schemas: %.schemas.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -s -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_THEME_RULE='%.theme: %.theme.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_SERVICE_RULE='%.service: %.service.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_POLICY_RULE='%.policy: %.policy.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' # Check the gettext tools to make sure they are GNU # Extract the first word of "xgettext", so it can be a program name with args. set dummy xgettext; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_XGETTEXT+:} false; then : $as_echo_n "(cached) " >&6 else case $XGETTEXT in [\\/]* | ?:[\\/]*) ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_XGETTEXT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi XGETTEXT=$ac_cv_path_XGETTEXT if test -n "$XGETTEXT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XGETTEXT" >&5 $as_echo "$XGETTEXT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "msgmerge", so it can be a program name with args. set dummy msgmerge; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_MSGMERGE+:} false; then : $as_echo_n "(cached) " >&6 else case $MSGMERGE in [\\/]* | ?:[\\/]*) ac_cv_path_MSGMERGE="$MSGMERGE" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_MSGMERGE="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi MSGMERGE=$ac_cv_path_MSGMERGE if test -n "$MSGMERGE"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGMERGE" >&5 $as_echo "$MSGMERGE" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "msgfmt", so it can be a program name with args. set dummy msgfmt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_MSGFMT+:} false; then : $as_echo_n "(cached) " >&6 else case $MSGFMT in [\\/]* | ?:[\\/]*) ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_MSGFMT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi MSGFMT=$ac_cv_path_MSGFMT if test -n "$MSGFMT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGFMT" >&5 $as_echo "$MSGFMT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "gmsgfmt", so it can be a program name with args. set dummy gmsgfmt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_GMSGFMT+:} false; then : $as_echo_n "(cached) " >&6 else case $GMSGFMT in [\\/]* | ?:[\\/]*) ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT" ;; esac fi GMSGFMT=$ac_cv_path_GMSGFMT if test -n "$GMSGFMT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GMSGFMT" >&5 $as_echo "$GMSGFMT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test -z "$XGETTEXT" -o -z "$MSGMERGE" -o -z "$MSGFMT"; then as_fn_error $? "GNU gettext tools not found; required for intltool" "$LINENO" 5 fi xgversion="`$XGETTEXT --version|grep '(GNU ' 2> /dev/null`" mmversion="`$MSGMERGE --version|grep '(GNU ' 2> /dev/null`" mfversion="`$MSGFMT --version|grep '(GNU ' 2> /dev/null`" if test -z "$xgversion" -o -z "$mmversion" -o -z "$mfversion"; then as_fn_error $? "GNU gettext tools not found; required for intltool" "$LINENO" 5 fi # Extract the first word of "perl", so it can be a program name with args. set dummy perl; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_INTLTOOL_PERL+:} false; then : $as_echo_n "(cached) " >&6 else case $INTLTOOL_PERL in [\\/]* | ?:[\\/]*) ac_cv_path_INTLTOOL_PERL="$INTLTOOL_PERL" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_INTLTOOL_PERL="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi INTLTOOL_PERL=$ac_cv_path_INTLTOOL_PERL if test -n "$INTLTOOL_PERL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INTLTOOL_PERL" >&5 $as_echo "$INTLTOOL_PERL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test -z "$INTLTOOL_PERL"; then as_fn_error $? "perl not found" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for perl >= 5.8.1" >&5 $as_echo_n "checking for perl >= 5.8.1... " >&6; } $INTLTOOL_PERL -e "use 5.8.1;" > /dev/null 2>&1 if test $? -ne 0; then as_fn_error $? "perl 5.8.1 is required for intltool" "$LINENO" 5 else IT_PERL_VERSION="`$INTLTOOL_PERL -e \"printf '%vd', $^V\"`" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $IT_PERL_VERSION" >&5 $as_echo "$IT_PERL_VERSION" >&6; } fi if test "x" != "xno-xml"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XML::Parser" >&5 $as_echo_n "checking for XML::Parser... " >&6; } if `$INTLTOOL_PERL -e "require XML::Parser" 2>/dev/null`; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 $as_echo "ok" >&6; } else as_fn_error $? "XML::Parser perl module is required for intltool" "$LINENO" 5 fi fi # Substitute ALL_LINGUAS so we can use it in po/Makefile # Set DATADIRNAME correctly if it is not set yet # (copied from glib-gettext.m4) if test -z "$DATADIRNAME"; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { extern int _nl_msg_cat_cntr; return _nl_msg_cat_cntr ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : DATADIRNAME=share else case $host in *-*-solaris*) ac_fn_c_check_func "$LINENO" "bind_textdomain_codeset" "ac_cv_func_bind_textdomain_codeset" if test "x$ac_cv_func_bind_textdomain_codeset" = xyes; then : DATADIRNAME=share else DATADIRNAME=lib fi ;; *) DATADIRNAME=lib ;; esac fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi ALL_LINGUAS="bg bs cs da de en_AU es eu fo fr gl he hr it ja lv nl pl pt pt_BR ru si sr tr uk zh_TW" # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in locale.h do : ac_fn_c_check_header_mongrel "$LINENO" "locale.h" "ac_cv_header_locale_h" "$ac_includes_default" if test "x$ac_cv_header_locale_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LOCALE_H 1 _ACEOF fi done if test $ac_cv_header_locale_h = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for LC_MESSAGES" >&5 $as_echo_n "checking for LC_MESSAGES... " >&6; } if ${am_cv_val_LC_MESSAGES+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { return LC_MESSAGES ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : am_cv_val_LC_MESSAGES=yes else am_cv_val_LC_MESSAGES=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_val_LC_MESSAGES" >&5 $as_echo "$am_cv_val_LC_MESSAGES" >&6; } if test $am_cv_val_LC_MESSAGES = yes; then $as_echo "#define HAVE_LC_MESSAGES 1" >>confdefs.h fi fi USE_NLS=yes gt_cv_have_gettext=no CATOBJEXT=NONE XGETTEXT=: INTLLIBS= ac_fn_c_check_header_mongrel "$LINENO" "libintl.h" "ac_cv_header_libintl_h" "$ac_includes_default" if test "x$ac_cv_header_libintl_h" = xyes; then : gt_cv_func_dgettext_libintl="no" libintl_extra_libs="" # # First check in libc # { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ngettext in libc" >&5 $as_echo_n "checking for ngettext in libc... " >&6; } if ${gt_cv_func_ngettext_libc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { return !ngettext ("","", 1) ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gt_cv_func_ngettext_libc=yes else gt_cv_func_ngettext_libc=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_ngettext_libc" >&5 $as_echo "$gt_cv_func_ngettext_libc" >&6; } if test "$gt_cv_func_ngettext_libc" = "yes" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dgettext in libc" >&5 $as_echo_n "checking for dgettext in libc... " >&6; } if ${gt_cv_func_dgettext_libc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { return !dgettext ("","") ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gt_cv_func_dgettext_libc=yes else gt_cv_func_dgettext_libc=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_dgettext_libc" >&5 $as_echo "$gt_cv_func_dgettext_libc" >&6; } fi if test "$gt_cv_func_ngettext_libc" = "yes" ; then for ac_func in bind_textdomain_codeset do : ac_fn_c_check_func "$LINENO" "bind_textdomain_codeset" "ac_cv_func_bind_textdomain_codeset" if test "x$ac_cv_func_bind_textdomain_codeset" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_BIND_TEXTDOMAIN_CODESET 1 _ACEOF fi done fi # # If we don't have everything we want, check in libintl # if test "$gt_cv_func_dgettext_libc" != "yes" \ || test "$gt_cv_func_ngettext_libc" != "yes" \ || test "$ac_cv_func_bind_textdomain_codeset" != "yes" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for bindtextdomain in -lintl" >&5 $as_echo_n "checking for bindtextdomain in -lintl... " >&6; } if ${ac_cv_lib_intl_bindtextdomain+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lintl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char bindtextdomain (); int main () { return bindtextdomain (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_intl_bindtextdomain=yes else ac_cv_lib_intl_bindtextdomain=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_intl_bindtextdomain" >&5 $as_echo "$ac_cv_lib_intl_bindtextdomain" >&6; } if test "x$ac_cv_lib_intl_bindtextdomain" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ngettext in -lintl" >&5 $as_echo_n "checking for ngettext in -lintl... " >&6; } if ${ac_cv_lib_intl_ngettext+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lintl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char ngettext (); int main () { return ngettext (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_intl_ngettext=yes else ac_cv_lib_intl_ngettext=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_intl_ngettext" >&5 $as_echo "$ac_cv_lib_intl_ngettext" >&6; } if test "x$ac_cv_lib_intl_ngettext" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dgettext in -lintl" >&5 $as_echo_n "checking for dgettext in -lintl... " >&6; } if ${ac_cv_lib_intl_dgettext+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lintl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dgettext (); int main () { return dgettext (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_intl_dgettext=yes else ac_cv_lib_intl_dgettext=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_intl_dgettext" >&5 $as_echo "$ac_cv_lib_intl_dgettext" >&6; } if test "x$ac_cv_lib_intl_dgettext" = xyes; then : gt_cv_func_dgettext_libintl=yes fi fi fi if test "$gt_cv_func_dgettext_libintl" != "yes" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking if -liconv is needed to use gettext" >&5 $as_echo_n "checking if -liconv is needed to use gettext... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 $as_echo "" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ngettext in -lintl" >&5 $as_echo_n "checking for ngettext in -lintl... " >&6; } if ${ac_cv_lib_intl_ngettext+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lintl -liconv $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char ngettext (); int main () { return ngettext (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_intl_ngettext=yes else ac_cv_lib_intl_ngettext=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_intl_ngettext" >&5 $as_echo "$ac_cv_lib_intl_ngettext" >&6; } if test "x$ac_cv_lib_intl_ngettext" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dcgettext in -lintl" >&5 $as_echo_n "checking for dcgettext in -lintl... " >&6; } if ${ac_cv_lib_intl_dcgettext+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lintl -liconv $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dcgettext (); int main () { return dcgettext (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_intl_dcgettext=yes else ac_cv_lib_intl_dcgettext=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_intl_dcgettext" >&5 $as_echo "$ac_cv_lib_intl_dcgettext" >&6; } if test "x$ac_cv_lib_intl_dcgettext" = xyes; then : gt_cv_func_dgettext_libintl=yes libintl_extra_libs=-liconv else : fi else : fi fi # # If we found libintl, then check in it for bind_textdomain_codeset(); # we'll prefer libc if neither have bind_textdomain_codeset(), # and both have dgettext and ngettext # if test "$gt_cv_func_dgettext_libintl" = "yes" ; then glib_save_LIBS="$LIBS" LIBS="$LIBS -lintl $libintl_extra_libs" unset ac_cv_func_bind_textdomain_codeset for ac_func in bind_textdomain_codeset do : ac_fn_c_check_func "$LINENO" "bind_textdomain_codeset" "ac_cv_func_bind_textdomain_codeset" if test "x$ac_cv_func_bind_textdomain_codeset" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_BIND_TEXTDOMAIN_CODESET 1 _ACEOF fi done LIBS="$glib_save_LIBS" if test "$ac_cv_func_bind_textdomain_codeset" = "yes" ; then gt_cv_func_dgettext_libc=no else if test "$gt_cv_func_dgettext_libc" = "yes" \ && test "$gt_cv_func_ngettext_libc" = "yes"; then gt_cv_func_dgettext_libintl=no fi fi fi fi if test "$gt_cv_func_dgettext_libc" = "yes" \ || test "$gt_cv_func_dgettext_libintl" = "yes"; then gt_cv_have_gettext=yes fi if test "$gt_cv_func_dgettext_libintl" = "yes"; then INTLLIBS="-lintl $libintl_extra_libs" fi if test "$gt_cv_have_gettext" = "yes"; then $as_echo "#define HAVE_GETTEXT 1" >>confdefs.h # Extract the first word of "msgfmt", so it can be a program name with args. set dummy msgfmt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_MSGFMT+:} false; then : $as_echo_n "(cached) " >&6 else case "$MSGFMT" in /*) ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path. ;; *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then if test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"; then ac_cv_path_MSGFMT="$ac_dir/$ac_word" break fi fi done IFS="$ac_save_ifs" test -z "$ac_cv_path_MSGFMT" && ac_cv_path_MSGFMT="no" ;; esac fi MSGFMT="$ac_cv_path_MSGFMT" if test "$MSGFMT" != "no"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGFMT" >&5 $as_echo "$MSGFMT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "$MSGFMT" != "no"; then glib_save_LIBS="$LIBS" LIBS="$LIBS $INTLLIBS" for ac_func in dcgettext do : ac_fn_c_check_func "$LINENO" "dcgettext" "ac_cv_func_dcgettext" if test "x$ac_cv_func_dcgettext" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_DCGETTEXT 1 _ACEOF fi done MSGFMT_OPTS= { $as_echo "$as_me:${as_lineno-$LINENO}: checking if msgfmt accepts -c" >&5 $as_echo_n "checking if msgfmt accepts -c... " >&6; } cat >conftest.foo <<_ACEOF msgid "" msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Project-Id-Version: test 1.0\n" "PO-Revision-Date: 2007-02-15 12:01+0100\n" "Last-Translator: test \n" "Language-Team: C \n" "MIME-Version: 1.0\n" "Content-Transfer-Encoding: 8bit\n" _ACEOF if { { $as_echo "$as_me:${as_lineno-$LINENO}: \$MSGFMT -c -o /dev/null conftest.foo"; } >&5 ($MSGFMT -c -o /dev/null conftest.foo) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then MSGFMT_OPTS=-c; { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } echo "$as_me: failed input was:" >&5 sed 's/^/| /' conftest.foo >&5 fi # Extract the first word of "gmsgfmt", so it can be a program name with args. set dummy gmsgfmt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_GMSGFMT+:} false; then : $as_echo_n "(cached) " >&6 else case $GMSGFMT in [\\/]* | ?:[\\/]*) ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT" ;; esac fi GMSGFMT=$ac_cv_path_GMSGFMT if test -n "$GMSGFMT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GMSGFMT" >&5 $as_echo "$GMSGFMT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "xgettext", so it can be a program name with args. set dummy xgettext; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_XGETTEXT+:} false; then : $as_echo_n "(cached) " >&6 else case "$XGETTEXT" in /*) ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path. ;; *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then if test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"; then ac_cv_path_XGETTEXT="$ac_dir/$ac_word" break fi fi done IFS="$ac_save_ifs" test -z "$ac_cv_path_XGETTEXT" && ac_cv_path_XGETTEXT=":" ;; esac fi XGETTEXT="$ac_cv_path_XGETTEXT" if test "$XGETTEXT" != ":"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XGETTEXT" >&5 $as_echo "$XGETTEXT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { extern int _nl_msg_cat_cntr; return _nl_msg_cat_cntr ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : CATOBJEXT=.gmo DATADIRNAME=share else case $host in *-*-solaris*) ac_fn_c_check_func "$LINENO" "bind_textdomain_codeset" "ac_cv_func_bind_textdomain_codeset" if test "x$ac_cv_func_bind_textdomain_codeset" = xyes; then : CATOBJEXT=.gmo DATADIRNAME=share else CATOBJEXT=.mo DATADIRNAME=lib fi ;; *-*-openbsd*) CATOBJEXT=.mo DATADIRNAME=share ;; *) CATOBJEXT=.mo DATADIRNAME=lib ;; esac fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$glib_save_LIBS" INSTOBJEXT=.mo else gt_cv_have_gettext=no fi fi fi if test "$gt_cv_have_gettext" = "yes" ; then $as_echo "#define ENABLE_NLS 1" >>confdefs.h fi if test "$XGETTEXT" != ":"; then if $XGETTEXT --omit-header /dev/null 2> /dev/null; then : ; else { $as_echo "$as_me:${as_lineno-$LINENO}: result: found xgettext program is not GNU xgettext; ignore it" >&5 $as_echo "found xgettext program is not GNU xgettext; ignore it" >&6; } XGETTEXT=":" fi fi # We need to process the po/ directory. POSUB=po ac_config_commands="$ac_config_commands default-1" for lang in $ALL_LINGUAS; do GMOFILES="$GMOFILES $lang.gmo" POFILES="$POFILES $lang.po" done if test "$gt_cv_have_gettext" = "yes"; then if test "x$ALL_LINGUAS" = "x"; then LINGUAS= else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for catalogs to be installed" >&5 $as_echo_n "checking for catalogs to be installed... " >&6; } NEW_LINGUAS= for presentlang in $ALL_LINGUAS; do useit=no if test "%UNSET%" != "${LINGUAS-%UNSET%}"; then desiredlanguages="$LINGUAS" else desiredlanguages="$ALL_LINGUAS" fi for desiredlang in $desiredlanguages; do # Use the presentlang catalog if desiredlang is # a. equal to presentlang, or # b. a variant of presentlang (because in this case, # presentlang can be used as a fallback for messages # which are not translated in the desiredlang catalog). case "$desiredlang" in "$presentlang"*) useit=yes;; esac done if test $useit = yes; then NEW_LINGUAS="$NEW_LINGUAS $presentlang" fi done LINGUAS=$NEW_LINGUAS { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LINGUAS" >&5 $as_echo "$LINGUAS" >&6; } fi if test -n "$LINGUAS"; then for lang in $LINGUAS; do CATALOGS="$CATALOGS $lang$CATOBJEXT"; done fi fi MKINSTALLDIRS= if test -n "$ac_aux_dir"; then MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs" fi if test -z "$MKINSTALLDIRS"; then MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs" fi test -d po || mkdir po if test "x$srcdir" != "x."; then if test "x`echo $srcdir | sed 's@/.*@@'`" = "x"; then posrcprefix="$srcdir/" else posrcprefix="../$srcdir/" fi else posrcprefix="../" fi rm -f po/POTFILES sed -e "/^#/d" -e "/^\$/d" -e "s,.*, $posrcprefix& \\\\," -e "\$s/\(.*\) \\\\/\1/" \ < $srcdir/po/POTFILES.in > po/POTFILES if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_PKG_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PKG_CONFIG=$ac_cv_path_PKG_CONFIG if test -n "$PKG_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 $as_echo "$PKG_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_path_PKG_CONFIG"; then ac_pt_PKG_CONFIG=$PKG_CONFIG # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $ac_pt_PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG if test -n "$ac_pt_PKG_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 $as_echo "$ac_pt_PKG_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_pt_PKG_CONFIG" = x; then PKG_CONFIG="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac PKG_CONFIG=$ac_pt_PKG_CONFIG fi else PKG_CONFIG="$ac_cv_path_PKG_CONFIG" fi fi if test -n "$PKG_CONFIG"; then _pkg_min_version=0.9.0 { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 $as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; } if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } PKG_CONFIG="" fi fi pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for DEPS" >&5 $as_echo_n "checking for DEPS... " >&6; } if test -n "$DEPS_CFLAGS"; then pkg_cv_DEPS_CFLAGS="$DEPS_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk+-3.0 >= 3.0.0 glib-2.0 >= 2.10.0 sdl >= 1.2.10 portaudio-2.0 libpng libavcodec libavutil libv4l2 libudev\""; } >&5 ($PKG_CONFIG --exists --print-errors "gtk+-3.0 >= 3.0.0 glib-2.0 >= 2.10.0 sdl >= 1.2.10 portaudio-2.0 libpng libavcodec libavutil libv4l2 libudev") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_DEPS_CFLAGS=`$PKG_CONFIG --cflags "gtk+-3.0 >= 3.0.0 glib-2.0 >= 2.10.0 sdl >= 1.2.10 portaudio-2.0 libpng libavcodec libavutil libv4l2 libudev" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$DEPS_LIBS"; then pkg_cv_DEPS_LIBS="$DEPS_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk+-3.0 >= 3.0.0 glib-2.0 >= 2.10.0 sdl >= 1.2.10 portaudio-2.0 libpng libavcodec libavutil libv4l2 libudev\""; } >&5 ($PKG_CONFIG --exists --print-errors "gtk+-3.0 >= 3.0.0 glib-2.0 >= 2.10.0 sdl >= 1.2.10 portaudio-2.0 libpng libavcodec libavutil libv4l2 libudev") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_DEPS_LIBS=`$PKG_CONFIG --libs "gtk+-3.0 >= 3.0.0 glib-2.0 >= 2.10.0 sdl >= 1.2.10 portaudio-2.0 libpng libavcodec libavutil libv4l2 libudev" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then DEPS_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "gtk+-3.0 >= 3.0.0 glib-2.0 >= 2.10.0 sdl >= 1.2.10 portaudio-2.0 libpng libavcodec libavutil libv4l2 libudev" 2>&1` else DEPS_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "gtk+-3.0 >= 3.0.0 glib-2.0 >= 2.10.0 sdl >= 1.2.10 portaudio-2.0 libpng libavcodec libavutil libv4l2 libudev" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$DEPS_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (gtk+-3.0 >= 3.0.0 glib-2.0 >= 2.10.0 sdl >= 1.2.10 portaudio-2.0 libpng libavcodec libavutil libv4l2 libudev) were not met: $DEPS_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables DEPS_CFLAGS and DEPS_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables DEPS_CFLAGS and DEPS_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else DEPS_CFLAGS=$pkg_cv_DEPS_CFLAGS DEPS_LIBS=$pkg_cv_DEPS_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if you want to enable debian menu" >&5 $as_echo_n "checking if you want to enable debian menu... " >&6; } # Check whether --enable-debian-menu was given. if test "${enable_debian_menu+set}" = set; then : enableval=$enable_debian_menu; enable_debian_menu=no else enable_debian_menu=yes fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_debian_menu" >&5 $as_echo "$enable_debian_menu" >&6; } if test "$enable_debian_menu" = yes; then DEBIAN_MENU_TRUE= DEBIAN_MENU_FALSE='#' else DEBIAN_MENU_TRUE='#' DEBIAN_MENU_FALSE= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if you want to enable desktop file" >&5 $as_echo_n "checking if you want to enable desktop file... " >&6; } # Check whether --enable-desktop was given. if test "${enable_desktop+set}" = set; then : enableval=$enable_desktop; enable_desktop=no else enable_desktop=yes fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_desktop" >&5 $as_echo "$enable_desktop" >&6; } if test "$enable_desktop" = yes; then DESKTOP_TRUE= DESKTOP_FALSE='#' else DESKTOP_TRUE='#' DESKTOP_FALSE= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if you want to enable pulse support" >&5 $as_echo_n "checking if you want to enable pulse support... " >&6; } # Check whether --enable-pulse was given. if test "${enable_pulse+set}" = set; then : enableval=$enable_pulse; enable_pulse=no else enable_pulse=yes fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_pulse" >&5 $as_echo "$enable_pulse" >&6; } if test $enable_pulse = yes; then pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for PULSE" >&5 $as_echo_n "checking for PULSE... " >&6; } if test -n "$PULSE_CFLAGS"; then pkg_cv_PULSE_CFLAGS="$PULSE_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libpulse >= 0.9.15\""; } >&5 ($PKG_CONFIG --exists --print-errors "libpulse >= 0.9.15") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_PULSE_CFLAGS=`$PKG_CONFIG --cflags "libpulse >= 0.9.15" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$PULSE_LIBS"; then pkg_cv_PULSE_LIBS="$PULSE_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libpulse >= 0.9.15\""; } >&5 ($PKG_CONFIG --exists --print-errors "libpulse >= 0.9.15") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_PULSE_LIBS=`$PKG_CONFIG --libs "libpulse >= 0.9.15" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then PULSE_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libpulse >= 0.9.15" 2>&1` else PULSE_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libpulse >= 0.9.15" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$PULSE_PKG_ERRORS" >&5 has_pulse=no elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } has_pulse=no else PULSE_CFLAGS=$pkg_cv_PULSE_CFLAGS PULSE_LIBS=$pkg_cv_PULSE_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } has_pulse=yes fi if test "$has_pulse" = yes; then $as_echo "#define PULSEAUDIO 1" >>confdefs.h else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: libpulse missing... pulse support will be disabled." >&5 $as_echo "$as_me: WARNING: libpulse missing... pulse support will be disabled." >&2;}; enable_pulse=no fi fi ac_fn_c_check_header_mongrel "$LINENO" "avcodec.h" "ac_cv_header_avcodec_h" "$ac_includes_default" if test "x$ac_cv_header_avcodec_h" = xyes; then : has_avcodec_h="yes" fi ac_fn_c_check_header_mongrel "$LINENO" "ffmpeg/avcodec.h" "ac_cv_header_ffmpeg_avcodec_h" "$ac_includes_default" if test "x$ac_cv_header_ffmpeg_avcodec_h" = xyes; then : has_ffmpeg_dir="yes" fi ac_fn_c_check_header_mongrel "$LINENO" "libavcodec/avcodec.h" "ac_cv_header_libavcodec_avcodec_h" "$ac_includes_default" if test "x$ac_cv_header_libavcodec_avcodec_h" = xyes; then : has_libavcodec_dir="yes" fi if test "$has_avcodec_h" = yes; then $as_echo "#define HAS_AVCODEC_H 1" >>confdefs.h fi if test "$has_ffmpeg_dir" = yes; then $as_echo "#define HAS_FFMPEG_AVCODEC_H 1" >>confdefs.h fi if test "$has_libavcodec_dir" = yes; then $as_echo "#define HAS_LIBAVCODEC_AVCODEC_H 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5 $as_echo_n "checking whether byte ordering is bigendian... " >&6; } if ${ac_cv_c_bigendian+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_c_bigendian=unknown # See if we're dealing with a universal compiler. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifndef __APPLE_CC__ not a universal capable compiler #endif typedef int dummy; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : # Check for potential -arch flags. It is not universal unless # there are at least two -arch flags with different values. ac_arch= ac_prev= for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do if test -n "$ac_prev"; then case $ac_word in i?86 | x86_64 | ppc | ppc64) if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then ac_arch=$ac_word else ac_cv_c_bigendian=universal break fi ;; esac ac_prev= elif test "x$ac_word" = "x-arch"; then ac_prev=arch fi done fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_c_bigendian = unknown; then # See if sys/param.h defines the BYTE_ORDER macro. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { #if ! (defined BYTE_ORDER && defined BIG_ENDIAN \ && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \ && LITTLE_ENDIAN) bogus endian macros #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : # It does; now see whether it defined to BIG_ENDIAN or not. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { #if BYTE_ORDER != BIG_ENDIAN not big endian #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_bigendian=yes else ac_cv_c_bigendian=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi if test $ac_cv_c_bigendian = unknown; then # See if defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris). cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { #if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN) bogus endian macros #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : # It does; now see whether it defined to _BIG_ENDIAN or not. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { #ifndef _BIG_ENDIAN not big endian #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_bigendian=yes else ac_cv_c_bigendian=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi if test $ac_cv_c_bigendian = unknown; then # Compile a test program. if test "$cross_compiling" = yes; then : # Try to guess by grepping values from an object file. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ short int ascii_mm[] = { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; short int ascii_ii[] = { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; int use_ascii (int i) { return ascii_mm[i] + ascii_ii[i]; } short int ebcdic_ii[] = { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; short int ebcdic_mm[] = { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; int use_ebcdic (int i) { return ebcdic_mm[i] + ebcdic_ii[i]; } extern int foo; int main () { return use_ascii (foo) == use_ebcdic (foo); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then ac_cv_c_bigendian=yes fi if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then if test "$ac_cv_c_bigendian" = unknown; then ac_cv_c_bigendian=no else # finding both strings is unlikely to happen, but who knows? ac_cv_c_bigendian=unknown fi fi fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int main () { /* Are we little or big endian? From Harbison&Steele. */ union { long int l; char c[sizeof (long int)]; } u; u.l = 1; return u.c[sizeof (long int) - 1] == 1; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_c_bigendian=no else ac_cv_c_bigendian=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5 $as_echo "$ac_cv_c_bigendian" >&6; } case $ac_cv_c_bigendian in #( yes) $as_echo "#define WORDS_BIGENDIAN 1" >>confdefs.h ;; #( no) ;; #( universal) $as_echo "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h ;; #( *) as_fn_error $? "unknown endianness presetting ac_cv_c_bigendian=no (or yes) will help" "$LINENO" 5 ;; esac ac_config_files="$ac_config_files Makefile data/Makefile data/icons/Makefile data/guvcview.desktop.in data/guvcview.in po/Makefile.in src/Makefile" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs if test -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' else am__EXEEXT_TRUE='#' am__EXEEXT_FALSE= fi if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then as_fn_error $? "conditional \"MAINTAINER_MODE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then as_fn_error $? "conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi ac_config_commands="$ac_config_commands po/stamp-it" if test -z "${DEBIAN_MENU_TRUE}" && test -z "${DEBIAN_MENU_FALSE}"; then as_fn_error $? "conditional \"DEBIAN_MENU\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${DESKTOP_TRUE}" && test -z "${DESKTOP_FALSE}"; then as_fn_error $? "conditional \"DESKTOP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by guvcview $as_me 1.7.1, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration commands: $config_commands Report bugs to ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ guvcview config.status 1.7.1 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" Copyright (C) 2012 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "default-1") CONFIG_COMMANDS="$CONFIG_COMMANDS default-1" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "data/Makefile") CONFIG_FILES="$CONFIG_FILES data/Makefile" ;; "data/icons/Makefile") CONFIG_FILES="$CONFIG_FILES data/icons/Makefile" ;; "data/guvcview.desktop.in") CONFIG_FILES="$CONFIG_FILES data/guvcview.desktop.in" ;; "data/guvcview.in") CONFIG_FILES="$CONFIG_FILES data/guvcview.in" ;; "po/Makefile.in") CONFIG_FILES="$CONFIG_FILES po/Makefile.in" ;; "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; "po/stamp-it") CONFIG_COMMANDS="$CONFIG_COMMANDS po/stamp-it" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script `defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_tt=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_tt"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac ac_MKDIR_P=$MKDIR_P case $MKDIR_P in [\\/$]* | ?:[\\/]* ) ;; */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 $as_echo "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi # Compute "$ac_file"'s index in $config_headers. _am_arg="$ac_file" _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || $as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$_am_arg" : 'X\(//\)[^/]' \| \ X"$_am_arg" : 'X\(//\)$' \| \ X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$_am_arg" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'`/stamp-h$_am_stamp_count ;; :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 $as_echo "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || { # Autoconf 2.62 quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named `Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`$as_dirname -- "$mf" || $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$mf" : 'X\(//\)[^/]' \| \ X"$mf" : 'X\(//\)$' \| \ X"$mf" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running `make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n 's/^U = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`$as_dirname -- "$file" || $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$file" : 'X\(//\)[^/]' \| \ X"$file" : 'X\(//\)$' \| \ X"$file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir=$dirpart/$fdir; as_fn_mkdir_p # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ;; "default-1":C) case "$CONFIG_FILES" in *po/Makefile.in*) sed -e "/POTFILES =/r po/POTFILES" po/Makefile.in > po/Makefile esac ;; "po/stamp-it":C) if ! grep "^# INTLTOOL_MAKEFILE$" "po/Makefile.in" > /dev/null ; then as_fn_error $? "po/Makefile.in.in was not created by intltoolize." "$LINENO" 5 fi rm -f "po/stamp-it" "po/stamp-it.tmp" "po/POTFILES" "po/Makefile.tmp" >"po/stamp-it.tmp" sed '/^#/d s/^[[].*] *// /^[ ]*$/d '"s|^| $ac_top_srcdir/|" \ "$srcdir/po/POTFILES.in" | sed '$!s/$/ \\/' >"po/POTFILES" sed '/^POTFILES =/,/[^\\]$/ { /^POTFILES =/!d r po/POTFILES } ' "po/Makefile.in" >"po/Makefile" rm -f "po/Makefile.tmp" mv "po/stamp-it.tmp" "po/stamp-it" ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi { $as_echo "$as_me:${as_lineno-$LINENO}: guvcview $VERSION ---------------------- Prefix : ${prefix} Pulse API : ${enable_pulse} Desktop File : ${enable_desktop} Debian Menu : ${enable_debian_menu} Debug Symbols : ${enable_debug} " >&5 $as_echo "$as_me: guvcview $VERSION ---------------------- Prefix : ${prefix} Pulse API : ${enable_pulse} Desktop File : ${enable_desktop} Debian Menu : ${enable_debian_menu} Debug Symbols : ${enable_debug} " >&6;} guvcview-src-1.7.1/NEWS0000664000175000017500000000000012173235416013661 0ustar paulopauloguvcview-src-1.7.1/AUTHORS0000664000175000017500000000015512173235416014245 0ustar paulopauloPaulo Assis Icons by: Paul Davey http://mattahan.deviantart.com/ guvcview-src-1.7.1/data/0000775000175000017500000000000012173260105014076 5ustar paulopauloguvcview-src-1.7.1/data/guvcview.10000664000175000017500000000432212173235416016027 0ustar paulopaulo.TH GUVCVIEW "1" "Aug 2009" .SH NAME guvcview \- GTK+ base UVC Viewer .SH SYNOPSIS .B guvcview .SH DESCRIPTION \fBGuvcview\fR is a simple GTK+ interface for capturing and viewing video from devices supported by the Linux UVC driver. It fully supports video4linux2 so it should work with any driver that supports this API, including the gspca driver. .SH USAGE .TP guvcview [options...] .SH OPTION \-?, \-\-help Print help options \-\-help\-all Print all help options \-\-help\-gtk Print GTK+ options \-\-version Print version number Application options: \-v, \-\-verbose Prints a lot of debug information \-d, \-\-device=VIDEO_DEVICE Video Device [default: /dev/video0] \-a, \-\-add_ctrls Exits after adding dynamic controls to the uvc driver (needs root/sudo) \-o, \-\-control_only Don't stream video (image controls only) \-r, \-\-capture_method=[1|2] Capture method (1-mmap (default) 2-read) \-g, \-\-config=FILENAME Configuration File \-w, \-\-hwd_acel=[1|0] Hardware accelaration: (enable(1) | disable(0)) \-f, \-\-format=FORMAT Video input format: mjpg | jpeg | yuyv | yvyu | uyvy | yyuv | yu12 | yv12 | nv12 | nv21 | nv16 | nv61 | y11p | grey | s501 | s505 | s508 | gbrg | grbg | ba81 | rggb | bgr3 | rgb3 | \-s, \-\-size=WIDTHxHEIGHT Resolution, default: 640x480 \-i, \-\-image=FILENAME Image File \-c, \-\-cap_time=TIME Time elapsed between image captures \-m, \-\-npics=NUMPIC Number of images to capture \-n, \-\-video=FILENAME Video File (capture from start) \-t, \-\-vid_time=TIME Video duration (in seconds) \-\-exit_on_close Exits guvcview after closing video \-j, \-\-skip=N_FRAMES Number of inital frames to skip \-p, \-\-show_fps=[1|0] Print FPS on video Window: (enable(1) | disable(0)) \-l, \-\-profile=FILENAME Load profile .SH AUTHOR This manual page was written by Paulo Assis , for the Debian GNU/Linux system (but may be used by others). guvcview-src-1.7.1/data/icons/0000775000175000017500000000000012173260105015211 5ustar paulopauloguvcview-src-1.7.1/data/icons/image_controls.png0000664000175000017500000001223412173235416020735 0ustar paulopaulo‰PNG  IHDR00Wù‡sRGB®ÎébKGDÿÿÿ ½§“ pHYs  šœtIMEÚ  ÚÉXŒIDAThÞÕšy¬]×uŸ¿½Ï|îüæ‘O¢žDSeS¢dÉC%§–£XnÓØuݤI-ŠMŒ¶I‘tÿhÚ¤è`‚"©Û8Ž8v-ÁŠ5™lQ&5Q%Î|ožîxî™öÞýã^R”#µÓ4í.pq€{ÎúÖoíµÖ^ûÂÿç—øQpèÀþ½ÀG;€}À0`€mà$p øÌÑã'6ÿŸ8t` ø7ÀßF®Ü7˜žé×>P€ øWÀo=~Âü¥:°ÿ]ÀãÀ€1=[”Rh¥Q:#Ksr¥ÀÛÆClÛ¾² üÊÑã'þÛ_ À3Ós•jõEc(j­ˆ»]ò<§R-S.WcrjŠJ¹‚„¬._æð“ß¡Ýn„ǹòð·Ž?q¾ï”«ïýó*ôCþÑßÿáÓ‡Ÿx­PgµRixçÁC|ðC÷3:1ÉÚZnœ2<2ÌÝï¾R)`aq…s§Oqø±?áÙg³¾¾N¡PDJ‰"^¦€jÿ56°|úèñŸþs˜ÓŸH„¸á?k€÷Þ¶ÿýEÏ6H¡yà¯ÿ ±òæöƒïÄv<¾wäEæ/.25=ÎÁƒû¸p~‘°2P©¢ò.ß~ø›~òqlËàA_ quý€ÿV€ß~÷èñoüHæåµ÷,_ˆé_R¿pÿî/;WþD%H¸in77ß~//žÅRˆ¤ŒLïebúvM 1P˜%Ï;;Û,Ÿú*ÑÊ èýD ª5Ïìõs !+«ëÊQtã.ÆÀÄä4åJ…W^<Æ'^fzvYš²¶Qf÷Ü»žäÅï?Éöæ:Žë"¥Änà÷ØÿO€{Ž?Ñí)ðYä‘‹ú €°l =oKÙ/ûFƒ R¸HËÁt|0Ë ÐyHq´ÈÕ1FvÍã>þ_ýæ·(;¸qóÍûø›û0H‹ùÅ5þøë±¶Ugh|Š•åy,iQ(–ÑQŠV Û±Ö¯Q 7`L/¸„­ ½;Z‘>Fghã E£rŒQ½v¬Ž@•vPi„ãÕ°ý*Â. ½"–WÃ)îfdúfî~ﻹen„˯Æ/–yòÉ'q‡¯?ü¾ñ'OÓU’b©HuPi†ãy O äyÊ5`Ñ7Þ(@ÑÆ`ŒäJ¡í­2„Ê#0 ¥ƒ.X6«·¤i#úUT!]„å#‚ †Ff¸ëÐML {¸²M†Ãá§ž%Ís|×axb’©ëçH³.–m14:Amp˜,¾bwò&€Ð¥1(c Ú@–ghácp@ª N;¨´‰´,ŒÎ1yŠV `!-ŒAç B‚”i`޹}·rËͳ˜î:F%,¯®Ón5Š„ÅIË ŒŒâ:ÝNóJ ظ&„ÐÓ#¡‘(¥Î5¤‰"Ïʀλ¤ZÒ50†¬³NÚ­÷7+½ìÕEç]´Šû>é%ì‰DÙ»o/«É“ÛvR TBR®TÐJQ(Wf|b[Þ€Õk“ôCH(ZiC® Sš4í’ä£bt‘‰,cig…¤³zuM`ú¾Àð–ݾ!Úh’h¯4ÄÄî9\×F©Œ¼¯B‹Ôj¤IL„ŒON1wãõ4v6±¬~˜ÂÅ7¤gÐJ#„FM–“çH!*×dQ›n*й"M"ºÊBYÅþN(C¥mÒÎjßó FgýœðÖ¶× {pZ£±q 5°ŒÊ3², ®ë„„¤iÂÀðwÞ}ß{ìráôIl×£·NyòM»Ôχ(“第v<„e„é- ·ˆr‹8¸¦A§µM[Œ‘‰B/_åF§äY•'•õ—×$ ƒÀ`„‹2y–!¬!4IÔ"Ís zÆ+¥p—}ûoá̉—øïŸùMÛÂ’)åï=~bõÍ: Úa+LªÎ_êXÍN&zGXZçÈlîegýu'4YûuË'-^Ÿ-áë:vaƒ´}´éåáHÑ‹{­©( Úò0ôjGž«^[‚…qÜ — M°pñǾ÷¥J…¨QGH‰Vê+×*+‰æ ^Í46·c³±Õq[QÚ–$×ݵ“µiÚrÅ ¯S üÎI:Ñ6o–ºœ¦•t¢ˆ8‰Ðäè<&Ž;DqLœ&Ĺ&ê&4Ú-¢…X(íâ8A¡HP,c»…b‰r©B£¾ÅÓ>½z€Zmc4Zéøøé³/¼ {ÑàÌV#6;ÍÄ\ZiQ’­k ÊØt·æI7ORš»Ÿ­$`ñü)J¾GÐ>M²såбƩg.[6;QªPYBžuH’„λdi—,S=%tŽAà8.a±L ‚aPÀu-;;Ü÷×>F­Rdõò%\ǥݞO’¤õV€ø’£³L¨­z7¯73Ýît7ã\­¥(#Ù8öÛ˜d‡ÂžûÙŒ}N}Ÿm É’­³ ¡Š{ˆ¬AZ™Ãv³A«¡”À›\[€èÕiƒí“¤9*W¸®G®{=ŽmKüÀ£Õl0>=ËØè _úÌo%1–ã°]o|í÷ÄRܳi±‰RKoítò$Í#Ðk‡[±R©²HÚ;lùxŽ ¶ï§‰Ü).¼è¬RÍΓ­Ŷ]*£{ÑÞ©,åЊb2•!ËC˜ t‚ð*tbMšÄ¸ž‡Ü ‹ÂÏpLÌ#_úkK „…"õfãØÚæÖÁµ¥^ªè\¢\TQ7Ë´-Y-íïåB?Òè(ºÚ£³5Ïöóÿž‚'©ÞôaÌøÝ¬t,: ÔEÔ⣨h“¡ñÝøå r{€®ñ©G1Ýnƒ$n‘§mò¤K–:QB–k¿ÀÔÌŠåa¡Àèèµrx{…V«AP(ÑM’ö™ ¿Ñ7>¼·ˆ½_Ó×íËæfËq7Nš6´Ê—Êeÿ™(Ë´ÚŠXì,bå;¿FÑN(OÝŽ5t+ g†®CÉꢢqù%ÜB §0Œq‹àTèæÍnD–å¡I³Œ8ÓdiŽë‡T‡†°¤E¸ Õè46I“ÏõÉ•âìüÂg³<ß*ýŸ¿U@L?¨ÿƇo÷]´¥d]çÙª0êR¹ê<iŽ×;š8ØZ:Ë¥Gÿ…|‰ÚäÍÈÒ.ââÛr7ÁÀu f Ä— ÒŽWÁò+XÁV0Š FP" É4Â.’fš°\Å÷<Çfdx˜jÙç•#Ïf¶m3¿xù›­vç9 êýÑýUëj¥|nŸ£ï3{guöÜ*ͮɔV–ç::ð­Õ8•,U¶í ãm¢KO10vÕ郤¹AEnq‡ª#U‡() ¶WÄòŠ!QƧH+Êxù¹'Ù½÷ÆfnÀ¶$»f¦ÐI‡Ïþæ§€‚‹‹K`Œ9,-àÚFëî:iX~ gpúùŸÙßMÏ ®eæÖóÅ‚|HÙö[m­Z±K½ÑáäC¿ÊæóŸftd”òø~Œ[¡‘¹4IàÀ„ߤ¦±›'¡»Šcûø•I¼âÍÍŠÇÈÄ4a00Palxg{˜ÕU\ß§Õî\PJÍ÷w`­~½u°uí¤÷à£Æ¼dDqâÞüï},kýÛgT”êܼ´ÑRÊl•&²¹ÙNï˵]ðÁ©g—úå™ûÀ?§8µŸÆÎ0ííóèö¡Ý$Ê„žC»þ;í.]b³ÙåÕ§¾ÂÀȵáqß¡V°IùÖ×¾Šë»X–¤Ýé,÷¯÷=ÿ§½ÖÞøÔoŸçÁŸµ„3~§~Çn[]^ܤÕN“Zµ£rmè&Êl·:Ù¸R¢ ,¨¾ÂιGqÓjû±v“P%É:ä˨¤…íUpíÍ•Sÿî·¹´°Èðu·±gÿ”+evÏŒòÜãßâ¿ôEJÅBZ¬ll‹“ä±~ÿŸ]»‘y[®*ñ®Gyµ,ìÛÔOßo:Gž?­__Œ„ç¸Ê’&JÓMõfú“qê\_*xd;ŠîÓ¿ÇÈ™'Þ÷J{?®ÜI§9ÇöÚˤËgˆÛm6·ì4süê4va˜B±Àää(q£ÎçÿÓoáºÒê™uã×€E };ï¿­W•øüë<øsBP;h¦ÇrUñµ^ÙR¦ÛÍSד]mH¥Wê­¤”¥bLc‘i›8M©Ï¡yñ1ìd¯<Š3tSÞC+³ØØikŸ„…¡]Üsï=Tø·¿öOyéèŠå Žc³]o®®mnþà|?ëd?Ö!Ÿ9úÁн dÔ²¼ï¾p¹ôÆÅVMkS&wšéL»•¾×Î}ÕÐ ŠE߸$Ø2& C7Qœ~7ÞÈ;PÎ;õ&KË+\Ýj~Æï|ú?ðüwŸ¡P®â;ínŸ8}æ_h­¿40uþÈǬæ¹wjïÈXàTíÓ¯]ðŸyq»zy=ª¦9CQ¬Gê­ø–,‘ ” ûJ¡-uï Vg“Ç ‰öÉ(¢Ý!åPßÙfei™(J Â"¶ë ´âÄ©³ŸïÆñ—Sýì“ò§¶H?ÆA·yÂŒ~XP™“y}Õ~úû—ÂÇž[-­ow”±‡’LO4[Éûl;xÙf}Ï‘Rö§Ê§Š(ÉévsÒÌ)‰½ †m;¤ijN_˜ÿr³Ý~¸ÿñ Ÿë¤þ*Ì©Ÿ•„Ã\>³è|å[§ÃïŸØªu3§–¦j¬ÞŒ÷¤Ê\o w¥T¹½P ÙÛcgŠ\A®ÅÕ©…Êõv{ùüü¥?J²ì5à pØê{ŸÿãWA.ÿº ×¼|ì„óÇÎ^9—–7âáv”L¶£l&ÍÔ¨kû7WJå[JÅânÛ¶Å•éBÔMš[æÉ­Æ«Ý¸{©oð`Xê·æ/à©!þÊöÕ—þâGä¿û±ðÕsQYët0JÒ‘8V%¥(KKÌZBCj “+µtúq^ïŸìoõ‹WôògÿÝë¿~ùKŸÃ‰,¡½O¡ßËd}ïFýL“] ýgÅüÿ5€·yÕ/œÎ5ãŠ+ Wš3õ£>ø‰ªH¼™IEND®B`‚guvcview-src-1.7.1/data/icons/close.png0000664000175000017500000001047312173235416017040 0ustar paulopaulo‰PNG  IHDR00Wù‡sRGB®ÎébKGDÿÿÿ ½§“ pHYs  šœtIMEÚ##3¦/.»IDAThÞ½šû¯mWUÇ?cεöûìó>÷ÕÛööÅ-´P$P QH-ð¿ø ˜£õ@£?ñGcÄøM L$F°!Š@yX ´¥ô‘>ïíãöÜ×yí³÷^kÍ9Çð‡¹Îé¡Ò-¸’™½÷ÊÚs1æw|Çw޵„×yx<‰tôTçܽÂÝêÅÝ"bׂ7lM•­¨ú|õqþO_Ý—fõýÀzÃÏMªéÓ³4ö~¡Ü|ìšAÿýwž\½ýúµÁéccF£.ƒŽÇ—ÞD 1Ub“H1å&…ªª™ÍoîðÙ>oÏïÍw¸©é_8оqÆý1{ó½öZwj½W~üìÊøw>ø¦“ÜrjÑzãR813DÀ9ÞÄ ½AP+I•Ôbu †ˆ%ÅB²{‘yì‚LCú’à>lè® öú82AXöÿôÝÇ—ÿä®›Ö‡·\³DÑï˜+Ji]sù?®,XXÑí÷躔Ý1˜îÍhšHSGBݪ†z:§™×¤ ¦<¶¹kŸúî3òÌÎìù a[?&×~fV»£ïþÖͧnyû‹²´2°¢SŠ8‡x‡ ”Ý‚rÐaauþ ËtwJ¨¡ 4UC  †á½gíô ýñ€½­ Û¶˜íN±¤ÄFÙÚ¯ø«o>ÎSÛÓ‡€;Þ(„n9;^ùÚGn¿öøéÓ}ëz"N(Š‚N¿C9ìÑvè :¤:±weBS58ïÚ™SÃÌ UÅ’šˆ/<ã•å°Cµ_±uØ$bxþòÄþâÉ^?üök³á«g~ecýß?òK×]{Í5#+º¥8çðeÁò‰%K#|áIUd÷ò³Ýfà " ‚ˆ†È4ƒÑ9Á·Î÷+f;3œs ‡¥§š6,uJYëvì¾ [oû©(ŠU(oøÃwœ9³±1B¼_x|Y°qý:)(Óí)óiM¨cƾĉ ‡ëj‡¨YNîõœ+ÀAhóý9eQ°vj•é´f­,¤n’{jgÿV‡|‘æ':ÐïËòëüŽ›o[[šâKOÙ+Y½f™zÖ0Û­Àµi.àD0×F]íœs™‰Dð>3’!ˆó¨÷LC$(tœ ªL'3ªýŠ•cËT³†cEaß¿¸slãUàÛGüêêˆÿ£ß¿õÚœ96'â˂ޠÇ`Ü'Ô‘zÚà Npâçáâ9±½Çç$§®fNÉ…yàó÷?É7{žïŸ»„¹‚kG¤‰!2Ý›³°Ô'VI*nMÞç ÿ©Ó¤×ëc|U6î\_þì¯Y–¥Ä1Xè1Xì“b"Em óôzvª„G]ð‚+="‚“ƒÕÉI,î {8>÷µ‡ÑºfTxºÞñâö„ÓkKô½ IÑdÄ”èõ;²Œ³û7·Ý~nþé¨ñ‡ŒÑаP¿ûšõ»N,LœHØeqmHjf‚H¦ÎY2þö?à«?8ǽœç¹go:I·ð˜‘UCÕóÀßëó_¿ÀîÕ=J—Ü·<¹¶ÈRÇ“¢bf¤ ˜AéôÔì+»'½s_2³—þ ÀñÓƒþ?¿ÿôe׋8a娋y"ç3l¼÷Êo9Cb› &m-1$ëÃ.Oo¨«†PÇ,±¥1ã—Ï^Ëæs—iª†j–GS§6”zñ^äöµE:νՉ;ÔHEûyjລZ¦±¢bTÊ®Ëlbmñ0Cc¢J·®yduÌdw¿MÔ&-„¦ŠjC0ÃÒA-8¿P'åî_}+OÜ÷NŒÔ²—sBY:bÌ«¡j\?ì³Ô)¹TÕ~Àu6J)ÐäA“aªX;™¦|ã1RÓÐìïóž·ÝHÙ)ÑÑd¤˜hæ‘ù´¢®")h;—a¦Ù CPŒ[n<Áâ´FS$Æ@ÓDBѨĘhêDŠùþ©µé¶Å%€»ºE§ àšJ=°€”DÍÆ#B ){³#©459"1Myï;Ï¢¡IT³@©´æ*l€Y–fÆpÔç¶õešé4Ï•ºŠ„hšHl”¦Î•9¥¼«›×‰›Ë,†ßàDU€nju4L1Æ#dgRIš°¤hˆ4Ó9Ëuà®w½9g äåÖ–µTµ5>3–™1‰½ÿNâ΄s4ÚËIu•ƒÃËŽÍ£ë Y,ûC5}[›Ä ÕA…*@ÓDRTB M†E=o¨æzhêÀt2g²µÏîÖ„•8{Ëu4A³X; Þvh ›Y¾úßã|g!æí¦êÁŠåšDU+MPšhD5‰ƒ±Îlœ¼–ÂwʤMœÖ©¥Ç< ói XôyBÕ¶Z¶š:GS¼§S|ó™M:¿ÉB+%ŽVÊüû (Y+…Ÿ¿ˆ3ãL¿‹YÌUùÈJ%…dLñ@“ *˜(«e`yëâKEš¹Û“Ô‚ óyÃpÔÅZ60Ë”vX¸pP”ÌÔ¸÷É—8y‹Å²@Í~d“—!s@³•7ï‹ðíg7ñ×çT§$¤—‹˜4*$ͪTHê踠ƒšÐè‹[õ4ÙpÍuÌ«@ŠŠ÷¹ä§”£gNðμçÁ [<}iM‘q§ÈÆ™ärp`¸8Ã,+:mŒÅÒñõg/ðŽ“ëÜ<ÐT é˜ò&(ª4Kõ&zªä©%Ô8gqÓÍËå€[EYðAÇ÷q×)±¢`n†žµ%zfl¿´IIM“åw²ÌÝm!_ e‡67™ÔõÁö'B2ãÔÆ{Ռǫ”•%&˜â˜‰ãª(]|æ?§Õô7íWëJÌö«É–Ö0œ M@²šŒ­âŒMÂńԑéå Û—'4u ©!)A“Œ¤…‡[G6Æc¶«ŠdŠY6yHÜqâ46MÄ`„”#¿/b»ÞÉÛ/Mv¦;Þvéâ«ö…Jé?´~o›ë»ÃEëšH3S$=0ÌhTÁ¨¢Ú‘Äv ˜4C$µø>`, N.-Ñïu.év{ôËgŽ­Ó‹Â|Ö“1GØg»…ãÜä²lno~ø<0Âk6w¿lèã‹ë×-Ÿ´“Éd„2p / .c/· ‘#¿É[ÀWvõÕ2˜9œwHá©)sÆ 4ëÿ¨Ê ÇD;Îìjµ/ç/=÷•˜âß?žæ¯Ü‘ýÈa¤)ð¾K»—¾ä½;VŽ[­³ädA”Ž*NȬqÉ•9’X-lTi›™óšhÄJ)\{£íÊE`_<{âØ“dMŠrqûâ“1Å{€Ý6úñ§éN ÐîÏ÷oßÕ±n(æJ‹&¢¸ÛŽ„õåÊjæ2« Ö~ªdêT!&!$Œ`ÙøÆŒJ»âÙq°G20yáÊ ÷æû<œ.þk9p€€ ðpÕTý+û;·v{}éwúDËa¨M–‹LBH-¿k{>šVÛÔ^_µŽ–%va"»N˜:cfj^g/žßÝ™Mþ¦MÚg€ç[{ô§}>p@Õ ð¤š^¹¼¿uëL›Þ 7Dœ?l£«@D¨p48’AƒÐHAŒG#B!‰P;ÇD<»Þ1uP‰Z3yþò /mÏ&Ÿh ª5~ï•ðùIäý P›À³ÓzÞ»2Û=Öˆt»øÂ›€$ ´7D"Tí"4ÎQ‹0aG2 §œ3FÞX°Fög;õg‰ø/Êך[^eûyÞädÎŒw™äIEND®B`‚guvcview-src-1.7.1/data/icons/guvcview.png0000664000175000017500000003120112173235416017562 0ustar paulopaulo‰PNG  IHDR€€Ã>aËsRGB®ÎébKGDÿÿÿ ½§“ pHYs × ×B(›xtIMEÙ$j3Ì IDATxÚíy˜U÷?çÔr·¾½wº; é„EKBªÊ– È„m\ðWqøŒÛèèèøŽJT”M >(ƒ„@`$ Ù@²‘,ÝéN'½ß­ªÎyÿ¨[Õ·;·;L #}ž§žª[÷ÞZÎï{~ûùi#m¤´‘6ÒFÚHi#m¤´‘ö.jâÝò¢ ÿŸHE¦í84G+¡&HDš˜–(¡DFKÚ4j+ˆÍг~ÅÏnsFp„·ió~=m\'Ñ—hô ‘!þ5,Eˆ?J<¼tÁÜæAí´›§Mï_ëùw^Î~.,gþòÿwóî ó6ýÖ‡>„пJƒs†48jLãê*¨,‹šDLÓ”xžBkp•¢«'G[gšíMûØÞ¸ÏÓWÖ{”Ö×®\ð‘gG0\Gþ­]¡…^ŒúšÊ$'7†ÑÕ¥XæÁ1ÇU4îédÕÚìmï¹\¼ü§7üeí͟/§ïlØ… NJÁé§Nb\]yÑô4(¥QZ‡`)öÿµZÛºxîå7ð<°î•ûn8~ä}ü‡T·U| 9¿}YËØ ¦Lªçø†º^"jȹŽ£q”Fk=`g˜¦Ä2$¶)‘LcílÜâë‚çÔïx4i¤¹«n÷¢ŸÝö3gïÀsßû•ÏÏ–ÈëA\eNŒ%»ÇP7ªŒc§ŒÅ2 \¥úÉò!6 †)0¥Àq\Öml¤¹µ€Ù£·7Ðz¯Öj¡’êÁ¯ÝûÍ—Fp˜Û¼yó¬ÚÚêë0ô¿ å‰Bü À๖Iôd{_)µ0-Ó00óJßÔ~ÇÃõž«È:Ùlï ¯ˆiάل־ò¨µ¶eõÝë6ÿ÷Â… ½Rñ>ßvœÔHùi!Ä8è%ü¸±ã˜6í4Ž>z;ZsÜó³iÞ—:,Ï1nT’»ã,ª‚M›Þ`åªWØÕ¸+Ÿmh­7)­¾1㿚?¾ÀßÙî¹çÿ^Œ!~ Ç#Þ¶lN?ý N9åTÊJËÎdEË·óʆÝliì 3•£;åГ98Q]³(‰Ù”&l&-ç´cë8oÚx,Cäõ ä···ñÊŠå,[¶ Çuz9zB}ú[_ÿîâ¼%Âß}´Æ¥#>‘HpîÙçrâ‰'FC¢”»^Ñ ú(‚]éÜî]·ûª½l>¼~ág­5©T«×¬æù“Édòßi4z¡ûÉo|ãM#bû—Ï~úø±¢TišÌ>÷Àhooã‰ÿy‚õÖõž×ê§%‰Ô§çÏÿYjýÚÝwß=]úQ!ÄxŸÝǹúªë˜4iRVtx@ô€ðoñûx¥T¸ÏTÈ%ÖoXÏïý-Ùl.N­Z]ù½ïýhíBââCHñ"!„àØcåò_I"žè3â ;ù$þ` (Æ¥ºººXøûß²eëæÀtlÓ»êßýÏw<®`¼ÓðÉOüñ !DD¸øÂ÷sÉ>HĶÃNt]7d÷Ã…ø¡û"xFÛ¶™:õ$”RlÛ¶ †×͘5sÇÒ——®y×à“wßõ5ßiš×^sÓ§MC xh•Ãu2H©„`?¼ã,tº®êB&N<šŠŠ Ö­[ høÐÌY§u-}yù_ßuøÄ§þù À|€H$ÊÇn¾•IGOí€Îà¹Ý(·!²Há „‡`ñ%ˆá¡Âôç…‚R Ïó0 ¿«ëêê™0a"kÖ¬F)%€ gÌU«WÒÖÖp÷­·Þúã ì<" µ¸WƒÍ•W\Ê»L&ã;F¤ „ˆ u!Êвœ.G`Yi£ÚëD~(Øõ:hKí#å ² ¢v5#ï*Þ²Ù,‹-âégžaÉ’%lÚ¼9tÑîצÉä†Î<óL.¸à.¼à"‘Èaç žç‘Íf±m˲¹âÃW²à÷¡5ð>Üyĉ€[oýÈT´¾4“&5pÔø£BÖŸ X¿ L4Q¥s‰SØ—“´öZ{ÒlÚ8‡žž•tu¯äåW¯bO&C§)WpLíYaÞ´555qÏç>ÇÄI“¸úÚk¹oÁÖoØ0 ñÁ÷ݯ[¿žû,àêk®aâ¤IÜó¹ÏÑÔtø“yÒétMlh˜ÌèúÑä3Š>vÓí7M8⬀“O9ùGñ!7̽‘²2?w/xÑÂ$á«=ù|¿8-Ý;hI5‘ñ ­g ›vÞÇëo.`GÇ6öfm9ÁÄšÙ\tü'2â¿F~t¥R)¾úµ¯ñ‘›nâ¥ÿýß^°å•P˶±í‘H”H4Љ`Y6¦i"¾I™L†¥K—ò“Ÿþ”T*ŬY³Bö`;Â$’Á>OUUU¬X¹Â§‘§#«W­yâ°è+‡ã¢7Þxã(Ã’;…ÀšÜ0™ÛæÝ&stuuõ‹èij$$]½O5ñÄÚ¯ÒžÚŒ!ü|¾Œ'èr Ë$ Ü}Þ(‹ïc.[¶Œ›n¹…­[·ö!z4ÃŽDCt@ÅÕuÉf3d3½£`âĉüê—¿ä´ÓN; ñ=Ïë“'Ðÿó@ç’É$RJ”Rüð?ÿƒ;¶£5]ž£êxàž#‚œ2mêBˆ‹…̹òjªªªBÐÓÓƒÖºOîž”¾/_&iD‘2É”ÚóÈ*“7;iI§épZV1sÒG¹ùôÿGI´!l4>ùþ›o¹…½{÷ú„7 J’¥”•–cG¢¡¾Ï&M„4òîåÞó†a‰DˆÇHÃóÚÛÛyð¡‡(I$˜9sæGÿ‘>7PJ…Šh<gÍ««‘o¬^õêê#D ·h ‰D‚‰'†²?—Ë…)S}•!¥4†ŒŒ ECTrÖäÏpö”ÏÐív 0)OŒEÊH‰Æ)wúÓÜ·`Ax½x¢„d²4®€X(3‰6KÐF »€jð„Ê Ü¤ÓÊ·ÏKJ’Äã ºº:Iõtã8Ÿ¹ç6oÙÂ÷¾ûÝЯ?†â*TZc±BŽ™r –e“Íf>Ü?ì9À7Þ8¡?'œ{Îl&7L e¿çyûÂÞ¤Î|PG€…”Q„ˆ!Q»šX¤)ãHÉ»~ýG¿ãÎ;ùåý÷‡ZueuuH|!1¼X*>m”€Ìc^)О¿)´°ÁL¢¢U`Ä‘:‡ÄÏì‰ÅbX–E&“`ÅŠ466rÉ>0 ÷ï`8@áy˲0 ƒ®®n¶o߆ÖzÜÉ'òàš5kÚ†5†w™ØÒœ|ÒÉa§ÊØ@éÔ~Ê—á‡z¥ôÁ %ZÈü9#¾·³¿úµ¯ñëÈ_R=jÑH4´0rö(”UÊ×Ak…@‘ˆG8¶a"åe%´wt³~ÓVzRY4¡ ”C•̵c»{A¹$%¦IkK Z+îÿÕ¯¨¯¯çÞ/}iPPì»Á¸EÀ´ÖL;u/,YŒÖsðýa åqšòòrªªªÑZã8NŸ¬˜bÈêù`´ýù©§øöw¾ãsw!U[G$ß$ƒÆ7ç{%\ýáó¹æò‹9ù„㲯þ«”fÕkëøícfáãOãy”B™edÍÑ\Be‰ÇâÔÖÖÑÒ܄Қo}ûÛœ~úé\pþù¾ÃÁŠÏópÓ4©¯¯'’N§Ñš 5©0çcs*#ŽÕÂ8ë̳¸üÃW„Ê_&“Ù/©Ó0ŒýÎ åûή.N:ùd?zÔŒª#™Lúº†ˆ¶êýÎU.(—† £ùÉ÷î嘆‰Czõoláöÿó56¿ÙÂi"¤ î6c(_twuÒÒâß¿¾¾žÕ«V‘,)é£á³†b (¥ˆF£$ ´Ö<ôðƒy“P§ö–µU>ù£'³ÃÒdgŒÙZk4S¦ÓG±9ë 7¶¯ýë!ñ“e唕•ù Ÿ´ÉXõ(¥ÑžƒðÆŒªà÷¿üþ‰pìä£yôþïS_SŽP(­i³-#H))-+§´´,t:}ý_ÿu?9~ n0XA"€ã;>+Ññª¶²Ó‡­'PIý^?ïÆŽÛ‡ˆèÚ‚‘±k×®Pã7 “Q5£0¤Ä0LzÌZ¿ê‡rÚEk‡Ï|âª*Ëú]ª*ËùÌÇoF«(”‹RŠ”Y‹4, )U[е ÐØØØG¹HÑ ðs¹\øÿ±ãÆô«œ9|]ÁŠã@‰Øap# þÁ¼|ð¹%çÿë'? Ì"ªkj|Ï™”¤DJ›y¶ï¡•žÃì÷Íz˯3û}³|R9ˆ¼8QÚ -*Rbš&UÕ5¡+÷¿~ò“·Lüb!è;tÞ\Uú¸a«jí ®®>´Á'ÊPFxà#(6ß.H¥zø‘GÂÀMEE%†aàa‘U ð|"¡Ð.Z¹tttBŸŽÕCV‹:::ÑÊA ÑBú1%ɘqb"…%rTUU³wo+žëòÈo~Ã>ÿù¿‹Óõ_˲| UUÑÒÒ’ïãa€9s攀§µ`Ìè1}P|(:CkÍ K–„²¿¬¼;ï—ïth¥ÐÚí¡µŽØGÿðGfŸ}¦Oø¡æ ä-¿<ÿR~ž‚@+×OC×(—´QBT¶cHIEE%­{Zhjjâ…%K8ëÌ3Éû:ŽC,`ÜØñ47·ú˜ùóçËCU|â@J9Ak-„ÐÔÔÔ„ìl¨à@Üà©§ž ïWQQáû̵ KÌù¡cÇh—Ÿÿêª+Ë(IÄ÷S¸‚ërÿœ‚®î~qÿ¯ýkaäó\ß/¡ ²2ÒBâQQQNëžÿ-â½gœñ–E@Ç£FÊ+‚Äׯ__4+(©Ê% µ …ç æÈ¿%¢Š‚_|1¯ü”$JR’vl´Ò~j˜Vh¥:Ï ”Kû¾½|ç»ßãÒKÞOuu5Z)2™4®Ó7éÖ²mb±8Áž={xüOOÐÞÙƒ0l´ö@K´6ò×ö@™¤<›¤•¥$‘Ä4L\ÏåÅ%KŠN}+€(ìƒX,–¡ñ<¯|Ø@xªTK¿n±û(roåÅûËÿt:ͺõëóA’¦å?z6g:OÐ^óhÛ·—|ˆ±cÆPQ^JeEÅ~ÉA°§'aûŽyLúœD¸mäÕp…~úZVÛ”>‰¬[¿žt:eYZ2Cí“ÂÁ‰Ø)ˆ2trØéZꤟ˜¡‰ØÑ>`¨JQå¯plÞ²%üO$0¤o~yXh­òòÝ 1ä˜çùû¿öêjR==†A, Ãî놱ŠÒ²2êÇŒÃ0 rŽƒ«4Ÿ×xa†.eCú.îXžç±yËŽ™2ePb…ïoÛ‘°•”ªtø@ë¸@£µÀ0> p®ü@/XŒðA\•?ð3h+ÃÓ†oóãƒ@ Ðä9RyÂùr>ÕÓ‚²»»»è{tvt0vÜQ½ácWãj•S^‘Ôù"2|ŽÂÔ±ææf&74ô ñDð¡rÓ4C€+bÃ2þ4îþiW’íƒq€ñP2oÔɼ†/úØ£|ó-YsÝÜßÅs]by?Bƒ n`jÿº~:2ÃD B‹ÄwwíGü¼ØùB1å¹n(´ÙáÈ:ƒê­’EÈ"ú`¬? ~!'¾½±~} ëÄOã:ˆÔqÓ2C‚j<<Àóº¾@ û…Äj:X1=Á0Œ^(ß§ZƒÐn×°€Ô^§­Å~ª–_ŒõÇÑX¬Ïõ@ PþpïkÇkË01 ;Ñt***Ñ€Ò O ÚŸ‚‚À癀™¢*ÀW<‘è3¢² û.›ÉX²sع‚]!º‚‡Í¤3ƒ²ùb£¡Ë,ìœêêêðš¹liH¤!1…—çþ~ _$´Hi`&¦i‹Ç©¬ª>à{ÔÕדH$°LÓ´1Li˜HÃDeJ„;Sªð9rÙ^®\]]= ñ‡ÚýE@*.ü]ǰ€c9omÝ»§w¤æÙØP^x0Œ7.dû===ah8bè|½€`Ž?Ù$Èù3L)†”4L™B4:°þO$8åÔi¦aHÓB&Ò°|ß!äW'‘ØR…ÏÑ“×Q Ã`ü¸qEC¼ƒ½s±~ñ?Ÿ´îÙ8‚œŽŽŽ¦a€'~¢ ¡›µ†»z'²†Qù±ÁØ¥eYLnhð½t]yÍÞ 4J8âýÑÙ[8BH„…>0â±8§Ÿñ^êGÙ¯¬Ë„‰ùÀ%¤¤$é[Òߤ”)aÊZÀe$ɘ/Š„tvøƒrÊäÉ¡`0V?Ø»[a¾áö;°qñâÅîð yjBÖîÚ¹3da…‘>ÅŽ kûY³f±aãF\×¥³³“ªÊ*ªËlvvz  Rúõ—¤‰ A:‰F™uú ===Ø›úúÑHiÉdüÄa „Y `*ßÌ”20ŸÃÔ”ÚH)èhëÀq}‡Ði3feÿâpŸb0A)Ecã΀¬¾ùB¬MwOé´Ÿ9cYÖ lo N)6rÎ:ë¬ð^»wïFË2¨ˆõ'Ø„0Ѐ‰Â@éÞR2Zk"ѣnjeô豘¦‰R^þ¾ài§%- ´~2ip}iPƒˆm ÉîæÞµ¤Î9ûìA3€ÄúOñ£’ùÕJ4 × [O½¼À®];CˆÁ^~ q|0sÆ jkký,œÆ](O!…ä¨êH>ËØ S¸üì__þkaâaà*‰£4žR¸ž‹ãäÈård2²™9×#ë*r <ÆÌ+™ùÚDR2¾Úöç$æß ®®ŽÓ¦Oïl*èÏ‚0°‚»vö~/[h-Ÿ Áuëׇ©ßñx|P(#%Ð'®¼âŠ0̼}Çv à ³©- <ñý½’ñ¸ º2‡–G \O’u “S¤².=éÝé=Y—tN‘s4ž§)+ͺ(-ñ´@a¢…ÝêAiÜöŽ;qòé[W^qE(·æÝŠéÁÜ!k×® Àˆy~ØàñÇoDè×µÖ¬^³*”݉D"œ6Ô‘Q˜4E®Ÿ;7Œ‘¿±q#Ž“CJÁ¤úb¶?!,¦­©ªp8íø}5º -G‘ÍiÒ9TÖ#ñ÷9Ç¡¦²©Sš¨©ìƲ<­% ߪˆØ0et)®ë°aú0týܹáè?P2è` MàB_µjeàúëÂ… »‡mF¯ê§â=ÍÍ»ioo§¢¢‚x<Žiš¸®»Ÿg¯˜²|_XXÁu]"‘UUUÜ6o?øÿ —ËòÚßþÆŒ3ÀÔ %¬ØÒƒ‹‰Î{qU¾ØD,æ2q\+5•ô¤lºR1<ÏBkI4â’ˆå(K¤i뎰{oŒöž(Ž'q]/ïè1LÉÔñ LË寯}=LO»í¶Û¨¬¬ 3y†ª÷ôØ ÐÜÜLWwgÞP‹5½ùôp­ÄŸ—åêÕ«B‚“Np°[!„àæ›n §œmso¾¹)$ñh„©J0 0,´´in³½%AÖ‘¨¼ÒØ.˜¹•ëßÿ7^²šógnbòøV„T88.4¶ÆÙÙš «|`˜‚©GÅ)‰û²ÇŽlݲ€I“&ñÑ|$±Žã¼å‘ß¿¯^Y¹¼wm"OòÂQ‡|jØÜ¹sßllÚu PÖÜÜ̹çÎsü #p…«oîo ‰`Û6§œr =öžçѲ»‰êQµ”&KˆELjJ-ötdð´ HºR&Û[’d2¶¥)/ÍaHp=IOƦ«Ç¦3e³yW9«6TóÊúQìi‹á*§¦ð˜6©”òd){÷íå¯/½ˆÒÛ¶ùù‚Œ®¯÷=v©T(²†Ê ‰/¥¤ººÓ4ñ<ûîûYžËèWÿôÇ'æ{,^¼XOžÒPœJ§8iêITTT`Ùl6Ìè_S·?¡‹š™yï˜išÔÕÖ2zôhžyæ”RìܱƒQ£j)-M±-ÆÖ$Èd³ôä!q=ÁžŽë¶U°du=K×Ö³ôou¼¸¦žEËdzèå£Xµ±Š¦½ ²9™7¡& Ó§ÔˆÛH)immeñ⟮‹‚ï|ûÛ¼/ožær¹ü žÁƒ?ý¿ ˆaÄãñ°–† ëYüüâ<@øæÆ o,ö8ö˜£·)->ˆl6Ë´iÓ –~I§ÓE'SöÈ ÇqˆFýéÞÇw±XŒ_z),Åƨ®®Á’ºÊuÒY‡Œ#PÚ÷âyÊ 'c±¯+ÂÞÎ])›œ'B_å ˜:±” ue†ÏŽ7oÞÌ‹/¾†»ïùìg¹áúëÃ2/L)Ü÷_û@JIMMM˜¨òÐ#ÒÜÜŒÖ:g›¹®_¿5}D`ãÆÍí“§L9ôÑM»˜9cÉdÓ4Éår!($ö*}Ë–5 ƒiÓ¦QYYÉóÏ?ú:;;©¯¯Ç¶-¢¶É˜šŽ®Oµül!¥5 Ö~TGHAÄ‚²„dlU”©+?ª„XÄBJA.—céÒ—yõÕ5!á¾òå/ó±[n Ö¶¶¶Pöe†p@üÂéoñxœÒÒR„ìØ±ß-üm²ð/zàpÐê°•ˆ™4eÒ7i ©TÓ§Ÿzƒ aÅʬãû%läk $ Ãà”“OæÄOdÑÓOãº.ííílÞ¼ ô¨ª¬òÙ«T$cŒ©I2±¾”†ÑIÆ$i]¤ú&Ô–0º*AE2ŠiʪfÃÆ ,~þ9ö´´äóãüü¾û¸üòËC·vkkkŸéoƒ py›È~! ~~---€VZræ ›š(lÚ¸i[ÃäIçv5î ¹@,œ.Ö_JÝ¿ ²V‚††®ºòJÖ¬YîÆF\×e×Îlظ!œnH$ŒhÞmmí¼þúë,yq [·l YþŒÓNcáï~ÇI'Z3---aþÃrû‚ê#…2?¸oYYYè/Ù²u ÿ»üè× ÿü§§~|¸ètX+,_tÉEg Í BŽ;ö8>û™{ÂŽknnM»œBýËÉ[ζíp uŒÿyòI¾tï½}ò¢Ñµµµ”WT,)Á2-ÇÉÑÕÝMG{;ÍÍͤÓ}õª««ãk_ý*ï¿øâÐÓ—Édhjj 'qö'z6›eë¶­¤R=Ln˜LIIr¿Î⛦Immm(N¾ü•{Ù¾ýM´F -O|òÉ'ב¸øý>Ž—Üyû]œ~úéaÁˆ½{÷0rV Áh*¬2R[[ÌuõIDATKEEEø]6›åégžáÇ?þ1+V®|KÏ>}Ú4î¼óN.¼àl»7Õ½­­æææåýšWW³lùÒ°(Ƹ±ã¸êÊ«÷#~°¯®®&ñãO?ó4¿~àWA òç‹þgÑ­‡“>æá€ò¸Kú!Dòç¿\À 'œ@ii)±XŒd2Iwwwèõë¿/f>õ'~ðûÆÆF:;;3f ‘H„X,Æe—^Ê¥ü »wïæå¥KùóŸÿÌ__~™¦¦¦¢–G}}=ï=ã .¼ðBfÍœI]]]=%“ÉÐØØHwwwÑ´-¥Ï>÷Ö­ï;`=¥úˆ˜Â}2™ WAmmm塇 ®Ù"”øÌá¦ÏÛRdÿ¢‹Îÿg¤üÀ´iÓ¸û“Ÿ ¼wï^²Ùì)û+SýÁ(X•••ÔÕÕ…£ª¿5‘ËåH¥Ódò!ëh,F<ÃίTÖÿ÷Ùl–Ý»w³oß¾>÷ﯰ¾øÒ’0RØfÍ<÷uö~ÄF£TVV†fä7¿õ Ö­÷c ®]ôä¢ßnÚ¼-åâo¼ñ#¯ìعý|!ßÔÔ„mÛ{̱y¹ ýé…è¸?Á‹M)O¥R´´´ÐÓÓƒ‚H$â§’çGaàk/--¥´´”x<ŽeY}”AÏóhkkcçÎlß¾T*µ c;vî`ñóÏí÷î¶mó¡Ë.ç2  eYTUU…€øÍoÃÿþõ¥àº\ôç§¿øvÐæm[fã /‡T+@Ô|ñó_â„N-‚}ûöÐ…:ÔúÅœJ‰D‚’’âñx8+(Pè<Ï g¥R)º»»Ã¿b×+Êßþî›÷ûí•W\Å”ÉÇôý†aPUUš|K—-åû?ø÷üÈ×o:–;}ñ·öïÃ9sæØïyÏ{ÜC¹,ýÛºÎÊEw®B<-F4ã[ßü6uµua­P)<Ø" ý0Ð~ÈS$J9”Rüà‡ÿÞçRJ.¾ðýœrÊ©}¹ôëT„Äß¾c;ŸÿÂçp]­HK¡Î|ê©g÷ÓZ¯¿þý¥žg—yžI$]÷ßæˆAÛ¼y붉GOìB\äº./½ô"gœñ^ñDX³0êw°[1%«˜Ùõ÷ný¯°rÕŠÐ_PS3Š9WÎáØcëó;˲¨¨¨ë755ñ¥/}±Wj5oÑ¢gŸìßo×]w]µƒ9ÙCXÚÐf{k{ǦM›¼#Žíü gÿÄÇ*++ùÖ7¾MEEE˜HÑÞÞÞ§®À@œ ˜088” ˜NÒ²§…;wP]]Í„£&î·¼­iš”——‡s[Zšù¿@{G°@˜žÿÌ¢g¿Òÿ9®¹æò)`§µÎ€N;Ž^ÿØcµ‘" ð¾çÞ!¹%p´ÌÿòW¨ª¬ ¹ŽŽr¹ÜA׈ð/“ÿ)©§°m›ÒÒÞÒµ»wïæÞù_ …@ký½¿<ýì¿ÞþüùríÚ×fkÁd„Nƒ‘ÆcÙÂ… ·qV@q'Ëô'Ò™Ôà„îîn?÷'Ÿ| ù¹ûm\¬¼l1¶?Ðñ@lû­²ûƒý>‘H„ÄB°aã¾tïéêò§÷iÁ=ûô³Ÿ*ì›Kç]ß·³õf 'J)-)„§=ñìÂ… ß<"ÍÀbmíÚµzú´éèI¥ª„`FÎqxö¹g™8acÇŽ Wݶ,«OÁPAp¨Ð¿XåP¯iš&eee}’;_XòßüÖ7òqR|ã¹gžû f¸^ýõ¥2­¾¢Aa !:´'Z¸páaYµbX¬¶xîùçÞ-à»øU_ùð‡.çºkç†yñZkR©T¸ÔÌÁZª%PÀX,üB™¿¼ÿ,zú©`’²ƒÐóž}zñý}Fþ¥—Æ£qûûÀX ­…X#<ñýC:ì0{öÙ—kÁýBÈR€ñcÇsÏ=ŸcôèÑ!ñ<Ï#Nïz.\ÐAÁ¶7·ñÍo}“æüä­u+R\ûÜÓÏý¥ÿ=¯ºæŠ ÄÍ@Zk±Jhñ.\˜>œý>¬V]ž={ö$-ÔƒÀ,ð A\{͵\úÁËÂh_`Ó¸†jû.H)‰D"D£ÑÞõ@*â±Çþ›ß?úû©ðϘÒùèÓO¿T´ÀÓœk®|£aGÄL}𡇞ì<Ü}>ì–Ýž6mšURŸ/„ü¬ð¦¼¼œ»îøg¦OŸÞg¥Ùl¶O,áí€aضݧ\MðLK–,ág ~&Áj­³ ¾xÎûÿûüù èÅ›sí•ÛД¡Å:ÛŠ\üÐC½ûoÖŒ3fGãÑI)&''OžÌ sodêÔ©û­Ôd ¥é¾mÛûÝßu]V®\Ƀ?À¶mÛ ¿Z…·,^¼ø€Ë½\}Í÷iÄ­@ôv¥Å½¸÷ë?Üÿ‡öw rô±Ç~¨,YòP2…õýëêê¹aîõÌœ9«èº~kÙuÝ>3t¦ZA&r±Ôõt:ÍKÿû=ü{÷öºï•Ö¤Ò¹œëyg®^¾|ùPî9gΜJ¤z"/5AÓŽà%ùÅ£<úú»¢aêÔ1i®ð”7J+Muy –ÝwɶH$ÂyçÏûÎz“&º¤[á œþJc™^(Ë‹µ\.ÇÆXüüb?¿¸OiwŸxtt§ƒB›c†8uéÒ¥CbççœsŽY=ªò!ÄÿÊd¤Ñ<ƒ’ßZ¸páêd@ž8ý´?i¥/VJ‘ˆX$K(ÏCÄ úþ)Y’äœsÎ夓NbÒÑGSYYuPË·Ö‚ÄÏÍ›7³jõJžáùpÙÙ¾b¿,”´u¦Èäœàxõ•e7ç‰9$YtÙe—%#1ë£À]À±€ç‹RÀoMiå‘GiýG€Q°ÉãO>ùæi?¨µÆ2$5U~:wát*­ö“Õ…­ªªŠéÓ¦sÔQGQ_7ššQ5”—•‡s ŠéþzYÚÚÚhÉÞºm++W®ݶÅ:P‰iøÓÆ…ôÝ{Z+ZöuáùGg²én|íµçó„TøK¦E.‰9×]~>žñI„¾$ÿ¿4ð&†¼iáà W©0 ‰Çb±XÃñ'üU1 ¶ªŒˆmç‹}kTZåóûóU<FÉóýóÊËËÐZÓÑÑA6› ‹JACÄ)ŒpÒˆ”@ V¾¸Ig³´u¦.²öµËÏ) |!¼ü6h»êÚ«ÎZÿ;p àí}çÂßü÷ïW°Ì>ØÅ¶IÇw½iYW”Ä#$1¤ô+qH)‘¦?Ú¤!1¤_ÌÉþˆ6¥_@Òç b@n(‰A⇛/Â8Ðñ]»–a±#ضå/7k™¡‚(¥á/DUp[‘×<¥BÔ””–¿ÑÖºg[èeÁ@ôYȰˆûüok·]=çšûZö4k!Äl â'žp죯¿¾~ï[…o'áÍ~ÇFÿÍŽFo X{2ÛÏÇ”Ô~`_¨™ÃZç{N”#Pþ´öKÇâOµÑëøU¿òÄþgp~È@¾d¢÷?¢ÀÄô9“îã/HÄ#d;|}!Þ<[0âÝ.`öãEED>è+W]sÕnþ PâiñQà Ãk7 ö…„ïsç ¿+üt6›M»®» ë¸ùÚ¸ì­îMAuu5ï9þ=ÄbqlÛ¦©© ÇõßÇÉ9ËŠôÑ[Ù† ¯ÄÈ~„Vyàå÷j€Íëéêzª¼²r@{wŠúx%¶mcšVï\>‘ÏfDO–$I–&)¯¨ bÙþË+EcS#ë7m ÛÕÞñç‚8€7H ¶1\  íõã2²à»B½ ¤æö-›žM–z…a˜':®Çî=mŒ®­&óg‰i™X‹F‰o¡y÷íaH0ÁCØ"¿Zˆ‰±‰Ø~> iùà”òör]6lØÈ«¯¯ÇÍ[ N.÷ü®Û^)¢õ{ýÜÀý·þ`yûdó[lÖ@z“Édõø†)?2 cB@ØòÒ$£ëj(/+òm¬<70MEÓôM;3<Ôßñ£uÒðcô"ï0 Ãù,å~:tÞÏ«uRÈ»‹ƒècßE1ý˜ƒ&›Ë²}ûÖ¼ö7ZÛzWvQ®·aëë?ÙÓÓÓQ„ðn?“p°Ï `"0 œB¥G5Lþ¼iÙçöQ¬"6ÕÕ•ÔTVRQQF²$™W²Œ<‚5‚‚(aplbHé>ÿ;ß  P< <Eç(*F‘Ë9ùü½lÛ¶7wî"çô¥S.›}bÓþÍÍdRÁw xƒ# ù3‹‚ŠOhh˜]’,ÿgiȱEf”•–PZZF"áW+Iĉ'D,›H4BĶý-ŲL ÃD ‰QàRáÈöÝÀŽç’ËæÈ99<Ç#“Íszº{èîé¡»»‡®Î.Zö¶ÒÖÞ9`¾¡RjKgû¾mß²å¥ؼ[丛YôviSƒ| oa°YŽn83V’¼Ä´¬™BP2œ­­u§ë8/uwwþiÇ–-Ë ºýßYûü0á@®âbîd –eÙÕµõÇĉcLÛ>Æ4)RG !Êßb+Ýæ)o›çº\nCOºgý¾Ý»7:ŽãQàúHés爧Px_sb÷Á@nÒðœiš‘dyyU,š¨5#v•iÊJ„a A\J#&ÁBŠ¡ûXú2´@£t·Ò:«´Ê¢UV8žçìur¹½étº¥»££Õqœ\¹ÛߤóŠìE°éw‚ï¸=ˆ_|ÐøA+Yƒèï‚>Ð{ë~ǪàXqd©~ÇÙõƒA¿Ó?ìœiý¸ƒìGä¡¿Ðÿ0 ßâ9xºÑòpöAðy0çŽûNüH@±g<áe¿‘.Š€@ÀÄg¨A€  ˆÍp#ø‘€¡€£ëI|ŠüðÅbGl¾›ÚPßW3ÒFÚHi#m¤´‘6ÒFÚHi#m¤´‘öÖþ?J¤~sJõIEND®B`‚guvcview-src-1.7.1/data/icons/Makefile.am0000664000175000017500000000113412173235416017253 0ustar paulopauloiconsdir = ${datadir}/pixmaps/guvcview icons_DATA = \ guvcview.png\ camera.png\ movie.png\ image_controls.png\ video_controls.png\ audio_controls.png\ close.png gtk_update_icon_cache = gtk-update-icon-cache -f -t $(datadir)/pixmaps/guvcview/ install-data-hook: update-icon-cache uninstall-hook: update-icon-cache update-icon-cache: @-if test -z "$(DESTDIR)"; then \ echo "Updating Gtk icon cache."; \ $(gtk_update_icon_cache); \ else \ echo "*** Icon cache not updated. After (un)install, run this:"; \ echo "*** $(gtk_update_icon_cache)"; \ fi EXTRA_DIST = $(icons_DATA) guvcview-src-1.7.1/data/icons/Makefile.in0000664000175000017500000003242412173257653017301 0ustar paulopaulo# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : subdir = data/icons DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/intltool.m4 \ $(top_srcdir)/m4/nls.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(iconsdir)" DATA = $(icons_DATA) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DEPS_CFLAGS = @DEPS_CFLAGS@ DEPS_LIBS = @DEPS_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ PULSE_CFLAGS = @PULSE_CFLAGS@ PULSE_LIBS = @PULSE_LIBS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ iconsdir = ${datadir}/pixmaps/guvcview icons_DATA = \ guvcview.png\ camera.png\ movie.png\ image_controls.png\ video_controls.png\ audio_controls.png\ close.png gtk_update_icon_cache = gtk-update-icon-cache -f -t $(datadir)/pixmaps/guvcview/ EXTRA_DIST = $(icons_DATA) all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu data/icons/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu data/icons/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-iconsDATA: $(icons_DATA) @$(NORMAL_INSTALL) @list='$(icons_DATA)'; test -n "$(iconsdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(iconsdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(iconsdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(iconsdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(iconsdir)" || exit $$?; \ done uninstall-iconsDATA: @$(NORMAL_UNINSTALL) @list='$(icons_DATA)'; test -n "$(iconsdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(iconsdir)'; $(am__uninstall_files_from_dir) tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(iconsdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-iconsDATA @$(NORMAL_INSTALL) $(MAKE) $(AM_MAKEFLAGS) install-data-hook install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-iconsDATA @$(NORMAL_INSTALL) $(MAKE) $(AM_MAKEFLAGS) uninstall-hook .MAKE: install-am install-data-am install-strip uninstall-am .PHONY: all all-am check check-am clean clean-generic distclean \ distclean-generic distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am \ install-data-hook install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-iconsDATA \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am uninstall uninstall-am uninstall-hook \ uninstall-iconsDATA install-data-hook: update-icon-cache uninstall-hook: update-icon-cache update-icon-cache: @-if test -z "$(DESTDIR)"; then \ echo "Updating Gtk icon cache."; \ $(gtk_update_icon_cache); \ else \ echo "*** Icon cache not updated. After (un)install, run this:"; \ echo "*** $(gtk_update_icon_cache)"; \ fi # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: guvcview-src-1.7.1/data/icons/movie.png0000664000175000017500000001160412173235416017047 0ustar paulopaulo‰PNG  IHDR00Wù‡sRGB®ÎébKGDÿÿÿ ½§“ pHYs  šœtIMEÚ %ÄêßõIDAThÞÅšyŒ]×}ß?g¹ëÛgá ‡r(’¢d»´ã0cxìÄh‚¸­c§vÚ"A·uŠ´’‚‘i¸ š"{Û81ÒÔ5R/â8vR×–UE^dK–(Q%’ÃmÈÙgÞ~—sÏ9ýcÞ°SJ2à¤vðÃyïÝóîù~¿ïùs~÷ ¾K¯ðÞµ¼²òc½A÷¬@§— Ýg¦ZÍÏž:~âÁßûÝ_ïþyî+¾ÓÀßòCïzUžÙߎ‹ïs΢…Ä:1e6ÆZCèba~þãGçŽüÂ'>þáç¿û«ïð¿ûþŸ^l>þ‹Ýîèw‹¼ZÔZ'!B8œËñ¾@*ž¼ÈõæÖökoo¬ýãsçÞ,—/?÷ðÿ×¼óÝnoý»,ÏC… JCÂTa«‚|<Æ”%­,eQâ½ÃVPë`vºóÈþÕý‘Ÿû¹ºý]%ð†øá@ùð“ýþè¯!$a¬Ik(K™gdãk Þ{*c0E BP¯'kE>2dYF§Õ¾òo>ø¯¿ç½ï{Çà»"¡·½ó}o ŠÏd™y“Ò’Z;¡ÖÐT•!)ÆcleqÎaÊS„Ôj)ÎBD%%UiÙÜÞ˜ÚÙÙ>sùÅ ŸøŽøÕ_ý/S6jüÆæÖî/;ËLi­8²á˜¢È1y>^Ræ9Î:¤4ê5t`UYb« !xÅõ×îï{ü‘óO>ví;Bà_<ð ïþÜ—þÓõí7©@QoŤ[dã1eY`Êk-e–aÊï=a¨iԥȋ‚Ê”T¥¡,Kð B…D—¥UróÚ¥Oý?%ðó÷ÓÆôÂo=òøãÿ6/ŠZ­ÓšJPòј"/0e5†Êò,ÃZ BE!µZ‡`0bM³c Z*¤R€G)‰³žúÿrXô·-™_ùèÂ'?÷™‡nÜ^;“$µFLZ(²1E^b+‹)s¬­(³3™´J)â8&NëXgö»XçðÎQ™ ¥5s!%BB(òl<ýø“_?\ù xàƒ¿xîò™?ØÜÞ>\«¥4ZAèõØÊRU%¦,ÿ׫ )%q¦ a”Rà×Å9‹‹@*E-‰ÈФD#Á{¤–`k·ÿ… üÄûÿùÏ~ú _øyçø¯~iê‰óÏ<øÕ'žx‹VŠF£FZS”fLe*œ·”ùÞDÌFy6"Š"â0"JSÂ$Eê€|4f8è#¥DéɰÞÓiµ"bcs¥$ZG =BÒ8¥»¶Ëñן;}ëÚ%¾m?üžŸ8÷éÏÿOôûÃÅ0HÒ§rvzJ ¨•1EN1ÎÈÇc´„R¥5š³ÓYɨק(s´Ö¥pn/:Í´Aeë›ëTUE¤B¢4$Q„w$4¦g޾ÆW$ð÷ò¸¼|ý?½zé~´T$QÄÜL‹ÌŒxáê2k[l÷ºØ2§Ì2ðÄ1ÒƒÔšÖ¡9le(Æ#<Fx^8‚  Ýž¢,<ÝáQ=%0)À:p Æ#™=ŒŽç~ö‹OË…zäò gü·$ð›¿ñ_êÂ3/þÚ_yóROê,ÌOqâd›N;a{{› Ÿc8ȹ±²ÁŸ|éaž½õ v)N@kn“å }Ê"G¶²HPKRÚí)Æãб0;?±–<Ë‘RPf%R â¸IšÔ1ãÅppìϳn½7·ûc”¯Hà¿}ìs¸|ñÚ¯½úÔY¢$åôÉ)–N4QJÒíöyîâóXcè´k´›Khýf¤ð<÷ü³8ï™?vŒl<"ɆT”’F aQo4i5ÚŒŠTêajªÍæÖ*ŒñÎ*hך,ÌÏ3è ØØ\EúT9Íi}Ûy'þåCOW?ÿ¶³î%|ðá×¾ðÌ¥ÿpxn (Ž.„¤õ1W¯u‰¢ˆõõ½œ­†Ã1WoÞÄ{Ë;à­JòÂõLiéín³½¾J˜&½÷QœÐh¶h4:•#ŒfGˆ¢”gJ‡˜²Â”9Ñ8gq~k*¶;ˆ@…±oo¬é 'ñѨ,K { ǾüµOµë‡X¾v‘q¹ÊãOuY[ïÒïï eÌìì,g_}šéÙ)®­¬P”%JJ„¨xû[¾÷蓜8²Ä^÷zž8ÿÏ]»„Oê¨$¦ÖžÁÍZH½Þ"ŠSd†I2 ”ã ï=[»«iLšÔ „Âf£ãU™_”B†Jë;îl%>ò;Ÿú›>ò¿Þ¿±µÊõ•óŒ²nÝ·™i^GÒãö­-®\ÝÄ9OH!ðÞã½'ízƒ£ó'øñ¿õ6æŽq{e—û-1Ûš5´ç3³°È쇎pxþ0ÍN›Îô f‡ M)« ©µ$%PI”ÏÌ>4}UÅRéj÷öÑÖõe‡@³ÖùØêê­¹ÊætÚ)[›pöL—ÙÃLG3Ý1äY«×ûH¡iµê!B€€••klmõ„|ó©gIÒ¿ý7ÞÁÙÓÇ9>Õb.ŒiÉ€T´êuMM1Õn0;ÕfºÝ¢Þ¨S«7¨54uâ8B E(dßÒÍÖyç\ŒsÅ¥¯e°}cÙ)€ßþðÇ—¾òå?ûðÐ餌òœÕÕmîYj0ÛY¥¬£¡ÇXÇTÛb««kaÓj5QJ±²r‹7n EÈv/çÂÅgѪD(Ãp4DICA;ò4Dèo1¾½ŠÙÙa¼Û§ŽI¢ˆZš’¶š´:„h¢½Àiݧ^;/¼­µÙ¥¯?²»»rÝj€n·{ÎZ‹Ö¥`Ø‘ÄÞõg• ÈKK–ÀÓ¨YÆù:7nÔh6ë8ç¸yó&A Ñd¶Ó¡×mrñ…ç¹½z•Ngšù¹9fff¨¥1PH´TÅv˃µJbÃâU˜¢êu¦b$zãñQãìö±˜¹¹#ý{_ÿ¦¯ìôL¤ƒm^uf‘íY67·CÉìì43Óuv»;lnî UH’Ä4ÛmÒ¤ÍúÆ5¬3ÔSG)+¤„a„àý^ùDJA…DA‡q–áœÛ­ã±A©¥5i36`=[O}éó­_|º7YÃÌK [£Ñ`Õ˜â±c§Þ·½= ËFšM˜™ªÑj'híÙÜÚdg»GÅÌšfvv–zmšµ>+ë·ñÂrhº…Òu²¬"ˆÄI°—ž'âvÖa­Å:w§è¥”B+…%5•÷ÔÒ)Y!éê÷>ûá_ùïfØg?w€ïöv.j-ÍüÜâÛƒ‚­­ƒÑˆÑp„)Q’0=3Ãì¡C´[3à6Öû,_»Da-¡ÞójšvÀ¼08JI¬Ý«FH)R¥$¡VJ#ä^Ö Â€( µ&Ï…Q<þØÃ¿|ãéo\˜$ 8}x¹¿D_xöÉóqçìkÎýL¤B¤RAHÅÄQ‚DÐïYò¬Ï`Øgmó6ÝÑ€fkŠ4NèLM!T•¥ÕšFJ‰­ìÞ3ÒÑj…(!pÞãñX瑤’ RIb¡0¦bœyle¸üG÷ŸÞXÀ¿dL( ’å+/üºñê=öÌR³–E1ÎJ¤”8k1UEfr¼°T•§–Öh4š“qsó ¦Ø«Ì%qJ7I£IRCâ1¥§QBz‚@ív•G©V«>9Æör›Ë—¿úÑ~o÷ʼnƒ¹›€8`jB$PR]qB-mt» ¦ò(& ÒAH»ÝD«˜(Œé´t{GE”h%‘Ú±¾³Ž–}‘Æ5¤Ã·3B*wB ¤”ÁÞ®Ô”P–Š^¿OYîùçÏÿûNv/W•8HBïG"I’N³Ñ¢ªRÀamµW¨b¢8& B”T ä䨩 Ô„¡¦È-ã.´šs,=ÆxÔ«|ð#//_¼qta©súÔ_ª--Ý{ôðüâ‘f££¤ˆ[¶6WÖ?û§¿ÿw¶¶×Ÿ€9ˆW¿Ì£&q  „”U½V#‰kTÖR”ÞîyLx‰”‚ è@㜤ÝjcJG妌‡KÇNqèÐ}í‹×úâž/Šl07o._½ysùI)Z‡f‡Íæ”jµ;z­=Õín^yñÅ Ÿ‡W) ÚÏ>»³nïO`=Ñ ÔD:õFç5‡æ¾ñرÓßøðÒ|˜Ä˜Â`­än&«p£ ܼ}“Í­ ¤ Y:~ ‰ç3ôŸÿìÊåç¾6‰l<36­I•a|Àû•‡ èò€™}2½­&NH'OÈ^Óh¶ï9ùªûOÜóêûææ›µ´wçJ*t°¹¹ÊNw‡ã‹K¬­^Ýü£Oô«y6Þr`M2‰˜xr0±á¤9m†“þ£×Ê—#°Ÿ‚ ‰¨M&s:‰È,0¿ÿýÌìüÉ{ïûžï½÷ÌëNÏÍ.F!Jjv»; G]ž9ÿåK_ÿÚÃß–'^nMÆÙ™|ÎH·šXyà= x¥L¡w“H&Q'‹9 =ñ^FÑ=gî{Ý}÷ÜsïÒ¡¹£KUUñ•/ÿÏ/¼ðüSNœ³9éÛ˜Zv' Ìä»ê@vÙ¾ßæðûý÷ãîž¼炞€¾Ûô¤Ï¾Ô’ƒ«øäý@XèYLÏÈÀð¤=˜Û'æØïs°ÿKÜMB ˆŒ>`çŽ:£;Ùõ'ƒºÉÀ%`\s/S$?HÄÞ‘ýß8ñ Oïå]àä˽ûúAâû2P“~ö€'ËÞ´¯žWˆÈKZñ-þ‚ ¹;:â[´â®{P½Œ÷¯ó k’?à»Iñ¿}£B92¨ÁIEND®B`‚guvcview-src-1.7.1/data/icons/video_controls.png0000664000175000017500000001111312173235416020754 0ustar paulopaulo‰PNG  IHDR00Wù‡sRGB®ÎébKGDÿÿÿ ½§“ pHYs  šœtIMEÚ uºŸxËIDAThÞÍškŒ\gyÇç~ÎÌìÜvgvvöêØ^¯;q'& Î…4@K‚V¡*¤6Pñ¡H@¥V•ªª¥êh%* BTB¥z!$æjcÒ$8ÇqÖ±×^ï}vggwç>çú¾ý°cº¸v¸èH朣9çýÿŸ÷ÿ\ÎûŽÂþüñû?[®÷oɽ¯Ð—8…^43¿òÈ÷ž›ýĹóEWz<ýJ=èÓþTr¸8ðç¹þÁÛ¶nås6­V×ÏÌ“ë³>6Vt&Ïç ÿ/ üû—¿ññdvÇ߯”Ž“Ïêäs6g¦fh4VéM”V< ý¸ò´_äæßû‘{oÙµçÛ•Õß·c–±ÿæ ¦8î, s‹(jH£íàu¼¼­ ~~våô•‘òóÜôÉ|¬¨+á?¼ÏÒ%©¸†ŽÏl¥Ž™Èrï;oÅÖ5޼xšÊZ#½Ì.Ö™™ÿè¿>ù­/ÿZgàÁûÿ𸥎ÂðêLÉŽÁ4(p¾T¦ZÛ`¹´ˆÍÈð¯ŸY¢Õn¢(`9-OìÅö/•×&ý_ Ïü7T>kªRÍÇLSkÕ™^X }¤¢ j*å• ÅáFû8}®Dà{X¦Š’‘×fæäÿR_ýô'Ó{F®}Ô÷£¤’»†S¤z–VX©T2BI(%~§Íj¥Æ­·ìc£æ²¸¼Ša‚c›("ܯ㇗V&g%|Ïìp;á Nx]!k±­˜¢å†Ì.ÌSo×Q E(x¡G$^ ÑU˜[ÄŽ'¸öšœ<³€vPPU …àÆ¸9ò¥ÊÙ_.¾ë÷~SWÄ3¾fG †Ò,¬l°¼ºH†¨RC ‰!®ˆ׋¡G¦P íLl/I˜],㺠ÇFH?bðìüéïüÒ|äî÷þ.ÃPUì¡3_Zf}£‚®* U)^á…>®' wն‡4Íç-û‹h¦A½ÕäüôªŒ)%R ¤èf(¢ãz´]%ždb÷®¿n7‡<Çá§Ÿ" <cÛF(¯7h»\×ÃqtE#;ãÉäž©Rùôk¿;>pÃ[oØþ•¸£pÞ K¼vâ½½ „cinE ›Ò‘‰øTkuBÕáž·ßÍÈð <öÇ_zDZˆÛõj§Ç!—ëe©´FJÚ®K&iãú]õÞaÇö?TY;µþs¸ïmwÿuª'±ot8çG¼qöB¦g« çhµ|ªkeP$Btc@HÖk ìd÷ýö}è¦É#ßyœùéIz¦¡#"¥ Z­RÈ!„ÎZ­†”×óɦc¸žoššw§iøâúƤü¹\·s÷ß4;í¾F«M¹²Š® NM­²X® dÈðÈ ¥R™5\? =jÍñtïyß}Ô›-}ø»”—gpb6šª BA $R“x®‡ïô¨×]„ô±L‹l&ަïûyM †–§þ¹¤“}¬7×—VÊ$:RJ&Ï-¡©Ðq]¤ŒVŒ¥¶‚°“4A¤˜ÜþÖ[˜™çñÿzšvsXÌDJ$H” …jµ‰¦IFG‡PÐÈõ¥Ù¨ÕAqyûû²ÉÅ•³ÿÌó£‘a(÷ÙÆ&øÞl‚vÛc½ÖBU$ëõ«…±~Œx #‘!‘ëg®Tá¹gŸ¥ÓZ'n›hR‚Tˆ¡‚D4©Hêµ lÇ`xd€V»Íéé%Ún@OC2n‰ÎÍéäÕV©<õÔÏD §çÚ¹XÌýD$„®ªC×.ä(W4[D"M‹d2ÉâÂ:úš.чlÿ(õz‹ SGDRÓ‘ %#Ð5)«•*h ŽmÒñm/ #,Ë 'a£àJ§®V—ÊS‡j«ë§;¹ìDÑÔ½…x¾G"aÓß—aqyF«áĸvß ¬–+x^ ß÷1 ¸ûíwpàÖÛ8_j°±±A6ÑPQ…H€n¨ #„TRR«ÖˆÅc ½ø¤Þèà†¡‘I:èº{&51¼¸<õðO]2©ñIÇp B¡¤ãy ö§qœëµ*v2Íøø³33´; 4M#‘p8?}Ž|_Š[o»• Oamuß­ƒÍЉÅ- ËB !$${bø ÞhOÄéïMây‚fË#’UUɤ =Øß›Ù52_º<‰#P^›ªô4wD¡DFa1O£6ª#‰S*­Ñ¨UÐõM[–ÉÔÙ³”ËKìžØ‰“îgmÃÃoWql˶ …‚¢éHÍÆ± –ÁúzÍ6)’D‘B½å¡i*Ùt‚„c`èÑõC…ÝwÕ›‡Úšÿ{¡…òâ ÅÜÈ{a¿ !=1“Þ«qýF›¥ÒNÌÄó|b1Ó4h6[,-.0<”#_a½æ¡FME …“„¥·ÂH€ŒhÔÚ RÄm›l*”’õF‹TC"®š†yßâréß„ˆZ?±™K¥÷½aë…‘@×! C‚ÀexÛõøB0<<À+/¿ŠijÀfa³mEQRR^)³m¬H_aˆù¥ųƒ‹£ÚLUb©>?@SÕMªB½Ö %ý¹qÇ`±\em£ƒ †¡RìÏæòÅ-—Wx¾»ø¦V×ÎÌôfv×MÝ{{ФÝj1rÕ^|¡R,¦™›]f~~ÝPñ}MÓ°m )7 i©TbïÞ]¨Fœj“þž냻¢HlÓD×5L]GQEÒn¶¨7\$*™tEjÔ[.ž!¤dd Ëõta¹ô-ÏwWßô}`¹rþù˜“¹*K\'?téIõSàìôkôõ(wNõÒé´X]]AÓTLÓØlsuJ¥Âí·ßÌòz‡ùÙÚk³ÄÛ²ÐUU7;X]CÓT„×mI•þB–l&NÌrè¸!¶©aÙ&õz'xãì©¿ŠºRzÓ7²Z£ñX®ø;šªf¥ˆˆ'R‡Gƒ*Aqãwpýõ‡¸ãö{èëdnnšv»†išÄã1LÓ¤ÓnówÝÆë“çh¬—IXº¦#¥»ª³išªÒö}lËdâšô¤û9w®Dx ³Äl“f[pnnöá¹¥Ù¯toÔ.G@!ð֨ÍeûÞ/…â¦E¡¸HÔh·ëT«Už|òü`‰w¿û:‘Œ8pã^?5‹ 꺊¢j(ªÒ•JE`ï¾=dû‡yá…ÔÊK¸í6a ŠN»#yýô‰¿l´'ûr3 t ¨€æÞR³Õ<>88ú€D cšªª‰šžæÈ‘'¨×—ëåöCwãzçÏ¿N"'•J37;‡mkhf‚òJCzºê¦÷…”øAÈÕ×]ÍÈŽ Žù!õJ‰¾Lœž„ïº4]•HŠò˯¿øgHD§Ô.ã}µKNl×s'ߊýƒw‡wÎZ(@`šššbêÌ$ñ¸ƒªµ¹æêkP” 3³“†Aœ??C,aàG6n³Š®HUCH‰ëLìઉkyæ‰P«”(æ3X–…ª¨T>¶ÓÃôüÔ?¯¬®<Xl¾š„Ú¥¤³¼ÙµX£ÕxÉ÷ÝáÁ{‹ƒyLCŶ R©4õ†Ïj¹ÄÈØ³3§°Ì"á0=}M3ð}Ÿf£N>ßO­æ#ý:†iÒé„Lì™`÷¾ƒ<õø÷©U–(äÒ膎ª¨l4|ÂH£ã·+ÇN¾üRˆ° >ºå"ï]sKÑôÁloþÎþü ©”‹!¥dm­Dq`˜Å¥uJ‹3!ùþѧػ÷-”JË”Ë $q<ÏDz4¬XŠf½Nàzlß5ΞrøÉP¯,ПKcš¦Qk´=p,›ãoÿ—z³þ\Wø@ ^~«þUP.Ñ€Á]»®@JŸééy"i`…–e³º:ÃÄø8†àر—h·[¼ôÒaÞrðnú‡Ø>±›£Ï¬W¶iòƒ‡Kå¥oǨw ´ºç .5Ê–tzá»3¾sß-Ü2^(&H§Òd³Y††r¨jÄÙ©jµˆt:O:Ųt|?`mmƒ0ði4+a@§"„ª¦ƒë +†ô# Ãd£a™6ÇN>ÏÔÌ™ïßÚ]ðµ-Þ÷»Š´KÄ€r‘þUÀo6kÑm·½ûþ}ûvP(dÉd2äryúûó81µõeVW+a’N b–mFÕ:(‰XMÛ ÒЗhºI̱èÍeè¸"Rùá«Ïròô‰'€¯woµÖ–ˆ.W‰·³ Ä€d­¶^:szråmw¾çÎÝ»G/$Ǧ¯/K>ŸÅqÒ´š>/¼pxµ¼2¯ä2Fÿýù,Šf‹0 Ñ4Eµp,USsˆÙi~øÊáèøä+O_ëê¾y‘tü®E2‘vð²À)`°kCëËë/;Ö½~Ïøøn5—ë#KHdi6uþö£óßøæOM˜š™š]^™ ÝH CÚÎíÛ-Зí!“rèË&‰†NO<ÍÂòOyì(ðU`u‹tª]"^× ޿Ü.åùè@Š@²Ûƒ \uÓwÝxÇ÷ŽÇÇzþùÃ¥gžytÆó[+€ ôwŸåÛs}êþ}7îÞ½/‘Ïql)}êõ2ÒX*çëýÓ™f«ñY`º ò‚d.^þ¤mVHtÁçx—@ èíZ¾{îuƒ«ÓmssÝ»c´€T<wFGvÊ«Ævï*]Õc33§O~ä±v§õ=`ª«ïvW6®C‚Kÿiö‰ÕnØ[ú"«{žèšÙýÝ…‡[jˆ±¥·òºÀB`¢KÜíÊåîl‰.èöà—ÿ³lt+µÚ@©[ë[š@õ©xë5¯ v«£¢-Æí‚¾`òGYã ìÔ_\/¸¨z«—°­D¶Ž)·´ÆQ¬Ø\l.¯Ø_ þˆ¢l.€¢u¸¨r‰ºrñ˜[½{ð…4©¼x€ÿ¨‡˜×†õÒBIEND®B`‚guvcview-src-1.7.1/data/icons/camera.png0000664000175000017500000001132712173235416017162 0ustar paulopaulo‰PNG  IHDR00Wù‡sRGB®ÎébKGDÿÿÿ ½§“ pHYs  šœtIMEÚ & bÏÃWIDAThÞåšy¬eÉyÐuªÎ~—sï}[÷[zó,šéž¥§gÆãqŒ‚M9aq¼d” ‚#AYrøñR„…@‘(q“&x<Î0»§»§»§×÷úí˽ïng­*þèÛÃódšñÄDâHŸN©ªÎw¿_ÕWU_U]Á÷ñœ¼ï3n³­ôîë¯ÿúþñÇùè‡?þ×[½nþ›-ù·„£“²Ô¸žzÁUÞ—žùÿôŸY€S÷fqvÁû‡®Ïç1U¥‰ã:íö4;;[ G}|Ï}¹ß3ÿâ[ÏýÚ3¦žxò©š´äµÖ!p=I–•$Í'O=DY¦\¹|…íí-¤tp¤|! Õ[mÿë¿üï~±üS8sæÓ¿05ëþ|ÌÌ&ìíöˆëŠl¬év{´Z-¦¦¦ÂãÚÕSQ–‹E)Q:B ´Á±–®täóéÈþ‡?xöWÿÿ À§?ùdP+žSµi’¦Ïì\ ß‹Y[[Çua4,ð|1–^/%ŒšIHžV G£E1q„1žç†Á·êuõ~îïÿµþ¯üøâÅýtxÆDóÌ/¶Tĵ:Ê‰ØØØ@*¨Jȳœ4«˜™îàº>¾c¬@:FD\ó ¥ÝnÉxTýýÁÓ«›?ý›¿õ kù*üðcŸúl«a¿PóYq’F>Yš!•%н!BBži‚@Ñ™J£„Å¥9ŽéÅ‚FÓ¥Vw BIHê5!,£aŽï÷$íúÏÞòɽ—_úÆ‹¢?púÞ_U®œ›Ÿkìg‚fá*Iž¸® ˆ"ÃQ¨HZÖxže4̰æfÀBšeXc±€tÍ–O­æ¢«Š,«œ ð?ñðé?÷øéG>üÕ—_z¶ø¾~ôcŸù ¾o~®^ ™›Žh·úý’Ì( ,EŽÖa —ñ(ãæÊEžãz–á dssv§A»Ýf3§+s*ðA pp¨*ƒçZNÝ=Ãvwȵk[=ÞAJ‰Åàhk!§ÔBÉÇ>ú¢’üÁ׿Boÿ*ç¾ùœ¹ ðh4â(bmmååëìììRUÚÊ2¥(+â†û%àËïÛ…¤{×ÄÞø©v»ÆT;!ÂÁ"<êQÀ›;líõi&B@’$”¥e4à¸>üfffi'sìlí‘å[€fee›0 )ó1/¿ò2o¾yííªªDk‹”ÆXòT£”èÔ‚~w{çüÚû¸÷ØÑ ²G¾ Ž<\ÏÃX‹ïyXÀu-Í0äÆÍ]6÷z4êQ²td¢0\¹rž+—®pòäfææˆj3¸*¤ß_E)¸pþ¯¾ú*››ŒGcÊ¢ Ïs²,§(JŠ\“ç%ÆT©þËÆú… ï àøâñŸP²ü`à) Âyž#‰t°ÎæÎˆÍ‚À¡ÝNXXœgowÈ¥‹¯±±±Âé3OÐ94Íü‘»ÙZßf¿·BYZ<×cn®CFDQH„x‡#$y–S–àû!‡æ£ÿyñÍ7¾ý¾>õØß°6¿Ï÷ž'ŽrŠ,e8Òíõ¨*ï)ê5—N½Îv¿âÆÍ5¡iw––K.^ø×®]ääCÓšmqéÂv×/a¬ÄŠF3&Š"Â0Äó|<×%Ž"–ŽafæÖ<~àxäñÇñÕ—þÐ|Ï~üÑVUÌJGSæ%e©ÉŠ SU FC¶¶wI³×uhÔ3Iƒa&yëÚ2i: Ñˆ9rl ŒÇ¥‹g9î5t™pýÒ9ʲ Hº{=„ÐyÆp8$Ë3Z­'ťy’VÌîî€îÞ~{{#›¹zõ•ßýžþå?ú{ {ÝìKY^ˆª*è[¬,Èòœ²4¤YÅ^¯O·Û£ÈS”S2Óª#d“«+ëôº»(‡ÏEmÖo®òÚKÏxQìb­`o·GUeäyA½™pòÁS,--b1ô÷ûŒÓE1f0Èñ}çÌÔÔýW——_ÿÎ{¿ç±_”þ}Æ Ñn„ðTmé5©pgšJXmèîçôc”rðTÅ\+¦•̰¼±ÏÎÎy9¦t¦:D‘K‰·×ÕÕMÂ0âÁÓpêÔ)„€ÍÍM†ƒY–S%®'ñ}‡á° ®©¿œ$÷¿róæë—îpæÑ§þ Rü]DZ4Û>ÍV@Ðh¶Ì--²püsGN ƒ)FûC’FÀÌÌq­1–¢D’¹éÃìîkvöö”(WP¯EH©Bà8®07w”{î9Îh4`mm4MѺ¢ª4Æ„,ÃaI‹Ïyêîç·¶Ï]ý#§OÿÄ'gçÝ_ÂЙöAÂîÞáîˆAH^e( ʹ…C˜ñ€#‡CæOÑn%h+Ȳ¡«96ˆ¬ðØÜícu‰±éH\¥RR«ŒGc¶7{äÅ£5y‘SUÕ¢œ¤5Aìa*HÇõ¦ýɹÙSÎÊòÏ~ÀÉþš¶5=£”{#þüÑ„Ÿüؽ<1_gye—­¬"ðùhD³]'Ó»k„ÄqD;i „¤×ëÒˆ‹³!Ý~~+ì–¼(°Ö …CJ²<ÇhÂ`­E”ÇqB µAW®'èï§X eQ±²|þWÞxø¡Ï}"騟‰"°îC7ã©3K|î “¹G?Áü™°û|û¹ɤÄZCQ4Ûm6¶Øtá8hm‰¢Á¸$ËG4ëÓIL#¬Ñk¬ðhµëX i–1N3 ¢ÒQaŒ!MS²,£, F£1ÝnõµmʲÀõ†Ã £«fà>øo÷ºçJ pßýü´ï‹'ZÓ1ãQÁGÇ|úgžBLÝûöøè?ÁÚ›7¸tõ ¥p(‹kJ¬ÒÝÚ p Y^Rä9ûý!ºx¾C³‘4\¦êãqI¨©ÕÚ힫Е¡(2<ϧ^o¢µÅZÃîN—­.ݽ£a‚v§Æ`RUy¨+ï[ÛÛçßRIÇ{´,4RITfyüÌqœ™0êo‡­>öo]z•õ¼¢»Û%1x¤ºFoD§íÑŒØØê…1SSuÒ4¥Ýj†‚v2ÃÊÆˆåíiЙjÑl%ŒF£¬Æh‡<“LOÏR¯×S¬±´Z ¤R^X¤*ï~OT¥=%¥¢Ô–¦ç°p¬ ô'Òš€ÇL­Ç| ¹ÛÛEžÇ™õ¤ÁxHw¢uÁ8UTв"+*Â0$òî9ž07°¼¶ÏÍå-¼zýH³IžX£ô‡ šÀh%·ö e^2åH%qµ•ûv8í'tõȧ)-Œ{ „°x˜b*¯˜nú¬E1:ÍHÇE¥IœUŒÇ%J)¬¤ã”8 ɲ‚0 HWÐn׈"ŸéÖ€++»\=¿K­U§ÑŠqVÒ ÒݽYZ`­@*Ag*¦×K±ºÄ–òËÿ{? Ä®ÌZF8”ƒ·?dùÂA0sb¤äÆ…›TDR¡\i5Žã@E^²ºÖ§V÷°F¢­K–k²<Ã÷=Ò4ƒÐ¢ðp¤Cy„a›ÎTÍ.—olqåìM´r‰ëµ8 ÞŒÐÚaIÚyVRyßüÒÙ _¾ø6€À9b6ô%•†ñ(#ÚÛ'iÄ<ýÛ/á¹ Ë•ë(ÏCH…@‚#RàûE^PV+B¸Å~H–Œ6¤i†ëùdYãhé GÜú~v6!iE,lîqùúë[›lW–Ê:TÚ ” ¨\ŠqŽgtoc+üùïZÈNœxäa×—ŒkI¨9†0tYÛr}u /P´§ëønÈN¥› ø¾6Šb”â*I3™$ýýŒ…©©[“€µß÷PRb­¥ª4e•“e%yQ`¬Á<’†GäiBÇIƒ+4>©Kj²d8òþÕËo|åkß°¸ðpÅîg]W¡B¦Ü3#,\¼ºÎ¨(8tdžéNB-9¿W’´št:mõÖÔÈFû]œæÐü!ÖÖ7÷)+‹ï´[á­I›É‚&ŽÀ0ÖPéŠ"¿,jcp=…ï;øÊ¥º,q=±‡â³ç/_ª¾ òï^›™«ý¬ÂM:{{cš¾`˜±²[2½0O½ã xñê>¹ ¬E9¥ WÅÌ$°°x”«Wo°µ¹Šçº:ÔÁÐÄ‘ˆ[Ç*Öâ8ÆZŒ®°V`ì­ùß\×EMw?e0ªºÃèó¿÷ìÓ¯ÿ‘`n{çlqâÄ™Žçª'|_¡!½Ý«Bæðý€|\qi¥ËÍÊ¡“Ô(Ë ß­“çŽÕ\¼x™ÍU|ßÂcÇæY:ºÀîN,/¨Õ|,‚²ÒyAÇ(åQdZk `Í­O!`8ÌÙÞ-R3LÃ_ûïÏÿÎïNûîÝ/ÍÌÖ>_•&Œ>C+ØXï±¹ÝåÆj—Ë}¶ÙC-„u üÑŠÍ•7éíÜ ÛÝÑ %%BJ”SÑn'Ì/ÌÑÛí¢% Ö@Ui¤r©7©(µ¦*oÈI)Ù¤¬®ð<Ÿ¼ˆžkEýØîÞY{G€­­7Òfýä™¹æ§Æ£’zÃG6#úÚ¡ \DÝ%ð]|ÙÁètì ]ŸõÕËŒöÖX<²ÈâÒ,Žô) Þ ¬Ólvh&1ÝnWJå Í­b\k`(×E¹>ÖjöûCn® ‰¢„îþàÛßzñÍ.ßüFùž;²••WÎ6÷”ss3MÇš<­Xò²Â±!µp%xnŒïl®_f¼{“™¹E:Ów15³È½÷ãø]G˜™;L»3ËÂÂF“z£‰.söC|_X,KÇ?@£Õ‘c4£QÊÕk=êÉ,ë[ëÏ<ýû_ù‘þ`½øž7õׯ¿òÍþþà\’´ôƒúT½>Ë‘…“]º©Î,ÂZ._9wî«_ýåóW¾ñŸ*]mŸzàƒ÷Í/Sy®-q\ãðá'ŽæÐüíN×s‘Ê¥*KFÃ1ŽžçÓ™ž¥*söw·ÙX_g}³$iÍsåú[ÏüöþOš[]åM®ìûº8théÉ“'=³¸x쮤Ñ9º²zõêK/}óë×®]x.à4“öCñG~ü úàþ¥F½ãdiFY•øþ­ÃÛFãÕôIÓ”AÝí-ú½.Ž8Âb!-ýÂ÷bÎ^xíÅ_ÿòü4ØÑä7J   ôœ‰ÈIY9©ìÑ$]ŸDx!LÄŠF­qäÉ'?ú±GOøC‡?êy!J¹h]¡”ÁŽÐ”Ř²ÊQÒb´a4d¹d4Úç_øoÿã™ÿú•mŒÞ™Ø2F“Ðx4©s'5é2òö&@rbìíüÛP‡€©€À©ÕêãÇî¾÷'îàØÒÝs33‡µZKJåâ*…rª²$Ër¶wÖʳç^<÷Üó_ÿÚÆæúw¸Êx¢¯ìOÂã1¿€;1ôv+G‰'ùê„<S@2Ñ—OtÌ‹z½9=}(jµ:NÕD·ÛÍn®.÷öº[;ÀêÄÀ°ìLZ|81þ @ñnb"!Üw´z0¨MŒ&evânå¤{o׫OÞÍ T2q?51dØžÛ9ÒIËg“ôð@þm²ïÖ!œ®s{Ær´¸?1Ô™(sÞárꀞۑïío‰Ť—ò‰ûU) ØÛuŠ dÞkïçùò]zL€<8¼Û%Š>àçf"úÀû ˜w¤ß÷E÷í:vb”½¤8P×¹ƒ{rÀ;1ɳïóŽyßþ‰ýÙã]tØ;èz·<{=–ÿŸÿ·•¤ ~4£åIEND®B`‚guvcview-src-1.7.1/data/icons/audio_controls.png0000664000175000017500000000316012173235416020752 0ustar paulopaulo‰PNG  IHDR00`Ü µsRGB®ÎéúPLTEIA@@::568333 BBBIA@@:::::BBB333 :::;:1333!!!BBB:::333(""2++ ))) :::568 :::333("" 333 333)))!!! )))("" !!!! þíÃýîŒù儸åxñÜoøÕ‡îÖuîÒDåÉtéËQëÄzåÄ+¿¾­ß»-¾¹¢×¶e´­žÕ­/¯«”Óžc̤1Ρ9È S¦£ŠÆŸBÛ4£‹½™RŸœ„¿”9Í;¾\˜–x›“{’y¶ˆ<³‰A­†I«„<Šˆl‰‡p†„k­|>…ƒf½x ¦{@£z<€}e}h£u>|{bžq;xu`’oAyt]ut`†oats[šk;•k<µei9­a/smZ”d9e:mlR¬^(liX‹c5„e>„c:{d:ldRgcLedQ‚\7p`=¢Q6c`J|[; P1t[9o[Bc[Ik[9bZE–K3YZJYYCmT9mS4ŒI7dS9XUFdT-ZSBTTG]Q8TR=SQA\N9}B>^J2sC9RK:QJ>KKBmA=JI:RG._A;LF3RD3ID:MC)JB1P?;BBBBB;D@0D>+L:8U82@;2@::A:):::;:1;9)56883)333:3$80/21$10(:,*1,$2++)))*)"3! (""!!!" ! 3(8tRNS@æØfbKGDˆH pHYs  ÒÝ~ütIMEÚ"QxâIDATHÇí•ÏOÓ`Çw|ÿ¸x÷€FO&r2ñÎãÁHb¢¨‰rRb…hÔÄ$ÂäGÜÆ&,hJÒX–ÂZk»vY³µiÙp.¥oâó¾â ƒ=ðMßÏû<ïó<ïÓ@àTíÕ‹;¶Ö1Æl‡v†ôx¸žá°ç-¼»ßQÃuŽK¯†^¿pñÓþ~÷»‡•t*Á0qæåÈþ±ôþ×î±~\Q¸XäãÔx|dh`[mŸÔ ÑhôS" Ÿ L>š]õ­/>j»êJt~1ü!Á̾z<8È0)ßÂGÜ6B¿ççgÞŽ=‹3Áñ©¸¼Êq8í¶à6’Q(hš ÒPmúùðÝ듉 &’ÿÉekÞÅC~Ó,•ŠEU“DQÌf³"ÂÃn]ë[‹sEW”êåV¿ÛðkjOg2¬Þ¾Ñw'Éq¢ª·úðñçDžgS)Z†öî ß C4ðWª-~›œohšç àO‚ÖØ4Z{3'(Š®›-zhþPM…|¨?‰%ÙôNmbbnÎÏ›]-ˆ€,øCSL’åÐÜÄô4ddv·Ü€^¸Tü`BÁ`’åww‹Ÿ7e¯+p(@Pÿ±K±‚„–WÖ×÷º¾@‘¤H,Ü Å "úºYrÎ Ûl ,‘aYž¥‚_82q¶MüE­ BÛ€ /’€ëø)RŸ(IÄBøRÀ°-‹”•"*uRPRѹ€?LFšX®á—ä÷¾cÛðÙ¤PE *þ@¾IX–Eƒ¾bžÿ&!ö Úpú„TÃ’Q›¡S‚#32lg»íš@²³/z{Ã"|£¶{™„C‹æ8å*:fm!ý¡2·Ýîc÷’Ëå&CFK¯^A'¬R$ËðP¨Êºl^E'îjUt™È©»½¨ÃßGsUžþrÿsý€eË·'Ð{IEND®B`‚guvcview-src-1.7.1/data/Makefile.am0000664000175000017500000000122512173235416016141 0ustar paulopauloSUBDIRS = icons @INTLTOOL_DESKTOP_RULE@ dist_man_MANS = guvcview.1 if DEBIAN_MENU MENU_IN_FILES= guvcview.in MENU_FILES= guvcview $(MENU_FILES): $(MENU_IN_FILES) cp $? $@ menudir = ${datadir}/menu menu_DATA = $(MENU_FILES) endif if DESKTOP DESKTOP_IN_FILES= guvcview.desktop.in DESKTOP_FILES= $(DESKTOP_IN_FILES:.desktop.in=.desktop) desktopdir = $(datadir)/applications desktop_DATA = $(DESKTOP_FILES) endif CLEANFILES = \ $(menu_DATA)\ $(desktop_DATA) EXTRA_DIST = \ $(DESKTOP_IN_FILES)\ $(MENU_IN_FILES) clean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES); \ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) guvcview-src-1.7.1/data/guvcview.desktop.in.in0000664000175000017500000000054712173235416020357 0ustar paulopaulo[Desktop Entry] _Name=guvcview _GenericName=GTK UVC video viewer _X-GNOME-FullName=GTK UVC video viewer _Comment=A video viewer and capturer for the linux uvc driver TryExec=guvcview Exec=guvcview Icon=@prefix@/share/pixmaps/guvcview/guvcview.png Terminal=false Type=Application Categories=Video;AudioVideo; X-GNOME-Gettext-Domain=guvcview StartupNotify=true guvcview-src-1.7.1/data/Makefile.in0000664000175000017500000006003412173257652016163 0ustar paulopaulo# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : subdir = data DIST_COMMON = $(dist_man_MANS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in $(srcdir)/guvcview.desktop.in.in \ $(srcdir)/guvcview.in.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/intltool.m4 \ $(top_srcdir)/m4/nls.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = guvcview.desktop.in guvcview.in CONFIG_CLEAN_VPATH_FILES = AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } man1dir = $(mandir)/man1 am__installdirs = "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(desktopdir)" \ "$(DESTDIR)$(menudir)" NROFF = nroff MANS = $(dist_man_MANS) DATA = $(desktop_DATA) $(menu_DATA) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DEPS_CFLAGS = @DEPS_CFLAGS@ DEPS_LIBS = @DEPS_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ PULSE_CFLAGS = @PULSE_CFLAGS@ PULSE_LIBS = @PULSE_LIBS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = icons dist_man_MANS = guvcview.1 @DEBIAN_MENU_TRUE@MENU_IN_FILES = guvcview.in @DEBIAN_MENU_TRUE@MENU_FILES = guvcview @DEBIAN_MENU_TRUE@menudir = ${datadir}/menu @DEBIAN_MENU_TRUE@menu_DATA = $(MENU_FILES) @DESKTOP_TRUE@DESKTOP_IN_FILES = guvcview.desktop.in @DESKTOP_TRUE@DESKTOP_FILES = $(DESKTOP_IN_FILES:.desktop.in=.desktop) @DESKTOP_TRUE@desktopdir = $(datadir)/applications @DESKTOP_TRUE@desktop_DATA = $(DESKTOP_FILES) CLEANFILES = \ $(menu_DATA)\ $(desktop_DATA) EXTRA_DIST = \ $(DESKTOP_IN_FILES)\ $(MENU_IN_FILES) all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu data/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu data/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): guvcview.desktop.in: $(top_builddir)/config.status $(srcdir)/guvcview.desktop.in.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ guvcview.in: $(top_builddir)/config.status $(srcdir)/guvcview.in.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ install-man1: $(dist_man_MANS) @$(NORMAL_INSTALL) @list1=''; \ list2='$(dist_man_MANS)'; \ test -n "$(man1dir)" \ && test -n "`echo $$list1$$list2`" \ || exit 0; \ echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \ $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \ { for i in $$list1; do echo "$$i"; done; \ if test -n "$$list2"; then \ for i in $$list2; do echo "$$i"; done \ | sed -n '/\.1[a-z]*$$/p'; \ fi; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ done; } uninstall-man1: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man1dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(dist_man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.1[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir) install-desktopDATA: $(desktop_DATA) @$(NORMAL_INSTALL) @list='$(desktop_DATA)'; test -n "$(desktopdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(desktopdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(desktopdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(desktopdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(desktopdir)" || exit $$?; \ done uninstall-desktopDATA: @$(NORMAL_UNINSTALL) @list='$(desktop_DATA)'; test -n "$(desktopdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(desktopdir)'; $(am__uninstall_files_from_dir) install-menuDATA: $(menu_DATA) @$(NORMAL_INSTALL) @list='$(menu_DATA)'; test -n "$(menudir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(menudir)'"; \ $(MKDIR_P) "$(DESTDIR)$(menudir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(menudir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(menudir)" || exit $$?; \ done uninstall-menuDATA: @$(NORMAL_UNINSTALL) @list='$(menu_DATA)'; test -n "$(menudir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(menudir)'; $(am__uninstall_files_from_dir) # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @list='$(MANS)'; if test -n "$$list"; then \ list=`for p in $$list; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \ if test -n "$$list" && \ grep 'ab help2man is required to generate this page' $$list >/dev/null; then \ echo "error: found man pages containing the \`missing help2man' replacement text:" >&2; \ grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/ /' >&2; \ echo " to fix them, install help2man, remove and regenerate the man pages;" >&2; \ echo " typically \`make maintainer-clean' will remove them" >&2; \ exit 1; \ else :; fi; \ else :; fi @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(MANS) $(DATA) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(desktopdir)" "$(DESTDIR)$(menudir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-desktopDATA install-man install-menuDATA install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-man1 install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-desktopDATA uninstall-man uninstall-menuDATA uninstall-man: uninstall-man1 .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic ctags \ ctags-recursive distclean distclean-generic distclean-tags \ distdir dvi dvi-am html html-am info info-am install \ install-am install-data install-data-am install-desktopDATA \ install-dvi install-dvi-am install-exec install-exec-am \ install-html install-html-am install-info install-info-am \ install-man install-man1 install-menuDATA install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs installdirs-am \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic pdf pdf-am ps ps-am tags tags-recursive \ uninstall uninstall-am uninstall-desktopDATA uninstall-man \ uninstall-man1 uninstall-menuDATA @INTLTOOL_DESKTOP_RULE@ @DEBIAN_MENU_TRUE@$(MENU_FILES): $(MENU_IN_FILES) @DEBIAN_MENU_TRUE@ cp $? $@ clean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES); \ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: guvcview-src-1.7.1/data/guvcview.in.in0000664000175000017500000000033412173235416016701 0ustar paulopaulo?package(guvcview):\ needs="X11"\ section="Applications/Video"\ title="guvcview"\ longtitle="GTK UVC Viewer - uvc video viewer and capturer"\ command="guvcview"\ icon="@prefix@/share/pixmaps/guvcview/guvcview.png" guvcview-src-1.7.1/Makefile.in0000664000175000017500000006470112173257653015260 0ustar paulopaulo# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : subdir = . DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in $(srcdir)/config.h.in \ $(top_srcdir)/configure AUTHORS COPYING ChangeLog INSTALL NEWS \ depcomp install-sh missing ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/intltool.m4 \ $(top_srcdir)/m4/nls.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(install_sh) -d CONFIG_HEADER = config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(docdir)" DATA = $(doc_DATA) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir dist dist-all distcheck ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ if test -d "$(distdir)"; then \ find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -rf "$(distdir)" \ || { sleep 5 && rm -rf "$(distdir)"; }; \ else :; fi am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" DIST_ARCHIVES = $(distdir).tar.gz GZIP_ENV = --best distuninstallcheck_listfiles = find . -type f -print am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' distcleancheck_listfiles = find . -type f -print ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DEPS_CFLAGS = @DEPS_CFLAGS@ DEPS_LIBS = @DEPS_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ PULSE_CFLAGS = @PULSE_CFLAGS@ PULSE_LIBS = @PULSE_LIBS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = ${datadir}/doc/guvcview dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = src po data ACLOCAL_AMFLAGS = -I m4 doc_DATA = \ README\ COPYING\ AUTHORS\ ChangeLog\ INSTALL DISTCLEANFILES = \ intltool-extract \ intltool-merge \ intltool-update EXTRA_DIST = \ bootstrap.sh \ intltool-extract.in \ intltool-merge.in \ intltool-update.in DISTCHECK_CONFIGURE_FLAGS = --enable-maintainer-flags=no DIST_SUBDIRS = ${SUBDIRS} all: config.h $(MAKE) $(AM_MAKEFLAGS) all-recursive .SUFFIXES: am--refresh: Makefile @: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --gnu'; \ $(am__cd) $(srcdir) && $(AUTOMAKE) --gnu \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) $(am__aclocal_m4_deps): config.h: stamp-h1 @if test ! -f $@; then rm -f stamp-h1; else :; fi @if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) stamp-h1; else :; fi stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status @rm -f stamp-h1 cd $(top_builddir) && $(SHELL) ./config.status config.h $(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) rm -f stamp-h1 touch $@ distclean-hdr: -rm -f config.h stamp-h1 install-docDATA: $(doc_DATA) @$(NORMAL_INSTALL) @list='$(doc_DATA)'; test -n "$(docdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(docdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(docdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(docdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(docdir)" || exit $$?; \ done uninstall-docDATA: @$(NORMAL_UNINSTALL) @list='$(doc_DATA)'; test -n "$(docdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(docdir)'; $(am__uninstall_files_from_dir) # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) $(am__remove_distdir) test -d "$(distdir)" || mkdir "$(distdir)" @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$(top_distdir)" distdir="$(distdir)" \ dist-hook -test -n "$(am__skip_mode_fix)" \ || find "$(distdir)" -type d ! -perm -755 \ -exec chmod u+rwx,go+rx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r "$(distdir)" dist-gzip: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 $(am__remove_distdir) dist-lzip: distdir tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz $(am__remove_distdir) dist-lzma: distdir tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma $(am__remove_distdir) dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__remove_distdir) dist-tarZ: distdir tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__remove_distdir) dist-shar: distdir shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz $(am__remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__remove_distdir) dist dist-all: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.lzma*) \ lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\ *.tar.lz*) \ lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ *.tar.xz*) \ xz -dc $(distdir).tar.xz | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac chmod -R a-w $(distdir); chmod u+w $(distdir) mkdir $(distdir)/_build mkdir $(distdir)/_inst chmod a-w $(distdir) test -d $(distdir)/_build || exit 0; \ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && am__cwd=`pwd` \ && $(am__cd) $(distdir)/_build \ && ../configure --srcdir=.. --prefix="$$dc_install_base" \ $(AM_DISTCHECK_CONFIGURE_FLAGS) \ $(DISTCHECK_CONFIGURE_FLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ distuninstallcheck \ && chmod -R a-w "$$dc_install_base" \ && ({ \ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ } || { rm -rf "$$dc_destdir"; exit 1; }) \ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ && cd "$$am__cwd" \ || exit 1 $(am__remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' distuninstallcheck: @test -n '$(distuninstallcheck_dir)' || { \ echo 'ERROR: trying to run $@ with an empty' \ '$$(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ $(am__cd) '$(distuninstallcheck_dir)' || { \ echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ echo " (check DESTDIR support)"; \ fi ; \ $(distuninstallcheck_listfiles) ; \ exit 1; } >&2 distcleancheck: distclean @if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left in build directory after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am check: check-recursive all-am: Makefile $(DATA) config.h installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(docdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic mostlyclean-am distclean: distclean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -f Makefile distclean-am: clean-am distclean-generic distclean-hdr distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-docDATA install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-docDATA .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all \ ctags-recursive install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am am--refresh check check-am clean clean-generic \ ctags ctags-recursive dist dist-all dist-bzip2 dist-gzip \ dist-hook dist-lzip dist-lzma dist-shar dist-tarZ dist-xz \ dist-zip distcheck distclean distclean-generic distclean-hdr \ distclean-tags distcleancheck distdir distuninstallcheck dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-docDATA install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic pdf pdf-am ps ps-am tags \ tags-recursive uninstall uninstall-am uninstall-docDATA update-pot: $(MAKE) -C po "$(GETTEXT_PACKAGE).pot" # Copy all the spec files. Of cource, only one is actually used. dist-hook: for specfile in *.spec; do \ if test -f $$specfile; then \ cp -p $$specfile $(distdir); \ fi \ done .PHONY: check-gettext update-po update-gmo force-update-gmo # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: guvcview-src-1.7.1/ChangeLog0000775000175000017500000004020612173235416014753 0ustar paulopauloguvcview (1.7.1) * Fix avi muxer: fix opendml indexes (>= 1Gb) * Update Italian translation -- Paulo Assis Tue, 16 Jul 2013 13:27:00 +0000 guvcview (1.7.0) * refactor avi muxer (base it on libav muxer with opendml support) * refactor mkv muxer (base it on libav muxer with webm support) * Add VP8, Theora and Vorbis codecs * Add Webm support * Add a Top Menu * Move all file operations to the Top Menu -- Paulo Assis Sun, 20 Jan 2013 15:44:00 +0000 guvcview (1.6.1) * Fix build with latest libavcodec * Fix audio codecs listing * Fix audio codecs (AC3 and AAC) input format for latest libavcodec API (float) * Add support for delayed frames in video encoding -- Paulo Assis Sun, 22 Jul 2012 14:35:00 +0000 guvcview (1.6.0) * run audio in separate thread * update audio buffer * move pulse audio interface from simple to async API * add pulse device list * enable build of pulse API by default -- Paulo Assis Thu, 19 Apr 2012 23:18:00 +0000 guvcview (1.5.3) * update libavcodec API * add libavutil dependency * fix pulse interface * update language catalogs (add bs and fo) -- Paulo Assis Mon, 27 Feb 2012 23:18:00 +0000 guvcview (1.5.2) * move to pthreads (fix gthread API 2 issues) * add italian translation * fix several libavcodec issues * fix some gtk3 widgets -- Paulo Assis Wed, 1 Feb 2012 23:01:00 +0000 guvcview (1.5.1) * move to gtk3 * make control window size dependent on screen resolution * Threaded coding patch by George Sedov * fix h264 codec properties -- Paulo Assis Wed, 12 Oct 2011 12:12:00 +0000 guvcview (1.5.0) * add a no display mode (--no_display) * fix build issues with newer versions (>=0.7.x) of ffmpeg libavcodec * add support for unix signals * add VU meter OSD * fix menu controls (linux 3.0) -- Paulo Assis Tue, 9 Aug 2011 22:16:00 +0000 guvcview (1.4.5) * store current codec properties in configuration file * fix audio codec properties button * modify some logitech extra controls (integer to menu) -- Paulo Assis Tue, 1 Mar 2011 23:09:00 +0000 guvcview (1.4.4) * add av_sync patch by Richard Fuchs : Fixes sync issues between audio and video (most noticeable in avi container due to lack of timestamps) * Apply matroska-largefiles patch by Richard Fuchs : Fix large files indexing in 32 bit systems * fix logitech disable video processing mode -- Paulo Assis Mon, 10 Jan 2011 15:05:00 +0000 guvcview (1.4.3) * Fix control enumeration for buggy cameras (endless loop on failed control query) * Add udev events support (new dependy libudev) * Add exit on close to image capture * Fix image capture autonaming when set from command line -- Paulo Assis Sun, 06 Nov 2010 11:00:00 +0000 guvcview (1.4.2) * Add support for Y16 pixel format (Greyscale) * Fix dynamic control support under kernels > 2.6.35 * Check if resolution is supported by SDL_Surface * Check for null overlays * Use a sanner video ring buffer size (dependent on fps) * Add gdk-pixbuf-2.0 to pkg-config dependencies - fix build error on Maverick -- Paulo Assis Sat, 25 Sept 2010 14:45:00 +0000 guvcview (1.4.1) * Fix h264 default values * Fix dynamic control mappings (uncache dynamic ctrls in uvc driver) * Check for valid ranges on integer controls -- Paulo Assis Mon, 14 Jun 2010 23:24:00 +0000 guvcview (1.4.0) * completly refactor v4l control interface * change to control profile file format - rfc 0.0.2 * change icon set, use Paul Davey icons: http://mattahan.deviantart.com/ -- Paulo Assis Tue, 8 Jun 2010 10:18:00 +0000 guvcview (1.3.1) * Add support for GDK events * Add support for Webcam photo button * Add raw image format to command line picture timed capture -- Paulo Assis Sat, 10 Apr 2010 22:23:00 +0000 guvcview (1.3.0) * Use libv4l2 for device access * Fix several builtin software autofocus issues -- Paulo Assis Sat, 6 Mar 2010 19:58:00 +0000 guvcview (1.2.2) * Drop Twolame dependency * Audio enconding through libavcodec * Add MP3, AC3 and AAC support -- Paulo Assis Sat, 30 Jan 2010 13:08:00 +0000 guvcview (1.2.1) * Performance boost: - Use ring buffers for video and audio processing. - Moved video and audio processing (including file IO) to separate thread. * Add particles video effect. * Fixed bug caused by empty device list. * Add MPG4-AVC (H264) codec support. -- Paulo Assis Mon, 16 Nov 2009 10:25:00 +0000 guvcview (1.2.0) * Resolution and input format change no longer need a restart * Add add_ctrls option - exits after adding extension controls * Add disk check during capture (checks free space every 10sec) * Stop capture if low on free disk space * Add xioctl funtion - failed ioctl will be retried 4 times in case of I/O error * Fixed invalid gtk-button-images property warning -- Paulo Assis Wed, 13 Oct 2009 11:30:00 +0000 guvcview (1.1.4) * Set pixel format BA81 to correct fourcc * Definitve fix button images display under karmic * Sdd pix formats: nv12, nv21, nv16, nv61, y41p, grey, s501, s505, s508 * Improve yu12 and yv12 format conversion. * Add skip initial frames option * Fix man pages * Add hebrew language support -- Paulo Assis Wed, 19 Sep 2009 21:59:00 +0000 guvcview (1.1.3) * Add rgb24 and bgr24 color formats * Set pulse support disabled by default in configure * Add extra messages to configure * Fix button images display under gtk 2.17 -- Paulo Assis Thu, 20 Aug 2009 13:50:00 +0000 guvcview (1.1.2) * Fixed YUYV Matroska codec segfault * Added enable-debug option to configure (debug symbols (-g) is now disable by default) * Added Dutch translation -- Paulo Assis Wed, 13 Aug 2009 12:59:00 +0000 guvcview (1.1.1) * Fixed Ubuntu 9.10 exit segfault * Added disable-pulse option to configure * Added russian translation by Roustam Ghizdatov * Added patches 2763, 2764 and 2765 by iwamatsu * Fixed some video format conversions * Fixed memory allocations when in control_only mode -- Paulo Assis Sun, 31 May 2009 10:16:00 +0000 guvcview (1.1.0) * Added Matroska file format support (mkv) * Fixed Ubuntu 9.10 audio capture * Added initial pulseaudio support (testing only - needs pulse-devel for enabling) -- Paulo Assis Sun, 10 May 2009 14:26:00 +0000 guvcview (1.0.5-ubuntu1) intrepid; urgency=low * Added libavcodec properties button * Improved default options for libavcodec * Improved support for libavcodec -- Paulo Assis Sat, 4 Apr 2009 14:00:00 +0000 guvcview (1.0.4-ubuntu1) intrepid; urgency=low * Added WMV1 encoding to avi capture * fixed libavcodec configuration * changed support for uyvy (now we convert it to yuyv and use only one render format) * changed raw bayer conversion funtions * added full bayer support ( all bayer pixel formats) -- Paulo Assis Sun, 29 Mar 2009 22:32:00 +0000 guvcview (1.0.3-ubuntu1) intrepid; urgency=low * Added MPEG encoding to avi capture * Added FLV1 encoding to avi capture * Added japanese translation -- Paulo Assis Mon, 23 Mar 2009 23:01:00 +0000 guvcview (1.0.2-ubuntu1) intrepid; urgency=low * Fixed segfault on gspca devices -- Paulo Assis Sun, 8 Mar 2009 09:58:00 +0000 guvcview (1.0.1) intrepid; urgency=low * Fixed giant bug that prevented format detection -- Paulo Assis Mon, 4 Mar 2009 23:57:00 +0000 guvcview (1.0.0) intrepid; urgency=low * Fixed vid:pid for UVC driver dynamic controls (parsing v4l2_cap card value) * Fixed yu12 conversion bug (needs testing) * added yv12 frame format (needs testing) * added yvyu frame format (needs testing) * Fixed null devices list bug (segfault) * Added version option to console args (--version) -- Paulo Assis Mon, 2 Mar 2009 14:43:00 +0000 guvcview (0.9.9) intrepid; urgency=low * Fixed Format detection bug * Added control only functionality (--control_only), allows image control in different apps (e.g ekiga, mplayer) * Splitted V4l2 interface in smaller files -- Paulo Assis Thu, 19 Feb 2009 18:03:00 +0000 guvcview (0.9.8) intrepid; urgency=low * Added audio tab * Added new icon theme * Added audio effects * Added Turkish, Danish and Czech catalogs * Fixed Debian/armel corruption bug.(fix by Rask Ingemann Lambertsen) * Fixed gdk display bug after avi capture auto split (when max length reached), make gdk thread safe. * Fixed empty device list segfault bug -- Paulo Assis Sat, 28 Jan 2009 09:43:00 +0000 guvcview (0.9.7) stable; urgency=low * Added JPEG pixel format support. * Added YYUV pixel format support. * Change configuration parsing method, using GScanner (glib). * Change console options parsing method, using GOption (glib). * Change string handling, using glib functions. * Change memory managment, using glib functions. * Change from pthreads to gthreads (glib). * Added multiple device support. -- Paulo Assis Tue, 31 Dec 2008 12:16:00 +0000 guvcview (0.9.6) stable; urgency=low * Fixed Get Focus value for logitech motor focus cameras. * Added select with timeout so guvcview won't stall at VIDIOC_DQBUFF. * Added support for GBRG pix format. * Added initial support for drivers that don't enumerate frame sizes (gspca). * Change console options parsing method, we now use getopt. * Improved v4l2 error handling by providing more usefull error messages. -- Paulo Assis Sat, 6 Dec 2008 18:44:00 +0000 guvcview (0.9.5) stable; urgency=low * Fixed several warnings in valgrind. * Fixed a couple of memory leaks. * Fixed a device open/close bug after first format init failure, causing second init with a valid format to fail. -- Paulo Assis Fri, 7 Nov 2008 23:19:00 +0000 guvcview (0.9.4) stable; urgency=low * Added support for isight camera - UYVY (Nobuhiro Iwamatsu). * Added support for YU12 ( YUV 4:2:0 planar ) pix format * Changed audio capture from blocking API to callback API, should improve audio performance. * Improved software autofocus (Dr. Alexander K. Seewald) * Added MP2 audio compression (twolame) * Added AVI auto file naming * Added AVI multi file captures (captures bigger than max file size) -- Paulo Assis Mon, 13 Oct 2008 18:48:00 +0000 guvcview (0.9.3) stable; urgency=low * Fixed buffer overflow in filename extension for autocapture. * Fixed Doc installation path * Added software autofocus control for quickcam cameras (beta) * Changed avi audio method (audio chunks are now written directly to avi file) * Added avi max file size limit to config file * Close avi safely and stop capture when max file size reached * Fixed compilation with 2.6.26 kernels -- Paulo Assis Mon, 18 Aug 2008 23:25:00 +0000 guvcview (0.9.2) stable; urgency=low * Fixed German Translation by Andreas Volz . * Fixed Jpg Save error on Cameras with incomplete JFIF headers -- Paulo Assis Mon, 21 Jul 2008 23:30:00 +0000 guvcview (0.9.1) stable; urgency=low * Added error message dialogs. * Changed cleanup. * Added translations for error messages. * Fixed Pan/Tilt for Sphere/Orbit (should now work with latest libwebcam) * Changed icon set * Added guvcview icon to control window * Improved Raw support (needs patch for uvc driver, http://forums.quickcamteam.net/showthread.php?tid=323) -- Paulo Assis Wed, 11 Jul 2008 12:04:00 +0000 guvcview (0.9.0) stable; urgency=low * GUI change: Add Tab Container. * Add spin button to integer controls (allows fine tunning). * Add gettext support (i18n). * Add laguage catalogs (pt pt_PT pt_BR fr de). * Add button icons. * Changed build scripts, make will now build guvcview.desktop and make install will install all data files. -- Paulo Assis Mon, 18 May 2008 10:20:00 +0000 guvcview (0.8.2) stable; urgency=low * Fixed SegFault after soundthread exit in 64 bit systems (bug: #013688) * Moved all SDL related stuff to video thread * Add support for long name command line args -- Paulo Assis Fri, 02 May 2008 19:18:00 +0000 guvcview (0.8.1) stable; urgency=low * Fixed Debian Testing (lenny) image file name icrement bug. -- Paulo Assis Wed, 19 Apr 2008 22:25:18 +0000 guvcview (0.8.0) stable; urgency=low * Fixed Pan/Tilt and Focus Control * Added Scrolled Pans to GUI * Added image autonaming and auto capture. -- Paulo Assis Wed, 09 Jan 2008 19:07:18 +0000 guvcview (0.7.4) stable; urgency=low * Added File Auto name checkbox * Added File increment label -- Paulo Assis Wed, 09 Jan 2008 19:07:18 +0000 guvcview (0.7.3) stable; urgency=low * Added file name increment for multiple captures * Added timed capture mode * Fixed Pan/Tilt controls -- Paulo Assis Wed, 09 Jan 2008 19:07:18 +0000 guvcview (0.7.1) stable; urgency=low * Fixed Backlight Compensation * Added Dynamic Controls * Added video loop sleep time to rc file -- Paulo Assis Wed, 09 Jan 2008 19:07:18 +0000 guvcview (0.7.0) stable; urgency=low * Fixed Cell padding (auto resize widgets) * Fixed Mono filter * Added quit button * Added sound capture parameters to rc file * Added device string to rc file -- Paulo Assis Wed, 09 Jan 2008 19:07:18 +0000 guvcview (0.6.2) stable; urgency=low * Replace '~' by home dir in Path entry * added fps counter command line option '-p' * added input mode combo box (jpg - yuv) -- Paulo Assis Wed, 09 Jan 2008 19:07:18 +0000 guvcview (0.6.1) stable; urgency=low * fixed memory allocation bug for jpeg encoder buffer * added video filters to rc file -- Paulo Assis Wed, 09 Jan 2008 19:07:18 +0000 guvcview (0.6.0) unstable; urgency=low * Added image filters * Added built-in jpeg encoder (allows jpeg and MJPG compression with filters and in yuv mode) * Changed Exposure settings to comboBox (compatibility with V4L2) -- Paulo Assis Wed, 09 Jan 2008 19:07:18 +0000 guvcview (0.5.4) unstable; urgency=low * Adds [-t seconds] and [-n filename.avi] command line options - timer used with -n will capture filename.avi for specified number of seconds * Stores avi and sound options to rc file. The options will be remembered in the next session. * Moved global variables to global structure. Allows bether cleanup. * Increased audio input buffer - will avoid droping frames in the begining of capture in slower machines. * Improved sync system for video-audio. * Cleanup of some non-used variables. -- Paulo Assis Wed, 09 Jan 2008 19:07:18 +0000 guvcview (0.5.2-1) unstable; urgency=low * fixes a restart bug when guvcview is started from system path -- Paulo Assis Wed, 09 Jan 2008 19:07:18 +0000 guvcview (0.5.1-0) unstable; urgency=low * disables sound and avi compression controls when in avi capture * some bug fixing for sound capture. -- Paulo Assis Wed, 09 Jan 2008 19:07:18 +0000 guvcview (0.5.0-beta) unstable; urgency=low * Adds basic sound support to AVI capture * AVI video set by default to MJPG -- Paulo Assis Wed, 09 Jan 2008 19:07:18 +0000 guvcview-src-1.7.1/po/0000775000175000017500000000000012173260105013603 5ustar paulopauloguvcview-src-1.7.1/po/es.po0000664000175000017500000005210112173235416014560 0ustar paulopaulo# translation of es.po to Portuguese # translation of guvcview to Spanish # Copyright (C) 2008 Paulo Assis # This file is distributed under the same license as the guvcview package. # guvcview , 2008. # # msgid "" msgstr "" "Project-Id-Version: es\n" "Report-Msgid-Bugs-To: pj.assis@gmail.com\n" "POT-Creation-Date: 2013-07-16 12:53+0000\n" "PO-Revision-Date: 2013-02-25 05:38+0000\n" "Last-Translator: Adolfo Jayme Barrientos \n" "Language-Team: Portuguese \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2013-07-22 13:32+0000\n" "X-Generator: Launchpad (build 16696)\n" "Language: pt\n" #: ../data/guvcview.desktop.in.in.h:1 msgid "guvcview" msgstr "guvcview" #: ../data/guvcview.desktop.in.in.h:2 msgid "GTK UVC video viewer" msgstr "Reproductor video GTK UVC" #: ../data/guvcview.desktop.in.in.h:3 msgid "A video viewer and capturer for the linux uvc driver" msgstr "" "Un reproductor y capturador de vídeo para el controlador uvc de Linux" #: ../src/acodecs.c:59 msgid "PCM - uncompressed (16 bit)" msgstr "PCM - sin compresión (16 bit)" #: ../src/acodecs.c:76 msgid "MPEG2 - (lavc)" msgstr "MPEG2 - (lavc)" #: ../src/acodecs.c:93 msgid "MP3 - (lavc)" msgstr "MP3 - (lavc)" #: ../src/acodecs.c:110 msgid "Dolby AC3 - (lavc)" msgstr "Dolby AC3 - (lavc)" #: ../src/acodecs.c:127 msgid "ACC Low - (faac)" msgstr "ACC Low - (faac)" #: ../src/acodecs.c:144 msgid "Vorbis" msgstr "" #: ../src/audio_tab.c:80 msgid "Audio" msgstr "Audio" #: ../src/audio_tab.c:98 msgid " Sound" msgstr " Sonido" #. VU meter on the image (OSD) #: ../src/audio_tab.c:109 msgid " Show VU meter" msgstr "" #: ../src/audio_tab.c:121 msgid "Audio API:" msgstr "Audio API" #: ../src/audio_tab.c:132 msgid "PORTAUDIO" msgstr "PORTAUDIO" #: ../src/audio_tab.c:133 msgid "PULSEAUDIO" msgstr "PULSEAUDIO" #: ../src/audio_tab.c:149 ../src/audio_tab.c:172 msgid "Input Device:" msgstr "Dispositivo de entrada:" #: ../src/audio_tab.c:182 ../src/audio_tab.c:214 msgid "Dev. Default" msgstr "Automático" #: ../src/audio_tab.c:204 msgid "Sample Rate:" msgstr "Sample Rate:" #: ../src/audio_tab.c:215 msgid "1 - mono" msgstr "1 - mono" #: ../src/audio_tab.c:216 msgid "2 - stereo" msgstr "2 - stereo" #: ../src/audio_tab.c:251 msgid "Channels:" msgstr "Canales:" #: ../src/audio_tab.c:302 msgid "---- Audio Effects ----" msgstr "---- Efectos de Audio ----" #. Echo #: ../src/audio_tab.c:321 msgid " Echo" msgstr " Eco" #. FUZZ #: ../src/audio_tab.c:332 msgid " Fuzz" msgstr " Ruido" #. Reverb #: ../src/audio_tab.c:344 msgid " Reverb" msgstr " Reverb" #. WahWah #: ../src/audio_tab.c:356 msgid " WahWah" msgstr " WahWah" #. Ducky #: ../src/audio_tab.c:368 msgid " Ducky" msgstr " Pato" #: ../src/callbacks.c:108 msgid "Error" msgstr "Error" #: ../src/callbacks.c:132 msgid "" "\n" "You have more than one video device installed.\n" "Do you want to try another one ?\n" msgstr "" #. Devices #: ../src/callbacks.c:139 ../src/video_tab.c:103 msgid "Device:" msgstr "Dispositivo de entrada:" #: ../src/callbacks.c:271 msgid "Save File" msgstr "Guardar Archivo" #: ../src/callbacks.c:283 msgid "File Format:" msgstr "" #: ../src/callbacks.c:454 msgid "codec values" msgstr "valores de códecs" #: ../src/callbacks.c:465 msgid "" " encoder fps: \n" " (0 - use fps combobox value)" msgstr "" #: ../src/callbacks.c:478 msgid " monotonic pts" msgstr "" #. bit rate #: ../src/callbacks.c:485 ../src/callbacks.c:808 msgid "bit rate: " msgstr "media de bits: " #: ../src/callbacks.c:498 msgid "qmax: " msgstr "qmáx: " #: ../src/callbacks.c:511 msgid "qmin: " msgstr "qmin: " #: ../src/callbacks.c:524 msgid "max. qdiff: " msgstr "máx. qdiff: " #: ../src/callbacks.c:537 msgid "dia size: " msgstr "tamaño dia: " #: ../src/callbacks.c:550 msgid "pre dia size: " msgstr "tamaño pre dia: " #: ../src/callbacks.c:563 msgid "pre me: " msgstr "pre me: " #: ../src/callbacks.c:576 msgid "pre cmp: " msgstr "" #: ../src/callbacks.c:589 msgid "cmp: " msgstr "cmp: " #: ../src/callbacks.c:602 msgid "sub cmp: " msgstr "" #: ../src/callbacks.c:615 msgid "last predictor count: " msgstr "" #: ../src/callbacks.c:628 msgid "gop size: " msgstr "tamaño gop: " #: ../src/callbacks.c:641 msgid "qcompress: " msgstr "" #: ../src/callbacks.c:654 msgid "qblur: " msgstr "" #: ../src/callbacks.c:667 msgid "subq: " msgstr "" #: ../src/callbacks.c:680 msgid "framerefs: " msgstr "" #: ../src/callbacks.c:693 msgid "me method: " msgstr "Metodo me " #: ../src/callbacks.c:706 msgid "mb decision: " msgstr "mb desición " #: ../src/callbacks.c:719 msgid "max B frames: " msgstr "" #: ../src/callbacks.c:732 msgid "num threads: " msgstr "" #: ../src/callbacks.c:795 msgid "audio codec values" msgstr "valores de codec de audio" #. sample format #: ../src/callbacks.c:822 msgid "sample format: " msgstr "" #: ../src/callbacks.c:1250 msgid "start new" msgstr "Comenzar nuevo" #: ../src/callbacks.c:1253 msgid "restart" msgstr "Recomenzar aplicación" #: ../src/callbacks.c:1255 msgid "new" msgstr "nuevo" #: ../src/callbacks.c:1257 msgid "cancel" msgstr "cancelar" #: ../src/callbacks.c:1262 msgid "" "launch new process or restart?.\n" "\n" msgstr "" "nuevo proceso o recomenzar?\n" "\n" #: ../src/callbacks.c:1716 ../src/guvcview.c:537 msgid "Cap. Image (I)" msgstr "Cap. imagen (I)" #. disable image controls #: ../src/callbacks.c:1727 ../src/guvcview.c:658 ../src/timers.c:101 msgid "capturing photo to" msgstr "" #: ../src/callbacks.c:1786 ../src/guvcview.c:547 msgid "Cap. Video (V)" msgstr "Cap. vídeo (V)" #: ../src/callbacks.c:1812 ../src/guvcview.c:708 msgid "capturing video to" msgstr "" #. vid capture enabled from start #: ../src/callbacks.c:1845 ../src/guvcview.c:542 msgid "Stop Video (V)" msgstr "Detener vídeo (V)" #: ../src/callbacks.c:1901 ../src/menubar.c:66 msgid "Save Profile" msgstr "" #: ../src/callbacks.c:1914 ../src/menubar.c:65 msgid "Load Profile" msgstr "" #: ../src/create_video.c:1016 ../src/guvcview.c:700 msgid "Cap. Video" msgstr "Cap. vídeo" #: ../src/guvcview.c:279 msgid "Guvcview Video Capture" msgstr "Captura de vídeo Guvcview" #: ../src/guvcview.c:291 msgid "GUVCViewer Controls" msgstr "Controles de GUVCViewer" #. can't open device #: ../src/guvcview.c:336 msgid "" "Guvcview error:\n" "\n" "Unable to open device" msgstr "" "Error de Guvcview:\n" "\n" "No se pudo abrir el dispositivo" #: ../src/guvcview.c:337 msgid "" "Please make sure the camera is connected\n" "and that the correct driver is installed." msgstr "" "Por favor, verifique de que la cámara esté conectada\n" "y que se instaló el controlador correcto." #. uvc extension controls OK, give warning and shutdown (called with --add_ctrls) #: ../src/guvcview.c:342 msgid "" "Guvcview:\n" "\n" "UVC Extension controls" msgstr "" "Guvcview:\n" "\n" "Controles de la extensión UVC" #: ../src/guvcview.c:343 msgid "Extension controls were added to the UVC driver" msgstr "Los controles de extensión se añadieron al controlador de UVC" #. uvc extension controls error - EACCES (needs root user) #: ../src/guvcview.c:350 msgid "" "Guvcview error:\n" "\n" "UVC Extension controls" msgstr "" "Error de Guvcview:\n" "\n" "Controles de extensión UVC" #: ../src/guvcview.c:351 msgid "" "An error occurred while adding extension\n" "controls to the UVC driver\n" "Make sure you run guvcview as root (or sudo)." msgstr "" "Ocurrió un error al añadir los controles\n" "de extensión al controlador UVC\n" "Asegúrese de que ejecuta guvcview como root (o sudo)." #: ../src/guvcview.c:377 ../src/guvcview.c:455 msgid "" "Guvcview error:\n" "\n" "Can't set a valid video stream for guvcview" msgstr "" "Guvcview error:\n" "\n" "Incapaz de establecer video stream" #: ../src/guvcview.c:378 ../src/guvcview.c:456 msgid "" "Make sure your device driver is v4l2 compliant\n" "and that it is properly installed." msgstr "" "Asegúrese de que tiene un controlador v4l2\n" "y que está instalado." #: ../src/guvcview.c:400 ../src/guvcview.c:422 msgid "" "Guvcview error:\n" "\n" "Unable to start with minimum setup" msgstr "" "Guvcview error:\n" "\n" "No se pudo iniciar con la configuración mínima" #: ../src/guvcview.c:401 ../src/guvcview.c:423 msgid "Please reconnect your camera." msgstr "Vuelva a conectar su cámara." #: ../src/guvcview.c:430 msgid "" "Guvcview error:\n" "\n" "Couldn't query device capabilities" msgstr "" "Guvcview error:\n" "\n" "No se pudo abrir el dispositivo" #: ../src/guvcview.c:431 msgid "Make sure the device driver supports v4l2." msgstr "Asegúrese de que el controlador del dispositivo soporta v4l2." #: ../src/guvcview.c:435 msgid "" "Guvcview error:\n" "\n" "Read method error" msgstr "" "Error de Guvcview:\n" "\n" "error de método Read" #: ../src/guvcview.c:436 msgid "Please try mmap instead (--capture_method=1)." msgstr "Intente, en vez de eso, mmap (--capture_method=1)." #: ../src/guvcview.c:444 msgid "" "Guvcview error:\n" "\n" "Unable to allocate Buffers" msgstr "" "Error de Guvcview:\n" "\n" "No se pudieron asignar búferes" #: ../src/guvcview.c:445 msgid "Please try restarting your system." msgstr "Pruebe a reiniciar su sistema." #: ../src/guvcview.c:490 msgid "Image Controls" msgstr "Controles de la imagen" #. image auto capture #: ../src/guvcview.c:533 msgid "Stop Auto (I)" msgstr "Detener auto (I)" #: ../src/guvcview.c:644 msgid "" "Guvcview error:\n" "\n" "Unable to create Video Thread" msgstr "" "Error de Guvcview:\n" "\n" "No se pudo crear hilo de vídeo" #: ../src/guvcview.c:645 msgid "Please report it to http://developer.berlios.de/bugs/?group_id=8179" msgstr "Repórtelo a http://developer.berlios.de/bugs/?group_id=8179" #: ../src/img_controls.c:121 msgid "Auto Focus (continuous)" msgstr "Foco Automatico (continuo)" #: ../src/img_controls.c:122 msgid "set Focus" msgstr "Focar" #: ../src/image_format.c:35 msgid "Jpeg (jpg)" msgstr "" #: ../src/image_format.c:41 msgid "Bitmap (Bmp)" msgstr "" #: ../src/image_format.c:47 msgid "Portable Network Graphics (Png)" msgstr "" #: ../src/image_format.c:53 msgid "Raw Image (raw)" msgstr "" #. controls menu #: ../src/menubar.c:64 msgid "Settings" msgstr "" #: ../src/menubar.c:67 msgid "Hardware Defaults" msgstr "" #: ../src/menubar.c:75 msgid "Camera Button" msgstr "" #: ../src/menubar.c:79 msgid "Capture Image" msgstr "" #: ../src/menubar.c:84 msgid "Capture Video" msgstr "" #. video menu #: ../src/menubar.c:144 ../src/video_tab.c:87 msgid "Video" msgstr "" #: ../src/menubar.c:145 ../src/menubar.c:231 msgid "File" msgstr "" #: ../src/menubar.c:146 ../src/menubar.c:232 msgid "Increment Filename" msgstr "" #: ../src/menubar.c:164 msgid "Video Codec" msgstr "" #: ../src/menubar.c:187 msgid "Video Codec Properties" msgstr "" #: ../src/menubar.c:194 msgid "Audio Codec" msgstr "" #: ../src/menubar.c:215 msgid "Audio Codec Properties" msgstr "" #. photo menu #: ../src/menubar.c:230 msgid "Photo" msgstr "" #: ../src/options.c:752 msgid "Prints version" msgstr "Imprimir versión" #: ../src/options.c:753 msgid "Displays debug information" msgstr "Exhibir information de depuracion" #: ../src/options.c:754 msgid "Video Device to use [default: /dev/video0]" msgstr "Dispositivo de video [pred: /dev/video0]" #: ../src/options.c:755 msgid "Exit after adding UVC extension controls (needs root/sudo)" msgstr "" "Salir después de añadir los controles de extensión UVC (requiere root/sudo)" #: ../src/options.c:756 msgid "Don't stream video (image controls only)" msgstr "No hacer streaming de vídeo (sólo controles)" #: ../src/options.c:757 msgid "Don't display a GUI" msgstr "No mostrar interfaz gráfica" #: ../src/options.c:758 msgid "Capture method (1-mmap (default) 2-read)" msgstr "Método de captura (1-mmap (predeterminado) 2-read)" #: ../src/options.c:759 msgid "Configuration file" msgstr "Archivo de configuración" #: ../src/options.c:760 msgid "Hardware accelaration (enable(1) | disable(0))" msgstr "Accel. del hardware (habilitar(1)|deshabil.(0))" #: ../src/options.c:761 msgid "" "Pixel " "format(mjpg|jpeg|yuyv|yvyu|uyvy|yyuv|yu12|yv12|nv12|nv21|nv16|nv61|y41p|grey|" "y10b|y16 |s501|s505|s508|gbrg|grbg|ba81|rggb|bgr3|rgb3)" msgstr "" #: ../src/options.c:762 msgid "Frame size, default: 640x480" msgstr "Resolución (defect: 640x480)" #: ../src/options.c:763 msgid "Image File name" msgstr "Archivo de Imagen" #: ../src/options.c:764 msgid "Image capture interval in seconds" msgstr "Intervalo de captura Imagen en segundos" #: ../src/options.c:765 msgid "Number of Pictures to capture" msgstr "Número de imagens a capturar" #: ../src/options.c:766 msgid "Video File name (capture from start)" msgstr "Archivo video (captura del arranque)" #: ../src/options.c:767 msgid "Video capture time (in seconds)" msgstr "Tiempo de la captura video (segundos)" #: ../src/options.c:768 msgid "Exits guvcview after closing video" msgstr "Salir de guvcview después de cerrar el vídeo" #: ../src/options.c:769 msgid "Number of initial frames to skip" msgstr "Número de fotogramas iniciales a omitir" #: ../src/options.c:770 msgid "Show FPS value (enable(1) | disable (0))" msgstr "Exhibir FPS (habilitar(1) | deshabilitar(0))" #: ../src/options.c:771 msgid "Load Profile at start" msgstr "Cargar perfil al inicio" #: ../src/options.c:777 msgid "- local options" msgstr "- opciones locales" #. gdk_threads_enter(); #: ../src/timers.c:119 msgid "Cap. Image" msgstr "Cap. imagen" #: ../src/timers.c:217 msgid "Guvcview Warning:" msgstr "Aviso de Guvcview:" #: ../src/timers.c:217 msgid "Not enough free space left on disk" msgstr "No hay suficiente espacio libre en disco" #: ../src/v4l2_controls.c:711 msgid "Left" msgstr "Izquierda" #: ../src/v4l2_controls.c:712 msgid "Right" msgstr "Derecha" #: ../src/v4l2_controls.c:716 msgid "Down" msgstr "Abajo" #: ../src/v4l2_controls.c:717 msgid "Up" msgstr "Arriba" #: ../src/v4l2_controls.c:762 msgid "Off" msgstr "Apagado" #: ../src/v4l2_controls.c:762 msgid "On" msgstr "Encendido" #: ../src/v4l2_controls.c:762 msgid "Blinking" msgstr "Parpadeo" #: ../src/v4l2_controls.c:762 msgid "Auto" msgstr "Auto" #. turn it into a menu control #: ../src/v4l2_controls.c:813 msgid "8 bit" msgstr "8 bit" #: ../src/v4l2_controls.c:813 msgid "12 bit" msgstr "12 bit" #: ../src/v4l2_dyna_ctrls.c:96 msgid "Pan (relative)" msgstr "Rotación (relativo)" #: ../src/v4l2_dyna_ctrls.c:109 msgid "Tilt (relative)" msgstr "Inclinación (relativa)" #: ../src/v4l2_dyna_ctrls.c:122 msgid "Pan Reset" msgstr "Rotación (reajuste)" #: ../src/v4l2_dyna_ctrls.c:135 msgid "Tilt Reset" msgstr "Inclinación (reajuste)" #: ../src/v4l2_dyna_ctrls.c:148 msgid "Focus (absolute)" msgstr "Foco (absoluto)" #: ../src/v4l2_dyna_ctrls.c:161 msgid "LED1 Mode" msgstr "Modo LED1" #: ../src/v4l2_dyna_ctrls.c:174 msgid "LED1 Frequency" msgstr "Frecuencia LED1" #: ../src/v4l2_dyna_ctrls.c:187 msgid "Disable video processing" msgstr "Parar el proceso de vídeo" #: ../src/v4l2_dyna_ctrls.c:200 msgid "Raw bits per pixel" msgstr "Bits por pixel (Raw)" #. needed only for language files (not used) #. V4L2 control strings #: ../src/v4l2uvc.c:56 msgid "User Controls" msgstr "Controles de usuario" #: ../src/v4l2uvc.c:57 msgid "Brightness" msgstr "Brillo" #: ../src/v4l2uvc.c:58 msgid "Contrast" msgstr "Contraste" #: ../src/v4l2uvc.c:59 msgid "Hue" msgstr "Matiz" #: ../src/v4l2uvc.c:60 msgid "Saturation" msgstr "Saturación" #: ../src/v4l2uvc.c:61 msgid "Sharpness" msgstr "Nitidez" #: ../src/v4l2uvc.c:62 msgid "Gamma" msgstr "Gamma" #: ../src/v4l2uvc.c:63 msgid "Backlight Compensation" msgstr "Compensación de retroiluminación" #: ../src/v4l2uvc.c:64 msgid "Power Line Frequency" msgstr "Frecuencia de la línea eléctrica" #: ../src/v4l2uvc.c:65 msgid "Hue, Automatic" msgstr "Matiz, automático" #: ../src/v4l2uvc.c:66 msgid "Focus, Auto" msgstr "Foco, Auto" #: ../src/v4l2uvc.c:67 msgid "Manual Mode" msgstr "Modo manual" #: ../src/v4l2uvc.c:68 msgid "Auto Mode" msgstr "Modo automático" #: ../src/v4l2uvc.c:69 msgid "Shutter Priority Mode" msgstr "Modo prioridad del obturador" #: ../src/v4l2uvc.c:70 msgid "Aperture Priority Mode" msgstr "Modo prioridad de la abertura" #: ../src/v4l2uvc.c:71 msgid "Black Level" msgstr "Nivel de negros" #: ../src/v4l2uvc.c:72 msgid "White Balance, Automatic" msgstr "Balance de blancos, automático" #: ../src/v4l2uvc.c:73 msgid "Do White Balance" msgstr "Hacer balance de blancos" #: ../src/v4l2uvc.c:74 msgid "Red Balance" msgstr "Balance de rojos" #: ../src/v4l2uvc.c:75 msgid "Blue Balance" msgstr "Balance de azules" #: ../src/v4l2uvc.c:76 msgid "Exposure" msgstr "Exposición" #: ../src/v4l2uvc.c:77 msgid "Gain, Automatic" msgstr "Ganancia, automático" #: ../src/v4l2uvc.c:78 msgid "Gain" msgstr "Ganancia" #: ../src/v4l2uvc.c:79 msgid "Horizontal Flip" msgstr "Giro horizontal" #: ../src/v4l2uvc.c:80 msgid "Vertical Flip" msgstr "Giro vertical" #: ../src/v4l2uvc.c:81 msgid "Horizontal Center" msgstr "Centrado horizontal" #: ../src/v4l2uvc.c:82 msgid "Vertical Center" msgstr "Centrado vertical" #: ../src/v4l2uvc.c:83 msgid "Chroma AGC" msgstr "AGC de croma" #: ../src/v4l2uvc.c:84 msgid "Color Killer" msgstr "Anulador de color" #: ../src/v4l2uvc.c:85 msgid "Color Effects" msgstr "Efectos de color" #. CAMERA CLASS control strings #: ../src/v4l2uvc.c:88 msgid "Camera Controls" msgstr "Controles de cámara" #: ../src/v4l2uvc.c:89 msgid "Auto Exposure" msgstr "Exposición automática" #: ../src/v4l2uvc.c:90 msgid "Exposure Time, Absolute" msgstr "Tiempo de exposición, absoluto" #: ../src/v4l2uvc.c:91 msgid "Exposure, Dynamic Framerate" msgstr "Exposición, tasa de fotogramas dinámica" #: ../src/v4l2uvc.c:92 msgid "Pan, Relative" msgstr "" #: ../src/v4l2uvc.c:93 msgid "Tilt, Relative" msgstr "" #: ../src/v4l2uvc.c:94 msgid "Pan, Reset" msgstr "" #: ../src/v4l2uvc.c:95 msgid "Tilt, Reset" msgstr "" #: ../src/v4l2uvc.c:96 msgid "Pan, Absolute" msgstr "" #: ../src/v4l2uvc.c:98 msgid "Focus, Absolute" msgstr "Enfoque, Absoluto" #: ../src/v4l2uvc.c:99 msgid "Focus, Relative" msgstr "Enfoque, relativo" #: ../src/v4l2uvc.c:100 msgid "Focus, Automatic" msgstr "Enfoque, automático" #: ../src/v4l2uvc.c:101 msgid "Zoom, Absolute" msgstr "Zoom, absoluto" #: ../src/v4l2uvc.c:102 msgid "Zoom, Relative" msgstr "Zoom, relativo" #: ../src/v4l2uvc.c:103 msgid "Zoom, Continuous" msgstr "Zoom, continuo" #: ../src/v4l2uvc.c:104 msgid "Privacy" msgstr "Privacidad" #. UVC specific control strings #: ../src/v4l2uvc.c:107 msgid "Exposure, Auto" msgstr "Exposición, auto" #: ../src/v4l2uvc.c:108 msgid "Exposure, Auto Priority" msgstr "Exposición, Prioridad Auto" #: ../src/v4l2uvc.c:109 msgid "Exposure (Absolute)" msgstr "Exposición (Absoluta)" #: ../src/v4l2uvc.c:110 msgid "White Balance Temperature, Auto" msgstr "Equilibrio blanco, auto" #: ../src/v4l2uvc.c:111 msgid "White Balance Temperature" msgstr "Blanco (Temp. de color)" #: ../src/v4l2uvc.c:112 msgid "White Balance Component, Auto" msgstr "Componente de color, Auto" #: ../src/v4l2uvc.c:113 msgid "White Balance Blue Component" msgstr "Componente Azul" #: ../src/v4l2uvc.c:114 msgid "White Balance Red Component" msgstr "Componente Rojo" #. libwebcam specific control strings #: ../src/v4l2uvc.c:117 msgid "Focus" msgstr "Enfoque" #: ../src/v4l2uvc.c:118 msgid "Focus (Absolute)" msgstr "Enfoque (absoluto)" #: ../src/vcodecs.c:63 msgid "MJPG - compressed" msgstr "MJPG - comprimido" #: ../src/vcodecs.c:99 msgid "YUY2 - uncomp YUV" msgstr "YUY2 - s/comp YUV" #: ../src/vcodecs.c:135 msgid "RGB - uncomp BMP" msgstr "RGB - s/comp BMP" #: ../src/vcodecs.c:171 msgid "MPEG video 1" msgstr "MPEG video 1" #: ../src/vcodecs.c:207 msgid "FLV1 - flash video 1" msgstr "FLV1 - flash video 1" #: ../src/vcodecs.c:243 msgid "WMV1 - win. med. video 7" msgstr "WMV1 - win. med. video 7" #: ../src/vcodecs.c:279 msgid "MPG2 - MPG2 format" msgstr "MPG2 - MPG2 format" #: ../src/vcodecs.c:315 msgid "MS MP4 V3" msgstr "MS MP4 V3" #: ../src/vcodecs.c:351 msgid "MPEG4-ASP" msgstr "MPEG4-ASP" #: ../src/vcodecs.c:387 msgid "MPEG4-AVC (H264)" msgstr "MPEG4-AVC (H264)" #: ../src/vcodecs.c:427 msgid "VP8 (VP8)" msgstr "" #: ../src/vcodecs.c:463 msgid "Theora (ogg theora)" msgstr "" #: ../src/video_format.c:43 msgid "AVI - avi format" msgstr "AVI - formato avi" #: ../src/video_format.c:52 msgid "MKV - Matroska format" msgstr "MKV - formato Matroska" #: ../src/video_format.c:61 msgid "WEBM - format" msgstr "" #: ../src/video_tab.c:208 msgid "Frame Rate:" msgstr "FPS:" #: ../src/video_tab.c:215 msgid " Show" msgstr " Mostrar" #: ../src/video_tab.c:237 msgid "Resolution:" msgstr "Resolución:" #: ../src/video_tab.c:263 msgid "Camera Output:" msgstr "Salida de la cámara:" #: ../src/video_tab.c:285 msgid "Apply" msgstr "Aplicar" #: ../src/video_tab.c:292 msgid "Quality:" msgstr "Calidad:" #: ../src/video_tab.c:302 msgid "---- Video Filters ----" msgstr "---- Filtros Video ----" #. Mirror #: ../src/video_tab.c:321 msgid " Mirror" msgstr " Espejo" #. Upturn #: ../src/video_tab.c:332 msgid " Invert" msgstr " Invertido" #. Negate #: ../src/video_tab.c:343 msgid " Negative" msgstr " Negativo" #. Mono #: ../src/video_tab.c:354 msgid " Mono" msgstr " Gris" #. Pieces #: ../src/video_tab.c:366 msgid " Pieces" msgstr " Pedazos" #. Particles #: ../src/video_tab.c:378 msgid " Particles" msgstr " Partículas" guvcview-src-1.7.1/po/si.po0000664000175000017500000007307112173235416014575 0ustar paulopaulo# Sinhalese translation for guvcview # Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 # This file is distributed under the same license as the guvcview package. # FIRST AUTHOR , 2013. # msgid "" msgstr "" "Project-Id-Version: guvcview\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-07-16 12:53+0000\n" "PO-Revision-Date: 2013-06-03 09:59+0000\n" "Last-Translator: sajith \n" "Language-Team: Sinhalese \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2013-07-22 13:32+0000\n" "X-Generator: Launchpad (build 16696)\n" #: ../data/guvcview.desktop.in.in.h:1 msgid "guvcview" msgstr "guvcview" #: ../data/guvcview.desktop.in.in.h:2 msgid "GTK UVC video viewer" msgstr "GTK UVC වීඩිය෠දකින්නà·" #: ../data/guvcview.desktop.in.in.h:3 msgid "A video viewer and capturer for the linux uvc driver" msgstr "ලිනක්ස් uvc à¶©à·Šâ€à¶»à¶ºà·’වරය සඳහ෠වීඩිය෠පෙන්වන්න෠සහ ග්â€à¶»à·„ණය කරන්නà·" #: ../src/acodecs.c:59 msgid "PCM - uncompressed (16 bit)" msgstr "MJPG - සම්පීඩනය නොකරන ලද" #: ../src/acodecs.c:76 msgid "MPEG2 - (lavc)" msgstr "MPEG2 - (lavc)" #: ../src/acodecs.c:93 msgid "MP3 - (lavc)" msgstr "MP3 - (lavc)" #: ../src/acodecs.c:110 msgid "Dolby AC3 - (lavc)" msgstr "Dolby AC3 - (lavc)" #: ../src/acodecs.c:127 msgid "ACC Low - (faac)" msgstr "ACC Low - (faac)" #: ../src/acodecs.c:144 msgid "Vorbis" msgstr "Vorbis" #: ../src/audio_tab.c:80 msgid "Audio" msgstr "à·à·Šâ€à¶»à·€à·Šâ€à¶º" #: ../src/audio_tab.c:98 msgid " Sound" msgstr " à¶±à·à¶¯à¶º" #. VU meter on the image (OSD) #: ../src/audio_tab.c:109 msgid " Show VU meter" msgstr " VU මීටරය පෙන්වන්න" #: ../src/audio_tab.c:121 msgid "Audio API:" msgstr "à·à·Šâ€à¶»à·€à·Šâ€à¶º API:" #: ../src/audio_tab.c:132 msgid "PORTAUDIO" msgstr "PORTAUDIO" #: ../src/audio_tab.c:133 msgid "PULSEAUDIO" msgstr "PULSEAUDIO" #: ../src/audio_tab.c:149 ../src/audio_tab.c:172 msgid "Input Device:" msgstr "යෙදවුම් උපකරණය:" #: ../src/audio_tab.c:182 ../src/audio_tab.c:214 msgid "Dev. Default" msgstr "Dev. Default" #: ../src/audio_tab.c:204 msgid "Sample Rate:" msgstr "ආදර්෠අනුපà·à¶­à¶º:" #: ../src/audio_tab.c:215 msgid "1 - mono" msgstr "1 - à¶‘à¶šà¶šà·Š" #: ../src/audio_tab.c:216 msgid "2 - stereo" msgstr "2 - à¶­à·Šâ€à¶»à·’මà·à¶±" #: ../src/audio_tab.c:251 msgid "Channels:" msgstr "à¶±à·à¶½à·’à¶šà·à·€à¶±à·Š:" #: ../src/audio_tab.c:302 msgid "---- Audio Effects ----" msgstr "---- à·à·Šâ€à¶»à·€à¶« à·ƒà·à¶»à·ƒà·’ලි ----" #. Echo #: ../src/audio_tab.c:321 msgid " Echo" msgstr " අනුකරණය කරන්න" #. FUZZ #: ../src/audio_tab.c:332 msgid " Fuzz" msgstr " Fuzz" #. Reverb #: ../src/audio_tab.c:344 msgid " Reverb" msgstr " Reverb" #. WahWah #: ../src/audio_tab.c:356 msgid " WahWah" msgstr " WahWah" #. Ducky #: ../src/audio_tab.c:368 msgid " Ducky" msgstr " Ducky" #: ../src/callbacks.c:108 msgid "Error" msgstr "දà·à·‚ය" #: ../src/callbacks.c:132 msgid "" "\n" "You have more than one video device installed.\n" "Do you want to try another one ?\n" msgstr "" "\n" "ඔබ වීඩිය෠උපකරණ à¶‘à¶šà¶šà¶§ වඩ෠වà·à¶©à·’යෙන් සවිකර ඇත.\n" "ඔබට වෙනත් à¶‘à¶šà¶šà·Š අත්හද෠බà·à¶½à·“මට à¶…à·€à·à·Šâ€à¶ºà¶¯?\n" #. Devices #: ../src/callbacks.c:139 ../src/video_tab.c:103 msgid "Device:" msgstr "උපකරණය:" #: ../src/callbacks.c:271 msgid "Save File" msgstr "ගොනුව සුරකින්න" #: ../src/callbacks.c:283 msgid "File Format:" msgstr "ගොනු ආකෘතිය:" #: ../src/callbacks.c:454 msgid "codec values" msgstr "කොඩෙක් අගයන්" #: ../src/callbacks.c:465 msgid "" " encoder fps: \n" " (0 - use fps combobox value)" msgstr "" " fps සංකේතකය: \n" " (0 - fps à¶½à·à¶ºà·’ස්තුවක් සහිත à¶»à·à¶¸à·”වේ අගය à¶´à·à·€à·’à¶ à·Šà¶ à·’ කරන්න)" #: ../src/callbacks.c:478 msgid " monotonic pts" msgstr " ඒකවිධ pts" #. bit rate #: ../src/callbacks.c:485 ../src/callbacks.c:808 msgid "bit rate: " msgstr "à¶¶à·’à¶§à·Š අනුපà·à¶­à¶º: " #: ../src/callbacks.c:498 msgid "qmax: " msgstr "qmax: " #: ../src/callbacks.c:511 msgid "qmin: " msgstr "qmin: " #: ../src/callbacks.c:524 msgid "max. qdiff: " msgstr "උපරිම qdiff: " #: ../src/callbacks.c:537 msgid "dia size: " msgstr "dia size: " #: ../src/callbacks.c:550 msgid "pre dia size: " msgstr "pre dia size: " #: ../src/callbacks.c:563 msgid "pre me: " msgstr "pre me: " #: ../src/callbacks.c:576 msgid "pre cmp: " msgstr "pre cmp: " #: ../src/callbacks.c:589 msgid "cmp: " msgstr "cmp: " #: ../src/callbacks.c:602 msgid "sub cmp: " msgstr "sub cmp: " #: ../src/callbacks.c:615 msgid "last predictor count: " msgstr "අවසà·à¶± à¶…à¶±à·à·€à·à¶šà·’ ගණන: " #: ../src/callbacks.c:628 msgid "gop size: " msgstr "gop size: " #: ../src/callbacks.c:641 msgid "qcompress: " msgstr "qcompress: " #: ../src/callbacks.c:654 msgid "qblur: " msgstr "qblur: " #: ../src/callbacks.c:667 msgid "subq: " msgstr "subq: " #: ../src/callbacks.c:680 msgid "framerefs: " msgstr "framerefs: " #: ../src/callbacks.c:693 msgid "me method: " msgstr "me method: " #: ../src/callbacks.c:706 msgid "mb decision: " msgstr "mb decision: " #: ../src/callbacks.c:719 msgid "max B frames: " msgstr "උපරිම B à¶»à·à¶¸à·”: " #: ../src/callbacks.c:732 msgid "num threads: " msgstr "num සම්බන්ධයන්: " #: ../src/callbacks.c:795 msgid "audio codec values" msgstr "à·à·Šâ€à¶»à·€à·Šâ€à¶º කොඩෙක් අගයන්" #. sample format #: ../src/callbacks.c:822 msgid "sample format: " msgstr "ආදර්෠ආකෘතිය: " #: ../src/callbacks.c:1250 msgid "start new" msgstr "අලුතින් අරඹන්න" #: ../src/callbacks.c:1253 msgid "restart" msgstr "à¶±à·à·€à¶­ අරඹන්න" #: ../src/callbacks.c:1255 msgid "new" msgstr "අලුත් à¶‘à¶šà¶šà·Š" #: ../src/callbacks.c:1257 msgid "cancel" msgstr "අවලංගු කරන්න" #: ../src/callbacks.c:1262 msgid "" "launch new process or restart?.\n" "\n" msgstr "" "අලුත් à¶šà·Šâ€à¶»à·’යà·à·€à¶½à·’යක් දියත් කරන්න à·„à· à¶±à·à·€à¶­ අරඹන්නද?.\n" "\n" #: ../src/callbacks.c:1716 ../src/guvcview.c:537 msgid "Cap. Image (I)" msgstr "රූපය ග්â€à¶»à·„ණය කරගන්න (I)" #. disable image controls #: ../src/callbacks.c:1727 ../src/guvcview.c:658 ../src/timers.c:101 msgid "capturing photo to" msgstr "à¶¡à·à¶ºà·à¶»à·–පය ග්â€à¶»à·„ණය කිරීම" #: ../src/callbacks.c:1786 ../src/guvcview.c:547 msgid "Cap. Video (V)" msgstr "වීඩියà·à·€ ග්â€à¶»à·„ණය කරගන්න (V)" #: ../src/callbacks.c:1812 ../src/guvcview.c:708 msgid "capturing video to" msgstr "වීඩියà·à·€ ග්â€à¶»à·„ණය කිරීම" #. vid capture enabled from start #: ../src/callbacks.c:1845 ../src/guvcview.c:542 msgid "Stop Video (V)" msgstr "වීඩියà·à·€ නවත්වන්න (V)" #: ../src/callbacks.c:1901 ../src/menubar.c:66 msgid "Save Profile" msgstr "ආකෘතිය සුරකින්න" #: ../src/callbacks.c:1914 ../src/menubar.c:65 msgid "Load Profile" msgstr "ආකෘතිය à¶´à·Šâ€à¶»à·€à·šà·à¶±à¶º කරන්න" #: ../src/create_video.c:1016 ../src/guvcview.c:700 msgid "Cap. Video" msgstr "වීඩියà·à·€ ග්â€à¶»à·„ණය කරගන්න (V)" #: ../src/guvcview.c:279 msgid "Guvcview Video Capture" msgstr "Guvcview වීඩිය෠ග්â€à¶»à·„ණය කරගà·à¶±à·“ම" #: ../src/guvcview.c:291 msgid "GUVCViewer Controls" msgstr "GUVCViewer à¶´à·à¶½à¶šà¶ºà¶±à·Š" #. can't open device #: ../src/guvcview.c:336 msgid "" "Guvcview error:\n" "\n" "Unable to open device" msgstr "" "Guvcview දà·à·‚ය:\n" "\n" "උපකරණය විවෘත කිරීමට නොහà·à¶š" #: ../src/guvcview.c:337 msgid "" "Please make sure the camera is connected\n" "and that the correct driver is installed." msgstr "" "à¶šà¶»à·à¶«à·à¶šà¶» à¶šà·à¶¸à¶»à·à·€ සම්බන්ධ à¶šà¶» ඇති à¶¶à·€ සහ \n" "නිවà·à¶»à¶¯à·’ à¶©à·Šâ€à¶»à¶ºà·’වරය පිහිටුව෠ඇති බවට සහතික කරගන්න." #. uvc extension controls OK, give warning and shutdown (called with --add_ctrls) #: ../src/guvcview.c:342 msgid "" "Guvcview:\n" "\n" "UVC Extension controls" msgstr "" "Guvcview:\n" "\n" "UVC ව්â€à¶ºà·à¶´à·Šà¶­à·’ à¶´à·à¶½à¶š" #: ../src/guvcview.c:343 msgid "Extension controls were added to the UVC driver" msgstr "UVC à¶©à·Šâ€à¶»à¶ºà·’වරයට ව්â€à¶ºà·à¶´à·Šà¶­à·’ à¶´à·à¶½à¶š à¶‘à¶šà·Š කර ඇත" #. uvc extension controls error - EACCES (needs root user) #: ../src/guvcview.c:350 msgid "" "Guvcview error:\n" "\n" "UVC Extension controls" msgstr "" "Guvcview දà·à·‚ය:\n" "\n" "UVC ව්â€à¶ºà·à¶´à·Šà¶­à·’ à¶´à·à¶½à¶š" #: ../src/guvcview.c:351 msgid "" "An error occurred while adding extension\n" "controls to the UVC driver\n" "Make sure you run guvcview as root (or sudo)." msgstr "" "UVC à¶©à·Šâ€à¶»à¶ºà·’වරයට à¶´à·à¶½à¶š ව්â€à¶ºà·à¶´à·Šà¶­à·’ය à¶‘à¶šà¶­à·” කරන\n" "අතරතුර දà·à·‚යක් à·„à¶§ à¶œà·à¶±à·’à¶«\n" "ඔබ guvcview root ලෙස (à·„à· sudo) à·€à·à¶©à¶šà¶»à¶± à¶¶à·€ සහතික කරගන්න." #: ../src/guvcview.c:377 ../src/guvcview.c:455 msgid "" "Guvcview error:\n" "\n" "Can't set a valid video stream for guvcview" msgstr "" "Guvcview දà·à·‚ය:\n" "\n" "guvcview සඳහ෠වලංගු වීඩියà·à·€à¶šà·Š පිහිටුවීමට නොහà·à¶š" #: ../src/guvcview.c:378 ../src/guvcview.c:456 msgid "" "Make sure your device driver is v4l2 compliant\n" "and that it is properly installed." msgstr "" "ඔබගේ උපකරණ à¶©à·Šâ€à¶»à¶ºà·’වරය v4l2à¶§ අනුකූල වන à¶¶à·€ \n" "සහ එය සුදුසු ලෙස පිහිටුව෠ඇති බවට සහතික කරගන්න." #: ../src/guvcview.c:400 ../src/guvcview.c:422 msgid "" "Guvcview error:\n" "\n" "Unable to start with minimum setup" msgstr "" "Guvcview දà·à·‚ය:\n" "\n" "අවම à·ƒà·à¶½à·à·ƒà·Šà¶¸ සමඟ ඇරඹීමට නොහà·à¶š" #: ../src/guvcview.c:401 ../src/guvcview.c:423 msgid "Please reconnect your camera." msgstr "කරුණà·à¶šà¶» ඔබේ à¶šà·à¶¸à¶»à·à·€ à¶±à·à·€à¶­ සම්බන්ධ කරන්න." #: ../src/guvcview.c:430 msgid "" "Guvcview error:\n" "\n" "Couldn't query device capabilities" msgstr "" "Guvcview දà·à·‚ය:\n" "\n" "උපකරණයන්ගේ à·„à·à¶šà·’යà·à·€à¶±à·Š විමසුමට නොහà·à¶šà·’ විය" #: ../src/guvcview.c:431 msgid "Make sure the device driver supports v4l2." msgstr "උපකරණ à¶©à·Šâ€à¶»à¶ºà·’වරය v4l2à¶§ අනුග්â€à¶»à·„ය ලබ෠දෙන à¶¶à·€ සහතික කරගන්න." #: ../src/guvcview.c:435 msgid "" "Guvcview error:\n" "\n" "Read method error" msgstr "" "Guvcview දà·à·‚ය:\n" "\n" "කියවීම් à¶šà·Šâ€à¶»à¶¸à¶ºà·š දà·à·‚යකි" #: ../src/guvcview.c:436 msgid "Please try mmap instead (--capture_method=1)." msgstr "කරුණà·à¶šà¶» mmap වෙනුවට අත්හද෠බලන්න (--capture_method=1)." #: ../src/guvcview.c:444 msgid "" "Guvcview error:\n" "\n" "Unable to allocate Buffers" msgstr "" "Guvcview දà·à·‚ය:\n" "බෆර්ස් වෙන්කිරීමට නොහà·à¶š" #: ../src/guvcview.c:445 msgid "Please try restarting your system." msgstr "කරුණà·à¶šà¶» ඔබේ පද්ධතිය à¶±à·à·€à¶­ ඇරඹීමට à¶‹à¶­à·Šà·ƒà·à·„ දරන්න" #: ../src/guvcview.c:490 msgid "Image Controls" msgstr "රූප à¶´à·à¶½à¶š" #. image auto capture #: ../src/guvcview.c:533 msgid "Stop Auto (I)" msgstr "ස්වයංක්â€à¶»à·“යව නවත්වන්න (I)" #: ../src/guvcview.c:644 msgid "" "Guvcview error:\n" "\n" "Unable to create Video Thread" msgstr "" "Guvcview දà·à·‚ය:\n" "\n" "වීඩිය෠පටයක් නිර්මà·à¶«à¶º කිරීමට නොහà·à¶š" #: ../src/guvcview.c:645 msgid "Please report it to http://developer.berlios.de/bugs/?group_id=8179" msgstr "" "කරුණà·à¶šà¶» එය මෙතනට à·€à·à¶»à·Šà¶­à· කරන්න http://developer.berlios.de/bugs/?group_id=8179" #: ../src/img_controls.c:121 msgid "Auto Focus (continuous)" msgstr "ස්වයංක්â€à¶»à·“යව à¶±à·à¶·à·’ගත කරන්න (අඛණ්ඩව)" #: ../src/img_controls.c:122 msgid "set Focus" msgstr "à¶±à·à¶·à·’ගත වීම සකස් කරන්න" #: ../src/image_format.c:35 msgid "Jpeg (jpg)" msgstr "Jpeg (jpg)" #: ../src/image_format.c:41 msgid "Bitmap (Bmp)" msgstr "Bitmap (Bmp)" #: ../src/image_format.c:47 msgid "Portable Network Graphics (Png)" msgstr "à¶…à¶­à·š ගෙන යà·à·„à·à¶šà·’ à¶¢à·à¶½à·’à¶š à¶ à·’à¶­à·Šâ€à¶» (Png)" #: ../src/image_format.c:53 msgid "Raw Image (raw)" msgstr "දළ රූපය (raw)" #. controls menu #: ../src/menubar.c:64 msgid "Settings" msgstr "à·ƒà·à¶šà·ƒà·”ම්" #: ../src/menubar.c:67 msgid "Hardware Defaults" msgstr "ස්වභà·à·€à·’à¶š දෘඩà·à¶‚à¶œ" #: ../src/menubar.c:75 msgid "Camera Button" msgstr "à¶šà·à¶¸à¶»à· බොත්තම" #: ../src/menubar.c:79 msgid "Capture Image" msgstr "රූපය ග්â€à¶»à·„ණය කරගන්න" #: ../src/menubar.c:84 msgid "Capture Video" msgstr "වීඩියà·à·€ ග්â€à¶»à·„ණය කරගන්න" #. video menu #: ../src/menubar.c:144 ../src/video_tab.c:87 msgid "Video" msgstr "වීඩියà·" #: ../src/menubar.c:145 ../src/menubar.c:231 msgid "File" msgstr "ගොනුව" #: ../src/menubar.c:146 ../src/menubar.c:232 msgid "Increment Filename" msgstr "වර්ධක ගොනු à¶±à·à¶¸à¶º" #: ../src/menubar.c:164 msgid "Video Codec" msgstr "වීඩිය෠කොඩෙක්" #: ../src/menubar.c:187 msgid "Video Codec Properties" msgstr "වීඩිය෠කොඩෙක් ගුණà·à¶‚à¶œ" #: ../src/menubar.c:194 msgid "Audio Codec" msgstr "à·à·Šâ€à¶»à·€à·Šâ€à¶º කොඩෙක්" #: ../src/menubar.c:215 msgid "Audio Codec Properties" msgstr "à·à·Šâ€à¶»à·€à·Šâ€à¶º කොඩෙක් ගුණà·à¶‚à¶œ" #. photo menu #: ../src/menubar.c:230 msgid "Photo" msgstr "à¶¡à·à¶ºà·à¶»à·–පය" #: ../src/options.c:752 msgid "Prints version" msgstr "à¶´à·’à¶§à¶´à¶­ මුද්â€à¶»à¶«à¶º කරන්න" #: ../src/options.c:753 msgid "Displays debug information" msgstr "දà·à·‚ මඟහà·à¶»à·“මේ තොරතුරු පෙන්වන්න" #: ../src/options.c:754 msgid "Video Device to use [default: /dev/video0]" msgstr "à¶´à·à·€à·’ච්චිය සඳහ෠වීඩිය෠උපකරණය [ස්වභà·à·€à·’à¶š: /dev/video0]" #: ../src/options.c:755 msgid "Exit after adding UVC extension controls (needs root/sudo)" msgstr "UVC ව්â€à¶ºà·à¶´à·Šà¶­à·’ à¶´à·à¶½à¶š à¶‘à¶šà¶­à·” කිරීමෙන් පසුව පිටවෙන්න (root/sudo à¶…à·€à·à·Šâ€à¶ºà¶ºà·’)" #: ../src/options.c:756 msgid "Don't stream video (image controls only)" msgstr "ගලà·à¶ºà¶± වීඩියà·à·€à¶šà·Š à¶…à·€à·à·Šâ€à¶º à¶±à·à¶­ (රූපය à¶´à·à¶½à¶š පමණි)" #: ../src/options.c:757 msgid "Don't display a GUI" msgstr "GUI à¶‘à¶šà¶šà·Š à¶´à·Šâ€à¶»à¶¯à¶»à·Šà·à¶±à¶º කරන්න à¶‘à¶´à·" #: ../src/options.c:758 msgid "Capture method (1-mmap (default) 2-read)" msgstr "ග්â€à¶»à·„ණය කරගà·à¶±à·“මේ à¶šà·Šâ€à¶»à¶¸à¶º (1-mmap (ස්වභà·à·€à·’à¶š) 2-read)" #: ../src/options.c:759 msgid "Configuration file" msgstr "ආකෘති ගොනුව" #: ../src/options.c:760 msgid "Hardware accelaration (enable(1) | disable(0))" msgstr "දෘඩà·à¶‚à¶œ අධිවේගීකරණය (à·„à·à¶šà·’යà·à·€(1) | නොහà·à¶šà·’යà·à·€(0))" #: ../src/options.c:761 msgid "" "Pixel " "format(mjpg|jpeg|yuyv|yvyu|uyvy|yyuv|yu12|yv12|nv12|nv21|nv16|nv61|y41p|grey|" "y10b|y16 |s501|s505|s508|gbrg|grbg|ba81|rggb|bgr3|rgb3)" msgstr "" "Pixel " "ආකෘතිය(mjpg|jpeg|yuyv|yvyu|uyvy|yyuv|yu12|yv12|nv12|nv21|nv16|nv61|y41p|grey|" "y10b|y16 |s501|s505|s508|gbrg|grbg|ba81|rggb|bgr3|rgb3)" #: ../src/options.c:762 msgid "Frame size, default: 640x480" msgstr "à¶»à·à¶¸à·”වක à¶´à·Šâ€à¶»à¶¸à·à¶«à¶º, ස්වභà·à·€à·’à¶š: 640x480" #: ../src/options.c:763 msgid "Image File name" msgstr "රූපයේ ගොනු à¶±à·à¶¸à¶º" #: ../src/options.c:764 msgid "Image capture interval in seconds" msgstr "රූපය ග්â€à¶»à·„ණය කරගà·à¶±à·“ම à¶…à¶­à¶» à¶šà·à¶½à¶º à¶­à¶­à·Šà¶´à¶» වලින්" #: ../src/options.c:765 msgid "Number of Pictures to capture" msgstr "ග්â€à¶»à·„ණය කරගà·à¶±à·“මට ඇති පින්තූර ගණන" #: ../src/options.c:766 msgid "Video File name (capture from start)" msgstr "වීඩියà·à·€à·š ගොනු à¶±à·à¶¸à¶º (ග්â€à¶»à·„ණය කරගà·à¶±à·“ම ආරම්භයේ සිට)" #: ../src/options.c:767 msgid "Video capture time (in seconds)" msgstr "වීඩියà·à·€à·š ග්â€à¶»à·„ණය කරගà·à¶±à·“මේ à¶šà·à¶½à¶º à¶­à¶­à·Šà¶´à¶» වලින්" #: ../src/options.c:768 msgid "Exits guvcview after closing video" msgstr "වීඩියà·à·€ à·€à·à·ƒà·“මෙන් පසුව guvcview එකෙන් පිටවෙන්න" #: ../src/options.c:769 msgid "Number of initial frames to skip" msgstr "නොසලක෠හà·à¶»à·“මට ඇති ආරම්භක à¶»à·à¶¸à·” ගණන" #: ../src/options.c:770 msgid "Show FPS value (enable(1) | disable (0))" msgstr "FPS අගය පෙන්වන්න (à·„à·à¶šà·’යà·à·€(1) | නොහà·à¶šà·’යà·à·€(0))" #: ../src/options.c:771 msgid "Load Profile at start" msgstr "ආරම්භයේදී ආකෘතිය à¶´à·Šâ€à¶»à·€à·šà·à¶±à¶º කරන්න" #: ../src/options.c:777 msgid "- local options" msgstr "- ස්ථà·à¶±à·“ය විකල්ප" #. gdk_threads_enter(); #: ../src/timers.c:119 msgid "Cap. Image" msgstr "රූපය ග්â€à¶»à·„ණය කරගන්න" #: ../src/timers.c:217 msgid "Guvcview Warning:" msgstr "Guvcview අනතුරු ඇඟවීම:" #: ../src/timers.c:217 msgid "Not enough free space left on disk" msgstr "සෑâ€à·„ෙන තරම් හිස් අවකà·à·à¶ºà¶šà·Š à¶­à·à¶§à·’ය මත ඉතිරි වී නොමà·à¶­" #: ../src/v4l2_controls.c:711 msgid "Left" msgstr "වම" #: ../src/v4l2_controls.c:712 msgid "Right" msgstr "දකුණ" #: ../src/v4l2_controls.c:716 msgid "Down" msgstr "පහලට" #: ../src/v4l2_controls.c:717 msgid "Up" msgstr "ඉහළට" #: ../src/v4l2_controls.c:762 msgid "Off" msgstr "à¶…à¶šà·Šâ€à¶»à·“ය" #: ../src/v4l2_controls.c:762 msgid "On" msgstr "සක්â€à¶»à·“ය" #: ../src/v4l2_controls.c:762 msgid "Blinking" msgstr "à¶šà·Šà·‚à¶«à·’à¶š ආලà·à¶šà¶º" #: ../src/v4l2_controls.c:762 msgid "Auto" msgstr "ස්වයංක්â€à¶»à·“ය" #. turn it into a menu control #: ../src/v4l2_controls.c:813 msgid "8 bit" msgstr "à¶¶à·’à¶§à·Š 8" #: ../src/v4l2_controls.c:813 msgid "12 bit" msgstr "à¶¶à·’à¶§à·Š 12" #: ../src/v4l2_dyna_ctrls.c:96 msgid "Pan (relative)" msgstr "තිරස් ලෙස කරකවන්න (à·ƒà·à¶´à·šà¶šà·Šà·‚à·€)" #: ../src/v4l2_dyna_ctrls.c:109 msgid "Tilt (relative)" msgstr "සිරස් ලෙස කරකවන්න (à·ƒà·à¶´à·šà¶šà·Šà·‚à·€)" #: ../src/v4l2_dyna_ctrls.c:122 msgid "Pan Reset" msgstr "තිරස් ලෙස කරකà·à·€à·“ම à¶±à·à·€à¶­ සකසන්න" #: ../src/v4l2_dyna_ctrls.c:135 msgid "Tilt Reset" msgstr "සිරස් ලෙස කරකà·à·€à·“ම à¶±à·à·€à¶­ සකසන්න" #: ../src/v4l2_dyna_ctrls.c:148 msgid "Focus (absolute)" msgstr "à¶±à·à¶·à·’ගත කරන්න (නිරපේක්ෂව)" #: ../src/v4l2_dyna_ctrls.c:161 msgid "LED1 Mode" msgstr "LED1 à¶šà·Šâ€à¶»à¶¸à¶º" #: ../src/v4l2_dyna_ctrls.c:174 msgid "LED1 Frequency" msgstr "LED1 සංඛ්â€à¶ºà·à¶­à¶º" #: ../src/v4l2_dyna_ctrls.c:187 msgid "Disable video processing" msgstr "වීඩියà·à·€ à·ƒà·à¶šà·ƒà·“මට නොහà·à¶š" #: ../src/v4l2_dyna_ctrls.c:200 msgid "Raw bits per pixel" msgstr "පික්සල් à¶‘à¶šà¶šà·Š සඳහ෠දළ à¶¶à·’à¶§à·Š à¶´à·Šâ€à¶»à¶¸à·à¶«à¶º" #. needed only for language files (not used) #. V4L2 control strings #: ../src/v4l2uvc.c:56 msgid "User Controls" msgstr "පරිà·à·Šâ€à¶»à·“ලක à¶´à·à¶½à¶šà¶ºà¶±à·Š" #: ../src/v4l2uvc.c:57 msgid "Brightness" msgstr "දීප්තිය" #: ../src/v4l2uvc.c:58 msgid "Contrast" msgstr "දීප්ති වෙනස" #: ../src/v4l2uvc.c:59 msgid "Hue" msgstr "à¶´à·à·„à·à¶º" #: ../src/v4l2uvc.c:60 msgid "Saturation" msgstr "පරිපූර්ණබව" #: ../src/v4l2uvc.c:61 msgid "Sharpness" msgstr "තියුණු à¶¶à·€" #: ../src/v4l2uvc.c:62 msgid "Gamma" msgstr "à¶œà·à¶¸à·" #: ../src/v4l2uvc.c:63 msgid "Backlight Compensation" msgstr "පසු ආලà·à¶šà¶± à·„à·à¶±à·’පූරණය" #: ../src/v4l2uvc.c:64 msgid "Power Line Frequency" msgstr "à¶¶à¶½ à·ƒà·à¶´à¶ºà·”ම් සංඛ්â€à¶ºà·à¶­à¶º" #: ../src/v4l2uvc.c:65 msgid "Hue, Automatic" msgstr "à¶´à·à·„à·à¶º, ස්වයංක්â€à¶»à·“යව" #: ../src/v4l2uvc.c:66 msgid "Focus, Auto" msgstr "ස්වයංක්â€à¶»à·“යව à¶±à·à¶·à·’ගත කරන්න" #: ../src/v4l2uvc.c:67 msgid "Manual Mode" msgstr "අත්පොත් à¶šà·Šâ€à¶»à¶¸à¶º" #: ../src/v4l2uvc.c:68 msgid "Auto Mode" msgstr "ස්වයංක්â€à¶»à·“ය à¶šà·Šâ€à¶»à¶¸à¶º" #: ../src/v4l2uvc.c:69 msgid "Shutter Priority Mode" msgstr "සංවෘත à¶´à·Šâ€à¶»à¶¸à·”ඛත෠ක්â€à¶»à¶¸à¶º" #: ../src/v4l2uvc.c:70 msgid "Aperture Priority Mode" msgstr "විවෘත à¶´à·Šâ€à¶»à¶¸à·”ඛත෠ක්â€à¶»à¶¸à¶º" #: ../src/v4l2uvc.c:71 msgid "Black Level" msgstr "à¶šà·…à·” à¶´à·à¶§ මට්ටම" #: ../src/v4l2uvc.c:72 msgid "White Balance, Automatic" msgstr "සුදු à¶´à·à¶§ සමබරතà·à·€à¶º, ස්වයංක්â€à¶»à·“ය" #: ../src/v4l2uvc.c:73 msgid "Do White Balance" msgstr "සුදු සමබර කරන්න" #: ../src/v4l2uvc.c:74 msgid "Red Balance" msgstr "රතු සමබරතà·à·€à¶º" #: ../src/v4l2uvc.c:75 msgid "Blue Balance" msgstr "නිල් සමබරතà·à·€à¶º" #: ../src/v4l2uvc.c:76 msgid "Exposure" msgstr "à¶…à¶±à·à·€à¶»à·Šà¶«à¶º" #: ../src/v4l2uvc.c:77 msgid "Gain, Automatic" msgstr "ලබà·à¶œà¶±à·Šà¶±, ස්වයංක්â€à¶»à·“යව" #: ../src/v4l2uvc.c:78 msgid "Gain" msgstr "ලබà·à¶œà¶±à·Šà¶±" #: ../src/v4l2uvc.c:79 msgid "Horizontal Flip" msgstr "තිරස් à·„à·à¶»à·€à·”ම" #: ../src/v4l2uvc.c:80 msgid "Vertical Flip" msgstr "සිරස් à·„à·à¶»à·€à·”ම" #: ../src/v4l2uvc.c:81 msgid "Horizontal Center" msgstr "තිරස් මධ්â€à¶ºà¶º" #: ../src/v4l2uvc.c:82 msgid "Vertical Center" msgstr "සිරස් මධ්â€à¶ºà¶º" #: ../src/v4l2uvc.c:83 msgid "Chroma AGC" msgstr "AGC වර්ණතීවâ€à·Šâ€à¶»à¶­à·à·€" #: ../src/v4l2uvc.c:84 msgid "Color Killer" msgstr "වර්ණ à¶±à·à¶­à·’කරන්නà·" #: ../src/v4l2uvc.c:85 msgid "Color Effects" msgstr "වර්ණ à·ƒà·à¶»à·ƒà·’ලි" #. CAMERA CLASS control strings #: ../src/v4l2uvc.c:88 msgid "Camera Controls" msgstr "à¶šà·à¶¸à¶»à· à¶´à·à¶½à¶šà¶ºà¶±à·Š" #: ../src/v4l2uvc.c:89 msgid "Auto Exposure" msgstr "ස්වයංක්â€à¶»à·“ය à¶…à¶±à·à·€à¶»à¶«à¶º" #: ../src/v4l2uvc.c:90 msgid "Exposure Time, Absolute" msgstr "නිරපේක්ෂ à¶šà·à¶½à¶º à¶…à¶±à·à·€à¶»à¶« කරන්න" #: ../src/v4l2uvc.c:91 msgid "Exposure, Dynamic Framerate" msgstr "වෙනස්වන à¶»à·à¶¸à·” à·à·Šâ€à¶»à·“à¶â€à·Šâ€à¶»à¶­à·à·€ à¶…à¶±à·à·€à¶»à¶« කරන්න" #: ../src/v4l2uvc.c:92 msgid "Pan, Relative" msgstr "තිරස් ලෙස කරකවන්න, à·ƒà·à¶´à·šà¶šà·Šà·‚à·€" #: ../src/v4l2uvc.c:93 msgid "Tilt, Relative" msgstr "සිරස් ලෙස කරකවන්න, à·ƒà·à¶´à·šà¶šà·Šà·‚à·€" #: ../src/v4l2uvc.c:94 msgid "Pan, Reset" msgstr "තිරස් ලෙස කරකà·à·€à·“ම à¶±à·à·€à¶­ අරඹන්න" #: ../src/v4l2uvc.c:95 msgid "Tilt, Reset" msgstr "සිරස් ලෙස කරකà·à·€à·“ම à¶±à·à·€à¶­ අරඹන්න" #: ../src/v4l2uvc.c:96 msgid "Pan, Absolute" msgstr "තිරස් ලෙස කරකවන්න, නිරපේක්ෂ" #: ../src/v4l2uvc.c:98 msgid "Focus, Absolute" msgstr "නිරපේක්ෂව à¶±à·à¶·à·’ගත කරන්න" #: ../src/v4l2uvc.c:99 msgid "Focus, Relative" msgstr "à·ƒà·à¶´à·šà¶šà·Šà·‚à·€ à¶±à·à¶·à·’ගත කරන්න" #: ../src/v4l2uvc.c:100 msgid "Focus, Automatic" msgstr "ස්වයංක්â€à¶»à·“යව à¶±à·à¶·à·’ගත කරන්න" #: ../src/v4l2uvc.c:101 msgid "Zoom, Absolute" msgstr "සමීප දුරස්ථ රූප à¶œà·à¶±à·“ම සඳහ෠කà·à¶¸à¶»à·à·€ හසුරුවන්න, නිරපේක්ෂව" #: ../src/v4l2uvc.c:102 msgid "Zoom, Relative" msgstr "සමීප දුරස්ථ රූප à¶œà·à¶±à·“ම සඳහ෠කà·à¶¸à¶»à·à·€ හසුරුවන්න, à·ƒà·à¶´à·šà¶šà·Šà·‚à·€" #: ../src/v4l2uvc.c:103 msgid "Zoom, Continuous" msgstr "සමීප දුරස්ථ රූප à¶œà·à¶±à·“ම සඳහ෠කà·à¶¸à¶»à·à·€ හසුරුවන්න, අඛණ්ඩව" #: ../src/v4l2uvc.c:104 msgid "Privacy" msgstr "පුද්ගලිකත්වය" #. UVC specific control strings #: ../src/v4l2uvc.c:107 msgid "Exposure, Auto" msgstr "ස්වයංක්â€à¶»à·“යව à¶…à¶±à·à·€à¶»à¶«à¶º කරන්න" #: ../src/v4l2uvc.c:108 msgid "Exposure, Auto Priority" msgstr "ස්වයංක්â€à¶»à·“ය à¶´à·Šâ€à¶»à¶¸à·”ඛතà·à·€ à¶…à¶±à·à·€à¶»à¶«à¶º කරන්න" #: ../src/v4l2uvc.c:109 msgid "Exposure (Absolute)" msgstr "à¶…à¶±à·à·€à¶»à¶«à¶º කරන්න (නිරපේක්ෂව)" #: ../src/v4l2uvc.c:110 msgid "White Balance Temperature, Auto" msgstr "සුදු à¶´à·à·„à·à¶º à·ƒà·à·ƒà¶³à·“මේ උෂ්ණත්වය, ස්වයංක්â€à¶»à·“යව" #: ../src/v4l2uvc.c:111 msgid "White Balance Temperature" msgstr "සුදු à¶´à·à·„à·à¶º à·ƒà·à·ƒà¶³à·“මේ උෂ්ණත්වය" #: ../src/v4l2uvc.c:112 msgid "White Balance Component, Auto" msgstr "සුදු à¶´à·à·„à·à¶º à·ƒà·à·ƒà¶³à·“මේ à¶‹à¶´à·à¶‚ගය, ස්වයංක්â€à¶»à·“යව" #: ../src/v4l2uvc.c:113 msgid "White Balance Blue Component" msgstr "සුදු à¶´à·à·„à·à¶º à·ƒà·à·ƒà¶³à·“මේ නිල් à¶´à·à·„à·à¶ºà·š à¶‹à¶´à·à¶‚ගය" #: ../src/v4l2uvc.c:114 msgid "White Balance Red Component" msgstr "සුදු à¶´à·à·„à·à¶º à·ƒà·à·ƒà¶³à·“මේ රතු à¶´à·à·„à·à¶ºà·š à¶‹à¶´à·à¶‚ගය" #. libwebcam specific control strings #: ../src/v4l2uvc.c:117 msgid "Focus" msgstr "à¶±à·à¶·à·à¶œà¶­ කරන්න" #: ../src/v4l2uvc.c:118 msgid "Focus (Absolute)" msgstr "à¶±à·à¶·à·à¶œà¶­ කරන්න (නිරපේක්ෂව)" #: ../src/vcodecs.c:63 msgid "MJPG - compressed" msgstr "MJPG - සම්පීඩන කරන ලද" #: ../src/vcodecs.c:99 msgid "YUY2 - uncomp YUV" msgstr "YUY2 - uncomp YUV" #: ../src/vcodecs.c:135 msgid "RGB - uncomp BMP" msgstr "RGB - uncomp BMP" #: ../src/vcodecs.c:171 msgid "MPEG video 1" msgstr "MPEG වීඩිය෠1" #: ../src/vcodecs.c:207 msgid "FLV1 - flash video 1" msgstr "FLV1 - ෆ්ලෑෂ් වීඩිය෠1" #: ../src/vcodecs.c:243 msgid "WMV1 - win. med. video 7" msgstr "WMV1 - win. med. වීඩිය෠7" #: ../src/vcodecs.c:279 msgid "MPG2 - MPG2 format" msgstr "MPG2 - MPG2 ආකෘතිය" #: ../src/vcodecs.c:315 msgid "MS MP4 V3" msgstr "MS MP4 V3" #: ../src/vcodecs.c:351 msgid "MPEG4-ASP" msgstr "MPEG4-ASP" #: ../src/vcodecs.c:387 msgid "MPEG4-AVC (H264)" msgstr "MPEG4-AVC (H264)" #: ../src/vcodecs.c:427 msgid "VP8 (VP8)" msgstr "VP8 (VP8)" #: ../src/vcodecs.c:463 msgid "Theora (ogg theora)" msgstr "Theora (ogg theora)" #: ../src/video_format.c:43 msgid "AVI - avi format" msgstr "AVI - avi ආකෘතිය" #: ../src/video_format.c:52 msgid "MKV - Matroska format" msgstr "MKV - Matroska ආකෘතිය" #: ../src/video_format.c:61 msgid "WEBM - format" msgstr "WEBM - ආකෘතිය" #: ../src/video_tab.c:208 msgid "Frame Rate:" msgstr "à¶»à·à¶¸à·” à·à·“à¶à·Šâ€à¶»à¶­à·à·€à¶º:" #: ../src/video_tab.c:215 msgid " Show" msgstr " පෙන්වන්න" #: ../src/video_tab.c:237 msgid "Resolution:" msgstr "තීරණය:" #: ../src/video_tab.c:263 msgid "Camera Output:" msgstr "à¶šà·à¶¸à¶»à· නිමà·à·€à·”ම:" #: ../src/video_tab.c:285 msgid "Apply" msgstr "යොදන්න" #: ../src/video_tab.c:292 msgid "Quality:" msgstr "ගුණà·à¶­à·Šà¶¸à¶šà¶¶à·€:" #: ../src/video_tab.c:302 msgid "---- Video Filters ----" msgstr "---- වීඩිය෠පෙරනයන්----" #. Mirror #: ../src/video_tab.c:321 msgid " Mirror" msgstr " à¶šà·à¶©à¶´à¶­" #. Upturn #: ../src/video_tab.c:332 msgid " Invert" msgstr " යටිකුරු කරන්න" #. Negate #: ../src/video_tab.c:343 msgid " Negative" msgstr " à¶´à·Šâ€à¶»à¶­à·’à¶šà·Šà·‚à·šà¶´ කරන්න" #. Mono #: ../src/video_tab.c:354 msgid " Mono" msgstr " à¶‘à¶šà¶šà·Š" #. Pieces #: ../src/video_tab.c:366 msgid " Pieces" msgstr " කොටස්" #. Particles #: ../src/video_tab.c:378 msgid " Particles" msgstr " ඉත෠කුඩ෠කොටස්" guvcview-src-1.7.1/po/hr.po0000664000175000017500000004747412173235416014603 0ustar paulopaulo# Croatian translation for guvcview # Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 # This file is distributed under the same license as the guvcview package. # FIRST AUTHOR , 2010. # msgid "" msgstr "" "Project-Id-Version: guvcview\n" "Report-Msgid-Bugs-To: pj.assis@gmail.com\n" "POT-Creation-Date: 2013-07-16 12:53+0000\n" "PO-Revision-Date: 2013-02-25 05:34+0000\n" "Last-Translator: Paulo Assis \n" "Language-Team: Croatian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2013-07-22 13:32+0000\n" "X-Generator: Launchpad (build 16696)\n" "Language: hr\n" #: ../data/guvcview.desktop.in.in.h:1 msgid "guvcview" msgstr "" #: ../data/guvcview.desktop.in.in.h:2 msgid "GTK UVC video viewer" msgstr "" #: ../data/guvcview.desktop.in.in.h:3 msgid "A video viewer and capturer for the linux uvc driver" msgstr "" #: ../src/acodecs.c:59 msgid "PCM - uncompressed (16 bit)" msgstr "" #: ../src/acodecs.c:76 msgid "MPEG2 - (lavc)" msgstr "" #: ../src/acodecs.c:93 msgid "MP3 - (lavc)" msgstr "" #: ../src/acodecs.c:110 msgid "Dolby AC3 - (lavc)" msgstr "" #: ../src/acodecs.c:127 msgid "ACC Low - (faac)" msgstr "" #: ../src/acodecs.c:144 msgid "Vorbis" msgstr "" #: ../src/audio_tab.c:80 msgid "Audio" msgstr "Audio" #: ../src/audio_tab.c:98 msgid " Sound" msgstr " Zvuk" #. VU meter on the image (OSD) #: ../src/audio_tab.c:109 msgid " Show VU meter" msgstr "" #: ../src/audio_tab.c:121 msgid "Audio API:" msgstr "" #: ../src/audio_tab.c:132 msgid "PORTAUDIO" msgstr "" #: ../src/audio_tab.c:133 msgid "PULSEAUDIO" msgstr "" #: ../src/audio_tab.c:149 ../src/audio_tab.c:172 msgid "Input Device:" msgstr "Ulazni ureÄ‘aj:" #: ../src/audio_tab.c:182 ../src/audio_tab.c:214 msgid "Dev. Default" msgstr "Zadane Postavke UreÄ‘aja" #: ../src/audio_tab.c:204 msgid "Sample Rate:" msgstr "" #: ../src/audio_tab.c:215 msgid "1 - mono" msgstr "1 - mono" #: ../src/audio_tab.c:216 msgid "2 - stereo" msgstr "2 - stereo" #: ../src/audio_tab.c:251 msgid "Channels:" msgstr "Kanali:" #: ../src/audio_tab.c:302 msgid "---- Audio Effects ----" msgstr "---- Audio Efekti ----" #. Echo #: ../src/audio_tab.c:321 msgid " Echo" msgstr " Jeka" #. FUZZ #: ../src/audio_tab.c:332 msgid " Fuzz" msgstr " Mutno" #. Reverb #: ../src/audio_tab.c:344 msgid " Reverb" msgstr " Odjek" #. WahWah #: ../src/audio_tab.c:356 msgid " WahWah" msgstr "" #. Ducky #: ../src/audio_tab.c:368 msgid " Ducky" msgstr " Patka" #: ../src/callbacks.c:108 msgid "Error" msgstr "GrjeÅ¡ka" #: ../src/callbacks.c:132 msgid "" "\n" "You have more than one video device installed.\n" "Do you want to try another one ?\n" msgstr "" "\n" "Imate viÅ¡e ureÄ‘aja instalirano.\n" "Želite li isprobati ostale?\n" #. Devices #: ../src/callbacks.c:139 ../src/video_tab.c:103 msgid "Device:" msgstr "UreÄ‘aj:" #: ../src/callbacks.c:271 msgid "Save File" msgstr "Spremi Datoteku" #: ../src/callbacks.c:283 msgid "File Format:" msgstr "" #: ../src/callbacks.c:454 msgid "codec values" msgstr "" #: ../src/callbacks.c:465 msgid "" " encoder fps: \n" " (0 - use fps combobox value)" msgstr "" #: ../src/callbacks.c:478 msgid " monotonic pts" msgstr "" #. bit rate #: ../src/callbacks.c:485 ../src/callbacks.c:808 msgid "bit rate: " msgstr "" #: ../src/callbacks.c:498 msgid "qmax: " msgstr "" #: ../src/callbacks.c:511 msgid "qmin: " msgstr "" #: ../src/callbacks.c:524 msgid "max. qdiff: " msgstr "" #: ../src/callbacks.c:537 msgid "dia size: " msgstr "" #: ../src/callbacks.c:550 msgid "pre dia size: " msgstr "" #: ../src/callbacks.c:563 msgid "pre me: " msgstr "" #: ../src/callbacks.c:576 msgid "pre cmp: " msgstr "" #: ../src/callbacks.c:589 msgid "cmp: " msgstr "" #: ../src/callbacks.c:602 msgid "sub cmp: " msgstr "" #: ../src/callbacks.c:615 msgid "last predictor count: " msgstr "" #: ../src/callbacks.c:628 msgid "gop size: " msgstr "" #: ../src/callbacks.c:641 msgid "qcompress: " msgstr "" #: ../src/callbacks.c:654 msgid "qblur: " msgstr "" #: ../src/callbacks.c:667 msgid "subq: " msgstr "" #: ../src/callbacks.c:680 msgid "framerefs: " msgstr "" #: ../src/callbacks.c:693 msgid "me method: " msgstr "" #: ../src/callbacks.c:706 msgid "mb decision: " msgstr "" #: ../src/callbacks.c:719 msgid "max B frames: " msgstr "" #: ../src/callbacks.c:732 msgid "num threads: " msgstr "" #: ../src/callbacks.c:795 msgid "audio codec values" msgstr "vrijednosti audio codeca" #. sample format #: ../src/callbacks.c:822 msgid "sample format: " msgstr "" #: ../src/callbacks.c:1250 msgid "start new" msgstr "pokreni novo" #: ../src/callbacks.c:1253 msgid "restart" msgstr "ponovo pokreni" #: ../src/callbacks.c:1255 msgid "new" msgstr "novo" #: ../src/callbacks.c:1257 msgid "cancel" msgstr "odustani" #: ../src/callbacks.c:1262 msgid "" "launch new process or restart?.\n" "\n" msgstr "" "upalite novi proces ili ponovno pokrenite?.\n" "\n" #: ../src/callbacks.c:1716 ../src/guvcview.c:537 msgid "Cap. Image (I)" msgstr "Snimi Sliku (I)" #. disable image controls #: ../src/callbacks.c:1727 ../src/guvcview.c:658 ../src/timers.c:101 msgid "capturing photo to" msgstr "" #: ../src/callbacks.c:1786 ../src/guvcview.c:547 msgid "Cap. Video (V)" msgstr "Snimi Video (V)" #: ../src/callbacks.c:1812 ../src/guvcview.c:708 msgid "capturing video to" msgstr "" #. vid capture enabled from start #: ../src/callbacks.c:1845 ../src/guvcview.c:542 msgid "Stop Video (V)" msgstr "Zaustavi Video (V)" #: ../src/callbacks.c:1901 ../src/menubar.c:66 msgid "Save Profile" msgstr "" #: ../src/callbacks.c:1914 ../src/menubar.c:65 msgid "Load Profile" msgstr "" #: ../src/create_video.c:1016 ../src/guvcview.c:700 msgid "Cap. Video" msgstr "Snimi Video" #: ../src/guvcview.c:279 msgid "Guvcview Video Capture" msgstr "Guvcview Snimanje Videa" #: ../src/guvcview.c:291 msgid "GUVCViewer Controls" msgstr "GUVCViewer Kontrole" #. can't open device #: ../src/guvcview.c:336 msgid "" "Guvcview error:\n" "\n" "Unable to open device" msgstr "" "Guvcview grjeÅ¡ka:\n" "\n" "Nije moguÄe pokrenuti ureÄ‘aj" #: ../src/guvcview.c:337 msgid "" "Please make sure the camera is connected\n" "and that the correct driver is installed." msgstr "" "Molim provjerite dali je kamera spojena\n" "i dali je instaliran ispravan driver." #. uvc extension controls OK, give warning and shutdown (called with --add_ctrls) #: ../src/guvcview.c:342 msgid "" "Guvcview:\n" "\n" "UVC Extension controls" msgstr "" "Guvcview:\n" "\n" "UVC kontrole Ekstenzije" #: ../src/guvcview.c:343 msgid "Extension controls were added to the UVC driver" msgstr "Kontrole Ekstenzije su dodane UVC driveru" #. uvc extension controls error - EACCES (needs root user) #: ../src/guvcview.c:350 msgid "" "Guvcview error:\n" "\n" "UVC Extension controls" msgstr "" "Guvcview:\n" "\n" "UVC kontrole Ekstenzije" #: ../src/guvcview.c:351 msgid "" "An error occurred while adding extension\n" "controls to the UVC driver\n" "Make sure you run guvcview as root (or sudo)." msgstr "" "Dogodila se grjeÅ¡ka prilikom dodavanja kontrola\n" "ekstenzije UVC driveru\n" "Pokrenite guvcview kao root (ili sudo)." #: ../src/guvcview.c:377 ../src/guvcview.c:455 msgid "" "Guvcview error:\n" "\n" "Can't set a valid video stream for guvcview" msgstr "" "Guvcview grjeÅ¡ka:\n" "\n" "Nije moguÄe postaviti vrijedeći video stream za guvcview" #: ../src/guvcview.c:378 ../src/guvcview.c:456 msgid "" "Make sure your device driver is v4l2 compliant\n" "and that it is properly installed." msgstr "" "Provjerite dali vaÅ¡ video driver ima podrÅ¡ku za v4l2\n" "i pogledajte dali je ispravno instaliran." #: ../src/guvcview.c:400 ../src/guvcview.c:422 msgid "" "Guvcview error:\n" "\n" "Unable to start with minimum setup" msgstr "" "Guvcview error:\n" "\n" "Nije moguÄe pokretanje s minimalnim postavkama" #: ../src/guvcview.c:401 ../src/guvcview.c:423 msgid "Please reconnect your camera." msgstr "Molim ponovno spajanje kamere." #: ../src/guvcview.c:430 msgid "" "Guvcview error:\n" "\n" "Couldn't query device capabilities" msgstr "" "Guvcview error:\n" "\n" "Sposobnost ureÄ‘aja nije Äitljiva" #: ../src/guvcview.c:431 msgid "Make sure the device driver supports v4l2." msgstr "Provjerite da vaÅ¡ driver ima podrÅ¡ku za v4l2." #: ../src/guvcview.c:435 msgid "" "Guvcview error:\n" "\n" "Read method error" msgstr "" #: ../src/guvcview.c:436 msgid "Please try mmap instead (--capture_method=1)." msgstr "" #: ../src/guvcview.c:444 msgid "" "Guvcview error:\n" "\n" "Unable to allocate Buffers" msgstr "" #: ../src/guvcview.c:445 msgid "Please try restarting your system." msgstr "Probajte ponovno pokrenuti vaÅ¡ sustav." #: ../src/guvcview.c:490 msgid "Image Controls" msgstr "Kontrole Slike" #. image auto capture #: ../src/guvcview.c:533 msgid "Stop Auto (I)" msgstr "Zaustavi Automatsko (I)" #: ../src/guvcview.c:644 msgid "" "Guvcview error:\n" "\n" "Unable to create Video Thread" msgstr "" "Guvcview grjeÅ¡ka:\n" "\n" "Nije moguÄe pokrenuti ureÄ‘aj" #: ../src/guvcview.c:645 msgid "Please report it to http://developer.berlios.de/bugs/?group_id=8179" msgstr "Molimo prijavite na http://developer.berlios.de/bugs/?group_id=8179" #: ../src/img_controls.c:121 msgid "Auto Focus (continuous)" msgstr "Automatski Focus (neprekidno)" #: ../src/img_controls.c:122 msgid "set Focus" msgstr "postavi fokusiranje" #: ../src/image_format.c:35 msgid "Jpeg (jpg)" msgstr "" #: ../src/image_format.c:41 msgid "Bitmap (Bmp)" msgstr "" #: ../src/image_format.c:47 msgid "Portable Network Graphics (Png)" msgstr "" #: ../src/image_format.c:53 msgid "Raw Image (raw)" msgstr "" #. controls menu #: ../src/menubar.c:64 msgid "Settings" msgstr "" #: ../src/menubar.c:67 msgid "Hardware Defaults" msgstr "" #: ../src/menubar.c:75 msgid "Camera Button" msgstr "" #: ../src/menubar.c:79 msgid "Capture Image" msgstr "" #: ../src/menubar.c:84 msgid "Capture Video" msgstr "" #. video menu #: ../src/menubar.c:144 ../src/video_tab.c:87 msgid "Video" msgstr "" #: ../src/menubar.c:145 ../src/menubar.c:231 msgid "File" msgstr "" #: ../src/menubar.c:146 ../src/menubar.c:232 msgid "Increment Filename" msgstr "" #: ../src/menubar.c:164 msgid "Video Codec" msgstr "" #: ../src/menubar.c:187 msgid "Video Codec Properties" msgstr "" #: ../src/menubar.c:194 msgid "Audio Codec" msgstr "" #: ../src/menubar.c:215 msgid "Audio Codec Properties" msgstr "" #. photo menu #: ../src/menubar.c:230 msgid "Photo" msgstr "" #: ../src/options.c:752 msgid "Prints version" msgstr "Isprintaj verziju" #: ../src/options.c:753 msgid "Displays debug information" msgstr "" #: ../src/options.c:754 msgid "Video Device to use [default: /dev/video0]" msgstr "Video ureÄ‘aj rabljen [zadani: /dev/video0]" #: ../src/options.c:755 msgid "Exit after adding UVC extension controls (needs root/sudo)" msgstr "Izlaz nakon dodavanja UVC ekstenzivnih kontrola (potreban root/sudo)" #: ../src/options.c:756 msgid "Don't stream video (image controls only)" msgstr "" #: ../src/options.c:757 msgid "Don't display a GUI" msgstr "" #: ../src/options.c:758 msgid "Capture method (1-mmap (default) 2-read)" msgstr "" #: ../src/options.c:759 msgid "Configuration file" msgstr "Datoteka Postavki" #: ../src/options.c:760 msgid "Hardware accelaration (enable(1) | disable(0))" msgstr "Hardversko ubrzanje (omoguÄi(1) | onemoguÄi(0))" #: ../src/options.c:761 msgid "" "Pixel " "format(mjpg|jpeg|yuyv|yvyu|uyvy|yyuv|yu12|yv12|nv12|nv21|nv16|nv61|y41p|grey|" "y10b|y16 |s501|s505|s508|gbrg|grbg|ba81|rggb|bgr3|rgb3)" msgstr "" #: ../src/options.c:762 msgid "Frame size, default: 640x480" msgstr "VeliÄina slike, zadana: 640x480" #: ../src/options.c:763 msgid "Image File name" msgstr "Ime Slikovne Datoteke" #: ../src/options.c:764 msgid "Image capture interval in seconds" msgstr "Interval slikanja u sekundama" #: ../src/options.c:765 msgid "Number of Pictures to capture" msgstr "Broj Slika za snimiti" #: ../src/options.c:766 msgid "Video File name (capture from start)" msgstr "Ime Video Datoteke (snimka od poÄetka)" #: ../src/options.c:767 msgid "Video capture time (in seconds)" msgstr "Vrijeme snimanja videa (u sekundama)" #: ../src/options.c:768 msgid "Exits guvcview after closing video" msgstr "Izlaz iz guvcviewa nakon zatvaranja videa" #: ../src/options.c:769 msgid "Number of initial frames to skip" msgstr "Broj preskoÄenih poÄetnih slika" #: ../src/options.c:770 msgid "Show FPS value (enable(1) | disable (0))" msgstr "Prikaz FPS broja (omoguÄi(1) | onemoguÄi (0))" #: ../src/options.c:771 msgid "Load Profile at start" msgstr "UÄitaj Profil pri pokretanju" #: ../src/options.c:777 msgid "- local options" msgstr "- lokalne opcije" #. gdk_threads_enter(); #: ../src/timers.c:119 msgid "Cap. Image" msgstr "Snimi Sliku" #: ../src/timers.c:217 msgid "Guvcview Warning:" msgstr "Guvcview Upozorenje" #: ../src/timers.c:217 msgid "Not enough free space left on disk" msgstr "Nema dovoljno slobodnog prostora na disku" #: ../src/v4l2_controls.c:711 msgid "Left" msgstr "Lijevo" #: ../src/v4l2_controls.c:712 msgid "Right" msgstr "Desno:" #: ../src/v4l2_controls.c:716 msgid "Down" msgstr "Dolje" #: ../src/v4l2_controls.c:717 msgid "Up" msgstr "Gore" #: ../src/v4l2_controls.c:762 msgid "Off" msgstr "" #: ../src/v4l2_controls.c:762 msgid "On" msgstr "" #: ../src/v4l2_controls.c:762 msgid "Blinking" msgstr "" #: ../src/v4l2_controls.c:762 msgid "Auto" msgstr "" #. turn it into a menu control #: ../src/v4l2_controls.c:813 msgid "8 bit" msgstr "" #: ../src/v4l2_controls.c:813 msgid "12 bit" msgstr "" #: ../src/v4l2_dyna_ctrls.c:96 msgid "Pan (relative)" msgstr "" #: ../src/v4l2_dyna_ctrls.c:109 msgid "Tilt (relative)" msgstr "" #: ../src/v4l2_dyna_ctrls.c:122 msgid "Pan Reset" msgstr "" #: ../src/v4l2_dyna_ctrls.c:135 msgid "Tilt Reset" msgstr "" #: ../src/v4l2_dyna_ctrls.c:148 msgid "Focus (absolute)" msgstr "" #: ../src/v4l2_dyna_ctrls.c:161 msgid "LED1 Mode" msgstr "" #: ../src/v4l2_dyna_ctrls.c:174 msgid "LED1 Frequency" msgstr "" #: ../src/v4l2_dyna_ctrls.c:187 msgid "Disable video processing" msgstr "" #: ../src/v4l2_dyna_ctrls.c:200 msgid "Raw bits per pixel" msgstr "" #. needed only for language files (not used) #. V4L2 control strings #: ../src/v4l2uvc.c:56 msgid "User Controls" msgstr "KorisniÄke Kontrole" #: ../src/v4l2uvc.c:57 msgid "Brightness" msgstr "Osvjetljenje" #: ../src/v4l2uvc.c:58 msgid "Contrast" msgstr "Kontrast" #: ../src/v4l2uvc.c:59 msgid "Hue" msgstr "Nijansa" #: ../src/v4l2uvc.c:60 msgid "Saturation" msgstr "Zasićenje" #: ../src/v4l2uvc.c:61 msgid "Sharpness" msgstr "OÅ¡trina" #: ../src/v4l2uvc.c:62 msgid "Gamma" msgstr "Gama" #: ../src/v4l2uvc.c:63 msgid "Backlight Compensation" msgstr "Ispravke pozadinskog osvjetljenja" #: ../src/v4l2uvc.c:64 msgid "Power Line Frequency" msgstr "" #: ../src/v4l2uvc.c:65 msgid "Hue, Automatic" msgstr "" #: ../src/v4l2uvc.c:66 msgid "Focus, Auto" msgstr "Fokusiranje, Automatsko" #: ../src/v4l2uvc.c:67 msgid "Manual Mode" msgstr "RuÄni NaÄin" #: ../src/v4l2uvc.c:68 msgid "Auto Mode" msgstr "Automatski NaÄin" #: ../src/v4l2uvc.c:69 msgid "Shutter Priority Mode" msgstr "" #: ../src/v4l2uvc.c:70 msgid "Aperture Priority Mode" msgstr "" #: ../src/v4l2uvc.c:71 msgid "Black Level" msgstr "Razina Crne boje" #: ../src/v4l2uvc.c:72 msgid "White Balance, Automatic" msgstr "Ravnoteža Bijele, Automatski" #: ../src/v4l2uvc.c:73 msgid "Do White Balance" msgstr "Uredi Ravnotežu Bijele" #: ../src/v4l2uvc.c:74 msgid "Red Balance" msgstr "Ravnoteža Crvene" #: ../src/v4l2uvc.c:75 msgid "Blue Balance" msgstr "Ravnoteža Plave" #: ../src/v4l2uvc.c:76 msgid "Exposure" msgstr "Izloženost" #: ../src/v4l2uvc.c:77 msgid "Gain, Automatic" msgstr "" #: ../src/v4l2uvc.c:78 msgid "Gain" msgstr "Dobit" #: ../src/v4l2uvc.c:79 msgid "Horizontal Flip" msgstr "Vodoravno Okretanje" #: ../src/v4l2uvc.c:80 msgid "Vertical Flip" msgstr "Okomito Okretanje" #: ../src/v4l2uvc.c:81 msgid "Horizontal Center" msgstr "Vodoravno Centriraj" #: ../src/v4l2uvc.c:82 msgid "Vertical Center" msgstr "Okomito Centriraj" #: ../src/v4l2uvc.c:83 msgid "Chroma AGC" msgstr "" #: ../src/v4l2uvc.c:84 msgid "Color Killer" msgstr "" #: ../src/v4l2uvc.c:85 msgid "Color Effects" msgstr "Efekti Boje" #. CAMERA CLASS control strings #: ../src/v4l2uvc.c:88 msgid "Camera Controls" msgstr "Kontrole Kamere" #: ../src/v4l2uvc.c:89 msgid "Auto Exposure" msgstr "Automatska Izloženost" #: ../src/v4l2uvc.c:90 msgid "Exposure Time, Absolute" msgstr "Vrijeme Izloženosti, Apsolutno" #: ../src/v4l2uvc.c:91 msgid "Exposure, Dynamic Framerate" msgstr "Izloženost, Broj Slika" #: ../src/v4l2uvc.c:92 msgid "Pan, Relative" msgstr "" #: ../src/v4l2uvc.c:93 msgid "Tilt, Relative" msgstr "" #: ../src/v4l2uvc.c:94 msgid "Pan, Reset" msgstr "" #: ../src/v4l2uvc.c:95 msgid "Tilt, Reset" msgstr "" #: ../src/v4l2uvc.c:96 msgid "Pan, Absolute" msgstr "" #: ../src/v4l2uvc.c:98 msgid "Focus, Absolute" msgstr "Fokusiranje, Apsolutno" #: ../src/v4l2uvc.c:99 msgid "Focus, Relative" msgstr "Fokusiranje, Relativno" #: ../src/v4l2uvc.c:100 msgid "Focus, Automatic" msgstr "Fokusiranje, Automatsko" #: ../src/v4l2uvc.c:101 msgid "Zoom, Absolute" msgstr "Približavanje, Apsolutno" #: ../src/v4l2uvc.c:102 msgid "Zoom, Relative" msgstr "Približavanje, Relativno" #: ../src/v4l2uvc.c:103 msgid "Zoom, Continuous" msgstr "Približavanje, Neprestano" #: ../src/v4l2uvc.c:104 msgid "Privacy" msgstr "Privatnost" #. UVC specific control strings #: ../src/v4l2uvc.c:107 msgid "Exposure, Auto" msgstr "Izloženost, Automatsko" #: ../src/v4l2uvc.c:108 msgid "Exposure, Auto Priority" msgstr "" #: ../src/v4l2uvc.c:109 msgid "Exposure (Absolute)" msgstr "Izloženost (Apsolutna)" #: ../src/v4l2uvc.c:110 msgid "White Balance Temperature, Auto" msgstr "" #: ../src/v4l2uvc.c:111 msgid "White Balance Temperature" msgstr "" #: ../src/v4l2uvc.c:112 msgid "White Balance Component, Auto" msgstr "" #: ../src/v4l2uvc.c:113 msgid "White Balance Blue Component" msgstr "" #: ../src/v4l2uvc.c:114 msgid "White Balance Red Component" msgstr "" #. libwebcam specific control strings #: ../src/v4l2uvc.c:117 msgid "Focus" msgstr "Fokusiranje" #: ../src/v4l2uvc.c:118 msgid "Focus (Absolute)" msgstr "" #: ../src/vcodecs.c:63 msgid "MJPG - compressed" msgstr "" #: ../src/vcodecs.c:99 msgid "YUY2 - uncomp YUV" msgstr "" #: ../src/vcodecs.c:135 msgid "RGB - uncomp BMP" msgstr "" #: ../src/vcodecs.c:171 msgid "MPEG video 1" msgstr "MPEG video 1" #: ../src/vcodecs.c:207 msgid "FLV1 - flash video 1" msgstr "FLV1 - flash video 1" #: ../src/vcodecs.c:243 msgid "WMV1 - win. med. video 7" msgstr "WMV1 - win. med. video 7" #: ../src/vcodecs.c:279 msgid "MPG2 - MPG2 format" msgstr "MPG2 - MPG2 format" #: ../src/vcodecs.c:315 msgid "MS MP4 V3" msgstr "MS MP4 V3" #: ../src/vcodecs.c:351 msgid "MPEG4-ASP" msgstr "MPEG4-ASP" #: ../src/vcodecs.c:387 msgid "MPEG4-AVC (H264)" msgstr "MPEG4-AVC (H264)" #: ../src/vcodecs.c:427 msgid "VP8 (VP8)" msgstr "" #: ../src/vcodecs.c:463 msgid "Theora (ogg theora)" msgstr "" #: ../src/video_format.c:43 msgid "AVI - avi format" msgstr "" #: ../src/video_format.c:52 msgid "MKV - Matroska format" msgstr "" #: ../src/video_format.c:61 msgid "WEBM - format" msgstr "" #: ../src/video_tab.c:208 msgid "Frame Rate:" msgstr "Broj Slika:" #: ../src/video_tab.c:215 msgid " Show" msgstr " Prikaži" #: ../src/video_tab.c:237 msgid "Resolution:" msgstr "RazluÄivost:" #: ../src/video_tab.c:263 msgid "Camera Output:" msgstr "" #: ../src/video_tab.c:285 msgid "Apply" msgstr "Primjeni" #: ../src/video_tab.c:292 msgid "Quality:" msgstr "Kvaliteta:" #: ../src/video_tab.c:302 msgid "---- Video Filters ----" msgstr "---- Video Filteri ----" #. Mirror #: ../src/video_tab.c:321 msgid " Mirror" msgstr " Zrcalo" #. Upturn #: ../src/video_tab.c:332 msgid " Invert" msgstr " Izokrenuto" #. Negate #: ../src/video_tab.c:343 msgid " Negative" msgstr " Negativ" #. Mono #: ../src/video_tab.c:354 msgid " Mono" msgstr " Mono" #. Pieces #: ../src/video_tab.c:366 msgid " Pieces" msgstr " Komadići" #. Particles #: ../src/video_tab.c:378 msgid " Particles" msgstr " ÄŒestice" guvcview-src-1.7.1/po/boldquot.sed0000664000175000017500000000033112173235416016135 0ustar paulopaulos/"\([^"]*\)"/“\1â€/g s/`\([^`']*\)'/‘\1’/g s/ '\([^`']*\)' / ‘\1’ /g s/ '\([^`']*\)'$/ ‘\1’/g s/^'\([^`']*\)' /‘\1’ /g s/“â€/""/g s/“/“/g s/â€/â€/g s/‘/‘/g s/’/’/g guvcview-src-1.7.1/po/Makevars0000664000175000017500000000347212173235416015314 0ustar paulopaulo# Makefile variables for PO directory in any package using GNU gettext. # Usually the message domain is the same as the package name. DOMAIN = $(PACKAGE) # These two variables depend on the location of this directory. subdir = po top_builddir = .. # These options get passed to xgettext. XGETTEXT_OPTIONS = --keyword=_ --keyword=N_ --keyword=C_ --keyword=Q_ --from-code=UTF-8 # This is the copyright holder that gets inserted into the header of the # $(DOMAIN).pot file. Set this to the copyright holder of the surrounding # package. (Note that the msgstr strings, extracted from the package's # sources, belong to the copyright holder of the package.) Translators are # expected to transfer the copyright for their translations to this person # or entity, or to disclaim their copyright. The empty string stands for # the public domain; in this case the translators are expected to disclaim # their copyright. COPYRIGHT_HOLDER = Paulo Assis # This is the email address or URL to which the translators shall report # bugs in the untranslated strings: # - Strings which are not entire sentences, see the maintainer guidelines # in the GNU gettext documentation, section 'Preparing Strings'. # - Strings which use unclear terms or require additional context to be # understood. # - Strings which make invalid assumptions about notation of date, time or # money. # - Pluralisation problems. # - Incorrect English spelling. # - Incorrect formatting. # It can be your email address, or a mailing list address where translators # can write to without being subscribed, or the URL of a web page through # which the translators can contact you. MSGID_BUGS_ADDRESS = pj.assis@gmail.com # This is the list of locale categories, beyond LC_MESSAGES, for which the # message catalogs shall be used. It is usually empty. EXTRA_LOCALE_CATEGORIES = guvcview-src-1.7.1/po/Makefile.in.in0000664000175000017500000001545012173235416016271 0ustar paulopaulo# Makefile for program source directory in GNU NLS utilities package. # Copyright (C) 1995, 1996, 1997 by Ulrich Drepper # Copyright (C) 2004-2008 Rodney Dawes # # This file may be copied and used freely without restrictions. It may # be used in projects which are not available under a GNU Public License, # but which still want to provide support for the GNU gettext functionality. # # - Modified by Owen Taylor to use GETTEXT_PACKAGE # instead of PACKAGE and to look for po2tbl in ./ not in intl/ # # - Modified by jacob berkman to install # Makefile.in.in and po2tbl.sed.in for use with glib-gettextize # # - Modified by Rodney Dawes for use with intltool # # We have the following line for use by intltoolize: # INTLTOOL_MAKEFILE GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ PACKAGE = @PACKAGE@ VERSION = @VERSION@ SHELL = @SHELL@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ top_builddir = @top_builddir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ datadir = @datadir@ datarootdir = @datarootdir@ libdir = @libdir@ DATADIRNAME = @DATADIRNAME@ itlocaledir = $(prefix)/$(DATADIRNAME)/locale subdir = po install_sh = @install_sh@ # Automake >= 1.8 provides @mkdir_p@. # Until it can be supposed, use the safe fallback: mkdir_p = $(install_sh) -d INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ GMSGFMT = @GMSGFMT@ MSGFMT = @MSGFMT@ XGETTEXT = @XGETTEXT@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ MSGMERGE = INTLTOOL_EXTRACT=$(INTLTOOL_EXTRACT) srcdir=$(srcdir) $(INTLTOOL_UPDATE) --gettext-package $(GETTEXT_PACKAGE) --dist GENPOT = INTLTOOL_EXTRACT=$(INTLTOOL_EXTRACT) srcdir=$(srcdir) $(INTLTOOL_UPDATE) --gettext-package $(GETTEXT_PACKAGE) --pot ALL_LINGUAS = @ALL_LINGUAS@ PO_LINGUAS=$(shell if test -r $(srcdir)/LINGUAS; then grep -v "^\#" $(srcdir)/LINGUAS; else echo "$(ALL_LINGUAS)"; fi) USER_LINGUAS=$(shell if test -n "$(LINGUAS)"; then LLINGUAS="$(LINGUAS)"; ALINGUAS="$(ALL_LINGUAS)"; for lang in $$LLINGUAS; do if test -n "`grep \^$$lang$$ $(srcdir)/LINGUAS 2>/dev/null`" -o -n "`echo $$ALINGUAS|tr ' ' '\n'|grep \^$$lang$$`"; then printf "$$lang "; fi; done; fi) USE_LINGUAS=$(shell if test -n "$(USER_LINGUAS)" -o -n "$(LINGUAS)"; then LLINGUAS="$(USER_LINGUAS)"; else if test -n "$(PO_LINGUAS)"; then LLINGUAS="$(PO_LINGUAS)"; else LLINGUAS="$(ALL_LINGUAS)"; fi; fi; for lang in $$LLINGUAS; do printf "$$lang "; done) POFILES=$(shell LINGUAS="$(PO_LINGUAS)"; for lang in $$LINGUAS; do printf "$$lang.po "; done) DISTFILES = Makefile.in.in POTFILES.in $(POFILES) EXTRA_DISTFILES = ChangeLog POTFILES.skip Makevars LINGUAS POTFILES = \ # This comment gets stripped out CATALOGS=$(shell LINGUAS="$(USE_LINGUAS)"; for lang in $$LINGUAS; do printf "$$lang.gmo "; done) XGETTEXT_KEYWORDS = --keyword --keyword=N_ .SUFFIXES: .SUFFIXES: .po .pox .gmo .mo .msg .cat .po.pox: $(MAKE) $(GETTEXT_PACKAGE).pot $(MSGMERGE) $< $(GETTEXT_PACKAGE).pot -o $*.pox .po.mo: $(MSGFMT) -o $@ $< .po.gmo: file=`echo $* | sed 's,.*/,,'`.gmo \ && rm -f $$file && $(GMSGFMT) -o $$file $< .po.cat: sed -f ../intl/po2msg.sed < $< > $*.msg \ && rm -f $@ && gencat $@ $*.msg all: all-@USE_NLS@ all-yes: $(CATALOGS) all-no: $(GETTEXT_PACKAGE).pot: $(POTFILES) $(GENPOT) install: install-data install-data: install-data-@USE_NLS@ install-data-no: all install-data-yes: all linguas="$(USE_LINGUAS)"; \ for lang in $$linguas; do \ dir=$(DESTDIR)$(itlocaledir)/$$lang/LC_MESSAGES; \ $(mkdir_p) $$dir; \ if test -r $$lang.gmo; then \ $(INSTALL_DATA) $$lang.gmo $$dir/$(GETTEXT_PACKAGE).mo; \ echo "installing $$lang.gmo as $$dir/$(GETTEXT_PACKAGE).mo"; \ else \ $(INSTALL_DATA) $(srcdir)/$$lang.gmo $$dir/$(GETTEXT_PACKAGE).mo; \ echo "installing $(srcdir)/$$lang.gmo as" \ "$$dir/$(GETTEXT_PACKAGE).mo"; \ fi; \ if test -r $$lang.gmo.m; then \ $(INSTALL_DATA) $$lang.gmo.m $$dir/$(GETTEXT_PACKAGE).mo.m; \ echo "installing $$lang.gmo.m as $$dir/$(GETTEXT_PACKAGE).mo.m"; \ else \ if test -r $(srcdir)/$$lang.gmo.m ; then \ $(INSTALL_DATA) $(srcdir)/$$lang.gmo.m \ $$dir/$(GETTEXT_PACKAGE).mo.m; \ echo "installing $(srcdir)/$$lang.gmo.m as" \ "$$dir/$(GETTEXT_PACKAGE).mo.m"; \ else \ true; \ fi; \ fi; \ done # Empty stubs to satisfy archaic automake needs dvi info ctags tags CTAGS TAGS ID: # Define this as empty until I found a useful application. install-exec installcheck: uninstall: linguas="$(USE_LINGUAS)"; \ for lang in $$linguas; do \ rm -f $(DESTDIR)$(itlocaledir)/$$lang/LC_MESSAGES/$(GETTEXT_PACKAGE).mo; \ rm -f $(DESTDIR)$(itlocaledir)/$$lang/LC_MESSAGES/$(GETTEXT_PACKAGE).mo.m; \ done check: all $(GETTEXT_PACKAGE).pot rm -f missing notexist srcdir=$(srcdir) $(INTLTOOL_UPDATE) -m if [ -r missing -o -r notexist ]; then \ exit 1; \ fi mostlyclean: rm -f *.pox $(GETTEXT_PACKAGE).pot *.old.po cat-id-tbl.tmp rm -f .intltool-merge-cache clean: mostlyclean distclean: clean rm -f Makefile Makefile.in POTFILES stamp-it rm -f *.mo *.msg *.cat *.cat.m *.gmo maintainer-clean: distclean @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." rm -f Makefile.in.in distdir = ../$(PACKAGE)-$(VERSION)/$(subdir) dist distdir: $(DISTFILES) dists="$(DISTFILES)"; \ extra_dists="$(EXTRA_DISTFILES)"; \ for file in $$extra_dists; do \ test -f $(srcdir)/$$file && dists="$$dists $(srcdir)/$$file"; \ done; \ for file in $$dists; do \ test -f $$file || file="$(srcdir)/$$file"; \ ln $$file $(distdir) 2> /dev/null \ || cp -p $$file $(distdir); \ done update-po: Makefile $(MAKE) $(GETTEXT_PACKAGE).pot tmpdir=`pwd`; \ linguas="$(USE_LINGUAS)"; \ for lang in $$linguas; do \ echo "$$lang:"; \ result="`$(MSGMERGE) -o $$tmpdir/$$lang.new.po $$lang`"; \ if $$result; then \ if cmp $(srcdir)/$$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \ rm -f $$tmpdir/$$lang.new.po; \ else \ if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \ :; \ else \ echo "msgmerge for $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \ rm -f $$tmpdir/$$lang.new.po; \ exit 1; \ fi; \ fi; \ else \ echo "msgmerge for $$lang.gmo failed!"; \ rm -f $$tmpdir/$$lang.new.po; \ fi; \ done Makefile POTFILES: stamp-it @if test ! -f $@; then \ rm -f stamp-it; \ $(MAKE) stamp-it; \ fi stamp-it: Makefile.in.in $(top_builddir)/config.status POTFILES.in cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/Makefile.in CONFIG_HEADERS= CONFIG_LINKS= \ $(SHELL) ./config.status # Tell versions [3.59,3.63) of GNU make not to export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: guvcview-src-1.7.1/po/en@boldquot.header0000664000175000017500000000247112173235416017244 0ustar paulopaulo# All this catalog "translates" are quotation characters. # The msgids must be ASCII and therefore cannot contain real quotation # characters, only substitutes like grave accent (0x60), apostrophe (0x27) # and double quote (0x22). These substitutes look strange; see # http://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html # # This catalog translates grave accent (0x60) and apostrophe (0x27) to # left single quotation mark (U+2018) and right single quotation mark (U+2019). # It also translates pairs of apostrophe (0x27) to # left single quotation mark (U+2018) and right single quotation mark (U+2019) # and pairs of quotation mark (0x22) to # left double quotation mark (U+201C) and right double quotation mark (U+201D). # # When output to an UTF-8 terminal, the quotation characters appear perfectly. # When output to an ISO-8859-1 terminal, the single quotation marks are # transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to # grave/acute accent (by libiconv), and the double quotation marks are # transliterated to 0x22. # When output to an ASCII terminal, the single quotation marks are # transliterated to apostrophes, and the double quotation marks are # transliterated to 0x22. # # This catalog furthermore displays the text between the quotation marks in # bold face, assuming the VT100/XTerm escape sequences. # guvcview-src-1.7.1/po/zh_TW.po0000664000175000017500000005006512173235416015213 0ustar paulopaulomsgid "" msgstr "" "Project-Id-Version: guvcview\n" "Report-Msgid-Bugs-To: pj.assis@gmail.com\n" "POT-Creation-Date: 2013-07-16 12:53+0000\n" "PO-Revision-Date: 2013-02-25 05:36+0000\n" "Last-Translator: kentxchang \n" "Language-Team: none \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2013-07-22 13:32+0000\n" "X-Generator: Launchpad (build 16696)\n" "X-Poedit-Country: TAIWAN\n" "Language: \n" "X-Poedit-Language: Chinese\n" #: ../data/guvcview.desktop.in.in.h:1 msgid "guvcview" msgstr "" #: ../data/guvcview.desktop.in.in.h:2 msgid "GTK UVC video viewer" msgstr "" #: ../data/guvcview.desktop.in.in.h:3 msgid "A video viewer and capturer for the linux uvc driver" msgstr "" #: ../src/acodecs.c:59 msgid "PCM - uncompressed (16 bit)" msgstr "" #: ../src/acodecs.c:76 msgid "MPEG2 - (lavc)" msgstr "" #: ../src/acodecs.c:93 msgid "MP3 - (lavc)" msgstr "" #: ../src/acodecs.c:110 msgid "Dolby AC3 - (lavc)" msgstr "" #: ../src/acodecs.c:127 msgid "ACC Low - (faac)" msgstr "" #: ../src/acodecs.c:144 msgid "Vorbis" msgstr "" #: ../src/audio_tab.c:80 msgid "Audio" msgstr "音頻" #: ../src/audio_tab.c:98 msgid " Sound" msgstr " è²éŸ³" #. VU meter on the image (OSD) #: ../src/audio_tab.c:109 msgid " Show VU meter" msgstr "" #: ../src/audio_tab.c:121 msgid "Audio API:" msgstr "音頻API:" #: ../src/audio_tab.c:132 msgid "PORTAUDIO" msgstr "PORTAUDIO" #: ../src/audio_tab.c:133 msgid "PULSEAUDIO" msgstr "PULSEAUDIO" #: ../src/audio_tab.c:149 ../src/audio_tab.c:172 msgid "Input Device:" msgstr "輸入設備:" #: ../src/audio_tab.c:182 ../src/audio_tab.c:214 msgid "Dev. Default" msgstr "Dev. Default" #: ../src/audio_tab.c:204 msgid "Sample Rate:" msgstr "範例碼率:" #: ../src/audio_tab.c:215 msgid "1 - mono" msgstr "1 - mono" #: ../src/audio_tab.c:216 msgid "2 - stereo" msgstr "2 - stereo" #: ../src/audio_tab.c:251 msgid "Channels:" msgstr "è²é“:" #: ../src/audio_tab.c:302 msgid "---- Audio Effects ----" msgstr "---音頻效果---" #. Echo #: ../src/audio_tab.c:321 msgid " Echo" msgstr " è¿´è²" #. FUZZ #: ../src/audio_tab.c:332 msgid " Fuzz" msgstr " 模糊" #. Reverb #: ../src/audio_tab.c:344 msgid " Reverb" msgstr " Reverb" #. WahWah #: ../src/audio_tab.c:356 msgid " WahWah" msgstr " WahWah" #. Ducky #: ../src/audio_tab.c:368 msgid " Ducky" msgstr " Ducky" #: ../src/callbacks.c:108 msgid "Error" msgstr "" #: ../src/callbacks.c:132 msgid "" "\n" "You have more than one video device installed.\n" "Do you want to try another one ?\n" msgstr "" #. Devices #: ../src/callbacks.c:139 ../src/video_tab.c:103 msgid "Device:" msgstr "設備:" #: ../src/callbacks.c:271 msgid "Save File" msgstr "存檔" #: ../src/callbacks.c:283 msgid "File Format:" msgstr "" #: ../src/callbacks.c:454 msgid "codec values" msgstr "編解碼器的值" #: ../src/callbacks.c:465 msgid "" " encoder fps: \n" " (0 - use fps combobox value)" msgstr "" " encoder fps: \n" " (0 - use fps combobox value)" #: ../src/callbacks.c:478 msgid " monotonic pts" msgstr "" #. bit rate #: ../src/callbacks.c:485 ../src/callbacks.c:808 msgid "bit rate: " msgstr "bit rate: " #: ../src/callbacks.c:498 msgid "qmax: " msgstr "qmax: " #: ../src/callbacks.c:511 msgid "qmin: " msgstr "qmin: " #: ../src/callbacks.c:524 msgid "max. qdiff: " msgstr "max. qdiff: " #: ../src/callbacks.c:537 msgid "dia size: " msgstr "dia size: " #: ../src/callbacks.c:550 msgid "pre dia size: " msgstr "pre dia size: " #: ../src/callbacks.c:563 msgid "pre me: " msgstr "pre me: " #: ../src/callbacks.c:576 msgid "pre cmp: " msgstr "pre cmp: " #: ../src/callbacks.c:589 msgid "cmp: " msgstr "cmp: " #: ../src/callbacks.c:602 msgid "sub cmp: " msgstr "sub cmp: " #: ../src/callbacks.c:615 msgid "last predictor count: " msgstr "last predictor count: " #: ../src/callbacks.c:628 msgid "gop size: " msgstr "gop size: " #: ../src/callbacks.c:641 msgid "qcompress: " msgstr "qcompress: " #: ../src/callbacks.c:654 msgid "qblur: " msgstr "qblur: " #: ../src/callbacks.c:667 msgid "subq: " msgstr "subq: " #: ../src/callbacks.c:680 msgid "framerefs: " msgstr "framerefs: " #: ../src/callbacks.c:693 msgid "me method: " msgstr "me method: " #: ../src/callbacks.c:706 msgid "mb decision: " msgstr "mb decision: " #: ../src/callbacks.c:719 msgid "max B frames: " msgstr "" #: ../src/callbacks.c:732 msgid "num threads: " msgstr "" #: ../src/callbacks.c:795 msgid "audio codec values" msgstr "音頻編碼器數值" #. sample format #: ../src/callbacks.c:822 msgid "sample format: " msgstr "" #: ../src/callbacks.c:1250 msgid "start new" msgstr "馬上啟動" #: ../src/callbacks.c:1253 msgid "restart" msgstr "釿–°å•Ÿå‹•" #: ../src/callbacks.c:1255 msgid "new" msgstr "新增" #: ../src/callbacks.c:1257 msgid "cancel" msgstr "å–æ¶ˆ" #: ../src/callbacks.c:1262 msgid "" "launch new process or restart?.\n" "\n" msgstr "" "å•Ÿå‹•æ–°çš„ç¨‹åºæˆ–釿–°å•Ÿå‹•?\n" "\n" #: ../src/callbacks.c:1716 ../src/guvcview.c:537 msgid "Cap. Image (I)" msgstr "" #. disable image controls #: ../src/callbacks.c:1727 ../src/guvcview.c:658 ../src/timers.c:101 msgid "capturing photo to" msgstr "" #: ../src/callbacks.c:1786 ../src/guvcview.c:547 msgid "Cap. Video (V)" msgstr "" #: ../src/callbacks.c:1812 ../src/guvcview.c:708 msgid "capturing video to" msgstr "" #. vid capture enabled from start #: ../src/callbacks.c:1845 ../src/guvcview.c:542 msgid "Stop Video (V)" msgstr "" #: ../src/callbacks.c:1901 ../src/menubar.c:66 msgid "Save Profile" msgstr "" #: ../src/callbacks.c:1914 ../src/menubar.c:65 msgid "Load Profile" msgstr "" #: ../src/create_video.c:1016 ../src/guvcview.c:700 msgid "Cap. Video" msgstr "錄影" #: ../src/guvcview.c:279 msgid "Guvcview Video Capture" msgstr "Guvcview Video Capture" #: ../src/guvcview.c:291 msgid "GUVCViewer Controls" msgstr "GUVCViewer設定" #. can't open device #: ../src/guvcview.c:336 msgid "" "Guvcview error:\n" "\n" "Unable to open device" msgstr "" "Guvcview 錯誤:\n" "\n" "設備無法開啟" #: ../src/guvcview.c:337 msgid "" "Please make sure the camera is connected\n" "and that the correct driver is installed." msgstr "" "請確定æ”影機已連接\n" "ä¸”å·²å®‰è£æ­£ç¢ºçš„驅動程å¼" #. uvc extension controls OK, give warning and shutdown (called with --add_ctrls) #: ../src/guvcview.c:342 msgid "" "Guvcview:\n" "\n" "UVC Extension controls" msgstr "" "Guvcview:\n" "\n" "UVC 外掛控制" #: ../src/guvcview.c:343 msgid "Extension controls were added to the UVC driver" msgstr "外掛控制已經被新增到UVC驅動程å¼ä¸­" #. uvc extension controls error - EACCES (needs root user) #: ../src/guvcview.c:350 msgid "" "Guvcview error:\n" "\n" "UVC Extension controls" msgstr "" "Guvcview 錯誤:\n" "\n" "UVC 外掛控制" #: ../src/guvcview.c:351 msgid "" "An error occurred while adding extension\n" "controls to the UVC driver\n" "Make sure you run guvcview as root (or sudo)." msgstr "" "當新增外掛時有一個錯誤發生\n" "控制UVC驅動程å¼\n" "確定你是使用root(或sudo)來執行guvcview" #: ../src/guvcview.c:377 ../src/guvcview.c:455 msgid "" "Guvcview error:\n" "\n" "Can't set a valid video stream for guvcview" msgstr "" "Guvcview 錯誤:\n" "\n" "ä¸èƒ½ç‚ºguvcview設置一個有效視訊串æµå€¼" #: ../src/guvcview.c:378 ../src/guvcview.c:456 msgid "" "Make sure your device driver is v4l2 compliant\n" "and that it is properly installed." msgstr "" "請確定您的設備驅動程å¼ç¬¦åˆv4l2標準\n" "且它已被正確安è£ã€‚" #: ../src/guvcview.c:400 ../src/guvcview.c:422 msgid "" "Guvcview error:\n" "\n" "Unable to start with minimum setup" msgstr "" "Guvcview 錯誤:\n" "\n" "無法啟動最å°å®‰è£" #: ../src/guvcview.c:401 ../src/guvcview.c:423 msgid "Please reconnect your camera." msgstr "è«‹é‡æ–°é€£æŽ¥ä½ çš„æ”å½±æ©Ÿ" #: ../src/guvcview.c:430 msgid "" "Guvcview error:\n" "\n" "Couldn't query device capabilities" msgstr "" "Guvcview錯誤:\n" "\n" "設備無法開啟" #: ../src/guvcview.c:431 msgid "Make sure the device driver supports v4l2." msgstr "ç¢ºå®šä½ çš„è¨­å‚™é©…å‹•ç¨‹å¼æ”¯æ´ v4l2." #: ../src/guvcview.c:435 msgid "" "Guvcview error:\n" "\n" "Read method error" msgstr "" "Guvcview錯誤:\n" "\n" "設備無法開啟" #: ../src/guvcview.c:436 msgid "Please try mmap instead (--capture_method=1)." msgstr "請試試mmapè€Œä¸æ˜¯(--capture_method=1)." #: ../src/guvcview.c:444 msgid "" "Guvcview error:\n" "\n" "Unable to allocate Buffers" msgstr "" "Guvcview錯誤:\n" "\n" "設備無法開啟" #: ../src/guvcview.c:445 msgid "Please try restarting your system." msgstr "è«‹è©¦è©¦é‡æ–°å•Ÿå‹•你的系統." #: ../src/guvcview.c:490 msgid "Image Controls" msgstr "å½±åƒè¨­å®š" #. image auto capture #: ../src/guvcview.c:533 msgid "Stop Auto (I)" msgstr "" #: ../src/guvcview.c:644 msgid "" "Guvcview error:\n" "\n" "Unable to create Video Thread" msgstr "" "Guvcview錯誤:\n" "\n" "設備無法開啟" #: ../src/guvcview.c:645 msgid "Please report it to http://developer.berlios.de/bugs/?group_id=8179" msgstr "請回報到http://developer.berlios.de/bugs/?group_id=8179" #: ../src/img_controls.c:121 msgid "Auto Focus (continuous)" msgstr "自動å°ç„¦(連續)" #: ../src/img_controls.c:122 msgid "set Focus" msgstr "設定焦點" #: ../src/image_format.c:35 msgid "Jpeg (jpg)" msgstr "" #: ../src/image_format.c:41 msgid "Bitmap (Bmp)" msgstr "" #: ../src/image_format.c:47 msgid "Portable Network Graphics (Png)" msgstr "" #: ../src/image_format.c:53 msgid "Raw Image (raw)" msgstr "" #. controls menu #: ../src/menubar.c:64 msgid "Settings" msgstr "" #: ../src/menubar.c:67 msgid "Hardware Defaults" msgstr "" #: ../src/menubar.c:75 msgid "Camera Button" msgstr "" #: ../src/menubar.c:79 msgid "Capture Image" msgstr "" #: ../src/menubar.c:84 msgid "Capture Video" msgstr "" #. video menu #: ../src/menubar.c:144 ../src/video_tab.c:87 msgid "Video" msgstr "" #: ../src/menubar.c:145 ../src/menubar.c:231 msgid "File" msgstr "" #: ../src/menubar.c:146 ../src/menubar.c:232 msgid "Increment Filename" msgstr "" #: ../src/menubar.c:164 msgid "Video Codec" msgstr "" #: ../src/menubar.c:187 msgid "Video Codec Properties" msgstr "" #: ../src/menubar.c:194 msgid "Audio Codec" msgstr "" #: ../src/menubar.c:215 msgid "Audio Codec Properties" msgstr "" #. photo menu #: ../src/menubar.c:230 msgid "Photo" msgstr "" #: ../src/options.c:752 msgid "Prints version" msgstr "列å°ç‰ˆæœ¬" #: ../src/options.c:753 msgid "Displays debug information" msgstr "顯示debug訊æ¯" #: ../src/options.c:754 msgid "Video Device to use [default: /dev/video0]" msgstr "使用影åƒè¨­å‚™[default: /dev/video0]" #: ../src/options.c:755 msgid "Exit after adding UVC extension controls (needs root/sudo)" msgstr "在新增外掛控制後離開(需è¦ä½¿ç”¨root/sudo)" #: ../src/options.c:756 msgid "Don't stream video (image controls only)" msgstr "ä¸èƒ½ä¸²æµå½±åƒ(åªèƒ½æŽ§åˆ¶åœ–片)" #: ../src/options.c:757 msgid "Don't display a GUI" msgstr "" #: ../src/options.c:758 msgid "Capture method (1-mmap (default) 2-read)" msgstr "æ“·å–æ–¹æ³•(1-mmap (default) 2-read)" #: ../src/options.c:759 msgid "Configuration file" msgstr "設置檔案" #: ../src/options.c:760 msgid "Hardware accelaration (enable(1) | disable(0))" msgstr "硬體加速(啟用(1) | åœç”¨(0))" #: ../src/options.c:761 msgid "" "Pixel " "format(mjpg|jpeg|yuyv|yvyu|uyvy|yyuv|yu12|yv12|nv12|nv21|nv16|nv61|y41p|grey|" "y10b|y16 |s501|s505|s508|gbrg|grbg|ba81|rggb|bgr3|rgb3)" msgstr "" #: ../src/options.c:762 msgid "Frame size, default: 640x480" msgstr "影格尺寸,é è¨­å€¼:640x480" #: ../src/options.c:763 msgid "Image File name" msgstr "圖片檔案å稱" #: ../src/options.c:764 msgid "Image capture interval in seconds" msgstr "圖片擷å–間隔秒數" #: ../src/options.c:765 msgid "Number of Pictures to capture" msgstr "åœ–ç‰‡æ“·å–æ•¸" #: ../src/options.c:766 msgid "Video File name (capture from start)" msgstr "å½±åƒæª”案å稱(從開始擷å–)" #: ../src/options.c:767 msgid "Video capture time (in seconds)" msgstr "å½±åƒæ“·å–時間(秒數)" #: ../src/options.c:768 msgid "Exits guvcview after closing video" msgstr "在關掉影åƒå¾Œé›¢é–‹guvcview" #: ../src/options.c:769 msgid "Number of initial frames to skip" msgstr "è·³éŽçš„åˆå§‹å½±æ ¼æ•¸" #: ../src/options.c:770 msgid "Show FPS value (enable(1) | disable (0))" msgstr "顯示FPS值(啟用(1) | åœç”¨ (0))" #: ../src/options.c:771 msgid "Load Profile at start" msgstr "在啟動時讀å–專案" #: ../src/options.c:777 msgid "- local options" msgstr "-本地é¸é …" #. gdk_threads_enter(); #: ../src/timers.c:119 msgid "Cap. Image" msgstr "æ‹ç…§" #: ../src/timers.c:217 msgid "Guvcview Warning:" msgstr "Guvcview警告:" #: ../src/timers.c:217 msgid "Not enough free space left on disk" msgstr "在硬碟上沒有足夠的剩餘空間" #: ../src/v4l2_controls.c:711 msgid "Left" msgstr "å·¦" #: ../src/v4l2_controls.c:712 msgid "Right" msgstr "å³" #: ../src/v4l2_controls.c:716 msgid "Down" msgstr "下" #: ../src/v4l2_controls.c:717 msgid "Up" msgstr "上" #: ../src/v4l2_controls.c:762 msgid "Off" msgstr "" #: ../src/v4l2_controls.c:762 msgid "On" msgstr "" #: ../src/v4l2_controls.c:762 msgid "Blinking" msgstr "" #: ../src/v4l2_controls.c:762 msgid "Auto" msgstr "" #. turn it into a menu control #: ../src/v4l2_controls.c:813 msgid "8 bit" msgstr "" #: ../src/v4l2_controls.c:813 msgid "12 bit" msgstr "" #: ../src/v4l2_dyna_ctrls.c:96 msgid "Pan (relative)" msgstr "Pan (相å°çš„)" #: ../src/v4l2_dyna_ctrls.c:109 msgid "Tilt (relative)" msgstr "傾斜(相å°çš„)" #: ../src/v4l2_dyna_ctrls.c:122 msgid "Pan Reset" msgstr "Pan é‡è¨­" #: ../src/v4l2_dyna_ctrls.c:135 msgid "Tilt Reset" msgstr "傾斜é‡è¨­" #: ../src/v4l2_dyna_ctrls.c:148 msgid "Focus (absolute)" msgstr "å°ç„¦(絕å°å€¼)" #: ../src/v4l2_dyna_ctrls.c:161 msgid "LED1 Mode" msgstr "LED1模å¼" #: ../src/v4l2_dyna_ctrls.c:174 msgid "LED1 Frequency" msgstr "LED1頻率" #: ../src/v4l2_dyna_ctrls.c:187 msgid "Disable video processing" msgstr "åœç”¨å½±åƒè™•ç†" #: ../src/v4l2_dyna_ctrls.c:200 msgid "Raw bits per pixel" msgstr "Raw bits per pixel" #. needed only for language files (not used) #. V4L2 control strings #: ../src/v4l2uvc.c:56 msgid "User Controls" msgstr "使用者設定" #: ../src/v4l2uvc.c:57 msgid "Brightness" msgstr "亮度" #: ../src/v4l2uvc.c:58 msgid "Contrast" msgstr "å°æ¯”" #: ../src/v4l2uvc.c:59 msgid "Hue" msgstr "色調" #: ../src/v4l2uvc.c:60 msgid "Saturation" msgstr "飽和度" #: ../src/v4l2uvc.c:61 msgid "Sharpness" msgstr "銳利度" #: ../src/v4l2uvc.c:62 msgid "Gamma" msgstr "伽瑪值" #: ../src/v4l2uvc.c:63 msgid "Backlight Compensation" msgstr "背光補償" #: ../src/v4l2uvc.c:64 msgid "Power Line Frequency" msgstr "視訊頻率" #: ../src/v4l2uvc.c:65 msgid "Hue, Automatic" msgstr "自動色調" #: ../src/v4l2uvc.c:66 msgid "Focus, Auto" msgstr "自動å°ç„¦" #: ../src/v4l2uvc.c:67 msgid "Manual Mode" msgstr "手動模å¼" #: ../src/v4l2uvc.c:68 msgid "Auto Mode" msgstr "自動模å¼" #: ../src/v4l2uvc.c:69 msgid "Shutter Priority Mode" msgstr "快門優先模å¼" #: ../src/v4l2uvc.c:70 msgid "Aperture Priority Mode" msgstr "光圈優先模å¼" #: ../src/v4l2uvc.c:71 msgid "Black Level" msgstr "黑色等級" #: ../src/v4l2uvc.c:72 msgid "White Balance, Automatic" msgstr "自動白平衡" #: ../src/v4l2uvc.c:73 msgid "Do White Balance" msgstr "設置白平衡" #: ../src/v4l2uvc.c:74 msgid "Red Balance" msgstr "紅平衡" #: ../src/v4l2uvc.c:75 msgid "Blue Balance" msgstr "è—平衡" #: ../src/v4l2uvc.c:76 msgid "Exposure" msgstr "æ›å…‰åº¦" #: ../src/v4l2uvc.c:77 msgid "Gain, Automatic" msgstr "自動增益" #: ../src/v4l2uvc.c:78 msgid "Gain" msgstr "增益" #: ../src/v4l2uvc.c:79 msgid "Horizontal Flip" msgstr "水平翻轉" #: ../src/v4l2uvc.c:80 msgid "Vertical Flip" msgstr "垂直翻轉" #: ../src/v4l2uvc.c:81 msgid "Horizontal Center" msgstr "水平中心" #: ../src/v4l2uvc.c:82 msgid "Vertical Center" msgstr "垂直中心" #: ../src/v4l2uvc.c:83 msgid "Chroma AGC" msgstr "濃度AGC" #: ../src/v4l2uvc.c:84 msgid "Color Killer" msgstr "é¡è‰² killer" #: ../src/v4l2uvc.c:85 msgid "Color Effects" msgstr "色彩效果" #. CAMERA CLASS control strings #: ../src/v4l2uvc.c:88 msgid "Camera Controls" msgstr "æ”影機設定" #: ../src/v4l2uvc.c:89 msgid "Auto Exposure" msgstr "自動æ›å…‰" #: ../src/v4l2uvc.c:90 msgid "Exposure Time, Absolute" msgstr "çµ•å°æ›å…‰æ™‚é–“" #: ../src/v4l2uvc.c:91 msgid "Exposure, Dynamic Framerate" msgstr "æ›å…‰ï¼Œå‹•態碼率" #: ../src/v4l2uvc.c:92 msgid "Pan, Relative" msgstr "ç­†,相å°çš„" #: ../src/v4l2uvc.c:93 msgid "Tilt, Relative" msgstr "傾斜,相å°çš„" #: ../src/v4l2uvc.c:94 msgid "Pan, Reset" msgstr "ç­†,é‡è¨­" #: ../src/v4l2uvc.c:95 msgid "Tilt, Reset" msgstr "傾斜,é‡è¨­" #: ../src/v4l2uvc.c:96 msgid "Pan, Absolute" msgstr "ç­†,絕å°çš„" #: ../src/v4l2uvc.c:98 msgid "Focus, Absolute" msgstr "å°ç„¦,絕å°çš„" #: ../src/v4l2uvc.c:99 msgid "Focus, Relative" msgstr "å°ç„¦,相å°çš„" #: ../src/v4l2uvc.c:100 msgid "Focus, Automatic" msgstr "å°ç„¦,自動" #: ../src/v4l2uvc.c:101 msgid "Zoom, Absolute" msgstr "變焦,絕å°çš„" #: ../src/v4l2uvc.c:102 msgid "Zoom, Relative" msgstr "變焦,相å°çš„" #: ../src/v4l2uvc.c:103 msgid "Zoom, Continuous" msgstr "變焦,連續的" #: ../src/v4l2uvc.c:104 msgid "Privacy" msgstr "éš±ç§" #. UVC specific control strings #: ../src/v4l2uvc.c:107 msgid "Exposure, Auto" msgstr "æ›å…‰ï¼Œè‡ªå‹•" #: ../src/v4l2uvc.c:108 msgid "Exposure, Auto Priority" msgstr "æ›å…‰ï¼Œè‡ªå‹•優先" #: ../src/v4l2uvc.c:109 msgid "Exposure (Absolute)" msgstr "æ›å…‰ï¼ˆçµ•å°ï¼‰" #: ../src/v4l2uvc.c:110 msgid "White Balance Temperature, Auto" msgstr "白平衡溫度,自動" #: ../src/v4l2uvc.c:111 msgid "White Balance Temperature" msgstr "白平衡溫度" #: ../src/v4l2uvc.c:112 msgid "White Balance Component, Auto" msgstr "白平衡元件,自動" #: ../src/v4l2uvc.c:113 msgid "White Balance Blue Component" msgstr "白平衡è—元件" #: ../src/v4l2uvc.c:114 msgid "White Balance Red Component" msgstr "白平衡紅元件" #. libwebcam specific control strings #: ../src/v4l2uvc.c:117 msgid "Focus" msgstr "å°ç„¦" #: ../src/v4l2uvc.c:118 msgid "Focus (Absolute)" msgstr "å°ç„¦(絕å°çš„)" #: ../src/vcodecs.c:63 msgid "MJPG - compressed" msgstr "MJPG - compressed" #: ../src/vcodecs.c:99 msgid "YUY2 - uncomp YUV" msgstr "YUY2 - uncomp YUV" #: ../src/vcodecs.c:135 msgid "RGB - uncomp BMP" msgstr "RGB - uncomp BMP" #: ../src/vcodecs.c:171 msgid "MPEG video 1" msgstr "MPEG video 1" #: ../src/vcodecs.c:207 msgid "FLV1 - flash video 1" msgstr "FLV1 - flash video 1" #: ../src/vcodecs.c:243 msgid "WMV1 - win. med. video 7" msgstr "WMV1 - win. med. video 7" #: ../src/vcodecs.c:279 msgid "MPG2 - MPG2 format" msgstr "MPG2 - MPG2 format" #: ../src/vcodecs.c:315 msgid "MS MP4 V3" msgstr "MS MP4 V3" #: ../src/vcodecs.c:351 msgid "MPEG4-ASP" msgstr "MPEG4-ASP" #: ../src/vcodecs.c:387 msgid "MPEG4-AVC (H264)" msgstr "MPEG4-AVC (H264)" #: ../src/vcodecs.c:427 msgid "VP8 (VP8)" msgstr "" #: ../src/vcodecs.c:463 msgid "Theora (ogg theora)" msgstr "" #: ../src/video_format.c:43 msgid "AVI - avi format" msgstr "" #: ../src/video_format.c:52 msgid "MKV - Matroska format" msgstr "" #: ../src/video_format.c:61 msgid "WEBM - format" msgstr "" #: ../src/video_tab.c:208 msgid "Frame Rate:" msgstr "影格率" #: ../src/video_tab.c:215 msgid " Show" msgstr " 顯示" #: ../src/video_tab.c:237 msgid "Resolution:" msgstr "å½±åƒå°ºå¯¸:" #: ../src/video_tab.c:263 msgid "Camera Output:" msgstr "æ”影機輸出:" #: ../src/video_tab.c:285 msgid "Apply" msgstr "套用" #: ../src/video_tab.c:292 msgid "Quality:" msgstr "å“質:" #: ../src/video_tab.c:302 msgid "---- Video Filters ----" msgstr "---å½±åƒæ¿¾æ³¢å™¨---" #. Mirror #: ../src/video_tab.c:321 msgid " Mirror" msgstr " é¡åƒ(水平翻轉)" #. Upturn #: ../src/video_tab.c:332 msgid " Invert" msgstr " 倒置(垂直翻轉)" #. Negate #: ../src/video_tab.c:343 msgid " Negative" msgstr " 負片效果" #. Mono #: ../src/video_tab.c:354 msgid " Mono" msgstr " ç°éšŽ" #. Pieces #: ../src/video_tab.c:366 msgid " Pieces" msgstr " 馬賽克" #. Particles #: ../src/video_tab.c:378 msgid " Particles" msgstr " 顆粒" guvcview-src-1.7.1/po/remove-potcdate.sin0000664000175000017500000000066012173235416017425 0ustar paulopaulo# Sed script that remove the POT-Creation-Date line in the header entry # from a POT file. # # The distinction between the first and the following occurrences of the # pattern is achieved by looking at the hold space. /^"POT-Creation-Date: .*"$/{ x # Test if the hold space is empty. s/P/P/ ta # Yes it was empty. First occurrence. Remove the line. g d bb :a # The hold space was nonempty. Following occurrences. Do nothing. x :b } guvcview-src-1.7.1/po/pl.po0000664000175000017500000004771212173235416014600 0ustar paulopaulo# Polish translation for guvcview # Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 # This file is distributed under the same license as the guvcview package. # FIRST AUTHOR , 2009. # msgid "" msgstr "" "Project-Id-Version: guvcview\n" "Report-Msgid-Bugs-To: pj.assis@gmail.com\n" "POT-Creation-Date: 2013-07-16 12:53+0000\n" "PO-Revision-Date: 2013-02-25 05:33+0000\n" "Last-Translator: Adam Czabara \n" "Language-Team: Polish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2013-07-22 13:32+0000\n" "X-Generator: Launchpad (build 16696)\n" "Language: pl\n" #: ../data/guvcview.desktop.in.in.h:1 msgid "guvcview" msgstr "" #: ../data/guvcview.desktop.in.in.h:2 msgid "GTK UVC video viewer" msgstr "" #: ../data/guvcview.desktop.in.in.h:3 msgid "A video viewer and capturer for the linux uvc driver" msgstr "" #: ../src/acodecs.c:59 msgid "PCM - uncompressed (16 bit)" msgstr "" #: ../src/acodecs.c:76 msgid "MPEG2 - (lavc)" msgstr "" #: ../src/acodecs.c:93 msgid "MP3 - (lavc)" msgstr "" #: ../src/acodecs.c:110 msgid "Dolby AC3 - (lavc)" msgstr "" #: ../src/acodecs.c:127 msgid "ACC Low - (faac)" msgstr "" #: ../src/acodecs.c:144 msgid "Vorbis" msgstr "" #: ../src/audio_tab.c:80 msgid "Audio" msgstr "Audio" #: ../src/audio_tab.c:98 msgid " Sound" msgstr " DźwiÄ™k" #. VU meter on the image (OSD) #: ../src/audio_tab.c:109 msgid " Show VU meter" msgstr "" #: ../src/audio_tab.c:121 msgid "Audio API:" msgstr "Audio API:" #: ../src/audio_tab.c:132 msgid "PORTAUDIO" msgstr "PORTAUDIO" #: ../src/audio_tab.c:133 msgid "PULSEAUDIO" msgstr "PULSEAUDIO" #: ../src/audio_tab.c:149 ../src/audio_tab.c:172 msgid "Input Device:" msgstr "UrzÄ…dzenie wejÅ›cia:" #: ../src/audio_tab.c:182 ../src/audio_tab.c:214 msgid "Dev. Default" msgstr "Urzadzenie domyÅ›lne" #: ../src/audio_tab.c:204 msgid "Sample Rate:" msgstr "Próbkowanie audio:" #: ../src/audio_tab.c:215 msgid "1 - mono" msgstr "1 - mono" #: ../src/audio_tab.c:216 msgid "2 - stereo" msgstr "2 - stereo" #: ../src/audio_tab.c:251 msgid "Channels:" msgstr "KanaÅ‚y:" #: ../src/audio_tab.c:302 msgid "---- Audio Effects ----" msgstr "---- Efekty audio ----" #. Echo #: ../src/audio_tab.c:321 msgid " Echo" msgstr " Echo" #. FUZZ #: ../src/audio_tab.c:332 msgid " Fuzz" msgstr "" #. Reverb #: ../src/audio_tab.c:344 msgid " Reverb" msgstr "" #. WahWah #: ../src/audio_tab.c:356 msgid " WahWah" msgstr "" #. Ducky #: ../src/audio_tab.c:368 msgid " Ducky" msgstr "" #: ../src/callbacks.c:108 msgid "Error" msgstr "" #: ../src/callbacks.c:132 msgid "" "\n" "You have more than one video device installed.\n" "Do you want to try another one ?\n" msgstr "" #. Devices #: ../src/callbacks.c:139 ../src/video_tab.c:103 msgid "Device:" msgstr "UrzÄ…dzenie:" #: ../src/callbacks.c:271 msgid "Save File" msgstr "Zapisz Plik" #: ../src/callbacks.c:283 msgid "File Format:" msgstr "" #: ../src/callbacks.c:454 msgid "codec values" msgstr "wartoÅ›ci kodeków" #: ../src/callbacks.c:465 msgid "" " encoder fps: \n" " (0 - use fps combobox value)" msgstr "" " enkoder fps: \n" " (0 - użycie wartoÅ›ci fps combobox)" #: ../src/callbacks.c:478 msgid " monotonic pts" msgstr "" #. bit rate #: ../src/callbacks.c:485 ../src/callbacks.c:808 msgid "bit rate: " msgstr "bit rate: " #: ../src/callbacks.c:498 msgid "qmax: " msgstr "qmaks: " #: ../src/callbacks.c:511 msgid "qmin: " msgstr "qmin: " #: ../src/callbacks.c:524 msgid "max. qdiff: " msgstr "max. qdiff: " #: ../src/callbacks.c:537 msgid "dia size: " msgstr "rozmiar dia: " #: ../src/callbacks.c:550 msgid "pre dia size: " msgstr "rozmiar pre dia: " #: ../src/callbacks.c:563 msgid "pre me: " msgstr "pre me: " #: ../src/callbacks.c:576 msgid "pre cmp: " msgstr "pre cmp: " #: ../src/callbacks.c:589 msgid "cmp: " msgstr "cmp: " #: ../src/callbacks.c:602 msgid "sub cmp: " msgstr "sub cmp: " #: ../src/callbacks.c:615 msgid "last predictor count: " msgstr "" #: ../src/callbacks.c:628 msgid "gop size: " msgstr "rozmiar gop: " #: ../src/callbacks.c:641 msgid "qcompress: " msgstr "" #: ../src/callbacks.c:654 msgid "qblur: " msgstr "qblur: " #: ../src/callbacks.c:667 msgid "subq: " msgstr "subq: " #: ../src/callbacks.c:680 msgid "framerefs: " msgstr "" #: ../src/callbacks.c:693 msgid "me method: " msgstr "" #: ../src/callbacks.c:706 msgid "mb decision: " msgstr "" #: ../src/callbacks.c:719 msgid "max B frames: " msgstr "max klatek B: " #: ../src/callbacks.c:732 msgid "num threads: " msgstr "" #: ../src/callbacks.c:795 msgid "audio codec values" msgstr "wartoÅ›ci kodeka audio" #. sample format #: ../src/callbacks.c:822 msgid "sample format: " msgstr "" #: ../src/callbacks.c:1250 msgid "start new" msgstr "" #: ../src/callbacks.c:1253 msgid "restart" msgstr "" #: ../src/callbacks.c:1255 msgid "new" msgstr "" #: ../src/callbacks.c:1257 msgid "cancel" msgstr "" #: ../src/callbacks.c:1262 msgid "" "launch new process or restart?.\n" "\n" msgstr "" #: ../src/callbacks.c:1716 ../src/guvcview.c:537 msgid "Cap. Image (I)" msgstr "Przechwycenie obrazu (I)" #. disable image controls #: ../src/callbacks.c:1727 ../src/guvcview.c:658 ../src/timers.c:101 msgid "capturing photo to" msgstr "" #: ../src/callbacks.c:1786 ../src/guvcview.c:547 msgid "Cap. Video (V)" msgstr "Przechwicenie Wideo (V)" #: ../src/callbacks.c:1812 ../src/guvcview.c:708 msgid "capturing video to" msgstr "" #. vid capture enabled from start #: ../src/callbacks.c:1845 ../src/guvcview.c:542 msgid "Stop Video (V)" msgstr "Stop Video (V)" #: ../src/callbacks.c:1901 ../src/menubar.c:66 msgid "Save Profile" msgstr "" #: ../src/callbacks.c:1914 ../src/menubar.c:65 msgid "Load Profile" msgstr "" #: ../src/create_video.c:1016 ../src/guvcview.c:700 msgid "Cap. Video" msgstr "Przechwicenie Wideo" #: ../src/guvcview.c:279 msgid "Guvcview Video Capture" msgstr "Przechwytywanie wideo Guvcview" #: ../src/guvcview.c:291 msgid "GUVCViewer Controls" msgstr "Kontrolki GUVCViewer" #. can't open device #: ../src/guvcview.c:336 msgid "" "Guvcview error:\n" "\n" "Unable to open device" msgstr "" "Błąd Guvcview:\n" "\n" "Nie można otworzyć urzÄ…dzenia" #: ../src/guvcview.c:337 msgid "" "Please make sure the camera is connected\n" "and that the correct driver is installed." msgstr "" "ProszÄ™ siÄ™ upewnić, czy kamera jest podłączona\n" "oraz czy jest zainstalowany odpowiedni sterownik." #. uvc extension controls OK, give warning and shutdown (called with --add_ctrls) #: ../src/guvcview.c:342 msgid "" "Guvcview:\n" "\n" "UVC Extension controls" msgstr "" "Guvcview:\n" "\n" "Kontrolki rozszerzenia UVC" #: ../src/guvcview.c:343 msgid "Extension controls were added to the UVC driver" msgstr "Kontrolki rozszerzenia zostaÅ‚y dodane do steronika UVC" #. uvc extension controls error - EACCES (needs root user) #: ../src/guvcview.c:350 msgid "" "Guvcview error:\n" "\n" "UVC Extension controls" msgstr "" "Błąd Guvcview:\n" "\n" "Kontrolki rozszerzenia UVC" #: ../src/guvcview.c:351 msgid "" "An error occurred while adding extension\n" "controls to the UVC driver\n" "Make sure you run guvcview as root (or sudo)." msgstr "" "WystÄ…piÅ‚ błąd podczas dodawania kontrolek\n" "rozszerzenia sterownika UVC\n" "Guvciew musi być uruchomiony w trybie root(lub sudo)." #: ../src/guvcview.c:377 ../src/guvcview.c:455 msgid "" "Guvcview error:\n" "\n" "Can't set a valid video stream for guvcview" msgstr "" "Błąd Guvcview:\n" "Nie można ustanowić prawidÅ‚owego strumienia wideo dla guvcview" #: ../src/guvcview.c:378 ../src/guvcview.c:456 msgid "" "Make sure your device driver is v4l2 compliant\n" "and that it is properly installed." msgstr "" "Upewnij siÄ™, że twoje urzÄ…dzenie jest kompatybilne z v4l2\n" "i jest poprawnie zainstalowane." #: ../src/guvcview.c:400 ../src/guvcview.c:422 msgid "" "Guvcview error:\n" "\n" "Unable to start with minimum setup" msgstr "" "Błąd Guvcview:\n" "\n" "Nie można uruchomić minimalnej konfiguracji" #: ../src/guvcview.c:401 ../src/guvcview.c:423 msgid "Please reconnect your camera." msgstr "Ponownie podłącz kamerÄ™." #: ../src/guvcview.c:430 msgid "" "Guvcview error:\n" "\n" "Couldn't query device capabilities" msgstr "" "Błąd Guvcview:\n" "\n" "Nie można pobrać listy kompatybilnych urzÄ…dzeÅ„" #: ../src/guvcview.c:431 msgid "Make sure the device driver supports v4l2." msgstr "Upewnij siÄ™, że urzÄ…dzenie obsÅ‚uguje v4l2." #: ../src/guvcview.c:435 msgid "" "Guvcview error:\n" "\n" "Read method error" msgstr "" "Błąd Guvcview:\n" "\n" "Błąd metody odczytu" #: ../src/guvcview.c:436 msgid "Please try mmap instead (--capture_method=1)." msgstr "ProszÄ™ spróbować mmap zamiast (--capture_method=1)." #: ../src/guvcview.c:444 msgid "" "Guvcview error:\n" "\n" "Unable to allocate Buffers" msgstr "" "Błąd Guvcview:\n" "\n" "Błąd alokacji buforów" #: ../src/guvcview.c:445 msgid "Please try restarting your system." msgstr "ProszÄ™ zrestartować system." #: ../src/guvcview.c:490 msgid "Image Controls" msgstr "Kontrola obrazu" #. image auto capture #: ../src/guvcview.c:533 msgid "Stop Auto (I)" msgstr "Stop Auto (I)" #: ../src/guvcview.c:644 msgid "" "Guvcview error:\n" "\n" "Unable to create Video Thread" msgstr "" "Błąd Guvcview:\n" "\n" "Nie można utworzyć wÄ…tku wideo" #: ../src/guvcview.c:645 msgid "Please report it to http://developer.berlios.de/bugs/?group_id=8179" msgstr "ProszÄ™ zgÅ‚osić na http://developer.berlios.de/bugs/?group_id=8179" #: ../src/img_controls.c:121 msgid "Auto Focus (continuous)" msgstr "" #: ../src/img_controls.c:122 msgid "set Focus" msgstr "" #: ../src/image_format.c:35 msgid "Jpeg (jpg)" msgstr "" #: ../src/image_format.c:41 msgid "Bitmap (Bmp)" msgstr "" #: ../src/image_format.c:47 msgid "Portable Network Graphics (Png)" msgstr "" #: ../src/image_format.c:53 msgid "Raw Image (raw)" msgstr "" #. controls menu #: ../src/menubar.c:64 msgid "Settings" msgstr "" #: ../src/menubar.c:67 msgid "Hardware Defaults" msgstr "" #: ../src/menubar.c:75 msgid "Camera Button" msgstr "" #: ../src/menubar.c:79 msgid "Capture Image" msgstr "" #: ../src/menubar.c:84 msgid "Capture Video" msgstr "" #. video menu #: ../src/menubar.c:144 ../src/video_tab.c:87 msgid "Video" msgstr "" #: ../src/menubar.c:145 ../src/menubar.c:231 msgid "File" msgstr "" #: ../src/menubar.c:146 ../src/menubar.c:232 msgid "Increment Filename" msgstr "" #: ../src/menubar.c:164 msgid "Video Codec" msgstr "" #: ../src/menubar.c:187 msgid "Video Codec Properties" msgstr "" #: ../src/menubar.c:194 msgid "Audio Codec" msgstr "" #: ../src/menubar.c:215 msgid "Audio Codec Properties" msgstr "" #. photo menu #: ../src/menubar.c:230 msgid "Photo" msgstr "" #: ../src/options.c:752 msgid "Prints version" msgstr "" #: ../src/options.c:753 msgid "Displays debug information" msgstr "WyÅ›wietlanie informacji debugowania" #: ../src/options.c:754 msgid "Video Device to use [default: /dev/video0]" msgstr "" #: ../src/options.c:755 msgid "Exit after adding UVC extension controls (needs root/sudo)" msgstr "" #: ../src/options.c:756 msgid "Don't stream video (image controls only)" msgstr "" #: ../src/options.c:757 msgid "Don't display a GUI" msgstr "" #: ../src/options.c:758 msgid "Capture method (1-mmap (default) 2-read)" msgstr "" #: ../src/options.c:759 msgid "Configuration file" msgstr "" #: ../src/options.c:760 msgid "Hardware accelaration (enable(1) | disable(0))" msgstr "" #: ../src/options.c:761 msgid "" "Pixel " "format(mjpg|jpeg|yuyv|yvyu|uyvy|yyuv|yu12|yv12|nv12|nv21|nv16|nv61|y41p|grey|" "y10b|y16 |s501|s505|s508|gbrg|grbg|ba81|rggb|bgr3|rgb3)" msgstr "" #: ../src/options.c:762 msgid "Frame size, default: 640x480" msgstr "" #: ../src/options.c:763 msgid "Image File name" msgstr "" #: ../src/options.c:764 msgid "Image capture interval in seconds" msgstr "" #: ../src/options.c:765 msgid "Number of Pictures to capture" msgstr "" #: ../src/options.c:766 msgid "Video File name (capture from start)" msgstr "" #: ../src/options.c:767 msgid "Video capture time (in seconds)" msgstr "" #: ../src/options.c:768 msgid "Exits guvcview after closing video" msgstr "" #: ../src/options.c:769 msgid "Number of initial frames to skip" msgstr "" #: ../src/options.c:770 msgid "Show FPS value (enable(1) | disable (0))" msgstr "" #: ../src/options.c:771 msgid "Load Profile at start" msgstr "" #: ../src/options.c:777 msgid "- local options" msgstr "" #. gdk_threads_enter(); #: ../src/timers.c:119 msgid "Cap. Image" msgstr "Przechwycenie obrazu" #: ../src/timers.c:217 msgid "Guvcview Warning:" msgstr "" #: ../src/timers.c:217 msgid "Not enough free space left on disk" msgstr "" #: ../src/v4l2_controls.c:711 msgid "Left" msgstr "Lewy" #: ../src/v4l2_controls.c:712 msgid "Right" msgstr "Prawy" #: ../src/v4l2_controls.c:716 msgid "Down" msgstr "Dół" #: ../src/v4l2_controls.c:717 msgid "Up" msgstr "Góra" #: ../src/v4l2_controls.c:762 msgid "Off" msgstr "" #: ../src/v4l2_controls.c:762 msgid "On" msgstr "" #: ../src/v4l2_controls.c:762 msgid "Blinking" msgstr "" #: ../src/v4l2_controls.c:762 msgid "Auto" msgstr "" #. turn it into a menu control #: ../src/v4l2_controls.c:813 msgid "8 bit" msgstr "" #: ../src/v4l2_controls.c:813 msgid "12 bit" msgstr "" #: ../src/v4l2_dyna_ctrls.c:96 msgid "Pan (relative)" msgstr "" #: ../src/v4l2_dyna_ctrls.c:109 msgid "Tilt (relative)" msgstr "" #: ../src/v4l2_dyna_ctrls.c:122 msgid "Pan Reset" msgstr "" #: ../src/v4l2_dyna_ctrls.c:135 msgid "Tilt Reset" msgstr "" #: ../src/v4l2_dyna_ctrls.c:148 msgid "Focus (absolute)" msgstr "" #: ../src/v4l2_dyna_ctrls.c:161 msgid "LED1 Mode" msgstr "" #: ../src/v4l2_dyna_ctrls.c:174 msgid "LED1 Frequency" msgstr "" #: ../src/v4l2_dyna_ctrls.c:187 msgid "Disable video processing" msgstr "" #: ../src/v4l2_dyna_ctrls.c:200 msgid "Raw bits per pixel" msgstr "" #. needed only for language files (not used) #. V4L2 control strings #: ../src/v4l2uvc.c:56 msgid "User Controls" msgstr "Kontrolki użytkownika" #: ../src/v4l2uvc.c:57 msgid "Brightness" msgstr "Jasność:" #: ../src/v4l2uvc.c:58 msgid "Contrast" msgstr "Kontrast" #: ../src/v4l2uvc.c:59 msgid "Hue" msgstr "Barwa:" #: ../src/v4l2uvc.c:60 msgid "Saturation" msgstr "Nasycenie" #: ../src/v4l2uvc.c:61 msgid "Sharpness" msgstr "Ostrość" #: ../src/v4l2uvc.c:62 msgid "Gamma" msgstr "Gamma" #: ../src/v4l2uvc.c:63 msgid "Backlight Compensation" msgstr "Kompensacja oÅ›wietlenia tÅ‚a" #: ../src/v4l2uvc.c:64 msgid "Power Line Frequency" msgstr "CzÄ™stotliwość lini zasilania" #: ../src/v4l2uvc.c:65 msgid "Hue, Automatic" msgstr "Barwa: Automatycznie" #: ../src/v4l2uvc.c:66 msgid "Focus, Auto" msgstr "Ostrość, Auto" #: ../src/v4l2uvc.c:67 msgid "Manual Mode" msgstr "Tryb rÄ™czny" #: ../src/v4l2uvc.c:68 msgid "Auto Mode" msgstr "Tryb automatyczny" #: ../src/v4l2uvc.c:69 msgid "Shutter Priority Mode" msgstr "Priorytet migwaki" #: ../src/v4l2uvc.c:70 msgid "Aperture Priority Mode" msgstr "Priorytet przysÅ‚ony" #: ../src/v4l2uvc.c:71 msgid "Black Level" msgstr "Poziom czerni" #: ../src/v4l2uvc.c:72 msgid "White Balance, Automatic" msgstr "Automatyczny balans bieli" #: ../src/v4l2uvc.c:73 msgid "Do White Balance" msgstr "Balans bieli" #: ../src/v4l2uvc.c:74 msgid "Red Balance" msgstr "Balans czerwieni" #: ../src/v4l2uvc.c:75 msgid "Blue Balance" msgstr "Balans niebieskiego" #: ../src/v4l2uvc.c:76 msgid "Exposure" msgstr "Ekspozycja" #: ../src/v4l2uvc.c:77 msgid "Gain, Automatic" msgstr "Automatyczna ziarnistość" #: ../src/v4l2uvc.c:78 msgid "Gain" msgstr "Wzmocnienie" #: ../src/v4l2uvc.c:79 msgid "Horizontal Flip" msgstr "Odbicie poziome" #: ../src/v4l2uvc.c:80 msgid "Vertical Flip" msgstr "Odbicie pionowe" #: ../src/v4l2uvc.c:81 msgid "Horizontal Center" msgstr "WyÅ›rodkowanie poziome" #: ../src/v4l2uvc.c:82 msgid "Vertical Center" msgstr "WyÅ›rodkowanie pionowe" #: ../src/v4l2uvc.c:83 msgid "Chroma AGC" msgstr "Automatyczna kontrola kluczowania" #: ../src/v4l2uvc.c:84 msgid "Color Killer" msgstr "UsuniÄ™cie koloru" #: ../src/v4l2uvc.c:85 msgid "Color Effects" msgstr "Efekty kolorów" #. CAMERA CLASS control strings #: ../src/v4l2uvc.c:88 msgid "Camera Controls" msgstr "Kontrola kamery" #: ../src/v4l2uvc.c:89 msgid "Auto Exposure" msgstr "Automatyczna ekspozycja" #: ../src/v4l2uvc.c:90 msgid "Exposure Time, Absolute" msgstr "Absolutny czas ekspozycji" #: ../src/v4l2uvc.c:91 msgid "Exposure, Dynamic Framerate" msgstr "dynamiczna iloÅ›c klatek/s ekspozycji" #: ../src/v4l2uvc.c:92 msgid "Pan, Relative" msgstr "WzglÄ™dne Pan" #: ../src/v4l2uvc.c:93 msgid "Tilt, Relative" msgstr "Przechylenie wzglÄ™dne" #: ../src/v4l2uvc.c:94 msgid "Pan, Reset" msgstr "Reset Pan" #: ../src/v4l2uvc.c:95 msgid "Tilt, Reset" msgstr "Reset nachylenia" #: ../src/v4l2uvc.c:96 msgid "Pan, Absolute" msgstr "Absolutny Pan" #: ../src/v4l2uvc.c:98 msgid "Focus, Absolute" msgstr "OstroÅ›c absolutna" #: ../src/v4l2uvc.c:99 msgid "Focus, Relative" msgstr "Ostrość wzglÄ™dna" #: ../src/v4l2uvc.c:100 msgid "Focus, Automatic" msgstr "Automatyczna ostrość" #: ../src/v4l2uvc.c:101 msgid "Zoom, Absolute" msgstr "Absolutny zoom" #: ../src/v4l2uvc.c:102 msgid "Zoom, Relative" msgstr "WzglÄ™dny zoom" #: ../src/v4l2uvc.c:103 msgid "Zoom, Continuous" msgstr "Zoom ciÄ…gÅ‚y" #: ../src/v4l2uvc.c:104 msgid "Privacy" msgstr "Prywatność" #. UVC specific control strings #: ../src/v4l2uvc.c:107 msgid "Exposure, Auto" msgstr "Auto ekspozycja" #: ../src/v4l2uvc.c:108 msgid "Exposure, Auto Priority" msgstr "Auto priorytet ekspozycji" #: ../src/v4l2uvc.c:109 msgid "Exposure (Absolute)" msgstr "Ekspozycja (absolutna)" #: ../src/v4l2uvc.c:110 msgid "White Balance Temperature, Auto" msgstr "Automatyczny balans bieli temperatury" #: ../src/v4l2uvc.c:111 msgid "White Balance Temperature" msgstr "Temperatura balansu bieli" #: ../src/v4l2uvc.c:112 msgid "White Balance Component, Auto" msgstr "Automatyczny komponent balansu bieli" #: ../src/v4l2uvc.c:113 msgid "White Balance Blue Component" msgstr "Komponent balansu bieli - niebieskiego" #: ../src/v4l2uvc.c:114 msgid "White Balance Red Component" msgstr "Komponent balansu bieli - czerwonego" #. libwebcam specific control strings #: ../src/v4l2uvc.c:117 msgid "Focus" msgstr "Ostrość" #: ../src/v4l2uvc.c:118 msgid "Focus (Absolute)" msgstr "Ostrość (absolutna)" #: ../src/vcodecs.c:63 msgid "MJPG - compressed" msgstr "" #: ../src/vcodecs.c:99 msgid "YUY2 - uncomp YUV" msgstr "" #: ../src/vcodecs.c:135 msgid "RGB - uncomp BMP" msgstr "" #: ../src/vcodecs.c:171 msgid "MPEG video 1" msgstr "MPEG video 1" #: ../src/vcodecs.c:207 msgid "FLV1 - flash video 1" msgstr "FLV1 - flash video 1" #: ../src/vcodecs.c:243 msgid "WMV1 - win. med. video 7" msgstr "WMV1 - win. med. video 7" #: ../src/vcodecs.c:279 msgid "MPG2 - MPG2 format" msgstr "MPG2 - MPG2 format" #: ../src/vcodecs.c:315 msgid "MS MP4 V3" msgstr "MS MP4 V3" #: ../src/vcodecs.c:351 msgid "MPEG4-ASP" msgstr "MPEG4-ASP" #: ../src/vcodecs.c:387 msgid "MPEG4-AVC (H264)" msgstr "MPEG4-AVC (H264)" #: ../src/vcodecs.c:427 msgid "VP8 (VP8)" msgstr "" #: ../src/vcodecs.c:463 msgid "Theora (ogg theora)" msgstr "" #: ../src/video_format.c:43 msgid "AVI - avi format" msgstr "" #: ../src/video_format.c:52 msgid "MKV - Matroska format" msgstr "" #: ../src/video_format.c:61 msgid "WEBM - format" msgstr "" #: ../src/video_tab.c:208 msgid "Frame Rate:" msgstr "Klatki na sekundÄ™:" #: ../src/video_tab.c:215 msgid " Show" msgstr " Pokaz" #: ../src/video_tab.c:237 msgid "Resolution:" msgstr "Rozdzielczość:" #: ../src/video_tab.c:263 msgid "Camera Output:" msgstr "" #: ../src/video_tab.c:285 msgid "Apply" msgstr "Zastosuj" #: ../src/video_tab.c:292 msgid "Quality:" msgstr "Jakość:" #: ../src/video_tab.c:302 msgid "---- Video Filters ----" msgstr "---- Filtry wideo ----" #. Mirror #: ../src/video_tab.c:321 msgid " Mirror" msgstr "" #. Upturn #: ../src/video_tab.c:332 msgid " Invert" msgstr " Odwrócenie" #. Negate #: ../src/video_tab.c:343 msgid " Negative" msgstr " Negatyw" #. Mono #: ../src/video_tab.c:354 msgid " Mono" msgstr " Mono" #. Pieces #: ../src/video_tab.c:366 msgid " Pieces" msgstr "" #. Particles #: ../src/video_tab.c:378 msgid " Particles" msgstr "" guvcview-src-1.7.1/po/da.po0000664000175000017500000004372212173235416014546 0ustar paulopaulo# Danish translation for guvcview # Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 # This file is distributed under the same license as the guvcview package. # FIRST AUTHOR , 2009. # msgid "" msgstr "" "Project-Id-Version: guvcview\n" "Report-Msgid-Bugs-To: pj.assis@gmail.com\n" "POT-Creation-Date: 2013-07-16 12:53+0000\n" "PO-Revision-Date: 2013-02-25 05:34+0000\n" "Last-Translator: Paulo Assis \n" "Language-Team: Danish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2013-07-22 13:32+0000\n" "X-Generator: Launchpad (build 16696)\n" "Language: da\n" #: ../data/guvcview.desktop.in.in.h:1 msgid "guvcview" msgstr "" #: ../data/guvcview.desktop.in.in.h:2 msgid "GTK UVC video viewer" msgstr "" #: ../data/guvcview.desktop.in.in.h:3 msgid "A video viewer and capturer for the linux uvc driver" msgstr "" #: ../src/acodecs.c:59 msgid "PCM - uncompressed (16 bit)" msgstr "" #: ../src/acodecs.c:76 msgid "MPEG2 - (lavc)" msgstr "" #: ../src/acodecs.c:93 msgid "MP3 - (lavc)" msgstr "" #: ../src/acodecs.c:110 msgid "Dolby AC3 - (lavc)" msgstr "" #: ../src/acodecs.c:127 msgid "ACC Low - (faac)" msgstr "" #: ../src/acodecs.c:144 msgid "Vorbis" msgstr "" #: ../src/audio_tab.c:80 msgid "Audio" msgstr "" #: ../src/audio_tab.c:98 msgid " Sound" msgstr " Lyd" #. VU meter on the image (OSD) #: ../src/audio_tab.c:109 msgid " Show VU meter" msgstr "" #: ../src/audio_tab.c:121 msgid "Audio API:" msgstr "" #: ../src/audio_tab.c:132 msgid "PORTAUDIO" msgstr "" #: ../src/audio_tab.c:133 msgid "PULSEAUDIO" msgstr "" #: ../src/audio_tab.c:149 ../src/audio_tab.c:172 msgid "Input Device:" msgstr "Input udstyr:" #: ../src/audio_tab.c:182 ../src/audio_tab.c:214 msgid "Dev. Default" msgstr "" #: ../src/audio_tab.c:204 msgid "Sample Rate:" msgstr "" #: ../src/audio_tab.c:215 msgid "1 - mono" msgstr "1 - mono" #: ../src/audio_tab.c:216 msgid "2 - stereo" msgstr "2 - stereo" #: ../src/audio_tab.c:251 msgid "Channels:" msgstr "Kanaler:" #: ../src/audio_tab.c:302 msgid "---- Audio Effects ----" msgstr "" #. Echo #: ../src/audio_tab.c:321 msgid " Echo" msgstr "" #. FUZZ #: ../src/audio_tab.c:332 msgid " Fuzz" msgstr "" #. Reverb #: ../src/audio_tab.c:344 msgid " Reverb" msgstr "" #. WahWah #: ../src/audio_tab.c:356 msgid " WahWah" msgstr "" #. Ducky #: ../src/audio_tab.c:368 msgid " Ducky" msgstr "" #: ../src/callbacks.c:108 msgid "Error" msgstr "" #: ../src/callbacks.c:132 msgid "" "\n" "You have more than one video device installed.\n" "Do you want to try another one ?\n" msgstr "" #. Devices #: ../src/callbacks.c:139 ../src/video_tab.c:103 msgid "Device:" msgstr "Input udstyr:" #: ../src/callbacks.c:271 msgid "Save File" msgstr "Gem fil" #: ../src/callbacks.c:283 msgid "File Format:" msgstr "" #: ../src/callbacks.c:454 msgid "codec values" msgstr "" #: ../src/callbacks.c:465 msgid "" " encoder fps: \n" " (0 - use fps combobox value)" msgstr "" #: ../src/callbacks.c:478 msgid " monotonic pts" msgstr "" #. bit rate #: ../src/callbacks.c:485 ../src/callbacks.c:808 msgid "bit rate: " msgstr "" #: ../src/callbacks.c:498 msgid "qmax: " msgstr "" #: ../src/callbacks.c:511 msgid "qmin: " msgstr "" #: ../src/callbacks.c:524 msgid "max. qdiff: " msgstr "" #: ../src/callbacks.c:537 msgid "dia size: " msgstr "" #: ../src/callbacks.c:550 msgid "pre dia size: " msgstr "" #: ../src/callbacks.c:563 msgid "pre me: " msgstr "" #: ../src/callbacks.c:576 msgid "pre cmp: " msgstr "" #: ../src/callbacks.c:589 msgid "cmp: " msgstr "" #: ../src/callbacks.c:602 msgid "sub cmp: " msgstr "" #: ../src/callbacks.c:615 msgid "last predictor count: " msgstr "" #: ../src/callbacks.c:628 msgid "gop size: " msgstr "" #: ../src/callbacks.c:641 msgid "qcompress: " msgstr "" #: ../src/callbacks.c:654 msgid "qblur: " msgstr "" #: ../src/callbacks.c:667 msgid "subq: " msgstr "" #: ../src/callbacks.c:680 msgid "framerefs: " msgstr "" #: ../src/callbacks.c:693 msgid "me method: " msgstr "" #: ../src/callbacks.c:706 msgid "mb decision: " msgstr "" #: ../src/callbacks.c:719 msgid "max B frames: " msgstr "" #: ../src/callbacks.c:732 msgid "num threads: " msgstr "" #: ../src/callbacks.c:795 msgid "audio codec values" msgstr "" #. sample format #: ../src/callbacks.c:822 msgid "sample format: " msgstr "" #: ../src/callbacks.c:1250 msgid "start new" msgstr "" #: ../src/callbacks.c:1253 msgid "restart" msgstr "" #: ../src/callbacks.c:1255 msgid "new" msgstr "" #: ../src/callbacks.c:1257 msgid "cancel" msgstr "" #: ../src/callbacks.c:1262 msgid "" "launch new process or restart?.\n" "\n" msgstr "" #: ../src/callbacks.c:1716 ../src/guvcview.c:537 msgid "Cap. Image (I)" msgstr "" #. disable image controls #: ../src/callbacks.c:1727 ../src/guvcview.c:658 ../src/timers.c:101 msgid "capturing photo to" msgstr "" #: ../src/callbacks.c:1786 ../src/guvcview.c:547 msgid "Cap. Video (V)" msgstr "" #: ../src/callbacks.c:1812 ../src/guvcview.c:708 msgid "capturing video to" msgstr "" #. vid capture enabled from start #: ../src/callbacks.c:1845 ../src/guvcview.c:542 msgid "Stop Video (V)" msgstr "" #: ../src/callbacks.c:1901 ../src/menubar.c:66 msgid "Save Profile" msgstr "" #: ../src/callbacks.c:1914 ../src/menubar.c:65 msgid "Load Profile" msgstr "" #: ../src/create_video.c:1016 ../src/guvcview.c:700 msgid "Cap. Video" msgstr "" #: ../src/guvcview.c:279 msgid "Guvcview Video Capture" msgstr "" #: ../src/guvcview.c:291 msgid "GUVCViewer Controls" msgstr "GUVCViewer kontroller" #. can't open device #: ../src/guvcview.c:336 msgid "" "Guvcview error:\n" "\n" "Unable to open device" msgstr "" "Guvcview fejl:\n" "\n" "Kunne ikke Ã¥bne udstyr" #: ../src/guvcview.c:337 msgid "" "Please make sure the camera is connected\n" "and that the correct driver is installed." msgstr "" #. uvc extension controls OK, give warning and shutdown (called with --add_ctrls) #: ../src/guvcview.c:342 msgid "" "Guvcview:\n" "\n" "UVC Extension controls" msgstr "" #: ../src/guvcview.c:343 msgid "Extension controls were added to the UVC driver" msgstr "" #. uvc extension controls error - EACCES (needs root user) #: ../src/guvcview.c:350 msgid "" "Guvcview error:\n" "\n" "UVC Extension controls" msgstr "" #: ../src/guvcview.c:351 msgid "" "An error occurred while adding extension\n" "controls to the UVC driver\n" "Make sure you run guvcview as root (or sudo)." msgstr "" #: ../src/guvcview.c:377 ../src/guvcview.c:455 msgid "" "Guvcview error:\n" "\n" "Can't set a valid video stream for guvcview" msgstr "" #: ../src/guvcview.c:378 ../src/guvcview.c:456 msgid "" "Make sure your device driver is v4l2 compliant\n" "and that it is properly installed." msgstr "" #: ../src/guvcview.c:400 ../src/guvcview.c:422 msgid "" "Guvcview error:\n" "\n" "Unable to start with minimum setup" msgstr "" "Guvcview fejl:\n" "\n" "Kunne ikke starte pÃ¥ minimum setup" #: ../src/guvcview.c:401 ../src/guvcview.c:423 msgid "Please reconnect your camera." msgstr "Vær venlig at gentilslutte dit kamera." #: ../src/guvcview.c:430 msgid "" "Guvcview error:\n" "\n" "Couldn't query device capabilities" msgstr "" #: ../src/guvcview.c:431 msgid "Make sure the device driver supports v4l2." msgstr "" #: ../src/guvcview.c:435 msgid "" "Guvcview error:\n" "\n" "Read method error" msgstr "" #: ../src/guvcview.c:436 msgid "Please try mmap instead (--capture_method=1)." msgstr "" #: ../src/guvcview.c:444 msgid "" "Guvcview error:\n" "\n" "Unable to allocate Buffers" msgstr "" #: ../src/guvcview.c:445 msgid "Please try restarting your system." msgstr "Prøv venligst at genstarte dit system." #: ../src/guvcview.c:490 msgid "Image Controls" msgstr "Billed kontroller" #. image auto capture #: ../src/guvcview.c:533 msgid "Stop Auto (I)" msgstr "" #: ../src/guvcview.c:644 msgid "" "Guvcview error:\n" "\n" "Unable to create Video Thread" msgstr "" "Guvcview fejl:\n" "\n" "Kunne ikke skabe video trÃ¥d" #: ../src/guvcview.c:645 msgid "Please report it to http://developer.berlios.de/bugs/?group_id=8179" msgstr "" "Rapporter det venligst til http://developer.berlios.de/bugs/?group_id=8179" #: ../src/img_controls.c:121 msgid "Auto Focus (continuous)" msgstr "Auto fokus (fortsat)" #: ../src/img_controls.c:122 msgid "set Focus" msgstr "sæt fokus" #: ../src/image_format.c:35 msgid "Jpeg (jpg)" msgstr "" #: ../src/image_format.c:41 msgid "Bitmap (Bmp)" msgstr "" #: ../src/image_format.c:47 msgid "Portable Network Graphics (Png)" msgstr "" #: ../src/image_format.c:53 msgid "Raw Image (raw)" msgstr "" #. controls menu #: ../src/menubar.c:64 msgid "Settings" msgstr "" #: ../src/menubar.c:67 msgid "Hardware Defaults" msgstr "" #: ../src/menubar.c:75 msgid "Camera Button" msgstr "" #: ../src/menubar.c:79 msgid "Capture Image" msgstr "" #: ../src/menubar.c:84 msgid "Capture Video" msgstr "" #. video menu #: ../src/menubar.c:144 ../src/video_tab.c:87 msgid "Video" msgstr "" #: ../src/menubar.c:145 ../src/menubar.c:231 msgid "File" msgstr "" #: ../src/menubar.c:146 ../src/menubar.c:232 msgid "Increment Filename" msgstr "" #: ../src/menubar.c:164 msgid "Video Codec" msgstr "" #: ../src/menubar.c:187 msgid "Video Codec Properties" msgstr "" #: ../src/menubar.c:194 msgid "Audio Codec" msgstr "" #: ../src/menubar.c:215 msgid "Audio Codec Properties" msgstr "" #. photo menu #: ../src/menubar.c:230 msgid "Photo" msgstr "" #: ../src/options.c:752 msgid "Prints version" msgstr "" #: ../src/options.c:753 msgid "Displays debug information" msgstr "Vis debug information" #: ../src/options.c:754 msgid "Video Device to use [default: /dev/video0]" msgstr "Video udstyr at benyttet [default: /dev/video0]" #: ../src/options.c:755 msgid "Exit after adding UVC extension controls (needs root/sudo)" msgstr "" #: ../src/options.c:756 msgid "Don't stream video (image controls only)" msgstr "" #: ../src/options.c:757 msgid "Don't display a GUI" msgstr "" #: ../src/options.c:758 msgid "Capture method (1-mmap (default) 2-read)" msgstr "" #: ../src/options.c:759 msgid "Configuration file" msgstr "" #: ../src/options.c:760 msgid "Hardware accelaration (enable(1) | disable(0))" msgstr "" #: ../src/options.c:761 msgid "" "Pixel " "format(mjpg|jpeg|yuyv|yvyu|uyvy|yyuv|yu12|yv12|nv12|nv21|nv16|nv61|y41p|grey|" "y10b|y16 |s501|s505|s508|gbrg|grbg|ba81|rggb|bgr3|rgb3)" msgstr "" #: ../src/options.c:762 msgid "Frame size, default: 640x480" msgstr "Ramme størrelse, standard: 640x480" #: ../src/options.c:763 msgid "Image File name" msgstr "Billedfil navn" #: ../src/options.c:764 msgid "Image capture interval in seconds" msgstr "" #: ../src/options.c:765 msgid "Number of Pictures to capture" msgstr "" #: ../src/options.c:766 msgid "Video File name (capture from start)" msgstr "" #: ../src/options.c:767 msgid "Video capture time (in seconds)" msgstr "" #: ../src/options.c:768 msgid "Exits guvcview after closing video" msgstr "" #: ../src/options.c:769 msgid "Number of initial frames to skip" msgstr "" #: ../src/options.c:770 msgid "Show FPS value (enable(1) | disable (0))" msgstr "" #: ../src/options.c:771 msgid "Load Profile at start" msgstr "Indlæs profil ved start" #: ../src/options.c:777 msgid "- local options" msgstr "- lokale valgmuligheder" #. gdk_threads_enter(); #: ../src/timers.c:119 msgid "Cap. Image" msgstr "" #: ../src/timers.c:217 msgid "Guvcview Warning:" msgstr "" #: ../src/timers.c:217 msgid "Not enough free space left on disk" msgstr "" #: ../src/v4l2_controls.c:711 msgid "Left" msgstr "Venstre" #: ../src/v4l2_controls.c:712 msgid "Right" msgstr "Højre" #: ../src/v4l2_controls.c:716 msgid "Down" msgstr "Ned" #: ../src/v4l2_controls.c:717 msgid "Up" msgstr "Op" #: ../src/v4l2_controls.c:762 msgid "Off" msgstr "" #: ../src/v4l2_controls.c:762 msgid "On" msgstr "" #: ../src/v4l2_controls.c:762 msgid "Blinking" msgstr "" #: ../src/v4l2_controls.c:762 msgid "Auto" msgstr "" #. turn it into a menu control #: ../src/v4l2_controls.c:813 msgid "8 bit" msgstr "" #: ../src/v4l2_controls.c:813 msgid "12 bit" msgstr "" #: ../src/v4l2_dyna_ctrls.c:96 msgid "Pan (relative)" msgstr "" #: ../src/v4l2_dyna_ctrls.c:109 msgid "Tilt (relative)" msgstr "" #: ../src/v4l2_dyna_ctrls.c:122 msgid "Pan Reset" msgstr "" #: ../src/v4l2_dyna_ctrls.c:135 msgid "Tilt Reset" msgstr "" #: ../src/v4l2_dyna_ctrls.c:148 msgid "Focus (absolute)" msgstr "Fokus (absolut)" #: ../src/v4l2_dyna_ctrls.c:161 msgid "LED1 Mode" msgstr "LED1 tilstand" #: ../src/v4l2_dyna_ctrls.c:174 msgid "LED1 Frequency" msgstr "LED1 frekvens" #: ../src/v4l2_dyna_ctrls.c:187 msgid "Disable video processing" msgstr "SlÃ¥ video processer fra" #: ../src/v4l2_dyna_ctrls.c:200 msgid "Raw bits per pixel" msgstr "RÃ¥ bits pr. pixel" #. needed only for language files (not used) #. V4L2 control strings #: ../src/v4l2uvc.c:56 msgid "User Controls" msgstr "" #: ../src/v4l2uvc.c:57 msgid "Brightness" msgstr "Lysstyrke" #: ../src/v4l2uvc.c:58 msgid "Contrast" msgstr "Kontrast" #: ../src/v4l2uvc.c:59 msgid "Hue" msgstr "Farvetone" #: ../src/v4l2uvc.c:60 msgid "Saturation" msgstr "Farvemætning" #: ../src/v4l2uvc.c:61 msgid "Sharpness" msgstr "Skarphed" #: ../src/v4l2uvc.c:62 msgid "Gamma" msgstr "Gamma" #: ../src/v4l2uvc.c:63 msgid "Backlight Compensation" msgstr "Baglys kompensation" #: ../src/v4l2uvc.c:64 msgid "Power Line Frequency" msgstr "" #: ../src/v4l2uvc.c:65 msgid "Hue, Automatic" msgstr "" #: ../src/v4l2uvc.c:66 msgid "Focus, Auto" msgstr "Fokus, auto" #: ../src/v4l2uvc.c:67 msgid "Manual Mode" msgstr "Manuel tilstand" #: ../src/v4l2uvc.c:68 msgid "Auto Mode" msgstr "Auto tilstand" #: ../src/v4l2uvc.c:69 msgid "Shutter Priority Mode" msgstr "" #: ../src/v4l2uvc.c:70 msgid "Aperture Priority Mode" msgstr "" #: ../src/v4l2uvc.c:71 msgid "Black Level" msgstr "" #: ../src/v4l2uvc.c:72 msgid "White Balance, Automatic" msgstr "" #: ../src/v4l2uvc.c:73 msgid "Do White Balance" msgstr "" #: ../src/v4l2uvc.c:74 msgid "Red Balance" msgstr "" #: ../src/v4l2uvc.c:75 msgid "Blue Balance" msgstr "" #: ../src/v4l2uvc.c:76 msgid "Exposure" msgstr "" #: ../src/v4l2uvc.c:77 msgid "Gain, Automatic" msgstr "" #: ../src/v4l2uvc.c:78 msgid "Gain" msgstr "Forhøjelse" #: ../src/v4l2uvc.c:79 msgid "Horizontal Flip" msgstr "" #: ../src/v4l2uvc.c:80 msgid "Vertical Flip" msgstr "" #: ../src/v4l2uvc.c:81 msgid "Horizontal Center" msgstr "" #: ../src/v4l2uvc.c:82 msgid "Vertical Center" msgstr "" #: ../src/v4l2uvc.c:83 msgid "Chroma AGC" msgstr "" #: ../src/v4l2uvc.c:84 msgid "Color Killer" msgstr "" #: ../src/v4l2uvc.c:85 msgid "Color Effects" msgstr "" #. CAMERA CLASS control strings #: ../src/v4l2uvc.c:88 msgid "Camera Controls" msgstr "" #: ../src/v4l2uvc.c:89 msgid "Auto Exposure" msgstr "" #: ../src/v4l2uvc.c:90 msgid "Exposure Time, Absolute" msgstr "" #: ../src/v4l2uvc.c:91 msgid "Exposure, Dynamic Framerate" msgstr "" #: ../src/v4l2uvc.c:92 msgid "Pan, Relative" msgstr "" #: ../src/v4l2uvc.c:93 msgid "Tilt, Relative" msgstr "" #: ../src/v4l2uvc.c:94 msgid "Pan, Reset" msgstr "" #: ../src/v4l2uvc.c:95 msgid "Tilt, Reset" msgstr "" #: ../src/v4l2uvc.c:96 msgid "Pan, Absolute" msgstr "" #: ../src/v4l2uvc.c:98 msgid "Focus, Absolute" msgstr "" #: ../src/v4l2uvc.c:99 msgid "Focus, Relative" msgstr "" #: ../src/v4l2uvc.c:100 msgid "Focus, Automatic" msgstr "" #: ../src/v4l2uvc.c:101 msgid "Zoom, Absolute" msgstr "" #: ../src/v4l2uvc.c:102 msgid "Zoom, Relative" msgstr "" #: ../src/v4l2uvc.c:103 msgid "Zoom, Continuous" msgstr "" #: ../src/v4l2uvc.c:104 msgid "Privacy" msgstr "" #. UVC specific control strings #: ../src/v4l2uvc.c:107 msgid "Exposure, Auto" msgstr "" #: ../src/v4l2uvc.c:108 msgid "Exposure, Auto Priority" msgstr "" #: ../src/v4l2uvc.c:109 msgid "Exposure (Absolute)" msgstr "" #: ../src/v4l2uvc.c:110 msgid "White Balance Temperature, Auto" msgstr "Hvid balance temperatur, auto" #: ../src/v4l2uvc.c:111 msgid "White Balance Temperature" msgstr "Hvid balance temperatur" #: ../src/v4l2uvc.c:112 msgid "White Balance Component, Auto" msgstr "Hvid balance komponent, auto" #: ../src/v4l2uvc.c:113 msgid "White Balance Blue Component" msgstr "Hvid balance blÃ¥ komponent" #: ../src/v4l2uvc.c:114 msgid "White Balance Red Component" msgstr "Hvid balance rød komponent" #. libwebcam specific control strings #: ../src/v4l2uvc.c:117 msgid "Focus" msgstr "" #: ../src/v4l2uvc.c:118 msgid "Focus (Absolute)" msgstr "" #: ../src/vcodecs.c:63 msgid "MJPG - compressed" msgstr "MJPG - komprimeret" #: ../src/vcodecs.c:99 msgid "YUY2 - uncomp YUV" msgstr "YUY2 - ukomprimeret YUV" #: ../src/vcodecs.c:135 msgid "RGB - uncomp BMP" msgstr "RGB - ukomprimeret BMP" #: ../src/vcodecs.c:171 msgid "MPEG video 1" msgstr "" #: ../src/vcodecs.c:207 msgid "FLV1 - flash video 1" msgstr "" #: ../src/vcodecs.c:243 msgid "WMV1 - win. med. video 7" msgstr "" #: ../src/vcodecs.c:279 msgid "MPG2 - MPG2 format" msgstr "" #: ../src/vcodecs.c:315 msgid "MS MP4 V3" msgstr "" #: ../src/vcodecs.c:351 msgid "MPEG4-ASP" msgstr "" #: ../src/vcodecs.c:387 msgid "MPEG4-AVC (H264)" msgstr "" #: ../src/vcodecs.c:427 msgid "VP8 (VP8)" msgstr "" #: ../src/vcodecs.c:463 msgid "Theora (ogg theora)" msgstr "" #: ../src/video_format.c:43 msgid "AVI - avi format" msgstr "" #: ../src/video_format.c:52 msgid "MKV - Matroska format" msgstr "" #: ../src/video_format.c:61 msgid "WEBM - format" msgstr "" #: ../src/video_tab.c:208 msgid "Frame Rate:" msgstr "Billedrate:" #: ../src/video_tab.c:215 msgid " Show" msgstr " Vis" #: ../src/video_tab.c:237 msgid "Resolution:" msgstr "Opløsning:" #: ../src/video_tab.c:263 msgid "Camera Output:" msgstr "Kamera output:" #: ../src/video_tab.c:285 msgid "Apply" msgstr "" #: ../src/video_tab.c:292 msgid "Quality:" msgstr "" #: ../src/video_tab.c:302 msgid "---- Video Filters ----" msgstr "---- Video filtre ----" #. Mirror #: ../src/video_tab.c:321 msgid " Mirror" msgstr " Spejl" #. Upturn #: ../src/video_tab.c:332 msgid " Invert" msgstr " Vend" #. Negate #: ../src/video_tab.c:343 msgid " Negative" msgstr " Negativ" #. Mono #: ../src/video_tab.c:354 msgid " Mono" msgstr " Mono" #. Pieces #: ../src/video_tab.c:366 msgid " Pieces" msgstr "" #. Particles #: ../src/video_tab.c:378 msgid " Particles" msgstr "" guvcview-src-1.7.1/po/uk.po0000664000175000017500000005775212173235416014611 0ustar paulopaulo# Ukrainian translation for guvcview # Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 # This file is distributed under the same license as the guvcview package. # FIRST AUTHOR , 2010. # msgid "" msgstr "" "Project-Id-Version: guvcview\n" "Report-Msgid-Bugs-To: pj.assis@gmail.com\n" "POT-Creation-Date: 2013-07-16 12:53+0000\n" "PO-Revision-Date: 2013-02-25 05:37+0000\n" "Last-Translator: Paulo Assis \n" "Language-Team: Ukrainian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2013-07-22 13:32+0000\n" "X-Generator: Launchpad (build 16696)\n" "Language: uk\n" #: ../data/guvcview.desktop.in.in.h:1 msgid "guvcview" msgstr "" #: ../data/guvcview.desktop.in.in.h:2 msgid "GTK UVC video viewer" msgstr "" #: ../data/guvcview.desktop.in.in.h:3 msgid "A video viewer and capturer for the linux uvc driver" msgstr "" #: ../src/acodecs.c:59 msgid "PCM - uncompressed (16 bit)" msgstr "" #: ../src/acodecs.c:76 msgid "MPEG2 - (lavc)" msgstr "" #: ../src/acodecs.c:93 msgid "MP3 - (lavc)" msgstr "" #: ../src/acodecs.c:110 msgid "Dolby AC3 - (lavc)" msgstr "" #: ../src/acodecs.c:127 msgid "ACC Low - (faac)" msgstr "" #: ../src/acodecs.c:144 msgid "Vorbis" msgstr "" #: ../src/audio_tab.c:80 msgid "Audio" msgstr "Ðудіо" #: ../src/audio_tab.c:98 msgid " Sound" msgstr " Звук" #. VU meter on the image (OSD) #: ../src/audio_tab.c:109 msgid " Show VU meter" msgstr "" #: ../src/audio_tab.c:121 msgid "Audio API:" msgstr "Ðудіо API:" #: ../src/audio_tab.c:132 msgid "PORTAUDIO" msgstr "PORTAUDIO" #: ../src/audio_tab.c:133 msgid "PULSEAUDIO" msgstr "PULSEAUDIO" #: ../src/audio_tab.c:149 ../src/audio_tab.c:172 msgid "Input Device:" msgstr "ПриÑтрій вводу:" #: ../src/audio_tab.c:182 ../src/audio_tab.c:214 msgid "Dev. Default" msgstr "ПриÑтрій по замовч." #: ../src/audio_tab.c:204 msgid "Sample Rate:" msgstr "ЧаÑтота диÑкредитації:" #: ../src/audio_tab.c:215 msgid "1 - mono" msgstr "1 - моно" #: ../src/audio_tab.c:216 msgid "2 - stereo" msgstr "2 - Ñтерео" #: ../src/audio_tab.c:251 msgid "Channels:" msgstr "Канали:" #: ../src/audio_tab.c:302 msgid "---- Audio Effects ----" msgstr "---- Ефекти аудіо ----" #. Echo #: ../src/audio_tab.c:321 msgid " Echo" msgstr " Ехо" #. FUZZ #: ../src/audio_tab.c:332 msgid " Fuzz" msgstr " Пух" #. Reverb #: ../src/audio_tab.c:344 msgid " Reverb" msgstr " РевербаціÑ" #. WahWah #: ../src/audio_tab.c:356 msgid " WahWah" msgstr " ВахВах" #. Ducky #: ../src/audio_tab.c:368 msgid " Ducky" msgstr " Голубка" #: ../src/callbacks.c:108 msgid "Error" msgstr "Помилка" #: ../src/callbacks.c:132 msgid "" "\n" "You have more than one video device installed.\n" "Do you want to try another one ?\n" msgstr "" "\n" "Ð’Ñтановлено більше одного відео приÑтрою.\n" "Ви хочете Ñпробувати ще один?\n" #. Devices #: ../src/callbacks.c:139 ../src/video_tab.c:103 msgid "Device:" msgstr "ПриÑтрій:" #: ../src/callbacks.c:271 msgid "Save File" msgstr "Зберегти" #: ../src/callbacks.c:283 msgid "File Format:" msgstr "" #: ../src/callbacks.c:454 msgid "codec values" msgstr "Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ ÐºÐ¾Ð´ÐµÐºÐ°" #: ../src/callbacks.c:465 msgid "" " encoder fps: \n" " (0 - use fps combobox value)" msgstr "" " чаÑтота кадрів: \n" " (0 - викориÑтати Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð· випадаючого ÑпиÑку)" #: ../src/callbacks.c:478 msgid " monotonic pts" msgstr "" #. bit rate #: ../src/callbacks.c:485 ../src/callbacks.c:808 msgid "bit rate: " msgstr "бітрейт: " #: ../src/callbacks.c:498 msgid "qmax: " msgstr "qmax: " #: ../src/callbacks.c:511 msgid "qmin: " msgstr "qmin: " #: ../src/callbacks.c:524 msgid "max. qdiff: " msgstr "макÑ. qdiff: " #: ../src/callbacks.c:537 msgid "dia size: " msgstr "dia size: " #: ../src/callbacks.c:550 msgid "pre dia size: " msgstr "pre dia size: " #: ../src/callbacks.c:563 msgid "pre me: " msgstr "pre me: " #: ../src/callbacks.c:576 msgid "pre cmp: " msgstr "pre cmp: " #: ../src/callbacks.c:589 msgid "cmp: " msgstr "cmp: " #: ../src/callbacks.c:602 msgid "sub cmp: " msgstr "sub cmp: " #: ../src/callbacks.c:615 msgid "last predictor count: " msgstr "Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð»Ñ–Ñ‡Ð¸Ð»ÑŒÐ½Ð¸ÐºÐ° прогнозиÑта: " #: ../src/callbacks.c:628 msgid "gop size: " msgstr "gop size: " #: ../src/callbacks.c:641 msgid "qcompress: " msgstr "qcompress " #: ../src/callbacks.c:654 msgid "qblur: " msgstr "qblur: " #: ../src/callbacks.c:667 msgid "subq: " msgstr "subq: " #: ../src/callbacks.c:680 msgid "framerefs: " msgstr "framerefs: " #: ../src/callbacks.c:693 msgid "me method: " msgstr "me method: " #: ../src/callbacks.c:706 msgid "mb decision: " msgstr "mb decision: " #: ../src/callbacks.c:719 msgid "max B frames: " msgstr "max B frames: " #: ../src/callbacks.c:732 msgid "num threads: " msgstr "" #: ../src/callbacks.c:795 msgid "audio codec values" msgstr "Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð°ÑƒÐ´Ñ–Ð¾-кодека" #. sample format #: ../src/callbacks.c:822 msgid "sample format: " msgstr "" #: ../src/callbacks.c:1250 msgid "start new" msgstr "запуÑтити новий" #: ../src/callbacks.c:1253 msgid "restart" msgstr "перезавантаж." #: ../src/callbacks.c:1255 msgid "new" msgstr "новий" #: ../src/callbacks.c:1257 msgid "cancel" msgstr "відмінити" #: ../src/callbacks.c:1262 msgid "" "launch new process or restart?.\n" "\n" msgstr "" "запуÑтити новий процеÑ, \n" "чи перезавантажити?\n" "\n" #: ../src/callbacks.c:1716 ../src/guvcview.c:537 msgid "Cap. Image (I)" msgstr "" #. disable image controls #: ../src/callbacks.c:1727 ../src/guvcview.c:658 ../src/timers.c:101 msgid "capturing photo to" msgstr "" #: ../src/callbacks.c:1786 ../src/guvcview.c:547 msgid "Cap. Video (V)" msgstr "" #: ../src/callbacks.c:1812 ../src/guvcview.c:708 msgid "capturing video to" msgstr "" #. vid capture enabled from start #: ../src/callbacks.c:1845 ../src/guvcview.c:542 msgid "Stop Video (V)" msgstr "" #: ../src/callbacks.c:1901 ../src/menubar.c:66 msgid "Save Profile" msgstr "" #: ../src/callbacks.c:1914 ../src/menubar.c:65 msgid "Load Profile" msgstr "" #: ../src/create_video.c:1016 ../src/guvcview.c:700 msgid "Cap. Video" msgstr "Відео" #: ../src/guvcview.c:279 msgid "Guvcview Video Capture" msgstr "Захоплювач відео Guvcview" #: ../src/guvcview.c:291 msgid "GUVCViewer Controls" msgstr "Панель налаштувань Guvcview" #. can't open device #: ../src/guvcview.c:336 msgid "" "Guvcview error:\n" "\n" "Unable to open device" msgstr "" "Помилка:\n" "\n" "Ðе можу відкрити приÑтрій" #: ../src/guvcview.c:337 msgid "" "Please make sure the camera is connected\n" "and that the correct driver is installed." msgstr "" "ПереконайтеÑÑŒ, що камера підключена\n" "Ñ– вÑтановлено відповідний драйвер." #. uvc extension controls OK, give warning and shutdown (called with --add_ctrls) #: ../src/guvcview.c:342 msgid "" "Guvcview:\n" "\n" "UVC Extension controls" msgstr "" "Guvcview:\n" "\n" "Елементи ÐºÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñм UVC" #: ../src/guvcview.c:343 msgid "Extension controls were added to the UVC driver" msgstr "Керуючі елементи Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ Ð±ÑƒÐ»Ð¸ додані до драйверу UVC" #. uvc extension controls error - EACCES (needs root user) #: ../src/guvcview.c:350 msgid "" "Guvcview error:\n" "\n" "UVC Extension controls" msgstr "" "Помилка:\n" "\n" "Керуючі елементи UVC" #: ../src/guvcview.c:351 msgid "" "An error occurred while adding extension\n" "controls to the UVC driver\n" "Make sure you run guvcview as root (or sudo)." msgstr "" "Виникла помилка в процеÑÑ– Ð´Ð¾Ð´Ð°Ð²Ð°Ð½Ð½Ñ ÐºÐµÑ€ÑƒÑŽÑ‡Ð¸Ñ… \n" "елементів Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ Ð´Ð¾ драйверу UVC.\n" "ПереконайтеÑÑŒ що Guvcview запущено від імені root (чи sudo)." #: ../src/guvcview.c:377 ../src/guvcview.c:455 msgid "" "Guvcview error:\n" "\n" "Can't set a valid video stream for guvcview" msgstr "" "Помилка:\n" "\n" "Ðе можу вÑтановити правильний відео потік Ð´Ð»Ñ Guvcview" #: ../src/guvcview.c:378 ../src/guvcview.c:456 msgid "" "Make sure your device driver is v4l2 compliant\n" "and that it is properly installed." msgstr "" "ПереконайтеÑÑŒ, що драйвер ÑуміÑний з v4l2\n" "Ñ– вÑтановлений правильно." #: ../src/guvcview.c:400 ../src/guvcview.c:422 msgid "" "Guvcview error:\n" "\n" "Unable to start with minimum setup" msgstr "" "Помилка:\n" "\n" "Ðе можу запуÑтитиÑÑŒ з мінімальною уÑтановкою" #: ../src/guvcview.c:401 ../src/guvcview.c:423 msgid "Please reconnect your camera." msgstr "Будь лаÑка, повторно підключіть Ñвою камеру." #: ../src/guvcview.c:430 msgid "" "Guvcview error:\n" "\n" "Couldn't query device capabilities" msgstr "" "Помилка:\n" "\n" "Ðе можу надіÑлати запит про можливоÑті приÑтрою" #: ../src/guvcview.c:431 msgid "Make sure the device driver supports v4l2." msgstr "ПереконайтеÑÑŒ, що драйвер приÑтрою підтримує v4l2" #: ../src/guvcview.c:435 msgid "" "Guvcview error:\n" "\n" "Read method error" msgstr "" "Помилка:\n" "\n" "Помилка методу зчитуваннÑ." #: ../src/guvcview.c:436 msgid "Please try mmap instead (--capture_method=1)." msgstr "Будь лаÑка, Ñпробуйте mmap instead (--capture_method=1)." #: ../src/guvcview.c:444 msgid "" "Guvcview error:\n" "\n" "Unable to allocate Buffers" msgstr "" "Помилка:\n" "\n" "Ðе можу виділити міÑце під Буфери." #: ../src/guvcview.c:445 msgid "Please try restarting your system." msgstr "Будь лаÑка, Ñпробуйте перезавантажити ÑиÑтему." #: ../src/guvcview.c:490 msgid "Image Controls" msgstr "" "КеруваннÑ\n" "зображеннÑм" #. image auto capture #: ../src/guvcview.c:533 msgid "Stop Auto (I)" msgstr "" #: ../src/guvcview.c:644 msgid "" "Guvcview error:\n" "\n" "Unable to create Video Thread" msgstr "" "Помилка:\n" "\n" "Ðе можу Ñтворити потік команд Ð´Ð»Ñ Ð²Ñ–Ð´ÐµÐ¾" #: ../src/guvcview.c:645 msgid "Please report it to http://developer.berlios.de/bugs/?group_id=8179" msgstr "" "Будь лаÑка, повідомте про це тут " "http://developer.berlios.de/bugs/?group_id=8179" #: ../src/img_controls.c:121 msgid "Auto Focus (continuous)" msgstr "Ðвто Ñ„Ð¾ÐºÑƒÑ (безперервний)" #: ../src/img_controls.c:122 msgid "set Focus" msgstr "вÑтановити фокуÑ" #: ../src/image_format.c:35 msgid "Jpeg (jpg)" msgstr "" #: ../src/image_format.c:41 msgid "Bitmap (Bmp)" msgstr "" #: ../src/image_format.c:47 msgid "Portable Network Graphics (Png)" msgstr "" #: ../src/image_format.c:53 msgid "Raw Image (raw)" msgstr "" #. controls menu #: ../src/menubar.c:64 msgid "Settings" msgstr "" #: ../src/menubar.c:67 msgid "Hardware Defaults" msgstr "" #: ../src/menubar.c:75 msgid "Camera Button" msgstr "" #: ../src/menubar.c:79 msgid "Capture Image" msgstr "" #: ../src/menubar.c:84 msgid "Capture Video" msgstr "" #. video menu #: ../src/menubar.c:144 ../src/video_tab.c:87 msgid "Video" msgstr "" #: ../src/menubar.c:145 ../src/menubar.c:231 msgid "File" msgstr "" #: ../src/menubar.c:146 ../src/menubar.c:232 msgid "Increment Filename" msgstr "" #: ../src/menubar.c:164 msgid "Video Codec" msgstr "" #: ../src/menubar.c:187 msgid "Video Codec Properties" msgstr "" #: ../src/menubar.c:194 msgid "Audio Codec" msgstr "" #: ../src/menubar.c:215 msgid "Audio Codec Properties" msgstr "" #. photo menu #: ../src/menubar.c:230 msgid "Photo" msgstr "" #: ../src/options.c:752 msgid "Prints version" msgstr "Показує верÑÑ–ÑŽ" #: ../src/options.c:753 msgid "Displays debug information" msgstr "Показує інформацію Ð´Ð»Ñ Ð²Ñ–Ð´Ð»Ð°Ð³Ð¾Ð´Ð¶ÑƒÐ²Ð°Ð½Ð½Ñ" #: ../src/options.c:754 msgid "Video Device to use [default: /dev/video0]" msgstr "ВикориÑтаний відео-приÑтрій [default: /dev/video0]" #: ../src/options.c:755 msgid "Exit after adding UVC extension controls (needs root/sudo)" msgstr "" "Вийти піÑÐ»Ñ Ð´Ð¾Ð´Ð°Ð²Ð°Ð½Ð½Ñ ÐºÐµÑ€ÑƒÑŽÑ‡Ð¸Ñ… елементів Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ UVC\n" "(потрібні права адмініÑтратора)" #: ../src/options.c:756 msgid "Don't stream video (image controls only)" msgstr "Ðе потокове відео (керувати лише зображеннÑм)" #: ../src/options.c:757 msgid "Don't display a GUI" msgstr "" #: ../src/options.c:758 msgid "Capture method (1-mmap (default) 2-read)" msgstr "Метод Ð·Ð°Ñ…Ð¾Ð¿Ð»ÐµÐ½Ð½Ñ (1-mmap (замовч.) 2-read)" #: ../src/options.c:759 msgid "Configuration file" msgstr "Файл конфігурації" #: ../src/options.c:760 msgid "Hardware accelaration (enable(1) | disable(0))" msgstr "Ðпаратне приÑÐºÐ¾Ñ€ÐµÐ½Ð½Ñ (увімкн.(1) | вимкн.(0))" #: ../src/options.c:761 msgid "" "Pixel " "format(mjpg|jpeg|yuyv|yvyu|uyvy|yyuv|yu12|yv12|nv12|nv21|nv16|nv61|y41p|grey|" "y10b|y16 |s501|s505|s508|gbrg|grbg|ba81|rggb|bgr3|rgb3)" msgstr "" #: ../src/options.c:762 msgid "Frame size, default: 640x480" msgstr "Розмір кадру (замовч. - 640x480)" #: ../src/options.c:763 msgid "Image File name" msgstr "Файл зображеннÑ" #: ../src/options.c:764 msgid "Image capture interval in seconds" msgstr "Інтервал між знімками (Ñек.)" #: ../src/options.c:765 msgid "Number of Pictures to capture" msgstr "КількіÑть знімків" #: ../src/options.c:766 msgid "Video File name (capture from start)" msgstr "Файл відео (Ð·Ð°Ð¿Ð¸Ñ Ð·Ñ€Ð°Ð·Ñƒ піÑÐ»Ñ Ð·Ð°Ð¿ÑƒÑку)" #: ../src/options.c:767 msgid "Video capture time (in seconds)" msgstr "ТриваліÑть запиÑу (Ñек.)" #: ../src/options.c:768 msgid "Exits guvcview after closing video" msgstr "Вийти з Guvcview піÑÐ»Ñ Ð·Ð°ÐºÑ€Ð¸Ñ‚Ñ‚Ñ Ð²Ñ–Ð´ÐµÐ¾" #: ../src/options.c:769 msgid "Number of initial frames to skip" msgstr "КількіÑть початкових кадрів Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð¿ÑƒÑку" #: ../src/options.c:770 msgid "Show FPS value (enable(1) | disable (0))" msgstr "Ð’Ñ–Ð´Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ñ‡Ð°Ñтоти кадрів (увімкн.(1) | вимкн. (0))" #: ../src/options.c:771 msgid "Load Profile at start" msgstr "Завантажити профіль при запуÑку" #: ../src/options.c:777 msgid "- local options" msgstr "- локальні параметри" #. gdk_threads_enter(); #: ../src/timers.c:119 msgid "Cap. Image" msgstr "Знімок" #: ../src/timers.c:217 msgid "Guvcview Warning:" msgstr "ПопередженнÑ:" #: ../src/timers.c:217 msgid "Not enough free space left on disk" msgstr "Ðе виÑтачає вільного міÑÑ†Ñ Ð½Ð° диÑку" #: ../src/v4l2_controls.c:711 msgid "Left" msgstr "Лівий" #: ../src/v4l2_controls.c:712 msgid "Right" msgstr "Правий" #: ../src/v4l2_controls.c:716 msgid "Down" msgstr "Вниз" #: ../src/v4l2_controls.c:717 msgid "Up" msgstr "Вверх" #: ../src/v4l2_controls.c:762 msgid "Off" msgstr "" #: ../src/v4l2_controls.c:762 msgid "On" msgstr "" #: ../src/v4l2_controls.c:762 msgid "Blinking" msgstr "" #: ../src/v4l2_controls.c:762 msgid "Auto" msgstr "" #. turn it into a menu control #: ../src/v4l2_controls.c:813 msgid "8 bit" msgstr "" #: ../src/v4l2_controls.c:813 msgid "12 bit" msgstr "" #: ../src/v4l2_dyna_ctrls.c:96 msgid "Pan (relative)" msgstr "ВідноÑний поворот" #: ../src/v4l2_dyna_ctrls.c:109 msgid "Tilt (relative)" msgstr "ВідноÑний нахил" #: ../src/v4l2_dyna_ctrls.c:122 msgid "Pan Reset" msgstr "Скинути поворот" #: ../src/v4l2_dyna_ctrls.c:135 msgid "Tilt Reset" msgstr "Скинути нахил" #: ../src/v4l2_dyna_ctrls.c:148 msgid "Focus (absolute)" msgstr "ÐбÑолютний фокуÑ" #: ../src/v4l2_dyna_ctrls.c:161 msgid "LED1 Mode" msgstr "Метод Ñвітлодіода" #: ../src/v4l2_dyna_ctrls.c:174 msgid "LED1 Frequency" msgstr "ЧаÑтота Ñвітлодіода" #: ../src/v4l2_dyna_ctrls.c:187 msgid "Disable video processing" msgstr "Відключити обробку відео" #: ../src/v4l2_dyna_ctrls.c:200 msgid "Raw bits per pixel" msgstr "Сирі біти на пікÑель" #. needed only for language files (not used) #. V4L2 control strings #: ../src/v4l2uvc.c:56 msgid "User Controls" msgstr "Керуючі елементи кориÑтувача" #: ../src/v4l2uvc.c:57 msgid "Brightness" msgstr "ЯÑкравіÑть" #: ../src/v4l2uvc.c:58 msgid "Contrast" msgstr "КонтраÑÑ‚" #: ../src/v4l2uvc.c:59 msgid "Hue" msgstr "Відтінок" #: ../src/v4l2uvc.c:60 msgid "Saturation" msgstr "ÐаÑиченіÑть" #: ../src/v4l2uvc.c:61 msgid "Sharpness" msgstr "РізкіÑть" #: ../src/v4l2uvc.c:62 msgid "Gamma" msgstr "Гамма" #: ../src/v4l2uvc.c:63 msgid "Backlight Compensation" msgstr "КомпенÑÐ°Ñ†Ñ–Ñ Ð¿Ñ–Ð´Ñвітки" #: ../src/v4l2uvc.c:64 msgid "Power Line Frequency" msgstr "ЧаÑтота електромережі" #: ../src/v4l2uvc.c:65 msgid "Hue, Automatic" msgstr "Ðвто відтінок" #: ../src/v4l2uvc.c:66 msgid "Focus, Auto" msgstr "Ðвто фокуÑ" #: ../src/v4l2uvc.c:67 msgid "Manual Mode" msgstr "Ручний режим" #: ../src/v4l2uvc.c:68 msgid "Auto Mode" msgstr "Ðвторежим" #: ../src/v4l2uvc.c:69 msgid "Shutter Priority Mode" msgstr "Пріоритет затвору" #: ../src/v4l2uvc.c:70 msgid "Aperture Priority Mode" msgstr "Пріоритет діафрагми" #: ../src/v4l2uvc.c:71 msgid "Black Level" msgstr "Рівень чорного" #: ../src/v4l2uvc.c:72 msgid "White Balance, Automatic" msgstr "Ðвто Ð±Ð°Ð»Ð°Ð½Ñ Ð±Ñ–Ð»Ð¾Ð³Ð¾" #: ../src/v4l2uvc.c:73 msgid "Do White Balance" msgstr "ЗбаланÑувати білий" #: ../src/v4l2uvc.c:74 msgid "Red Balance" msgstr "Ð‘Ð°Ð»Ð°Ð½Ñ Ñ‡ÐµÑ€Ð²Ð¾Ð½Ð¾Ð³Ð¾" #: ../src/v4l2uvc.c:75 msgid "Blue Balance" msgstr "Ð‘Ð°Ð»Ð°Ð½Ñ Ñинього" #: ../src/v4l2uvc.c:76 msgid "Exposure" msgstr "ЕкÑпозиціÑ" #: ../src/v4l2uvc.c:77 msgid "Gain, Automatic" msgstr "Ðвто поÑиленнÑ" #: ../src/v4l2uvc.c:78 msgid "Gain" msgstr "ПоÑиленнÑ" #: ../src/v4l2uvc.c:79 msgid "Horizontal Flip" msgstr "Горизонтальне віддзеркаленнÑ" #: ../src/v4l2uvc.c:80 msgid "Vertical Flip" msgstr "Вертикальне віддзеркаленнÑ" #: ../src/v4l2uvc.c:81 msgid "Horizontal Center" msgstr "Горизонтальна Ñередина" #: ../src/v4l2uvc.c:82 msgid "Vertical Center" msgstr "Вертикальна Ñередина" #: ../src/v4l2uvc.c:83 msgid "Chroma AGC" msgstr "Chroma AGC" #: ../src/v4l2uvc.c:84 msgid "Color Killer" msgstr "Подавлювач кольору" #: ../src/v4l2uvc.c:85 msgid "Color Effects" msgstr "Ефекти кольору" #. CAMERA CLASS control strings #: ../src/v4l2uvc.c:88 msgid "Camera Controls" msgstr "ÐšÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ ÐºÐ°Ð¼ÐµÑ€Ð¾ÑŽ" #: ../src/v4l2uvc.c:89 msgid "Auto Exposure" msgstr "Ðвто екÑпозиціÑ" #: ../src/v4l2uvc.c:90 msgid "Exposure Time, Absolute" msgstr "ÐбÑолютний Ñ‡Ð°Ñ ÐµÐºÑпозиції" #: ../src/v4l2uvc.c:91 msgid "Exposure, Dynamic Framerate" msgstr "ЕкÑпозиціÑ, динамічна чаÑтота кадрів" #: ../src/v4l2uvc.c:92 msgid "Pan, Relative" msgstr "ВідноÑний поворот" #: ../src/v4l2uvc.c:93 msgid "Tilt, Relative" msgstr "ВідноÑний нахил" #: ../src/v4l2uvc.c:94 msgid "Pan, Reset" msgstr "Скинути поворот" #: ../src/v4l2uvc.c:95 msgid "Tilt, Reset" msgstr "Скинути нахил" #: ../src/v4l2uvc.c:96 msgid "Pan, Absolute" msgstr "ÐбÑолютний поворот" #: ../src/v4l2uvc.c:98 msgid "Focus, Absolute" msgstr "ÐбÑолютний фокуÑ" #: ../src/v4l2uvc.c:99 msgid "Focus, Relative" msgstr "ВідноÑний фокуÑ" #: ../src/v4l2uvc.c:100 msgid "Focus, Automatic" msgstr "Ðвто фокуÑ" #: ../src/v4l2uvc.c:101 msgid "Zoom, Absolute" msgstr "ÐбÑолютний зум" #: ../src/v4l2uvc.c:102 msgid "Zoom, Relative" msgstr "ВідноÑний зум" #: ../src/v4l2uvc.c:103 msgid "Zoom, Continuous" msgstr "Безперервний зум" #: ../src/v4l2uvc.c:104 msgid "Privacy" msgstr "КонфіденційніÑть" #. UVC specific control strings #: ../src/v4l2uvc.c:107 msgid "Exposure, Auto" msgstr "Ðвто екÑпозиціÑ" #: ../src/v4l2uvc.c:108 msgid "Exposure, Auto Priority" msgstr "Пріоритет авто екÑпозиції" #: ../src/v4l2uvc.c:109 msgid "Exposure (Absolute)" msgstr "ÐбÑолютна екÑпозиціÑ" #: ../src/v4l2uvc.c:110 msgid "White Balance Temperature, Auto" msgstr "Ðвто температура баланÑу білого" #: ../src/v4l2uvc.c:111 msgid "White Balance Temperature" msgstr "Температура баланÑу білого" #: ../src/v4l2uvc.c:112 msgid "White Balance Component, Auto" msgstr "Ðвто компонент баланÑу білого" #: ../src/v4l2uvc.c:113 msgid "White Balance Blue Component" msgstr "Синій компонент баланÑу білого" #: ../src/v4l2uvc.c:114 msgid "White Balance Red Component" msgstr "Червоний компонент баланÑу білого" #. libwebcam specific control strings #: ../src/v4l2uvc.c:117 msgid "Focus" msgstr "ФокуÑ" #: ../src/v4l2uvc.c:118 msgid "Focus (Absolute)" msgstr "ÐбÑолютний фокуÑ" #: ../src/vcodecs.c:63 msgid "MJPG - compressed" msgstr "MJPG - ÑтиÑнено" #: ../src/vcodecs.c:99 msgid "YUY2 - uncomp YUV" msgstr "YUY2 - не ÑтиÑнений YUV" #: ../src/vcodecs.c:135 msgid "RGB - uncomp BMP" msgstr "RGB - не ÑтиÑнений BMP" #: ../src/vcodecs.c:171 msgid "MPEG video 1" msgstr "MPEG-відео 1" #: ../src/vcodecs.c:207 msgid "FLV1 - flash video 1" msgstr "FLV1 флеш-відео 1" #: ../src/vcodecs.c:243 msgid "WMV1 - win. med. video 7" msgstr "WMV1 - відео Windows Media 7" #: ../src/vcodecs.c:279 msgid "MPG2 - MPG2 format" msgstr "MPG2 - формат MPG2" #: ../src/vcodecs.c:315 msgid "MS MP4 V3" msgstr "MS MP4 V3" #: ../src/vcodecs.c:351 msgid "MPEG4-ASP" msgstr "MPEG4-ASP" #: ../src/vcodecs.c:387 msgid "MPEG4-AVC (H264)" msgstr "MPEG4-AVC (H264)" #: ../src/vcodecs.c:427 msgid "VP8 (VP8)" msgstr "" #: ../src/vcodecs.c:463 msgid "Theora (ogg theora)" msgstr "" #: ../src/video_format.c:43 msgid "AVI - avi format" msgstr "" #: ../src/video_format.c:52 msgid "MKV - Matroska format" msgstr "" #: ../src/video_format.c:61 msgid "WEBM - format" msgstr "" #: ../src/video_tab.c:208 msgid "Frame Rate:" msgstr "ЧаÑтота кадрів:" #: ../src/video_tab.c:215 msgid " Show" msgstr " Показати" #: ../src/video_tab.c:237 msgid "Resolution:" msgstr "Роздільна здатніÑть:" #: ../src/video_tab.c:263 msgid "Camera Output:" msgstr "Вивід камери:" #: ../src/video_tab.c:285 msgid "Apply" msgstr "ЗаÑтоÑувати" #: ../src/video_tab.c:292 msgid "Quality:" msgstr "ЯкіÑть:" #: ../src/video_tab.c:302 msgid "---- Video Filters ----" msgstr "---- Відео фільтри ----" #. Mirror #: ../src/video_tab.c:321 msgid " Mirror" msgstr " Гор. віддзеркал." #. Upturn #: ../src/video_tab.c:332 msgid " Invert" msgstr " Верт. віддзеркал." #. Negate #: ../src/video_tab.c:343 msgid " Negative" msgstr " Ðегатив" #. Mono #: ../src/video_tab.c:354 msgid " Mono" msgstr " Чорно-біле" #. Pieces #: ../src/video_tab.c:366 msgid " Pieces" msgstr " Мозаїка" #. Particles #: ../src/video_tab.c:378 msgid " Particles" msgstr " ЧаÑточки" guvcview-src-1.7.1/po/he.po0000664000175000017500000005025112173235416014551 0ustar paulopaulo# Hebrew translation for guvcview # Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 # This file is distributed under the same license as the guvcview package. # FIRST AUTHOR , 2009. # msgid "" msgstr "" "Project-Id-Version: guvcview\n" "Report-Msgid-Bugs-To: pj.assis@gmail.com\n" "POT-Creation-Date: 2013-07-16 12:53+0000\n" "PO-Revision-Date: 2013-02-25 05:36+0000\n" "Last-Translator: Paulo Assis \n" "Language-Team: Hebrew \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2013-07-22 13:32+0000\n" "X-Generator: Launchpad (build 16696)\n" "Language: he\n" #: ../data/guvcview.desktop.in.in.h:1 msgid "guvcview" msgstr "" #: ../data/guvcview.desktop.in.in.h:2 msgid "GTK UVC video viewer" msgstr "" #: ../data/guvcview.desktop.in.in.h:3 msgid "A video viewer and capturer for the linux uvc driver" msgstr "" #: ../src/acodecs.c:59 msgid "PCM - uncompressed (16 bit)" msgstr "" #: ../src/acodecs.c:76 msgid "MPEG2 - (lavc)" msgstr "" #: ../src/acodecs.c:93 msgid "MP3 - (lavc)" msgstr "" #: ../src/acodecs.c:110 msgid "Dolby AC3 - (lavc)" msgstr "" #: ../src/acodecs.c:127 msgid "ACC Low - (faac)" msgstr "" #: ../src/acodecs.c:144 msgid "Vorbis" msgstr "" #: ../src/audio_tab.c:80 msgid "Audio" msgstr "שמע" #: ../src/audio_tab.c:98 msgid " Sound" msgstr " קול" #. VU meter on the image (OSD) #: ../src/audio_tab.c:109 msgid " Show VU meter" msgstr "" #: ../src/audio_tab.c:121 msgid "Audio API:" msgstr "" #: ../src/audio_tab.c:132 msgid "PORTAUDIO" msgstr "" #: ../src/audio_tab.c:133 msgid "PULSEAUDIO" msgstr "PULSEAUDIO" #: ../src/audio_tab.c:149 ../src/audio_tab.c:172 msgid "Input Device:" msgstr "" #: ../src/audio_tab.c:182 ../src/audio_tab.c:214 msgid "Dev. Default" msgstr "" #: ../src/audio_tab.c:204 msgid "Sample Rate:" msgstr "קצב דגימה" #: ../src/audio_tab.c:215 msgid "1 - mono" msgstr "1 - מונו" #: ../src/audio_tab.c:216 msgid "2 - stereo" msgstr "2 - סטרי×ו" #: ../src/audio_tab.c:251 msgid "Channels:" msgstr "ערוצי×:" #: ../src/audio_tab.c:302 msgid "---- Audio Effects ----" msgstr "--- ××¤×§×˜×™× ×§×•×œ×™×™× ---" #. Echo #: ../src/audio_tab.c:321 msgid " Echo" msgstr " הד" #. FUZZ #: ../src/audio_tab.c:332 msgid " Fuzz" msgstr "" #. Reverb #: ../src/audio_tab.c:344 msgid " Reverb" msgstr "" #. WahWah #: ../src/audio_tab.c:356 msgid " WahWah" msgstr "" #. Ducky #: ../src/audio_tab.c:368 msgid " Ducky" msgstr "" #: ../src/callbacks.c:108 msgid "Error" msgstr "" #: ../src/callbacks.c:132 msgid "" "\n" "You have more than one video device installed.\n" "Do you want to try another one ?\n" msgstr "" #. Devices #: ../src/callbacks.c:139 ../src/video_tab.c:103 msgid "Device:" msgstr "התקן:" #: ../src/callbacks.c:271 msgid "Save File" msgstr "שמור קובץ" #: ../src/callbacks.c:283 msgid "File Format:" msgstr "" #: ../src/callbacks.c:454 msgid "codec values" msgstr "ערכי מקודד" #: ../src/callbacks.c:465 msgid "" " encoder fps: \n" " (0 - use fps combobox value)" msgstr "" #: ../src/callbacks.c:478 msgid " monotonic pts" msgstr "" #. bit rate #: ../src/callbacks.c:485 ../src/callbacks.c:808 msgid "bit rate: " msgstr "קצב סיביות: " #: ../src/callbacks.c:498 msgid "qmax: " msgstr "" #: ../src/callbacks.c:511 msgid "qmin: " msgstr "" #: ../src/callbacks.c:524 msgid "max. qdiff: " msgstr "" #: ../src/callbacks.c:537 msgid "dia size: " msgstr "" #: ../src/callbacks.c:550 msgid "pre dia size: " msgstr "" #: ../src/callbacks.c:563 msgid "pre me: " msgstr "" #: ../src/callbacks.c:576 msgid "pre cmp: " msgstr "" #: ../src/callbacks.c:589 msgid "cmp: " msgstr "" #: ../src/callbacks.c:602 msgid "sub cmp: " msgstr "" #: ../src/callbacks.c:615 msgid "last predictor count: " msgstr "" #: ../src/callbacks.c:628 msgid "gop size: " msgstr "" #: ../src/callbacks.c:641 msgid "qcompress: " msgstr "" #: ../src/callbacks.c:654 msgid "qblur: " msgstr "" #: ../src/callbacks.c:667 msgid "subq: " msgstr "" #: ../src/callbacks.c:680 msgid "framerefs: " msgstr "" #: ../src/callbacks.c:693 msgid "me method: " msgstr "" #: ../src/callbacks.c:706 msgid "mb decision: " msgstr "" #: ../src/callbacks.c:719 msgid "max B frames: " msgstr "" #: ../src/callbacks.c:732 msgid "num threads: " msgstr "" #: ../src/callbacks.c:795 msgid "audio codec values" msgstr "" #. sample format #: ../src/callbacks.c:822 msgid "sample format: " msgstr "" #: ../src/callbacks.c:1250 msgid "start new" msgstr "הפעל עכשיו" #: ../src/callbacks.c:1253 msgid "restart" msgstr "הפעל מחדש" #: ../src/callbacks.c:1255 msgid "new" msgstr "חדש" #: ../src/callbacks.c:1257 msgid "cancel" msgstr "בטל" #: ../src/callbacks.c:1262 msgid "" "launch new process or restart?.\n" "\n" msgstr "" "הפעל תהליך חדש ×ו הפעל מחדש?.\n" "\n" #: ../src/callbacks.c:1716 ../src/guvcview.c:537 msgid "Cap. Image (I)" msgstr "" #. disable image controls #: ../src/callbacks.c:1727 ../src/guvcview.c:658 ../src/timers.c:101 msgid "capturing photo to" msgstr "" #: ../src/callbacks.c:1786 ../src/guvcview.c:547 msgid "Cap. Video (V)" msgstr "" #: ../src/callbacks.c:1812 ../src/guvcview.c:708 msgid "capturing video to" msgstr "" #. vid capture enabled from start #: ../src/callbacks.c:1845 ../src/guvcview.c:542 msgid "Stop Video (V)" msgstr "" #: ../src/callbacks.c:1901 ../src/menubar.c:66 msgid "Save Profile" msgstr "" #: ../src/callbacks.c:1914 ../src/menubar.c:65 msgid "Load Profile" msgstr "" #: ../src/create_video.c:1016 ../src/guvcview.c:700 msgid "Cap. Video" msgstr "לכד ויד×ו" #: ../src/guvcview.c:279 msgid "Guvcview Video Capture" msgstr "" #: ../src/guvcview.c:291 msgid "GUVCViewer Controls" msgstr "פקדי GUVCViewer" #. can't open device #: ../src/guvcview.c:336 msgid "" "Guvcview error:\n" "\n" "Unable to open device" msgstr "" "שגי××” בGuvcview:\n" "\n" "×œ× ×™×›×•×œ לפתוח התקן" #: ../src/guvcview.c:337 msgid "" "Please make sure the camera is connected\n" "and that the correct driver is installed." msgstr "" "×× × ×•×•×“× ×©×”×ž×¦×œ×ž×” מחוברת\n" "ושמנהל ההתקן הנכון מותקן." #. uvc extension controls OK, give warning and shutdown (called with --add_ctrls) #: ../src/guvcview.c:342 msgid "" "Guvcview:\n" "\n" "UVC Extension controls" msgstr "" #: ../src/guvcview.c:343 msgid "Extension controls were added to the UVC driver" msgstr "" #. uvc extension controls error - EACCES (needs root user) #: ../src/guvcview.c:350 msgid "" "Guvcview error:\n" "\n" "UVC Extension controls" msgstr "" #: ../src/guvcview.c:351 msgid "" "An error occurred while adding extension\n" "controls to the UVC driver\n" "Make sure you run guvcview as root (or sudo)." msgstr "" #: ../src/guvcview.c:377 ../src/guvcview.c:455 msgid "" "Guvcview error:\n" "\n" "Can't set a valid video stream for guvcview" msgstr "" "שגי××” בGuvcview:\n" "\n" "×œ× ×™×›×•×œ להגדיר זרימת ויד×ו תקפה לguvcview" #: ../src/guvcview.c:378 ../src/guvcview.c:456 msgid "" "Make sure your device driver is v4l2 compliant\n" "and that it is properly installed." msgstr "" "×•×•×“× ×©×ž× ×”×œ ההתקן שלך תו×× v4l2\n" "×•×©×”×•× ×ž×•×ª×§×Ÿ כהלכה." #: ../src/guvcview.c:400 ../src/guvcview.c:422 msgid "" "Guvcview error:\n" "\n" "Unable to start with minimum setup" msgstr "" "שגי××” בGuvcview:\n" "\n" "×œ× × ×™×ª×Ÿ להתחיל ×¢× ×”×ª×§× ×” מינימ×לית" #: ../src/guvcview.c:401 ../src/guvcview.c:423 msgid "Please reconnect your camera." msgstr "×× × ×—×‘×¨ מחדש ×ת המצלמה." #: ../src/guvcview.c:430 msgid "" "Guvcview error:\n" "\n" "Couldn't query device capabilities" msgstr "" "שגי××” בGuvcview:\n" "\n" "×œ× × ×™×ª×Ÿ לבדוק ×ת יכולות ההתקן" #: ../src/guvcview.c:431 msgid "Make sure the device driver supports v4l2." msgstr "×•×•×“× ×©×ž× ×”×œ ההתקן שלך תו×× v4l2." #: ../src/guvcview.c:435 msgid "" "Guvcview error:\n" "\n" "Read method error" msgstr "" "שגי××” בGuvcview:\n" "\n" "×§×¨× ×©×’×™×ת שיטה" #: ../src/guvcview.c:436 msgid "Please try mmap instead (--capture_method=1)." msgstr "נסה ×ת mmap ×‘×ž×§×•× (--capture_method=1)." #: ../src/guvcview.c:444 msgid "" "Guvcview error:\n" "\n" "Unable to allocate Buffers" msgstr "" "שגי××” בGuvcview:\n" "\n" "×œ× × ×™×ª×Ÿ להקצות חוצץ" #: ../src/guvcview.c:445 msgid "Please try restarting your system." msgstr "נסה ל×תחל ×ת המערכת." #: ../src/guvcview.c:490 msgid "Image Controls" msgstr "פקדי תמונה" #. image auto capture #: ../src/guvcview.c:533 msgid "Stop Auto (I)" msgstr "" #: ../src/guvcview.c:644 msgid "" "Guvcview error:\n" "\n" "Unable to create Video Thread" msgstr "" "שגי××” בGuvcview:\n" "\n" "×œ× ×™×›×•×œ ליצור שרשור ויד×ו" #: ../src/guvcview.c:645 msgid "Please report it to http://developer.berlios.de/bugs/?group_id=8179" msgstr "דווח על כך לhttp://developer.berlios.de/bugs/?group_id=8179" #: ../src/img_controls.c:121 msgid "Auto Focus (continuous)" msgstr "מיקוד ×וטומטי (מתמשך)" #: ../src/img_controls.c:122 msgid "set Focus" msgstr "הגדר מיקוד" #: ../src/image_format.c:35 msgid "Jpeg (jpg)" msgstr "" #: ../src/image_format.c:41 msgid "Bitmap (Bmp)" msgstr "" #: ../src/image_format.c:47 msgid "Portable Network Graphics (Png)" msgstr "" #: ../src/image_format.c:53 msgid "Raw Image (raw)" msgstr "" #. controls menu #: ../src/menubar.c:64 msgid "Settings" msgstr "" #: ../src/menubar.c:67 msgid "Hardware Defaults" msgstr "" #: ../src/menubar.c:75 msgid "Camera Button" msgstr "" #: ../src/menubar.c:79 msgid "Capture Image" msgstr "" #: ../src/menubar.c:84 msgid "Capture Video" msgstr "" #. video menu #: ../src/menubar.c:144 ../src/video_tab.c:87 msgid "Video" msgstr "" #: ../src/menubar.c:145 ../src/menubar.c:231 msgid "File" msgstr "" #: ../src/menubar.c:146 ../src/menubar.c:232 msgid "Increment Filename" msgstr "" #: ../src/menubar.c:164 msgid "Video Codec" msgstr "" #: ../src/menubar.c:187 msgid "Video Codec Properties" msgstr "" #: ../src/menubar.c:194 msgid "Audio Codec" msgstr "" #: ../src/menubar.c:215 msgid "Audio Codec Properties" msgstr "" #. photo menu #: ../src/menubar.c:230 msgid "Photo" msgstr "" #: ../src/options.c:752 msgid "Prints version" msgstr "מדפיס גרסה" #: ../src/options.c:753 msgid "Displays debug information" msgstr "" #: ../src/options.c:754 msgid "Video Device to use [default: /dev/video0]" msgstr "התקן ויד×ו לשימוש [ברירת מחדל:/dev/video0]" #: ../src/options.c:755 msgid "Exit after adding UVC extension controls (needs root/sudo)" msgstr "" #: ../src/options.c:756 msgid "Don't stream video (image controls only)" msgstr "" #: ../src/options.c:757 msgid "Don't display a GUI" msgstr "" #: ../src/options.c:758 msgid "Capture method (1-mmap (default) 2-read)" msgstr "" #: ../src/options.c:759 msgid "Configuration file" msgstr "קובץ הגדרות" #: ../src/options.c:760 msgid "Hardware accelaration (enable(1) | disable(0))" msgstr "×”×צת חומרה (פעיל(1) | מנוטרל(0))" #: ../src/options.c:761 msgid "" "Pixel " "format(mjpg|jpeg|yuyv|yvyu|uyvy|yyuv|yu12|yv12|nv12|nv21|nv16|nv61|y41p|grey|" "y10b|y16 |s501|s505|s508|gbrg|grbg|ba81|rggb|bgr3|rgb3)" msgstr "" #: ../src/options.c:762 msgid "Frame size, default: 640x480" msgstr "גודל פריי×, ברירת מחדל: 640x480" #: ../src/options.c:763 msgid "Image File name" msgstr "×©× ×§×•×‘×¥ תמונה" #: ../src/options.c:764 msgid "Image capture interval in seconds" msgstr "" #: ../src/options.c:765 msgid "Number of Pictures to capture" msgstr "מספר תמונות ללכידה" #: ../src/options.c:766 msgid "Video File name (capture from start)" msgstr "×©× ×§×•×‘×¥ ויד×ו (לוכד מההתחלה)" #: ../src/options.c:767 msgid "Video capture time (in seconds)" msgstr "זמן לכידת ויד×ו (בשניות)" #: ../src/options.c:768 msgid "Exits guvcview after closing video" msgstr "×™×•×¦× ×žguvcview ×חרי סגירת ויד×ו" #: ../src/options.c:769 msgid "Number of initial frames to skip" msgstr "" #: ../src/options.c:770 msgid "Show FPS value (enable(1) | disable (0))" msgstr "מר××” ערך ×¤×¨×™×™×ž×™× ×œ×©× ×™×” (FPS) (פעיל(1) | מנוטרל(2))" #: ../src/options.c:771 msgid "Load Profile at start" msgstr "טען פרופיל בהפעלה" #: ../src/options.c:777 msgid "- local options" msgstr "- ×פשרויות מקומיות" #. gdk_threads_enter(); #: ../src/timers.c:119 msgid "Cap. Image" msgstr "לכד תמונה" #: ../src/timers.c:217 msgid "Guvcview Warning:" msgstr "" #: ../src/timers.c:217 msgid "Not enough free space left on disk" msgstr "" #: ../src/v4l2_controls.c:711 msgid "Left" msgstr "שמ×ל" #: ../src/v4l2_controls.c:712 msgid "Right" msgstr "ימין" #: ../src/v4l2_controls.c:716 msgid "Down" msgstr "למטה" #: ../src/v4l2_controls.c:717 msgid "Up" msgstr "למעלה" #: ../src/v4l2_controls.c:762 msgid "Off" msgstr "" #: ../src/v4l2_controls.c:762 msgid "On" msgstr "" #: ../src/v4l2_controls.c:762 msgid "Blinking" msgstr "" #: ../src/v4l2_controls.c:762 msgid "Auto" msgstr "" #. turn it into a menu control #: ../src/v4l2_controls.c:813 msgid "8 bit" msgstr "" #: ../src/v4l2_controls.c:813 msgid "12 bit" msgstr "" #: ../src/v4l2_dyna_ctrls.c:96 msgid "Pan (relative)" msgstr "" #: ../src/v4l2_dyna_ctrls.c:109 msgid "Tilt (relative)" msgstr "הטייה (יחסי)" #: ../src/v4l2_dyna_ctrls.c:122 msgid "Pan Reset" msgstr "" #: ../src/v4l2_dyna_ctrls.c:135 msgid "Tilt Reset" msgstr "×יפוס הטייה" #: ../src/v4l2_dyna_ctrls.c:148 msgid "Focus (absolute)" msgstr "מיקוד (מוחלט)" #: ../src/v4l2_dyna_ctrls.c:161 msgid "LED1 Mode" msgstr "מצב LED1" #: ../src/v4l2_dyna_ctrls.c:174 msgid "LED1 Frequency" msgstr "תדר LED1" #: ../src/v4l2_dyna_ctrls.c:187 msgid "Disable video processing" msgstr "בטל עיבוד ויד×ו" #: ../src/v4l2_dyna_ctrls.c:200 msgid "Raw bits per pixel" msgstr "" #. needed only for language files (not used) #. V4L2 control strings #: ../src/v4l2uvc.c:56 msgid "User Controls" msgstr "פקדי משתמש" #: ../src/v4l2uvc.c:57 msgid "Brightness" msgstr "בהירות" #: ../src/v4l2uvc.c:58 msgid "Contrast" msgstr "ניגודיות" #: ../src/v4l2uvc.c:59 msgid "Hue" msgstr "גוון" #: ../src/v4l2uvc.c:60 msgid "Saturation" msgstr "רוויה" #: ../src/v4l2uvc.c:61 msgid "Sharpness" msgstr "חדות" #: ../src/v4l2uvc.c:62 msgid "Gamma" msgstr "×’×מה" #: ../src/v4l2uvc.c:63 msgid "Backlight Compensation" msgstr "פיצוי ×ור ×חורי" #: ../src/v4l2uvc.c:64 msgid "Power Line Frequency" msgstr "תדר חשמל" #: ../src/v4l2uvc.c:65 msgid "Hue, Automatic" msgstr "גוון, ×וטומטי" #: ../src/v4l2uvc.c:66 msgid "Focus, Auto" msgstr "מיקוד, ×וטומטי" #: ../src/v4l2uvc.c:67 msgid "Manual Mode" msgstr "מצב ידני" #: ../src/v4l2uvc.c:68 msgid "Auto Mode" msgstr "מצב ×וטומטי" #: ../src/v4l2uvc.c:69 msgid "Shutter Priority Mode" msgstr "מצב עדיפות צמצ×" #: ../src/v4l2uvc.c:70 msgid "Aperture Priority Mode" msgstr "" #: ../src/v4l2uvc.c:71 msgid "Black Level" msgstr "רמת שחור" #: ../src/v4l2uvc.c:72 msgid "White Balance, Automatic" msgstr "×יזון לובן, ×וטומטי" #: ../src/v4l2uvc.c:73 msgid "Do White Balance" msgstr "" #: ../src/v4l2uvc.c:74 msgid "Red Balance" msgstr "×יזון ×”×דו×" #: ../src/v4l2uvc.c:75 msgid "Blue Balance" msgstr "×יזון הכחול" #: ../src/v4l2uvc.c:76 msgid "Exposure" msgstr "חשיפה" #: ../src/v4l2uvc.c:77 msgid "Gain, Automatic" msgstr "מרווח, ×וטומטי" #: ../src/v4l2uvc.c:78 msgid "Gain" msgstr "הישג" #: ../src/v4l2uvc.c:79 msgid "Horizontal Flip" msgstr "היפוך ×ופקי" #: ../src/v4l2uvc.c:80 msgid "Vertical Flip" msgstr "היפוך ×× ×›×™" #: ../src/v4l2uvc.c:81 msgid "Horizontal Center" msgstr "מרכז ×ופקי" #: ../src/v4l2uvc.c:82 msgid "Vertical Center" msgstr "מרכז ×× ×›×™" #: ../src/v4l2uvc.c:83 msgid "Chroma AGC" msgstr "" #: ../src/v4l2uvc.c:84 msgid "Color Killer" msgstr "" #: ../src/v4l2uvc.c:85 msgid "Color Effects" msgstr "" #. CAMERA CLASS control strings #: ../src/v4l2uvc.c:88 msgid "Camera Controls" msgstr "פקדי מצלמה" #: ../src/v4l2uvc.c:89 msgid "Auto Exposure" msgstr "חשיפה ×וטומטית" #: ../src/v4l2uvc.c:90 msgid "Exposure Time, Absolute" msgstr "זמן חשיפה, מוחלט" #: ../src/v4l2uvc.c:91 msgid "Exposure, Dynamic Framerate" msgstr "" #: ../src/v4l2uvc.c:92 msgid "Pan, Relative" msgstr "" #: ../src/v4l2uvc.c:93 msgid "Tilt, Relative" msgstr "נטייה, יחסי" #: ../src/v4l2uvc.c:94 msgid "Pan, Reset" msgstr "" #: ../src/v4l2uvc.c:95 msgid "Tilt, Reset" msgstr "נטייה, ×פס" #: ../src/v4l2uvc.c:96 msgid "Pan, Absolute" msgstr "" #: ../src/v4l2uvc.c:98 msgid "Focus, Absolute" msgstr "מיקוד, מוחלט" #: ../src/v4l2uvc.c:99 msgid "Focus, Relative" msgstr "מיקוד, יחסי" #: ../src/v4l2uvc.c:100 msgid "Focus, Automatic" msgstr "מיקוד, ×וטומטי" #: ../src/v4l2uvc.c:101 msgid "Zoom, Absolute" msgstr "" #: ../src/v4l2uvc.c:102 msgid "Zoom, Relative" msgstr "" #: ../src/v4l2uvc.c:103 msgid "Zoom, Continuous" msgstr "" #: ../src/v4l2uvc.c:104 msgid "Privacy" msgstr "פרטיות" #. UVC specific control strings #: ../src/v4l2uvc.c:107 msgid "Exposure, Auto" msgstr "חשיפה, ×וטומטי" #: ../src/v4l2uvc.c:108 msgid "Exposure, Auto Priority" msgstr "חשיפה, עדיפות ×וטומטית" #: ../src/v4l2uvc.c:109 msgid "Exposure (Absolute)" msgstr "חשיפה (מוחלטת)" #: ../src/v4l2uvc.c:110 msgid "White Balance Temperature, Auto" msgstr "טמפרטורת ×יזון הלבן, ×וטומטית" #: ../src/v4l2uvc.c:111 msgid "White Balance Temperature" msgstr "טפמרטורת ×יזון הלבן" #: ../src/v4l2uvc.c:112 msgid "White Balance Component, Auto" msgstr "רכיב ×יזון הלבן, ×וטומטי" #: ../src/v4l2uvc.c:113 msgid "White Balance Blue Component" msgstr "רכיב ×יזון הלבן הכחול" #: ../src/v4l2uvc.c:114 msgid "White Balance Red Component" msgstr "רכיב ×יזון הלבן ×”×דו×" #. libwebcam specific control strings #: ../src/v4l2uvc.c:117 msgid "Focus" msgstr "" #: ../src/v4l2uvc.c:118 msgid "Focus (Absolute)" msgstr "" #: ../src/vcodecs.c:63 msgid "MJPG - compressed" msgstr "MJPG - מקובץ" #: ../src/vcodecs.c:99 msgid "YUY2 - uncomp YUV" msgstr "YUY2 - YUV ×œ× ×ž×§×•×‘×¥" #: ../src/vcodecs.c:135 msgid "RGB - uncomp BMP" msgstr "RGB - BMP ×œ× ×ž×§×•×‘×¥" #: ../src/vcodecs.c:171 msgid "MPEG video 1" msgstr "MPEG ויד×ו 1" #: ../src/vcodecs.c:207 msgid "FLV1 - flash video 1" msgstr "FLV1 - ויד×ו פל×ש 1" #: ../src/vcodecs.c:243 msgid "WMV1 - win. med. video 7" msgstr "WMV1 - וינדוס מדיה ויד×ו 7" #: ../src/vcodecs.c:279 msgid "MPG2 - MPG2 format" msgstr "MPG2 - פורמט MPG2" #: ../src/vcodecs.c:315 msgid "MS MP4 V3" msgstr "MS MP4 V3" #: ../src/vcodecs.c:351 msgid "MPEG4-ASP" msgstr "" #: ../src/vcodecs.c:387 msgid "MPEG4-AVC (H264)" msgstr "" #: ../src/vcodecs.c:427 msgid "VP8 (VP8)" msgstr "" #: ../src/vcodecs.c:463 msgid "Theora (ogg theora)" msgstr "" #: ../src/video_format.c:43 msgid "AVI - avi format" msgstr "" #: ../src/video_format.c:52 msgid "MKV - Matroska format" msgstr "" #: ../src/video_format.c:61 msgid "WEBM - format" msgstr "" #: ../src/video_tab.c:208 msgid "Frame Rate:" msgstr "" #: ../src/video_tab.c:215 msgid " Show" msgstr " הצג" #: ../src/video_tab.c:237 msgid "Resolution:" msgstr "רזולוציה:" #: ../src/video_tab.c:263 msgid "Camera Output:" msgstr "פלט מצלמה:" #: ../src/video_tab.c:285 msgid "Apply" msgstr "החל" #: ../src/video_tab.c:292 msgid "Quality:" msgstr "×יכות:" #: ../src/video_tab.c:302 msgid "---- Video Filters ----" msgstr "--- מסנני ויד×ו ---" #. Mirror #: ../src/video_tab.c:321 msgid " Mirror" msgstr " מר××”" #. Upturn #: ../src/video_tab.c:332 msgid " Invert" msgstr " הפוך" #. Negate #: ../src/video_tab.c:343 msgid " Negative" msgstr "" #. Mono #: ../src/video_tab.c:354 msgid " Mono" msgstr " מונו" #. Pieces #: ../src/video_tab.c:366 msgid " Pieces" msgstr " חלקי×" #. Particles #: ../src/video_tab.c:378 msgid " Particles" msgstr "" guvcview-src-1.7.1/po/nl.po0000664000175000017500000005453612173235416014600 0ustar paulopaulo# Dutch translation for guvcview # Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 # This file is distributed under the same license as the guvcview package. # FIRST AUTHOR , 2009. # msgid "" msgstr "" "Project-Id-Version: guvcview\n" "Report-Msgid-Bugs-To: pj.assis@gmail.com\n" "POT-Creation-Date: 2013-07-16 12:53+0000\n" "PO-Revision-Date: 2013-05-04 16:28+0000\n" "Last-Translator: Pjotr12345 \n" "Language-Team: Dutch \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2013-07-22 13:32+0000\n" "X-Generator: Launchpad (build 16696)\n" "Language: nl\n" #: ../data/guvcview.desktop.in.in.h:1 msgid "guvcview" msgstr "guvcview" #: ../data/guvcview.desktop.in.in.h:2 msgid "GTK UVC video viewer" msgstr "GTK UVC videokijker" #: ../data/guvcview.desktop.in.in.h:3 msgid "A video viewer and capturer for the linux uvc driver" msgstr "" "Een programma voor het bekijken en opnemen van video, voor het " "Linuxstuurprogramma uvc" #: ../src/acodecs.c:59 msgid "PCM - uncompressed (16 bit)" msgstr "PCM - niet-gecomprimeerd (16 bit)" #: ../src/acodecs.c:76 msgid "MPEG2 - (lavc)" msgstr "MPEG2 - (lavc)" #: ../src/acodecs.c:93 msgid "MP3 - (lavc)" msgstr "MP3 - (lavc)" #: ../src/acodecs.c:110 msgid "Dolby AC3 - (lavc)" msgstr "Dolby AC3 - (lavc)" #: ../src/acodecs.c:127 msgid "ACC Low - (faac)" msgstr "ACC Low - (faac)" #: ../src/acodecs.c:144 msgid "Vorbis" msgstr "Vorbis" #: ../src/audio_tab.c:80 msgid "Audio" msgstr "Audio" #: ../src/audio_tab.c:98 msgid " Sound" msgstr " Geluid" #. VU meter on the image (OSD) #: ../src/audio_tab.c:109 msgid " Show VU meter" msgstr " VU-meter tonen" #: ../src/audio_tab.c:121 msgid "Audio API:" msgstr "Audio API:" #: ../src/audio_tab.c:132 msgid "PORTAUDIO" msgstr "PORTAUDIO" #: ../src/audio_tab.c:133 msgid "PULSEAUDIO" msgstr "PULSEAUDIO" #: ../src/audio_tab.c:149 ../src/audio_tab.c:172 msgid "Input Device:" msgstr "Invoerapparaat:" #: ../src/audio_tab.c:182 ../src/audio_tab.c:214 msgid "Dev. Default" msgstr "Dev. standaard" #: ../src/audio_tab.c:204 msgid "Sample Rate:" msgstr "Samplesnelheid:" #: ../src/audio_tab.c:215 msgid "1 - mono" msgstr "1 - mono" #: ../src/audio_tab.c:216 msgid "2 - stereo" msgstr "2 - stereo" #: ../src/audio_tab.c:251 msgid "Channels:" msgstr "Kanalen:" #: ../src/audio_tab.c:302 msgid "---- Audio Effects ----" msgstr "---- Audio-effecten ----" #. Echo #: ../src/audio_tab.c:321 msgid " Echo" msgstr " Echo" #. FUZZ #: ../src/audio_tab.c:332 msgid " Fuzz" msgstr " Fuzz" #. Reverb #: ../src/audio_tab.c:344 msgid " Reverb" msgstr " Weergalm" #. WahWah #: ../src/audio_tab.c:356 msgid " WahWah" msgstr " WahWah" #. Ducky #: ../src/audio_tab.c:368 msgid " Ducky" msgstr " Ducky" #: ../src/callbacks.c:108 msgid "Error" msgstr "Fout" #: ../src/callbacks.c:132 msgid "" "\n" "You have more than one video device installed.\n" "Do you want to try another one ?\n" msgstr "" "\n" "U hebt meer dan één video-apparaat geïnstalleerd.\n" "Wilt u een ander proberen?\n" #. Devices #: ../src/callbacks.c:139 ../src/video_tab.c:103 msgid "Device:" msgstr "Apparaat:" #: ../src/callbacks.c:271 msgid "Save File" msgstr "Bestand opslaan" #: ../src/callbacks.c:283 msgid "File Format:" msgstr "Bestandtype:" #: ../src/callbacks.c:454 msgid "codec values" msgstr "codecwaarden" #: ../src/callbacks.c:465 msgid "" " encoder fps: \n" " (0 - use fps combobox value)" msgstr "" " encoder fps: \n" " (0 - gebruik fps-comboboxwaarde)" #: ../src/callbacks.c:478 msgid " monotonic pts" msgstr " monotonic pts" #. bit rate #: ../src/callbacks.c:485 ../src/callbacks.c:808 msgid "bit rate: " msgstr "bitrate: " #: ../src/callbacks.c:498 msgid "qmax: " msgstr "qmax: " #: ../src/callbacks.c:511 msgid "qmin: " msgstr "qmin: " #: ../src/callbacks.c:524 msgid "max. qdiff: " msgstr "max. qdiff: " #: ../src/callbacks.c:537 msgid "dia size: " msgstr "diagrootte: " #: ../src/callbacks.c:550 msgid "pre dia size: " msgstr "pre-diagrootte: " #: ../src/callbacks.c:563 msgid "pre me: " msgstr "pre me: " #: ../src/callbacks.c:576 msgid "pre cmp: " msgstr "pre cmp: " #: ../src/callbacks.c:589 msgid "cmp: " msgstr "cmp: " #: ../src/callbacks.c:602 msgid "sub cmp: " msgstr "sub cmp: " #: ../src/callbacks.c:615 msgid "last predictor count: " msgstr "laatste telling van voorspeller: " #: ../src/callbacks.c:628 msgid "gop size: " msgstr "gop-grootte: " #: ../src/callbacks.c:641 msgid "qcompress: " msgstr "qcompress: " #: ../src/callbacks.c:654 msgid "qblur: " msgstr "qblur: " #: ../src/callbacks.c:667 msgid "subq: " msgstr "subq: " #: ../src/callbacks.c:680 msgid "framerefs: " msgstr "framerefs: " #: ../src/callbacks.c:693 msgid "me method: " msgstr "me-methode: " #: ../src/callbacks.c:706 msgid "mb decision: " msgstr "mb-besluit: " #: ../src/callbacks.c:719 msgid "max B frames: " msgstr "max B frames: " #: ../src/callbacks.c:732 msgid "num threads: " msgstr "num threads: " #: ../src/callbacks.c:795 msgid "audio codec values" msgstr "audio codec-waarden" #. sample format #: ../src/callbacks.c:822 msgid "sample format: " msgstr "bestandtype van voorbeeld: " #: ../src/callbacks.c:1250 msgid "start new" msgstr "start nieuw" #: ../src/callbacks.c:1253 msgid "restart" msgstr "herstarten" #: ../src/callbacks.c:1255 msgid "new" msgstr "nieuw" #: ../src/callbacks.c:1257 msgid "cancel" msgstr "annuleren" #: ../src/callbacks.c:1262 msgid "" "launch new process or restart?.\n" "\n" msgstr "" "nieuw proces starten of herstarten?\n" "\n" #: ../src/callbacks.c:1716 ../src/guvcview.c:537 msgid "Cap. Image (I)" msgstr "Afbeelding vastleggen (I)" #. disable image controls #: ../src/callbacks.c:1727 ../src/guvcview.c:658 ../src/timers.c:101 msgid "capturing photo to" msgstr "foto wordt vastgelegd naar" #: ../src/callbacks.c:1786 ../src/guvcview.c:547 msgid "Cap. Video (V)" msgstr "Video Vastleggen (V)" #: ../src/callbacks.c:1812 ../src/guvcview.c:708 msgid "capturing video to" msgstr "video wordt vastgelegd naar" #. vid capture enabled from start #: ../src/callbacks.c:1845 ../src/guvcview.c:542 msgid "Stop Video (V)" msgstr "Stop Video (V)" #: ../src/callbacks.c:1901 ../src/menubar.c:66 msgid "Save Profile" msgstr "Profiel opslaan" #: ../src/callbacks.c:1914 ../src/menubar.c:65 msgid "Load Profile" msgstr "Profiel laden" #: ../src/create_video.c:1016 ../src/guvcview.c:700 msgid "Cap. Video" msgstr "Video opn." #: ../src/guvcview.c:279 msgid "Guvcview Video Capture" msgstr "Guvcview video-opname" #: ../src/guvcview.c:291 msgid "GUVCViewer Controls" msgstr "GUVCkijker bedieningsknoppen" #. can't open device #: ../src/guvcview.c:336 msgid "" "Guvcview error:\n" "\n" "Unable to open device" msgstr "" "Guvcview-fout:\n" "\n" "Kan apparaat niet openen" #: ../src/guvcview.c:337 msgid "" "Please make sure the camera is connected\n" "and that the correct driver is installed." msgstr "" "Zorg er a.u.b. voor, dat de camera is verbonden\n" "en dat het juiste stuurprogramma is geïnstalleerd." #. uvc extension controls OK, give warning and shutdown (called with --add_ctrls) #: ../src/guvcview.c:342 msgid "" "Guvcview:\n" "\n" "UVC Extension controls" msgstr "" "Guvcview:\n" "\n" "Bedieningsknoppen voor UVC Extensie" #: ../src/guvcview.c:343 msgid "Extension controls were added to the UVC driver" msgstr "" "Bedieningsknoppen voor extensie werden toegevoegd aan het UVC-stuurprogramma" #. uvc extension controls error - EACCES (needs root user) #: ../src/guvcview.c:350 msgid "" "Guvcview error:\n" "\n" "UVC Extension controls" msgstr "" "Guvcview-fout:\n" "\n" "Bedieningsknoppen voor UVC Extensie" #: ../src/guvcview.c:351 msgid "" "An error occurred while adding extension\n" "controls to the UVC driver\n" "Make sure you run guvcview as root (or sudo)." msgstr "" "Er is een fout opgetreden tijdens het\n" "toevoegen van bedieningsknoppen aan\n" "het UVC-stuurprogramma.\n" "Zorg ervoor dat u guvcview draait als root\n" "(of met sudo)." #: ../src/guvcview.c:377 ../src/guvcview.c:455 msgid "" "Guvcview error:\n" "\n" "Can't set a valid video stream for guvcview" msgstr "" "Guvcview-fout:\n" "\n" "Kan geen geldige videostroom instellen voor guvcview" #: ../src/guvcview.c:378 ../src/guvcview.c:456 msgid "" "Make sure your device driver is v4l2 compliant\n" "and that it is properly installed." msgstr "" "Zorg ervoor dat het stuurprogramma van uw\n" "apparaat voldoet aan v4l2 en dat het\n" "correct is geïnstalleerd." #: ../src/guvcview.c:400 ../src/guvcview.c:422 msgid "" "Guvcview error:\n" "\n" "Unable to start with minimum setup" msgstr "" "Guvcview-fout:\n" "\n" "Kan niet opstarten met minimale\n" "instellingen" #: ../src/guvcview.c:401 ../src/guvcview.c:423 msgid "Please reconnect your camera." msgstr "Sluit uw camera opnieuw aan a.u.b." #: ../src/guvcview.c:430 msgid "" "Guvcview error:\n" "\n" "Couldn't query device capabilities" msgstr "" "Guvcview-fout:\n" "\n" "Kon de capaciteiten van het\n" "apparaat niet opvragen" #: ../src/guvcview.c:431 msgid "Make sure the device driver supports v4l2." msgstr "Zorg ervoor dat het stuurprogramma v4l2 ondersteunt." #: ../src/guvcview.c:435 msgid "" "Guvcview error:\n" "\n" "Read method error" msgstr "" "Guvcview-fout:\n" "\n" "Leesmethodefout" #: ../src/guvcview.c:436 msgid "Please try mmap instead (--capture_method=1)." msgstr "Probeer in plaats daarvan a.u.b. mmap (--capture_method=1)." #: ../src/guvcview.c:444 msgid "" "Guvcview error:\n" "\n" "Unable to allocate Buffers" msgstr "" "Guvcview-fout:\n" "\n" "Kan geen buffers toewijzen" #: ../src/guvcview.c:445 msgid "Please try restarting your system." msgstr "Probeer a.u.b. of het helpt wanneer u uw systeem herstart." #: ../src/guvcview.c:490 msgid "Image Controls" msgstr "Fotobedieningsknoppen" #. image auto capture #: ../src/guvcview.c:533 msgid "Stop Auto (I)" msgstr "Stop Auto (I)" #: ../src/guvcview.c:644 msgid "" "Guvcview error:\n" "\n" "Unable to create Video Thread" msgstr "" "Guvcview-fout:\n" "\n" "Kan geen videodraad maken" #: ../src/guvcview.c:645 msgid "Please report it to http://developer.berlios.de/bugs/?group_id=8179" msgstr "Meld het a.u.b. aan http://developer.berlios.de/bugs/?group_id=8179" #: ../src/img_controls.c:121 msgid "Auto Focus (continuous)" msgstr "Automatische scherpstelling (voortdurend)" #: ../src/img_controls.c:122 msgid "set Focus" msgstr "scherpstelling instellen" #: ../src/image_format.c:35 msgid "Jpeg (jpg)" msgstr "Jpeg (jpg)" #: ../src/image_format.c:41 msgid "Bitmap (Bmp)" msgstr "Bitmap (Bmp)" #: ../src/image_format.c:47 msgid "Portable Network Graphics (Png)" msgstr "Portable Network Graphics (Png)" #: ../src/image_format.c:53 msgid "Raw Image (raw)" msgstr "Raw Image (raw)" #. controls menu #: ../src/menubar.c:64 msgid "Settings" msgstr "Instellingen" #: ../src/menubar.c:67 msgid "Hardware Defaults" msgstr "Apparatuurstandaarden" #: ../src/menubar.c:75 msgid "Camera Button" msgstr "Cameraknop" #: ../src/menubar.c:79 msgid "Capture Image" msgstr "Afbeelding vastleggen" #: ../src/menubar.c:84 msgid "Capture Video" msgstr "Video vastleggen" #. video menu #: ../src/menubar.c:144 ../src/video_tab.c:87 msgid "Video" msgstr "Video" #: ../src/menubar.c:145 ../src/menubar.c:231 msgid "File" msgstr "Bestand" #: ../src/menubar.c:146 ../src/menubar.c:232 msgid "Increment Filename" msgstr "Bestandnaam aanvullen" #: ../src/menubar.c:164 msgid "Video Codec" msgstr "Videocodec" #: ../src/menubar.c:187 msgid "Video Codec Properties" msgstr "Eigenschappen van videocodec" #: ../src/menubar.c:194 msgid "Audio Codec" msgstr "Audiocodec" #: ../src/menubar.c:215 msgid "Audio Codec Properties" msgstr "Eigenschappen van audiocodec" #. photo menu #: ../src/menubar.c:230 msgid "Photo" msgstr "Foto" #: ../src/options.c:752 msgid "Prints version" msgstr "Drukt versie af" #: ../src/options.c:753 msgid "Displays debug information" msgstr "Toont foutopsporingsinformatie" #: ../src/options.c:754 msgid "Video Device to use [default: /dev/video0]" msgstr "Te gebruiken video-apparaat [standaard: /dev/video0]" #: ../src/options.c:755 msgid "Exit after adding UVC extension controls (needs root/sudo)" msgstr "" "Afsluiten na het toevoegen van bedieningsknoppen voor UVC-extensie (heeft " "root/sudo nodig)" #: ../src/options.c:756 msgid "Don't stream video (image controls only)" msgstr "Maak geen videostroom (alleen fotobedieningsknoppen)" #: ../src/options.c:757 msgid "Don't display a GUI" msgstr "Toon geen grafische schil" #: ../src/options.c:758 msgid "Capture method (1-mmap (default) 2-read)" msgstr "Opnamemethode (1-mmap (standaard) 2-read)" #: ../src/options.c:759 msgid "Configuration file" msgstr "Configuratiebestand" #: ../src/options.c:760 msgid "Hardware accelaration (enable(1) | disable(0))" msgstr "Hardwareversnelling (aan(1) | uit(0))" #: ../src/options.c:761 msgid "" "Pixel " "format(mjpg|jpeg|yuyv|yvyu|uyvy|yyuv|yu12|yv12|nv12|nv21|nv16|nv61|y41p|grey|" "y10b|y16 |s501|s505|s508|gbrg|grbg|ba81|rggb|bgr3|rgb3)" msgstr "" "Pixel " "format(mjpg|jpeg|yuyv|yvyu|uyvy|yyuv|yu12|yv12|nv12|nv21|nv16|nv61|y41p|grey|" "y10b|y16 |s501|s505|s508|gbrg|grbg|ba81|rggb|bgr3|rgb3)" #: ../src/options.c:762 msgid "Frame size, default: 640x480" msgstr "Beeldgrootte, standaard: 640x480" #: ../src/options.c:763 msgid "Image File name" msgstr "Naam van fotobestand" #: ../src/options.c:764 msgid "Image capture interval in seconds" msgstr "Tussenpoze tussen foto's maken, in seconden" #: ../src/options.c:765 msgid "Number of Pictures to capture" msgstr "Aantal te maken foto's" #: ../src/options.c:766 msgid "Video File name (capture from start)" msgstr "Naam van videobestand (opnemen vanaf begin)" #: ../src/options.c:767 msgid "Video capture time (in seconds)" msgstr "Video-opnametijd (in seconden)" #: ../src/options.c:768 msgid "Exits guvcview after closing video" msgstr "Sluit guvcview af na sluiten van film" #: ../src/options.c:769 msgid "Number of initial frames to skip" msgstr "Aantal filmbeeldjes dat in het begin moet worden overgeslagen" #: ../src/options.c:770 msgid "Show FPS value (enable(1) | disable (0))" msgstr "Toon FPS-waarde (aan(1) | uit (0))" #: ../src/options.c:771 msgid "Load Profile at start" msgstr "Profiel laden bij start" #: ../src/options.c:777 msgid "- local options" msgstr "- plaatselijke opties" #. gdk_threads_enter(); #: ../src/timers.c:119 msgid "Cap. Image" msgstr "Foto maken" #: ../src/timers.c:217 msgid "Guvcview Warning:" msgstr "Guvcview -waarschuwing:" #: ../src/timers.c:217 msgid "Not enough free space left on disk" msgstr "Niet genoeg vrije ruimte over op schijf" #: ../src/v4l2_controls.c:711 msgid "Left" msgstr "Links" #: ../src/v4l2_controls.c:712 msgid "Right" msgstr "Rechts" #: ../src/v4l2_controls.c:716 msgid "Down" msgstr "Omlaag" #: ../src/v4l2_controls.c:717 msgid "Up" msgstr "Omhoog" #: ../src/v4l2_controls.c:762 msgid "Off" msgstr "Uit" #: ../src/v4l2_controls.c:762 msgid "On" msgstr "Aan" #: ../src/v4l2_controls.c:762 msgid "Blinking" msgstr "Knipperen" #: ../src/v4l2_controls.c:762 msgid "Auto" msgstr "Auto" #. turn it into a menu control #: ../src/v4l2_controls.c:813 msgid "8 bit" msgstr "8-bit" #: ../src/v4l2_controls.c:813 msgid "12 bit" msgstr "12-bit" #: ../src/v4l2_dyna_ctrls.c:96 msgid "Pan (relative)" msgstr "Meedraaien (relatief)" #: ../src/v4l2_dyna_ctrls.c:109 msgid "Tilt (relative)" msgstr "Kantelen (relatief)" #: ../src/v4l2_dyna_ctrls.c:122 msgid "Pan Reset" msgstr "Meedraaien terugzetten op standaardwaarden" #: ../src/v4l2_dyna_ctrls.c:135 msgid "Tilt Reset" msgstr "Kantelen terugzetten op standaardwaarden" #: ../src/v4l2_dyna_ctrls.c:148 msgid "Focus (absolute)" msgstr "Scherpstellen (absoluut)" #: ../src/v4l2_dyna_ctrls.c:161 msgid "LED1 Mode" msgstr "LED1-modus" #: ../src/v4l2_dyna_ctrls.c:174 msgid "LED1 Frequency" msgstr "LED1-frequentie" #: ../src/v4l2_dyna_ctrls.c:187 msgid "Disable video processing" msgstr "Videobewerking uitschakelen" #: ../src/v4l2_dyna_ctrls.c:200 msgid "Raw bits per pixel" msgstr "Ruwe bits per pixel" #. needed only for language files (not used) #. V4L2 control strings #: ../src/v4l2uvc.c:56 msgid "User Controls" msgstr "Bedieningsknoppen voor gebruiker" #: ../src/v4l2uvc.c:57 msgid "Brightness" msgstr "Helderheid" #: ../src/v4l2uvc.c:58 msgid "Contrast" msgstr "Contrast" #: ../src/v4l2uvc.c:59 msgid "Hue" msgstr "Tint" #: ../src/v4l2uvc.c:60 msgid "Saturation" msgstr "Verzadiging" #: ../src/v4l2uvc.c:61 msgid "Sharpness" msgstr "Scherpte" #: ../src/v4l2uvc.c:62 msgid "Gamma" msgstr "Gamma" #: ../src/v4l2uvc.c:63 msgid "Backlight Compensation" msgstr "Achtergrondverlichtingscompensatie" #: ../src/v4l2uvc.c:64 msgid "Power Line Frequency" msgstr "Frequentie van de elektrische aansluiting" #: ../src/v4l2uvc.c:65 msgid "Hue, Automatic" msgstr "Waas, automatisch" #: ../src/v4l2uvc.c:66 msgid "Focus, Auto" msgstr "Scherpstelling, automatisch" #: ../src/v4l2uvc.c:67 msgid "Manual Mode" msgstr "Handmatige modus" #: ../src/v4l2uvc.c:68 msgid "Auto Mode" msgstr "Automatische modus" #: ../src/v4l2uvc.c:69 msgid "Shutter Priority Mode" msgstr "Voorkeurmodus van sluiter" #: ../src/v4l2uvc.c:70 msgid "Aperture Priority Mode" msgstr "Voorkeurmodus van lensopening" #: ../src/v4l2uvc.c:71 msgid "Black Level" msgstr "Zwartniveau" #: ../src/v4l2uvc.c:72 msgid "White Balance, Automatic" msgstr "Witbalans, automatisch" #: ../src/v4l2uvc.c:73 msgid "Do White Balance" msgstr "Pas witbalans toe" #: ../src/v4l2uvc.c:74 msgid "Red Balance" msgstr "Roodbalans" #: ../src/v4l2uvc.c:75 msgid "Blue Balance" msgstr "Blauwbalans" #: ../src/v4l2uvc.c:76 msgid "Exposure" msgstr "Belichting" #: ../src/v4l2uvc.c:77 msgid "Gain, Automatic" msgstr "Versterking, automatisch" #: ../src/v4l2uvc.c:78 msgid "Gain" msgstr "Versterking" #: ../src/v4l2uvc.c:79 msgid "Horizontal Flip" msgstr "Horizontaal spiegelen" #: ../src/v4l2uvc.c:80 msgid "Vertical Flip" msgstr "Verticaal spiegelen" #: ../src/v4l2uvc.c:81 msgid "Horizontal Center" msgstr "Horizontaal centreren" #: ../src/v4l2uvc.c:82 msgid "Vertical Center" msgstr "Verticaal centreren" #: ../src/v4l2uvc.c:83 msgid "Chroma AGC" msgstr "Chroma AGC" #: ../src/v4l2uvc.c:84 msgid "Color Killer" msgstr "Kleurdoder" #: ../src/v4l2uvc.c:85 msgid "Color Effects" msgstr "Kleureffecten" #. CAMERA CLASS control strings #: ../src/v4l2uvc.c:88 msgid "Camera Controls" msgstr "Bedieningsknoppen voor camera" #: ../src/v4l2uvc.c:89 msgid "Auto Exposure" msgstr "Autobelichting" #: ../src/v4l2uvc.c:90 msgid "Exposure Time, Absolute" msgstr "Belichtingstijd, absoluut" #: ../src/v4l2uvc.c:91 msgid "Exposure, Dynamic Framerate" msgstr "Belichtingstijd, dynamische opnamesnelheid" #: ../src/v4l2uvc.c:92 msgid "Pan, Relative" msgstr "Meedraaien, relatief" #: ../src/v4l2uvc.c:93 msgid "Tilt, Relative" msgstr "Kantelen, relatief" #: ../src/v4l2uvc.c:94 msgid "Pan, Reset" msgstr "Meedraaien, terugzetten op standaardwaarden" #: ../src/v4l2uvc.c:95 msgid "Tilt, Reset" msgstr "Kantelen, terugzetten op standaardwaarden" #: ../src/v4l2uvc.c:96 msgid "Pan, Absolute" msgstr "Meedraaien, absoluut" #: ../src/v4l2uvc.c:98 msgid "Focus, Absolute" msgstr "Scherpstellen, absoluut" #: ../src/v4l2uvc.c:99 msgid "Focus, Relative" msgstr "Scherpstellen, relatief" #: ../src/v4l2uvc.c:100 msgid "Focus, Automatic" msgstr "Scherpstellen, automatisch" #: ../src/v4l2uvc.c:101 msgid "Zoom, Absolute" msgstr "Zoomen, absoluut" #: ../src/v4l2uvc.c:102 msgid "Zoom, Relative" msgstr "Zoomen, relatief" #: ../src/v4l2uvc.c:103 msgid "Zoom, Continuous" msgstr "Zoomen, bij voortduring" #: ../src/v4l2uvc.c:104 msgid "Privacy" msgstr "Privéleven" #. UVC specific control strings #: ../src/v4l2uvc.c:107 msgid "Exposure, Auto" msgstr "Belichting, auto" #: ../src/v4l2uvc.c:108 msgid "Exposure, Auto Priority" msgstr "Belichting, auto-prioriteit" #: ../src/v4l2uvc.c:109 msgid "Exposure (Absolute)" msgstr "Belichting (absoluut)" #: ../src/v4l2uvc.c:110 msgid "White Balance Temperature, Auto" msgstr "Witbalanstemperatuur, auto" #: ../src/v4l2uvc.c:111 msgid "White Balance Temperature" msgstr "Witbalanstemperatuur" #: ../src/v4l2uvc.c:112 msgid "White Balance Component, Auto" msgstr "Witbalans-onderdeel, auto" #: ../src/v4l2uvc.c:113 msgid "White Balance Blue Component" msgstr "Blauw witbalansonderdeel" #: ../src/v4l2uvc.c:114 msgid "White Balance Red Component" msgstr "Rood witbalansonderdeel" #. libwebcam specific control strings #: ../src/v4l2uvc.c:117 msgid "Focus" msgstr "Scherpstelling" #: ../src/v4l2uvc.c:118 msgid "Focus (Absolute)" msgstr "Scherpstelling (absoluut)" #: ../src/vcodecs.c:63 msgid "MJPG - compressed" msgstr "MJPG - gecomprimeerd" #: ../src/vcodecs.c:99 msgid "YUY2 - uncomp YUV" msgstr "YUY2 - ongecomp YUV" #: ../src/vcodecs.c:135 msgid "RGB - uncomp BMP" msgstr "RGB - ongecomp BMP" #: ../src/vcodecs.c:171 msgid "MPEG video 1" msgstr "MPEG video 1" #: ../src/vcodecs.c:207 msgid "FLV1 - flash video 1" msgstr "FLV1 - flash video 1" #: ../src/vcodecs.c:243 msgid "WMV1 - win. med. video 7" msgstr "WMV1 - win. med. video 7" #: ../src/vcodecs.c:279 msgid "MPG2 - MPG2 format" msgstr "MPG2 - MPG2 formaat" #: ../src/vcodecs.c:315 msgid "MS MP4 V3" msgstr "MS MP4 V3" #: ../src/vcodecs.c:351 msgid "MPEG4-ASP" msgstr "MPEG4-ASP" #: ../src/vcodecs.c:387 msgid "MPEG4-AVC (H264)" msgstr "MPEG4-AVC (H264)" #: ../src/vcodecs.c:427 msgid "VP8 (VP8)" msgstr "VP8 (VP8)" #: ../src/vcodecs.c:463 msgid "Theora (ogg theora)" msgstr "Theora (ogg theora)" #: ../src/video_format.c:43 msgid "AVI - avi format" msgstr "AVI - aviformaat" #: ../src/video_format.c:52 msgid "MKV - Matroska format" msgstr "MKV - Matroskaformaat" #: ../src/video_format.c:61 msgid "WEBM - format" msgstr "WEBM - formaat" #: ../src/video_tab.c:208 msgid "Frame Rate:" msgstr "Beelden per seconde:" #: ../src/video_tab.c:215 msgid " Show" msgstr " Tonen" #: ../src/video_tab.c:237 msgid "Resolution:" msgstr "Resolutie:" #: ../src/video_tab.c:263 msgid "Camera Output:" msgstr "Camera-uitvoer:" #: ../src/video_tab.c:285 msgid "Apply" msgstr "Toepassen" #: ../src/video_tab.c:292 msgid "Quality:" msgstr "Kwaliteit:" #: ../src/video_tab.c:302 msgid "---- Video Filters ----" msgstr "---- Videofilters ----" #. Mirror #: ../src/video_tab.c:321 msgid " Mirror" msgstr " Spiegelen" #. Upturn #: ../src/video_tab.c:332 msgid " Invert" msgstr " Omdraaien" #. Negate #: ../src/video_tab.c:343 msgid " Negative" msgstr " Negatief" #. Mono #: ../src/video_tab.c:354 msgid " Mono" msgstr " Mono" #. Pieces #: ../src/video_tab.c:366 msgid " Pieces" msgstr " Delen" #. Particles #: ../src/video_tab.c:378 msgid " Particles" msgstr " Deeltjes" guvcview-src-1.7.1/po/eu.po0000664000175000017500000004434112173235416014571 0ustar paulopaulo# Basque translation for guvcview # Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 # This file is distributed under the same license as the guvcview package. # FIRST AUTHOR , 2009. # msgid "" msgstr "" "Project-Id-Version: guvcview\n" "Report-Msgid-Bugs-To: pj.assis@gmail.com\n" "POT-Creation-Date: 2013-07-16 12:53+0000\n" "PO-Revision-Date: 2013-02-25 05:37+0000\n" "Last-Translator: Pablo Zubiaurre \n" "Language-Team: Basque \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2013-07-22 13:32+0000\n" "X-Generator: Launchpad (build 16696)\n" "Language: eu\n" #: ../data/guvcview.desktop.in.in.h:1 msgid "guvcview" msgstr "" #: ../data/guvcview.desktop.in.in.h:2 msgid "GTK UVC video viewer" msgstr "" #: ../data/guvcview.desktop.in.in.h:3 msgid "A video viewer and capturer for the linux uvc driver" msgstr "" #: ../src/acodecs.c:59 msgid "PCM - uncompressed (16 bit)" msgstr "" #: ../src/acodecs.c:76 msgid "MPEG2 - (lavc)" msgstr "" #: ../src/acodecs.c:93 msgid "MP3 - (lavc)" msgstr "" #: ../src/acodecs.c:110 msgid "Dolby AC3 - (lavc)" msgstr "" #: ../src/acodecs.c:127 msgid "ACC Low - (faac)" msgstr "" #: ../src/acodecs.c:144 msgid "Vorbis" msgstr "" #: ../src/audio_tab.c:80 msgid "Audio" msgstr "" #: ../src/audio_tab.c:98 msgid " Sound" msgstr "" #. VU meter on the image (OSD) #: ../src/audio_tab.c:109 msgid " Show VU meter" msgstr "" #: ../src/audio_tab.c:121 msgid "Audio API:" msgstr "" #: ../src/audio_tab.c:132 msgid "PORTAUDIO" msgstr "" #: ../src/audio_tab.c:133 msgid "PULSEAUDIO" msgstr "" #: ../src/audio_tab.c:149 ../src/audio_tab.c:172 msgid "Input Device:" msgstr "" #: ../src/audio_tab.c:182 ../src/audio_tab.c:214 msgid "Dev. Default" msgstr "" #: ../src/audio_tab.c:204 msgid "Sample Rate:" msgstr "" #: ../src/audio_tab.c:215 msgid "1 - mono" msgstr "" #: ../src/audio_tab.c:216 msgid "2 - stereo" msgstr "" #: ../src/audio_tab.c:251 msgid "Channels:" msgstr "" #: ../src/audio_tab.c:302 msgid "---- Audio Effects ----" msgstr "" #. Echo #: ../src/audio_tab.c:321 msgid " Echo" msgstr "" #. FUZZ #: ../src/audio_tab.c:332 msgid " Fuzz" msgstr "" #. Reverb #: ../src/audio_tab.c:344 msgid " Reverb" msgstr "" #. WahWah #: ../src/audio_tab.c:356 msgid " WahWah" msgstr "" #. Ducky #: ../src/audio_tab.c:368 msgid " Ducky" msgstr "" #: ../src/callbacks.c:108 msgid "Error" msgstr "" #: ../src/callbacks.c:132 msgid "" "\n" "You have more than one video device installed.\n" "Do you want to try another one ?\n" msgstr "" #. Devices #: ../src/callbacks.c:139 ../src/video_tab.c:103 msgid "Device:" msgstr "" #: ../src/callbacks.c:271 msgid "Save File" msgstr "" #: ../src/callbacks.c:283 msgid "File Format:" msgstr "" #: ../src/callbacks.c:454 msgid "codec values" msgstr "" #: ../src/callbacks.c:465 msgid "" " encoder fps: \n" " (0 - use fps combobox value)" msgstr "" #: ../src/callbacks.c:478 msgid " monotonic pts" msgstr "" #. bit rate #: ../src/callbacks.c:485 ../src/callbacks.c:808 msgid "bit rate: " msgstr "" #: ../src/callbacks.c:498 msgid "qmax: " msgstr "" #: ../src/callbacks.c:511 msgid "qmin: " msgstr "" #: ../src/callbacks.c:524 msgid "max. qdiff: " msgstr "" #: ../src/callbacks.c:537 msgid "dia size: " msgstr "" #: ../src/callbacks.c:550 msgid "pre dia size: " msgstr "" #: ../src/callbacks.c:563 msgid "pre me: " msgstr "" #: ../src/callbacks.c:576 msgid "pre cmp: " msgstr "" #: ../src/callbacks.c:589 msgid "cmp: " msgstr "" #: ../src/callbacks.c:602 msgid "sub cmp: " msgstr "" #: ../src/callbacks.c:615 msgid "last predictor count: " msgstr "" #: ../src/callbacks.c:628 msgid "gop size: " msgstr "" #: ../src/callbacks.c:641 msgid "qcompress: " msgstr "" #: ../src/callbacks.c:654 msgid "qblur: " msgstr "" #: ../src/callbacks.c:667 msgid "subq: " msgstr "" #: ../src/callbacks.c:680 msgid "framerefs: " msgstr "" #: ../src/callbacks.c:693 msgid "me method: " msgstr "" #: ../src/callbacks.c:706 msgid "mb decision: " msgstr "" #: ../src/callbacks.c:719 msgid "max B frames: " msgstr "" #: ../src/callbacks.c:732 msgid "num threads: " msgstr "" #: ../src/callbacks.c:795 msgid "audio codec values" msgstr "" #. sample format #: ../src/callbacks.c:822 msgid "sample format: " msgstr "" #: ../src/callbacks.c:1250 msgid "start new" msgstr "Berria hasi" #: ../src/callbacks.c:1253 msgid "restart" msgstr "berrabiarazi" #: ../src/callbacks.c:1255 msgid "new" msgstr "berria" #: ../src/callbacks.c:1257 msgid "cancel" msgstr "utzi" #: ../src/callbacks.c:1262 msgid "" "launch new process or restart?.\n" "\n" msgstr "" "prozesu berria hasi edo berrabiarazi?\n" "\n" #: ../src/callbacks.c:1716 ../src/guvcview.c:537 msgid "Cap. Image (I)" msgstr "Kaptura (I):" #. disable image controls #: ../src/callbacks.c:1727 ../src/guvcview.c:658 ../src/timers.c:101 msgid "capturing photo to" msgstr "" #: ../src/callbacks.c:1786 ../src/guvcview.c:547 msgid "Cap. Video (V)" msgstr "Kaptura (V):" #: ../src/callbacks.c:1812 ../src/guvcview.c:708 msgid "capturing video to" msgstr "" #. vid capture enabled from start #: ../src/callbacks.c:1845 ../src/guvcview.c:542 msgid "Stop Video (V)" msgstr "Bideoa gelditu (V)" #: ../src/callbacks.c:1901 ../src/menubar.c:66 msgid "Save Profile" msgstr "" #: ../src/callbacks.c:1914 ../src/menubar.c:65 msgid "Load Profile" msgstr "" #: ../src/create_video.c:1016 ../src/guvcview.c:700 msgid "Cap. Video" msgstr "" #: ../src/guvcview.c:279 msgid "Guvcview Video Capture" msgstr "" #: ../src/guvcview.c:291 msgid "GUVCViewer Controls" msgstr "GUVCViewer kontrolak" #. can't open device #: ../src/guvcview.c:336 msgid "" "Guvcview error:\n" "\n" "Unable to open device" msgstr "" "Gucview errorea:\n" "\n" "Ez da posible gailua zabaltzea" #: ../src/guvcview.c:337 msgid "" "Please make sure the camera is connected\n" "and that the correct driver is installed." msgstr "" "Ziurtatu kamera konektatua\n" "eta driver-a instalatuta dagoela" #. uvc extension controls OK, give warning and shutdown (called with --add_ctrls) #: ../src/guvcview.c:342 msgid "" "Guvcview:\n" "\n" "UVC Extension controls" msgstr "" "Gucview:\n" "\n" "UVC luzapenaren kontrolak" #: ../src/guvcview.c:343 msgid "Extension controls were added to the UVC driver" msgstr "Luzapen kontrolak UVC kontroladoreari gehitu zaizkio" #. uvc extension controls error - EACCES (needs root user) #: ../src/guvcview.c:350 msgid "" "Guvcview error:\n" "\n" "UVC Extension controls" msgstr "" "Gucview errorea:\n" "\n" "UVC luzapenaren kontrolak" #: ../src/guvcview.c:351 msgid "" "An error occurred while adding extension\n" "controls to the UVC driver\n" "Make sure you run guvcview as root (or sudo)." msgstr "" #: ../src/guvcview.c:377 ../src/guvcview.c:455 msgid "" "Guvcview error:\n" "\n" "Can't set a valid video stream for guvcview" msgstr "" "Gucview errorea:\n" "\n" "Ezin izan da bideo-korrontea ezarri" #: ../src/guvcview.c:378 ../src/guvcview.c:456 msgid "" "Make sure your device driver is v4l2 compliant\n" "and that it is properly installed." msgstr "" "Mesedez,egiaztatu v4I2 kontrolatzailea duzula\n" "eta instalatuta dagoela." #: ../src/guvcview.c:400 ../src/guvcview.c:422 msgid "" "Guvcview error:\n" "\n" "Unable to start with minimum setup" msgstr "" "Gucview errorea:\n" "\n" "Ezin izan da konfigurazio minimoarekin abiarazi" #: ../src/guvcview.c:401 ../src/guvcview.c:423 msgid "Please reconnect your camera." msgstr "Mesedez, kamera berriro konektatu" #: ../src/guvcview.c:430 msgid "" "Guvcview error:\n" "\n" "Couldn't query device capabilities" msgstr "" "Gucview errorea:\n" "\n" "Ezin izan da gailua ireki" #: ../src/guvcview.c:431 msgid "Make sure the device driver supports v4l2." msgstr "Ziurtatu gailuaren kontrolatzaileak v4I2 eusten duela" #: ../src/guvcview.c:435 msgid "" "Guvcview error:\n" "\n" "Read method error" msgstr "" "Gucview errorea:\n" "\n" "Irakurketametodoaren errorea" #: ../src/guvcview.c:436 msgid "Please try mmap instead (--capture_method=1)." msgstr "" #: ../src/guvcview.c:444 msgid "" "Guvcview error:\n" "\n" "Unable to allocate Buffers" msgstr "" "Gucview errorea:\n" "\n" "Ezin izan dira bufferrak esleitu" #: ../src/guvcview.c:445 msgid "Please try restarting your system." msgstr "Mesedez saiatu sistema berrabiarazten." #: ../src/guvcview.c:490 msgid "Image Controls" msgstr "Irudi kontrolak" #. image auto capture #: ../src/guvcview.c:533 msgid "Stop Auto (I)" msgstr "" #: ../src/guvcview.c:644 msgid "" "Guvcview error:\n" "\n" "Unable to create Video Thread" msgstr "" #: ../src/guvcview.c:645 msgid "Please report it to http://developer.berlios.de/bugs/?group_id=8179" msgstr "" #: ../src/img_controls.c:121 msgid "Auto Focus (continuous)" msgstr "" #: ../src/img_controls.c:122 msgid "set Focus" msgstr "Fokatu" #: ../src/image_format.c:35 msgid "Jpeg (jpg)" msgstr "" #: ../src/image_format.c:41 msgid "Bitmap (Bmp)" msgstr "" #: ../src/image_format.c:47 msgid "Portable Network Graphics (Png)" msgstr "" #: ../src/image_format.c:53 msgid "Raw Image (raw)" msgstr "" #. controls menu #: ../src/menubar.c:64 msgid "Settings" msgstr "" #: ../src/menubar.c:67 msgid "Hardware Defaults" msgstr "" #: ../src/menubar.c:75 msgid "Camera Button" msgstr "" #: ../src/menubar.c:79 msgid "Capture Image" msgstr "" #: ../src/menubar.c:84 msgid "Capture Video" msgstr "" #. video menu #: ../src/menubar.c:144 ../src/video_tab.c:87 msgid "Video" msgstr "" #: ../src/menubar.c:145 ../src/menubar.c:231 msgid "File" msgstr "" #: ../src/menubar.c:146 ../src/menubar.c:232 msgid "Increment Filename" msgstr "" #: ../src/menubar.c:164 msgid "Video Codec" msgstr "" #: ../src/menubar.c:187 msgid "Video Codec Properties" msgstr "" #: ../src/menubar.c:194 msgid "Audio Codec" msgstr "" #: ../src/menubar.c:215 msgid "Audio Codec Properties" msgstr "" #. photo menu #: ../src/menubar.c:230 msgid "Photo" msgstr "" #: ../src/options.c:752 msgid "Prints version" msgstr "" #: ../src/options.c:753 msgid "Displays debug information" msgstr "" #: ../src/options.c:754 msgid "Video Device to use [default: /dev/video0]" msgstr "" #: ../src/options.c:755 msgid "Exit after adding UVC extension controls (needs root/sudo)" msgstr "" #: ../src/options.c:756 msgid "Don't stream video (image controls only)" msgstr "" #: ../src/options.c:757 msgid "Don't display a GUI" msgstr "" #: ../src/options.c:758 msgid "Capture method (1-mmap (default) 2-read)" msgstr "" #: ../src/options.c:759 msgid "Configuration file" msgstr "" #: ../src/options.c:760 msgid "Hardware accelaration (enable(1) | disable(0))" msgstr "" #: ../src/options.c:761 msgid "" "Pixel " "format(mjpg|jpeg|yuyv|yvyu|uyvy|yyuv|yu12|yv12|nv12|nv21|nv16|nv61|y41p|grey|" "y10b|y16 |s501|s505|s508|gbrg|grbg|ba81|rggb|bgr3|rgb3)" msgstr "" #: ../src/options.c:762 msgid "Frame size, default: 640x480" msgstr "" #: ../src/options.c:763 msgid "Image File name" msgstr "" #: ../src/options.c:764 msgid "Image capture interval in seconds" msgstr "" #: ../src/options.c:765 msgid "Number of Pictures to capture" msgstr "Kapturatu beharreko argazki kopurua" #: ../src/options.c:766 msgid "Video File name (capture from start)" msgstr "" #: ../src/options.c:767 msgid "Video capture time (in seconds)" msgstr "" #: ../src/options.c:768 msgid "Exits guvcview after closing video" msgstr "" #: ../src/options.c:769 msgid "Number of initial frames to skip" msgstr "" #: ../src/options.c:770 msgid "Show FPS value (enable(1) | disable (0))" msgstr "" #: ../src/options.c:771 msgid "Load Profile at start" msgstr "Profila kargatu hastean" #: ../src/options.c:777 msgid "- local options" msgstr "-aukera lokalak" #. gdk_threads_enter(); #: ../src/timers.c:119 msgid "Cap. Image" msgstr "" #: ../src/timers.c:217 msgid "Guvcview Warning:" msgstr "Gucview oharra:" #: ../src/timers.c:217 msgid "Not enough free space left on disk" msgstr "Ez dago leku nahikorik diskoan" #: ../src/v4l2_controls.c:711 msgid "Left" msgstr "Ezkerrera" #: ../src/v4l2_controls.c:712 msgid "Right" msgstr "Eskuina" #: ../src/v4l2_controls.c:716 msgid "Down" msgstr "Behera" #: ../src/v4l2_controls.c:717 msgid "Up" msgstr "Gora" #: ../src/v4l2_controls.c:762 msgid "Off" msgstr "" #: ../src/v4l2_controls.c:762 msgid "On" msgstr "" #: ../src/v4l2_controls.c:762 msgid "Blinking" msgstr "" #: ../src/v4l2_controls.c:762 msgid "Auto" msgstr "" #. turn it into a menu control #: ../src/v4l2_controls.c:813 msgid "8 bit" msgstr "" #: ../src/v4l2_controls.c:813 msgid "12 bit" msgstr "" #: ../src/v4l2_dyna_ctrls.c:96 msgid "Pan (relative)" msgstr "" #: ../src/v4l2_dyna_ctrls.c:109 msgid "Tilt (relative)" msgstr "" #: ../src/v4l2_dyna_ctrls.c:122 msgid "Pan Reset" msgstr "" #: ../src/v4l2_dyna_ctrls.c:135 msgid "Tilt Reset" msgstr "" #: ../src/v4l2_dyna_ctrls.c:148 msgid "Focus (absolute)" msgstr "" #: ../src/v4l2_dyna_ctrls.c:161 msgid "LED1 Mode" msgstr "" #: ../src/v4l2_dyna_ctrls.c:174 msgid "LED1 Frequency" msgstr "" #: ../src/v4l2_dyna_ctrls.c:187 msgid "Disable video processing" msgstr "" #: ../src/v4l2_dyna_ctrls.c:200 msgid "Raw bits per pixel" msgstr "" #. needed only for language files (not used) #. V4L2 control strings #: ../src/v4l2uvc.c:56 msgid "User Controls" msgstr "" #: ../src/v4l2uvc.c:57 msgid "Brightness" msgstr "Distira" #: ../src/v4l2uvc.c:58 msgid "Contrast" msgstr "Kontrastea" #: ../src/v4l2uvc.c:59 msgid "Hue" msgstr "Ñabardura" #: ../src/v4l2uvc.c:60 msgid "Saturation" msgstr "Asetasuna" #: ../src/v4l2uvc.c:61 msgid "Sharpness" msgstr "Garbitasuna" #: ../src/v4l2uvc.c:62 msgid "Gamma" msgstr "Gamma" #: ../src/v4l2uvc.c:63 msgid "Backlight Compensation" msgstr "" #: ../src/v4l2uvc.c:64 msgid "Power Line Frequency" msgstr "" #: ../src/v4l2uvc.c:65 msgid "Hue, Automatic" msgstr "" #: ../src/v4l2uvc.c:66 msgid "Focus, Auto" msgstr "Foku automatikoa" #: ../src/v4l2uvc.c:67 msgid "Manual Mode" msgstr "Eskuzko modua" #: ../src/v4l2uvc.c:68 msgid "Auto Mode" msgstr "Modu automatikoa" #: ../src/v4l2uvc.c:69 msgid "Shutter Priority Mode" msgstr "Obturadore lehentasun modua" #: ../src/v4l2uvc.c:70 msgid "Aperture Priority Mode" msgstr "" #: ../src/v4l2uvc.c:71 msgid "Black Level" msgstr "Beltz-maila" #: ../src/v4l2uvc.c:72 msgid "White Balance, Automatic" msgstr "Zuri-balantzea,automatikoa" #: ../src/v4l2uvc.c:73 msgid "Do White Balance" msgstr "Zuri-balantzea egin" #: ../src/v4l2uvc.c:74 msgid "Red Balance" msgstr "Gorri balantzea" #: ../src/v4l2uvc.c:75 msgid "Blue Balance" msgstr "Urdin balantzea" #: ../src/v4l2uvc.c:76 msgid "Exposure" msgstr "Esposizioa" #: ../src/v4l2uvc.c:77 msgid "Gain, Automatic" msgstr "Irabazia, Automatikoa" #: ../src/v4l2uvc.c:78 msgid "Gain" msgstr "Irabazia" #: ../src/v4l2uvc.c:79 msgid "Horizontal Flip" msgstr "Irauli horizontalki" #: ../src/v4l2uvc.c:80 msgid "Vertical Flip" msgstr "Irauli bertikalki" #: ../src/v4l2uvc.c:81 msgid "Horizontal Center" msgstr "" #: ../src/v4l2uvc.c:82 msgid "Vertical Center" msgstr "" #: ../src/v4l2uvc.c:83 msgid "Chroma AGC" msgstr "" #: ../src/v4l2uvc.c:84 msgid "Color Killer" msgstr "" #: ../src/v4l2uvc.c:85 msgid "Color Effects" msgstr "" #. CAMERA CLASS control strings #: ../src/v4l2uvc.c:88 msgid "Camera Controls" msgstr "" #: ../src/v4l2uvc.c:89 msgid "Auto Exposure" msgstr "" #: ../src/v4l2uvc.c:90 msgid "Exposure Time, Absolute" msgstr "" #: ../src/v4l2uvc.c:91 msgid "Exposure, Dynamic Framerate" msgstr "" #: ../src/v4l2uvc.c:92 msgid "Pan, Relative" msgstr "" #: ../src/v4l2uvc.c:93 msgid "Tilt, Relative" msgstr "" #: ../src/v4l2uvc.c:94 msgid "Pan, Reset" msgstr "" #: ../src/v4l2uvc.c:95 msgid "Tilt, Reset" msgstr "" #: ../src/v4l2uvc.c:96 msgid "Pan, Absolute" msgstr "" #: ../src/v4l2uvc.c:98 msgid "Focus, Absolute" msgstr "" #: ../src/v4l2uvc.c:99 msgid "Focus, Relative" msgstr "" #: ../src/v4l2uvc.c:100 msgid "Focus, Automatic" msgstr "" #: ../src/v4l2uvc.c:101 msgid "Zoom, Absolute" msgstr "" #: ../src/v4l2uvc.c:102 msgid "Zoom, Relative" msgstr "" #: ../src/v4l2uvc.c:103 msgid "Zoom, Continuous" msgstr "" #: ../src/v4l2uvc.c:104 msgid "Privacy" msgstr "" #. UVC specific control strings #: ../src/v4l2uvc.c:107 msgid "Exposure, Auto" msgstr "" #: ../src/v4l2uvc.c:108 msgid "Exposure, Auto Priority" msgstr "" #: ../src/v4l2uvc.c:109 msgid "Exposure (Absolute)" msgstr "" #: ../src/v4l2uvc.c:110 msgid "White Balance Temperature, Auto" msgstr "" #: ../src/v4l2uvc.c:111 msgid "White Balance Temperature" msgstr "" #: ../src/v4l2uvc.c:112 msgid "White Balance Component, Auto" msgstr "" #: ../src/v4l2uvc.c:113 msgid "White Balance Blue Component" msgstr "" #: ../src/v4l2uvc.c:114 msgid "White Balance Red Component" msgstr "" #. libwebcam specific control strings #: ../src/v4l2uvc.c:117 msgid "Focus" msgstr "" #: ../src/v4l2uvc.c:118 msgid "Focus (Absolute)" msgstr "" #: ../src/vcodecs.c:63 msgid "MJPG - compressed" msgstr "" #: ../src/vcodecs.c:99 msgid "YUY2 - uncomp YUV" msgstr "" #: ../src/vcodecs.c:135 msgid "RGB - uncomp BMP" msgstr "" #: ../src/vcodecs.c:171 msgid "MPEG video 1" msgstr "" #: ../src/vcodecs.c:207 msgid "FLV1 - flash video 1" msgstr "" #: ../src/vcodecs.c:243 msgid "WMV1 - win. med. video 7" msgstr "" #: ../src/vcodecs.c:279 msgid "MPG2 - MPG2 format" msgstr "" #: ../src/vcodecs.c:315 msgid "MS MP4 V3" msgstr "" #: ../src/vcodecs.c:351 msgid "MPEG4-ASP" msgstr "" #: ../src/vcodecs.c:387 msgid "MPEG4-AVC (H264)" msgstr "" #: ../src/vcodecs.c:427 msgid "VP8 (VP8)" msgstr "" #: ../src/vcodecs.c:463 msgid "Theora (ogg theora)" msgstr "" #: ../src/video_format.c:43 msgid "AVI - avi format" msgstr "" #: ../src/video_format.c:52 msgid "MKV - Matroska format" msgstr "" #: ../src/video_format.c:61 msgid "WEBM - format" msgstr "" #: ../src/video_tab.c:208 msgid "Frame Rate:" msgstr "" #: ../src/video_tab.c:215 msgid " Show" msgstr "" #: ../src/video_tab.c:237 msgid "Resolution:" msgstr "" #: ../src/video_tab.c:263 msgid "Camera Output:" msgstr "" #: ../src/video_tab.c:285 msgid "Apply" msgstr "" #: ../src/video_tab.c:292 msgid "Quality:" msgstr "" #: ../src/video_tab.c:302 msgid "---- Video Filters ----" msgstr "" #. Mirror #: ../src/video_tab.c:321 msgid " Mirror" msgstr "" #. Upturn #: ../src/video_tab.c:332 msgid " Invert" msgstr "" #. Negate #: ../src/video_tab.c:343 msgid " Negative" msgstr "" #. Mono #: ../src/video_tab.c:354 msgid " Mono" msgstr "" #. Pieces #: ../src/video_tab.c:366 msgid " Pieces" msgstr "" #. Particles #: ../src/video_tab.c:378 msgid " Particles" msgstr "" guvcview-src-1.7.1/po/lv.po0000664000175000017500000005367512173235416014613 0ustar paulopaulo# Latvian translation for guvcview # Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 # This file is distributed under the same license as the guvcview package. # FIRST AUTHOR , 2012. # msgid "" msgstr "" "Project-Id-Version: guvcview\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-07-16 12:53+0000\n" "PO-Revision-Date: 2013-05-01 09:27+0000\n" "Last-Translator: tuxmaniack \n" "Language-Team: Latvian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2013-07-22 13:32+0000\n" "X-Generator: Launchpad (build 16696)\n" #: ../data/guvcview.desktop.in.in.h:1 msgid "guvcview" msgstr "guvcview" #: ../data/guvcview.desktop.in.in.h:2 msgid "GTK UVC video viewer" msgstr "GTK UVC video skatÄ«tÄjs" #: ../data/guvcview.desktop.in.in.h:3 msgid "A video viewer and capturer for the linux uvc driver" msgstr "Video skatÄ«tÄjs un uzņēmÄ“js Linux UVC draiverim" #: ../src/acodecs.c:59 msgid "PCM - uncompressed (16 bit)" msgstr "PCM - nesaspiests (16 biti)" #: ../src/acodecs.c:76 msgid "MPEG2 - (lavc)" msgstr "MPEG2 - (lavc)" #: ../src/acodecs.c:93 msgid "MP3 - (lavc)" msgstr "MP3 - (lavc)" #: ../src/acodecs.c:110 msgid "Dolby AC3 - (lavc)" msgstr "Dolby AC3 - (lavc)" #: ../src/acodecs.c:127 msgid "ACC Low - (faac)" msgstr "ACC Low - (faac)" #: ../src/acodecs.c:144 msgid "Vorbis" msgstr "Vorbis" #: ../src/audio_tab.c:80 msgid "Audio" msgstr "Skaņa" #: ../src/audio_tab.c:98 msgid " Sound" msgstr " Skaņa" #. VU meter on the image (OSD) #: ../src/audio_tab.c:109 msgid " Show VU meter" msgstr " RÄdÄ«t skaņas lÄ«meņa indikatoru" #: ../src/audio_tab.c:121 msgid "Audio API:" msgstr "Audio saskarne:" #: ../src/audio_tab.c:132 msgid "PORTAUDIO" msgstr "PORTAUDIO" #: ../src/audio_tab.c:133 msgid "PULSEAUDIO" msgstr "PULSEAUDIO" #: ../src/audio_tab.c:149 ../src/audio_tab.c:172 msgid "Input Device:" msgstr "Ievades ierÄ«ce:" #: ../src/audio_tab.c:182 ../src/audio_tab.c:214 msgid "Dev. Default" msgstr "IzstrÄdÄtÄja noklusÄ“jums" #: ../src/audio_tab.c:204 msgid "Sample Rate:" msgstr "Nolases biežums:" #: ../src/audio_tab.c:215 msgid "1 - mono" msgstr "1 - mono" #: ../src/audio_tab.c:216 msgid "2 - stereo" msgstr "2 - stereo" #: ../src/audio_tab.c:251 msgid "Channels:" msgstr "KanÄli:" #: ../src/audio_tab.c:302 msgid "---- Audio Effects ----" msgstr "---- Audio efekti ----" #. Echo #: ../src/audio_tab.c:321 msgid " Echo" msgstr " Atbalss" #. FUZZ #: ../src/audio_tab.c:332 msgid " Fuzz" msgstr " RÄcija" #. Reverb #: ../src/audio_tab.c:344 msgid " Reverb" msgstr " ReverbÄcija" #. WahWah #: ../src/audio_tab.c:356 msgid " WahWah" msgstr " VahVah" #. Ducky #: ../src/audio_tab.c:368 msgid " Ducky" msgstr " PÄ«le" #: ../src/callbacks.c:108 msgid "Error" msgstr "Kļūda" #: ../src/callbacks.c:132 msgid "" "\n" "You have more than one video device installed.\n" "Do you want to try another one ?\n" msgstr "" "\n" "Ir pieejamas vairÄkas video ierÄ«ces.\n" "Vai vÄ“laties izmēģinÄt citu?\n" #. Devices #: ../src/callbacks.c:139 ../src/video_tab.c:103 msgid "Device:" msgstr "IerÄ«ce:" #: ../src/callbacks.c:271 msgid "Save File" msgstr "SaglabÄt failu" #: ../src/callbacks.c:283 msgid "File Format:" msgstr "Faila formÄts:" #: ../src/callbacks.c:454 msgid "codec values" msgstr "kodeka vÄ“rtÄ«bas" #: ../src/callbacks.c:465 msgid "" " encoder fps: \n" " (0 - use fps combobox value)" msgstr "" #: ../src/callbacks.c:478 msgid " monotonic pts" msgstr "" #. bit rate #: ../src/callbacks.c:485 ../src/callbacks.c:808 msgid "bit rate: " msgstr "bitu Ätrums: " #: ../src/callbacks.c:498 msgid "qmax: " msgstr "" #: ../src/callbacks.c:511 msgid "qmin: " msgstr "" #: ../src/callbacks.c:524 msgid "max. qdiff: " msgstr "" #: ../src/callbacks.c:537 msgid "dia size: " msgstr "" #: ../src/callbacks.c:550 msgid "pre dia size: " msgstr "" #: ../src/callbacks.c:563 msgid "pre me: " msgstr "" #: ../src/callbacks.c:576 msgid "pre cmp: " msgstr "" #: ../src/callbacks.c:589 msgid "cmp: " msgstr "" #: ../src/callbacks.c:602 msgid "sub cmp: " msgstr "" #: ../src/callbacks.c:615 msgid "last predictor count: " msgstr "" #: ../src/callbacks.c:628 msgid "gop size: " msgstr "" #: ../src/callbacks.c:641 msgid "qcompress: " msgstr "" #: ../src/callbacks.c:654 msgid "qblur: " msgstr "" #: ../src/callbacks.c:667 msgid "subq: " msgstr "" #: ../src/callbacks.c:680 msgid "framerefs: " msgstr "" #: ../src/callbacks.c:693 msgid "me method: " msgstr "" #: ../src/callbacks.c:706 msgid "mb decision: " msgstr "" #: ../src/callbacks.c:719 msgid "max B frames: " msgstr "" #: ../src/callbacks.c:732 msgid "num threads: " msgstr "" #: ../src/callbacks.c:795 msgid "audio codec values" msgstr "audio kodeka vÄ“rtÄ«bas" #. sample format #: ../src/callbacks.c:822 msgid "sample format: " msgstr "" #: ../src/callbacks.c:1250 msgid "start new" msgstr "sÄkt jaunu" #: ../src/callbacks.c:1253 msgid "restart" msgstr "pÄrstartÄ“t" #: ../src/callbacks.c:1255 msgid "new" msgstr "jauns" #: ../src/callbacks.c:1257 msgid "cancel" msgstr "atcelt" #: ../src/callbacks.c:1262 msgid "" "launch new process or restart?.\n" "\n" msgstr "" "palaist jaunu procesu vai pÄrstartÄ“t?\n" "\n" #: ../src/callbacks.c:1716 ../src/guvcview.c:537 msgid "Cap. Image (I)" msgstr "Uzņemt attÄ“lu (I)" #. disable image controls #: ../src/callbacks.c:1727 ../src/guvcview.c:658 ../src/timers.c:101 msgid "capturing photo to" msgstr "" #: ../src/callbacks.c:1786 ../src/guvcview.c:547 msgid "Cap. Video (V)" msgstr "Uzņemt video (V)" #: ../src/callbacks.c:1812 ../src/guvcview.c:708 msgid "capturing video to" msgstr "" #. vid capture enabled from start #: ../src/callbacks.c:1845 ../src/guvcview.c:542 msgid "Stop Video (V)" msgstr "" #: ../src/callbacks.c:1901 ../src/menubar.c:66 msgid "Save Profile" msgstr "SaglabÄt profilu" #: ../src/callbacks.c:1914 ../src/menubar.c:65 msgid "Load Profile" msgstr "IelÄdÄ“t profilu" #: ../src/create_video.c:1016 ../src/guvcview.c:700 msgid "Cap. Video" msgstr "Uzņemt video" #: ../src/guvcview.c:279 msgid "Guvcview Video Capture" msgstr "Guvcview video uzņemÅ¡ana" #: ../src/guvcview.c:291 msgid "GUVCViewer Controls" msgstr "GUVCViewer vadÄ«klas" #. can't open device #: ../src/guvcview.c:336 msgid "" "Guvcview error:\n" "\n" "Unable to open device" msgstr "" "Guvcview kļūda:\n" "\n" "NeizdevÄs atvÄ“rt ierÄ«ci" #: ../src/guvcview.c:337 msgid "" "Please make sure the camera is connected\n" "and that the correct driver is installed." msgstr "" "LÅ«dzu, pÄrliecinieties, vai kamera ir pievienota\n" "un pareizais draiveris ir instalÄ“ts." #. uvc extension controls OK, give warning and shutdown (called with --add_ctrls) #: ../src/guvcview.c:342 msgid "" "Guvcview:\n" "\n" "UVC Extension controls" msgstr "" "Guvcview:\n" "\n" "UVC paplaÅ¡inÄjumu vadÄ«klas" #: ../src/guvcview.c:343 msgid "Extension controls were added to the UVC driver" msgstr "PaplaÅ¡inÄjumu vadÄ«klas tika pievienotas UVC draiverim" #. uvc extension controls error - EACCES (needs root user) #: ../src/guvcview.c:350 msgid "" "Guvcview error:\n" "\n" "UVC Extension controls" msgstr "" "Guvcview kļūda:\n" "\n" "UVC paplaÅ¡inÄjumu vadÄ«klas" #: ../src/guvcview.c:351 msgid "" "An error occurred while adding extension\n" "controls to the UVC driver\n" "Make sure you run guvcview as root (or sudo)." msgstr "" "GadÄ«jÄs kļūda, pievienojot paplaÅ¡inÄjumu\n" "vadÄ«klas UVC draiverim\n" "PÄrliecinieties, vai guvcview tiek palaists kÄ root (vai sudo)." #: ../src/guvcview.c:377 ../src/guvcview.c:455 msgid "" "Guvcview error:\n" "\n" "Can't set a valid video stream for guvcview" msgstr "" "Guvcview kļūda:\n" "\n" "NeizdevÄs iestatÄ«t guvcview derÄ«gu video plÅ«smu" #: ../src/guvcview.c:378 ../src/guvcview.c:456 msgid "" "Make sure your device driver is v4l2 compliant\n" "and that it is properly installed." msgstr "" "LÅ«dzu, pÄrliecinieties, vai ierÄ«ces draiveris ir v4l2 saderÄ«gs\n" "un vai tas ir pareizi instalÄ“ts." #: ../src/guvcview.c:400 ../src/guvcview.c:422 msgid "" "Guvcview error:\n" "\n" "Unable to start with minimum setup" msgstr "" "Guvcview kļūda:\n" "\n" "NeizdevÄs sÄkt ar minimÄlajiem iestatÄ«jumiem" #: ../src/guvcview.c:401 ../src/guvcview.c:423 msgid "Please reconnect your camera." msgstr "LÅ«dzu, pÄrvienojiet kameru." #: ../src/guvcview.c:430 msgid "" "Guvcview error:\n" "\n" "Couldn't query device capabilities" msgstr "" "Guvcview kļūda:\n" "\n" "NeizdevÄs vaicÄjums ierÄ«ces iespÄ“jÄm" #: ../src/guvcview.c:431 msgid "Make sure the device driver supports v4l2." msgstr "PÄrliecinieties, ka ierÄ«ces draiveris atbalsta v4l2." #: ../src/guvcview.c:435 msgid "" "Guvcview error:\n" "\n" "Read method error" msgstr "" "Guvcview kļūda:\n" "\n" "Lasīšanas metodes kļūda" #: ../src/guvcview.c:436 msgid "Please try mmap instead (--capture_method=1)." msgstr "LÅ«dzu, mēģiniet mmap, --capture_method=1 vietÄ." #: ../src/guvcview.c:444 msgid "" "Guvcview error:\n" "\n" "Unable to allocate Buffers" msgstr "" "Guvcview kļūda:\n" "\n" "NeizdevÄs piešķirt buferi" #: ../src/guvcview.c:445 msgid "Please try restarting your system." msgstr "LÅ«dzu, mēģiniet pÄrstartÄ“t sistÄ“mu." #: ../src/guvcview.c:490 msgid "Image Controls" msgstr "AttÄ“la vadÄ«klas" #. image auto capture #: ../src/guvcview.c:533 msgid "Stop Auto (I)" msgstr "" #: ../src/guvcview.c:644 msgid "" "Guvcview error:\n" "\n" "Unable to create Video Thread" msgstr "" "Guvcview kļūda:\n" "\n" "NeizdevÄs izveidot video dzÄ«slu" #: ../src/guvcview.c:645 msgid "Please report it to http://developer.berlios.de/bugs/?group_id=8179" msgstr "LÅ«dzu, paziņojiet http://developer.berlios.de/bugs/?group_id=8179" #: ../src/img_controls.c:121 msgid "Auto Focus (continuous)" msgstr "AutomÄtisks fokuss (nepÄrtraukts)" #: ../src/img_controls.c:122 msgid "set Focus" msgstr "iestatÄ«t fokusu" #: ../src/image_format.c:35 msgid "Jpeg (jpg)" msgstr "Jpeg (jpg)" #: ../src/image_format.c:41 msgid "Bitmap (Bmp)" msgstr "Bitmap (Bmp)" #: ../src/image_format.c:47 msgid "Portable Network Graphics (Png)" msgstr "Portable Network Graphics (Png)" #: ../src/image_format.c:53 msgid "Raw Image (raw)" msgstr "Raw Image (raw)" #. controls menu #: ../src/menubar.c:64 msgid "Settings" msgstr "IestatÄ«jumi" #: ../src/menubar.c:67 msgid "Hardware Defaults" msgstr "AparatÅ«ras noklusÄ“jums" #: ../src/menubar.c:75 msgid "Camera Button" msgstr "Kameras poga" #: ../src/menubar.c:79 msgid "Capture Image" msgstr "Uzņemt attÄ“lu" #: ../src/menubar.c:84 msgid "Capture Video" msgstr "Uzņemt video" #. video menu #: ../src/menubar.c:144 ../src/video_tab.c:87 msgid "Video" msgstr "Video" #: ../src/menubar.c:145 ../src/menubar.c:231 msgid "File" msgstr "Fails" #: ../src/menubar.c:146 ../src/menubar.c:232 msgid "Increment Filename" msgstr "AutomÄtiski pieaugoÅ¡s" #: ../src/menubar.c:164 msgid "Video Codec" msgstr "Video kodeks" #: ../src/menubar.c:187 msgid "Video Codec Properties" msgstr "Video kodeka Ä«pašības" #: ../src/menubar.c:194 msgid "Audio Codec" msgstr "Audio kodeks" #: ../src/menubar.c:215 msgid "Audio Codec Properties" msgstr "Audio kodeka Ä«pašības" #. photo menu #: ../src/menubar.c:230 msgid "Photo" msgstr "Foto" #: ../src/options.c:752 msgid "Prints version" msgstr "Izdrukas versija" #: ../src/options.c:753 msgid "Displays debug information" msgstr "AttÄ“lo atkļūdoÅ¡anas informÄciju" #: ../src/options.c:754 msgid "Video Device to use [default: /dev/video0]" msgstr "Video ierÄ«ce, kuru izmantot [noklusÄ“jums: /dev/video0]" #: ../src/options.c:755 msgid "Exit after adding UVC extension controls (needs root/sudo)" msgstr "" "Iziet pÄ“c UVC paplaÅ¡inÄjuma vadÄ«klu pievienoÅ¡anas (nepiecieÅ¡ams root/sudo)" #: ../src/options.c:756 msgid "Don't stream video (image controls only)" msgstr "NestraumÄ“t video (tikai attÄ“la vadÄ«klas)" #: ../src/options.c:757 msgid "Don't display a GUI" msgstr "NeattÄ“lot saskarni" #: ../src/options.c:758 msgid "Capture method (1-mmap (default) 2-read)" msgstr "UzņemÅ¡anas metode (1-mmap (noklusÄ“tais) 2-read)" #: ../src/options.c:759 msgid "Configuration file" msgstr "KonfigurÄcijas fails" #: ../src/options.c:760 msgid "Hardware accelaration (enable(1) | disable(0))" msgstr "AparatÅ«ras paÄtrinÄjums (ieslÄ“gts(1) | izslÄ“gts(0))" #: ../src/options.c:761 msgid "" "Pixel " "format(mjpg|jpeg|yuyv|yvyu|uyvy|yyuv|yu12|yv12|nv12|nv21|nv16|nv61|y41p|grey|" "y10b|y16 |s501|s505|s508|gbrg|grbg|ba81|rggb|bgr3|rgb3)" msgstr "" "Pikseļa " "formÄts(mjpg|jpeg|yuyv|yvyu|uyvy|yyuv|yu12|yv12|nv12|nv21|nv16|nv61|y41p|grey" "|y10b|y16 |s501|s505|s508|gbrg|grbg|ba81|rggb|bgr3|rgb3)" #: ../src/options.c:762 msgid "Frame size, default: 640x480" msgstr "Kadra lielums, noklusÄ“jums: 640x480" #: ../src/options.c:763 msgid "Image File name" msgstr "AttÄ“la faila nosaukums" #: ../src/options.c:764 msgid "Image capture interval in seconds" msgstr "AttÄ“lu uzņemÅ¡anas intervÄls sekundÄ“s" #: ../src/options.c:765 msgid "Number of Pictures to capture" msgstr "AttÄ“lu skaits, cik uzņemt" #: ../src/options.c:766 msgid "Video File name (capture from start)" msgstr "Video faila nosaukums (uzņemt no sÄkuma)" #: ../src/options.c:767 msgid "Video capture time (in seconds)" msgstr "Video uzņemÅ¡anas laiks (sekundÄ“s)" #: ../src/options.c:768 msgid "Exits guvcview after closing video" msgstr "Iziet guvcview pÄ“c video aizvÄ“rÅ¡anas" #: ../src/options.c:769 msgid "Number of initial frames to skip" msgstr "PirmreizÄ“jo kadru skaits, ko izlaist" #: ../src/options.c:770 msgid "Show FPS value (enable(1) | disable (0))" msgstr "RÄdÄ«t kadrÄtruma vÄ“rtÄ«bu (ieslÄ“gts(1) | izslÄ“gts(0))" #: ../src/options.c:771 msgid "Load Profile at start" msgstr "IelÄdÄ“t profilu sÄkot" #: ../src/options.c:777 msgid "- local options" msgstr "- lokÄlÄs opcijas" #. gdk_threads_enter(); #: ../src/timers.c:119 msgid "Cap. Image" msgstr "Uzņemt attÄ“lu" #: ../src/timers.c:217 msgid "Guvcview Warning:" msgstr "Guvcview brÄ«dinÄjums:" #: ../src/timers.c:217 msgid "Not enough free space left on disk" msgstr "DiskÄ nav pietiekami daudz brÄ«vas vietas" #: ../src/v4l2_controls.c:711 msgid "Left" msgstr "Pa kreisi" #: ../src/v4l2_controls.c:712 msgid "Right" msgstr "Pa labi" #: ../src/v4l2_controls.c:716 msgid "Down" msgstr "Lejup" #: ../src/v4l2_controls.c:717 msgid "Up" msgstr "AugÅ¡up" #: ../src/v4l2_controls.c:762 msgid "Off" msgstr "IzslÄ“gts" #: ../src/v4l2_controls.c:762 msgid "On" msgstr "IeslÄ“gts" #: ../src/v4l2_controls.c:762 msgid "Blinking" msgstr "MirgoÅ¡ana" #: ../src/v4l2_controls.c:762 msgid "Auto" msgstr "AutomÄtiski" #. turn it into a menu control #: ../src/v4l2_controls.c:813 msgid "8 bit" msgstr "8 biti" #: ../src/v4l2_controls.c:813 msgid "12 bit" msgstr "12 biti" #: ../src/v4l2_dyna_ctrls.c:96 msgid "Pan (relative)" msgstr "Vert. pagrieziens (relatÄ«vi)" #: ../src/v4l2_dyna_ctrls.c:109 msgid "Tilt (relative)" msgstr "Horiz. pagrieziens (relatÄ«vi)" #: ../src/v4l2_dyna_ctrls.c:122 msgid "Pan Reset" msgstr "Vert. pagrieziens, pÄrstatÄ«t" #: ../src/v4l2_dyna_ctrls.c:135 msgid "Tilt Reset" msgstr "Horiz. pagrieziens, pÄrstatÄ«t" #: ../src/v4l2_dyna_ctrls.c:148 msgid "Focus (absolute)" msgstr "Fokuss (absolÅ«ts)" #: ../src/v4l2_dyna_ctrls.c:161 msgid "LED1 Mode" msgstr "LED1 režīms" #: ../src/v4l2_dyna_ctrls.c:174 msgid "LED1 Frequency" msgstr "LED1 frekvence" #: ../src/v4l2_dyna_ctrls.c:187 msgid "Disable video processing" msgstr "AtslÄ“gt video apstrÄdi" #: ../src/v4l2_dyna_ctrls.c:200 msgid "Raw bits per pixel" msgstr "" #. needed only for language files (not used) #. V4L2 control strings #: ../src/v4l2uvc.c:56 msgid "User Controls" msgstr "LietotÄja vadÄ«klas" #: ../src/v4l2uvc.c:57 msgid "Brightness" msgstr "GaiÅ¡ums" #: ../src/v4l2uvc.c:58 msgid "Contrast" msgstr "Kontrasts" #: ../src/v4l2uvc.c:59 msgid "Hue" msgstr "Tonis" #: ../src/v4l2uvc.c:60 msgid "Saturation" msgstr "PiesÄtinÄjums" #: ../src/v4l2uvc.c:61 msgid "Sharpness" msgstr "Asums" #: ../src/v4l2uvc.c:62 msgid "Gamma" msgstr "Gamma" #: ../src/v4l2uvc.c:63 msgid "Backlight Compensation" msgstr "Fona apgaismojuma kompensÄcija" #: ../src/v4l2uvc.c:64 msgid "Power Line Frequency" msgstr "LÄ«nijas frekvence" #: ../src/v4l2uvc.c:65 msgid "Hue, Automatic" msgstr "Tonis, automÄtiski" #: ../src/v4l2uvc.c:66 msgid "Focus, Auto" msgstr "Fokuss, automÄtiski" #: ../src/v4l2uvc.c:67 msgid "Manual Mode" msgstr "Rokas režīms" #: ../src/v4l2uvc.c:68 msgid "Auto Mode" msgstr "AutomÄtiskais režīms" #: ../src/v4l2uvc.c:69 msgid "Shutter Priority Mode" msgstr "Aizvara prioritÄtes režīms" #: ../src/v4l2uvc.c:70 msgid "Aperture Priority Mode" msgstr "Diafragmas prioritÄtes režīms" #: ../src/v4l2uvc.c:71 msgid "Black Level" msgstr "MelnÄ lÄ«menis" #: ../src/v4l2uvc.c:72 msgid "White Balance, Automatic" msgstr "BaltÄs krÄsas lÄ«dzsvars, automÄtiski" #: ../src/v4l2uvc.c:73 msgid "Do White Balance" msgstr "" #: ../src/v4l2uvc.c:74 msgid "Red Balance" msgstr "Sarkanais lÄ«dzsvars" #: ../src/v4l2uvc.c:75 msgid "Blue Balance" msgstr "Zilais lÄ«dzsvars" #: ../src/v4l2uvc.c:76 msgid "Exposure" msgstr "EkspozÄ«cija" #: ../src/v4l2uvc.c:77 msgid "Gain, Automatic" msgstr "Pieaugums, automÄtiski" #: ../src/v4l2uvc.c:78 msgid "Gain" msgstr "Pieaugums" #: ../src/v4l2uvc.c:79 msgid "Horizontal Flip" msgstr "HorizontÄli apgriezts" #: ../src/v4l2uvc.c:80 msgid "Vertical Flip" msgstr "VertikÄli apgriezts" #: ../src/v4l2uvc.c:81 msgid "Horizontal Center" msgstr "HorizontÄli centrÄ" #: ../src/v4l2uvc.c:82 msgid "Vertical Center" msgstr "VertikÄli centrÄ" #: ../src/v4l2uvc.c:83 msgid "Chroma AGC" msgstr "" #: ../src/v4l2uvc.c:84 msgid "Color Killer" msgstr "KrÄsu slepkava" #: ../src/v4l2uvc.c:85 msgid "Color Effects" msgstr "KrÄsu efekti" #. CAMERA CLASS control strings #: ../src/v4l2uvc.c:88 msgid "Camera Controls" msgstr "Kameras vadÄ«klas" #: ../src/v4l2uvc.c:89 msgid "Auto Exposure" msgstr "AutomÄtiska ekspozÄ«cija" #: ../src/v4l2uvc.c:90 msgid "Exposure Time, Absolute" msgstr "EkspozÄ«cijas laiks, absolÅ«ts" #: ../src/v4l2uvc.c:91 msgid "Exposure, Dynamic Framerate" msgstr "EkspozÄ«cija, dinamisks kadrÄtrums" #: ../src/v4l2uvc.c:92 msgid "Pan, Relative" msgstr "Vert. pagrieziens, relatÄ«vi" #: ../src/v4l2uvc.c:93 msgid "Tilt, Relative" msgstr "Horiz. pagrieziens, relatÄ«vi" #: ../src/v4l2uvc.c:94 msgid "Pan, Reset" msgstr "Vert. pagrieziens, pÄrstatÄ«t" #: ../src/v4l2uvc.c:95 msgid "Tilt, Reset" msgstr "Horiz. pagrieziens, pÄrstatÄ«t" #: ../src/v4l2uvc.c:96 msgid "Pan, Absolute" msgstr "Vert. pagrieziens, absolÅ«ti" #: ../src/v4l2uvc.c:98 msgid "Focus, Absolute" msgstr "Fokuss, absolÅ«ts" #: ../src/v4l2uvc.c:99 msgid "Focus, Relative" msgstr "Fokuss, relatÄ«vs" #: ../src/v4l2uvc.c:100 msgid "Focus, Automatic" msgstr "Fokuss, automÄtiski" #: ../src/v4l2uvc.c:101 msgid "Zoom, Absolute" msgstr "MÄ“rogoÅ¡ana, absolÅ«ta" #: ../src/v4l2uvc.c:102 msgid "Zoom, Relative" msgstr "MÄ“rogoÅ¡ana, relatÄ«va" #: ../src/v4l2uvc.c:103 msgid "Zoom, Continuous" msgstr "MÄ“rogoÅ¡ana, nepÄrtraukta" #: ../src/v4l2uvc.c:104 msgid "Privacy" msgstr "PrivÄtums" #. UVC specific control strings #: ../src/v4l2uvc.c:107 msgid "Exposure, Auto" msgstr "EkspozÄ«cija" #: ../src/v4l2uvc.c:108 msgid "Exposure, Auto Priority" msgstr "EkspozÄ«cija, automÄtiska prioritÄte" #: ../src/v4l2uvc.c:109 msgid "Exposure (Absolute)" msgstr "EkspozÄ«cija (absolÅ«ta)" #: ../src/v4l2uvc.c:110 msgid "White Balance Temperature, Auto" msgstr "BaltÄs krÄsas lÄ«dzsvars, automÄtiski" #: ../src/v4l2uvc.c:111 msgid "White Balance Temperature" msgstr "BaltÄs krÄsas lÄ«dzsvars" #: ../src/v4l2uvc.c:112 msgid "White Balance Component, Auto" msgstr "BaltÄs krÄsas lÄ«dzsvara komponents, automÄtiski" #: ../src/v4l2uvc.c:113 msgid "White Balance Blue Component" msgstr "BaltÄs krÄsas lÄ«dzsvara zilais komponents" #: ../src/v4l2uvc.c:114 msgid "White Balance Red Component" msgstr "BaltÄs krÄsas lÄ«dzsvara sarkanais komponents" #. libwebcam specific control strings #: ../src/v4l2uvc.c:117 msgid "Focus" msgstr "Fokuss" #: ../src/v4l2uvc.c:118 msgid "Focus (Absolute)" msgstr "Fokuss (absolÅ«ts)" #: ../src/vcodecs.c:63 msgid "MJPG - compressed" msgstr "MJPG - saspiests" #: ../src/vcodecs.c:99 msgid "YUY2 - uncomp YUV" msgstr "YUY2 - nesaspiests YUV" #: ../src/vcodecs.c:135 msgid "RGB - uncomp BMP" msgstr "RGB - nesaspiests BMP" #: ../src/vcodecs.c:171 msgid "MPEG video 1" msgstr "MPEG video 1" #: ../src/vcodecs.c:207 msgid "FLV1 - flash video 1" msgstr "FLV1 - flash video 1" #: ../src/vcodecs.c:243 msgid "WMV1 - win. med. video 7" msgstr "WMV1 - win. med. video 7" #: ../src/vcodecs.c:279 msgid "MPG2 - MPG2 format" msgstr "MPG2 - MPG2 formÄts" #: ../src/vcodecs.c:315 msgid "MS MP4 V3" msgstr "MS MP4 V3" #: ../src/vcodecs.c:351 msgid "MPEG4-ASP" msgstr "MPEG4-ASP" #: ../src/vcodecs.c:387 msgid "MPEG4-AVC (H264)" msgstr "MPEG4-AVC (H264)" #: ../src/vcodecs.c:427 msgid "VP8 (VP8)" msgstr "VP8 (VP8)" #: ../src/vcodecs.c:463 msgid "Theora (ogg theora)" msgstr "Theora (ogg theora)" #: ../src/video_format.c:43 msgid "AVI - avi format" msgstr "AVI - avi formÄts" #: ../src/video_format.c:52 msgid "MKV - Matroska format" msgstr "MKV - Matroska formÄts" #: ../src/video_format.c:61 msgid "WEBM - format" msgstr "WEBM - formÄts" #: ../src/video_tab.c:208 msgid "Frame Rate:" msgstr "Kadru Ätrums:" #: ../src/video_tab.c:215 msgid " Show" msgstr " RÄdÄ«t" #: ../src/video_tab.c:237 msgid "Resolution:" msgstr "IzšķirtspÄ“ja:" #: ../src/video_tab.c:263 msgid "Camera Output:" msgstr "Kameras izvade:" #: ../src/video_tab.c:285 msgid "Apply" msgstr "Pielietot" #: ../src/video_tab.c:292 msgid "Quality:" msgstr "KvalitÄte:" #: ../src/video_tab.c:302 msgid "---- Video Filters ----" msgstr "---- Video filtri ----" #. Mirror #: ../src/video_tab.c:321 msgid " Mirror" msgstr " Spogulis" #. Upturn #: ../src/video_tab.c:332 msgid " Invert" msgstr " InvertÄ“t" #. Negate #: ../src/video_tab.c:343 msgid " Negative" msgstr " NegatÄ«vs" #. Mono #: ../src/video_tab.c:354 msgid " Mono" msgstr " Melnbalts" #. Pieces #: ../src/video_tab.c:366 msgid " Pieces" msgstr " MozaÄ«ka" #. Particles #: ../src/video_tab.c:378 msgid " Particles" msgstr " Daļiņas" guvcview-src-1.7.1/po/sr.po0000664000175000017500000006363612173235416014614 0ustar paulopaulo# Serbian translation for guvcview # Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 # This file is distributed under the same license as the guvcview package. # FIRST AUTHOR , 2011. # МироÑлав Ðиколић , 2011—2013. msgid "" msgstr "" "Project-Id-Version: guvcview\n" "Report-Msgid-Bugs-To: pj.assis@gmail.com\n" "POT-Creation-Date: 2013-07-16 12:53+0000\n" "PO-Revision-Date: 2013-03-09 13:12+0000\n" "Last-Translator: МироÑлав Ðиколић \n" "Language-Team: Serbian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2013-07-22 13:32+0000\n" "X-Generator: Launchpad (build 16696)\n" "Language: sr\n" #: ../data/guvcview.desktop.in.in.h:1 msgid "guvcview" msgstr "Камерица" #: ../data/guvcview.desktop.in.in.h:2 msgid "GTK UVC video viewer" msgstr "ГТК УВЦ видео приказивач" #: ../data/guvcview.desktop.in.in.h:3 msgid "A video viewer and capturer for the linux uvc driver" msgstr "Приказивач и Ñнимач видеа за линукÑов увц управљачки програм" #: ../src/acodecs.c:59 msgid "PCM - uncompressed (16 bit)" msgstr "ПЦМ — неÑажето (16 бита)" #: ../src/acodecs.c:76 msgid "MPEG2 - (lavc)" msgstr "МПЕГ2 — (lavc)" #: ../src/acodecs.c:93 msgid "MP3 - (lavc)" msgstr "МП3 — (lavc)" #: ../src/acodecs.c:110 msgid "Dolby AC3 - (lavc)" msgstr "Долби ÐЦ3 — (lavc)" #: ../src/acodecs.c:127 msgid "ACC Low - (faac)" msgstr "ÐиÑки ÐЦЦ — (faac)" #: ../src/acodecs.c:144 msgid "Vorbis" msgstr "ВорбиÑ" #: ../src/audio_tab.c:80 msgid "Audio" msgstr "Ðудио" #: ../src/audio_tab.c:98 msgid " Sound" msgstr " Звук" #. VU meter on the image (OSD) #: ../src/audio_tab.c:109 msgid " Show VU meter" msgstr " Прикажи ВУ метар" #: ../src/audio_tab.c:121 msgid "Audio API:" msgstr "Ðудио ÐПИ:" #: ../src/audio_tab.c:132 msgid "PORTAUDIO" msgstr "ПОРТÐУДИО" #: ../src/audio_tab.c:133 msgid "PULSEAUDIO" msgstr "ПУЛСЕÐУДИО" #: ../src/audio_tab.c:149 ../src/audio_tab.c:172 msgid "Input Device:" msgstr "Улазни уређај:" #: ../src/audio_tab.c:182 ../src/audio_tab.c:214 msgid "Dev. Default" msgstr "ОÑновни Ñа уређаја" #: ../src/audio_tab.c:204 msgid "Sample Rate:" msgstr "Проток узорка:" #: ../src/audio_tab.c:215 msgid "1 - mono" msgstr "1 — моно" #: ../src/audio_tab.c:216 msgid "2 - stereo" msgstr "2 — Ñтерео" #: ../src/audio_tab.c:251 msgid "Channels:" msgstr "Број канала:" #: ../src/audio_tab.c:302 msgid "---- Audio Effects ----" msgstr "———— Ðудио ефекти ————" #. Echo #: ../src/audio_tab.c:321 msgid " Echo" msgstr " Ехо" #. FUZZ #: ../src/audio_tab.c:332 msgid " Fuzz" msgstr " Маљ" #. Reverb #: ../src/audio_tab.c:344 msgid " Reverb" msgstr " Одјек" #. WahWah #: ../src/audio_tab.c:356 msgid " WahWah" msgstr " ВауВау" #. Ducky #: ../src/audio_tab.c:368 msgid " Ducky" msgstr " Паче" #: ../src/callbacks.c:108 msgid "Error" msgstr "Грешка" #: ../src/callbacks.c:132 msgid "" "\n" "You have more than one video device installed.\n" "Do you want to try another one ?\n" msgstr "" "\n" "Имате неколико видео уређаја инÑталирана.\n" "Желите ли да пробате неки други ?\n" #. Devices #: ../src/callbacks.c:139 ../src/video_tab.c:103 msgid "Device:" msgstr "Уређај:" #: ../src/callbacks.c:271 msgid "Save File" msgstr "Сачувајте датотеку" #: ../src/callbacks.c:283 msgid "File Format:" msgstr "Ð—Ð°Ð¿Ð¸Ñ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ:" #: ../src/callbacks.c:454 msgid "codec values" msgstr "вредноÑти кодека" #: ../src/callbacks.c:465 msgid "" " encoder fps: \n" " (0 - use fps combobox value)" msgstr "" " Ñ„/Ñ ÐµÐ½ÐºÐ¾Ð´ÐµÑ€Ð°: \n" " (0 — кориÑтите вредноÑÑ‚ Ñ„/Ñ Ð¿Ð¾Ñ™Ð° за бирање)" #: ../src/callbacks.c:478 msgid " monotonic pts" msgstr " једнообразне тачке" #. bit rate #: ../src/callbacks.c:485 ../src/callbacks.c:808 msgid "bit rate: " msgstr "проток бита: " #: ../src/callbacks.c:498 msgid "qmax: " msgstr "qmax: " #: ../src/callbacks.c:511 msgid "qmin: " msgstr "qmin: " #: ../src/callbacks.c:524 msgid "max. qdiff: " msgstr "max. q разл: " #: ../src/callbacks.c:537 msgid "dia size: " msgstr "диа величина: " #: ../src/callbacks.c:550 msgid "pre dia size: " msgstr "пре диа величина: " #: ../src/callbacks.c:563 msgid "pre me: " msgstr "пре ме: " #: ../src/callbacks.c:576 msgid "pre cmp: " msgstr "пре цмп: " #: ../src/callbacks.c:589 msgid "cmp: " msgstr "цмп: " #: ../src/callbacks.c:602 msgid "sub cmp: " msgstr "под цмп: " #: ../src/callbacks.c:615 msgid "last predictor count: " msgstr "поÑледњи број предÑказивача: " #: ../src/callbacks.c:628 msgid "gop size: " msgstr "гоп величина: " #: ../src/callbacks.c:641 msgid "qcompress: " msgstr "q-Ñажимање: " #: ../src/callbacks.c:654 msgid "qblur: " msgstr "q-замућење: " #: ../src/callbacks.c:667 msgid "subq: " msgstr "под-q: " #: ../src/callbacks.c:680 msgid "framerefs: " msgstr "framerefs: " #: ../src/callbacks.c:693 msgid "me method: " msgstr "ме начин: " #: ../src/callbacks.c:706 msgid "mb decision: " msgstr "мб одлука: " #: ../src/callbacks.c:719 msgid "max B frames: " msgstr "највише Б оквира: " #: ../src/callbacks.c:732 msgid "num threads: " msgstr "бр. нити: " #: ../src/callbacks.c:795 msgid "audio codec values" msgstr "вредноÑÑ‚ кодека звука" #. sample format #: ../src/callbacks.c:822 msgid "sample format: " msgstr "Ð·Ð°Ð¿Ð¸Ñ ÑƒÐ·Ð¾Ñ€ÐºÐ°: " #: ../src/callbacks.c:1250 msgid "start new" msgstr "покрени нови" #: ../src/callbacks.c:1253 msgid "restart" msgstr "поново покрени" #: ../src/callbacks.c:1255 msgid "new" msgstr "нови" #: ../src/callbacks.c:1257 msgid "cancel" msgstr "откажи" #: ../src/callbacks.c:1262 msgid "" "launch new process or restart?.\n" "\n" msgstr "" "да покренем нови Ð¿Ñ€Ð¾Ñ†ÐµÑ Ð¸Ð»Ð¸ да Ñе поново покренем?.\n" "\n" #: ../src/callbacks.c:1716 ../src/guvcview.c:537 msgid "Cap. Image (I)" msgstr "Сними Ñлику (I)" #. disable image controls #: ../src/callbacks.c:1727 ../src/guvcview.c:658 ../src/timers.c:101 msgid "capturing photo to" msgstr "Ñнимам фотографију у" #: ../src/callbacks.c:1786 ../src/guvcview.c:547 msgid "Cap. Video (V)" msgstr "Сними видео (V)" #: ../src/callbacks.c:1812 ../src/guvcview.c:708 msgid "capturing video to" msgstr "Ñнимам видео у" #. vid capture enabled from start #: ../src/callbacks.c:1845 ../src/guvcview.c:542 msgid "Stop Video (V)" msgstr "ЗауÑтави видео (V)" #: ../src/callbacks.c:1901 ../src/menubar.c:66 msgid "Save Profile" msgstr "Сачувај профил" #: ../src/callbacks.c:1914 ../src/menubar.c:65 msgid "Load Profile" msgstr "Учитај профил" #: ../src/create_video.c:1016 ../src/guvcview.c:700 msgid "Cap. Video" msgstr "Сними видео" #: ../src/guvcview.c:279 msgid "Guvcview Video Capture" msgstr "Камерица — видео Ñнимање" #: ../src/guvcview.c:291 msgid "GUVCViewer Controls" msgstr "Контроле Камерице" #. can't open device #: ../src/guvcview.c:336 msgid "" "Guvcview error:\n" "\n" "Unable to open device" msgstr "" "Грешка Камерице:\n" "\n" "Ðе могу да отворим уређај" #: ../src/guvcview.c:337 msgid "" "Please make sure the camera is connected\n" "and that the correct driver is installed." msgstr "" "Проверите да ли је камера повезана и да ли\n" "је инÑталиран иÑправан управљачки програм." #. uvc extension controls OK, give warning and shutdown (called with --add_ctrls) #: ../src/guvcview.c:342 msgid "" "Guvcview:\n" "\n" "UVC Extension controls" msgstr "" "Камерица:\n" "\n" "Контроле УВЦ проширења" #: ../src/guvcview.c:343 msgid "Extension controls were added to the UVC driver" msgstr "Контроле проширења Ñу додате УВЦ управљачком програму" #. uvc extension controls error - EACCES (needs root user) #: ../src/guvcview.c:350 msgid "" "Guvcview error:\n" "\n" "UVC Extension controls" msgstr "" "Грешка Камерице:\n" "\n" "Контроле УВЦ проширења" #: ../src/guvcview.c:351 msgid "" "An error occurred while adding extension\n" "controls to the UVC driver\n" "Make sure you run guvcview as root (or sudo)." msgstr "" "Дошло је до грешке приликом додавања контрола\n" "проширења УВЦ управљачком програму. Уверите Ñе да\n" "Ñте покренули камерче као админиÑтратор (или Ñудо)." #: ../src/guvcview.c:377 ../src/guvcview.c:455 msgid "" "Guvcview error:\n" "\n" "Can't set a valid video stream for guvcview" msgstr "" "Грешка Камерице:\n" "\n" "Ðе могу да подеÑим иÑправан видео ток за камерче" #: ../src/guvcview.c:378 ../src/guvcview.c:456 msgid "" "Make sure your device driver is v4l2 compliant\n" "and that it is properly installed." msgstr "" "Уверите Ñе да је управљачки програм вашег уређаја\n" "уÑаглашен Ñа в4л2 и да је иÑправно инÑталиран." #: ../src/guvcview.c:400 ../src/guvcview.c:422 msgid "" "Guvcview error:\n" "\n" "Unable to start with minimum setup" msgstr "" "Грешка Камерице:\n" "\n" "Ðе могу да започнем Ñа минималним подешавањима" #: ../src/guvcview.c:401 ../src/guvcview.c:423 msgid "Please reconnect your camera." msgstr "Молим поново повежите вашу камеру." #: ../src/guvcview.c:430 msgid "" "Guvcview error:\n" "\n" "Couldn't query device capabilities" msgstr "" "Грешка Камерице:\n" "\n" "Ðе могу да иÑпитам могућноÑти уређаја" #: ../src/guvcview.c:431 msgid "Make sure the device driver supports v4l2." msgstr "Уверите Ñе да управљачки програм уређаја подржава в4л2." #: ../src/guvcview.c:435 msgid "" "Guvcview error:\n" "\n" "Read method error" msgstr "" "Грешка Камерице:\n" "\n" "Грешка режима читања" #: ../src/guvcview.c:436 msgid "Please try mmap instead (--capture_method=1)." msgstr "Молим покушајте „mmap“ умеÑто овог (--capture_method=1)." #: ../src/guvcview.c:444 msgid "" "Guvcview error:\n" "\n" "Unable to allocate Buffers" msgstr "" "Грешка Камерице:\n" "\n" "Ðе могу да доделим Бафере" #: ../src/guvcview.c:445 msgid "Please try restarting your system." msgstr "Молим покушајте поново да покренете ÑиÑтем." #: ../src/guvcview.c:490 msgid "Image Controls" msgstr "Контроле Ñлике" #. image auto capture #: ../src/guvcview.c:533 msgid "Stop Auto (I)" msgstr "ЗауÑтави аутоматик (I)" #: ../src/guvcview.c:644 msgid "" "Guvcview error:\n" "\n" "Unable to create Video Thread" msgstr "" "Грешка Камерице:\n" "\n" "Ðе могу да направим видео нит" #: ../src/guvcview.c:645 msgid "Please report it to http://developer.berlios.de/bugs/?group_id=8179" msgstr "" "Молим пријавите на адреÑу: http://developer.berlios.de/bugs/?group_id=8179" #: ../src/img_controls.c:121 msgid "Auto Focus (continuous)" msgstr "СамоÑтално фокуÑирање (непрекидно)" #: ../src/img_controls.c:122 msgid "set Focus" msgstr "подеÑи фокуÑ" #: ../src/image_format.c:35 msgid "Jpeg (jpg)" msgstr "Јпег (jpg)" #: ../src/image_format.c:41 msgid "Bitmap (Bmp)" msgstr "Битмап (Bmp)" #: ../src/image_format.c:47 msgid "Portable Network Graphics (Png)" msgstr "ПреноÑна мрежна графика (Png)" #: ../src/image_format.c:53 msgid "Raw Image (raw)" msgstr "Сирова Ñлика (raw)" #. controls menu #: ../src/menubar.c:64 msgid "Settings" msgstr "Подешавања" #: ../src/menubar.c:67 msgid "Hardware Defaults" msgstr "ОÑновно Ñа уређаја" #: ../src/menubar.c:75 msgid "Camera Button" msgstr "Дугме фото-апарата" #: ../src/menubar.c:79 msgid "Capture Image" msgstr "Сними Ñлику" #: ../src/menubar.c:84 msgid "Capture Video" msgstr "Сними видео" #. video menu #: ../src/menubar.c:144 ../src/video_tab.c:87 msgid "Video" msgstr "Видео" #: ../src/menubar.c:145 ../src/menubar.c:231 msgid "File" msgstr "Датотека" #: ../src/menubar.c:146 ../src/menubar.c:232 msgid "Increment Filename" msgstr "Ðазив датотеке увећања" #: ../src/menubar.c:164 msgid "Video Codec" msgstr "Видео кодек" #: ../src/menubar.c:187 msgid "Video Codec Properties" msgstr "СвојÑтва видео кодека" #: ../src/menubar.c:194 msgid "Audio Codec" msgstr "Ðудио кодек" #: ../src/menubar.c:215 msgid "Audio Codec Properties" msgstr "СвојÑтва аудио кодека" #. photo menu #: ../src/menubar.c:230 msgid "Photo" msgstr "Фотографија" #: ../src/options.c:752 msgid "Prints version" msgstr "Штампа издање" #: ../src/options.c:753 msgid "Displays debug information" msgstr "Приказује информацијe о иÑправљању грешака" #: ../src/options.c:754 msgid "Video Device to use [default: /dev/video0]" msgstr "Видео уређај за коришћење [оÑновни: „/dev/video0“]" #: ../src/options.c:755 msgid "Exit after adding UVC extension controls (needs root/sudo)" msgstr "Излази поÑле додавања контрола УВЦ проширења (захтева „root/sudo“)" #: ../src/options.c:756 msgid "Don't stream video (image controls only)" msgstr "Ðе пушта ток видеа (Ñамо контроле Ñлике)" #: ../src/options.c:757 msgid "Don't display a GUI" msgstr "Ðе приказује ГКС" #: ../src/options.c:758 msgid "Capture method (1-mmap (default) 2-read)" msgstr "Ðачин Ñнимања (1-ммап (оÑновно) 2-читај)" #: ../src/options.c:759 msgid "Configuration file" msgstr "Датотека подешавања" #: ../src/options.c:760 msgid "Hardware accelaration (enable(1) | disable(0))" msgstr "Убрзање физичке компоненте (укључи(1) | иÑкључи(0))" #: ../src/options.c:761 msgid "" "Pixel " "format(mjpg|jpeg|yuyv|yvyu|uyvy|yyuv|yu12|yv12|nv12|nv21|nv16|nv61|y41p|grey|" "y10b|y16 |s501|s505|s508|gbrg|grbg|ba81|rggb|bgr3|rgb3)" msgstr "" "Формат " "тачака(mjpg|jpeg|yuyv|yvyu|uyvy|yyuv|yu12|yv12|nv12|nv21|nv16|nv61|y41p|grey|" "y10b|y16 |s501|s505|s508|gbrg|grbg|ba81|rggb|bgr3|rgb3)" #: ../src/options.c:762 msgid "Frame size, default: 640x480" msgstr "Величина кадра, оÑновна: 640к480" #: ../src/options.c:763 msgid "Image File name" msgstr "Ðазив датотеке Ñлике" #: ../src/options.c:764 msgid "Image capture interval in seconds" msgstr "Интервал Ñнимања Ñлике у Ñекундама" #: ../src/options.c:765 msgid "Number of Pictures to capture" msgstr "Број Ñлика за Ñнимање" #: ../src/options.c:766 msgid "Video File name (capture from start)" msgstr "Ðазив датотеке видеа (Ñнимање од почетка)" #: ../src/options.c:767 msgid "Video capture time (in seconds)" msgstr "Време Ñнимања видеа (у Ñекундама)" #: ../src/options.c:768 msgid "Exits guvcview after closing video" msgstr "Излази из камерице након затварања видеа" #: ../src/options.c:769 msgid "Number of initial frames to skip" msgstr "Број почетних кадрова за преÑкакање" #: ../src/options.c:770 msgid "Show FPS value (enable(1) | disable (0))" msgstr "Приказује К/С вредноÑÑ‚ (укључи (1) | иÑкључи (0))" #: ../src/options.c:771 msgid "Load Profile at start" msgstr "Учитава профил приликом покретања" #: ../src/options.c:777 msgid "- local options" msgstr "— локална опција" #. gdk_threads_enter(); #: ../src/timers.c:119 msgid "Cap. Image" msgstr "Сними Ñлику" #: ../src/timers.c:217 msgid "Guvcview Warning:" msgstr "Упозорење Камерице:" #: ../src/timers.c:217 msgid "Not enough free space left on disk" msgstr "Ðема довољно Ñлободног проÑтора на диÑку" #: ../src/v4l2_controls.c:711 msgid "Left" msgstr "Лево" #: ../src/v4l2_controls.c:712 msgid "Right" msgstr "ДеÑно" #: ../src/v4l2_controls.c:716 msgid "Down" msgstr "Доле" #: ../src/v4l2_controls.c:717 msgid "Up" msgstr "Горе" #: ../src/v4l2_controls.c:762 msgid "Off" msgstr "ИÑкљ." #: ../src/v4l2_controls.c:762 msgid "On" msgstr "Укљ." #: ../src/v4l2_controls.c:762 msgid "Blinking" msgstr "Треперење" #: ../src/v4l2_controls.c:762 msgid "Auto" msgstr "СамоÑтално" #. turn it into a menu control #: ../src/v4l2_controls.c:813 msgid "8 bit" msgstr "8 бита" #: ../src/v4l2_controls.c:813 msgid "12 bit" msgstr "12 бита" #: ../src/v4l2_dyna_ctrls.c:96 msgid "Pan (relative)" msgstr "Праћење (релативно)" #: ../src/v4l2_dyna_ctrls.c:109 msgid "Tilt (relative)" msgstr "Ðагибање (релативно)" #: ../src/v4l2_dyna_ctrls.c:122 msgid "Pan Reset" msgstr "Поновно праћење" #: ../src/v4l2_dyna_ctrls.c:135 msgid "Tilt Reset" msgstr "Поновно нагибање" #: ../src/v4l2_dyna_ctrls.c:148 msgid "Focus (absolute)" msgstr "Ð¤Ð¾ÐºÑƒÑ (апÑолутни)" #: ../src/v4l2_dyna_ctrls.c:161 msgid "LED1 Mode" msgstr "ЛЕД1 режим" #: ../src/v4l2_dyna_ctrls.c:174 msgid "LED1 Frequency" msgstr "ЛЕД1 учеÑталоÑÑ‚" #: ../src/v4l2_dyna_ctrls.c:187 msgid "Disable video processing" msgstr "Онемогући обрађивање видеа" #: ../src/v4l2_dyna_ctrls.c:200 msgid "Raw bits per pixel" msgstr "Сирових бита по тачци" #. needed only for language files (not used) #. V4L2 control strings #: ../src/v4l2uvc.c:56 msgid "User Controls" msgstr "Контроле кориÑника" #: ../src/v4l2uvc.c:57 msgid "Brightness" msgstr "ОÑветљеноÑÑ‚" #: ../src/v4l2uvc.c:58 msgid "Contrast" msgstr "КонтраÑÑ‚" #: ../src/v4l2uvc.c:59 msgid "Hue" msgstr "ÐијанÑа" #: ../src/v4l2uvc.c:60 msgid "Saturation" msgstr "ЗаÑићеноÑÑ‚" #: ../src/v4l2uvc.c:61 msgid "Sharpness" msgstr "Оштрина" #: ../src/v4l2uvc.c:62 msgid "Gamma" msgstr "Гама" #: ../src/v4l2uvc.c:63 msgid "Backlight Compensation" msgstr "Поправка Ñветла позадине" #: ../src/v4l2uvc.c:64 msgid "Power Line Frequency" msgstr "УчеÑталоÑÑ‚ оÑвежавања" #: ../src/v4l2uvc.c:65 msgid "Hue, Automatic" msgstr "ÐијанÑа, аутоматÑки" #: ../src/v4l2uvc.c:66 msgid "Focus, Auto" msgstr "ФокуÑ, ауто" #: ../src/v4l2uvc.c:67 msgid "Manual Mode" msgstr "Ручно" #: ../src/v4l2uvc.c:68 msgid "Auto Mode" msgstr "ÐутоматÑки" #: ../src/v4l2uvc.c:69 msgid "Shutter Priority Mode" msgstr "Приоритет затварача" #: ../src/v4l2uvc.c:70 msgid "Aperture Priority Mode" msgstr "Приоритет бленде" #: ../src/v4l2uvc.c:71 msgid "Black Level" msgstr "Ðиво црне" #: ../src/v4l2uvc.c:72 msgid "White Balance, Automatic" msgstr "Равнотежа белог, аутоматÑки" #: ../src/v4l2uvc.c:73 msgid "Do White Balance" msgstr "Уравнотежавање белог" #: ../src/v4l2uvc.c:74 msgid "Red Balance" msgstr "Равнотежа црвеног" #: ../src/v4l2uvc.c:75 msgid "Blue Balance" msgstr "Равнотежа плавог" #: ../src/v4l2uvc.c:76 msgid "Exposure" msgstr "Излагање" #: ../src/v4l2uvc.c:77 msgid "Gain, Automatic" msgstr "Појачање, аутоматÑки" #: ../src/v4l2uvc.c:78 msgid "Gain" msgstr "Појачање" #: ../src/v4l2uvc.c:79 msgid "Horizontal Flip" msgstr "Водоравно превртање" #: ../src/v4l2uvc.c:80 msgid "Vertical Flip" msgstr "УÑправно превртање" #: ../src/v4l2uvc.c:81 msgid "Horizontal Center" msgstr "Водоравно центрирање" #: ../src/v4l2uvc.c:82 msgid "Vertical Center" msgstr "УÑправно центрирање" #: ../src/v4l2uvc.c:83 msgid "Chroma AGC" msgstr "ÐГЦ хроминанÑе" #: ../src/v4l2uvc.c:84 msgid "Color Killer" msgstr "Укидач боје" #: ../src/v4l2uvc.c:85 msgid "Color Effects" msgstr "Ефекти боје" #. CAMERA CLASS control strings #: ../src/v4l2uvc.c:88 msgid "Camera Controls" msgstr "Контроле камере" #: ../src/v4l2uvc.c:89 msgid "Auto Exposure" msgstr "ÐутоматÑка екÑпозиција" #: ../src/v4l2uvc.c:90 msgid "Exposure Time, Absolute" msgstr "Време излагања, апÑолутно" #: ../src/v4l2uvc.c:91 msgid "Exposure, Dynamic Framerate" msgstr "Излагање, динамички проток кадра" #: ../src/v4l2uvc.c:92 msgid "Pan, Relative" msgstr "Праћење, релативно" #: ../src/v4l2uvc.c:93 msgid "Tilt, Relative" msgstr "Ðагибање, релативно" #: ../src/v4l2uvc.c:94 msgid "Pan, Reset" msgstr "Праћење, поновно" #: ../src/v4l2uvc.c:95 msgid "Tilt, Reset" msgstr "Ðагибање, поновно" #: ../src/v4l2uvc.c:96 msgid "Pan, Absolute" msgstr "Праћење, апÑолутно" #: ../src/v4l2uvc.c:98 msgid "Focus, Absolute" msgstr "ФокуÑ, апÑолутни" #: ../src/v4l2uvc.c:99 msgid "Focus, Relative" msgstr "ФокуÑ, релативни" #: ../src/v4l2uvc.c:100 msgid "Focus, Automatic" msgstr "ФокуÑ, аутоматÑки" #: ../src/v4l2uvc.c:101 msgid "Zoom, Absolute" msgstr "Зум, апÑолутни" #: ../src/v4l2uvc.c:102 msgid "Zoom, Relative" msgstr "Зум, релативни" #: ../src/v4l2uvc.c:103 msgid "Zoom, Continuous" msgstr "Зум, непрекидни" #: ../src/v4l2uvc.c:104 msgid "Privacy" msgstr "ПриватноÑÑ‚" #. UVC specific control strings #: ../src/v4l2uvc.c:107 msgid "Exposure, Auto" msgstr "Излагање, аутоматÑко" #: ../src/v4l2uvc.c:108 msgid "Exposure, Auto Priority" msgstr "Излагање, приоритет аутоматÑког" #: ../src/v4l2uvc.c:109 msgid "Exposure (Absolute)" msgstr "Излагање (апÑолутно)" #: ../src/v4l2uvc.c:110 msgid "White Balance Temperature, Auto" msgstr "Температура равнотеже белог, ауто" #: ../src/v4l2uvc.c:111 msgid "White Balance Temperature" msgstr "Температура равнотеже белог" #: ../src/v4l2uvc.c:112 msgid "White Balance Component, Auto" msgstr "СаÑтојак равнотеже белог, ауто" #: ../src/v4l2uvc.c:113 msgid "White Balance Blue Component" msgstr "Плави ÑаÑтојак равнотеже белог" #: ../src/v4l2uvc.c:114 msgid "White Balance Red Component" msgstr "Црвени ÑаÑтојак равнотеже белог" #. libwebcam specific control strings #: ../src/v4l2uvc.c:117 msgid "Focus" msgstr "ФокуÑ" #: ../src/v4l2uvc.c:118 msgid "Focus (Absolute)" msgstr "Ð¤Ð¾ÐºÑƒÑ (апÑолутни)" #: ../src/vcodecs.c:63 msgid "MJPG - compressed" msgstr "МЈПГ — Ñажети" #: ../src/vcodecs.c:99 msgid "YUY2 - uncomp YUV" msgstr "ЈУЈ2 — неÑажети ЈУВ" #: ../src/vcodecs.c:135 msgid "RGB - uncomp BMP" msgstr "РГБ — неÑажети БМП" #: ../src/vcodecs.c:171 msgid "MPEG video 1" msgstr "МПЕГ видео 1" #: ../src/vcodecs.c:207 msgid "FLV1 - flash video 1" msgstr "ФЛВ1 — флеш видео 1" #: ../src/vcodecs.c:243 msgid "WMV1 - win. med. video 7" msgstr "ВМВ1 — виндоуз медија видео 7" #: ../src/vcodecs.c:279 msgid "MPG2 - MPG2 format" msgstr "МПГ2 — МПГ2 формат" #: ../src/vcodecs.c:315 msgid "MS MP4 V3" msgstr "МС МП4 Ð’3" #: ../src/vcodecs.c:351 msgid "MPEG4-ASP" msgstr "МПЕГ4-ÐСП" #: ../src/vcodecs.c:387 msgid "MPEG4-AVC (H264)" msgstr "МПЕГ4-ÐВЦ (Ð¥264)" #: ../src/vcodecs.c:427 msgid "VP8 (VP8)" msgstr "ВП8 (VP8)" #: ../src/vcodecs.c:463 msgid "Theora (ogg theora)" msgstr "Теора (ogg theora)" #: ../src/video_format.c:43 msgid "AVI - avi format" msgstr "ÐВИ — ави формат" #: ../src/video_format.c:52 msgid "MKV - Matroska format" msgstr "МКВ — Матрошка формат" #: ../src/video_format.c:61 msgid "WEBM - format" msgstr "ВЕБМ — запиÑ" #: ../src/video_tab.c:208 msgid "Frame Rate:" msgstr "Проток кадра:" #: ../src/video_tab.c:215 msgid " Show" msgstr " Прикажи" #: ../src/video_tab.c:237 msgid "Resolution:" msgstr "Резолуција:" #: ../src/video_tab.c:263 msgid "Camera Output:" msgstr "Излаз камере:" #: ../src/video_tab.c:285 msgid "Apply" msgstr "Примени" #: ../src/video_tab.c:292 msgid "Quality:" msgstr "Квалитет:" #: ../src/video_tab.c:302 msgid "---- Video Filters ----" msgstr "———— Видео филтери ————" #. Mirror #: ../src/video_tab.c:321 msgid " Mirror" msgstr " Огледало" #. Upturn #: ../src/video_tab.c:332 msgid " Invert" msgstr " Обрнуто" #. Negate #: ../src/video_tab.c:343 msgid " Negative" msgstr " Ðегатив" #. Mono #: ../src/video_tab.c:354 msgid " Mono" msgstr " Моно" #. Pieces #: ../src/video_tab.c:366 msgid " Pieces" msgstr " Комадићи" #. Particles #: ../src/video_tab.c:378 msgid " Particles" msgstr " ЧеÑтице" guvcview-src-1.7.1/po/POTFILES.in0000664000175000017500000000061512173235416015371 0ustar paulopaulo[encoding: UTF-8] data/guvcview.desktop.in.in src/acodecs.c src/audio_tab.c src/callbacks.c src/close.c src/create_video.c src/globals.c src/guvcview.c src/img_controls.c src/image_format.c src/menubar.c src/options.c src/osd.c src/timers.c src/v4l2_controls.c src/v4l2_devices.c src/v4l2_dyna_ctrls.c src/v4l2_formats.c src/v4l2uvc.c src/vcodecs.c src/video.c src/video_format.c src/video_tab.c guvcview-src-1.7.1/po/gl.po0000664000175000017500000004537412173235416014571 0ustar paulopaulo# Galician translation for guvcview # Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 # This file is distributed under the same license as the guvcview package. # # FIRST AUTHOR , 2010. # Dario Villar Veres , 2010. msgid "" msgstr "" "Project-Id-Version: guvcview\n" "Report-Msgid-Bugs-To: pj.assis@gmail.com\n" "POT-Creation-Date: 2013-07-16 12:53+0000\n" "PO-Revision-Date: 2013-02-25 05:34+0000\n" "Last-Translator: Dario \n" "Language-Team: Galician \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2013-07-22 13:32+0000\n" "X-Generator: Launchpad (build 16696)\n" "Language: gl\n" #: ../data/guvcview.desktop.in.in.h:1 msgid "guvcview" msgstr "" #: ../data/guvcview.desktop.in.in.h:2 msgid "GTK UVC video viewer" msgstr "" #: ../data/guvcview.desktop.in.in.h:3 msgid "A video viewer and capturer for the linux uvc driver" msgstr "" #: ../src/acodecs.c:59 msgid "PCM - uncompressed (16 bit)" msgstr "" #: ../src/acodecs.c:76 msgid "MPEG2 - (lavc)" msgstr "" #: ../src/acodecs.c:93 msgid "MP3 - (lavc)" msgstr "" #: ../src/acodecs.c:110 msgid "Dolby AC3 - (lavc)" msgstr "" #: ../src/acodecs.c:127 msgid "ACC Low - (faac)" msgstr "" #: ../src/acodecs.c:144 msgid "Vorbis" msgstr "" #: ../src/audio_tab.c:80 msgid "Audio" msgstr "Son" #: ../src/audio_tab.c:98 msgid " Sound" msgstr " Son" #. VU meter on the image (OSD) #: ../src/audio_tab.c:109 msgid " Show VU meter" msgstr "" #: ../src/audio_tab.c:121 msgid "Audio API:" msgstr "" #: ../src/audio_tab.c:132 msgid "PORTAUDIO" msgstr "" #: ../src/audio_tab.c:133 msgid "PULSEAUDIO" msgstr "PULSEAUDIO" #: ../src/audio_tab.c:149 ../src/audio_tab.c:172 msgid "Input Device:" msgstr "Dispositivo de entrada:" #: ../src/audio_tab.c:182 ../src/audio_tab.c:214 msgid "Dev. Default" msgstr "" #: ../src/audio_tab.c:204 msgid "Sample Rate:" msgstr "Taxa de mostraxe:" #: ../src/audio_tab.c:215 msgid "1 - mono" msgstr "1 - mono" #: ../src/audio_tab.c:216 msgid "2 - stereo" msgstr "2 - stereo" #: ../src/audio_tab.c:251 msgid "Channels:" msgstr "Canles:" #: ../src/audio_tab.c:302 msgid "---- Audio Effects ----" msgstr "" #. Echo #: ../src/audio_tab.c:321 msgid " Echo" msgstr " Echo" #. FUZZ #: ../src/audio_tab.c:332 msgid " Fuzz" msgstr " Difuso" #. Reverb #: ../src/audio_tab.c:344 msgid " Reverb" msgstr " Reverberar" #. WahWah #: ../src/audio_tab.c:356 msgid " WahWah" msgstr "" #. Ducky #: ../src/audio_tab.c:368 msgid " Ducky" msgstr "" #: ../src/callbacks.c:108 msgid "Error" msgstr "Erro" #: ../src/callbacks.c:132 msgid "" "\n" "You have more than one video device installed.\n" "Do you want to try another one ?\n" msgstr "" #. Devices #: ../src/callbacks.c:139 ../src/video_tab.c:103 msgid "Device:" msgstr "Dispositivo:" #: ../src/callbacks.c:271 msgid "Save File" msgstr "Gardar o ficheiro" #: ../src/callbacks.c:283 msgid "File Format:" msgstr "" #: ../src/callbacks.c:454 msgid "codec values" msgstr "" #: ../src/callbacks.c:465 msgid "" " encoder fps: \n" " (0 - use fps combobox value)" msgstr "" #: ../src/callbacks.c:478 msgid " monotonic pts" msgstr "" #. bit rate #: ../src/callbacks.c:485 ../src/callbacks.c:808 msgid "bit rate: " msgstr "Taxa de bits: " #: ../src/callbacks.c:498 msgid "qmax: " msgstr "qmax: " #: ../src/callbacks.c:511 msgid "qmin: " msgstr "qmin: " #: ../src/callbacks.c:524 msgid "max. qdiff: " msgstr "max. qdiff: " #: ../src/callbacks.c:537 msgid "dia size: " msgstr "" #: ../src/callbacks.c:550 msgid "pre dia size: " msgstr "" #: ../src/callbacks.c:563 msgid "pre me: " msgstr "pre me: " #: ../src/callbacks.c:576 msgid "pre cmp: " msgstr "pre cmp: " #: ../src/callbacks.c:589 msgid "cmp: " msgstr "cmp: " #: ../src/callbacks.c:602 msgid "sub cmp: " msgstr "sub cmp: " #: ../src/callbacks.c:615 msgid "last predictor count: " msgstr "" #: ../src/callbacks.c:628 msgid "gop size: " msgstr "Tamaño do gop: " #: ../src/callbacks.c:641 msgid "qcompress: " msgstr "" #: ../src/callbacks.c:654 msgid "qblur: " msgstr "" #: ../src/callbacks.c:667 msgid "subq: " msgstr "" #: ../src/callbacks.c:680 msgid "framerefs: " msgstr "" #: ../src/callbacks.c:693 msgid "me method: " msgstr "" #: ../src/callbacks.c:706 msgid "mb decision: " msgstr "" #: ../src/callbacks.c:719 msgid "max B frames: " msgstr "" #: ../src/callbacks.c:732 msgid "num threads: " msgstr "" #: ../src/callbacks.c:795 msgid "audio codec values" msgstr "" #. sample format #: ../src/callbacks.c:822 msgid "sample format: " msgstr "" #: ../src/callbacks.c:1250 msgid "start new" msgstr "" #: ../src/callbacks.c:1253 msgid "restart" msgstr "reiniciar" #: ../src/callbacks.c:1255 msgid "new" msgstr "novo" #: ../src/callbacks.c:1257 msgid "cancel" msgstr "cancelar" #: ../src/callbacks.c:1262 msgid "" "launch new process or restart?.\n" "\n" msgstr "" #: ../src/callbacks.c:1716 ../src/guvcview.c:537 msgid "Cap. Image (I)" msgstr "Cap. Imaxe (I)" #. disable image controls #: ../src/callbacks.c:1727 ../src/guvcview.c:658 ../src/timers.c:101 msgid "capturing photo to" msgstr "" #: ../src/callbacks.c:1786 ../src/guvcview.c:547 msgid "Cap. Video (V)" msgstr "Cap. Video (V)" #: ../src/callbacks.c:1812 ../src/guvcview.c:708 msgid "capturing video to" msgstr "" #. vid capture enabled from start #: ../src/callbacks.c:1845 ../src/guvcview.c:542 msgid "Stop Video (V)" msgstr "Deter vídeo (V)" #: ../src/callbacks.c:1901 ../src/menubar.c:66 msgid "Save Profile" msgstr "" #: ../src/callbacks.c:1914 ../src/menubar.c:65 msgid "Load Profile" msgstr "" #: ../src/create_video.c:1016 ../src/guvcview.c:700 msgid "Cap. Video" msgstr "Cap. Video" #: ../src/guvcview.c:279 msgid "Guvcview Video Capture" msgstr "Capturador de vídeo GUVCView" #: ../src/guvcview.c:291 msgid "GUVCViewer Controls" msgstr "Controles de GUVCViewer" #. can't open device #: ../src/guvcview.c:336 msgid "" "Guvcview error:\n" "\n" "Unable to open device" msgstr "" "Erro de GUVCView:\n" "\n" "Non foi posíbel conectar a cámara" #: ../src/guvcview.c:337 msgid "" "Please make sure the camera is connected\n" "and that the correct driver is installed." msgstr "" "Asegúrese de que a súa cámara está conectada\n" "e que o controlador está correctamente instalada." #. uvc extension controls OK, give warning and shutdown (called with --add_ctrls) #: ../src/guvcview.c:342 msgid "" "Guvcview:\n" "\n" "UVC Extension controls" msgstr "" #: ../src/guvcview.c:343 msgid "Extension controls were added to the UVC driver" msgstr "" #. uvc extension controls error - EACCES (needs root user) #: ../src/guvcview.c:350 msgid "" "Guvcview error:\n" "\n" "UVC Extension controls" msgstr "" #: ../src/guvcview.c:351 msgid "" "An error occurred while adding extension\n" "controls to the UVC driver\n" "Make sure you run guvcview as root (or sudo)." msgstr "" #: ../src/guvcview.c:377 ../src/guvcview.c:455 msgid "" "Guvcview error:\n" "\n" "Can't set a valid video stream for guvcview" msgstr "" #: ../src/guvcview.c:378 ../src/guvcview.c:456 msgid "" "Make sure your device driver is v4l2 compliant\n" "and that it is properly installed." msgstr "" #: ../src/guvcview.c:400 ../src/guvcview.c:422 msgid "" "Guvcview error:\n" "\n" "Unable to start with minimum setup" msgstr "" #: ../src/guvcview.c:401 ../src/guvcview.c:423 msgid "Please reconnect your camera." msgstr "Conecte de novo a súa cámara." #: ../src/guvcview.c:430 msgid "" "Guvcview error:\n" "\n" "Couldn't query device capabilities" msgstr "" "Erro de GUVCView:\n" "\n" "Non se poideron consultar as capacidades do dispositivo" #: ../src/guvcview.c:431 msgid "Make sure the device driver supports v4l2." msgstr "Asegúrese de que o controlador do dispositivo soporta v4l2." #: ../src/guvcview.c:435 msgid "" "Guvcview error:\n" "\n" "Read method error" msgstr "" "Erro de GUVCView:\n" "\n" "Erro no método de lectura" #: ../src/guvcview.c:436 msgid "Please try mmap instead (--capture_method=1)." msgstr "Probe mmap no seu lugar (--capture_method=1)." #: ../src/guvcview.c:444 msgid "" "Guvcview error:\n" "\n" "Unable to allocate Buffers" msgstr "" "Erro de GUVCView:\n" "\n" "Non foi posíbel asignarlle memoria aos búferes" #: ../src/guvcview.c:445 msgid "Please try restarting your system." msgstr "Probe reiniciando o seu sistema." #: ../src/guvcview.c:490 msgid "Image Controls" msgstr "" #. image auto capture #: ../src/guvcview.c:533 msgid "Stop Auto (I)" msgstr "" #: ../src/guvcview.c:644 msgid "" "Guvcview error:\n" "\n" "Unable to create Video Thread" msgstr "" "Erro en GUVCView:\n" "\n" "Non foi posíble crear un fío de execución de vídeo" #: ../src/guvcview.c:645 msgid "Please report it to http://developer.berlios.de/bugs/?group_id=8179" msgstr "" "Por favor, informe do erro a http://developer.berlios.de/bugs/?group_id=8179" #: ../src/img_controls.c:121 msgid "Auto Focus (continuous)" msgstr "Foco automático(continuo)" #: ../src/img_controls.c:122 msgid "set Focus" msgstr "Definir foco" #: ../src/image_format.c:35 msgid "Jpeg (jpg)" msgstr "" #: ../src/image_format.c:41 msgid "Bitmap (Bmp)" msgstr "" #: ../src/image_format.c:47 msgid "Portable Network Graphics (Png)" msgstr "" #: ../src/image_format.c:53 msgid "Raw Image (raw)" msgstr "" #. controls menu #: ../src/menubar.c:64 msgid "Settings" msgstr "" #: ../src/menubar.c:67 msgid "Hardware Defaults" msgstr "" #: ../src/menubar.c:75 msgid "Camera Button" msgstr "" #: ../src/menubar.c:79 msgid "Capture Image" msgstr "" #: ../src/menubar.c:84 msgid "Capture Video" msgstr "" #. video menu #: ../src/menubar.c:144 ../src/video_tab.c:87 msgid "Video" msgstr "" #: ../src/menubar.c:145 ../src/menubar.c:231 msgid "File" msgstr "" #: ../src/menubar.c:146 ../src/menubar.c:232 msgid "Increment Filename" msgstr "" #: ../src/menubar.c:164 msgid "Video Codec" msgstr "" #: ../src/menubar.c:187 msgid "Video Codec Properties" msgstr "" #: ../src/menubar.c:194 msgid "Audio Codec" msgstr "" #: ../src/menubar.c:215 msgid "Audio Codec Properties" msgstr "" #. photo menu #: ../src/menubar.c:230 msgid "Photo" msgstr "" #: ../src/options.c:752 msgid "Prints version" msgstr "Mostrar a versión" #: ../src/options.c:753 msgid "Displays debug information" msgstr "" #: ../src/options.c:754 msgid "Video Device to use [default: /dev/video0]" msgstr "" #: ../src/options.c:755 msgid "Exit after adding UVC extension controls (needs root/sudo)" msgstr "" #: ../src/options.c:756 msgid "Don't stream video (image controls only)" msgstr "" #: ../src/options.c:757 msgid "Don't display a GUI" msgstr "" #: ../src/options.c:758 msgid "Capture method (1-mmap (default) 2-read)" msgstr "" #: ../src/options.c:759 msgid "Configuration file" msgstr "" #: ../src/options.c:760 msgid "Hardware accelaration (enable(1) | disable(0))" msgstr "" #: ../src/options.c:761 msgid "" "Pixel " "format(mjpg|jpeg|yuyv|yvyu|uyvy|yyuv|yu12|yv12|nv12|nv21|nv16|nv61|y41p|grey|" "y10b|y16 |s501|s505|s508|gbrg|grbg|ba81|rggb|bgr3|rgb3)" msgstr "" #: ../src/options.c:762 msgid "Frame size, default: 640x480" msgstr "Tamaño predeterminado do marco:640x480" #: ../src/options.c:763 msgid "Image File name" msgstr "Nome da imaxe" #: ../src/options.c:764 msgid "Image capture interval in seconds" msgstr "" #: ../src/options.c:765 msgid "Number of Pictures to capture" msgstr "" #: ../src/options.c:766 msgid "Video File name (capture from start)" msgstr "" #: ../src/options.c:767 msgid "Video capture time (in seconds)" msgstr "" #: ../src/options.c:768 msgid "Exits guvcview after closing video" msgstr "" #: ../src/options.c:769 msgid "Number of initial frames to skip" msgstr "" #: ../src/options.c:770 msgid "Show FPS value (enable(1) | disable (0))" msgstr "" #: ../src/options.c:771 msgid "Load Profile at start" msgstr "" #: ../src/options.c:777 msgid "- local options" msgstr "" #. gdk_threads_enter(); #: ../src/timers.c:119 msgid "Cap. Image" msgstr "Cap. Imaxe" #: ../src/timers.c:217 msgid "Guvcview Warning:" msgstr "" #: ../src/timers.c:217 msgid "Not enough free space left on disk" msgstr "" #: ../src/v4l2_controls.c:711 msgid "Left" msgstr "Esquerda" #: ../src/v4l2_controls.c:712 msgid "Right" msgstr "Dereita" #: ../src/v4l2_controls.c:716 msgid "Down" msgstr "Abaixo" #: ../src/v4l2_controls.c:717 msgid "Up" msgstr "Arriba" #: ../src/v4l2_controls.c:762 msgid "Off" msgstr "" #: ../src/v4l2_controls.c:762 msgid "On" msgstr "" #: ../src/v4l2_controls.c:762 msgid "Blinking" msgstr "" #: ../src/v4l2_controls.c:762 msgid "Auto" msgstr "" #. turn it into a menu control #: ../src/v4l2_controls.c:813 msgid "8 bit" msgstr "" #: ../src/v4l2_controls.c:813 msgid "12 bit" msgstr "" #: ../src/v4l2_dyna_ctrls.c:96 msgid "Pan (relative)" msgstr "" #: ../src/v4l2_dyna_ctrls.c:109 msgid "Tilt (relative)" msgstr "" #: ../src/v4l2_dyna_ctrls.c:122 msgid "Pan Reset" msgstr "" #: ../src/v4l2_dyna_ctrls.c:135 msgid "Tilt Reset" msgstr "" #: ../src/v4l2_dyna_ctrls.c:148 msgid "Focus (absolute)" msgstr "" #: ../src/v4l2_dyna_ctrls.c:161 msgid "LED1 Mode" msgstr "" #: ../src/v4l2_dyna_ctrls.c:174 msgid "LED1 Frequency" msgstr "" #: ../src/v4l2_dyna_ctrls.c:187 msgid "Disable video processing" msgstr "" #: ../src/v4l2_dyna_ctrls.c:200 msgid "Raw bits per pixel" msgstr "" #. needed only for language files (not used) #. V4L2 control strings #: ../src/v4l2uvc.c:56 msgid "User Controls" msgstr "" #: ../src/v4l2uvc.c:57 msgid "Brightness" msgstr "Brillo" #: ../src/v4l2uvc.c:58 msgid "Contrast" msgstr "Contraste" #: ../src/v4l2uvc.c:59 msgid "Hue" msgstr "Ton" #: ../src/v4l2uvc.c:60 msgid "Saturation" msgstr "Saturación" #: ../src/v4l2uvc.c:61 msgid "Sharpness" msgstr "Focalización" #: ../src/v4l2uvc.c:62 msgid "Gamma" msgstr "Gamma" #: ../src/v4l2uvc.c:63 msgid "Backlight Compensation" msgstr "" #: ../src/v4l2uvc.c:64 msgid "Power Line Frequency" msgstr "" #: ../src/v4l2uvc.c:65 msgid "Hue, Automatic" msgstr "Matiz, Automático" #: ../src/v4l2uvc.c:66 msgid "Focus, Auto" msgstr "Foco, Automático" #: ../src/v4l2uvc.c:67 msgid "Manual Mode" msgstr "Modo Manual" #: ../src/v4l2uvc.c:68 msgid "Auto Mode" msgstr "Modo Automático" #: ../src/v4l2uvc.c:69 msgid "Shutter Priority Mode" msgstr "" #: ../src/v4l2uvc.c:70 msgid "Aperture Priority Mode" msgstr "" #: ../src/v4l2uvc.c:71 msgid "Black Level" msgstr "Nivel de negro" #: ../src/v4l2uvc.c:72 msgid "White Balance, Automatic" msgstr "" #: ../src/v4l2uvc.c:73 msgid "Do White Balance" msgstr "" #: ../src/v4l2uvc.c:74 msgid "Red Balance" msgstr "Balance vermello" #: ../src/v4l2uvc.c:75 msgid "Blue Balance" msgstr "Balance azul" #: ../src/v4l2uvc.c:76 msgid "Exposure" msgstr "Exposición" #: ../src/v4l2uvc.c:77 msgid "Gain, Automatic" msgstr "Ganancia, Automática" #: ../src/v4l2uvc.c:78 msgid "Gain" msgstr "Ganancia" #: ../src/v4l2uvc.c:79 msgid "Horizontal Flip" msgstr "Xiro horizontal" #: ../src/v4l2uvc.c:80 msgid "Vertical Flip" msgstr "Xiro vertical" #: ../src/v4l2uvc.c:81 msgid "Horizontal Center" msgstr "" #: ../src/v4l2uvc.c:82 msgid "Vertical Center" msgstr "" #: ../src/v4l2uvc.c:83 msgid "Chroma AGC" msgstr "" #: ../src/v4l2uvc.c:84 msgid "Color Killer" msgstr "" #: ../src/v4l2uvc.c:85 msgid "Color Effects" msgstr "Efectos de cor" #. CAMERA CLASS control strings #: ../src/v4l2uvc.c:88 msgid "Camera Controls" msgstr "" #: ../src/v4l2uvc.c:89 msgid "Auto Exposure" msgstr "Exposición automática" #: ../src/v4l2uvc.c:90 msgid "Exposure Time, Absolute" msgstr "Tempo de exposición, Absoluto" #: ../src/v4l2uvc.c:91 msgid "Exposure, Dynamic Framerate" msgstr "" #: ../src/v4l2uvc.c:92 msgid "Pan, Relative" msgstr "" #: ../src/v4l2uvc.c:93 msgid "Tilt, Relative" msgstr "Inclinación, relativo" #: ../src/v4l2uvc.c:94 msgid "Pan, Reset" msgstr "" #: ../src/v4l2uvc.c:95 msgid "Tilt, Reset" msgstr "Inclinación, Restabelecer" #: ../src/v4l2uvc.c:96 msgid "Pan, Absolute" msgstr "" #: ../src/v4l2uvc.c:98 msgid "Focus, Absolute" msgstr "Foco, absoluto" #: ../src/v4l2uvc.c:99 msgid "Focus, Relative" msgstr "Foco, relativo" #: ../src/v4l2uvc.c:100 msgid "Focus, Automatic" msgstr "Foco, automático" #: ../src/v4l2uvc.c:101 msgid "Zoom, Absolute" msgstr "" #: ../src/v4l2uvc.c:102 msgid "Zoom, Relative" msgstr "" #: ../src/v4l2uvc.c:103 msgid "Zoom, Continuous" msgstr "" #: ../src/v4l2uvc.c:104 msgid "Privacy" msgstr "Privacidade" #. UVC specific control strings #: ../src/v4l2uvc.c:107 msgid "Exposure, Auto" msgstr "Exposición, Automático" #: ../src/v4l2uvc.c:108 msgid "Exposure, Auto Priority" msgstr "Exposición, Prioridade automática" #: ../src/v4l2uvc.c:109 msgid "Exposure (Absolute)" msgstr "Exposición (absoluto)" #: ../src/v4l2uvc.c:110 msgid "White Balance Temperature, Auto" msgstr "" #: ../src/v4l2uvc.c:111 msgid "White Balance Temperature" msgstr "" #: ../src/v4l2uvc.c:112 msgid "White Balance Component, Auto" msgstr "" #: ../src/v4l2uvc.c:113 msgid "White Balance Blue Component" msgstr "" #: ../src/v4l2uvc.c:114 msgid "White Balance Red Component" msgstr "" #. libwebcam specific control strings #: ../src/v4l2uvc.c:117 msgid "Focus" msgstr "Foco" #: ../src/v4l2uvc.c:118 msgid "Focus (Absolute)" msgstr "Foco(absoluto)" #: ../src/vcodecs.c:63 msgid "MJPG - compressed" msgstr "" #: ../src/vcodecs.c:99 msgid "YUY2 - uncomp YUV" msgstr "" #: ../src/vcodecs.c:135 msgid "RGB - uncomp BMP" msgstr "" #: ../src/vcodecs.c:171 msgid "MPEG video 1" msgstr "" #: ../src/vcodecs.c:207 msgid "FLV1 - flash video 1" msgstr "" #: ../src/vcodecs.c:243 msgid "WMV1 - win. med. video 7" msgstr "" #: ../src/vcodecs.c:279 msgid "MPG2 - MPG2 format" msgstr "" #: ../src/vcodecs.c:315 msgid "MS MP4 V3" msgstr "MS MP4 V3" #: ../src/vcodecs.c:351 msgid "MPEG4-ASP" msgstr "MPEG4-ASP" #: ../src/vcodecs.c:387 msgid "MPEG4-AVC (H264)" msgstr "MPEG4-AVC (H264)" #: ../src/vcodecs.c:427 msgid "VP8 (VP8)" msgstr "" #: ../src/vcodecs.c:463 msgid "Theora (ogg theora)" msgstr "" #: ../src/video_format.c:43 msgid "AVI - avi format" msgstr "" #: ../src/video_format.c:52 msgid "MKV - Matroska format" msgstr "" #: ../src/video_format.c:61 msgid "WEBM - format" msgstr "" #: ../src/video_tab.c:208 msgid "Frame Rate:" msgstr "Taxa de fotogramas:" #: ../src/video_tab.c:215 msgid " Show" msgstr " Mostrar" #: ../src/video_tab.c:237 msgid "Resolution:" msgstr "Resolution:" #: ../src/video_tab.c:263 msgid "Camera Output:" msgstr "Saída da cámara:" #: ../src/video_tab.c:285 msgid "Apply" msgstr "Aplicar" #: ../src/video_tab.c:292 msgid "Quality:" msgstr "Calidade:" #: ../src/video_tab.c:302 msgid "---- Video Filters ----" msgstr "" #. Mirror #: ../src/video_tab.c:321 msgid " Mirror" msgstr " Espello" #. Upturn #: ../src/video_tab.c:332 msgid " Invert" msgstr " Inverter" #. Negate #: ../src/video_tab.c:343 msgid " Negative" msgstr " Negativo" #. Mono #: ../src/video_tab.c:354 msgid " Mono" msgstr " Mono" #. Pieces #: ../src/video_tab.c:366 msgid " Pieces" msgstr "" #. Particles #: ../src/video_tab.c:378 msgid " Particles" msgstr " Partículas" guvcview-src-1.7.1/po/bs.po0000664000175000017500000004246512173235416014571 0ustar paulopaulo# Bosnian translation for guvcview # Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 # This file is distributed under the same license as the guvcview package. # FIRST AUTHOR , 2011. # msgid "" msgstr "" "Project-Id-Version: guvcview\n" "Report-Msgid-Bugs-To: pj.assis@gmail.com\n" "POT-Creation-Date: 2013-07-16 12:53+0000\n" "PO-Revision-Date: 2011-06-27 19:11+0000\n" "Last-Translator: Stefan Ivanović \n" "Language-Team: Bosnian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2013-07-22 13:32+0000\n" "X-Generator: Launchpad (build 16696)\n" "Language: bs\n" #: ../data/guvcview.desktop.in.in.h:1 msgid "guvcview" msgstr "" #: ../data/guvcview.desktop.in.in.h:2 msgid "GTK UVC video viewer" msgstr "" #: ../data/guvcview.desktop.in.in.h:3 msgid "A video viewer and capturer for the linux uvc driver" msgstr "" #: ../src/acodecs.c:59 msgid "PCM - uncompressed (16 bit)" msgstr "" #: ../src/acodecs.c:76 msgid "MPEG2 - (lavc)" msgstr "" #: ../src/acodecs.c:93 msgid "MP3 - (lavc)" msgstr "" #: ../src/acodecs.c:110 msgid "Dolby AC3 - (lavc)" msgstr "" #: ../src/acodecs.c:127 msgid "ACC Low - (faac)" msgstr "" #: ../src/acodecs.c:144 msgid "Vorbis" msgstr "" #: ../src/audio_tab.c:80 msgid "Audio" msgstr "" #: ../src/audio_tab.c:98 msgid " Sound" msgstr "" #. VU meter on the image (OSD) #: ../src/audio_tab.c:109 msgid " Show VU meter" msgstr "" #: ../src/audio_tab.c:121 msgid "Audio API:" msgstr "" #: ../src/audio_tab.c:132 msgid "PORTAUDIO" msgstr "" #: ../src/audio_tab.c:133 msgid "PULSEAUDIO" msgstr "" #: ../src/audio_tab.c:149 ../src/audio_tab.c:172 msgid "Input Device:" msgstr "" #: ../src/audio_tab.c:182 ../src/audio_tab.c:214 msgid "Dev. Default" msgstr "" #: ../src/audio_tab.c:204 msgid "Sample Rate:" msgstr "" #: ../src/audio_tab.c:215 msgid "1 - mono" msgstr "" #: ../src/audio_tab.c:216 msgid "2 - stereo" msgstr "" #: ../src/audio_tab.c:251 msgid "Channels:" msgstr "" #: ../src/audio_tab.c:302 msgid "---- Audio Effects ----" msgstr "" #. Echo #: ../src/audio_tab.c:321 msgid " Echo" msgstr "" #. FUZZ #: ../src/audio_tab.c:332 msgid " Fuzz" msgstr "" #. Reverb #: ../src/audio_tab.c:344 msgid " Reverb" msgstr "" #. WahWah #: ../src/audio_tab.c:356 msgid " WahWah" msgstr "" #. Ducky #: ../src/audio_tab.c:368 msgid " Ducky" msgstr "" #: ../src/callbacks.c:108 msgid "Error" msgstr "" #: ../src/callbacks.c:132 msgid "" "\n" "You have more than one video device installed.\n" "Do you want to try another one ?\n" msgstr "" #. Devices #: ../src/callbacks.c:139 ../src/video_tab.c:103 msgid "Device:" msgstr "" #: ../src/callbacks.c:271 msgid "Save File" msgstr "" #: ../src/callbacks.c:283 msgid "File Format:" msgstr "" #: ../src/callbacks.c:454 msgid "codec values" msgstr "" #: ../src/callbacks.c:465 msgid "" " encoder fps: \n" " (0 - use fps combobox value)" msgstr "" #: ../src/callbacks.c:478 msgid " monotonic pts" msgstr "" #. bit rate #: ../src/callbacks.c:485 ../src/callbacks.c:808 msgid "bit rate: " msgstr "" #: ../src/callbacks.c:498 msgid "qmax: " msgstr "" #: ../src/callbacks.c:511 msgid "qmin: " msgstr "" #: ../src/callbacks.c:524 msgid "max. qdiff: " msgstr "" #: ../src/callbacks.c:537 msgid "dia size: " msgstr "" #: ../src/callbacks.c:550 msgid "pre dia size: " msgstr "" #: ../src/callbacks.c:563 msgid "pre me: " msgstr "" #: ../src/callbacks.c:576 msgid "pre cmp: " msgstr "" #: ../src/callbacks.c:589 msgid "cmp: " msgstr "" #: ../src/callbacks.c:602 msgid "sub cmp: " msgstr "" #: ../src/callbacks.c:615 msgid "last predictor count: " msgstr "" #: ../src/callbacks.c:628 msgid "gop size: " msgstr "" #: ../src/callbacks.c:641 msgid "qcompress: " msgstr "" #: ../src/callbacks.c:654 msgid "qblur: " msgstr "" #: ../src/callbacks.c:667 msgid "subq: " msgstr "" #: ../src/callbacks.c:680 msgid "framerefs: " msgstr "" #: ../src/callbacks.c:693 msgid "me method: " msgstr "" #: ../src/callbacks.c:706 msgid "mb decision: " msgstr "" #: ../src/callbacks.c:719 msgid "max B frames: " msgstr "" #: ../src/callbacks.c:732 msgid "num threads: " msgstr "" #: ../src/callbacks.c:795 msgid "audio codec values" msgstr "" #. sample format #: ../src/callbacks.c:822 msgid "sample format: " msgstr "" #: ../src/callbacks.c:1250 msgid "start new" msgstr "" #: ../src/callbacks.c:1253 msgid "restart" msgstr "" #: ../src/callbacks.c:1255 msgid "new" msgstr "" #: ../src/callbacks.c:1257 msgid "cancel" msgstr "" #: ../src/callbacks.c:1262 msgid "" "launch new process or restart?.\n" "\n" msgstr "" #: ../src/callbacks.c:1716 ../src/guvcview.c:537 msgid "Cap. Image (I)" msgstr "" #. disable image controls #: ../src/callbacks.c:1727 ../src/guvcview.c:658 ../src/timers.c:101 msgid "capturing photo to" msgstr "" #: ../src/callbacks.c:1786 ../src/guvcview.c:547 msgid "Cap. Video (V)" msgstr "" #: ../src/callbacks.c:1812 ../src/guvcview.c:708 msgid "capturing video to" msgstr "" #. vid capture enabled from start #: ../src/callbacks.c:1845 ../src/guvcview.c:542 msgid "Stop Video (V)" msgstr "" #: ../src/callbacks.c:1901 ../src/menubar.c:66 msgid "Save Profile" msgstr "" #: ../src/callbacks.c:1914 ../src/menubar.c:65 msgid "Load Profile" msgstr "" #: ../src/create_video.c:1016 ../src/guvcview.c:700 msgid "Cap. Video" msgstr "" #: ../src/guvcview.c:279 msgid "Guvcview Video Capture" msgstr "GUVCVju Snimanje video zapisa" #: ../src/guvcview.c:291 msgid "GUVCViewer Controls" msgstr "GUVCVjuer Kontrole" #. can't open device #: ../src/guvcview.c:336 msgid "" "Guvcview error:\n" "\n" "Unable to open device" msgstr "" "GUVCVju greÅ¡ka:\n" "\n" "Nije moguće otvoriti ureÄ‘aj" #: ../src/guvcview.c:337 msgid "" "Please make sure the camera is connected\n" "and that the correct driver is installed." msgstr "" "Postarajte se da je kamera konektovana\n" "i da su pravi upravljaÄki programi instalirani." #. uvc extension controls OK, give warning and shutdown (called with --add_ctrls) #: ../src/guvcview.c:342 msgid "" "Guvcview:\n" "\n" "UVC Extension controls" msgstr "" "GUVCVju:\n" "\n" "UVC Kontrola dodataka" #: ../src/guvcview.c:343 msgid "Extension controls were added to the UVC driver" msgstr "Kontrola dodataka je dodata na UVC drajver" #. uvc extension controls error - EACCES (needs root user) #: ../src/guvcview.c:350 msgid "" "Guvcview error:\n" "\n" "UVC Extension controls" msgstr "" "GUVCVju greÅ¡ka:\n" "\n" "UVC kontrola dodataka" #: ../src/guvcview.c:351 msgid "" "An error occurred while adding extension\n" "controls to the UVC driver\n" "Make sure you run guvcview as root (or sudo)." msgstr "" "GreÅ¡ka se dogodila dok sam dodavao kontrolu\n" "dodataka na UVC drajver\n" "Morate pokrenuti GUVCVju kao korjen ili sudo" #: ../src/guvcview.c:377 ../src/guvcview.c:455 msgid "" "Guvcview error:\n" "\n" "Can't set a valid video stream for guvcview" msgstr "" #: ../src/guvcview.c:378 ../src/guvcview.c:456 msgid "" "Make sure your device driver is v4l2 compliant\n" "and that it is properly installed." msgstr "" #: ../src/guvcview.c:400 ../src/guvcview.c:422 msgid "" "Guvcview error:\n" "\n" "Unable to start with minimum setup" msgstr "" #: ../src/guvcview.c:401 ../src/guvcview.c:423 msgid "Please reconnect your camera." msgstr "" #: ../src/guvcview.c:430 msgid "" "Guvcview error:\n" "\n" "Couldn't query device capabilities" msgstr "" #: ../src/guvcview.c:431 msgid "Make sure the device driver supports v4l2." msgstr "" #: ../src/guvcview.c:435 msgid "" "Guvcview error:\n" "\n" "Read method error" msgstr "" #: ../src/guvcview.c:436 msgid "Please try mmap instead (--capture_method=1)." msgstr "" #: ../src/guvcview.c:444 msgid "" "Guvcview error:\n" "\n" "Unable to allocate Buffers" msgstr "" #: ../src/guvcview.c:445 msgid "Please try restarting your system." msgstr "" #: ../src/guvcview.c:490 msgid "Image Controls" msgstr "" #. image auto capture #: ../src/guvcview.c:533 msgid "Stop Auto (I)" msgstr "" #: ../src/guvcview.c:644 msgid "" "Guvcview error:\n" "\n" "Unable to create Video Thread" msgstr "" #: ../src/guvcview.c:645 msgid "Please report it to http://developer.berlios.de/bugs/?group_id=8179" msgstr "" #: ../src/img_controls.c:121 msgid "Auto Focus (continuous)" msgstr "" #: ../src/img_controls.c:122 msgid "set Focus" msgstr "" #: ../src/image_format.c:35 msgid "Jpeg (jpg)" msgstr "" #: ../src/image_format.c:41 msgid "Bitmap (Bmp)" msgstr "" #: ../src/image_format.c:47 msgid "Portable Network Graphics (Png)" msgstr "" #: ../src/image_format.c:53 msgid "Raw Image (raw)" msgstr "" #. controls menu #: ../src/menubar.c:64 msgid "Settings" msgstr "" #: ../src/menubar.c:67 msgid "Hardware Defaults" msgstr "" #: ../src/menubar.c:75 msgid "Camera Button" msgstr "" #: ../src/menubar.c:79 msgid "Capture Image" msgstr "" #: ../src/menubar.c:84 msgid "Capture Video" msgstr "" #. video menu #: ../src/menubar.c:144 ../src/video_tab.c:87 msgid "Video" msgstr "" #: ../src/menubar.c:145 ../src/menubar.c:231 msgid "File" msgstr "" #: ../src/menubar.c:146 ../src/menubar.c:232 msgid "Increment Filename" msgstr "" #: ../src/menubar.c:164 msgid "Video Codec" msgstr "" #: ../src/menubar.c:187 msgid "Video Codec Properties" msgstr "" #: ../src/menubar.c:194 msgid "Audio Codec" msgstr "" #: ../src/menubar.c:215 msgid "Audio Codec Properties" msgstr "" #. photo menu #: ../src/menubar.c:230 msgid "Photo" msgstr "" #: ../src/options.c:752 msgid "Prints version" msgstr "" #: ../src/options.c:753 msgid "Displays debug information" msgstr "" #: ../src/options.c:754 msgid "Video Device to use [default: /dev/video0]" msgstr "" #: ../src/options.c:755 msgid "Exit after adding UVC extension controls (needs root/sudo)" msgstr "" #: ../src/options.c:756 msgid "Don't stream video (image controls only)" msgstr "" #: ../src/options.c:757 msgid "Don't display a GUI" msgstr "" #: ../src/options.c:758 msgid "Capture method (1-mmap (default) 2-read)" msgstr "" #: ../src/options.c:759 msgid "Configuration file" msgstr "" #: ../src/options.c:760 msgid "Hardware accelaration (enable(1) | disable(0))" msgstr "" #: ../src/options.c:761 msgid "" "Pixel " "format(mjpg|jpeg|yuyv|yvyu|uyvy|yyuv|yu12|yv12|nv12|nv21|nv16|nv61|y41p|grey|" "y10b|y16 |s501|s505|s508|gbrg|grbg|ba81|rggb|bgr3|rgb3)" msgstr "" #: ../src/options.c:762 msgid "Frame size, default: 640x480" msgstr "" #: ../src/options.c:763 msgid "Image File name" msgstr "" #: ../src/options.c:764 msgid "Image capture interval in seconds" msgstr "" #: ../src/options.c:765 msgid "Number of Pictures to capture" msgstr "" #: ../src/options.c:766 msgid "Video File name (capture from start)" msgstr "" #: ../src/options.c:767 msgid "Video capture time (in seconds)" msgstr "" #: ../src/options.c:768 msgid "Exits guvcview after closing video" msgstr "" #: ../src/options.c:769 msgid "Number of initial frames to skip" msgstr "" #: ../src/options.c:770 msgid "Show FPS value (enable(1) | disable (0))" msgstr "" #: ../src/options.c:771 msgid "Load Profile at start" msgstr "" #: ../src/options.c:777 msgid "- local options" msgstr "" #. gdk_threads_enter(); #: ../src/timers.c:119 msgid "Cap. Image" msgstr "" #: ../src/timers.c:217 msgid "Guvcview Warning:" msgstr "" #: ../src/timers.c:217 msgid "Not enough free space left on disk" msgstr "" #: ../src/v4l2_controls.c:711 msgid "Left" msgstr "" #: ../src/v4l2_controls.c:712 msgid "Right" msgstr "" #: ../src/v4l2_controls.c:716 msgid "Down" msgstr "" #: ../src/v4l2_controls.c:717 msgid "Up" msgstr "" #: ../src/v4l2_controls.c:762 msgid "Off" msgstr "" #: ../src/v4l2_controls.c:762 msgid "On" msgstr "" #: ../src/v4l2_controls.c:762 msgid "Blinking" msgstr "" #: ../src/v4l2_controls.c:762 msgid "Auto" msgstr "" #. turn it into a menu control #: ../src/v4l2_controls.c:813 msgid "8 bit" msgstr "" #: ../src/v4l2_controls.c:813 msgid "12 bit" msgstr "" #: ../src/v4l2_dyna_ctrls.c:96 msgid "Pan (relative)" msgstr "" #: ../src/v4l2_dyna_ctrls.c:109 msgid "Tilt (relative)" msgstr "" #: ../src/v4l2_dyna_ctrls.c:122 msgid "Pan Reset" msgstr "" #: ../src/v4l2_dyna_ctrls.c:135 msgid "Tilt Reset" msgstr "" #: ../src/v4l2_dyna_ctrls.c:148 msgid "Focus (absolute)" msgstr "" #: ../src/v4l2_dyna_ctrls.c:161 msgid "LED1 Mode" msgstr "" #: ../src/v4l2_dyna_ctrls.c:174 msgid "LED1 Frequency" msgstr "" #: ../src/v4l2_dyna_ctrls.c:187 msgid "Disable video processing" msgstr "" #: ../src/v4l2_dyna_ctrls.c:200 msgid "Raw bits per pixel" msgstr "" #. needed only for language files (not used) #. V4L2 control strings #: ../src/v4l2uvc.c:56 msgid "User Controls" msgstr "" #: ../src/v4l2uvc.c:57 msgid "Brightness" msgstr "" #: ../src/v4l2uvc.c:58 msgid "Contrast" msgstr "" #: ../src/v4l2uvc.c:59 msgid "Hue" msgstr "" #: ../src/v4l2uvc.c:60 msgid "Saturation" msgstr "" #: ../src/v4l2uvc.c:61 msgid "Sharpness" msgstr "" #: ../src/v4l2uvc.c:62 msgid "Gamma" msgstr "" #: ../src/v4l2uvc.c:63 msgid "Backlight Compensation" msgstr "" #: ../src/v4l2uvc.c:64 msgid "Power Line Frequency" msgstr "" #: ../src/v4l2uvc.c:65 msgid "Hue, Automatic" msgstr "" #: ../src/v4l2uvc.c:66 msgid "Focus, Auto" msgstr "" #: ../src/v4l2uvc.c:67 msgid "Manual Mode" msgstr "" #: ../src/v4l2uvc.c:68 msgid "Auto Mode" msgstr "" #: ../src/v4l2uvc.c:69 msgid "Shutter Priority Mode" msgstr "" #: ../src/v4l2uvc.c:70 msgid "Aperture Priority Mode" msgstr "" #: ../src/v4l2uvc.c:71 msgid "Black Level" msgstr "" #: ../src/v4l2uvc.c:72 msgid "White Balance, Automatic" msgstr "" #: ../src/v4l2uvc.c:73 msgid "Do White Balance" msgstr "" #: ../src/v4l2uvc.c:74 msgid "Red Balance" msgstr "" #: ../src/v4l2uvc.c:75 msgid "Blue Balance" msgstr "" #: ../src/v4l2uvc.c:76 msgid "Exposure" msgstr "" #: ../src/v4l2uvc.c:77 msgid "Gain, Automatic" msgstr "" #: ../src/v4l2uvc.c:78 msgid "Gain" msgstr "" #: ../src/v4l2uvc.c:79 msgid "Horizontal Flip" msgstr "" #: ../src/v4l2uvc.c:80 msgid "Vertical Flip" msgstr "" #: ../src/v4l2uvc.c:81 msgid "Horizontal Center" msgstr "" #: ../src/v4l2uvc.c:82 msgid "Vertical Center" msgstr "" #: ../src/v4l2uvc.c:83 msgid "Chroma AGC" msgstr "" #: ../src/v4l2uvc.c:84 msgid "Color Killer" msgstr "" #: ../src/v4l2uvc.c:85 msgid "Color Effects" msgstr "" #. CAMERA CLASS control strings #: ../src/v4l2uvc.c:88 msgid "Camera Controls" msgstr "" #: ../src/v4l2uvc.c:89 msgid "Auto Exposure" msgstr "" #: ../src/v4l2uvc.c:90 msgid "Exposure Time, Absolute" msgstr "" #: ../src/v4l2uvc.c:91 msgid "Exposure, Dynamic Framerate" msgstr "" #: ../src/v4l2uvc.c:92 msgid "Pan, Relative" msgstr "" #: ../src/v4l2uvc.c:93 msgid "Tilt, Relative" msgstr "" #: ../src/v4l2uvc.c:94 msgid "Pan, Reset" msgstr "" #: ../src/v4l2uvc.c:95 msgid "Tilt, Reset" msgstr "" #: ../src/v4l2uvc.c:96 msgid "Pan, Absolute" msgstr "" #: ../src/v4l2uvc.c:98 msgid "Focus, Absolute" msgstr "" #: ../src/v4l2uvc.c:99 msgid "Focus, Relative" msgstr "" #: ../src/v4l2uvc.c:100 msgid "Focus, Automatic" msgstr "" #: ../src/v4l2uvc.c:101 msgid "Zoom, Absolute" msgstr "" #: ../src/v4l2uvc.c:102 msgid "Zoom, Relative" msgstr "" #: ../src/v4l2uvc.c:103 msgid "Zoom, Continuous" msgstr "" #: ../src/v4l2uvc.c:104 msgid "Privacy" msgstr "" #. UVC specific control strings #: ../src/v4l2uvc.c:107 msgid "Exposure, Auto" msgstr "" #: ../src/v4l2uvc.c:108 msgid "Exposure, Auto Priority" msgstr "" #: ../src/v4l2uvc.c:109 msgid "Exposure (Absolute)" msgstr "" #: ../src/v4l2uvc.c:110 msgid "White Balance Temperature, Auto" msgstr "" #: ../src/v4l2uvc.c:111 msgid "White Balance Temperature" msgstr "" #: ../src/v4l2uvc.c:112 msgid "White Balance Component, Auto" msgstr "" #: ../src/v4l2uvc.c:113 msgid "White Balance Blue Component" msgstr "" #: ../src/v4l2uvc.c:114 msgid "White Balance Red Component" msgstr "" #. libwebcam specific control strings #: ../src/v4l2uvc.c:117 msgid "Focus" msgstr "" #: ../src/v4l2uvc.c:118 msgid "Focus (Absolute)" msgstr "" #: ../src/vcodecs.c:63 msgid "MJPG - compressed" msgstr "" #: ../src/vcodecs.c:99 msgid "YUY2 - uncomp YUV" msgstr "" #: ../src/vcodecs.c:135 msgid "RGB - uncomp BMP" msgstr "" #: ../src/vcodecs.c:171 msgid "MPEG video 1" msgstr "" #: ../src/vcodecs.c:207 msgid "FLV1 - flash video 1" msgstr "" #: ../src/vcodecs.c:243 msgid "WMV1 - win. med. video 7" msgstr "" #: ../src/vcodecs.c:279 msgid "MPG2 - MPG2 format" msgstr "" #: ../src/vcodecs.c:315 msgid "MS MP4 V3" msgstr "" #: ../src/vcodecs.c:351 msgid "MPEG4-ASP" msgstr "" #: ../src/vcodecs.c:387 msgid "MPEG4-AVC (H264)" msgstr "" #: ../src/vcodecs.c:427 msgid "VP8 (VP8)" msgstr "" #: ../src/vcodecs.c:463 msgid "Theora (ogg theora)" msgstr "" #: ../src/video_format.c:43 msgid "AVI - avi format" msgstr "" #: ../src/video_format.c:52 msgid "MKV - Matroska format" msgstr "" #: ../src/video_format.c:61 msgid "WEBM - format" msgstr "" #: ../src/video_tab.c:208 msgid "Frame Rate:" msgstr "" #: ../src/video_tab.c:215 msgid " Show" msgstr "" #: ../src/video_tab.c:237 msgid "Resolution:" msgstr "" #: ../src/video_tab.c:263 msgid "Camera Output:" msgstr "" #: ../src/video_tab.c:285 msgid "Apply" msgstr "" #: ../src/video_tab.c:292 msgid "Quality:" msgstr "" #: ../src/video_tab.c:302 msgid "---- Video Filters ----" msgstr "" #. Mirror #: ../src/video_tab.c:321 msgid " Mirror" msgstr "" #. Upturn #: ../src/video_tab.c:332 msgid " Invert" msgstr "" #. Negate #: ../src/video_tab.c:343 msgid " Negative" msgstr "" #. Mono #: ../src/video_tab.c:354 msgid " Mono" msgstr "" #. Pieces #: ../src/video_tab.c:366 msgid " Pieces" msgstr "" #. Particles #: ../src/video_tab.c:378 msgid " Particles" msgstr "" guvcview-src-1.7.1/po/ja.po0000664000175000017500000004632312173235416014554 0ustar paulopaulo# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # Nobuhiro Iwamatsu , 2009. # msgid "" msgstr "" "Project-Id-Version: GUVCView 1.0.2\n" "Report-Msgid-Bugs-To: pj.assis@gmail.com\n" "POT-Creation-Date: 2013-07-16 12:53+0000\n" "PO-Revision-Date: 2013-02-25 05:38+0000\n" "Last-Translator: Paulo Assis \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2013-07-22 13:32+0000\n" "X-Generator: Launchpad (build 16696)\n" "X-Poedit-Country: JAPAN\n" "Language: \n" "X-Poedit-Language: Japanese\n" #: ../data/guvcview.desktop.in.in.h:1 msgid "guvcview" msgstr "" #: ../data/guvcview.desktop.in.in.h:2 msgid "GTK UVC video viewer" msgstr "" #: ../data/guvcview.desktop.in.in.h:3 msgid "A video viewer and capturer for the linux uvc driver" msgstr "" #: ../src/acodecs.c:59 msgid "PCM - uncompressed (16 bit)" msgstr "" #: ../src/acodecs.c:76 msgid "MPEG2 - (lavc)" msgstr "" #: ../src/acodecs.c:93 msgid "MP3 - (lavc)" msgstr "" #: ../src/acodecs.c:110 msgid "Dolby AC3 - (lavc)" msgstr "" #: ../src/acodecs.c:127 msgid "ACC Low - (faac)" msgstr "" #: ../src/acodecs.c:144 msgid "Vorbis" msgstr "" #: ../src/audio_tab.c:80 msgid "Audio" msgstr "オーディオ" #: ../src/audio_tab.c:98 msgid " Sound" msgstr " サウンド" #. VU meter on the image (OSD) #: ../src/audio_tab.c:109 msgid " Show VU meter" msgstr "" #: ../src/audio_tab.c:121 msgid "Audio API:" msgstr "" #: ../src/audio_tab.c:132 msgid "PORTAUDIO" msgstr "" #: ../src/audio_tab.c:133 msgid "PULSEAUDIO" msgstr "" #: ../src/audio_tab.c:149 ../src/audio_tab.c:172 msgid "Input Device:" msgstr "入力デãƒã‚¤ã‚¹:" #: ../src/audio_tab.c:182 ../src/audio_tab.c:214 msgid "Dev. Default" msgstr "デãƒã‚¤ã‚¹ デフォルト" #: ../src/audio_tab.c:204 msgid "Sample Rate:" msgstr "サンプルレート:" #: ../src/audio_tab.c:215 msgid "1 - mono" msgstr "1 - モノラル" #: ../src/audio_tab.c:216 msgid "2 - stereo" msgstr "2 - ステレオ" #: ../src/audio_tab.c:251 msgid "Channels:" msgstr "ãƒãƒ£ãƒ³ãƒãƒ«:" #: ../src/audio_tab.c:302 msgid "---- Audio Effects ----" msgstr "---- オーディオ エフェクト ----" #. Echo #: ../src/audio_tab.c:321 msgid " Echo" msgstr " Echo" #. FUZZ #: ../src/audio_tab.c:332 msgid " Fuzz" msgstr " Fuzz" #. Reverb #: ../src/audio_tab.c:344 msgid " Reverb" msgstr " Reverb" #. WahWah #: ../src/audio_tab.c:356 msgid " WahWah" msgstr " WahWah" #. Ducky #: ../src/audio_tab.c:368 msgid " Ducky" msgstr " Ducky" #: ../src/callbacks.c:108 msgid "Error" msgstr "" #: ../src/callbacks.c:132 msgid "" "\n" "You have more than one video device installed.\n" "Do you want to try another one ?\n" msgstr "" #. Devices #: ../src/callbacks.c:139 ../src/video_tab.c:103 msgid "Device:" msgstr "デãƒã‚¤ã‚¹:" #: ../src/callbacks.c:271 msgid "Save File" msgstr "ファイルをä¿å­˜ã™ã‚‹" #: ../src/callbacks.c:283 msgid "File Format:" msgstr "" #: ../src/callbacks.c:454 msgid "codec values" msgstr "" #: ../src/callbacks.c:465 msgid "" " encoder fps: \n" " (0 - use fps combobox value)" msgstr "" #: ../src/callbacks.c:478 msgid " monotonic pts" msgstr "" #. bit rate #: ../src/callbacks.c:485 ../src/callbacks.c:808 msgid "bit rate: " msgstr "" #: ../src/callbacks.c:498 msgid "qmax: " msgstr "" #: ../src/callbacks.c:511 msgid "qmin: " msgstr "" #: ../src/callbacks.c:524 msgid "max. qdiff: " msgstr "" #: ../src/callbacks.c:537 msgid "dia size: " msgstr "" #: ../src/callbacks.c:550 msgid "pre dia size: " msgstr "" #: ../src/callbacks.c:563 msgid "pre me: " msgstr "" #: ../src/callbacks.c:576 msgid "pre cmp: " msgstr "" #: ../src/callbacks.c:589 msgid "cmp: " msgstr "" #: ../src/callbacks.c:602 msgid "sub cmp: " msgstr "" #: ../src/callbacks.c:615 msgid "last predictor count: " msgstr "" #: ../src/callbacks.c:628 msgid "gop size: " msgstr "" #: ../src/callbacks.c:641 msgid "qcompress: " msgstr "" #: ../src/callbacks.c:654 msgid "qblur: " msgstr "" #: ../src/callbacks.c:667 msgid "subq: " msgstr "" #: ../src/callbacks.c:680 msgid "framerefs: " msgstr "" #: ../src/callbacks.c:693 msgid "me method: " msgstr "" #: ../src/callbacks.c:706 msgid "mb decision: " msgstr "" #: ../src/callbacks.c:719 msgid "max B frames: " msgstr "" #: ../src/callbacks.c:732 msgid "num threads: " msgstr "" #: ../src/callbacks.c:795 msgid "audio codec values" msgstr "" #. sample format #: ../src/callbacks.c:822 msgid "sample format: " msgstr "" #: ../src/callbacks.c:1250 msgid "start new" msgstr "æ–°ã—ãé–‹å§‹ã™ã‚‹" #: ../src/callbacks.c:1253 msgid "restart" msgstr "å†èµ·å‹•" #: ../src/callbacks.c:1255 msgid "new" msgstr "æ–°è¦" #: ../src/callbacks.c:1257 msgid "cancel" msgstr "キャンセル" #: ../src/callbacks.c:1262 msgid "" "launch new process or restart?.\n" "\n" msgstr "" "æ–°ã—ã„プロセスを立ã¡ä¸Šã’ã‚‹ã‹ã€å†èµ·å‹•ã—ã¾ã™ã‹?\n" "\n" #: ../src/callbacks.c:1716 ../src/guvcview.c:537 msgid "Cap. Image (I)" msgstr "" #. disable image controls #: ../src/callbacks.c:1727 ../src/guvcview.c:658 ../src/timers.c:101 msgid "capturing photo to" msgstr "" #: ../src/callbacks.c:1786 ../src/guvcview.c:547 msgid "Cap. Video (V)" msgstr "" #: ../src/callbacks.c:1812 ../src/guvcview.c:708 msgid "capturing video to" msgstr "" #. vid capture enabled from start #: ../src/callbacks.c:1845 ../src/guvcview.c:542 msgid "Stop Video (V)" msgstr "" #: ../src/callbacks.c:1901 ../src/menubar.c:66 msgid "Save Profile" msgstr "" #: ../src/callbacks.c:1914 ../src/menubar.c:65 msgid "Load Profile" msgstr "" #: ../src/create_video.c:1016 ../src/guvcview.c:700 msgid "Cap. Video" msgstr "" #: ../src/guvcview.c:279 msgid "Guvcview Video Capture" msgstr "" #: ../src/guvcview.c:291 msgid "GUVCViewer Controls" msgstr "GUVCViewer コントロール" #. can't open device #: ../src/guvcview.c:336 msgid "" "Guvcview error:\n" "\n" "Unable to open device" msgstr "" "Guvcview エラー:\n" "\n" "デãƒã‚¤ã‚¹ã‚’オープンã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“" #: ../src/guvcview.c:337 msgid "" "Please make sure the camera is connected\n" "and that the correct driver is installed." msgstr "" #. uvc extension controls OK, give warning and shutdown (called with --add_ctrls) #: ../src/guvcview.c:342 msgid "" "Guvcview:\n" "\n" "UVC Extension controls" msgstr "" #: ../src/guvcview.c:343 msgid "Extension controls were added to the UVC driver" msgstr "" #. uvc extension controls error - EACCES (needs root user) #: ../src/guvcview.c:350 msgid "" "Guvcview error:\n" "\n" "UVC Extension controls" msgstr "" #: ../src/guvcview.c:351 msgid "" "An error occurred while adding extension\n" "controls to the UVC driver\n" "Make sure you run guvcview as root (or sudo)." msgstr "" #: ../src/guvcview.c:377 ../src/guvcview.c:455 msgid "" "Guvcview error:\n" "\n" "Can't set a valid video stream for guvcview" msgstr "" #: ../src/guvcview.c:378 ../src/guvcview.c:456 msgid "" "Make sure your device driver is v4l2 compliant\n" "and that it is properly installed." msgstr "" #: ../src/guvcview.c:400 ../src/guvcview.c:422 msgid "" "Guvcview error:\n" "\n" "Unable to start with minimum setup" msgstr "" "Guvcview エラー:\n" "\n" "最å°é™ã®ã‚»ãƒƒãƒˆã‚¢ãƒƒãƒ—ã‹ã‚‰å§‹ã‚ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“" #: ../src/guvcview.c:401 ../src/guvcview.c:423 msgid "Please reconnect your camera." msgstr "ã‚«ãƒ¡ãƒ©ã‚’å†æŽ¥ç¶šã—ã¦ãã ã•ã„。" #: ../src/guvcview.c:430 msgid "" "Guvcview error:\n" "\n" "Couldn't query device capabilities" msgstr "" #: ../src/guvcview.c:431 msgid "Make sure the device driver supports v4l2." msgstr "" #: ../src/guvcview.c:435 msgid "" "Guvcview error:\n" "\n" "Read method error" msgstr "" #: ../src/guvcview.c:436 msgid "Please try mmap instead (--capture_method=1)." msgstr "" #: ../src/guvcview.c:444 msgid "" "Guvcview error:\n" "\n" "Unable to allocate Buffers" msgstr "" "Guvcview エラー:\n" "\n" "ãƒãƒƒãƒ•ァを確ä¿ã§ãã¾ã›ã‚“" #: ../src/guvcview.c:445 msgid "Please try restarting your system." msgstr "システムをå†èµ·å‹•ã—ã¦ã¿ã¦ãã ã•ã„。" #: ../src/guvcview.c:490 msgid "Image Controls" msgstr "イメージコントロール" #. image auto capture #: ../src/guvcview.c:533 msgid "Stop Auto (I)" msgstr "" #: ../src/guvcview.c:644 msgid "" "Guvcview error:\n" "\n" "Unable to create Video Thread" msgstr "" "Guvcview エラー:\n" "\n" "ビデオスレッドを作æˆã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“" #: ../src/guvcview.c:645 msgid "Please report it to http://developer.berlios.de/bugs/?group_id=8179" msgstr "http://developer.berlios.de/bugs/?group_id=8179 ã«ãƒ¬ãƒãƒ¼ãƒˆã—ã¦ãã ã•ã„。" #: ../src/img_controls.c:121 msgid "Auto Focus (continuous)" msgstr "オートフォーカス(連続)" #: ../src/img_controls.c:122 msgid "set Focus" msgstr "フォーカスを設定ã™ã‚‹" #: ../src/image_format.c:35 msgid "Jpeg (jpg)" msgstr "" #: ../src/image_format.c:41 msgid "Bitmap (Bmp)" msgstr "" #: ../src/image_format.c:47 msgid "Portable Network Graphics (Png)" msgstr "" #: ../src/image_format.c:53 msgid "Raw Image (raw)" msgstr "" #. controls menu #: ../src/menubar.c:64 msgid "Settings" msgstr "" #: ../src/menubar.c:67 msgid "Hardware Defaults" msgstr "" #: ../src/menubar.c:75 msgid "Camera Button" msgstr "" #: ../src/menubar.c:79 msgid "Capture Image" msgstr "" #: ../src/menubar.c:84 msgid "Capture Video" msgstr "" #. video menu #: ../src/menubar.c:144 ../src/video_tab.c:87 msgid "Video" msgstr "" #: ../src/menubar.c:145 ../src/menubar.c:231 msgid "File" msgstr "" #: ../src/menubar.c:146 ../src/menubar.c:232 msgid "Increment Filename" msgstr "" #: ../src/menubar.c:164 msgid "Video Codec" msgstr "" #: ../src/menubar.c:187 msgid "Video Codec Properties" msgstr "" #: ../src/menubar.c:194 msgid "Audio Codec" msgstr "" #: ../src/menubar.c:215 msgid "Audio Codec Properties" msgstr "" #. photo menu #: ../src/menubar.c:230 msgid "Photo" msgstr "" #: ../src/options.c:752 msgid "Prints version" msgstr "ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’表示ã™ã‚‹" #: ../src/options.c:753 msgid "Displays debug information" msgstr "デãƒãƒƒã‚°æƒ…報を表示ã™ã‚‹" #: ../src/options.c:754 msgid "Video Device to use [default: /dev/video0]" msgstr "使用ã™ã‚‹ãƒ“デオデãƒã‚¤ã‚¹ [デフォルト: /dev/video0]" #: ../src/options.c:755 msgid "Exit after adding UVC extension controls (needs root/sudo)" msgstr "" #: ../src/options.c:756 msgid "Don't stream video (image controls only)" msgstr "" #: ../src/options.c:757 msgid "Don't display a GUI" msgstr "" #: ../src/options.c:758 msgid "Capture method (1-mmap (default) 2-read)" msgstr "" #: ../src/options.c:759 msgid "Configuration file" msgstr "設定ファイル" #: ../src/options.c:760 msgid "Hardware accelaration (enable(1) | disable(0))" msgstr "ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ã‚¢ã‚¯ã‚»ãƒ©ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ (有効(1) | 無効(0))" #: ../src/options.c:761 msgid "" "Pixel " "format(mjpg|jpeg|yuyv|yvyu|uyvy|yyuv|yu12|yv12|nv12|nv21|nv16|nv61|y41p|grey|" "y10b|y16 |s501|s505|s508|gbrg|grbg|ba81|rggb|bgr3|rgb3)" msgstr "" #: ../src/options.c:762 msgid "Frame size, default: 640x480" msgstr "フレームサイズã€ãƒ‡ãƒ•ォルト: 640x480" #: ../src/options.c:763 msgid "Image File name" msgstr "ç”»åƒãƒ•ァイルå" #: ../src/options.c:764 msgid "Image capture interval in seconds" msgstr "ç§’å˜ä½ã®ç”»åƒã‚­ãƒ£ãƒ—ãƒãƒ£é–“éš”" #: ../src/options.c:765 msgid "Number of Pictures to capture" msgstr "キャプãƒãƒ£ã™ã‚‹ç”»åƒæ•°" #: ../src/options.c:766 msgid "Video File name (capture from start)" msgstr "" #: ../src/options.c:767 msgid "Video capture time (in seconds)" msgstr "" #: ../src/options.c:768 msgid "Exits guvcview after closing video" msgstr "" #: ../src/options.c:769 msgid "Number of initial frames to skip" msgstr "" #: ../src/options.c:770 msgid "Show FPS value (enable(1) | disable (0))" msgstr "FPS 値ã®è¡¨ç¤º (有効(1) | 無効 (0))" #: ../src/options.c:771 msgid "Load Profile at start" msgstr "開始時ã«ãƒ—ロファイルを読ã¿è¾¼ã‚€" #: ../src/options.c:777 msgid "- local options" msgstr "- ローカルオプション" #. gdk_threads_enter(); #: ../src/timers.c:119 msgid "Cap. Image" msgstr "キャプãƒãƒ£.ç”»åƒ" #: ../src/timers.c:217 msgid "Guvcview Warning:" msgstr "" #: ../src/timers.c:217 msgid "Not enough free space left on disk" msgstr "" #: ../src/v4l2_controls.c:711 msgid "Left" msgstr "å·¦" #: ../src/v4l2_controls.c:712 msgid "Right" msgstr "å³" #: ../src/v4l2_controls.c:716 msgid "Down" msgstr "下" #: ../src/v4l2_controls.c:717 msgid "Up" msgstr "上" #: ../src/v4l2_controls.c:762 msgid "Off" msgstr "" #: ../src/v4l2_controls.c:762 msgid "On" msgstr "" #: ../src/v4l2_controls.c:762 msgid "Blinking" msgstr "" #: ../src/v4l2_controls.c:762 msgid "Auto" msgstr "" #. turn it into a menu control #: ../src/v4l2_controls.c:813 msgid "8 bit" msgstr "" #: ../src/v4l2_controls.c:813 msgid "12 bit" msgstr "" #: ../src/v4l2_dyna_ctrls.c:96 msgid "Pan (relative)" msgstr "パン (相対)" #: ../src/v4l2_dyna_ctrls.c:109 msgid "Tilt (relative)" msgstr "ãƒãƒ«ãƒˆ (相対)" #: ../src/v4l2_dyna_ctrls.c:122 msgid "Pan Reset" msgstr "パン リセット" #: ../src/v4l2_dyna_ctrls.c:135 msgid "Tilt Reset" msgstr "ãƒãƒ«ãƒˆ リセット" #: ../src/v4l2_dyna_ctrls.c:148 msgid "Focus (absolute)" msgstr "フォーカス (完全ãª)" #: ../src/v4l2_dyna_ctrls.c:161 msgid "LED1 Mode" msgstr "LED1 モード" #: ../src/v4l2_dyna_ctrls.c:174 msgid "LED1 Frequency" msgstr "LED1 回数" #: ../src/v4l2_dyna_ctrls.c:187 msgid "Disable video processing" msgstr "ãƒ“ãƒ‡ã‚ªå‡¦ç† ã‚’ç„¡åŠ¹ã«ã™ã‚‹" #: ../src/v4l2_dyna_ctrls.c:200 msgid "Raw bits per pixel" msgstr "1画素ã‚ãŸã‚Šã®ç”Ÿã®ãƒ“ット" #. needed only for language files (not used) #. V4L2 control strings #: ../src/v4l2uvc.c:56 msgid "User Controls" msgstr "" #: ../src/v4l2uvc.c:57 msgid "Brightness" msgstr "è¼åº¦" #: ../src/v4l2uvc.c:58 msgid "Contrast" msgstr "コントラスト" #: ../src/v4l2uvc.c:59 msgid "Hue" msgstr "色相" #: ../src/v4l2uvc.c:60 msgid "Saturation" msgstr "彩度" #: ../src/v4l2uvc.c:61 msgid "Sharpness" msgstr "鮮明度" #: ../src/v4l2uvc.c:62 msgid "Gamma" msgstr "ガンマ" #: ../src/v4l2uvc.c:63 msgid "Backlight Compensation" msgstr "ãƒãƒƒã‚¯ãƒ©ã‚¤ãƒˆè£œæ­£" #: ../src/v4l2uvc.c:64 msgid "Power Line Frequency" msgstr "é›»æºãƒ©ã‚¤ãƒ³å‘¨æ³¢æ•°" #: ../src/v4l2uvc.c:65 msgid "Hue, Automatic" msgstr "" #: ../src/v4l2uvc.c:66 msgid "Focus, Auto" msgstr "フォーカス,自動" #: ../src/v4l2uvc.c:67 msgid "Manual Mode" msgstr "手動モード" #: ../src/v4l2uvc.c:68 msgid "Auto Mode" msgstr "自動モード" #: ../src/v4l2uvc.c:69 msgid "Shutter Priority Mode" msgstr "シャッター優先モード" #: ../src/v4l2uvc.c:70 msgid "Aperture Priority Mode" msgstr "絞り優先モード" #: ../src/v4l2uvc.c:71 msgid "Black Level" msgstr "" #: ../src/v4l2uvc.c:72 msgid "White Balance, Automatic" msgstr "" #: ../src/v4l2uvc.c:73 msgid "Do White Balance" msgstr "" #: ../src/v4l2uvc.c:74 msgid "Red Balance" msgstr "" #: ../src/v4l2uvc.c:75 msgid "Blue Balance" msgstr "" #: ../src/v4l2uvc.c:76 msgid "Exposure" msgstr "" #: ../src/v4l2uvc.c:77 msgid "Gain, Automatic" msgstr "" #: ../src/v4l2uvc.c:78 msgid "Gain" msgstr "ゲイン" #: ../src/v4l2uvc.c:79 msgid "Horizontal Flip" msgstr "" #: ../src/v4l2uvc.c:80 msgid "Vertical Flip" msgstr "" #: ../src/v4l2uvc.c:81 msgid "Horizontal Center" msgstr "" #: ../src/v4l2uvc.c:82 msgid "Vertical Center" msgstr "" #: ../src/v4l2uvc.c:83 msgid "Chroma AGC" msgstr "" #: ../src/v4l2uvc.c:84 msgid "Color Killer" msgstr "" #: ../src/v4l2uvc.c:85 msgid "Color Effects" msgstr "" #. CAMERA CLASS control strings #: ../src/v4l2uvc.c:88 msgid "Camera Controls" msgstr "" #: ../src/v4l2uvc.c:89 msgid "Auto Exposure" msgstr "" #: ../src/v4l2uvc.c:90 msgid "Exposure Time, Absolute" msgstr "" #: ../src/v4l2uvc.c:91 msgid "Exposure, Dynamic Framerate" msgstr "" #: ../src/v4l2uvc.c:92 msgid "Pan, Relative" msgstr "" #: ../src/v4l2uvc.c:93 msgid "Tilt, Relative" msgstr "" #: ../src/v4l2uvc.c:94 msgid "Pan, Reset" msgstr "" #: ../src/v4l2uvc.c:95 msgid "Tilt, Reset" msgstr "" #: ../src/v4l2uvc.c:96 msgid "Pan, Absolute" msgstr "" #: ../src/v4l2uvc.c:98 msgid "Focus, Absolute" msgstr "" #: ../src/v4l2uvc.c:99 msgid "Focus, Relative" msgstr "" #: ../src/v4l2uvc.c:100 msgid "Focus, Automatic" msgstr "" #: ../src/v4l2uvc.c:101 msgid "Zoom, Absolute" msgstr "" #: ../src/v4l2uvc.c:102 msgid "Zoom, Relative" msgstr "" #: ../src/v4l2uvc.c:103 msgid "Zoom, Continuous" msgstr "" #: ../src/v4l2uvc.c:104 msgid "Privacy" msgstr "" #. UVC specific control strings #: ../src/v4l2uvc.c:107 msgid "Exposure, Auto" msgstr "露出ã€è‡ªå‹•" #: ../src/v4l2uvc.c:108 msgid "Exposure, Auto Priority" msgstr "露出ã€è‡ªå‹•優先" #: ../src/v4l2uvc.c:109 msgid "Exposure (Absolute)" msgstr "Exposure (完全ãª)" #: ../src/v4l2uvc.c:110 msgid "White Balance Temperature, Auto" msgstr "ホワイトãƒãƒ©ãƒ³ã‚¹æ¸©åº¦ã€è‡ªå‹•" #: ../src/v4l2uvc.c:111 msgid "White Balance Temperature" msgstr "ホワイトãƒãƒ©ãƒ³ã‚¹æ¸©åº¦" #: ../src/v4l2uvc.c:112 msgid "White Balance Component, Auto" msgstr "ホワイトãƒãƒ©ãƒ³ã‚¹æˆåˆ†ã€è‡ªå‹•" #: ../src/v4l2uvc.c:113 msgid "White Balance Blue Component" msgstr "ホワイトãƒãƒ©ãƒ³ã‚¹é’æˆåˆ†" #: ../src/v4l2uvc.c:114 msgid "White Balance Red Component" msgstr "ホワイトãƒãƒ©ãƒ³ã‚¹èµ¤æˆåˆ†" #. libwebcam specific control strings #: ../src/v4l2uvc.c:117 msgid "Focus" msgstr "" #: ../src/v4l2uvc.c:118 msgid "Focus (Absolute)" msgstr "" #: ../src/vcodecs.c:63 msgid "MJPG - compressed" msgstr "MJPG - 圧縮" #: ../src/vcodecs.c:99 msgid "YUY2 - uncomp YUV" msgstr "YUY2 - éžåœ§ç¸® YUV" #: ../src/vcodecs.c:135 msgid "RGB - uncomp BMP" msgstr "RGB - éžåœ§ç¸® BMP" #: ../src/vcodecs.c:171 msgid "MPEG video 1" msgstr "" #: ../src/vcodecs.c:207 msgid "FLV1 - flash video 1" msgstr "" #: ../src/vcodecs.c:243 msgid "WMV1 - win. med. video 7" msgstr "" #: ../src/vcodecs.c:279 msgid "MPG2 - MPG2 format" msgstr "" #: ../src/vcodecs.c:315 msgid "MS MP4 V3" msgstr "" #: ../src/vcodecs.c:351 msgid "MPEG4-ASP" msgstr "" #: ../src/vcodecs.c:387 msgid "MPEG4-AVC (H264)" msgstr "" #: ../src/vcodecs.c:427 msgid "VP8 (VP8)" msgstr "" #: ../src/vcodecs.c:463 msgid "Theora (ogg theora)" msgstr "" #: ../src/video_format.c:43 msgid "AVI - avi format" msgstr "" #: ../src/video_format.c:52 msgid "MKV - Matroska format" msgstr "" #: ../src/video_format.c:61 msgid "WEBM - format" msgstr "" #: ../src/video_tab.c:208 msgid "Frame Rate:" msgstr "フレームレート:" #: ../src/video_tab.c:215 msgid " Show" msgstr " 表示" #: ../src/video_tab.c:237 msgid "Resolution:" msgstr "è§£åƒåº¦:" #: ../src/video_tab.c:263 msgid "Camera Output:" msgstr "カメラ出力:" #: ../src/video_tab.c:285 msgid "Apply" msgstr "" #: ../src/video_tab.c:292 msgid "Quality:" msgstr "" #: ../src/video_tab.c:302 msgid "---- Video Filters ----" msgstr "---- ビデオフィルタ ----" #. Mirror #: ../src/video_tab.c:321 msgid " Mirror" msgstr " é¡" #. Upturn #: ../src/video_tab.c:332 msgid " Invert" msgstr " å転" #. Negate #: ../src/video_tab.c:343 msgid " Negative" msgstr " ãƒã‚¬" #. Mono #: ../src/video_tab.c:354 msgid " Mono" msgstr " モノクロ" #. Pieces #: ../src/video_tab.c:366 msgid " Pieces" msgstr " 断片" #. Particles #: ../src/video_tab.c:378 msgid " Particles" msgstr "" guvcview-src-1.7.1/po/en_AU.po0000664000175000017500000005262512173235416015153 0ustar paulopaulo# English (Australia) translation for guvcview # Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 # This file is distributed under the same license as the guvcview package. # FIRST AUTHOR , 2011. # msgid "" msgstr "" "Project-Id-Version: guvcview\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-07-16 12:53+0000\n" "PO-Revision-Date: 2013-06-18 07:11+0000\n" "Last-Translator: Jackson Doak \n" "Language-Team: English (Australia) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2013-07-22 13:32+0000\n" "X-Generator: Launchpad (build 16696)\n" #: ../data/guvcview.desktop.in.in.h:1 msgid "guvcview" msgstr "guvcview" #: ../data/guvcview.desktop.in.in.h:2 msgid "GTK UVC video viewer" msgstr "GTK UVC video viewer" #: ../data/guvcview.desktop.in.in.h:3 msgid "A video viewer and capturer for the linux uvc driver" msgstr "A video viewer and capturer for the linux uvc driver" #: ../src/acodecs.c:59 msgid "PCM - uncompressed (16 bit)" msgstr "PCM - uncompressed (16 bit)" #: ../src/acodecs.c:76 msgid "MPEG2 - (lavc)" msgstr "MPEG2 - (lavc)" #: ../src/acodecs.c:93 msgid "MP3 - (lavc)" msgstr "MP3 - (lavc)" #: ../src/acodecs.c:110 msgid "Dolby AC3 - (lavc)" msgstr "Dolby AC3 - (lavc)" #: ../src/acodecs.c:127 msgid "ACC Low - (faac)" msgstr "ACC Low - (faac)" #: ../src/acodecs.c:144 msgid "Vorbis" msgstr "Vorbis" #: ../src/audio_tab.c:80 msgid "Audio" msgstr "Audio" #: ../src/audio_tab.c:98 msgid " Sound" msgstr " Sound" #. VU meter on the image (OSD) #: ../src/audio_tab.c:109 msgid " Show VU meter" msgstr " Show VU meter" #: ../src/audio_tab.c:121 msgid "Audio API:" msgstr "Audio API:" #: ../src/audio_tab.c:132 msgid "PORTAUDIO" msgstr "PORTAUDIO" #: ../src/audio_tab.c:133 msgid "PULSEAUDIO" msgstr "PULSEAUDIO" #: ../src/audio_tab.c:149 ../src/audio_tab.c:172 msgid "Input Device:" msgstr "Input Device:" #: ../src/audio_tab.c:182 ../src/audio_tab.c:214 msgid "Dev. Default" msgstr "Dev. Default" #: ../src/audio_tab.c:204 msgid "Sample Rate:" msgstr "Sample Rate:" #: ../src/audio_tab.c:215 msgid "1 - mono" msgstr "1 - mono" #: ../src/audio_tab.c:216 msgid "2 - stereo" msgstr "2 - stereo" #: ../src/audio_tab.c:251 msgid "Channels:" msgstr "Channels:" #: ../src/audio_tab.c:302 msgid "---- Audio Effects ----" msgstr "---- Audio Effects ----" #. Echo #: ../src/audio_tab.c:321 msgid " Echo" msgstr " Echo" #. FUZZ #: ../src/audio_tab.c:332 msgid " Fuzz" msgstr " Fuzz" #. Reverb #: ../src/audio_tab.c:344 msgid " Reverb" msgstr " Reverb" #. WahWah #: ../src/audio_tab.c:356 msgid " WahWah" msgstr " WahWah" #. Ducky #: ../src/audio_tab.c:368 msgid " Ducky" msgstr " Ducky" #: ../src/callbacks.c:108 msgid "Error" msgstr "Error" #: ../src/callbacks.c:132 msgid "" "\n" "You have more than one video device installed.\n" "Do you want to try another one ?\n" msgstr "" "\n" "You have more than one video device installed.\n" "Do you want to try another one?\n" #. Devices #: ../src/callbacks.c:139 ../src/video_tab.c:103 msgid "Device:" msgstr "Device:" #: ../src/callbacks.c:271 msgid "Save File" msgstr "Save File" #: ../src/callbacks.c:283 msgid "File Format:" msgstr "File Format:" #: ../src/callbacks.c:454 msgid "codec values" msgstr "codec values" #: ../src/callbacks.c:465 msgid "" " encoder fps: \n" " (0 - use fps combobox value)" msgstr "" " encoder fps: \n" " (0 - use fps combobox value)" #: ../src/callbacks.c:478 msgid " monotonic pts" msgstr " monotonic pts" #. bit rate #: ../src/callbacks.c:485 ../src/callbacks.c:808 msgid "bit rate: " msgstr "bit rate: " #: ../src/callbacks.c:498 msgid "qmax: " msgstr "qmax: " #: ../src/callbacks.c:511 msgid "qmin: " msgstr "qmin: " #: ../src/callbacks.c:524 msgid "max. qdiff: " msgstr "max. qdiff: " #: ../src/callbacks.c:537 msgid "dia size: " msgstr "dia size: " #: ../src/callbacks.c:550 msgid "pre dia size: " msgstr "pre dia size: " #: ../src/callbacks.c:563 msgid "pre me: " msgstr "pre me: " #: ../src/callbacks.c:576 msgid "pre cmp: " msgstr "pre cmp: " #: ../src/callbacks.c:589 msgid "cmp: " msgstr "cmp: " #: ../src/callbacks.c:602 msgid "sub cmp: " msgstr "sub cmp: " #: ../src/callbacks.c:615 msgid "last predictor count: " msgstr "last predictor count: " #: ../src/callbacks.c:628 msgid "gop size: " msgstr "gop size: " #: ../src/callbacks.c:641 msgid "qcompress: " msgstr "qcompress: " #: ../src/callbacks.c:654 msgid "qblur: " msgstr "qblur: " #: ../src/callbacks.c:667 msgid "subq: " msgstr "subq: " #: ../src/callbacks.c:680 msgid "framerefs: " msgstr "framerefs: " #: ../src/callbacks.c:693 msgid "me method: " msgstr "me method: " #: ../src/callbacks.c:706 msgid "mb decision: " msgstr "mb decision: " #: ../src/callbacks.c:719 msgid "max B frames: " msgstr "max B frames: " #: ../src/callbacks.c:732 msgid "num threads: " msgstr "num threads: " #: ../src/callbacks.c:795 msgid "audio codec values" msgstr "audio codec values" #. sample format #: ../src/callbacks.c:822 msgid "sample format: " msgstr "sample format: " #: ../src/callbacks.c:1250 msgid "start new" msgstr "start new" #: ../src/callbacks.c:1253 msgid "restart" msgstr "restart" #: ../src/callbacks.c:1255 msgid "new" msgstr "new" #: ../src/callbacks.c:1257 msgid "cancel" msgstr "cancel" #: ../src/callbacks.c:1262 msgid "" "launch new process or restart?.\n" "\n" msgstr "" "launch new process or restart?.\n" "\n" #: ../src/callbacks.c:1716 ../src/guvcview.c:537 msgid "Cap. Image (I)" msgstr "Cap. Image (I)" #. disable image controls #: ../src/callbacks.c:1727 ../src/guvcview.c:658 ../src/timers.c:101 msgid "capturing photo to" msgstr "capturing photo to" #: ../src/callbacks.c:1786 ../src/guvcview.c:547 msgid "Cap. Video (V)" msgstr "Cap. Video (V)" #: ../src/callbacks.c:1812 ../src/guvcview.c:708 msgid "capturing video to" msgstr "capturing video to" #. vid capture enabled from start #: ../src/callbacks.c:1845 ../src/guvcview.c:542 msgid "Stop Video (V)" msgstr "Stop Video (V)" #: ../src/callbacks.c:1901 ../src/menubar.c:66 msgid "Save Profile" msgstr "Save Profile" #: ../src/callbacks.c:1914 ../src/menubar.c:65 msgid "Load Profile" msgstr "Load Profile" #: ../src/create_video.c:1016 ../src/guvcview.c:700 msgid "Cap. Video" msgstr "Cap. Video" #: ../src/guvcview.c:279 msgid "Guvcview Video Capture" msgstr "Guvcview Video Capture" #: ../src/guvcview.c:291 msgid "GUVCViewer Controls" msgstr "GUVCViewer Controls" #. can't open device #: ../src/guvcview.c:336 msgid "" "Guvcview error:\n" "\n" "Unable to open device" msgstr "" "Guvcview error:\n" "\n" "Unable to open device" #: ../src/guvcview.c:337 msgid "" "Please make sure the camera is connected\n" "and that the correct driver is installed." msgstr "" "Please make sure the camera is connected\n" "and that the correct driver is installed." #. uvc extension controls OK, give warning and shutdown (called with --add_ctrls) #: ../src/guvcview.c:342 msgid "" "Guvcview:\n" "\n" "UVC Extension controls" msgstr "" "Guvcview:\n" "\n" "UVC Extension controls" #: ../src/guvcview.c:343 msgid "Extension controls were added to the UVC driver" msgstr "Extension controls were added to the UVC driver" #. uvc extension controls error - EACCES (needs root user) #: ../src/guvcview.c:350 msgid "" "Guvcview error:\n" "\n" "UVC Extension controls" msgstr "" "Guvcview error:\n" "\n" "UVC Extension controls" #: ../src/guvcview.c:351 msgid "" "An error occurred while adding extension\n" "controls to the UVC driver\n" "Make sure you run guvcview as root (or sudo)." msgstr "" "An error occurred while adding extension\n" "controls to the UVC driver\n" "Make sure you run guvcview as root (or sudo)." #: ../src/guvcview.c:377 ../src/guvcview.c:455 msgid "" "Guvcview error:\n" "\n" "Can't set a valid video stream for guvcview" msgstr "" "Guvcview error:\n" "\n" "Can't set a valid video stream for guvcview" #: ../src/guvcview.c:378 ../src/guvcview.c:456 msgid "" "Make sure your device driver is v4l2 compliant\n" "and that it is properly installed." msgstr "" "Make sure your device driver is v4l2 compliant\n" "and that it is properly installed." #: ../src/guvcview.c:400 ../src/guvcview.c:422 msgid "" "Guvcview error:\n" "\n" "Unable to start with minimum setup" msgstr "" "Guvcview error:\n" "\n" "Unable to start with minimum setup" #: ../src/guvcview.c:401 ../src/guvcview.c:423 msgid "Please reconnect your camera." msgstr "Please reconnect your camera." #: ../src/guvcview.c:430 msgid "" "Guvcview error:\n" "\n" "Couldn't query device capabilities" msgstr "" "Guvcview error:\n" "\n" "Couldn't query device capabilities" #: ../src/guvcview.c:431 msgid "Make sure the device driver supports v4l2." msgstr "Make sure the device driver supports v4l2." #: ../src/guvcview.c:435 msgid "" "Guvcview error:\n" "\n" "Read method error" msgstr "" "Guvcview error:\n" "\n" "Read method error" #: ../src/guvcview.c:436 msgid "Please try mmap instead (--capture_method=1)." msgstr "Please try mmap instead (--capture_method=1)." #: ../src/guvcview.c:444 msgid "" "Guvcview error:\n" "\n" "Unable to allocate Buffers" msgstr "" "Guvcview error:\n" "\n" "Unable to allocate Buffers" #: ../src/guvcview.c:445 msgid "Please try restarting your system." msgstr "Please try restarting your system." #: ../src/guvcview.c:490 msgid "Image Controls" msgstr "Image Controls" #. image auto capture #: ../src/guvcview.c:533 msgid "Stop Auto (I)" msgstr "Stop Auto (I)" #: ../src/guvcview.c:644 msgid "" "Guvcview error:\n" "\n" "Unable to create Video Thread" msgstr "" "Guvcview error:\n" "\n" "Unable to create Video Thread" #: ../src/guvcview.c:645 msgid "Please report it to http://developer.berlios.de/bugs/?group_id=8179" msgstr "Please report it to http://developer.berlios.de/bugs/?group_id=8179" #: ../src/img_controls.c:121 msgid "Auto Focus (continuous)" msgstr "Auto Focus (continuous)" #: ../src/img_controls.c:122 msgid "set Focus" msgstr "set Focus" #: ../src/image_format.c:35 msgid "Jpeg (jpg)" msgstr "Jpeg (jpg)" #: ../src/image_format.c:41 msgid "Bitmap (Bmp)" msgstr "Bitmap (Bmp)" #: ../src/image_format.c:47 msgid "Portable Network Graphics (Png)" msgstr "Portable Network Graphics (Png)" #: ../src/image_format.c:53 msgid "Raw Image (raw)" msgstr "Raw Image (raw)" #. controls menu #: ../src/menubar.c:64 msgid "Settings" msgstr "Settings" #: ../src/menubar.c:67 msgid "Hardware Defaults" msgstr "Hardware Defaults" #: ../src/menubar.c:75 msgid "Camera Button" msgstr "Camera Button" #: ../src/menubar.c:79 msgid "Capture Image" msgstr "Capture Image" #: ../src/menubar.c:84 msgid "Capture Video" msgstr "Capture Video" #. video menu #: ../src/menubar.c:144 ../src/video_tab.c:87 msgid "Video" msgstr "Video" #: ../src/menubar.c:145 ../src/menubar.c:231 msgid "File" msgstr "File" #: ../src/menubar.c:146 ../src/menubar.c:232 msgid "Increment Filename" msgstr "Increment Filename" #: ../src/menubar.c:164 msgid "Video Codec" msgstr "Video Codec" #: ../src/menubar.c:187 msgid "Video Codec Properties" msgstr "Video Codec Properties" #: ../src/menubar.c:194 msgid "Audio Codec" msgstr "Audio Codec" #: ../src/menubar.c:215 msgid "Audio Codec Properties" msgstr "Audio Codec Properties" #. photo menu #: ../src/menubar.c:230 msgid "Photo" msgstr "Photo" #: ../src/options.c:752 msgid "Prints version" msgstr "Prints version" #: ../src/options.c:753 msgid "Displays debug information" msgstr "Displays debug information" #: ../src/options.c:754 msgid "Video Device to use [default: /dev/video0]" msgstr "Video Device to use [default: /dev/video0]" #: ../src/options.c:755 msgid "Exit after adding UVC extension controls (needs root/sudo)" msgstr "Exit after adding UVC extension controls (needs root/sudo)" #: ../src/options.c:756 msgid "Don't stream video (image controls only)" msgstr "Don't stream video (image controls only)" #: ../src/options.c:757 msgid "Don't display a GUI" msgstr "Don't display a GUI" #: ../src/options.c:758 msgid "Capture method (1-mmap (default) 2-read)" msgstr "Capture method (1-mmap (default) 2-read)" #: ../src/options.c:759 msgid "Configuration file" msgstr "Configuration file" #: ../src/options.c:760 msgid "Hardware accelaration (enable(1) | disable(0))" msgstr "Hardware accelaration (enable(1) | disable(0))" #: ../src/options.c:761 msgid "" "Pixel " "format(mjpg|jpeg|yuyv|yvyu|uyvy|yyuv|yu12|yv12|nv12|nv21|nv16|nv61|y41p|grey|" "y10b|y16 |s501|s505|s508|gbrg|grbg|ba81|rggb|bgr3|rgb3)" msgstr "" "Pixel " "format(mjpg|jpeg|yuyv|yvyu|uyvy|yyuv|yu12|yv12|nv12|nv21|nv16|nv61|y41p|grey|" "y10b|y16 |s501|s505|s508|gbrg|grbg|ba81|rggb|bgr3|rgb3)" #: ../src/options.c:762 msgid "Frame size, default: 640x480" msgstr "Frame size, default: 640x480" #: ../src/options.c:763 msgid "Image File name" msgstr "Image File name" #: ../src/options.c:764 msgid "Image capture interval in seconds" msgstr "Image capture interval in seconds" #: ../src/options.c:765 msgid "Number of Pictures to capture" msgstr "Number of Pictures to capture" #: ../src/options.c:766 msgid "Video File name (capture from start)" msgstr "Video File name (capture from start)" #: ../src/options.c:767 msgid "Video capture time (in seconds)" msgstr "Video capture time (in seconds)" #: ../src/options.c:768 msgid "Exits guvcview after closing video" msgstr "Exits guvcview after closing video" #: ../src/options.c:769 msgid "Number of initial frames to skip" msgstr "Number of initial frames to skip" #: ../src/options.c:770 msgid "Show FPS value (enable(1) | disable (0))" msgstr "Show FPS value (enable(1) | disable (0))" #: ../src/options.c:771 msgid "Load Profile at start" msgstr "Load Profile at start" #: ../src/options.c:777 msgid "- local options" msgstr "- local options" #. gdk_threads_enter(); #: ../src/timers.c:119 msgid "Cap. Image" msgstr "Cap. Image" #: ../src/timers.c:217 msgid "Guvcview Warning:" msgstr "Guvcview Warning:" #: ../src/timers.c:217 msgid "Not enough free space left on disk" msgstr "Not enough free space left on disk" #: ../src/v4l2_controls.c:711 msgid "Left" msgstr "Left" #: ../src/v4l2_controls.c:712 msgid "Right" msgstr "Right" #: ../src/v4l2_controls.c:716 msgid "Down" msgstr "Down" #: ../src/v4l2_controls.c:717 msgid "Up" msgstr "Up" #: ../src/v4l2_controls.c:762 msgid "Off" msgstr "Off" #: ../src/v4l2_controls.c:762 msgid "On" msgstr "On" #: ../src/v4l2_controls.c:762 msgid "Blinking" msgstr "Blinking" #: ../src/v4l2_controls.c:762 msgid "Auto" msgstr "Auto" #. turn it into a menu control #: ../src/v4l2_controls.c:813 msgid "8 bit" msgstr "8 bit" #: ../src/v4l2_controls.c:813 msgid "12 bit" msgstr "12 bit" #: ../src/v4l2_dyna_ctrls.c:96 msgid "Pan (relative)" msgstr "Pan (relative)" #: ../src/v4l2_dyna_ctrls.c:109 msgid "Tilt (relative)" msgstr "Tilt (relative)" #: ../src/v4l2_dyna_ctrls.c:122 msgid "Pan Reset" msgstr "Pan Reset" #: ../src/v4l2_dyna_ctrls.c:135 msgid "Tilt Reset" msgstr "Tilt Reset" #: ../src/v4l2_dyna_ctrls.c:148 msgid "Focus (absolute)" msgstr "Focus (absolute)" #: ../src/v4l2_dyna_ctrls.c:161 msgid "LED1 Mode" msgstr "LED1 Mode" #: ../src/v4l2_dyna_ctrls.c:174 msgid "LED1 Frequency" msgstr "LED1 Frequency" #: ../src/v4l2_dyna_ctrls.c:187 msgid "Disable video processing" msgstr "Disable video processing" #: ../src/v4l2_dyna_ctrls.c:200 msgid "Raw bits per pixel" msgstr "Raw bits per pixel" #. needed only for language files (not used) #. V4L2 control strings #: ../src/v4l2uvc.c:56 msgid "User Controls" msgstr "User Controls" #: ../src/v4l2uvc.c:57 msgid "Brightness" msgstr "Brightness" #: ../src/v4l2uvc.c:58 msgid "Contrast" msgstr "Contrast" #: ../src/v4l2uvc.c:59 msgid "Hue" msgstr "Hue" #: ../src/v4l2uvc.c:60 msgid "Saturation" msgstr "Saturation" #: ../src/v4l2uvc.c:61 msgid "Sharpness" msgstr "Sharpness" #: ../src/v4l2uvc.c:62 msgid "Gamma" msgstr "Gamma" #: ../src/v4l2uvc.c:63 msgid "Backlight Compensation" msgstr "Backlight Compensation" #: ../src/v4l2uvc.c:64 msgid "Power Line Frequency" msgstr "Power Line Frequency" #: ../src/v4l2uvc.c:65 msgid "Hue, Automatic" msgstr "Hue, Automatic" #: ../src/v4l2uvc.c:66 msgid "Focus, Auto" msgstr "Focus, Auto" #: ../src/v4l2uvc.c:67 msgid "Manual Mode" msgstr "Manual Mode" #: ../src/v4l2uvc.c:68 msgid "Auto Mode" msgstr "Auto Mode" #: ../src/v4l2uvc.c:69 msgid "Shutter Priority Mode" msgstr "Shutter Priority Mode" #: ../src/v4l2uvc.c:70 msgid "Aperture Priority Mode" msgstr "Aperture Priority Mode" #: ../src/v4l2uvc.c:71 msgid "Black Level" msgstr "Black Level" #: ../src/v4l2uvc.c:72 msgid "White Balance, Automatic" msgstr "White Balance, Automatic" #: ../src/v4l2uvc.c:73 msgid "Do White Balance" msgstr "Do White Balance" #: ../src/v4l2uvc.c:74 msgid "Red Balance" msgstr "Red Balance" #: ../src/v4l2uvc.c:75 msgid "Blue Balance" msgstr "Blue Balance" #: ../src/v4l2uvc.c:76 msgid "Exposure" msgstr "Exposure" #: ../src/v4l2uvc.c:77 msgid "Gain, Automatic" msgstr "Gain, Automatic" #: ../src/v4l2uvc.c:78 msgid "Gain" msgstr "Gain" #: ../src/v4l2uvc.c:79 msgid "Horizontal Flip" msgstr "Horizontal Flip" #: ../src/v4l2uvc.c:80 msgid "Vertical Flip" msgstr "Vertical Flip" #: ../src/v4l2uvc.c:81 msgid "Horizontal Center" msgstr "Horizontal Centre" #: ../src/v4l2uvc.c:82 msgid "Vertical Center" msgstr "Vertical Centre" #: ../src/v4l2uvc.c:83 msgid "Chroma AGC" msgstr "Chroma AGC" #: ../src/v4l2uvc.c:84 msgid "Color Killer" msgstr "Colour Killer" #: ../src/v4l2uvc.c:85 msgid "Color Effects" msgstr "Colour Effects" #. CAMERA CLASS control strings #: ../src/v4l2uvc.c:88 msgid "Camera Controls" msgstr "Camera Controls" #: ../src/v4l2uvc.c:89 msgid "Auto Exposure" msgstr "Auto Exposure" #: ../src/v4l2uvc.c:90 msgid "Exposure Time, Absolute" msgstr "Exposure Time, Absolute" #: ../src/v4l2uvc.c:91 msgid "Exposure, Dynamic Framerate" msgstr "Exposure, Dynamic Framerate" #: ../src/v4l2uvc.c:92 msgid "Pan, Relative" msgstr "Pan, Relative" #: ../src/v4l2uvc.c:93 msgid "Tilt, Relative" msgstr "Tilt, Relative" #: ../src/v4l2uvc.c:94 msgid "Pan, Reset" msgstr "Pan, Reset" #: ../src/v4l2uvc.c:95 msgid "Tilt, Reset" msgstr "Tilt, Reset" #: ../src/v4l2uvc.c:96 msgid "Pan, Absolute" msgstr "Pan, Absolute" #: ../src/v4l2uvc.c:98 msgid "Focus, Absolute" msgstr "Focus, Absolute" #: ../src/v4l2uvc.c:99 msgid "Focus, Relative" msgstr "Focus, Relative" #: ../src/v4l2uvc.c:100 msgid "Focus, Automatic" msgstr "Focus, Automatic" #: ../src/v4l2uvc.c:101 msgid "Zoom, Absolute" msgstr "Zoom, Absolute" #: ../src/v4l2uvc.c:102 msgid "Zoom, Relative" msgstr "Zoom, Relative" #: ../src/v4l2uvc.c:103 msgid "Zoom, Continuous" msgstr "Zoom, Continuous" #: ../src/v4l2uvc.c:104 msgid "Privacy" msgstr "Privacy" #. UVC specific control strings #: ../src/v4l2uvc.c:107 msgid "Exposure, Auto" msgstr "Exposure, Auto" #: ../src/v4l2uvc.c:108 msgid "Exposure, Auto Priority" msgstr "Exposure, Auto Priority" #: ../src/v4l2uvc.c:109 msgid "Exposure (Absolute)" msgstr "Exposure (Absolute)" #: ../src/v4l2uvc.c:110 msgid "White Balance Temperature, Auto" msgstr "White Balance Temperature, Auto" #: ../src/v4l2uvc.c:111 msgid "White Balance Temperature" msgstr "White Balance Temperature" #: ../src/v4l2uvc.c:112 msgid "White Balance Component, Auto" msgstr "White Balance Component, Auto" #: ../src/v4l2uvc.c:113 msgid "White Balance Blue Component" msgstr "White Balance Blue Component" #: ../src/v4l2uvc.c:114 msgid "White Balance Red Component" msgstr "White Balance Red Component" #. libwebcam specific control strings #: ../src/v4l2uvc.c:117 msgid "Focus" msgstr "Focus" #: ../src/v4l2uvc.c:118 msgid "Focus (Absolute)" msgstr "Focus (Absolute)" #: ../src/vcodecs.c:63 msgid "MJPG - compressed" msgstr "MJPG - compressed" #: ../src/vcodecs.c:99 msgid "YUY2 - uncomp YUV" msgstr "YUY2 - uncomp YUV" #: ../src/vcodecs.c:135 msgid "RGB - uncomp BMP" msgstr "RGB - uncomp BMP" #: ../src/vcodecs.c:171 msgid "MPEG video 1" msgstr "MPEG video 1" #: ../src/vcodecs.c:207 msgid "FLV1 - flash video 1" msgstr "FLV1 - flash video 1" #: ../src/vcodecs.c:243 msgid "WMV1 - win. med. video 7" msgstr "WMV1 - win. med. video 7" #: ../src/vcodecs.c:279 msgid "MPG2 - MPG2 format" msgstr "MPG2 - MPG2 format" #: ../src/vcodecs.c:315 msgid "MS MP4 V3" msgstr "MS MP4 V3" #: ../src/vcodecs.c:351 msgid "MPEG4-ASP" msgstr "MPEG4-ASP" #: ../src/vcodecs.c:387 msgid "MPEG4-AVC (H264)" msgstr "MPEG4-AVC (H264)" #: ../src/vcodecs.c:427 msgid "VP8 (VP8)" msgstr "VP8 (VP8)" #: ../src/vcodecs.c:463 msgid "Theora (ogg theora)" msgstr "Theora (ogg theora)" #: ../src/video_format.c:43 msgid "AVI - avi format" msgstr "AVI - avi format" #: ../src/video_format.c:52 msgid "MKV - Matroska format" msgstr "MKV - Matroska format" #: ../src/video_format.c:61 msgid "WEBM - format" msgstr "WEBM - format" #: ../src/video_tab.c:208 msgid "Frame Rate:" msgstr "Frame Rate:" #: ../src/video_tab.c:215 msgid " Show" msgstr " Show" #: ../src/video_tab.c:237 msgid "Resolution:" msgstr "Resolution:" #: ../src/video_tab.c:263 msgid "Camera Output:" msgstr "Camera Output:" #: ../src/video_tab.c:285 msgid "Apply" msgstr "Apply" #: ../src/video_tab.c:292 msgid "Quality:" msgstr "Quality:" #: ../src/video_tab.c:302 msgid "---- Video Filters ----" msgstr "---- Video Filters ----" #. Mirror #: ../src/video_tab.c:321 msgid " Mirror" msgstr " Mirror" #. Upturn #: ../src/video_tab.c:332 msgid " Invert" msgstr " Invert" #. Negate #: ../src/video_tab.c:343 msgid " Negative" msgstr " Negative" #. Mono #: ../src/video_tab.c:354 msgid " Mono" msgstr " Mono" #. Pieces #: ../src/video_tab.c:366 msgid " Pieces" msgstr " Pieces" #. Particles #: ../src/video_tab.c:378 msgid " Particles" msgstr " Particles" guvcview-src-1.7.1/po/en@quot.header0000664000175000017500000000226312173235416016402 0ustar paulopaulo# All this catalog "translates" are quotation characters. # The msgids must be ASCII and therefore cannot contain real quotation # characters, only substitutes like grave accent (0x60), apostrophe (0x27) # and double quote (0x22). These substitutes look strange; see # http://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html # # This catalog translates grave accent (0x60) and apostrophe (0x27) to # left single quotation mark (U+2018) and right single quotation mark (U+2019). # It also translates pairs of apostrophe (0x27) to # left single quotation mark (U+2018) and right single quotation mark (U+2019) # and pairs of quotation mark (0x22) to # left double quotation mark (U+201C) and right double quotation mark (U+201D). # # When output to an UTF-8 terminal, the quotation characters appear perfectly. # When output to an ISO-8859-1 terminal, the single quotation marks are # transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to # grave/acute accent (by libiconv), and the double quotation marks are # transliterated to 0x22. # When output to an ASCII terminal, the single quotation marks are # transliterated to apostrophes, and the double quotation marks are # transliterated to 0x22. # guvcview-src-1.7.1/po/tr.po0000664000175000017500000005417112173235416014607 0ustar paulopaulo# Turkish translation for guvcview # Copyright (c) 2008 Rosetta Contributors and Canonical Ltd 2008 # This file is distributed under the same license as the guvcview package. # FIRST AUTHOR , 2008. # msgid "" msgstr "" "Project-Id-Version: guvcview\n" "Report-Msgid-Bugs-To: pj.assis@gmail.com\n" "POT-Creation-Date: 2013-07-16 12:53+0000\n" "PO-Revision-Date: 2013-04-19 19:50+0000\n" "Last-Translator: Volkan Gezer \n" "Language-Team: Turkish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2013-07-22 13:32+0000\n" "X-Generator: Launchpad (build 16696)\n" "Language: tr\n" #: ../data/guvcview.desktop.in.in.h:1 msgid "guvcview" msgstr "guvcview" #: ../data/guvcview.desktop.in.in.h:2 msgid "GTK UVC video viewer" msgstr "GTK UVC video görüntüleyici" #: ../data/guvcview.desktop.in.in.h:3 msgid "A video viewer and capturer for the linux uvc driver" msgstr "Linux uvc sürücüsü için video görüntüleyici ve yakalayıcı" #: ../src/acodecs.c:59 msgid "PCM - uncompressed (16 bit)" msgstr "PCM - sıkıştırılmamış (16 bit)" #: ../src/acodecs.c:76 msgid "MPEG2 - (lavc)" msgstr "MPEG2 - (lavc)" #: ../src/acodecs.c:93 msgid "MP3 - (lavc)" msgstr "MP3 - (lavc)" #: ../src/acodecs.c:110 msgid "Dolby AC3 - (lavc)" msgstr "Dolby AC3 - (lavc)" #: ../src/acodecs.c:127 msgid "ACC Low - (faac)" msgstr "ACC Low - (faac)" #: ../src/acodecs.c:144 msgid "Vorbis" msgstr "Vorbis" #: ../src/audio_tab.c:80 msgid "Audio" msgstr "Ses" #: ../src/audio_tab.c:98 msgid " Sound" msgstr " Ses" #. VU meter on the image (OSD) #: ../src/audio_tab.c:109 msgid " Show VU meter" msgstr " VU Metreyi Göster" #: ../src/audio_tab.c:121 msgid "Audio API:" msgstr "SES API'yı:" #: ../src/audio_tab.c:132 msgid "PORTAUDIO" msgstr "PORTAUDIO" #: ../src/audio_tab.c:133 msgid "PULSEAUDIO" msgstr "PULSEAUDIO" #: ../src/audio_tab.c:149 ../src/audio_tab.c:172 msgid "Input Device:" msgstr "Girdi Aygıtı:" #: ../src/audio_tab.c:182 ../src/audio_tab.c:214 msgid "Dev. Default" msgstr "Aygıt Vars." #: ../src/audio_tab.c:204 msgid "Sample Rate:" msgstr "Örnekleme Oranı:" #: ../src/audio_tab.c:215 msgid "1 - mono" msgstr "1 - mono" #: ../src/audio_tab.c:216 msgid "2 - stereo" msgstr "2 - stereo" #: ../src/audio_tab.c:251 msgid "Channels:" msgstr "Kanallar:" #: ../src/audio_tab.c:302 msgid "---- Audio Effects ----" msgstr "---- Ses Efektleri ----" #. Echo #: ../src/audio_tab.c:321 msgid " Echo" msgstr " Göster" #. FUZZ #: ../src/audio_tab.c:332 msgid " Fuzz" msgstr " Bulanma" #. Reverb #: ../src/audio_tab.c:344 msgid " Reverb" msgstr " Yankı" #. WahWah #: ../src/audio_tab.c:356 msgid " WahWah" msgstr " WahWah" #. Ducky #: ../src/audio_tab.c:368 msgid " Ducky" msgstr " Ördek" #: ../src/callbacks.c:108 msgid "Error" msgstr "Hata" #: ../src/callbacks.c:132 msgid "" "\n" "You have more than one video device installed.\n" "Do you want to try another one ?\n" msgstr "" "\n" "Kurulu birden fazla video aygıtınız var.\n" "Bir diÄŸerini denemek ister misiniz?\n" #. Devices #: ../src/callbacks.c:139 ../src/video_tab.c:103 msgid "Device:" msgstr "Aygıt:" #: ../src/callbacks.c:271 msgid "Save File" msgstr "Dosyayı Kaydet" #: ../src/callbacks.c:283 msgid "File Format:" msgstr "Dosya Biçimi:" #: ../src/callbacks.c:454 msgid "codec values" msgstr "çözücü deÄŸerleri" #: ../src/callbacks.c:465 msgid "" " encoder fps: \n" " (0 - use fps combobox value)" msgstr "" " kodlayıcı fps: \n" " (0 - fps kutu deÄŸerini kullan)" #: ../src/callbacks.c:478 msgid " monotonic pts" msgstr " tek düze puan" #. bit rate #: ../src/callbacks.c:485 ../src/callbacks.c:808 msgid "bit rate: " msgstr "bıt oranı: " #: ../src/callbacks.c:498 msgid "qmax: " msgstr "qmax: " #: ../src/callbacks.c:511 msgid "qmin: " msgstr "qmin: " #: ../src/callbacks.c:524 msgid "max. qdiff: " msgstr "azami qdiff: " #: ../src/callbacks.c:537 msgid "dia size: " msgstr "dia boyutu: " #: ../src/callbacks.c:550 msgid "pre dia size: " msgstr "ön dia boyutu: " #: ../src/callbacks.c:563 msgid "pre me: " msgstr "ön me: " #: ../src/callbacks.c:576 msgid "pre cmp: " msgstr "ön cmp: " #: ../src/callbacks.c:589 msgid "cmp: " msgstr "cmp: " #: ../src/callbacks.c:602 msgid "sub cmp: " msgstr "alt cmp: " #: ../src/callbacks.c:615 msgid "last predictor count: " msgstr "son öngörücü sayısı: " #: ../src/callbacks.c:628 msgid "gop size: " msgstr "gop boyutu: " #: ../src/callbacks.c:641 msgid "qcompress: " msgstr "qcompress: " #: ../src/callbacks.c:654 msgid "qblur: " msgstr "qblur: " #: ../src/callbacks.c:667 msgid "subq: " msgstr "subq: " #: ../src/callbacks.c:680 msgid "framerefs: " msgstr "framerefs: " #: ../src/callbacks.c:693 msgid "me method: " msgstr "me yöntemi: " #: ../src/callbacks.c:706 msgid "mb decision: " msgstr "mb kararı: " #: ../src/callbacks.c:719 msgid "max B frames: " msgstr "en yüks. B karesi: " #: ../src/callbacks.c:732 msgid "num threads: " msgstr "iÅŸlem sayısı: " #: ../src/callbacks.c:795 msgid "audio codec values" msgstr "ses çözücü deÄŸerleri" #. sample format #: ../src/callbacks.c:822 msgid "sample format: " msgstr "örnek biçimi: " #: ../src/callbacks.c:1250 msgid "start new" msgstr "yeni baÅŸlat" #: ../src/callbacks.c:1253 msgid "restart" msgstr "yeniden baÅŸlat" #: ../src/callbacks.c:1255 msgid "new" msgstr "yeni" #: ../src/callbacks.c:1257 msgid "cancel" msgstr "iptal" #: ../src/callbacks.c:1262 msgid "" "launch new process or restart?.\n" "\n" msgstr "" "yeni süreç baÅŸlat veya yeniden baÅŸlat?\n" "\n" #: ../src/callbacks.c:1716 ../src/guvcview.c:537 msgid "Cap. Image (I)" msgstr "Görüntü Yakala (I)" #. disable image controls #: ../src/callbacks.c:1727 ../src/guvcview.c:658 ../src/timers.c:101 msgid "capturing photo to" msgstr "fotoÄŸraf yakalanıyor" #: ../src/callbacks.c:1786 ../src/guvcview.c:547 msgid "Cap. Video (V)" msgstr "Video Yakala (V)" #: ../src/callbacks.c:1812 ../src/guvcview.c:708 msgid "capturing video to" msgstr "video yakalanıyor" #. vid capture enabled from start #: ../src/callbacks.c:1845 ../src/guvcview.c:542 msgid "Stop Video (V)" msgstr "Videoyu Durdur (V)" #: ../src/callbacks.c:1901 ../src/menubar.c:66 msgid "Save Profile" msgstr "Profili Kaydet" #: ../src/callbacks.c:1914 ../src/menubar.c:65 msgid "Load Profile" msgstr "Profili Yükle" #: ../src/create_video.c:1016 ../src/guvcview.c:700 msgid "Cap. Video" msgstr "Video Yakala" #: ../src/guvcview.c:279 msgid "Guvcview Video Capture" msgstr "Guvcview Video Yakala" #: ../src/guvcview.c:291 msgid "GUVCViewer Controls" msgstr "GUVCViewer Denetimleri" #. can't open device #: ../src/guvcview.c:336 msgid "" "Guvcview error:\n" "\n" "Unable to open device" msgstr "" "Guvcview hatası:\n" "\n" "Aygıt açılamıyor" #: ../src/guvcview.c:337 msgid "" "Please make sure the camera is connected\n" "and that the correct driver is installed." msgstr "" "Kameranızın baÄŸlı ve doÄŸru sürücülerinin\n" "yüklendiÄŸinden emin olun." #. uvc extension controls OK, give warning and shutdown (called with --add_ctrls) #: ../src/guvcview.c:342 msgid "" "Guvcview:\n" "\n" "UVC Extension controls" msgstr "" "Guvcview:\n" "\n" "UVC Uzantı denetimleri" #: ../src/guvcview.c:343 msgid "Extension controls were added to the UVC driver" msgstr "Uzantı denetimleri UVC sürücüsüne eklendi" #. uvc extension controls error - EACCES (needs root user) #: ../src/guvcview.c:350 msgid "" "Guvcview error:\n" "\n" "UVC Extension controls" msgstr "" "Guvcview hatası:\n" "\n" "UVC Uzantı denetimleri" #: ../src/guvcview.c:351 msgid "" "An error occurred while adding extension\n" "controls to the UVC driver\n" "Make sure you run guvcview as root (or sudo)." msgstr "" "UVC sürücüsüne uzantı denetimleri eklenirken\n" "bir hata oluÅŸtu\n" "guvcview'i yönetici (veya sudo) ile çalıştırdığınızdan\n" "emin olun" #: ../src/guvcview.c:377 ../src/guvcview.c:455 msgid "" "Guvcview error:\n" "\n" "Can't set a valid video stream for guvcview" msgstr "" "Guvcview hatası:\n" "\n" "guvcview için geçerli video akışı ayarlanamıyor" #: ../src/guvcview.c:378 ../src/guvcview.c:456 msgid "" "Make sure your device driver is v4l2 compliant\n" "and that it is properly installed." msgstr "" "Aygıt sürücünüzün v4l2 uyumlu olduÄŸundan ve\n" "doÄŸru bir ÅŸekilde yüklendiÄŸinden emin olun." #: ../src/guvcview.c:400 ../src/guvcview.c:422 msgid "" "Guvcview error:\n" "\n" "Unable to start with minimum setup" msgstr "" "Guvcview hatası:\n" "\n" "Asgari ayarlama baÅŸlatılamadı" #: ../src/guvcview.c:401 ../src/guvcview.c:423 msgid "Please reconnect your camera." msgstr "Lütfen kameranı tekrar baÄŸla." #: ../src/guvcview.c:430 msgid "" "Guvcview error:\n" "\n" "Couldn't query device capabilities" msgstr "" "Guvcview hatası:\n" "\n" "Aygıt özellikleri sorgulanamadı" #: ../src/guvcview.c:431 msgid "Make sure the device driver supports v4l2." msgstr "Aygıt sürücünüzün v4l2 desteklediÄŸinden emin olun." #: ../src/guvcview.c:435 msgid "" "Guvcview error:\n" "\n" "Read method error" msgstr "" "Guvcview hatası:\n" "\n" "Okuma yöntemi hatası" #: ../src/guvcview.c:436 msgid "Please try mmap instead (--capture_method=1)." msgstr "mmap deneyin (--capture_method=1)." #: ../src/guvcview.c:444 msgid "" "Guvcview error:\n" "\n" "Unable to allocate Buffers" msgstr "" "Guvcview hatası:\n" "\n" "Tamponlar ayrılamıyor" #: ../src/guvcview.c:445 msgid "Please try restarting your system." msgstr "Lütfen sistemi tekrar baÅŸlatmayı dene." #: ../src/guvcview.c:490 msgid "Image Controls" msgstr "Resim Denetimleri" #. image auto capture #: ../src/guvcview.c:533 msgid "Stop Auto (I)" msgstr "Otomatik Durdur (I)" #: ../src/guvcview.c:644 msgid "" "Guvcview error:\n" "\n" "Unable to create Video Thread" msgstr "" "Guvcview hatası:\n" "\n" "Video İş Parçacığı oluÅŸturulamıyor" #: ../src/guvcview.c:645 msgid "Please report it to http://developer.berlios.de/bugs/?group_id=8179" msgstr "" "Lütfen http://developer.berlios.de/bugs/?group_id=8179 adresine bildirin" #: ../src/img_controls.c:121 msgid "Auto Focus (continuous)" msgstr "Otomatik Odakla (sürekli)" #: ../src/img_controls.c:122 msgid "set Focus" msgstr "Odak ayarla" #: ../src/image_format.c:35 msgid "Jpeg (jpg)" msgstr "Jpeg (jpg)" #: ../src/image_format.c:41 msgid "Bitmap (Bmp)" msgstr "Bitmap (Bmp)" #: ../src/image_format.c:47 msgid "Portable Network Graphics (Png)" msgstr "Taşınabilir AÄŸ Grafikleri (Png)" #: ../src/image_format.c:53 msgid "Raw Image (raw)" msgstr "Ham Görüntü (raw)" #. controls menu #: ../src/menubar.c:64 msgid "Settings" msgstr "Ayarlar" #: ../src/menubar.c:67 msgid "Hardware Defaults" msgstr "Donanım Varsayılanları" #: ../src/menubar.c:75 msgid "Camera Button" msgstr "Kamera Düğmesi" #: ../src/menubar.c:79 msgid "Capture Image" msgstr "Resim Yakala" #: ../src/menubar.c:84 msgid "Capture Video" msgstr "Video Yakala" #. video menu #: ../src/menubar.c:144 ../src/video_tab.c:87 msgid "Video" msgstr "Görüntü" #: ../src/menubar.c:145 ../src/menubar.c:231 msgid "File" msgstr "Dosya" #: ../src/menubar.c:146 ../src/menubar.c:232 msgid "Increment Filename" msgstr "Dosya Adını Arttır" #: ../src/menubar.c:164 msgid "Video Codec" msgstr "Video Kodlayıcısı" #: ../src/menubar.c:187 msgid "Video Codec Properties" msgstr "Video Kodlayıcı Özellikleri" #: ../src/menubar.c:194 msgid "Audio Codec" msgstr "Ses Kodlayıcı" #: ../src/menubar.c:215 msgid "Audio Codec Properties" msgstr "Ses Kodlayıcı Özellikleri" #. photo menu #: ../src/menubar.c:230 msgid "Photo" msgstr "FotoÄŸraf" #: ../src/options.c:752 msgid "Prints version" msgstr "Sürümü yazdırır" #: ../src/options.c:753 msgid "Displays debug information" msgstr "Hata ayıklama bilgisini görüntüler" #: ../src/options.c:754 msgid "Video Device to use [default: /dev/video0]" msgstr "Kullanılacak Video Aygıtı [varsayılan: /dev/video0]" #: ../src/options.c:755 msgid "Exit after adding UVC extension controls (needs root/sudo)" msgstr "" "UVC uzantı denetimlerini ekledikten sonra çık (yönetici/sudo gerektirir)" #: ../src/options.c:756 msgid "Don't stream video (image controls only)" msgstr "Video'yu akış yapma (sadece resim denetimleri)" #: ../src/options.c:757 msgid "Don't display a GUI" msgstr "Grafiksel Arayüz görüntüleme" #: ../src/options.c:758 msgid "Capture method (1-mmap (default) 2-read)" msgstr "Yakalama yöntemi (1-mmap (varsayılan) 2-read)" #: ../src/options.c:759 msgid "Configuration file" msgstr "Yapılandırma dosyası" #: ../src/options.c:760 msgid "Hardware accelaration (enable(1) | disable(0))" msgstr "Donanım hızlandırma (enable(1) | disable(0))" #: ../src/options.c:761 msgid "" "Pixel " "format(mjpg|jpeg|yuyv|yvyu|uyvy|yyuv|yu12|yv12|nv12|nv21|nv16|nv61|y41p|grey|" "y10b|y16 |s501|s505|s508|gbrg|grbg|ba81|rggb|bgr3|rgb3)" msgstr "" "Piksel " "biçimi(mjpg|jpeg|yuyv|yvyu|uyvy|yyuv|yu12|yv12|nv12|nv21|nv16|nv61|y41p|grey|" "y10b|y16 |s501|s505|s508|gbrg|grbg|ba81|rggb|bgr3|rgb3)" #: ../src/options.c:762 msgid "Frame size, default: 640x480" msgstr "Çerçeve boyutu, varsayılan: 640x480" #: ../src/options.c:763 msgid "Image File name" msgstr "Resim Dosya adı" #: ../src/options.c:764 msgid "Image capture interval in seconds" msgstr "Resim yakalama aralığı (saniye)" #: ../src/options.c:765 msgid "Number of Pictures to capture" msgstr "Yakalanacak Resim Sayısı" #: ../src/options.c:766 msgid "Video File name (capture from start)" msgstr "Video Dosya adı (baÅŸlangıçtan yakala)" #: ../src/options.c:767 msgid "Video capture time (in seconds)" msgstr "Video yakalama süresi (saniye)" #: ../src/options.c:768 msgid "Exits guvcview after closing video" msgstr "Video kapatıldıktan sonra guvcview'den çıkar" #: ../src/options.c:769 msgid "Number of initial frames to skip" msgstr "BaÅŸlangıçta atlanacak kare sayısı" #: ../src/options.c:770 msgid "Show FPS value (enable(1) | disable (0))" msgstr "FPS deÄŸerini göster (enable(1) | disable (0))" #: ../src/options.c:771 msgid "Load Profile at start" msgstr "BaÅŸlangıçta Profil Yükle" #: ../src/options.c:777 msgid "- local options" msgstr "- yerel seçenekler" #. gdk_threads_enter(); #: ../src/timers.c:119 msgid "Cap. Image" msgstr "Resim Yakala" #: ../src/timers.c:217 msgid "Guvcview Warning:" msgstr "Guvcview Uyarısı:" #: ../src/timers.c:217 msgid "Not enough free space left on disk" msgstr "Diskte yeterli boÅŸ yer yok" #: ../src/v4l2_controls.c:711 msgid "Left" msgstr "Sol" #: ../src/v4l2_controls.c:712 msgid "Right" msgstr "SaÄŸ" #: ../src/v4l2_controls.c:716 msgid "Down" msgstr "AÅŸağı" #: ../src/v4l2_controls.c:717 msgid "Up" msgstr "Yukarı" #: ../src/v4l2_controls.c:762 msgid "Off" msgstr "Kapalı" #: ../src/v4l2_controls.c:762 msgid "On" msgstr "Açık" #: ../src/v4l2_controls.c:762 msgid "Blinking" msgstr "Yanıp Sönme" #: ../src/v4l2_controls.c:762 msgid "Auto" msgstr "Otomatik" #. turn it into a menu control #: ../src/v4l2_controls.c:813 msgid "8 bit" msgstr "8 bit" #: ../src/v4l2_controls.c:813 msgid "12 bit" msgstr "12 bit" #: ../src/v4l2_dyna_ctrls.c:96 msgid "Pan (relative)" msgstr "Kaydır (bağıl)" #: ../src/v4l2_dyna_ctrls.c:109 msgid "Tilt (relative)" msgstr "EÄŸ (bağıl)" #: ../src/v4l2_dyna_ctrls.c:122 msgid "Pan Reset" msgstr "Kaydırmayı Sıfırla" #: ../src/v4l2_dyna_ctrls.c:135 msgid "Tilt Reset" msgstr "EÄŸme Sıfırla" #: ../src/v4l2_dyna_ctrls.c:148 msgid "Focus (absolute)" msgstr "Odaklan (kesin)" #: ../src/v4l2_dyna_ctrls.c:161 msgid "LED1 Mode" msgstr "LED1 Kipi" #: ../src/v4l2_dyna_ctrls.c:174 msgid "LED1 Frequency" msgstr "LED1 Frekansı" #: ../src/v4l2_dyna_ctrls.c:187 msgid "Disable video processing" msgstr "Video iÅŸlemeyi devre dışı bırak" #: ../src/v4l2_dyna_ctrls.c:200 msgid "Raw bits per pixel" msgstr "Piksel başına ham bit" #. needed only for language files (not used) #. V4L2 control strings #: ../src/v4l2uvc.c:56 msgid "User Controls" msgstr "Kullanıcı Denetimleri" #: ../src/v4l2uvc.c:57 msgid "Brightness" msgstr "Parlaklık" #: ../src/v4l2uvc.c:58 msgid "Contrast" msgstr "Karşıtlık" #: ../src/v4l2uvc.c:59 msgid "Hue" msgstr "Renk" #: ../src/v4l2uvc.c:60 msgid "Saturation" msgstr "Doygunluk" #: ../src/v4l2uvc.c:61 msgid "Sharpness" msgstr "Keskinlik" #: ../src/v4l2uvc.c:62 msgid "Gamma" msgstr "Kontras derecesi (gama)" #: ../src/v4l2uvc.c:63 msgid "Backlight Compensation" msgstr "Arka Işık DesteÄŸi" #: ../src/v4l2uvc.c:64 msgid "Power Line Frequency" msgstr "Güç Hattı Frekansı" #: ../src/v4l2uvc.c:65 msgid "Hue, Automatic" msgstr "Renk, Otomatik" #: ../src/v4l2uvc.c:66 msgid "Focus, Auto" msgstr "Odak, Otomatik" #: ../src/v4l2uvc.c:67 msgid "Manual Mode" msgstr "El Kipi" #: ../src/v4l2uvc.c:68 msgid "Auto Mode" msgstr "Otomatik Kip" #: ../src/v4l2uvc.c:69 msgid "Shutter Priority Mode" msgstr "Kapak Öncelik Kipi" #: ../src/v4l2uvc.c:70 msgid "Aperture Priority Mode" msgstr "Açıklık Öncelik Kipi" #: ../src/v4l2uvc.c:71 msgid "Black Level" msgstr "Siyah Seviyesi" #: ../src/v4l2uvc.c:72 msgid "White Balance, Automatic" msgstr "Beyaz Dengesi, Otomatik" #: ../src/v4l2uvc.c:73 msgid "Do White Balance" msgstr "Beyaz Dengesi Yap" #: ../src/v4l2uvc.c:74 msgid "Red Balance" msgstr "Kırmızı Dengesi" #: ../src/v4l2uvc.c:75 msgid "Blue Balance" msgstr "Mavi Dengesi" #: ../src/v4l2uvc.c:76 msgid "Exposure" msgstr "Pozlandırma" #: ../src/v4l2uvc.c:77 msgid "Gain, Automatic" msgstr "Kazanç, Otomatik" #: ../src/v4l2uvc.c:78 msgid "Gain" msgstr "Kazanç" #: ../src/v4l2uvc.c:79 msgid "Horizontal Flip" msgstr "Yatay Çevir" #: ../src/v4l2uvc.c:80 msgid "Vertical Flip" msgstr "Dikey Çevir" #: ../src/v4l2uvc.c:81 msgid "Horizontal Center" msgstr "Yatay Merkez" #: ../src/v4l2uvc.c:82 msgid "Vertical Center" msgstr "Dikey Merkez" #: ../src/v4l2uvc.c:83 msgid "Chroma AGC" msgstr "Kroma Otomatik Kazanç Kontrolü (AGC)" #: ../src/v4l2uvc.c:84 msgid "Color Killer" msgstr "Renk Öldürücü" #: ../src/v4l2uvc.c:85 msgid "Color Effects" msgstr "Renk Efektleri" #. CAMERA CLASS control strings #: ../src/v4l2uvc.c:88 msgid "Camera Controls" msgstr "Kamera Denetimleri" #: ../src/v4l2uvc.c:89 msgid "Auto Exposure" msgstr "Otomatik Pozlandırma" #: ../src/v4l2uvc.c:90 msgid "Exposure Time, Absolute" msgstr "Pozlandırma Süresü, Kesin" #: ../src/v4l2uvc.c:91 msgid "Exposure, Dynamic Framerate" msgstr "Pozlandırma, Dinamik Kare Oranı" #: ../src/v4l2uvc.c:92 msgid "Pan, Relative" msgstr "Kaydırma, Bağıl" #: ../src/v4l2uvc.c:93 msgid "Tilt, Relative" msgstr "EÄŸme, Bağıl" #: ../src/v4l2uvc.c:94 msgid "Pan, Reset" msgstr "Kaydırma, Sıfırla" #: ../src/v4l2uvc.c:95 msgid "Tilt, Reset" msgstr "EÄŸme, Sıfırla" #: ../src/v4l2uvc.c:96 msgid "Pan, Absolute" msgstr "Kaydırma, Kesin" #: ../src/v4l2uvc.c:98 msgid "Focus, Absolute" msgstr "Odaklama, Kesin" #: ../src/v4l2uvc.c:99 msgid "Focus, Relative" msgstr "Odaklama, Bağıl" #: ../src/v4l2uvc.c:100 msgid "Focus, Automatic" msgstr "Odaklama, Otomatik" #: ../src/v4l2uvc.c:101 msgid "Zoom, Absolute" msgstr "YakınlaÅŸtırma, Kesin" #: ../src/v4l2uvc.c:102 msgid "Zoom, Relative" msgstr "YakınlaÅŸtırma, Bağıl" #: ../src/v4l2uvc.c:103 msgid "Zoom, Continuous" msgstr "YakınlaÅŸtırma, Sürekli" #: ../src/v4l2uvc.c:104 msgid "Privacy" msgstr "Gizlilik" #. UVC specific control strings #: ../src/v4l2uvc.c:107 msgid "Exposure, Auto" msgstr "Pozlama, Otomatik" #: ../src/v4l2uvc.c:108 msgid "Exposure, Auto Priority" msgstr "Pozlama, Otomatik Öncelik" #: ../src/v4l2uvc.c:109 msgid "Exposure (Absolute)" msgstr "Pozlama (Kesin)" #: ../src/v4l2uvc.c:110 msgid "White Balance Temperature, Auto" msgstr "Beyaz Denge Sıcaklığı, Otomatik" #: ../src/v4l2uvc.c:111 msgid "White Balance Temperature" msgstr "Beyaz Dengesi Sıcaklığı" #: ../src/v4l2uvc.c:112 msgid "White Balance Component, Auto" msgstr "Beyaz Denge BileÅŸeni, Otomatik" #: ../src/v4l2uvc.c:113 msgid "White Balance Blue Component" msgstr "Beyaz Denge Mavi BileÅŸeni" #: ../src/v4l2uvc.c:114 msgid "White Balance Red Component" msgstr "Beyaz Denge Kırmızı BileÅŸeni" #. libwebcam specific control strings #: ../src/v4l2uvc.c:117 msgid "Focus" msgstr "Odaklama" #: ../src/v4l2uvc.c:118 msgid "Focus (Absolute)" msgstr "Odaklama (Kesin)" #: ../src/vcodecs.c:63 msgid "MJPG - compressed" msgstr "MJPG - sıkıştırılmış" #: ../src/vcodecs.c:99 msgid "YUY2 - uncomp YUV" msgstr "YUY2 - sıkıştırılmamış YUV" #: ../src/vcodecs.c:135 msgid "RGB - uncomp BMP" msgstr "RGB - sıkıştırılmamış BMP" #: ../src/vcodecs.c:171 msgid "MPEG video 1" msgstr "MPEG video 1" #: ../src/vcodecs.c:207 msgid "FLV1 - flash video 1" msgstr "FLV1 - flash video 1" #: ../src/vcodecs.c:243 msgid "WMV1 - win. med. video 7" msgstr "WMV1 - win. med. video 7" #: ../src/vcodecs.c:279 msgid "MPG2 - MPG2 format" msgstr "MPG2 - MPG2 biçimi" #: ../src/vcodecs.c:315 msgid "MS MP4 V3" msgstr "MS MP4 V3" #: ../src/vcodecs.c:351 msgid "MPEG4-ASP" msgstr "MPEG4-ASP" #: ../src/vcodecs.c:387 msgid "MPEG4-AVC (H264)" msgstr "MPEG4-AVC (H264)" #: ../src/vcodecs.c:427 msgid "VP8 (VP8)" msgstr "VP8 (VP8)" #: ../src/vcodecs.c:463 msgid "Theora (ogg theora)" msgstr "Theora (ogg theora)" #: ../src/video_format.c:43 msgid "AVI - avi format" msgstr "AVI - avi biçimi" #: ../src/video_format.c:52 msgid "MKV - Matroska format" msgstr "MKV - Matroska biçimi" #: ../src/video_format.c:61 msgid "WEBM - format" msgstr "WEBM - biçimi" #: ../src/video_tab.c:208 msgid "Frame Rate:" msgstr "Kare Oranı:" #: ../src/video_tab.c:215 msgid " Show" msgstr " Göster" #: ../src/video_tab.c:237 msgid "Resolution:" msgstr "Çözünürlük:" #: ../src/video_tab.c:263 msgid "Camera Output:" msgstr "Kamera Çıktısı:" #: ../src/video_tab.c:285 msgid "Apply" msgstr "Uygula" #: ../src/video_tab.c:292 msgid "Quality:" msgstr "Kalite:" #: ../src/video_tab.c:302 msgid "---- Video Filters ----" msgstr "---- Video Filtreleri----" #. Mirror #: ../src/video_tab.c:321 msgid " Mirror" msgstr " Ayna" #. Upturn #: ../src/video_tab.c:332 msgid " Invert" msgstr " Tersine Çevir" #. Negate #: ../src/video_tab.c:343 msgid " Negative" msgstr " Negatif" #. Mono #: ../src/video_tab.c:354 msgid " Mono" msgstr " Mono" #. Pieces #: ../src/video_tab.c:366 msgid " Pieces" msgstr " Parçalar" #. Particles #: ../src/video_tab.c:378 msgid " Particles" msgstr " Tanecikler" guvcview-src-1.7.1/po/cs.po0000664000175000017500000005327212173235416014570 0ustar paulopaulo# Czech translation for guvcview # Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 # This file is distributed under the same license as the guvcview package. # FIRST AUTHOR , 2009. # msgid "" msgstr "" "Project-Id-Version: guvcview\n" "Report-Msgid-Bugs-To: pj.assis@gmail.com\n" "POT-Creation-Date: 2013-07-16 12:53+0000\n" "PO-Revision-Date: 2013-02-25 05:36+0000\n" "Last-Translator: Michal Sittek \n" "Language-Team: Czech \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2013-07-22 13:32+0000\n" "X-Generator: Launchpad (build 16696)\n" "Language: cs\n" #: ../data/guvcview.desktop.in.in.h:1 msgid "guvcview" msgstr "guvcview" #: ../data/guvcview.desktop.in.in.h:2 msgid "GTK UVC video viewer" msgstr "ProhlížeÄ videa GTK UVC" #: ../data/guvcview.desktop.in.in.h:3 msgid "A video viewer and capturer for the linux uvc driver" msgstr "Prohlížení a zachytávání videa z linuxových uvc ovladaÄů" #: ../src/acodecs.c:59 msgid "PCM - uncompressed (16 bit)" msgstr "PCM - bez komprese (16 bitů)" #: ../src/acodecs.c:76 msgid "MPEG2 - (lavc)" msgstr "MPEG2 - (lavc)" #: ../src/acodecs.c:93 msgid "MP3 - (lavc)" msgstr "MP3 - (lavc)" #: ../src/acodecs.c:110 msgid "Dolby AC3 - (lavc)" msgstr "Dolby AC3 - (lavc)" #: ../src/acodecs.c:127 msgid "ACC Low - (faac)" msgstr "Nizké ACC - (faac)" #: ../src/acodecs.c:144 msgid "Vorbis" msgstr "" #: ../src/audio_tab.c:80 msgid "Audio" msgstr "Zvuk" #: ../src/audio_tab.c:98 msgid " Sound" msgstr " Zvuk" #. VU meter on the image (OSD) #: ../src/audio_tab.c:109 msgid " Show VU meter" msgstr " Zobrazit metr VU" #: ../src/audio_tab.c:121 msgid "Audio API:" msgstr "API audia:" #: ../src/audio_tab.c:132 msgid "PORTAUDIO" msgstr "PORTAUDIO" #: ../src/audio_tab.c:133 msgid "PULSEAUDIO" msgstr "PULSEAUDIO" #: ../src/audio_tab.c:149 ../src/audio_tab.c:172 msgid "Input Device:" msgstr "Vstupní zařízení:" #: ../src/audio_tab.c:182 ../src/audio_tab.c:214 msgid "Dev. Default" msgstr "Výchozí zařízení" #: ../src/audio_tab.c:204 msgid "Sample Rate:" msgstr "Vzorkovací frekvence:" #: ../src/audio_tab.c:215 msgid "1 - mono" msgstr "1 - mono" #: ../src/audio_tab.c:216 msgid "2 - stereo" msgstr "2 - stereo" #: ../src/audio_tab.c:251 msgid "Channels:" msgstr "Kanály:" #: ../src/audio_tab.c:302 msgid "---- Audio Effects ----" msgstr "---- Zvukové efekty ----" #. Echo #: ../src/audio_tab.c:321 msgid " Echo" msgstr " Zobrazit" #. FUZZ #: ../src/audio_tab.c:332 msgid " Fuzz" msgstr " Fuzz" #. Reverb #: ../src/audio_tab.c:344 msgid " Reverb" msgstr " OzvÄ›na" #. WahWah #: ../src/audio_tab.c:356 msgid " WahWah" msgstr " WahWah" #. Ducky #: ../src/audio_tab.c:368 msgid " Ducky" msgstr " Ducky" #: ../src/callbacks.c:108 msgid "Error" msgstr "Chyba" #: ../src/callbacks.c:132 msgid "" "\n" "You have more than one video device installed.\n" "Do you want to try another one ?\n" msgstr "" "\n" "Máte nainstalováno více než jedno zařízení pro video.\n" "Chcete zkusit další ?\n" #. Devices #: ../src/callbacks.c:139 ../src/video_tab.c:103 msgid "Device:" msgstr "Zařízení:" #: ../src/callbacks.c:271 msgid "Save File" msgstr "Uložit soubor" #: ../src/callbacks.c:283 msgid "File Format:" msgstr "" #: ../src/callbacks.c:454 msgid "codec values" msgstr "hodnoty kodeku" #: ../src/callbacks.c:465 msgid "" " encoder fps: \n" " (0 - use fps combobox value)" msgstr "" " fps enkodéru: \n" " (0 - použít hodnotu fps z pole)" #: ../src/callbacks.c:478 msgid " monotonic pts" msgstr " monotóních bodů" #. bit rate #: ../src/callbacks.c:485 ../src/callbacks.c:808 msgid "bit rate: " msgstr "pÅ™enosová rychlost: " #: ../src/callbacks.c:498 msgid "qmax: " msgstr "qmax: " #: ../src/callbacks.c:511 msgid "qmin: " msgstr "qmin: " #: ../src/callbacks.c:524 msgid "max. qdiff: " msgstr "max. qdiff: " #: ../src/callbacks.c:537 msgid "dia size: " msgstr "velikost dia: " #: ../src/callbacks.c:550 msgid "pre dia size: " msgstr "velikost pre dia: " #: ../src/callbacks.c:563 msgid "pre me: " msgstr "pre me: " #: ../src/callbacks.c:576 msgid "pre cmp: " msgstr "pre cmp: " #: ../src/callbacks.c:589 msgid "cmp: " msgstr "cmp: " #: ../src/callbacks.c:602 msgid "sub cmp: " msgstr "pod cmp: " #: ../src/callbacks.c:615 msgid "last predictor count: " msgstr "poslední poÄet prediktoru: " #: ../src/callbacks.c:628 msgid "gop size: " msgstr "velikost gop: " #: ../src/callbacks.c:641 msgid "qcompress: " msgstr "qkomprese: " #: ../src/callbacks.c:654 msgid "qblur: " msgstr "qrozmazání: " #: ../src/callbacks.c:667 msgid "subq: " msgstr "subq: " #: ../src/callbacks.c:680 msgid "framerefs: " msgstr "framerefs: " #: ../src/callbacks.c:693 msgid "me method: " msgstr "metoda me: " #: ../src/callbacks.c:706 msgid "mb decision: " msgstr "rozhodnutí mb: " #: ../src/callbacks.c:719 msgid "max B frames: " msgstr "max B rámeÄků: " #: ../src/callbacks.c:732 msgid "num threads: " msgstr "poÄet vláken: " #: ../src/callbacks.c:795 msgid "audio codec values" msgstr "hodnoty audio kodeku" #. sample format #: ../src/callbacks.c:822 msgid "sample format: " msgstr "" #: ../src/callbacks.c:1250 msgid "start new" msgstr "spustit nový" #: ../src/callbacks.c:1253 msgid "restart" msgstr "restart" #: ../src/callbacks.c:1255 msgid "new" msgstr "nový" #: ../src/callbacks.c:1257 msgid "cancel" msgstr "zruÅ¡it" #: ../src/callbacks.c:1262 msgid "" "launch new process or restart?.\n" "\n" msgstr "" "Spustit nový proces nebo restartovat?.\n" "\n" #: ../src/callbacks.c:1716 ../src/guvcview.c:537 msgid "Cap. Image (I)" msgstr "" #. disable image controls #: ../src/callbacks.c:1727 ../src/guvcview.c:658 ../src/timers.c:101 msgid "capturing photo to" msgstr "" #: ../src/callbacks.c:1786 ../src/guvcview.c:547 msgid "Cap. Video (V)" msgstr "" #: ../src/callbacks.c:1812 ../src/guvcview.c:708 msgid "capturing video to" msgstr "" #. vid capture enabled from start #: ../src/callbacks.c:1845 ../src/guvcview.c:542 msgid "Stop Video (V)" msgstr "" #: ../src/callbacks.c:1901 ../src/menubar.c:66 msgid "Save Profile" msgstr "" #: ../src/callbacks.c:1914 ../src/menubar.c:65 msgid "Load Profile" msgstr "" #: ../src/create_video.c:1016 ../src/guvcview.c:700 msgid "Cap. Video" msgstr "Zazn. Video" #: ../src/guvcview.c:279 msgid "Guvcview Video Capture" msgstr "Zachycení videa Gucview" #: ../src/guvcview.c:291 msgid "GUVCViewer Controls" msgstr "Ovládání GUVCViewer" #. can't open device #: ../src/guvcview.c:336 msgid "" "Guvcview error:\n" "\n" "Unable to open device" msgstr "" "ChybaGuvcview:\n" "\n" "Nelze otevřít zařízení" #: ../src/guvcview.c:337 msgid "" "Please make sure the camera is connected\n" "and that the correct driver is installed." msgstr "" "UjistÄ›te se prosím, že vaÅ¡e kamera je pÅ™ipojena,\n" "a že máte nainstalován správný ovladaÄ." #. uvc extension controls OK, give warning and shutdown (called with --add_ctrls) #: ../src/guvcview.c:342 msgid "" "Guvcview:\n" "\n" "UVC Extension controls" msgstr "" "Guvcview\n" "\n" "Rozšířené ovládání UVC" #: ../src/guvcview.c:343 msgid "Extension controls were added to the UVC driver" msgstr "Rozšířené ovládání bylo pÅ™idáno do UVC ovladaÄe" #. uvc extension controls error - EACCES (needs root user) #: ../src/guvcview.c:350 msgid "" "Guvcview error:\n" "\n" "UVC Extension controls" msgstr "" "Chyba Guvcview\n" "\n" "Rozšířené ovládání UCV" #: ../src/guvcview.c:351 msgid "" "An error occurred while adding extension\n" "controls to the UVC driver\n" "Make sure you run guvcview as root (or sudo)." msgstr "" "Nastala chyba pÅ™i pÅ™idání rozšířeného\n" "ovládání do ovladaÄe UVC\n" "UjistÄ›te se, že spouÅ¡títe guvcview jako root (Äi sudo)." #: ../src/guvcview.c:377 ../src/guvcview.c:455 msgid "" "Guvcview error:\n" "\n" "Can't set a valid video stream for guvcview" msgstr "" "Chyba Gucview:\n" "\n" "Nelze nastavit platný proud videa pro gucview" #: ../src/guvcview.c:378 ../src/guvcview.c:456 msgid "" "Make sure your device driver is v4l2 compliant\n" "and that it is properly installed." msgstr "" "UjistÄ›te se, že ovladaÄ vaÅ¡eho přístroje je kompatibilní s 4l2\n" "a že je správnÄ› nainstalován." #: ../src/guvcview.c:400 ../src/guvcview.c:422 msgid "" "Guvcview error:\n" "\n" "Unable to start with minimum setup" msgstr "" "Chyba Guvcview:\n" "\n" "Nelze spustit minimální konfguraci" #: ../src/guvcview.c:401 ../src/guvcview.c:423 msgid "Please reconnect your camera." msgstr "Prosím pÅ™ipojte znovu kameru." #: ../src/guvcview.c:430 msgid "" "Guvcview error:\n" "\n" "Couldn't query device capabilities" msgstr "" "Chyba guvcview:\n" "\n" "Nelze zjistit funkce zařízení" #: ../src/guvcview.c:431 msgid "Make sure the device driver supports v4l2." msgstr "UjistÄ›te se, že ovladaÄ zařízení podporuje v4l2." #: ../src/guvcview.c:435 msgid "" "Guvcview error:\n" "\n" "Read method error" msgstr "" "Chyba guvcview:\n" "\n" "Chyba metody Ätení" #: ../src/guvcview.c:436 msgid "Please try mmap instead (--capture_method=1)." msgstr "Místo (--capture_method=1) zkuste mmap." #: ../src/guvcview.c:444 msgid "" "Guvcview error:\n" "\n" "Unable to allocate Buffers" msgstr "" "Chyba Guvcview:\n" "\n" "Nelze alokovat Buffery" #: ../src/guvcview.c:445 msgid "Please try restarting your system." msgstr "Prosím zkuste restartovat váš systém." #: ../src/guvcview.c:490 msgid "Image Controls" msgstr "Ovládání obrazů" #. image auto capture #: ../src/guvcview.c:533 msgid "Stop Auto (I)" msgstr "" #: ../src/guvcview.c:644 msgid "" "Guvcview error:\n" "\n" "Unable to create Video Thread" msgstr "" "Chyba Guvcview:\n" "\n" "Nelze založit vlákno videa" #: ../src/guvcview.c:645 msgid "Please report it to http://developer.berlios.de/bugs/?group_id=8179" msgstr "" "Prosím nahlaÅ¡te to na http://developer.berlios.de/bugs/?group_id=8179" #: ../src/img_controls.c:121 msgid "Auto Focus (continuous)" msgstr "Automatické ostÅ™ení (pozvolné)" #: ../src/img_controls.c:122 msgid "set Focus" msgstr "nastavit OstÅ™ení" #: ../src/image_format.c:35 msgid "Jpeg (jpg)" msgstr "" #: ../src/image_format.c:41 msgid "Bitmap (Bmp)" msgstr "" #: ../src/image_format.c:47 msgid "Portable Network Graphics (Png)" msgstr "" #: ../src/image_format.c:53 msgid "Raw Image (raw)" msgstr "" #. controls menu #: ../src/menubar.c:64 msgid "Settings" msgstr "" #: ../src/menubar.c:67 msgid "Hardware Defaults" msgstr "" #: ../src/menubar.c:75 msgid "Camera Button" msgstr "" #: ../src/menubar.c:79 msgid "Capture Image" msgstr "" #: ../src/menubar.c:84 msgid "Capture Video" msgstr "" #. video menu #: ../src/menubar.c:144 ../src/video_tab.c:87 msgid "Video" msgstr "" #: ../src/menubar.c:145 ../src/menubar.c:231 msgid "File" msgstr "" #: ../src/menubar.c:146 ../src/menubar.c:232 msgid "Increment Filename" msgstr "" #: ../src/menubar.c:164 msgid "Video Codec" msgstr "" #: ../src/menubar.c:187 msgid "Video Codec Properties" msgstr "" #: ../src/menubar.c:194 msgid "Audio Codec" msgstr "" #: ../src/menubar.c:215 msgid "Audio Codec Properties" msgstr "" #. photo menu #: ../src/menubar.c:230 msgid "Photo" msgstr "" #: ../src/options.c:752 msgid "Prints version" msgstr "Vypíše verzi" #: ../src/options.c:753 msgid "Displays debug information" msgstr "Zobrazí ladící informace" #: ../src/options.c:754 msgid "Video Device to use [default: /dev/video0]" msgstr "Video zařízení [výchozí /dev/video0]" #: ../src/options.c:755 msgid "Exit after adding UVC extension controls (needs root/sudo)" msgstr "UkonÄit po pÅ™idání kontroly rozšíření UVC (vyžaduje root/sudo)" #: ../src/options.c:756 msgid "Don't stream video (image controls only)" msgstr "Neposílat video (pouze kontroly obrázku)" #: ../src/options.c:757 msgid "Don't display a GUI" msgstr "Nezobrazovat rozhraní" #: ../src/options.c:758 msgid "Capture method (1-mmap (default) 2-read)" msgstr "Metoda zachycení (1-mmap (výchozí) 2-read)" #: ../src/options.c:759 msgid "Configuration file" msgstr "KonfiguraÄní soubor" #: ../src/options.c:760 msgid "Hardware accelaration (enable(1) | disable(0))" msgstr "Hardwarová akcelerace (povolit(1) | zakázat(0))" #: ../src/options.c:761 msgid "" "Pixel " "format(mjpg|jpeg|yuyv|yvyu|uyvy|yyuv|yu12|yv12|nv12|nv21|nv16|nv61|y41p|grey|" "y10b|y16 |s501|s505|s508|gbrg|grbg|ba81|rggb|bgr3|rgb3)" msgstr "" "Formát " "pixelu(mjpg|jpeg|yuyv|yvyu|uyvy|yyuv|yu12|yv12|nv12|nv21|nv16|nv61|y41p|grey|" "y10b|y16 |s501|s505|s508|gbrg|grbg|ba81|rggb|bgr3|rgb3)" #: ../src/options.c:762 msgid "Frame size, default: 640x480" msgstr "Velikost rámce, výchozí: 640x480" #: ../src/options.c:763 msgid "Image File name" msgstr "Název souboru orazu" #: ../src/options.c:764 msgid "Image capture interval in seconds" msgstr "Interval snímání v sekundách" #: ../src/options.c:765 msgid "Number of Pictures to capture" msgstr "PoÄet obrázků k zaznamenání" #: ../src/options.c:766 msgid "Video File name (capture from start)" msgstr "Jméno Video souboru (záznam od zaÄátku)" #: ../src/options.c:767 msgid "Video capture time (in seconds)" msgstr "ÄŒas Video záznamu (v sekundách)" #: ../src/options.c:768 msgid "Exits guvcview after closing video" msgstr "Po skonÄení videa ukonÄit guvcview" #: ../src/options.c:769 msgid "Number of initial frames to skip" msgstr "PoÄet prvních vynechaných snímků" #: ../src/options.c:770 msgid "Show FPS value (enable(1) | disable (0))" msgstr "Zobrazit hodnotu FPS (povolit(1) | zakázat(0))" #: ../src/options.c:771 msgid "Load Profile at start" msgstr "NaÄíst profil pÅ™i spuÅ¡tÄ›ní" #: ../src/options.c:777 msgid "- local options" msgstr "- místní nastavení" #. gdk_threads_enter(); #: ../src/timers.c:119 msgid "Cap. Image" msgstr "Zazn. Obraz" #: ../src/timers.c:217 msgid "Guvcview Warning:" msgstr "Varování Guvcview:" #: ../src/timers.c:217 msgid "Not enough free space left on disk" msgstr "Na disku nezbývá dost volného místa" #: ../src/v4l2_controls.c:711 msgid "Left" msgstr "Vlevo" #: ../src/v4l2_controls.c:712 msgid "Right" msgstr "Vpravo" #: ../src/v4l2_controls.c:716 msgid "Down" msgstr "Dolů" #: ../src/v4l2_controls.c:717 msgid "Up" msgstr "Nahoru" #: ../src/v4l2_controls.c:762 msgid "Off" msgstr "Vypnuto" #: ../src/v4l2_controls.c:762 msgid "On" msgstr "Zapnuto" #: ../src/v4l2_controls.c:762 msgid "Blinking" msgstr "Blikání" #: ../src/v4l2_controls.c:762 msgid "Auto" msgstr "Automaticky" #. turn it into a menu control #: ../src/v4l2_controls.c:813 msgid "8 bit" msgstr "8 bitů" #: ../src/v4l2_controls.c:813 msgid "12 bit" msgstr "12 bitů" #: ../src/v4l2_dyna_ctrls.c:96 msgid "Pan (relative)" msgstr "ZábÄ›r (relativní)" #: ../src/v4l2_dyna_ctrls.c:109 msgid "Tilt (relative)" msgstr "ZábÄ›r (relativní)" #: ../src/v4l2_dyna_ctrls.c:122 msgid "Pan Reset" msgstr "Reset zábÄ›ru" #: ../src/v4l2_dyna_ctrls.c:135 msgid "Tilt Reset" msgstr "Obnovit" #: ../src/v4l2_dyna_ctrls.c:148 msgid "Focus (absolute)" msgstr "OstÅ™ení (absolutní)" #: ../src/v4l2_dyna_ctrls.c:161 msgid "LED1 Mode" msgstr "Mód LED1" #: ../src/v4l2_dyna_ctrls.c:174 msgid "LED1 Frequency" msgstr "Frekvence LED1" #: ../src/v4l2_dyna_ctrls.c:187 msgid "Disable video processing" msgstr "Zakázat zpracování videa" #: ../src/v4l2_dyna_ctrls.c:200 msgid "Raw bits per pixel" msgstr "Raw bity / pxel" #. needed only for language files (not used) #. V4L2 control strings #: ../src/v4l2uvc.c:56 msgid "User Controls" msgstr "Uživatelká nastavení" #: ../src/v4l2uvc.c:57 msgid "Brightness" msgstr "Jas" #: ../src/v4l2uvc.c:58 msgid "Contrast" msgstr "Kontrast" #: ../src/v4l2uvc.c:59 msgid "Hue" msgstr "Odstín" #: ../src/v4l2uvc.c:60 msgid "Saturation" msgstr "Sytost" #: ../src/v4l2uvc.c:61 msgid "Sharpness" msgstr "Ostrost" #: ../src/v4l2uvc.c:62 msgid "Gamma" msgstr "Gamma" #: ../src/v4l2uvc.c:63 msgid "Backlight Compensation" msgstr "Komponzace podsvÄ›tlení" #: ../src/v4l2uvc.c:64 msgid "Power Line Frequency" msgstr "KmitoÄet sítÄ›" #: ../src/v4l2uvc.c:65 msgid "Hue, Automatic" msgstr "Odstín, Automatický" #: ../src/v4l2uvc.c:66 msgid "Focus, Auto" msgstr "OstÅ™ení, Auto" #: ../src/v4l2uvc.c:67 msgid "Manual Mode" msgstr "RuÄní mód" #: ../src/v4l2uvc.c:68 msgid "Auto Mode" msgstr "Auto. mód" #: ../src/v4l2uvc.c:69 msgid "Shutter Priority Mode" msgstr "Mód priority clony" #: ../src/v4l2uvc.c:70 msgid "Aperture Priority Mode" msgstr "Režim priority clony" #: ../src/v4l2uvc.c:71 msgid "Black Level" msgstr "Úroveň Äerné" #: ../src/v4l2uvc.c:72 msgid "White Balance, Automatic" msgstr "Vyvážení bílé, automatické" #: ../src/v4l2uvc.c:73 msgid "Do White Balance" msgstr "Vyvážit bílou" #: ../src/v4l2uvc.c:74 msgid "Red Balance" msgstr "Vyvážení Äervené" #: ../src/v4l2uvc.c:75 msgid "Blue Balance" msgstr "Vyvážení modré" #: ../src/v4l2uvc.c:76 msgid "Exposure" msgstr "Expozice" #: ../src/v4l2uvc.c:77 msgid "Gain, Automatic" msgstr "Přírůstek, Automatický" #: ../src/v4l2uvc.c:78 msgid "Gain" msgstr "Zisk" #: ../src/v4l2uvc.c:79 msgid "Horizontal Flip" msgstr "Horizontální pÅ™eklopení" #: ../src/v4l2uvc.c:80 msgid "Vertical Flip" msgstr "Vertikální pÅ™eklopení" #: ../src/v4l2uvc.c:81 msgid "Horizontal Center" msgstr "Horizontální stÅ™ed" #: ../src/v4l2uvc.c:82 msgid "Vertical Center" msgstr "Vertikální stÅ™ed" #: ../src/v4l2uvc.c:83 msgid "Chroma AGC" msgstr "AKP Sytosti" #: ../src/v4l2uvc.c:84 msgid "Color Killer" msgstr "OdstranÄ›ní barvy" #: ../src/v4l2uvc.c:85 msgid "Color Effects" msgstr "Barevné efekty" #. CAMERA CLASS control strings #: ../src/v4l2uvc.c:88 msgid "Camera Controls" msgstr "Ovládání kamery" #: ../src/v4l2uvc.c:89 msgid "Auto Exposure" msgstr "Automatická korekce závÄ›rky" #: ../src/v4l2uvc.c:90 msgid "Exposure Time, Absolute" msgstr "ExpoziÄní Doba, Absolutní" #: ../src/v4l2uvc.c:91 msgid "Exposure, Dynamic Framerate" msgstr "Expozie, Dynamická rychlost snímků" #: ../src/v4l2uvc.c:92 msgid "Pan, Relative" msgstr "Sledování objektu, Relativní" #: ../src/v4l2uvc.c:93 msgid "Tilt, Relative" msgstr "Náklon, Relativní" #: ../src/v4l2uvc.c:94 msgid "Pan, Reset" msgstr "Sledování objektu, Reset" #: ../src/v4l2uvc.c:95 msgid "Tilt, Reset" msgstr "Náklon, Reset" #: ../src/v4l2uvc.c:96 msgid "Pan, Absolute" msgstr "Sledování objektu, Absolutní" #: ../src/v4l2uvc.c:98 msgid "Focus, Absolute" msgstr "Ohnisko, Absolutní" #: ../src/v4l2uvc.c:99 msgid "Focus, Relative" msgstr "Ohnisko, Relativní" #: ../src/v4l2uvc.c:100 msgid "Focus, Automatic" msgstr "ZaostÅ™ení, Automaticky" #: ../src/v4l2uvc.c:101 msgid "Zoom, Absolute" msgstr "PÅ™iblížení, Absolutní" #: ../src/v4l2uvc.c:102 msgid "Zoom, Relative" msgstr "PÅ™iblížení, Relativní" #: ../src/v4l2uvc.c:103 msgid "Zoom, Continuous" msgstr "PÅ™iblížení, NepÅ™etržité" #: ../src/v4l2uvc.c:104 msgid "Privacy" msgstr "Ochrana osobních údajů" #. UVC specific control strings #: ../src/v4l2uvc.c:107 msgid "Exposure, Auto" msgstr "Expozive, Auto" #: ../src/v4l2uvc.c:108 msgid "Exposure, Auto Priority" msgstr "Expozice Auto. prorita" #: ../src/v4l2uvc.c:109 msgid "Exposure (Absolute)" msgstr "Expozice (Absolutní)" #: ../src/v4l2uvc.c:110 msgid "White Balance Temperature, Auto" msgstr "Vyvážení bílé, Auto" #: ../src/v4l2uvc.c:111 msgid "White Balance Temperature" msgstr "Vyvážení bílé" #: ../src/v4l2uvc.c:112 msgid "White Balance Component, Auto" msgstr "Komponenta vyvážení bílé, Auto" #: ../src/v4l2uvc.c:113 msgid "White Balance Blue Component" msgstr "Modrá složka vyvážení bílé" #: ../src/v4l2uvc.c:114 msgid "White Balance Red Component" msgstr "ÄŒervená složka vyvážení bílé" #. libwebcam specific control strings #: ../src/v4l2uvc.c:117 msgid "Focus" msgstr "ZaostÅ™ení" #: ../src/v4l2uvc.c:118 msgid "Focus (Absolute)" msgstr "Ohnisko (Absolutní)" #: ../src/vcodecs.c:63 msgid "MJPG - compressed" msgstr "MJPG - komprimovaný" #: ../src/vcodecs.c:99 msgid "YUY2 - uncomp YUV" msgstr "YUY2 - uncomp YUV" #: ../src/vcodecs.c:135 msgid "RGB - uncomp BMP" msgstr "RGB - uncomp BMP" #: ../src/vcodecs.c:171 msgid "MPEG video 1" msgstr "MPEG video 1" #: ../src/vcodecs.c:207 msgid "FLV1 - flash video 1" msgstr "FLV1 - flash video 1" #: ../src/vcodecs.c:243 msgid "WMV1 - win. med. video 7" msgstr "WM1 - windows media video 7" #: ../src/vcodecs.c:279 msgid "MPG2 - MPG2 format" msgstr "MPG2 - formát MPG2" #: ../src/vcodecs.c:315 msgid "MS MP4 V3" msgstr "MS MP4 V3" #: ../src/vcodecs.c:351 msgid "MPEG4-ASP" msgstr "MPEG4-ASP" #: ../src/vcodecs.c:387 msgid "MPEG4-AVC (H264)" msgstr "MPEG4-AVC (H264)" #: ../src/vcodecs.c:427 msgid "VP8 (VP8)" msgstr "" #: ../src/vcodecs.c:463 msgid "Theora (ogg theora)" msgstr "" #: ../src/video_format.c:43 msgid "AVI - avi format" msgstr "AVI - formát avi" #: ../src/video_format.c:52 msgid "MKV - Matroska format" msgstr "MKV - formát Matroska" #: ../src/video_format.c:61 msgid "WEBM - format" msgstr "" #: ../src/video_tab.c:208 msgid "Frame Rate:" msgstr "Snímkový kmitoÄet" #: ../src/video_tab.c:215 msgid " Show" msgstr " Zobrazit" #: ../src/video_tab.c:237 msgid "Resolution:" msgstr "RozliÅ¡ení:" #: ../src/video_tab.c:263 msgid "Camera Output:" msgstr "Výstup kamery:" #: ../src/video_tab.c:285 msgid "Apply" msgstr "Použít" #: ../src/video_tab.c:292 msgid "Quality:" msgstr "Kvalita:" #: ../src/video_tab.c:302 msgid "---- Video Filters ----" msgstr "---- Filtry videa ----" #. Mirror #: ../src/video_tab.c:321 msgid " Mirror" msgstr " Zrcadlo" #. Upturn #: ../src/video_tab.c:332 msgid " Invert" msgstr " Invertovat" #. Negate #: ../src/video_tab.c:343 msgid " Negative" msgstr " Negativ" #. Mono #: ../src/video_tab.c:354 msgid " Mono" msgstr " Mono" #. Pieces #: ../src/video_tab.c:366 msgid " Pieces" msgstr " Kousků" #. Particles #: ../src/video_tab.c:378 msgid " Particles" msgstr " Částí" guvcview-src-1.7.1/po/it.po0000664000175000017500000005515112173235416014575 0ustar paulopaulo# Translation of guvcview to the Italian language # Copyright (C) 2008 Paulo Assis # This file is distributed under the same license as the guvcview package. # Giovanni Scafora , 2013. # # msgid "" msgstr "" "Project-Id-Version: guvcview\n" "Report-Msgid-Bugs-To: pj.assis@gmail.com\n" "POT-Creation-Date: 2013-07-16 12:53+0000\n" "PO-Revision-Date: 2013-03-07 02:31+0000\n" "Last-Translator: Giovanni Scafora \n" "Language-Team: Arch Linux Italian Team \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2013-07-22 13:32+0000\n" "X-Generator: Launchpad (build 16696)\n" "Language: it\n" #: ../data/guvcview.desktop.in.in.h:1 msgid "guvcview" msgstr "guvcview" #: ../data/guvcview.desktop.in.in.h:2 msgid "GTK UVC video viewer" msgstr "GTK UVC visualizzatore video" #: ../data/guvcview.desktop.in.in.h:3 msgid "A video viewer and capturer for the linux uvc driver" msgstr "Un visualizzatore e catturatore video per il driver uvc di linux" #: ../src/acodecs.c:59 msgid "PCM - uncompressed (16 bit)" msgstr "PCM - non compresso (16 bit)" #: ../src/acodecs.c:76 msgid "MPEG2 - (lavc)" msgstr "MPEG2 - (lavc)" #: ../src/acodecs.c:93 msgid "MP3 - (lavc)" msgstr "MP3 - (lavc)" #: ../src/acodecs.c:110 msgid "Dolby AC3 - (lavc)" msgstr "Dolby AC3 - (lavc)" #: ../src/acodecs.c:127 msgid "ACC Low - (faac)" msgstr "ACC Low - (faac)" #: ../src/acodecs.c:144 msgid "Vorbis" msgstr "Vorbis" #: ../src/audio_tab.c:80 msgid "Audio" msgstr "Audio" #: ../src/audio_tab.c:98 msgid " Sound" msgstr " Suono" #. VU meter on the image (OSD) #: ../src/audio_tab.c:109 msgid " Show VU meter" msgstr " Visualizza VU meter" #: ../src/audio_tab.c:121 msgid "Audio API:" msgstr "API dell'audio:" #: ../src/audio_tab.c:132 msgid "PORTAUDIO" msgstr "PORTAUDIO" #: ../src/audio_tab.c:133 msgid "PULSEAUDIO" msgstr "PULSEAUDIO" #: ../src/audio_tab.c:149 ../src/audio_tab.c:172 msgid "Input Device:" msgstr "Dispositivo di ingresso:" #: ../src/audio_tab.c:182 ../src/audio_tab.c:214 msgid "Dev. Default" msgstr "Impostazione predefinita del dispositivo" #: ../src/audio_tab.c:204 msgid "Sample Rate:" msgstr "Frequenza di campionamento:" #: ../src/audio_tab.c:215 msgid "1 - mono" msgstr "1 - mono" #: ../src/audio_tab.c:216 msgid "2 - stereo" msgstr "2 - stereo" #: ../src/audio_tab.c:251 msgid "Channels:" msgstr "Canali:" #: ../src/audio_tab.c:302 msgid "---- Audio Effects ----" msgstr "---- Effetti audio ----" #. Echo #: ../src/audio_tab.c:321 msgid " Echo" msgstr " Eco" #. FUZZ #: ../src/audio_tab.c:332 msgid " Fuzz" msgstr " Rumore" #. Reverb #: ../src/audio_tab.c:344 msgid " Reverb" msgstr " Riverbero" #. WahWah #: ../src/audio_tab.c:356 msgid " WahWah" msgstr " WahWah" #. Ducky #: ../src/audio_tab.c:368 msgid " Ducky" msgstr " Anatroccolo" #: ../src/callbacks.c:108 msgid "Error" msgstr "Errore" #: ../src/callbacks.c:132 msgid "" "\n" "You have more than one video device installed.\n" "Do you want to try another one ?\n" msgstr "" "\n" "C'è più di un dispositivo video installato.\n" "Vuoi provare l'altro ?\n" #. Devices #: ../src/callbacks.c:139 ../src/video_tab.c:103 msgid "Device:" msgstr "Dispositivo:" #: ../src/callbacks.c:271 msgid "Save File" msgstr "Salva file" #: ../src/callbacks.c:283 msgid "File Format:" msgstr "Formato del file:" #: ../src/callbacks.c:454 msgid "codec values" msgstr "valori dei codec" #: ../src/callbacks.c:465 msgid "" " encoder fps: \n" " (0 - use fps combobox value)" msgstr "" " encoder fps: \n" " (0 - usare il valore fps della combobox)" #: ../src/callbacks.c:478 msgid " monotonic pts" msgstr " punti monocromatici" #. bit rate #: ../src/callbacks.c:485 ../src/callbacks.c:808 msgid "bit rate: " msgstr "bit rate: " #: ../src/callbacks.c:498 msgid "qmax: " msgstr "qmax: " #: ../src/callbacks.c:511 msgid "qmin: " msgstr "qmin: " #: ../src/callbacks.c:524 msgid "max. qdiff: " msgstr "max. qdiff: " #: ../src/callbacks.c:537 msgid "dia size: " msgstr "dim. dia: " #: ../src/callbacks.c:550 msgid "pre dia size: " msgstr "dim. pre dia: " #: ../src/callbacks.c:563 msgid "pre me: " msgstr "pre me: " #: ../src/callbacks.c:576 msgid "pre cmp: " msgstr "pre cmp: " #: ../src/callbacks.c:589 msgid "cmp: " msgstr "cmp: " #: ../src/callbacks.c:602 msgid "sub cmp: " msgstr "sub cmp: " #: ../src/callbacks.c:615 msgid "last predictor count: " msgstr "conteggio dell'ultimo indicatore: " #: ../src/callbacks.c:628 msgid "gop size: " msgstr "dim. gop: " #: ../src/callbacks.c:641 msgid "qcompress: " msgstr "qcompress: " #: ../src/callbacks.c:654 msgid "qblur: " msgstr "qblur: " #: ../src/callbacks.c:667 msgid "subq: " msgstr "subq: " #: ../src/callbacks.c:680 msgid "framerefs: " msgstr "framerefs: " #: ../src/callbacks.c:693 msgid "me method: " msgstr "metodo me: " #: ../src/callbacks.c:706 msgid "mb decision: " msgstr "decisione mb: " #: ../src/callbacks.c:719 msgid "max B frames: " msgstr "numero massimo di immagini B: " #: ../src/callbacks.c:732 msgid "num threads: " msgstr "numero di thread: " #: ../src/callbacks.c:795 msgid "audio codec values" msgstr "valori del codec audio" #. sample format #: ../src/callbacks.c:822 msgid "sample format: " msgstr "Formato di campionamento: " #: ../src/callbacks.c:1250 msgid "start new" msgstr "inizia nuovo" #: ../src/callbacks.c:1253 msgid "restart" msgstr "riavvia" #: ../src/callbacks.c:1255 msgid "new" msgstr "nuovo" #: ../src/callbacks.c:1257 msgid "cancel" msgstr "annulla" #: ../src/callbacks.c:1262 msgid "" "launch new process or restart?.\n" "\n" msgstr "" "vuoi lanciare un nuovo processo o riavviare?.\n" "\n" #: ../src/callbacks.c:1716 ../src/guvcview.c:537 msgid "Cap. Image (I)" msgstr "Cattura immagine (I)" #. disable image controls #: ../src/callbacks.c:1727 ../src/guvcview.c:658 ../src/timers.c:101 msgid "capturing photo to" msgstr "cattura foto da" #: ../src/callbacks.c:1786 ../src/guvcview.c:547 msgid "Cap. Video (V)" msgstr "Registra video (V)" #: ../src/callbacks.c:1812 ../src/guvcview.c:708 msgid "capturing video to" msgstr "registra video da" #. vid capture enabled from start #: ../src/callbacks.c:1845 ../src/guvcview.c:542 msgid "Stop Video (V)" msgstr "Ferma il video (V)" #: ../src/callbacks.c:1901 ../src/menubar.c:66 msgid "Save Profile" msgstr "Salva profilo" #: ../src/callbacks.c:1914 ../src/menubar.c:65 msgid "Load Profile" msgstr "Carica profilo" #: ../src/create_video.c:1016 ../src/guvcview.c:700 msgid "Cap. Video" msgstr "Registra video" #: ../src/guvcview.c:279 msgid "Guvcview Video Capture" msgstr "Cattura video di Guvcview" #: ../src/guvcview.c:291 msgid "GUVCViewer Controls" msgstr "Controlli di Guvcview" #. can't open device #: ../src/guvcview.c:336 msgid "" "Guvcview error:\n" "\n" "Unable to open device" msgstr "" "Errore di Guvcview:\n" "\n" "Impossibile accedere al dispositivo" #: ../src/guvcview.c:337 msgid "" "Please make sure the camera is connected\n" "and that the correct driver is installed." msgstr "" "Assicurarsi che la webcam sia connessa\n" "e che sia installato il rispettivo driver." #. uvc extension controls OK, give warning and shutdown (called with --add_ctrls) #: ../src/guvcview.c:342 msgid "" "Guvcview:\n" "\n" "UVC Extension controls" msgstr "" "Guvcview:\n" "\n" "Controlli dell'estensione di UVC" #: ../src/guvcview.c:343 msgid "Extension controls were added to the UVC driver" msgstr "I controlli dell'estensione sono stati aggiunti al driver UVC" #. uvc extension controls error - EACCES (needs root user) #: ../src/guvcview.c:350 msgid "" "Guvcview error:\n" "\n" "UVC Extension controls" msgstr "" "Errore di Guvcview:\n" "\n" "Controlli dell'estensione di UVC" #: ../src/guvcview.c:351 msgid "" "An error occurred while adding extension\n" "controls to the UVC driver\n" "Make sure you run guvcview as root (or sudo)." msgstr "" "Si è verificato un errore nell'aggiungere\n" "i controlli dell'estensione al driver UVC\n" "Assicurarsi di avviare guvcview da root (o sudo)." #: ../src/guvcview.c:377 ../src/guvcview.c:455 msgid "" "Guvcview error:\n" "\n" "Can't set a valid video stream for guvcview" msgstr "" "Errore di Guvcview:\n" "\n" "Impossibile impostare un flusso video valido per guvcview" #: ../src/guvcview.c:378 ../src/guvcview.c:456 msgid "" "Make sure your device driver is v4l2 compliant\n" "and that it is properly installed." msgstr "" "Assicurarsi che il driver del dispositivo sia\n" "v4l2 compatibile e che sia correttamente installato." #: ../src/guvcview.c:400 ../src/guvcview.c:422 msgid "" "Guvcview error:\n" "\n" "Unable to start with minimum setup" msgstr "" "Errore di Guvcview:\n" "\n" "Impossibile avviare con l'installazione minima" #: ../src/guvcview.c:401 ../src/guvcview.c:423 msgid "Please reconnect your camera." msgstr "Riconnettere la webcam." #: ../src/guvcview.c:430 msgid "" "Guvcview error:\n" "\n" "Couldn't query device capabilities" msgstr "" "Errore di Guvcview:\n" "\n" "Impossibile interrogare le funzionalità del dispositivo" #: ../src/guvcview.c:431 msgid "Make sure the device driver supports v4l2." msgstr "Assicurarsi che il driver del dispositivo supporti v4l2." #: ../src/guvcview.c:435 msgid "" "Guvcview error:\n" "\n" "Read method error" msgstr "" "Errore di Guvcview:\n" "\n" "Errore del metodo di lettura" #: ../src/guvcview.c:436 msgid "Please try mmap instead (--capture_method=1)." msgstr "In alternativa, provare mmap (--capture_method=1)." #: ../src/guvcview.c:444 msgid "" "Guvcview error:\n" "\n" "Unable to allocate Buffers" msgstr "" "Errore di Guvcview:\n" "\n" "Impossibile allocare i buffer" #: ../src/guvcview.c:445 msgid "Please try restarting your system." msgstr "Provare a riavviare il sistema." #: ../src/guvcview.c:490 msgid "Image Controls" msgstr "Controlli dell'immagine" #. image auto capture #: ../src/guvcview.c:533 msgid "Stop Auto (I)" msgstr "Arresto automatico (I)" #: ../src/guvcview.c:644 msgid "" "Guvcview error:\n" "\n" "Unable to create Video Thread" msgstr "" "Errore di Guvcview:\n" "\n" "Impossibile creare un flusso video" #: ../src/guvcview.c:645 msgid "Please report it to http://developer.berlios.de/bugs/?group_id=8179" msgstr "" "Siete pregati di segnalarlo a http://developer.berlios.de/bugs/?group_id=8179" #: ../src/img_controls.c:121 msgid "Auto Focus (continuous)" msgstr "Messa a fuoco automatica (continua)" #: ../src/img_controls.c:122 msgid "set Focus" msgstr "imposta la messa a fuoco" #: ../src/image_format.c:35 msgid "Jpeg (jpg)" msgstr "Jpeg (jpg)" #: ../src/image_format.c:41 msgid "Bitmap (Bmp)" msgstr "Bitmap (Bmp)" #: ../src/image_format.c:47 msgid "Portable Network Graphics (Png)" msgstr "Portable Network Graphics (Png)" #: ../src/image_format.c:53 msgid "Raw Image (raw)" msgstr "Immagine raw (raw)" #. controls menu #: ../src/menubar.c:64 msgid "Settings" msgstr "Impostazioni" #: ../src/menubar.c:67 msgid "Hardware Defaults" msgstr "Ripristina l'hardware di default" #: ../src/menubar.c:75 msgid "Camera Button" msgstr "Pulsante della camera" #: ../src/menubar.c:79 msgid "Capture Image" msgstr "Cattura l'immagine" #: ../src/menubar.c:84 msgid "Capture Video" msgstr "Registra il video" #. video menu #: ../src/menubar.c:144 ../src/video_tab.c:87 msgid "Video" msgstr "Video" #: ../src/menubar.c:145 ../src/menubar.c:231 msgid "File" msgstr "File" #: ../src/menubar.c:146 ../src/menubar.c:232 msgid "Increment Filename" msgstr "Incrementa il nome del file" #: ../src/menubar.c:164 msgid "Video Codec" msgstr "Codec video" #: ../src/menubar.c:187 msgid "Video Codec Properties" msgstr "Proprietà del codec video" #: ../src/menubar.c:194 msgid "Audio Codec" msgstr "Codec audio" #: ../src/menubar.c:215 msgid "Audio Codec Properties" msgstr "Proprietà del codec audio" #. photo menu #: ../src/menubar.c:230 msgid "Photo" msgstr "Foto" #: ../src/options.c:752 msgid "Prints version" msgstr "Visualizza la versione" #: ../src/options.c:753 msgid "Displays debug information" msgstr "Visualizza le informazioni di debug" #: ../src/options.c:754 msgid "Video Device to use [default: /dev/video0]" msgstr "Dispositivo video da utilizzare [predefinito: /dev/video0]" #: ../src/options.c:755 msgid "Exit after adding UVC extension controls (needs root/sudo)" msgstr "" "Uscire dopo aver aggiunto i controlli dell'estensione di UVC (necessita di " "root/sudo)" #: ../src/options.c:756 msgid "Don't stream video (image controls only)" msgstr "Non attivare il flusso video (solo controlli dell'immagine)" #: ../src/options.c:757 msgid "Don't display a GUI" msgstr "Non visualizzare la GUI" #: ../src/options.c:758 msgid "Capture method (1-mmap (default) 2-read)" msgstr "Metodo di registrazione (1-mmap (predefinito) 2-read)" #: ../src/options.c:759 msgid "Configuration file" msgstr "File di configurazione" #: ../src/options.c:760 msgid "Hardware accelaration (enable(1) | disable(0))" msgstr "Accelerazione hardware (abilita(1) | disabilita(0))" #: ../src/options.c:761 msgid "" "Pixel " "format(mjpg|jpeg|yuyv|yvyu|uyvy|yyuv|yu12|yv12|nv12|nv21|nv16|nv61|y41p|grey|" "y10b|y16 |s501|s505|s508|gbrg|grbg|ba81|rggb|bgr3|rgb3)" msgstr "" "Formato del " "pixel(mjpg|jpeg|yuyv|yvyu|uyvy|yyuv|yu12|yv12|nv12|nv21|nv16|nv61|y41p|grey|y" "10b|y16 |s501|s505|s508|gbrg|grbg|ba81|rggb|bgr3|rgb3)" #: ../src/options.c:762 msgid "Frame size, default: 640x480" msgstr "Risoluzione predefinita: 640x480" #: ../src/options.c:763 msgid "Image File name" msgstr "Nome del file immagine" #: ../src/options.c:764 msgid "Image capture interval in seconds" msgstr "Intervallo di registrazione dell'immagine in secondi" #: ../src/options.c:765 msgid "Number of Pictures to capture" msgstr "Numero di immagini da registrare" #: ../src/options.c:766 msgid "Video File name (capture from start)" msgstr "Nome del file video (registra dall'inizio)" #: ../src/options.c:767 msgid "Video capture time (in seconds)" msgstr "Durata della registrazione video (in secondi)" #: ../src/options.c:768 msgid "Exits guvcview after closing video" msgstr "Esci da guvcview dopo aver chiuso il video" #: ../src/options.c:769 msgid "Number of initial frames to skip" msgstr "Numero di immagini iniziali da ignorare" #: ../src/options.c:770 msgid "Show FPS value (enable(1) | disable (0))" msgstr "Mostra il valore degli FPS (abilita(1) | disabilita (0))" #: ../src/options.c:771 msgid "Load Profile at start" msgstr "Carica profilo all'avvio" #: ../src/options.c:777 msgid "- local options" msgstr "- opzioni locali" #. gdk_threads_enter(); #: ../src/timers.c:119 msgid "Cap. Image" msgstr "Cattura immagine" #: ../src/timers.c:217 msgid "Guvcview Warning:" msgstr "Avviso di Guvcview:" #: ../src/timers.c:217 msgid "Not enough free space left on disk" msgstr "Spazio libero sul disco insufficiente" #: ../src/v4l2_controls.c:711 msgid "Left" msgstr "Sinistra" #: ../src/v4l2_controls.c:712 msgid "Right" msgstr "Destra" #: ../src/v4l2_controls.c:716 msgid "Down" msgstr "Sotto" #: ../src/v4l2_controls.c:717 msgid "Up" msgstr "Sopra" #: ../src/v4l2_controls.c:762 msgid "Off" msgstr "Spento" #: ../src/v4l2_controls.c:762 msgid "On" msgstr "Acceso" #: ../src/v4l2_controls.c:762 msgid "Blinking" msgstr "Lampeggiante" #: ../src/v4l2_controls.c:762 msgid "Auto" msgstr "Automatico" #. turn it into a menu control #: ../src/v4l2_controls.c:813 msgid "8 bit" msgstr "8 bit" #: ../src/v4l2_controls.c:813 msgid "12 bit" msgstr "12 bit" #: ../src/v4l2_dyna_ctrls.c:96 msgid "Pan (relative)" msgstr "Panoramica (relativa)" #: ../src/v4l2_dyna_ctrls.c:109 msgid "Tilt (relative)" msgstr "Inclinazione (relativa)" #: ../src/v4l2_dyna_ctrls.c:122 msgid "Pan Reset" msgstr "Ripristina la panoramica" #: ../src/v4l2_dyna_ctrls.c:135 msgid "Tilt Reset" msgstr "Ripristina l'inclinazione" #: ../src/v4l2_dyna_ctrls.c:148 msgid "Focus (absolute)" msgstr "Messa a fuoco (assoluta)" #: ../src/v4l2_dyna_ctrls.c:161 msgid "LED1 Mode" msgstr "Modalità LED1" #: ../src/v4l2_dyna_ctrls.c:174 msgid "LED1 Frequency" msgstr "Frequenza LED1" #: ../src/v4l2_dyna_ctrls.c:187 msgid "Disable video processing" msgstr "Disabilita l'elaborazione video" #: ../src/v4l2_dyna_ctrls.c:200 msgid "Raw bits per pixel" msgstr "Raw bit per pixel" #. needed only for language files (not used) #. V4L2 control strings #: ../src/v4l2uvc.c:56 msgid "User Controls" msgstr "Controlli dell'utente" #: ../src/v4l2uvc.c:57 msgid "Brightness" msgstr "Luminosità" #: ../src/v4l2uvc.c:58 msgid "Contrast" msgstr "Contrasto" #: ../src/v4l2uvc.c:59 msgid "Hue" msgstr "Colore" #: ../src/v4l2uvc.c:60 msgid "Saturation" msgstr "Saturazione" #: ../src/v4l2uvc.c:61 msgid "Sharpness" msgstr "Nitidezza" #: ../src/v4l2uvc.c:62 msgid "Gamma" msgstr "Gamma" #: ../src/v4l2uvc.c:63 msgid "Backlight Compensation" msgstr "Compensazione del controluce" #: ../src/v4l2uvc.c:64 msgid "Power Line Frequency" msgstr "Frequenza di aggiornamento" #: ../src/v4l2uvc.c:65 msgid "Hue, Automatic" msgstr "Colore automatico" #: ../src/v4l2uvc.c:66 msgid "Focus, Auto" msgstr "Messa a fuoco automatica" #: ../src/v4l2uvc.c:67 msgid "Manual Mode" msgstr "Modalità manuale" #: ../src/v4l2uvc.c:68 msgid "Auto Mode" msgstr "Modalità automatica" #: ../src/v4l2uvc.c:69 msgid "Shutter Priority Mode" msgstr "Modalità di priorità dell'otturatore" #: ../src/v4l2uvc.c:70 msgid "Aperture Priority Mode" msgstr "Modalità di priorità dell'apertura" #: ../src/v4l2uvc.c:71 msgid "Black Level" msgstr "Livello del nero" #: ../src/v4l2uvc.c:72 msgid "White Balance, Automatic" msgstr "Bilanciamento automatico del bianco" #: ../src/v4l2uvc.c:73 msgid "Do White Balance" msgstr "Bilanciamento del bianco" #: ../src/v4l2uvc.c:74 msgid "Red Balance" msgstr "Bilanciamento del rosso" #: ../src/v4l2uvc.c:75 msgid "Blue Balance" msgstr "Bilanciamento del blu" #: ../src/v4l2uvc.c:76 msgid "Exposure" msgstr "Esposizione" #: ../src/v4l2uvc.c:77 msgid "Gain, Automatic" msgstr "Guadagno automatico" #: ../src/v4l2uvc.c:78 msgid "Gain" msgstr "Guadagno" #: ../src/v4l2uvc.c:79 msgid "Horizontal Flip" msgstr "Rifletti orizzontalmente" #: ../src/v4l2uvc.c:80 msgid "Vertical Flip" msgstr "Rifletti verticalmente" #: ../src/v4l2uvc.c:81 msgid "Horizontal Center" msgstr "Centra orizzontalmente" #: ../src/v4l2uvc.c:82 msgid "Vertical Center" msgstr "Centra verticalmente" #: ../src/v4l2uvc.c:83 msgid "Chroma AGC" msgstr "Chroma AGC" #: ../src/v4l2uvc.c:84 msgid "Color Killer" msgstr "Killer del colore" #: ../src/v4l2uvc.c:85 msgid "Color Effects" msgstr "Effetti del colore" #. CAMERA CLASS control strings #: ../src/v4l2uvc.c:88 msgid "Camera Controls" msgstr "Controlli della webcam" #: ../src/v4l2uvc.c:89 msgid "Auto Exposure" msgstr "Esposizione automatica" #: ../src/v4l2uvc.c:90 msgid "Exposure Time, Absolute" msgstr "Tempo di esposizione assoluto" #: ../src/v4l2uvc.c:91 msgid "Exposure, Dynamic Framerate" msgstr "Esposizione, framerate dinamico" #: ../src/v4l2uvc.c:92 msgid "Pan, Relative" msgstr "Panoramica relativa" #: ../src/v4l2uvc.c:93 msgid "Tilt, Relative" msgstr "Inclinazione relativa" #: ../src/v4l2uvc.c:94 msgid "Pan, Reset" msgstr "Ripristina la panoramica" #: ../src/v4l2uvc.c:95 msgid "Tilt, Reset" msgstr "Ripristina l'inclinazione" #: ../src/v4l2uvc.c:96 msgid "Pan, Absolute" msgstr "Panoramica assoluta" #: ../src/v4l2uvc.c:98 msgid "Focus, Absolute" msgstr "Messa a fuoco assoluta" #: ../src/v4l2uvc.c:99 msgid "Focus, Relative" msgstr "Messa a fuoco relativa" #: ../src/v4l2uvc.c:100 msgid "Focus, Automatic" msgstr "Messa a fuoco automatica" #: ../src/v4l2uvc.c:101 msgid "Zoom, Absolute" msgstr "Zoom assoluto" #: ../src/v4l2uvc.c:102 msgid "Zoom, Relative" msgstr "Zoom relativo" #: ../src/v4l2uvc.c:103 msgid "Zoom, Continuous" msgstr "Zoom continuo" #: ../src/v4l2uvc.c:104 msgid "Privacy" msgstr "Privacy" #. UVC specific control strings #: ../src/v4l2uvc.c:107 msgid "Exposure, Auto" msgstr "Esposizione automatica" #: ../src/v4l2uvc.c:108 msgid "Exposure, Auto Priority" msgstr "Esposizione, priorità automatica" #: ../src/v4l2uvc.c:109 msgid "Exposure (Absolute)" msgstr "Esposizione (assoluta)" #: ../src/v4l2uvc.c:110 msgid "White Balance Temperature, Auto" msgstr "Bilanciamento del bianco automatico" #: ../src/v4l2uvc.c:111 msgid "White Balance Temperature" msgstr "Bilanciamento del bianco" #: ../src/v4l2uvc.c:112 msgid "White Balance Component, Auto" msgstr "Bilanciamento dei componenti del bianco automatico" #: ../src/v4l2uvc.c:113 msgid "White Balance Blue Component" msgstr "Bilanciamento del bianco, canale blu" #: ../src/v4l2uvc.c:114 msgid "White Balance Red Component" msgstr "Bilanciamento del bianco, canale rosso" #. libwebcam specific control strings #: ../src/v4l2uvc.c:117 msgid "Focus" msgstr "Messa a fuoco" #: ../src/v4l2uvc.c:118 msgid "Focus (Absolute)" msgstr "Messa a fuoco (assoluta)" #: ../src/vcodecs.c:63 msgid "MJPG - compressed" msgstr "MJPG - compresso" #: ../src/vcodecs.c:99 msgid "YUY2 - uncomp YUV" msgstr "YUY2 - YUV non compresso" #: ../src/vcodecs.c:135 msgid "RGB - uncomp BMP" msgstr "RGB - BMP non compresso" #: ../src/vcodecs.c:171 msgid "MPEG video 1" msgstr "MPEG video 1" #: ../src/vcodecs.c:207 msgid "FLV1 - flash video 1" msgstr "FLV1 - flash video 1" #: ../src/vcodecs.c:243 msgid "WMV1 - win. med. video 7" msgstr "WMV1 - win. med. video 7" #: ../src/vcodecs.c:279 msgid "MPG2 - MPG2 format" msgstr "MPG2 - formato MPG2" #: ../src/vcodecs.c:315 msgid "MS MP4 V3" msgstr "MS MP4 V3" #: ../src/vcodecs.c:351 msgid "MPEG4-ASP" msgstr "MPEG4-ASP" #: ../src/vcodecs.c:387 msgid "MPEG4-AVC (H264)" msgstr "MPEG4-AVC (H264)" #: ../src/vcodecs.c:427 msgid "VP8 (VP8)" msgstr "VP8 (VP8)" #: ../src/vcodecs.c:463 msgid "Theora (ogg theora)" msgstr "Theora (ogg theora)" #: ../src/video_format.c:43 msgid "AVI - avi format" msgstr "AVI - formato avi" #: ../src/video_format.c:52 msgid "MKV - Matroska format" msgstr "MKV - formato Matroska" #: ../src/video_format.c:61 msgid "WEBM - format" msgstr "WEBM - formato WEBM" #: ../src/video_tab.c:208 msgid "Frame Rate:" msgstr "Frame rate:" #: ../src/video_tab.c:215 msgid " Show" msgstr " Visualizza" #: ../src/video_tab.c:237 msgid "Resolution:" msgstr "Risoluzione:" #: ../src/video_tab.c:263 msgid "Camera Output:" msgstr "Uscita della webcam:" #: ../src/video_tab.c:285 msgid "Apply" msgstr "Applica" #: ../src/video_tab.c:292 msgid "Quality:" msgstr "Qualità:" #: ../src/video_tab.c:302 msgid "---- Video Filters ----" msgstr "---- Filtri video ----" #. Mirror #: ../src/video_tab.c:321 msgid " Mirror" msgstr " Specchio" #. Upturn #: ../src/video_tab.c:332 msgid " Invert" msgstr " Inverti" #. Negate #: ../src/video_tab.c:343 msgid " Negative" msgstr " Negativo" #. Mono #: ../src/video_tab.c:354 msgid " Mono" msgstr " Monocromatico" #. Pieces #: ../src/video_tab.c:366 msgid " Pieces" msgstr " Pezzi" #. Particles #: ../src/video_tab.c:378 msgid " Particles" msgstr " Particelle" guvcview-src-1.7.1/po/fr.po0000664000175000017500000005417012173235416014570 0ustar paulopaulo# translation of fr.po to Portuguese # translation of guvcview to French # Copyright (C) 2008 Paulo Assis # This file is distributed under the same license as the guvcview package. # guvcview , 2008. # Paulo Assis , 2008. # # msgid "" msgstr "" "Project-Id-Version: fr\n" "Report-Msgid-Bugs-To: pj.assis@gmail.com\n" "POT-Creation-Date: 2013-07-16 12:53+0000\n" "PO-Revision-Date: 2013-02-25 05:33+0000\n" "Last-Translator: Paulo Assis \n" "Language-Team: Portuguese \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2013-07-22 13:32+0000\n" "X-Generator: Launchpad (build 16696)\n" "Language: pt\n" #: ../data/guvcview.desktop.in.in.h:1 msgid "guvcview" msgstr "guvcview" #: ../data/guvcview.desktop.in.in.h:2 msgid "GTK UVC video viewer" msgstr "Logiciel GTK de visualisation de vidéo UVC" #: ../data/guvcview.desktop.in.in.h:3 msgid "A video viewer and capturer for the linux uvc driver" msgstr "" "Logiciel de visualisation et de capture vidéo pour le pilote uvc Linux" #: ../src/acodecs.c:59 msgid "PCM - uncompressed (16 bit)" msgstr "PCM - non compressé (16 bit)" #: ../src/acodecs.c:76 msgid "MPEG2 - (lavc)" msgstr "MPEG2 - (lavc)" #: ../src/acodecs.c:93 msgid "MP3 - (lavc)" msgstr "MP3 - (lavc)" #: ../src/acodecs.c:110 msgid "Dolby AC3 - (lavc)" msgstr "Dolby AC3 - (lavc)" #: ../src/acodecs.c:127 msgid "ACC Low - (faac)" msgstr "AAC Low - (faac)" #: ../src/acodecs.c:144 msgid "Vorbis" msgstr "" #: ../src/audio_tab.c:80 msgid "Audio" msgstr "Audio" #: ../src/audio_tab.c:98 msgid " Sound" msgstr " Son" #. VU meter on the image (OSD) #: ../src/audio_tab.c:109 msgid " Show VU meter" msgstr " Afficher le VU-mètre" #: ../src/audio_tab.c:121 msgid "Audio API:" msgstr "Audio API:" #: ../src/audio_tab.c:132 msgid "PORTAUDIO" msgstr "PORTAUDIO" #: ../src/audio_tab.c:133 msgid "PULSEAUDIO" msgstr "PULSEAUDIO" #: ../src/audio_tab.c:149 ../src/audio_tab.c:172 msgid "Input Device:" msgstr "Périphérique d'Entrée:" #: ../src/audio_tab.c:182 ../src/audio_tab.c:214 msgid "Dev. Default" msgstr "Valeur par Défaut" #: ../src/audio_tab.c:204 msgid "Sample Rate:" msgstr "Taux d'échantillonage:" #: ../src/audio_tab.c:215 msgid "1 - mono" msgstr "1 - mono" #: ../src/audio_tab.c:216 msgid "2 - stereo" msgstr "2 - stéréo" #: ../src/audio_tab.c:251 msgid "Channels:" msgstr "Canaux:" #: ../src/audio_tab.c:302 msgid "---- Audio Effects ----" msgstr "---- Effets Audio ----" #. Echo #: ../src/audio_tab.c:321 msgid " Echo" msgstr " Echo" #. FUZZ #: ../src/audio_tab.c:332 msgid " Fuzz" msgstr " Bruit" #. Reverb #: ../src/audio_tab.c:344 msgid " Reverb" msgstr " Reverb" #. WahWah #: ../src/audio_tab.c:356 msgid " WahWah" msgstr " WahWah" #. Ducky #: ../src/audio_tab.c:368 msgid " Ducky" msgstr " Canard" #: ../src/callbacks.c:108 msgid "Error" msgstr "Erreur" #: ../src/callbacks.c:132 msgid "" "\n" "You have more than one video device installed.\n" "Do you want to try another one ?\n" msgstr "" "\n" "Vous avez plus d'un périphérique vidéo installé.\n" "Voulez-vous en essayer un autre ?\n" #. Devices #: ../src/callbacks.c:139 ../src/video_tab.c:103 msgid "Device:" msgstr "Périphérique d'Entrée:" #: ../src/callbacks.c:271 msgid "Save File" msgstr "Enregistrer le Fichier" #: ../src/callbacks.c:283 msgid "File Format:" msgstr "" #: ../src/callbacks.c:454 msgid "codec values" msgstr "valeurs codec" #: ../src/callbacks.c:465 msgid "" " encoder fps: \n" " (0 - use fps combobox value)" msgstr "" " encodeur ips: \n" " (0 - utilise la valeur ips de la combobox)" #: ../src/callbacks.c:478 msgid " monotonic pts" msgstr " Pts monotones" #. bit rate #: ../src/callbacks.c:485 ../src/callbacks.c:808 msgid "bit rate: " msgstr "bit rate : " #: ../src/callbacks.c:498 msgid "qmax: " msgstr "qmax : " #: ../src/callbacks.c:511 msgid "qmin: " msgstr "qmin : " #: ../src/callbacks.c:524 msgid "max. qdiff: " msgstr "qdiff max.: " #: ../src/callbacks.c:537 msgid "dia size: " msgstr "taille dia: " #: ../src/callbacks.c:550 msgid "pre dia size: " msgstr "taille pre dia: " #: ../src/callbacks.c:563 msgid "pre me: " msgstr "pre me: " #: ../src/callbacks.c:576 msgid "pre cmp: " msgstr "pre cmp: " #: ../src/callbacks.c:589 msgid "cmp: " msgstr "cmp: " #: ../src/callbacks.c:602 msgid "sub cmp: " msgstr "sous cmp: " #: ../src/callbacks.c:615 msgid "last predictor count: " msgstr "compte du dernier indicateur: " #: ../src/callbacks.c:628 msgid "gop size: " msgstr "taille gop: " #: ../src/callbacks.c:641 msgid "qcompress: " msgstr "qcompress: " #: ../src/callbacks.c:654 msgid "qblur: " msgstr "qblur: " #: ../src/callbacks.c:667 msgid "subq: " msgstr "subq: " #: ../src/callbacks.c:680 msgid "framerefs: " msgstr "framerefs: " #: ../src/callbacks.c:693 msgid "me method: " msgstr "méthode me: " #: ../src/callbacks.c:706 msgid "mb decision: " msgstr "décision mb: " #: ../src/callbacks.c:719 msgid "max B frames: " msgstr "nombre max d'images B: " #: ../src/callbacks.c:732 msgid "num threads: " msgstr "nb threads: " #: ../src/callbacks.c:795 msgid "audio codec values" msgstr "valeurs du codec audio" #. sample format #: ../src/callbacks.c:822 msgid "sample format: " msgstr "" #: ../src/callbacks.c:1250 msgid "start new" msgstr "commencez nouveau" #: ../src/callbacks.c:1253 msgid "restart" msgstr "Redémarrer l'application" #: ../src/callbacks.c:1255 msgid "new" msgstr "nouveau" #: ../src/callbacks.c:1257 msgid "cancel" msgstr "Annuler" #: ../src/callbacks.c:1262 msgid "" "launch new process or restart?.\n" "\n" msgstr "" "nouveau processus ou redémarrage?\n" "\n" #: ../src/callbacks.c:1716 ../src/guvcview.c:537 msgid "Cap. Image (I)" msgstr "Enr. Image (I)" #. disable image controls #: ../src/callbacks.c:1727 ../src/guvcview.c:658 ../src/timers.c:101 msgid "capturing photo to" msgstr "" #: ../src/callbacks.c:1786 ../src/guvcview.c:547 msgid "Cap. Video (V)" msgstr "Enr. Video (V)" #: ../src/callbacks.c:1812 ../src/guvcview.c:708 msgid "capturing video to" msgstr "" #. vid capture enabled from start #: ../src/callbacks.c:1845 ../src/guvcview.c:542 msgid "Stop Video (V)" msgstr "Arrêter la vidéo (V)" #: ../src/callbacks.c:1901 ../src/menubar.c:66 msgid "Save Profile" msgstr "" #: ../src/callbacks.c:1914 ../src/menubar.c:65 msgid "Load Profile" msgstr "" #: ../src/create_video.c:1016 ../src/guvcview.c:700 msgid "Cap. Video" msgstr "Enr. Video" #: ../src/guvcview.c:279 msgid "Guvcview Video Capture" msgstr "Capture de vidéo Guvcview" #: ../src/guvcview.c:291 msgid "GUVCViewer Controls" msgstr "Réglages GUVCViewer" #. can't open device #: ../src/guvcview.c:336 msgid "" "Guvcview error:\n" "\n" "Unable to open device" msgstr "" "Erreur de Guvcview :\n" "\n" "Incapable d'accéder au périphérique" #: ../src/guvcview.c:337 msgid "" "Please make sure the camera is connected\n" "and that the correct driver is installed." msgstr "" "Svp, assurez-vous que le périphérique est connecté\n" "et que le pilote est installé." #. uvc extension controls OK, give warning and shutdown (called with --add_ctrls) #: ../src/guvcview.c:342 msgid "" "Guvcview:\n" "\n" "UVC Extension controls" msgstr "" "Guvcview :\n" "\n" "Contrôles de l'extension UVC" #: ../src/guvcview.c:343 msgid "Extension controls were added to the UVC driver" msgstr "Les contrôles de l'extension ont été ajoutés au pilote UVC" #. uvc extension controls error - EACCES (needs root user) #: ../src/guvcview.c:350 msgid "" "Guvcview error:\n" "\n" "UVC Extension controls" msgstr "" "Erreur de Guvcview :\n" "\n" "Contrôles de l'extension UVC" #: ../src/guvcview.c:351 msgid "" "An error occurred while adding extension\n" "controls to the UVC driver\n" "Make sure you run guvcview as root (or sudo)." msgstr "" "Une erreur est survenue lors de l'ajout \n" "des contrôles d'extension du pilote UVC.\n" "Assurez-vous d'avoir lancé guvcview \n" "en tant qu'utilisateur root (ou sudo)." #: ../src/guvcview.c:377 ../src/guvcview.c:455 msgid "" "Guvcview error:\n" "\n" "Can't set a valid video stream for guvcview" msgstr "" "Erreur de Gubcview :\n" "\n" "Incapable de gérer le flux vidéo" #: ../src/guvcview.c:378 ../src/guvcview.c:456 msgid "" "Make sure your device driver is v4l2 compliant\n" "and that it is properly installed." msgstr "" "Vérifiez que vous avez un pilote compatible v4l2\n" "et qu'il est correctement installé." #: ../src/guvcview.c:400 ../src/guvcview.c:422 msgid "" "Guvcview error:\n" "\n" "Unable to start with minimum setup" msgstr "" "Erreur de Guvcview :\n" "\n" "Incapable de démarrer avec des réglages minimum" #: ../src/guvcview.c:401 ../src/guvcview.c:423 msgid "Please reconnect your camera." msgstr "Veuillez rebrancher votre périphérique." #: ../src/guvcview.c:430 msgid "" "Guvcview error:\n" "\n" "Couldn't query device capabilities" msgstr "" "Erreur de Guvcview:\n" "\n" "Incapable d'accéder au périphérique" #: ../src/guvcview.c:431 msgid "Make sure the device driver supports v4l2." msgstr "Veuillez vérifier que le driver du matériel supporte V4L2." #: ../src/guvcview.c:435 msgid "" "Guvcview error:\n" "\n" "Read method error" msgstr "" "Erreur de Gubvcviewr :\n" "\n" "erreur de lecteure" #: ../src/guvcview.c:436 msgid "Please try mmap instead (--capture_method=1)." msgstr "Veuillez essayer mmap (--capture_method=1) à la place." #: ../src/guvcview.c:444 msgid "" "Guvcview error:\n" "\n" "Unable to allocate Buffers" msgstr "" "Erreur de Guvcview:\n" "\n" "Incapable d'assigner des tampons mémoires" #: ../src/guvcview.c:445 msgid "Please try restarting your system." msgstr "Veuillez essayer de redémarrer votre système." #: ../src/guvcview.c:490 msgid "Image Controls" msgstr "Réglages de l'image" #. image auto capture #: ../src/guvcview.c:533 msgid "Stop Auto (I)" msgstr "Arrêt Automatique (I)" #: ../src/guvcview.c:644 msgid "" "Guvcview error:\n" "\n" "Unable to create Video Thread" msgstr "" "Erreur de Gubcview :\n" "\n" "Incapable de créer le flux vidéo" #: ../src/guvcview.c:645 msgid "Please report it to http://developer.berlios.de/bugs/?group_id=8179" msgstr "" "Veuillez le reporter à http://developer.berlios.de/bugs/?group_id=8179" #: ../src/img_controls.c:121 msgid "Auto Focus (continuous)" msgstr "Mise au Point (continu)" #: ../src/img_controls.c:122 msgid "set Focus" msgstr "Mise au Point" #: ../src/image_format.c:35 msgid "Jpeg (jpg)" msgstr "" #: ../src/image_format.c:41 msgid "Bitmap (Bmp)" msgstr "" #: ../src/image_format.c:47 msgid "Portable Network Graphics (Png)" msgstr "" #: ../src/image_format.c:53 msgid "Raw Image (raw)" msgstr "" #. controls menu #: ../src/menubar.c:64 msgid "Settings" msgstr "" #: ../src/menubar.c:67 msgid "Hardware Defaults" msgstr "" #: ../src/menubar.c:75 msgid "Camera Button" msgstr "" #: ../src/menubar.c:79 msgid "Capture Image" msgstr "" #: ../src/menubar.c:84 msgid "Capture Video" msgstr "" #. video menu #: ../src/menubar.c:144 ../src/video_tab.c:87 msgid "Video" msgstr "" #: ../src/menubar.c:145 ../src/menubar.c:231 msgid "File" msgstr "" #: ../src/menubar.c:146 ../src/menubar.c:232 msgid "Increment Filename" msgstr "" #: ../src/menubar.c:164 msgid "Video Codec" msgstr "" #: ../src/menubar.c:187 msgid "Video Codec Properties" msgstr "" #: ../src/menubar.c:194 msgid "Audio Codec" msgstr "" #: ../src/menubar.c:215 msgid "Audio Codec Properties" msgstr "" #. photo menu #: ../src/menubar.c:230 msgid "Photo" msgstr "" #: ../src/options.c:752 msgid "Prints version" msgstr "Affiche la version" #: ../src/options.c:753 msgid "Displays debug information" msgstr "Afficher information extra" #: ../src/options.c:754 msgid "Video Device to use [default: /dev/video0]" msgstr "Périphérique video (défaut: /dev/video0)" #: ../src/options.c:755 msgid "Exit after adding UVC extension controls (needs root/sudo)" msgstr "" "Quitter après avoir ajouter les contrôles d'extension (nécessite root/sudo)" #: ../src/options.c:756 msgid "Don't stream video (image controls only)" msgstr "Ne pas activer le flux vidéo (seulement contrôle d'image)" #: ../src/options.c:757 msgid "Don't display a GUI" msgstr "Ne pas afficher d'interface graphique" #: ../src/options.c:758 msgid "Capture method (1-mmap (default) 2-read)" msgstr "Méthode de capture (1-mmap (par défaut) 2-read)" #: ../src/options.c:759 msgid "Configuration file" msgstr "Fichier de configuration" #: ../src/options.c:760 msgid "Hardware accelaration (enable(1) | disable(0))" msgstr "Accel. matérielle (activer(1) | desactiver(0))" #: ../src/options.c:761 msgid "" "Pixel " "format(mjpg|jpeg|yuyv|yvyu|uyvy|yyuv|yu12|yv12|nv12|nv21|nv16|nv61|y41p|grey|" "y10b|y16 |s501|s505|s508|gbrg|grbg|ba81|rggb|bgr3|rgb3)" msgstr "" "Format " "matriciel(mjpg|jpeg|yuyv|yvyu|uyvy|yyuv|yu12|yv12|nv12|nv21|nv16|nv61|y41p|gr" "ey|y10b|y16 |s501|s505|s508|gbrg|grbg|ba81|rggb|bgr3|rgb3)" #: ../src/options.c:762 msgid "Frame size, default: 640x480" msgstr "Résolution, défaut: 640x480" #: ../src/options.c:763 msgid "Image File name" msgstr "Ficher Image" #: ../src/options.c:764 msgid "Image capture interval in seconds" msgstr "Interval d'enr. des images (secondes)" #: ../src/options.c:765 msgid "Number of Pictures to capture" msgstr "Nombre d'images à enregistrer" #: ../src/options.c:766 msgid "Video File name (capture from start)" msgstr "Fichier video (enr. de début)" #: ../src/options.c:767 msgid "Video capture time (in seconds)" msgstr "Durée de l'enr. video (secondes)" #: ../src/options.c:768 msgid "Exits guvcview after closing video" msgstr "Quitte guvcview après avoir fermé la vidéo" #: ../src/options.c:769 msgid "Number of initial frames to skip" msgstr "Nombre d'images initiales à sauter" #: ../src/options.c:770 msgid "Show FPS value (enable(1) | disable (0))" msgstr "Afficher img/sec (activer(1) | desactiver(0))" #: ../src/options.c:771 msgid "Load Profile at start" msgstr "Charger réglages personnalisés" #: ../src/options.c:777 msgid "- local options" msgstr "- options locales" #. gdk_threads_enter(); #: ../src/timers.c:119 msgid "Cap. Image" msgstr "Enr. Image" #: ../src/timers.c:217 msgid "Guvcview Warning:" msgstr "Avertissement Guvcview :" #: ../src/timers.c:217 msgid "Not enough free space left on disk" msgstr "Il ne reste pas assez d'espace libre sur le disque" #: ../src/v4l2_controls.c:711 msgid "Left" msgstr "Gauche" #: ../src/v4l2_controls.c:712 msgid "Right" msgstr "Droite" #: ../src/v4l2_controls.c:716 msgid "Down" msgstr "Bas" #: ../src/v4l2_controls.c:717 msgid "Up" msgstr "Haut" #: ../src/v4l2_controls.c:762 msgid "Off" msgstr "Désactivé" #: ../src/v4l2_controls.c:762 msgid "On" msgstr "Activé" #: ../src/v4l2_controls.c:762 msgid "Blinking" msgstr "Clignotement" #: ../src/v4l2_controls.c:762 msgid "Auto" msgstr "Automatique" #. turn it into a menu control #: ../src/v4l2_controls.c:813 msgid "8 bit" msgstr "8 bit" #: ../src/v4l2_controls.c:813 msgid "12 bit" msgstr "12 bit" #: ../src/v4l2_dyna_ctrls.c:96 msgid "Pan (relative)" msgstr "Rotation Horizontale (valeur relative)" #: ../src/v4l2_dyna_ctrls.c:109 msgid "Tilt (relative)" msgstr "Rotation Verticale (valeur relative)" #: ../src/v4l2_dyna_ctrls.c:122 msgid "Pan Reset" msgstr "Rotation Horizontale (remise à zero)" #: ../src/v4l2_dyna_ctrls.c:135 msgid "Tilt Reset" msgstr "Rotation Verticale (remise à zero)" #: ../src/v4l2_dyna_ctrls.c:148 msgid "Focus (absolute)" msgstr "Mise au Point (valeur absolue)" #: ../src/v4l2_dyna_ctrls.c:161 msgid "LED1 Mode" msgstr "Mode DEL1" #: ../src/v4l2_dyna_ctrls.c:174 msgid "LED1 Frequency" msgstr "Fréquence DEL1" #: ../src/v4l2_dyna_ctrls.c:187 msgid "Disable video processing" msgstr "Désactiver le post-traitement vidéo" #: ../src/v4l2_dyna_ctrls.c:200 msgid "Raw bits per pixel" msgstr "Données brutes par pixel" #. needed only for language files (not used) #. V4L2 control strings #: ../src/v4l2uvc.c:56 msgid "User Controls" msgstr "Raccourcis claviers" #: ../src/v4l2uvc.c:57 msgid "Brightness" msgstr "Luminosité" #: ../src/v4l2uvc.c:58 msgid "Contrast" msgstr "Contraste" #: ../src/v4l2uvc.c:59 msgid "Hue" msgstr "Teinte" #: ../src/v4l2uvc.c:60 msgid "Saturation" msgstr "Saturation" #: ../src/v4l2uvc.c:61 msgid "Sharpness" msgstr "Netteté" #: ../src/v4l2uvc.c:62 msgid "Gamma" msgstr "Gamma" #: ../src/v4l2uvc.c:63 msgid "Backlight Compensation" msgstr "Correction de contre-jour" #: ../src/v4l2uvc.c:64 msgid "Power Line Frequency" msgstr "Fréquence de rafraîchissement" #: ../src/v4l2uvc.c:65 msgid "Hue, Automatic" msgstr "Teinte, Automatique" #: ../src/v4l2uvc.c:66 msgid "Focus, Auto" msgstr "Mise au Point Automatique" #: ../src/v4l2uvc.c:67 msgid "Manual Mode" msgstr "Mode Manuel" #: ../src/v4l2uvc.c:68 msgid "Auto Mode" msgstr "Mode Auto" #: ../src/v4l2uvc.c:69 msgid "Shutter Priority Mode" msgstr "Mode Priorité Vitesse" #: ../src/v4l2uvc.c:70 msgid "Aperture Priority Mode" msgstr "Mode Priorité Ouverture" #: ../src/v4l2uvc.c:71 msgid "Black Level" msgstr "Niveau de noir" #: ../src/v4l2uvc.c:72 msgid "White Balance, Automatic" msgstr "Balance des blancs, Automatique" #: ../src/v4l2uvc.c:73 msgid "Do White Balance" msgstr "Régler la balance des blancs" #: ../src/v4l2uvc.c:74 msgid "Red Balance" msgstr "Balance des rouges" #: ../src/v4l2uvc.c:75 msgid "Blue Balance" msgstr "Balance des bleus" #: ../src/v4l2uvc.c:76 msgid "Exposure" msgstr "Exposition" #: ../src/v4l2uvc.c:77 msgid "Gain, Automatic" msgstr "Gain, Automatique" #: ../src/v4l2uvc.c:78 msgid "Gain" msgstr "Gain" #: ../src/v4l2uvc.c:79 msgid "Horizontal Flip" msgstr "Miroir horizontal" #: ../src/v4l2uvc.c:80 msgid "Vertical Flip" msgstr "Miroir vertical" #: ../src/v4l2uvc.c:81 msgid "Horizontal Center" msgstr "Centré Horizontalement" #: ../src/v4l2uvc.c:82 msgid "Vertical Center" msgstr "Centrer verticalement" #: ../src/v4l2uvc.c:83 msgid "Chroma AGC" msgstr "Chroma CAG" #: ../src/v4l2uvc.c:84 msgid "Color Killer" msgstr "Tueur de couleur" #: ../src/v4l2uvc.c:85 msgid "Color Effects" msgstr "Effets de couleur" #. CAMERA CLASS control strings #: ../src/v4l2uvc.c:88 msgid "Camera Controls" msgstr "Commande de la caméra" #: ../src/v4l2uvc.c:89 msgid "Auto Exposure" msgstr "Exposition automatique" #: ../src/v4l2uvc.c:90 msgid "Exposure Time, Absolute" msgstr "Temps d'exposition, Absolu" #: ../src/v4l2uvc.c:91 msgid "Exposure, Dynamic Framerate" msgstr "Exposition, Nombre d'images par seconde dynamique" #: ../src/v4l2uvc.c:92 msgid "Pan, Relative" msgstr "Panoramique, Relatif" #: ../src/v4l2uvc.c:93 msgid "Tilt, Relative" msgstr "Inclinaison, Relatif" #: ../src/v4l2uvc.c:94 msgid "Pan, Reset" msgstr "Panoramique, Remise à zéro" #: ../src/v4l2uvc.c:95 msgid "Tilt, Reset" msgstr "Inclinaison, Remise à zéro" #: ../src/v4l2uvc.c:96 msgid "Pan, Absolute" msgstr "Panoramique, Absolu" #: ../src/v4l2uvc.c:98 msgid "Focus, Absolute" msgstr "Focale, Absolu" #: ../src/v4l2uvc.c:99 msgid "Focus, Relative" msgstr "Focale, Relatif" #: ../src/v4l2uvc.c:100 msgid "Focus, Automatic" msgstr "Focale, Automatique" #: ../src/v4l2uvc.c:101 msgid "Zoom, Absolute" msgstr "Zoom, Absolu" #: ../src/v4l2uvc.c:102 msgid "Zoom, Relative" msgstr "Zoom, Relatif" #: ../src/v4l2uvc.c:103 msgid "Zoom, Continuous" msgstr "Zoom, Continu" #: ../src/v4l2uvc.c:104 msgid "Privacy" msgstr "Confidentialité" #. UVC specific control strings #: ../src/v4l2uvc.c:107 msgid "Exposure, Auto" msgstr "Exposition, Auto" #: ../src/v4l2uvc.c:108 msgid "Exposure, Auto Priority" msgstr "Exposition, mode automatique" #: ../src/v4l2uvc.c:109 msgid "Exposure (Absolute)" msgstr "Exposition (valeur absolue)" #: ../src/v4l2uvc.c:110 msgid "White Balance Temperature, Auto" msgstr "Balance des blancs, Auto" #: ../src/v4l2uvc.c:111 msgid "White Balance Temperature" msgstr "Balance des blancs" #: ../src/v4l2uvc.c:112 msgid "White Balance Component, Auto" msgstr "Balance des blancs par canal, Auto" #: ../src/v4l2uvc.c:113 msgid "White Balance Blue Component" msgstr "Balance des Blancs, Canal Bleu" #: ../src/v4l2uvc.c:114 msgid "White Balance Red Component" msgstr "Balance des Blancs, Canal Rouge" #. libwebcam specific control strings #: ../src/v4l2uvc.c:117 msgid "Focus" msgstr "Mise au point" #: ../src/v4l2uvc.c:118 msgid "Focus (Absolute)" msgstr "Mise au point (Absolue)" #: ../src/vcodecs.c:63 msgid "MJPG - compressed" msgstr "MJPG - compressé" #: ../src/vcodecs.c:99 msgid "YUY2 - uncomp YUV" msgstr "YUY2 - YUV non compressé" #: ../src/vcodecs.c:135 msgid "RGB - uncomp BMP" msgstr "RVB - BMP non compressé" #: ../src/vcodecs.c:171 msgid "MPEG video 1" msgstr "MPEG video 1" #: ../src/vcodecs.c:207 msgid "FLV1 - flash video 1" msgstr "FLV1 - flash video 1" #: ../src/vcodecs.c:243 msgid "WMV1 - win. med. video 7" msgstr "WMV1 - wind. med. video 7" #: ../src/vcodecs.c:279 msgid "MPG2 - MPG2 format" msgstr "MPG2 - Mpeg video 2" #: ../src/vcodecs.c:315 msgid "MS MP4 V3" msgstr "MP4 - MS Mpeg 4 V3" #: ../src/vcodecs.c:351 msgid "MPEG4-ASP" msgstr "MPEG4-ASP" #: ../src/vcodecs.c:387 msgid "MPEG4-AVC (H264)" msgstr "MPEG4-AVC (H264)" #: ../src/vcodecs.c:427 msgid "VP8 (VP8)" msgstr "" #: ../src/vcodecs.c:463 msgid "Theora (ogg theora)" msgstr "" #: ../src/video_format.c:43 msgid "AVI - avi format" msgstr "AVI - format avi" #: ../src/video_format.c:52 msgid "MKV - Matroska format" msgstr "MKV - format Matroska" #: ../src/video_format.c:61 msgid "WEBM - format" msgstr "" #: ../src/video_tab.c:208 msgid "Frame Rate:" msgstr "Fréquence d'image:" #: ../src/video_tab.c:215 msgid " Show" msgstr " Afficher" #: ../src/video_tab.c:237 msgid "Resolution:" msgstr "Résolution :" #: ../src/video_tab.c:263 msgid "Camera Output:" msgstr "Sortie Caméra :" #: ../src/video_tab.c:285 msgid "Apply" msgstr "Assigner" #: ../src/video_tab.c:292 msgid "Quality:" msgstr "Qualité:" #: ../src/video_tab.c:302 msgid "---- Video Filters ----" msgstr "---- Filtres Vidéo ----" #. Mirror #: ../src/video_tab.c:321 msgid " Mirror" msgstr " Miroir" #. Upturn #: ../src/video_tab.c:332 msgid " Invert" msgstr " Inverser" #. Negate #: ../src/video_tab.c:343 msgid " Negative" msgstr " Négatif" #. Mono #: ../src/video_tab.c:354 msgid " Mono" msgstr " Monochrome" #. Pieces #: ../src/video_tab.c:366 msgid " Pieces" msgstr " Morceaux" #. Particles #: ../src/video_tab.c:378 msgid " Particles" msgstr " Particules" guvcview-src-1.7.1/po/quot.sed0000664000175000017500000000023112173235416015273 0ustar paulopaulos/"\([^"]*\)"/“\1â€/g s/`\([^`']*\)'/‘\1’/g s/ '\([^`']*\)' / ‘\1’ /g s/ '\([^`']*\)'$/ ‘\1’/g s/^'\([^`']*\)' /‘\1’ /g s/“â€/""/g guvcview-src-1.7.1/po/ChangeLog0000664000175000017500000000125012173235416015362 0ustar paulopaulo2010-06-16 Paulo Assis *add chinese-Taiwan translation: zh_TW by Kentxchang Chang 2009-01-08 Paulo Assis * add initial turkish translation * add initial danish translation 2008-05-08 gettextize * Makefile.in.in: Upgrade to gettext-0.17. * Rules-quot: New file, from gettext-0.17. * boldquot.sed: New file, from gettext-0.17. * en@boldquot.header: New file, from gettext-0.17. * en@quot.header: New file, from gettext-0.17. * insert-header.sin: New file, from gettext-0.17. * quot.sed: New file, from gettext-0.17. * remove-potcdate.sin: New file, from gettext-0.17. guvcview-src-1.7.1/po/linguas0000664000175000017500000000012712173235416015177 0ustar paulopaulobg bs cs da de en_AU es eu fo fr gl he hr it ja lv nl pl pt pt_BR ru si sr tr uk zh_TW guvcview-src-1.7.1/po/ru.po0000664000175000017500000006273412173235416014614 0ustar paulopaulo# Copyright (C) 2009 Paulo Assis # This file is distributed under the same license as the guvcview package. # # Roustam Ghizdatov , 2009. msgid "" msgstr "" "Project-Id-Version: guvcview\n" "Report-Msgid-Bugs-To: pj.assis@gmail.com\n" "POT-Creation-Date: 2013-07-16 12:53+0000\n" "PO-Revision-Date: 2013-06-06 13:32+0000\n" "Last-Translator: Ðиколай Ðвдеев (NickKolok, Nikolay Avdeev) " "\n" "Language-Team: Russian <>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2013-07-22 13:32+0000\n" "X-Generator: Launchpad (build 16696)\n" "Language: ru\n" #: ../data/guvcview.desktop.in.in.h:1 msgid "guvcview" msgstr "guvcview" #: ../data/guvcview.desktop.in.in.h:2 msgid "GTK UVC video viewer" msgstr "GTK UVC видео обозреватель" #: ../data/guvcview.desktop.in.in.h:3 msgid "A video viewer and capturer for the linux uvc driver" msgstr "Программа проÑмотра и запиÑи видео Ð´Ð»Ñ Ð´Ñ€Ð°Ð¹Ð²ÐµÑ€Ð° Linux UVC" #: ../src/acodecs.c:59 msgid "PCM - uncompressed (16 bit)" msgstr "PCM - без ÑÐ¶Ð°Ñ‚Ð¸Ñ (16-разрÑдный)" #: ../src/acodecs.c:76 msgid "MPEG2 - (lavc)" msgstr "MPEG2 - (lavc)" #: ../src/acodecs.c:93 msgid "MP3 - (lavc)" msgstr "MP3 - (lavc)" #: ../src/acodecs.c:110 msgid "Dolby AC3 - (lavc)" msgstr "Dolby AC3 - (lavc)" #: ../src/acodecs.c:127 msgid "ACC Low - (faac)" msgstr "ACC Low - (faac)" #: ../src/acodecs.c:144 msgid "Vorbis" msgstr "Vorbis" #: ../src/audio_tab.c:80 msgid "Audio" msgstr "Звук" #: ../src/audio_tab.c:98 msgid " Sound" msgstr " Звук" #. VU meter on the image (OSD) #: ../src/audio_tab.c:109 msgid " Show VU meter" msgstr " Отображать значение VU" #: ../src/audio_tab.c:121 msgid "Audio API:" msgstr "Ðудио-API:" #: ../src/audio_tab.c:132 msgid "PORTAUDIO" msgstr "PORTAUDIO" #: ../src/audio_tab.c:133 msgid "PULSEAUDIO" msgstr "PULSEAUDIO" #: ../src/audio_tab.c:149 ../src/audio_tab.c:172 msgid "Input Device:" msgstr "УÑтройÑтво ввода:" #: ../src/audio_tab.c:182 ../src/audio_tab.c:214 msgid "Dev. Default" msgstr "по умолчанию" #: ../src/audio_tab.c:204 msgid "Sample Rate:" msgstr "ЧаÑтота диÑкретизации:" #: ../src/audio_tab.c:215 msgid "1 - mono" msgstr "1 - моно" #: ../src/audio_tab.c:216 msgid "2 - stereo" msgstr "2 - Ñтерео" #: ../src/audio_tab.c:251 msgid "Channels:" msgstr "Каналов:" #: ../src/audio_tab.c:302 msgid "---- Audio Effects ----" msgstr "---- Ðудио-Ñффекты ----" #. Echo #: ../src/audio_tab.c:321 msgid " Echo" msgstr " Эхо" #. FUZZ #: ../src/audio_tab.c:332 msgid " Fuzz" msgstr " Фуз" #. Reverb #: ../src/audio_tab.c:344 msgid " Reverb" msgstr " РеверберациÑ" #. WahWah #: ../src/audio_tab.c:356 msgid " WahWah" msgstr " Квакушка" #. Ducky #: ../src/audio_tab.c:368 msgid " Ducky" msgstr " Утёнок" #: ../src/callbacks.c:108 msgid "Error" msgstr "Ошибка" #: ../src/callbacks.c:132 msgid "" "\n" "You have more than one video device installed.\n" "Do you want to try another one ?\n" msgstr "" "\n" "У Ð²Ð°Ñ ÑƒÑтановлен дополнительный видео прибор.\n" "Хотите попробовать другой?\n" #. Devices #: ../src/callbacks.c:139 ../src/video_tab.c:103 msgid "Device:" msgstr "УÑтройÑтво:" #: ../src/callbacks.c:271 msgid "Save File" msgstr "Сохранить файл" #: ../src/callbacks.c:283 msgid "File Format:" msgstr "Формат файла:" #: ../src/callbacks.c:454 msgid "codec values" msgstr "Параметры кодека" #: ../src/callbacks.c:465 msgid "" " encoder fps: \n" " (0 - use fps combobox value)" msgstr "" " кодек кадров/Ñ.: \n" " (0 - иÑпользовать значение ÑпиÑка)" #: ../src/callbacks.c:478 msgid " monotonic pts" msgstr "" #. bit rate #: ../src/callbacks.c:485 ../src/callbacks.c:808 msgid "bit rate: " msgstr "Битрейт: " #: ../src/callbacks.c:498 msgid "qmax: " msgstr "qmax: " #: ../src/callbacks.c:511 msgid "qmin: " msgstr "qmin: " #: ../src/callbacks.c:524 msgid "max. qdiff: " msgstr "макÑ. qdiff: " #: ../src/callbacks.c:537 msgid "dia size: " msgstr "dia-size: " #: ../src/callbacks.c:550 msgid "pre dia size: " msgstr "pre-dia-size: " #: ../src/callbacks.c:563 msgid "pre me: " msgstr "pre-me: " #: ../src/callbacks.c:576 msgid "pre cmp: " msgstr "pre-cmp: " #: ../src/callbacks.c:589 msgid "cmp: " msgstr "cmp: " #: ../src/callbacks.c:602 msgid "sub cmp: " msgstr "sub-cmp: " #: ../src/callbacks.c:615 msgid "last predictor count: " msgstr "last-predictor-count: " #: ../src/callbacks.c:628 msgid "gop size: " msgstr "gop-size: " #: ../src/callbacks.c:641 msgid "qcompress: " msgstr "qcompress: " #: ../src/callbacks.c:654 msgid "qblur: " msgstr "qblur: " #: ../src/callbacks.c:667 msgid "subq: " msgstr "" #: ../src/callbacks.c:680 msgid "framerefs: " msgstr "" #: ../src/callbacks.c:693 msgid "me method: " msgstr "me-method: " #: ../src/callbacks.c:706 msgid "mb decision: " msgstr "mb-decision: " #: ../src/callbacks.c:719 msgid "max B frames: " msgstr "" #: ../src/callbacks.c:732 msgid "num threads: " msgstr "" #: ../src/callbacks.c:795 msgid "audio codec values" msgstr "Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð·Ð²ÑƒÐºÐ¾Ð²Ð¾Ð³Ð¾ кодека" #. sample format #: ../src/callbacks.c:822 msgid "sample format: " msgstr "Формат ÑÑмпла " #: ../src/callbacks.c:1250 msgid "start new" msgstr "ЗапуÑк нового" #: ../src/callbacks.c:1253 msgid "restart" msgstr "перезагрузить" #: ../src/callbacks.c:1255 msgid "new" msgstr "Ðовый" #: ../src/callbacks.c:1257 msgid "cancel" msgstr "Отмена" #: ../src/callbacks.c:1262 msgid "" "launch new process or restart?.\n" "\n" msgstr "" "ЗапуÑтить новый процеÑÑ Ð¸Ð»Ð¸ перезапуÑтить?\n" "\n" #: ../src/callbacks.c:1716 ../src/guvcview.c:537 msgid "Cap. Image (I)" msgstr "Захв. Изображение (I)" #. disable image controls #: ../src/callbacks.c:1727 ../src/guvcview.c:658 ../src/timers.c:101 msgid "capturing photo to" msgstr "захват фото в" #: ../src/callbacks.c:1786 ../src/guvcview.c:547 msgid "Cap. Video (V)" msgstr "Захв. видео (V)" #: ../src/callbacks.c:1812 ../src/guvcview.c:708 msgid "capturing video to" msgstr "захват видео в" #. vid capture enabled from start #: ../src/callbacks.c:1845 ../src/guvcview.c:542 msgid "Stop Video (V)" msgstr "ОÑтановить видео (V)" #: ../src/callbacks.c:1901 ../src/menubar.c:66 msgid "Save Profile" msgstr "Сохранить профиль" #: ../src/callbacks.c:1914 ../src/menubar.c:65 msgid "Load Profile" msgstr "Загрузить профиль" #: ../src/create_video.c:1016 ../src/guvcview.c:700 msgid "Cap. Video" msgstr "Захв. видео" #: ../src/guvcview.c:279 msgid "Guvcview Video Capture" msgstr "Заxват видео через Guvcview" #: ../src/guvcview.c:291 msgid "GUVCViewer Controls" msgstr "Панель ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ñ‹ GUVCViewer" #. can't open device #: ../src/guvcview.c:336 msgid "" "Guvcview error:\n" "\n" "Unable to open device" msgstr "" "Ошибка Guvcview:\n" "\n" "Ðе удалоÑÑŒ открыть уÑтройÑтво" #: ../src/guvcview.c:337 msgid "" "Please make sure the camera is connected\n" "and that the correct driver is installed." msgstr "" "ПожалуйÑта убедитеÑÑŒ в том, что камера подключена\n" "и драйвер уÑтановлен корректно." #. uvc extension controls OK, give warning and shutdown (called with --add_ctrls) #: ../src/guvcview.c:342 msgid "" "Guvcview:\n" "\n" "UVC Extension controls" msgstr "" "Guvcview:\n" "Управление UVC раÑширениÑми" #: ../src/guvcview.c:343 msgid "Extension controls were added to the UVC driver" msgstr "Ð£Ð¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ñ€Ð°ÑширениÑми был длбавлен к драйверу UVC" #. uvc extension controls error - EACCES (needs root user) #: ../src/guvcview.c:350 msgid "" "Guvcview error:\n" "\n" "UVC Extension controls" msgstr "" "Ошибка Guvcview:\n" "Управление UVC раÑширениÑми" #: ../src/guvcview.c:351 msgid "" "An error occurred while adding extension\n" "controls to the UVC driver\n" "Make sure you run guvcview as root (or sudo)." msgstr "" "Произошла ошибка в добавление\n" "управлений к раÑширению UVC драйвера.\n" "УбедитеÑÑŒ, что вы запуÑтили guvcview как root (или sudo)" #: ../src/guvcview.c:377 ../src/guvcview.c:455 msgid "" "Guvcview error:\n" "\n" "Can't set a valid video stream for guvcview" msgstr "" "Ошибка Guvcview:\n" "Правильный видео поток не может быть уÑтановлен Ð´Ð»Ñ guvcview" #: ../src/guvcview.c:378 ../src/guvcview.c:456 msgid "" "Make sure your device driver is v4l2 compliant\n" "and that it is properly installed." msgstr "" "УбедитеÑÑŒ что драйвер ÑовмеÑтим Ñ v4l2\n" "и правильно уÑтановлен" #: ../src/guvcview.c:400 ../src/guvcview.c:422 msgid "" "Guvcview error:\n" "\n" "Unable to start with minimum setup" msgstr "" "Ошибка Guvcview:\n" "\n" "Ðе удалÑÑ Ð·Ð°Ð¿ÑƒÑк Ñ Ð¼Ð¸Ð½Ð¸Ð¼Ð°Ð»ÑŒÐ½Ð¾Ð¹ начальной уÑтановкой" #: ../src/guvcview.c:401 ../src/guvcview.c:423 msgid "Please reconnect your camera." msgstr "ПожалуйÑта, переподключите камеру." #: ../src/guvcview.c:430 msgid "" "Guvcview error:\n" "\n" "Couldn't query device capabilities" msgstr "" "Ошибка Guvcview:\n" "Ðе могу получить ÑвойÑтва уÑтройÑтва" #: ../src/guvcview.c:431 msgid "Make sure the device driver supports v4l2." msgstr "УбедитеÑÑŒ в том, что драйвер уÑтройÑтва поддерживает v4l2." #: ../src/guvcview.c:435 msgid "" "Guvcview error:\n" "\n" "Read method error" msgstr "" "Ошибка Guvcview:\n" "\n" "Ошибка метода чтениÑ" #: ../src/guvcview.c:436 msgid "Please try mmap instead (--capture_method=1)." msgstr "Попробуйте лучше mmap (--capture_method=1)." #: ../src/guvcview.c:444 msgid "" "Guvcview error:\n" "\n" "Unable to allocate Buffers" msgstr "" "Ошибка Guvcview:\n" "\n" "Ðе удалоÑÑŒ выделить меÑто Ð´Ð»Ñ Ð±ÑƒÑ„ÐµÑ€Ð¾Ð²" #: ../src/guvcview.c:445 msgid "Please try restarting your system." msgstr "Следует попробовать перезапуÑтить ÑиÑтему." #: ../src/guvcview.c:490 msgid "Image Controls" msgstr "Регулировка изображениÑ" #. image auto capture #: ../src/guvcview.c:533 msgid "Stop Auto (I)" msgstr "Прекратить автоматичеÑкий захват (I)" #: ../src/guvcview.c:644 msgid "" "Guvcview error:\n" "\n" "Unable to create Video Thread" msgstr "" "Ошибка Guvcview:\n" "\n" "Ðе удалоÑÑŒ Ñоздать поток команд Ð´Ð»Ñ Ð²Ð¸Ð´ÐµÐ¾" #: ../src/guvcview.c:645 msgid "Please report it to http://developer.berlios.de/bugs/?group_id=8179" msgstr "" "Следует Ñообщить об Ñтом Ñюда: " "http://developer.berlios.de/bugs/?group_id=8179" #: ../src/img_controls.c:121 msgid "Auto Focus (continuous)" msgstr "ÐвтофокуÑировка (непрерывнаÑ)" #: ../src/img_controls.c:122 msgid "set Focus" msgstr "УÑтановка фокуÑа" #: ../src/image_format.c:35 msgid "Jpeg (jpg)" msgstr "Jpeg (jpg)" #: ../src/image_format.c:41 msgid "Bitmap (Bmp)" msgstr "Bitmap (Bmp)" #: ../src/image_format.c:47 msgid "Portable Network Graphics (Png)" msgstr "Portable Network Graphics (Png)" #: ../src/image_format.c:53 msgid "Raw Image (raw)" msgstr "Ðеобработанное изображение Raw Image (raw)" #. controls menu #: ../src/menubar.c:64 msgid "Settings" msgstr "ÐаÑтройки" #: ../src/menubar.c:67 msgid "Hardware Defaults" msgstr "ÐаÑтройки Ð¾Ð±Ð¾Ñ€ÑƒÐ´Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ð¾ умолчанию" #: ../src/menubar.c:75 msgid "Camera Button" msgstr "Кнопка камеры" #: ../src/menubar.c:79 msgid "Capture Image" msgstr "Захватить изображение" #: ../src/menubar.c:84 msgid "Capture Video" msgstr "Захватить видео" #. video menu #: ../src/menubar.c:144 ../src/video_tab.c:87 msgid "Video" msgstr "Видео" #: ../src/menubar.c:145 ../src/menubar.c:231 msgid "File" msgstr "Файл" #: ../src/menubar.c:146 ../src/menubar.c:232 msgid "Increment Filename" msgstr "Увеличить Ð¸Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð°" #: ../src/menubar.c:164 msgid "Video Codec" msgstr "Видеокодек" #: ../src/menubar.c:187 msgid "Video Codec Properties" msgstr "СвойÑтва видеокодека" #: ../src/menubar.c:194 msgid "Audio Codec" msgstr "Звуковой кодек" #: ../src/menubar.c:215 msgid "Audio Codec Properties" msgstr "СвойÑтва звукового кодека" #. photo menu #: ../src/menubar.c:230 msgid "Photo" msgstr "Фото" #: ../src/options.c:752 msgid "Prints version" msgstr "Показывает верÑию" #: ../src/options.c:753 msgid "Displays debug information" msgstr "Показывает информацию Ð´Ð»Ñ Ð¾Ñ‚Ð»Ð°Ð´ÐºÐ¸" #: ../src/options.c:754 msgid "Video Device to use [default: /dev/video0]" msgstr "ИÑпользуемое видео-уÑтройÑтво (по умолчанию /dev/video0)" #: ../src/options.c:755 msgid "Exit after adding UVC extension controls (needs root/sudo)" msgstr "" "Выход поÑле Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ñ€Ð°Ñширенных Ñлементов ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ UVC (требует " "root/sudo)" #: ../src/options.c:756 msgid "Don't stream video (image controls only)" msgstr "" "Ðе работать Ñ Ð¿Ð¾Ñ‚Ð¾ÐºÐ¾Ð²Ñ‹Ð¼ видео (только Ñлементы ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸ÐµÐ¼)" #: ../src/options.c:757 msgid "Don't display a GUI" msgstr "Ðе отображать графичеÑкий интерфейÑ" #: ../src/options.c:758 msgid "Capture method (1-mmap (default) 2-read)" msgstr "Метод захвата (1 - mmap (по умолчанию) 2-читать)" #: ../src/options.c:759 msgid "Configuration file" msgstr "Конфигурационный файл" #: ../src/options.c:760 msgid "Hardware accelaration (enable(1) | disable(0))" msgstr "Ðппаратное уÑкорение (вкл.(1) | выкл.(0))" #: ../src/options.c:761 msgid "" "Pixel " "format(mjpg|jpeg|yuyv|yvyu|uyvy|yyuv|yu12|yv12|nv12|nv21|nv16|nv61|y41p|grey|" "y10b|y16 |s501|s505|s508|gbrg|grbg|ba81|rggb|bgr3|rgb3)" msgstr "" "Формат " "пикÑелей(mjpg|jpeg|yuyv|yvyu|uyvy|yyuv|yu12|yv12|nv12|nv21|nv16|nv61|y41p|gre" "y|y10b|y16 |s501|s505|s508|gbrg|grbg|ba81|rggb|bgr3|rgb3)" #: ../src/options.c:762 msgid "Frame size, default: 640x480" msgstr "Размер кадра (по умолчанию 640Ñ…480)" #: ../src/options.c:763 msgid "Image File name" msgstr "Ð˜Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð° изображениÑ" #: ../src/options.c:764 msgid "Image capture interval in seconds" msgstr "Интервал между Ñнимками (Ñек)" #: ../src/options.c:765 msgid "Number of Pictures to capture" msgstr "КоличеÑтво Ñнимков" #: ../src/options.c:766 msgid "Video File name (capture from start)" msgstr "Ð˜Ð¼Ñ Ð²Ð¸Ð´ÐµÐ¾-файла (запиÑÑŒ Ñразу поÑле запуÑка)" #: ../src/options.c:767 msgid "Video capture time (in seconds)" msgstr "ПродолжительноÑть видео-запиÑи (Ñек)" #: ../src/options.c:768 msgid "Exits guvcview after closing video" msgstr "Завершает работу guvcview поÑле Ð·Ð°ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ð²Ð¸Ð´ÐµÐ¾" #: ../src/options.c:769 msgid "Number of initial frames to skip" msgstr "КоличеÑтво начальных кадров Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð¿ÑƒÑка" #: ../src/options.c:770 msgid "Show FPS value (enable(1) | disable (0))" msgstr "Отображение чаÑтоты кадров (вкл.(1) | выкл.(0))" #: ../src/options.c:771 msgid "Load Profile at start" msgstr "Загрузка Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ñ Ð¿Ñ€Ð¸ запуÑке" #: ../src/options.c:777 msgid "- local options" msgstr "- локальные параметры" #. gdk_threads_enter(); #: ../src/timers.c:119 msgid "Cap. Image" msgstr "Сделать Ñнимок" #: ../src/timers.c:217 msgid "Guvcview Warning:" msgstr "Guvcview предупреждение:" #: ../src/timers.c:217 msgid "Not enough free space left on disk" msgstr "ÐедоÑтаточно Ñвободного меÑта на диÑке" #: ../src/v4l2_controls.c:711 msgid "Left" msgstr "Влево" #: ../src/v4l2_controls.c:712 msgid "Right" msgstr "Вправо" #: ../src/v4l2_controls.c:716 msgid "Down" msgstr "Вниз" #: ../src/v4l2_controls.c:717 msgid "Up" msgstr "Вверх" #: ../src/v4l2_controls.c:762 msgid "Off" msgstr "Откл." #: ../src/v4l2_controls.c:762 msgid "On" msgstr "Вкл." #: ../src/v4l2_controls.c:762 msgid "Blinking" msgstr "Мерцание" #: ../src/v4l2_controls.c:762 msgid "Auto" msgstr "Ðвто" #. turn it into a menu control #: ../src/v4l2_controls.c:813 msgid "8 bit" msgstr "8 бит" #: ../src/v4l2_controls.c:813 msgid "12 bit" msgstr "12 бит" #: ../src/v4l2_dyna_ctrls.c:96 msgid "Pan (relative)" msgstr "Гор. поворот (отноÑит.)" #: ../src/v4l2_dyna_ctrls.c:109 msgid "Tilt (relative)" msgstr "Верт. поворот (отноÑит.)" #: ../src/v4l2_dyna_ctrls.c:122 msgid "Pan Reset" msgstr "Гор. возврат" #: ../src/v4l2_dyna_ctrls.c:135 msgid "Tilt Reset" msgstr "Верт. возврат" #: ../src/v4l2_dyna_ctrls.c:148 msgid "Focus (absolute)" msgstr "Ð¤Ð¾ÐºÑƒÑ (абÑолютный)" #: ../src/v4l2_dyna_ctrls.c:161 msgid "LED1 Mode" msgstr "Режим Ñветодиода1" #: ../src/v4l2_dyna_ctrls.c:174 msgid "LED1 Frequency" msgstr "ЧаÑтота Ñветодиода1" #: ../src/v4l2_dyna_ctrls.c:187 msgid "Disable video processing" msgstr "Отключение обработки видео" #: ../src/v4l2_dyna_ctrls.c:200 msgid "Raw bits per pixel" msgstr "Кол-во бит на пикÑел" #. needed only for language files (not used) #. V4L2 control strings #: ../src/v4l2uvc.c:56 msgid "User Controls" msgstr "ÐаÑтройки пользователÑ" #: ../src/v4l2uvc.c:57 msgid "Brightness" msgstr "ЯркоÑть" #: ../src/v4l2uvc.c:58 msgid "Contrast" msgstr "КонтраÑтноÑть" #: ../src/v4l2uvc.c:59 msgid "Hue" msgstr "Оттенок" #: ../src/v4l2uvc.c:60 msgid "Saturation" msgstr "ÐаÑыщенноÑть" #: ../src/v4l2uvc.c:61 msgid "Sharpness" msgstr "РезкоÑть" #: ../src/v4l2uvc.c:62 msgid "Gamma" msgstr "Гамма" #: ../src/v4l2uvc.c:63 msgid "Backlight Compensation" msgstr "КомпенÑÐ°Ñ†Ð¸Ñ Ñрких учаÑтков" #: ../src/v4l2uvc.c:64 msgid "Power Line Frequency" msgstr "ЧаÑтота в ÑлектроÑети" #: ../src/v4l2uvc.c:65 msgid "Hue, Automatic" msgstr "Оттенок, ÐвтоматичеÑки" #: ../src/v4l2uvc.c:66 msgid "Focus, Auto" msgstr "ФокуÑ, авто" #: ../src/v4l2uvc.c:67 msgid "Manual Mode" msgstr "Ручной режим" #: ../src/v4l2uvc.c:68 msgid "Auto Mode" msgstr "Ðвторежим" #: ../src/v4l2uvc.c:69 msgid "Shutter Priority Mode" msgstr "Режим приоритета затвора" #: ../src/v4l2uvc.c:70 msgid "Aperture Priority Mode" msgstr "Режим приоритета диафрагмы" #: ../src/v4l2uvc.c:71 msgid "Black Level" msgstr "Уровень чёрного" #: ../src/v4l2uvc.c:72 msgid "White Balance, Automatic" msgstr "Ð‘Ð°Ð»Ð°Ð½Ñ Ð±ÐµÐ»Ð¾Ð³Ð¾, ÐвтоматичеÑки" #: ../src/v4l2uvc.c:73 msgid "Do White Balance" msgstr "СбаланÑировать белый цвет" #: ../src/v4l2uvc.c:74 msgid "Red Balance" msgstr "Ð‘Ð°Ð»Ð°Ð½Ñ ÐºÑ€Ð°Ñного" #: ../src/v4l2uvc.c:75 msgid "Blue Balance" msgstr "Ð‘Ð°Ð»Ð°Ð½Ñ Ñинего" #: ../src/v4l2uvc.c:76 msgid "Exposure" msgstr "ЭкÑпозициÑ" #: ../src/v4l2uvc.c:77 msgid "Gain, Automatic" msgstr "УÑиление, автоматичеÑки" #: ../src/v4l2uvc.c:78 msgid "Gain" msgstr "УÑиление" #: ../src/v4l2uvc.c:79 msgid "Horizontal Flip" msgstr "Отразить по горизонтали" #: ../src/v4l2uvc.c:80 msgid "Vertical Flip" msgstr "Отразить по вертикали" #: ../src/v4l2uvc.c:81 msgid "Horizontal Center" msgstr "Горизонтальный центр" #: ../src/v4l2uvc.c:82 msgid "Vertical Center" msgstr "Вертикальный центр" #: ../src/v4l2uvc.c:83 msgid "Chroma AGC" msgstr "" #: ../src/v4l2uvc.c:84 msgid "Color Killer" msgstr "ОбеÑцвечиватель" #: ../src/v4l2uvc.c:85 msgid "Color Effects" msgstr "Цветовые Ñффекты" #. CAMERA CLASS control strings #: ../src/v4l2uvc.c:88 msgid "Camera Controls" msgstr "ÐаÑтройки камеры" #: ../src/v4l2uvc.c:89 msgid "Auto Exposure" msgstr "Ðвто выдержка" #: ../src/v4l2uvc.c:90 msgid "Exposure Time, Absolute" msgstr "Ð’Ñ€ÐµÐ¼Ñ Ð²Ñ‹Ð´ÐµÑ€Ð¶ÐºÐ¸, ÐбÑолютное" #: ../src/v4l2uvc.c:91 msgid "Exposure, Dynamic Framerate" msgstr "Выдержка, Ð”Ð¸Ð½Ð°Ð¼Ð¸Ñ‡Ð½Ð°Ñ Ñ‡Ð°Ñтота кадров" #: ../src/v4l2uvc.c:92 msgid "Pan, Relative" msgstr "" #: ../src/v4l2uvc.c:93 msgid "Tilt, Relative" msgstr "" #: ../src/v4l2uvc.c:94 msgid "Pan, Reset" msgstr "" #: ../src/v4l2uvc.c:95 msgid "Tilt, Reset" msgstr "" #: ../src/v4l2uvc.c:96 msgid "Pan, Absolute" msgstr "" #: ../src/v4l2uvc.c:98 msgid "Focus, Absolute" msgstr "ФокуÑ, Совершенный" #: ../src/v4l2uvc.c:99 msgid "Focus, Relative" msgstr "ФокуÑ, ОтноÑительный" #: ../src/v4l2uvc.c:100 msgid "Focus, Automatic" msgstr "ФокуÑ, ÐвтоматичеÑкий" #: ../src/v4l2uvc.c:101 msgid "Zoom, Absolute" msgstr "Увеличение, Совершенное" #: ../src/v4l2uvc.c:102 msgid "Zoom, Relative" msgstr "Увеличение, ОтноÑительное" #: ../src/v4l2uvc.c:103 msgid "Zoom, Continuous" msgstr "Увеличение, ПоÑтоÑнное" #: ../src/v4l2uvc.c:104 msgid "Privacy" msgstr "КонфиденциальноÑть" #. UVC specific control strings #: ../src/v4l2uvc.c:107 msgid "Exposure, Auto" msgstr "ЭкÑпозициÑ, авто" #: ../src/v4l2uvc.c:108 msgid "Exposure, Auto Priority" msgstr "Режим чаÑтоты кадров" #: ../src/v4l2uvc.c:109 msgid "Exposure (Absolute)" msgstr "Выдержка (ÑовершеннаÑ)" #: ../src/v4l2uvc.c:110 msgid "White Balance Temperature, Auto" msgstr "Температура баланÑа белого, авто" #: ../src/v4l2uvc.c:111 msgid "White Balance Temperature" msgstr "Температура баланÑа белого" #: ../src/v4l2uvc.c:112 msgid "White Balance Component, Auto" msgstr "Компонент баланÑа белого, авто" #: ../src/v4l2uvc.c:113 msgid "White Balance Blue Component" msgstr "Синий компонент баланÑа белого" #: ../src/v4l2uvc.c:114 msgid "White Balance Red Component" msgstr "КраÑный компонент баланÑа белого" #. libwebcam specific control strings #: ../src/v4l2uvc.c:117 msgid "Focus" msgstr "ФокуÑирование" #: ../src/v4l2uvc.c:118 msgid "Focus (Absolute)" msgstr "ФокуÑирование (ÐбÑолютное)" #: ../src/vcodecs.c:63 msgid "MJPG - compressed" msgstr "MJPG - Ñжатый" #: ../src/vcodecs.c:99 msgid "YUY2 - uncomp YUV" msgstr "YUY2 - неÑжатый YUV" #: ../src/vcodecs.c:135 msgid "RGB - uncomp BMP" msgstr "RGB - неÑжатый BMP" #: ../src/vcodecs.c:171 msgid "MPEG video 1" msgstr "MPEG-видео 1" #: ../src/vcodecs.c:207 msgid "FLV1 - flash video 1" msgstr "FLV1 - флÑш-видео 1" #: ../src/vcodecs.c:243 msgid "WMV1 - win. med. video 7" msgstr "WMV1 - видео Windows Media 7" #: ../src/vcodecs.c:279 msgid "MPG2 - MPG2 format" msgstr "MPG2 - формат MPG2" #: ../src/vcodecs.c:315 msgid "MS MP4 V3" msgstr "MS MP4 V3" #: ../src/vcodecs.c:351 msgid "MPEG4-ASP" msgstr "MPEG4-ASP" #: ../src/vcodecs.c:387 msgid "MPEG4-AVC (H264)" msgstr "MPEG4-AVC (H264)" #: ../src/vcodecs.c:427 msgid "VP8 (VP8)" msgstr "VP8 (VP8)" #: ../src/vcodecs.c:463 msgid "Theora (ogg theora)" msgstr "" #: ../src/video_format.c:43 msgid "AVI - avi format" msgstr "AVI - формат avi" #: ../src/video_format.c:52 msgid "MKV - Matroska format" msgstr "MKV - формат Matroska" #: ../src/video_format.c:61 msgid "WEBM - format" msgstr "Формат WEBM" #: ../src/video_tab.c:208 msgid "Frame Rate:" msgstr "ЧаÑтота кадров:" #: ../src/video_tab.c:215 msgid " Show" msgstr " Показать" #: ../src/video_tab.c:237 msgid "Resolution:" msgstr "Разрешение:" #: ../src/video_tab.c:263 msgid "Camera Output:" msgstr "Вывод камеры:" #: ../src/video_tab.c:285 msgid "Apply" msgstr "Применить" #: ../src/video_tab.c:292 msgid "Quality:" msgstr "КачеÑтво:" #: ../src/video_tab.c:302 msgid "---- Video Filters ----" msgstr "---- Видео-фильтры ----" #. Mirror #: ../src/video_tab.c:321 msgid " Mirror" msgstr " Гор. отражение" #. Upturn #: ../src/video_tab.c:332 msgid " Invert" msgstr " Верт. отражение" #. Negate #: ../src/video_tab.c:343 msgid " Negative" msgstr " Ðегатив" #. Mono #: ../src/video_tab.c:354 msgid " Mono" msgstr " Чёрно-белое" #. Pieces #: ../src/video_tab.c:366 msgid " Pieces" msgstr " Мозаика" #. Particles #: ../src/video_tab.c:378 msgid " Particles" msgstr "" guvcview-src-1.7.1/po/de.po0000664000175000017500000005452412173235416014554 0ustar paulopaulo# translation of de.po to Portuguese # translation of guvcview to German # Copyright (C) 2008 Paulo Assis # This file is distributed under the same license as the guvcview package. # guvcview , 2008. # Paulo Assis , 2008. # # msgid "" msgstr "" "Project-Id-Version: de\n" "Report-Msgid-Bugs-To: pj.assis@gmail.com\n" "POT-Creation-Date: 2013-07-16 12:53+0000\n" "PO-Revision-Date: 2013-02-25 05:34+0000\n" "Last-Translator: Paulo Assis \n" "Language-Team: Portuguese \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2013-07-22 13:32+0000\n" "X-Generator: Launchpad (build 16696)\n" "Language: pt\n" #: ../data/guvcview.desktop.in.in.h:1 msgid "guvcview" msgstr "GUVCView" #: ../data/guvcview.desktop.in.in.h:2 msgid "GTK UVC video viewer" msgstr "UVC-Video-Betrachter in GTK" #: ../data/guvcview.desktop.in.in.h:3 msgid "A video viewer and capturer for the linux uvc driver" msgstr "Ein Video-Betrachter und Aufnahmewerkzeug für den Linux-UVC-Treiber" #: ../src/acodecs.c:59 msgid "PCM - uncompressed (16 bit)" msgstr "PCM – Unkomprimiert (16 Bit)" #: ../src/acodecs.c:76 msgid "MPEG2 - (lavc)" msgstr "MPEG2 – (lavc)" #: ../src/acodecs.c:93 msgid "MP3 - (lavc)" msgstr "MP3 – (lavc)" #: ../src/acodecs.c:110 msgid "Dolby AC3 - (lavc)" msgstr "Dolby AC3 – (lavc)" #: ../src/acodecs.c:127 msgid "ACC Low - (faac)" msgstr "ACC Niedrig – (faac)" #: ../src/acodecs.c:144 msgid "Vorbis" msgstr "Vorbis" #: ../src/audio_tab.c:80 msgid "Audio" msgstr "Audio" #: ../src/audio_tab.c:98 msgid " Sound" msgstr " Audio" #. VU meter on the image (OSD) #: ../src/audio_tab.c:109 msgid " Show VU meter" msgstr " VU-Meter anzeigen" #: ../src/audio_tab.c:121 msgid "Audio API:" msgstr "Audio API:" #: ../src/audio_tab.c:132 msgid "PORTAUDIO" msgstr "PORTAUDIO" #: ../src/audio_tab.c:133 msgid "PULSEAUDIO" msgstr "PULSEAUDIO" #: ../src/audio_tab.c:149 ../src/audio_tab.c:172 msgid "Input Device:" msgstr "Eingabegerät:" #: ../src/audio_tab.c:182 ../src/audio_tab.c:214 msgid "Dev. Default" msgstr "Standard" #: ../src/audio_tab.c:204 msgid "Sample Rate:" msgstr "Samplingrate:" #: ../src/audio_tab.c:215 msgid "1 - mono" msgstr "1 - Mono" #: ../src/audio_tab.c:216 msgid "2 - stereo" msgstr "2 - Stereo" #: ../src/audio_tab.c:251 msgid "Channels:" msgstr "Kanäle:" #: ../src/audio_tab.c:302 msgid "---- Audio Effects ----" msgstr "— Audio-Filter —" #. Echo #: ../src/audio_tab.c:321 msgid " Echo" msgstr " Echo" #. FUZZ #: ../src/audio_tab.c:332 msgid " Fuzz" msgstr " Fuzz" #. Reverb #: ../src/audio_tab.c:344 msgid " Reverb" msgstr " Hall" #. WahWah #: ../src/audio_tab.c:356 msgid " WahWah" msgstr " Wah-Wah" #. Ducky #: ../src/audio_tab.c:368 msgid " Ducky" msgstr " Ente" #: ../src/callbacks.c:108 msgid "Error" msgstr "Fehler" #: ../src/callbacks.c:132 msgid "" "\n" "You have more than one video device installed.\n" "Do you want to try another one ?\n" msgstr "" "\n" "Sie haben mehr als ein Video-Gerät installiert\n" "Möchten Sie ein weiteres versuchen?\n" #. Devices #: ../src/callbacks.c:139 ../src/video_tab.c:103 msgid "Device:" msgstr "Eingabegerät:" #: ../src/callbacks.c:271 msgid "Save File" msgstr "Datei speichern" #: ../src/callbacks.c:283 msgid "File Format:" msgstr "Dateiformat:" #: ../src/callbacks.c:454 msgid "codec values" msgstr "Codec-Werte" #: ../src/callbacks.c:465 msgid "" " encoder fps: \n" " (0 - use fps combobox value)" msgstr "" " Kodierer Bilder/s: \n" " (0 – FPS-Wert aus Auswahlliste)" #: ../src/callbacks.c:478 msgid " monotonic pts" msgstr " Monoton ansteigender PTS" #. bit rate #: ../src/callbacks.c:485 ../src/callbacks.c:808 msgid "bit rate: " msgstr "Bitrate: " #: ../src/callbacks.c:498 msgid "qmax: " msgstr "qmax: " #: ../src/callbacks.c:511 msgid "qmin: " msgstr "qmin: " #: ../src/callbacks.c:524 msgid "max. qdiff: " msgstr "max. qdiff: " #: ../src/callbacks.c:537 msgid "dia size: " msgstr "DIA, Größe: " #: ../src/callbacks.c:550 msgid "pre dia size: " msgstr "Präd.-DIA, Größe: " #: ../src/callbacks.c:563 msgid "pre me: " msgstr "Präd.-ME: " #: ../src/callbacks.c:576 msgid "pre cmp: " msgstr "Präd.-CMP: " #: ../src/callbacks.c:589 msgid "cmp: " msgstr "cmp: " #: ../src/callbacks.c:602 msgid "sub cmp: " msgstr "sub cmp: " #: ../src/callbacks.c:615 msgid "last predictor count: " msgstr "Letzter Prädiktorzählstand: " #: ../src/callbacks.c:628 msgid "gop size: " msgstr "GOP, Größe: " #: ../src/callbacks.c:641 msgid "qcompress: " msgstr "QCompress: " #: ../src/callbacks.c:654 msgid "qblur: " msgstr "QBlur: " #: ../src/callbacks.c:667 msgid "subq: " msgstr "Subq: " #: ../src/callbacks.c:680 msgid "framerefs: " msgstr "FrameRefs: " #: ../src/callbacks.c:693 msgid "me method: " msgstr "ME, Methode: " #: ../src/callbacks.c:706 msgid "mb decision: " msgstr "MD, Entscheidung: " #: ../src/callbacks.c:719 msgid "max B frames: " msgstr "Max. B-Frames: " #: ../src/callbacks.c:732 msgid "num threads: " msgstr "Anzahl Threads: " #: ../src/callbacks.c:795 msgid "audio codec values" msgstr "Audio-Codec-Werte" #. sample format #: ../src/callbacks.c:822 msgid "sample format: " msgstr "Sample-Format: " #: ../src/callbacks.c:1250 msgid "start new" msgstr "beginnen neue" #: ../src/callbacks.c:1253 msgid "restart" msgstr "Neustart" #: ../src/callbacks.c:1255 msgid "new" msgstr "Neue" #: ../src/callbacks.c:1257 msgid "cancel" msgstr "Abbrechen" #: ../src/callbacks.c:1262 msgid "" "launch new process or restart?.\n" "\n" msgstr "" "Neuer prozess oder programm neustarten?\n" "\n" #: ../src/callbacks.c:1716 ../src/guvcview.c:537 msgid "Cap. Image (I)" msgstr "Bild aufnehmen (I)" #. disable image controls #: ../src/callbacks.c:1727 ../src/guvcview.c:658 ../src/timers.c:101 msgid "capturing photo to" msgstr "Foto speichern in" #: ../src/callbacks.c:1786 ../src/guvcview.c:547 msgid "Cap. Video (V)" msgstr "Video aufnehmen (V)" #: ../src/callbacks.c:1812 ../src/guvcview.c:708 msgid "capturing video to" msgstr "Video speichern in" #. vid capture enabled from start #: ../src/callbacks.c:1845 ../src/guvcview.c:542 msgid "Stop Video (V)" msgstr "Video stoppen (V)" #: ../src/callbacks.c:1901 ../src/menubar.c:66 msgid "Save Profile" msgstr "Profil speichern" #: ../src/callbacks.c:1914 ../src/menubar.c:65 msgid "Load Profile" msgstr "Profil laden" #: ../src/create_video.c:1016 ../src/guvcview.c:700 msgid "Cap. Video" msgstr "Video aufnehmen" #: ../src/guvcview.c:279 msgid "Guvcview Video Capture" msgstr "GUVCView-Video-Aufnahme" #: ../src/guvcview.c:291 msgid "GUVCViewer Controls" msgstr "GUVCViewer-Bedienfeld" #. can't open device #: ../src/guvcview.c:336 msgid "" "Guvcview error:\n" "\n" "Unable to open device" msgstr "" "GUVCView-Fehler:\n" "\n" "Das Gerät konnte nicht geöffnet werden" #: ../src/guvcview.c:337 msgid "" "Please make sure the camera is connected\n" "and that the correct driver is installed." msgstr "" "Bitte stellen Sie sicher, dass die Kamera angeschlossen wird\n" "und dass die driver angebracht ist." #. uvc extension controls OK, give warning and shutdown (called with --add_ctrls) #: ../src/guvcview.c:342 msgid "" "Guvcview:\n" "\n" "UVC Extension controls" msgstr "" "GUVCView:\n" "\n" "Erweiterte UVC-Bedienelemente" #: ../src/guvcview.c:343 msgid "Extension controls were added to the UVC driver" msgstr "Erweiterte Bedienelemente wurden zum UVC-Treiber hinzugefügt" #. uvc extension controls error - EACCES (needs root user) #: ../src/guvcview.c:350 msgid "" "Guvcview error:\n" "\n" "UVC Extension controls" msgstr "" "GUVCView-Fehler:\n" "\n" "Erweiterte UVC-Bedienelemente" #: ../src/guvcview.c:351 msgid "" "An error occurred while adding extension\n" "controls to the UVC driver\n" "Make sure you run guvcview as root (or sudo)." msgstr "" "Ein Fehler ist beim Hinzufügen der erweiterten\n" "Bedienelemente zum UVC-Treiber aufgetreten.\n" "Stellen Sie sicher, dass Sie »guvcview« als Systemverwalter\n" "(Benutzer »root) ausführen oder mit »sudo«." #: ../src/guvcview.c:377 ../src/guvcview.c:455 msgid "" "Guvcview error:\n" "\n" "Can't set a valid video stream for guvcview" msgstr "" "GUVCView-Fehler:\n" "\n" "Es kann kein gültiger Video-Stream für guvcview festgelegt werden" #: ../src/guvcview.c:378 ../src/guvcview.c:456 msgid "" "Make sure your device driver is v4l2 compliant\n" "and that it is properly installed." msgstr "" "Stellen Sie bitte sicher, dass Sie sowohl eine v4l2 kompatible Kamera " "besitzen als auch den Treiber geladen haben." #: ../src/guvcview.c:400 ../src/guvcview.c:422 msgid "" "Guvcview error:\n" "\n" "Unable to start with minimum setup" msgstr "" "GUVCView-Fehler:\n" "\n" "Es konnte nicht im minimalen Modus gestartet werden" #: ../src/guvcview.c:401 ../src/guvcview.c:423 msgid "Please reconnect your camera." msgstr "Bitte schließen Sie Ihre Kamera erneut an." #: ../src/guvcview.c:430 msgid "" "Guvcview error:\n" "\n" "Couldn't query device capabilities" msgstr "" "GUVCView-Fehler:\n" "\n" "Geräteeigenschaften konnten nicht abgefragt werden" #: ../src/guvcview.c:431 msgid "Make sure the device driver supports v4l2." msgstr "Stellen Sie sicher, dass der Gerätetreiber v4l2 unterstützt." #: ../src/guvcview.c:435 msgid "" "Guvcview error:\n" "\n" "Read method error" msgstr "" "GUVCView-Fehler:\n" "\n" "Fehler der Lesemethode" #: ../src/guvcview.c:436 msgid "Please try mmap instead (--capture_method=1)." msgstr "Bitte versuchen sie es mit mmap (--capture_method=1)" #: ../src/guvcview.c:444 msgid "" "Guvcview error:\n" "\n" "Unable to allocate Buffers" msgstr "" "GUVCView-Fehler:\n" "\n" "Puffer konnten nicht angelegt werden" #: ../src/guvcview.c:445 msgid "Please try restarting your system." msgstr "Bitte System neu starten." #: ../src/guvcview.c:490 msgid "Image Controls" msgstr "Bildsteuerung" #. image auto capture #: ../src/guvcview.c:533 msgid "Stop Auto (I)" msgstr "Automatisch anhalten (I)" #: ../src/guvcview.c:644 msgid "" "Guvcview error:\n" "\n" "Unable to create Video Thread" msgstr "" "GUVCView-Fehler:\n" "\n" "Video-Thread konnte nicht erzeugt werden" #: ../src/guvcview.c:645 msgid "Please report it to http://developer.berlios.de/bugs/?group_id=8179" msgstr "" "Bitte melden Sie dies an http://developer.berlios.de/bugs/?group_id=8179" #: ../src/img_controls.c:121 msgid "Auto Focus (continuous)" msgstr "Automatisch Fokus (andauernd)" #: ../src/img_controls.c:122 msgid "set Focus" msgstr "Fokus" #: ../src/image_format.c:35 msgid "Jpeg (jpg)" msgstr "JPEG (jpg)" #: ../src/image_format.c:41 msgid "Bitmap (Bmp)" msgstr "Bitmap (bmp)" #: ../src/image_format.c:47 msgid "Portable Network Graphics (Png)" msgstr "Portable Network Graphics (png)" #: ../src/image_format.c:53 msgid "Raw Image (raw)" msgstr "Rohdatenbild (raw)" #. controls menu #: ../src/menubar.c:64 msgid "Settings" msgstr "Einstellungen" #: ../src/menubar.c:67 msgid "Hardware Defaults" msgstr "Hardware-Standards" #: ../src/menubar.c:75 msgid "Camera Button" msgstr "Kameraknopf" #: ../src/menubar.c:79 msgid "Capture Image" msgstr "Bild aufnehmen" #: ../src/menubar.c:84 msgid "Capture Video" msgstr "Video aufnehmen" #. video menu #: ../src/menubar.c:144 ../src/video_tab.c:87 msgid "Video" msgstr "Video" #: ../src/menubar.c:145 ../src/menubar.c:231 msgid "File" msgstr "Datei" #: ../src/menubar.c:146 ../src/menubar.c:232 msgid "Increment Filename" msgstr "Dateinamen hochzählen" #: ../src/menubar.c:164 msgid "Video Codec" msgstr "Video-Codec" #: ../src/menubar.c:187 msgid "Video Codec Properties" msgstr "Video-Codec-Eigenschaften" #: ../src/menubar.c:194 msgid "Audio Codec" msgstr "Audio-Codec" #: ../src/menubar.c:215 msgid "Audio Codec Properties" msgstr "Audio-Codec-Eigenschaften" #. photo menu #: ../src/menubar.c:230 msgid "Photo" msgstr "Foto" #: ../src/options.c:752 msgid "Prints version" msgstr "Zeigt die Version an" #: ../src/options.c:753 msgid "Displays debug information" msgstr "Extra Informationen anzeigen" #: ../src/options.c:754 msgid "Video Device to use [default: /dev/video0]" msgstr "Verwendetes Video-Gerät [Standard: /dev/video0]" #: ../src/options.c:755 msgid "Exit after adding UVC extension controls (needs root/sudo)" msgstr "" "Nach Hinzufügen der erweiterten UVC-Bedienelemente beenden (root/sudo " "erforderlich)" #: ../src/options.c:756 msgid "Don't stream video (image controls only)" msgstr "Video nicht streamen (nur Bildsteuerung)" #: ../src/options.c:757 msgid "Don't display a GUI" msgstr "Keine grafische Benutzeroberfläche anzeigen" #: ../src/options.c:758 msgid "Capture method (1-mmap (default) 2-read)" msgstr "Aufnahmemethode (1-mmap (Vorgabe) 2-read)" #: ../src/options.c:759 msgid "Configuration file" msgstr "Konfigurationsdatei" #: ../src/options.c:760 msgid "Hardware accelaration (enable(1) | disable(0))" msgstr "Hardware accel. (aktivieren(1) | inaktivieren(0))" #: ../src/options.c:761 msgid "" "Pixel " "format(mjpg|jpeg|yuyv|yvyu|uyvy|yyuv|yu12|yv12|nv12|nv21|nv16|nv61|y41p|grey|" "y10b|y16 |s501|s505|s508|gbrg|grbg|ba81|rggb|bgr3|rgb3)" msgstr "" "Pixel-Format " "(mjpg|jpeg|yuyv|yvyu|uyvy|yyuv|yu12|yv12|nv12|nv21|nv16|nv61|y41p|grey|y10b|y" "16 |s501|s505|s508|gbrg|grbg|ba81|rggb|bgr3|rgb3)" #: ../src/options.c:762 msgid "Frame size, default: 640x480" msgstr "Auflösung (Standard: 640x480)" #: ../src/options.c:763 msgid "Image File name" msgstr "Bilddatei" #: ../src/options.c:764 msgid "Image capture interval in seconds" msgstr "Bild aufnehmenabgelaufen (sekunden)" #: ../src/options.c:765 msgid "Number of Pictures to capture" msgstr "Bildquantität" #: ../src/options.c:766 msgid "Video File name (capture from start)" msgstr "Video-Dateiname (Aufnahme von Anfang)" #: ../src/options.c:767 msgid "Video capture time (in seconds)" msgstr "Video-Aufnahmedauer (Sek)" #: ../src/options.c:768 msgid "Exits guvcview after closing video" msgstr "GUVCView beenden, nachdem Video geschlossen wurde" #: ../src/options.c:769 msgid "Number of initial frames to skip" msgstr "Anzahl der am Anfang zu überspringenden Einzelbilder" #: ../src/options.c:770 msgid "Show FPS value (enable(1) | disable (0))" msgstr "FPS anzeigen (aktivieren(1)|inaktivieren(0))" #: ../src/options.c:771 msgid "Load Profile at start" msgstr "kontrollen - Datei öffnen" #: ../src/options.c:777 msgid "- local options" msgstr "- lokale Wahlen" #. gdk_threads_enter(); #: ../src/timers.c:119 msgid "Cap. Image" msgstr "Bild aufnehmen" #: ../src/timers.c:217 msgid "Guvcview Warning:" msgstr "GUVCView-Warnung:" #: ../src/timers.c:217 msgid "Not enough free space left on disk" msgstr "Nicht genügend freier Speicherplatz vorhanden" #: ../src/v4l2_controls.c:711 msgid "Left" msgstr "Links" #: ../src/v4l2_controls.c:712 msgid "Right" msgstr "Rechts" #: ../src/v4l2_controls.c:716 msgid "Down" msgstr "Runter" #: ../src/v4l2_controls.c:717 msgid "Up" msgstr "Hoch" #: ../src/v4l2_controls.c:762 msgid "Off" msgstr "Aus" #: ../src/v4l2_controls.c:762 msgid "On" msgstr "An" #: ../src/v4l2_controls.c:762 msgid "Blinking" msgstr "Blinken" #: ../src/v4l2_controls.c:762 msgid "Auto" msgstr "Automatisch" #. turn it into a menu control #: ../src/v4l2_controls.c:813 msgid "8 bit" msgstr "8 Bit" #: ../src/v4l2_controls.c:813 msgid "12 bit" msgstr "12 Bit" #: ../src/v4l2_dyna_ctrls.c:96 msgid "Pan (relative)" msgstr "Umdrehung (relativ)" #: ../src/v4l2_dyna_ctrls.c:109 msgid "Tilt (relative)" msgstr "Neigung (relativ)" #: ../src/v4l2_dyna_ctrls.c:122 msgid "Pan Reset" msgstr "Umdrehung (Zurückstellen)" #: ../src/v4l2_dyna_ctrls.c:135 msgid "Tilt Reset" msgstr "Neigung (Zurückstellen)" #: ../src/v4l2_dyna_ctrls.c:148 msgid "Focus (absolute)" msgstr "Fokus (absolut)" #: ../src/v4l2_dyna_ctrls.c:161 msgid "LED1 Mode" msgstr "Modus LED1" #: ../src/v4l2_dyna_ctrls.c:174 msgid "LED1 Frequency" msgstr "Frequenz LED1" #: ../src/v4l2_dyna_ctrls.c:187 msgid "Disable video processing" msgstr "Video-Verarbeitung ausschalten" #: ../src/v4l2_dyna_ctrls.c:200 msgid "Raw bits per pixel" msgstr "Rohe Bits pro Pixel" #. needed only for language files (not used) #. V4L2 control strings #: ../src/v4l2uvc.c:56 msgid "User Controls" msgstr "Benutzersteuerung" #: ../src/v4l2uvc.c:57 msgid "Brightness" msgstr "Helligkeit" #: ../src/v4l2uvc.c:58 msgid "Contrast" msgstr "Kontrast" #: ../src/v4l2uvc.c:59 msgid "Hue" msgstr "Farbe" #: ../src/v4l2uvc.c:60 msgid "Saturation" msgstr "Sättigung" #: ../src/v4l2uvc.c:61 msgid "Sharpness" msgstr "Schärfe" #: ../src/v4l2uvc.c:62 msgid "Gamma" msgstr "Gamma" #: ../src/v4l2uvc.c:63 msgid "Backlight Compensation" msgstr "Korrektur der Hintergrundbeleuchtung" #: ../src/v4l2uvc.c:64 msgid "Power Line Frequency" msgstr "Netzfrequenz" #: ../src/v4l2uvc.c:65 msgid "Hue, Automatic" msgstr "Farbton, automatisch" #: ../src/v4l2uvc.c:66 msgid "Focus, Auto" msgstr "Fokus, automatisch" #: ../src/v4l2uvc.c:67 msgid "Manual Mode" msgstr "Händischer Modus" #: ../src/v4l2uvc.c:68 msgid "Auto Mode" msgstr "Automatischer Modus" #: ../src/v4l2uvc.c:69 msgid "Shutter Priority Mode" msgstr "Blendenautomatik-Modus" #: ../src/v4l2uvc.c:70 msgid "Aperture Priority Mode" msgstr "Blendenpriorität-Modus" #: ../src/v4l2uvc.c:71 msgid "Black Level" msgstr "Schwarzwert" #: ../src/v4l2uvc.c:72 msgid "White Balance, Automatic" msgstr "Weißabgleich, automatisch" #: ../src/v4l2uvc.c:73 msgid "Do White Balance" msgstr "Weißabgleich durchführen" #: ../src/v4l2uvc.c:74 msgid "Red Balance" msgstr "Rotabgleich" #: ../src/v4l2uvc.c:75 msgid "Blue Balance" msgstr "Blauabgleich" #: ../src/v4l2uvc.c:76 msgid "Exposure" msgstr "Belichtung" #: ../src/v4l2uvc.c:77 msgid "Gain, Automatic" msgstr "Verstärkung, automatisch" #: ../src/v4l2uvc.c:78 msgid "Gain" msgstr "Verstärkung" #: ../src/v4l2uvc.c:79 msgid "Horizontal Flip" msgstr "Horizontal spiegeln" #: ../src/v4l2uvc.c:80 msgid "Vertical Flip" msgstr "Vertikal spiegeln" #: ../src/v4l2uvc.c:81 msgid "Horizontal Center" msgstr "Horizontal zentrieren" #: ../src/v4l2uvc.c:82 msgid "Vertical Center" msgstr "Vertikal zentrieren" #: ../src/v4l2uvc.c:83 msgid "Chroma AGC" msgstr "Automatische Chrominanz-Verstärkung" #: ../src/v4l2uvc.c:84 msgid "Color Killer" msgstr "Entsättigen" #: ../src/v4l2uvc.c:85 msgid "Color Effects" msgstr "Farbeffekte" #. CAMERA CLASS control strings #: ../src/v4l2uvc.c:88 msgid "Camera Controls" msgstr "Kamerasteuerung" #: ../src/v4l2uvc.c:89 msgid "Auto Exposure" msgstr "Automatische Belichtung" #: ../src/v4l2uvc.c:90 msgid "Exposure Time, Absolute" msgstr "Belichtungszeit, direkt" #: ../src/v4l2uvc.c:91 msgid "Exposure, Dynamic Framerate" msgstr "Belichtung, dynamische Bildwiederholrate" #: ../src/v4l2uvc.c:92 msgid "Pan, Relative" msgstr "Schwenken, relativ" #: ../src/v4l2uvc.c:93 msgid "Tilt, Relative" msgstr "Neigen, relativ" #: ../src/v4l2uvc.c:94 msgid "Pan, Reset" msgstr "Schwenken zurücksetzen" #: ../src/v4l2uvc.c:95 msgid "Tilt, Reset" msgstr "Neigung zurücksetzen" #: ../src/v4l2uvc.c:96 msgid "Pan, Absolute" msgstr "Schwenken, direkt" #: ../src/v4l2uvc.c:98 msgid "Focus, Absolute" msgstr "Fokus, direkt" #: ../src/v4l2uvc.c:99 msgid "Focus, Relative" msgstr "Fokus, relativ" #: ../src/v4l2uvc.c:100 msgid "Focus, Automatic" msgstr "Fokus, automatisch" #: ../src/v4l2uvc.c:101 msgid "Zoom, Absolute" msgstr "Vergrößerung, direkt" #: ../src/v4l2uvc.c:102 msgid "Zoom, Relative" msgstr "Vergrößerung, relativ" #: ../src/v4l2uvc.c:103 msgid "Zoom, Continuous" msgstr "Vergrößerung, fortlaufend" #: ../src/v4l2uvc.c:104 msgid "Privacy" msgstr "Privatsphäre" #. UVC specific control strings #: ../src/v4l2uvc.c:107 msgid "Exposure, Auto" msgstr "Belichtung, automatisch" #: ../src/v4l2uvc.c:108 msgid "Exposure, Auto Priority" msgstr "Belichtung, automatische Priorität" #: ../src/v4l2uvc.c:109 msgid "Exposure (Absolute)" msgstr "Belichtung (Absolut)" #: ../src/v4l2uvc.c:110 msgid "White Balance Temperature, Auto" msgstr "Automatischer Weißabgleich (Temperatur)" #: ../src/v4l2uvc.c:111 msgid "White Balance Temperature" msgstr "Weißabgleich (Temperatur)" #: ../src/v4l2uvc.c:112 msgid "White Balance Component, Auto" msgstr "Automatischer Weißabgleich (Komponente)" #: ../src/v4l2uvc.c:113 msgid "White Balance Blue Component" msgstr "Weißabgleich (Blau)" #: ../src/v4l2uvc.c:114 msgid "White Balance Red Component" msgstr "Weißabgleich (Rot)" #. libwebcam specific control strings #: ../src/v4l2uvc.c:117 msgid "Focus" msgstr "Fokus" #: ../src/v4l2uvc.c:118 msgid "Focus (Absolute)" msgstr "Focus (direkt)" #: ../src/vcodecs.c:63 msgid "MJPG - compressed" msgstr "MJPG - komprimiert" #: ../src/vcodecs.c:99 msgid "YUY2 - uncomp YUV" msgstr "YUY2 - keine Komp. YUV" #: ../src/vcodecs.c:135 msgid "RGB - uncomp BMP" msgstr "RGB - keine Komp. BMP" #: ../src/vcodecs.c:171 msgid "MPEG video 1" msgstr "MPEG-Video 1" #: ../src/vcodecs.c:207 msgid "FLV1 - flash video 1" msgstr "FLV1 – Flash-Video 1" #: ../src/vcodecs.c:243 msgid "WMV1 - win. med. video 7" msgstr "WMV1 – Win.-Med.-Video 7" #: ../src/vcodecs.c:279 msgid "MPG2 - MPG2 format" msgstr "MPG2 – MPEG-2-Format" #: ../src/vcodecs.c:315 msgid "MS MP4 V3" msgstr "MS MP4 V3" #: ../src/vcodecs.c:351 msgid "MPEG4-ASP" msgstr "MPEG4-ASP" #: ../src/vcodecs.c:387 msgid "MPEG4-AVC (H264)" msgstr "MPEG4-AVC (H264)" #: ../src/vcodecs.c:427 msgid "VP8 (VP8)" msgstr "VP8 (VP8)" #: ../src/vcodecs.c:463 msgid "Theora (ogg theora)" msgstr "Theora (Ogg-Theora)" #: ../src/video_format.c:43 msgid "AVI - avi format" msgstr "AVI – Avi-Format" #: ../src/video_format.c:52 msgid "MKV - Matroska format" msgstr "MKV – Matroska-Format" #: ../src/video_format.c:61 msgid "WEBM - format" msgstr "WEBM-Format" #: ../src/video_tab.c:208 msgid "Frame Rate:" msgstr "Bildrate:" #: ../src/video_tab.c:215 msgid " Show" msgstr " Anzeigen" #: ../src/video_tab.c:237 msgid "Resolution:" msgstr "Auflösung:" #: ../src/video_tab.c:263 msgid "Camera Output:" msgstr "Farbmodell:" #: ../src/video_tab.c:285 msgid "Apply" msgstr "Anwenden" #: ../src/video_tab.c:292 msgid "Quality:" msgstr "Qualität:" #: ../src/video_tab.c:302 msgid "---- Video Filters ----" msgstr "— Video-Filter —" #. Mirror #: ../src/video_tab.c:321 msgid " Mirror" msgstr " Gespiegelt" #. Upturn #: ../src/video_tab.c:332 msgid " Invert" msgstr " Gedreht" #. Negate #: ../src/video_tab.c:343 msgid " Negative" msgstr " Negativ" #. Mono #: ../src/video_tab.c:354 msgid " Mono" msgstr " Monochrom" #. Pieces #: ../src/video_tab.c:366 msgid " Pieces" msgstr " Bausteine" #. Particles #: ../src/video_tab.c:378 msgid " Particles" msgstr " Partikel" guvcview-src-1.7.1/po/bg.po0000664000175000017500000004154512173235416014553 0ustar paulopaulo# Bulgarian translation for guvcview # Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 # This file is distributed under the same license as the guvcview package. # FIRST AUTHOR , 2012. # msgid "" msgstr "" "Project-Id-Version: guvcview\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-07-16 12:53+0000\n" "PO-Revision-Date: 2012-06-06 03:33+0000\n" "Last-Translator: FULL NAME \n" "Language-Team: Bulgarian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2013-07-22 13:32+0000\n" "X-Generator: Launchpad (build 16696)\n" #: ../data/guvcview.desktop.in.in.h:1 msgid "guvcview" msgstr "" #: ../data/guvcview.desktop.in.in.h:2 msgid "GTK UVC video viewer" msgstr "" #: ../data/guvcview.desktop.in.in.h:3 msgid "A video viewer and capturer for the linux uvc driver" msgstr "" #: ../src/acodecs.c:59 msgid "PCM - uncompressed (16 bit)" msgstr "" #: ../src/acodecs.c:76 msgid "MPEG2 - (lavc)" msgstr "" #: ../src/acodecs.c:93 msgid "MP3 - (lavc)" msgstr "" #: ../src/acodecs.c:110 msgid "Dolby AC3 - (lavc)" msgstr "" #: ../src/acodecs.c:127 msgid "ACC Low - (faac)" msgstr "" #: ../src/acodecs.c:144 msgid "Vorbis" msgstr "" #: ../src/audio_tab.c:80 msgid "Audio" msgstr "" #: ../src/audio_tab.c:98 msgid " Sound" msgstr "" #. VU meter on the image (OSD) #: ../src/audio_tab.c:109 msgid " Show VU meter" msgstr "" #: ../src/audio_tab.c:121 msgid "Audio API:" msgstr "" #: ../src/audio_tab.c:132 msgid "PORTAUDIO" msgstr "" #: ../src/audio_tab.c:133 msgid "PULSEAUDIO" msgstr "" #: ../src/audio_tab.c:149 ../src/audio_tab.c:172 msgid "Input Device:" msgstr "" #: ../src/audio_tab.c:182 ../src/audio_tab.c:214 msgid "Dev. Default" msgstr "" #: ../src/audio_tab.c:204 msgid "Sample Rate:" msgstr "" #: ../src/audio_tab.c:215 msgid "1 - mono" msgstr "" #: ../src/audio_tab.c:216 msgid "2 - stereo" msgstr "" #: ../src/audio_tab.c:251 msgid "Channels:" msgstr "" #: ../src/audio_tab.c:302 msgid "---- Audio Effects ----" msgstr "" #. Echo #: ../src/audio_tab.c:321 msgid " Echo" msgstr "" #. FUZZ #: ../src/audio_tab.c:332 msgid " Fuzz" msgstr "" #. Reverb #: ../src/audio_tab.c:344 msgid " Reverb" msgstr "" #. WahWah #: ../src/audio_tab.c:356 msgid " WahWah" msgstr "" #. Ducky #: ../src/audio_tab.c:368 msgid " Ducky" msgstr "" #: ../src/callbacks.c:108 msgid "Error" msgstr "" #: ../src/callbacks.c:132 msgid "" "\n" "You have more than one video device installed.\n" "Do you want to try another one ?\n" msgstr "" #. Devices #: ../src/callbacks.c:139 ../src/video_tab.c:103 msgid "Device:" msgstr "" #: ../src/callbacks.c:271 msgid "Save File" msgstr "" #: ../src/callbacks.c:283 msgid "File Format:" msgstr "" #: ../src/callbacks.c:454 msgid "codec values" msgstr "" #: ../src/callbacks.c:465 msgid "" " encoder fps: \n" " (0 - use fps combobox value)" msgstr "" #: ../src/callbacks.c:478 msgid " monotonic pts" msgstr "" #. bit rate #: ../src/callbacks.c:485 ../src/callbacks.c:808 msgid "bit rate: " msgstr "" #: ../src/callbacks.c:498 msgid "qmax: " msgstr "" #: ../src/callbacks.c:511 msgid "qmin: " msgstr "" #: ../src/callbacks.c:524 msgid "max. qdiff: " msgstr "" #: ../src/callbacks.c:537 msgid "dia size: " msgstr "" #: ../src/callbacks.c:550 msgid "pre dia size: " msgstr "" #: ../src/callbacks.c:563 msgid "pre me: " msgstr "" #: ../src/callbacks.c:576 msgid "pre cmp: " msgstr "" #: ../src/callbacks.c:589 msgid "cmp: " msgstr "" #: ../src/callbacks.c:602 msgid "sub cmp: " msgstr "" #: ../src/callbacks.c:615 msgid "last predictor count: " msgstr "" #: ../src/callbacks.c:628 msgid "gop size: " msgstr "" #: ../src/callbacks.c:641 msgid "qcompress: " msgstr "" #: ../src/callbacks.c:654 msgid "qblur: " msgstr "" #: ../src/callbacks.c:667 msgid "subq: " msgstr "" #: ../src/callbacks.c:680 msgid "framerefs: " msgstr "" #: ../src/callbacks.c:693 msgid "me method: " msgstr "" #: ../src/callbacks.c:706 msgid "mb decision: " msgstr "" #: ../src/callbacks.c:719 msgid "max B frames: " msgstr "" #: ../src/callbacks.c:732 msgid "num threads: " msgstr "" #: ../src/callbacks.c:795 msgid "audio codec values" msgstr "" #. sample format #: ../src/callbacks.c:822 msgid "sample format: " msgstr "" #: ../src/callbacks.c:1250 msgid "start new" msgstr "" #: ../src/callbacks.c:1253 msgid "restart" msgstr "" #: ../src/callbacks.c:1255 msgid "new" msgstr "" #: ../src/callbacks.c:1257 msgid "cancel" msgstr "" #: ../src/callbacks.c:1262 msgid "" "launch new process or restart?.\n" "\n" msgstr "" #: ../src/callbacks.c:1716 ../src/guvcview.c:537 msgid "Cap. Image (I)" msgstr "" #. disable image controls #: ../src/callbacks.c:1727 ../src/guvcview.c:658 ../src/timers.c:101 msgid "capturing photo to" msgstr "" #: ../src/callbacks.c:1786 ../src/guvcview.c:547 msgid "Cap. Video (V)" msgstr "" #: ../src/callbacks.c:1812 ../src/guvcview.c:708 msgid "capturing video to" msgstr "" #. vid capture enabled from start #: ../src/callbacks.c:1845 ../src/guvcview.c:542 msgid "Stop Video (V)" msgstr "" #: ../src/callbacks.c:1901 ../src/menubar.c:66 msgid "Save Profile" msgstr "" #: ../src/callbacks.c:1914 ../src/menubar.c:65 msgid "Load Profile" msgstr "" #: ../src/create_video.c:1016 ../src/guvcview.c:700 msgid "Cap. Video" msgstr "" #: ../src/guvcview.c:279 msgid "Guvcview Video Capture" msgstr "" #: ../src/guvcview.c:291 msgid "GUVCViewer Controls" msgstr "" #. can't open device #: ../src/guvcview.c:336 msgid "" "Guvcview error:\n" "\n" "Unable to open device" msgstr "" #: ../src/guvcview.c:337 msgid "" "Please make sure the camera is connected\n" "and that the correct driver is installed." msgstr "" #. uvc extension controls OK, give warning and shutdown (called with --add_ctrls) #: ../src/guvcview.c:342 msgid "" "Guvcview:\n" "\n" "UVC Extension controls" msgstr "" #: ../src/guvcview.c:343 msgid "Extension controls were added to the UVC driver" msgstr "" #. uvc extension controls error - EACCES (needs root user) #: ../src/guvcview.c:350 msgid "" "Guvcview error:\n" "\n" "UVC Extension controls" msgstr "" #: ../src/guvcview.c:351 msgid "" "An error occurred while adding extension\n" "controls to the UVC driver\n" "Make sure you run guvcview as root (or sudo)." msgstr "" #: ../src/guvcview.c:377 ../src/guvcview.c:455 msgid "" "Guvcview error:\n" "\n" "Can't set a valid video stream for guvcview" msgstr "" #: ../src/guvcview.c:378 ../src/guvcview.c:456 msgid "" "Make sure your device driver is v4l2 compliant\n" "and that it is properly installed." msgstr "" #: ../src/guvcview.c:400 ../src/guvcview.c:422 msgid "" "Guvcview error:\n" "\n" "Unable to start with minimum setup" msgstr "" #: ../src/guvcview.c:401 ../src/guvcview.c:423 msgid "Please reconnect your camera." msgstr "" #: ../src/guvcview.c:430 msgid "" "Guvcview error:\n" "\n" "Couldn't query device capabilities" msgstr "" #: ../src/guvcview.c:431 msgid "Make sure the device driver supports v4l2." msgstr "" #: ../src/guvcview.c:435 msgid "" "Guvcview error:\n" "\n" "Read method error" msgstr "" #: ../src/guvcview.c:436 msgid "Please try mmap instead (--capture_method=1)." msgstr "" #: ../src/guvcview.c:444 msgid "" "Guvcview error:\n" "\n" "Unable to allocate Buffers" msgstr "" #: ../src/guvcview.c:445 msgid "Please try restarting your system." msgstr "" #: ../src/guvcview.c:490 msgid "Image Controls" msgstr "" #. image auto capture #: ../src/guvcview.c:533 msgid "Stop Auto (I)" msgstr "" #: ../src/guvcview.c:644 msgid "" "Guvcview error:\n" "\n" "Unable to create Video Thread" msgstr "" #: ../src/guvcview.c:645 msgid "Please report it to http://developer.berlios.de/bugs/?group_id=8179" msgstr "" #: ../src/img_controls.c:121 msgid "Auto Focus (continuous)" msgstr "" #: ../src/img_controls.c:122 msgid "set Focus" msgstr "" #: ../src/image_format.c:35 msgid "Jpeg (jpg)" msgstr "" #: ../src/image_format.c:41 msgid "Bitmap (Bmp)" msgstr "" #: ../src/image_format.c:47 msgid "Portable Network Graphics (Png)" msgstr "" #: ../src/image_format.c:53 msgid "Raw Image (raw)" msgstr "" #. controls menu #: ../src/menubar.c:64 msgid "Settings" msgstr "" #: ../src/menubar.c:67 msgid "Hardware Defaults" msgstr "" #: ../src/menubar.c:75 msgid "Camera Button" msgstr "" #: ../src/menubar.c:79 msgid "Capture Image" msgstr "" #: ../src/menubar.c:84 msgid "Capture Video" msgstr "" #. video menu #: ../src/menubar.c:144 ../src/video_tab.c:87 msgid "Video" msgstr "" #: ../src/menubar.c:145 ../src/menubar.c:231 msgid "File" msgstr "" #: ../src/menubar.c:146 ../src/menubar.c:232 msgid "Increment Filename" msgstr "" #: ../src/menubar.c:164 msgid "Video Codec" msgstr "" #: ../src/menubar.c:187 msgid "Video Codec Properties" msgstr "" #: ../src/menubar.c:194 msgid "Audio Codec" msgstr "" #: ../src/menubar.c:215 msgid "Audio Codec Properties" msgstr "" #. photo menu #: ../src/menubar.c:230 msgid "Photo" msgstr "" #: ../src/options.c:752 msgid "Prints version" msgstr "" #: ../src/options.c:753 msgid "Displays debug information" msgstr "" #: ../src/options.c:754 msgid "Video Device to use [default: /dev/video0]" msgstr "" #: ../src/options.c:755 msgid "Exit after adding UVC extension controls (needs root/sudo)" msgstr "" #: ../src/options.c:756 msgid "Don't stream video (image controls only)" msgstr "" #: ../src/options.c:757 msgid "Don't display a GUI" msgstr "" #: ../src/options.c:758 msgid "Capture method (1-mmap (default) 2-read)" msgstr "" #: ../src/options.c:759 msgid "Configuration file" msgstr "" #: ../src/options.c:760 msgid "Hardware accelaration (enable(1) | disable(0))" msgstr "" #: ../src/options.c:761 msgid "" "Pixel " "format(mjpg|jpeg|yuyv|yvyu|uyvy|yyuv|yu12|yv12|nv12|nv21|nv16|nv61|y41p|grey|" "y10b|y16 |s501|s505|s508|gbrg|grbg|ba81|rggb|bgr3|rgb3)" msgstr "" #: ../src/options.c:762 msgid "Frame size, default: 640x480" msgstr "" #: ../src/options.c:763 msgid "Image File name" msgstr "" #: ../src/options.c:764 msgid "Image capture interval in seconds" msgstr "" #: ../src/options.c:765 msgid "Number of Pictures to capture" msgstr "" #: ../src/options.c:766 msgid "Video File name (capture from start)" msgstr "" #: ../src/options.c:767 msgid "Video capture time (in seconds)" msgstr "" #: ../src/options.c:768 msgid "Exits guvcview after closing video" msgstr "" #: ../src/options.c:769 msgid "Number of initial frames to skip" msgstr "" #: ../src/options.c:770 msgid "Show FPS value (enable(1) | disable (0))" msgstr "" #: ../src/options.c:771 msgid "Load Profile at start" msgstr "" #: ../src/options.c:777 msgid "- local options" msgstr "" #. gdk_threads_enter(); #: ../src/timers.c:119 msgid "Cap. Image" msgstr "" #: ../src/timers.c:217 msgid "Guvcview Warning:" msgstr "" #: ../src/timers.c:217 msgid "Not enough free space left on disk" msgstr "" #: ../src/v4l2_controls.c:711 msgid "Left" msgstr "" #: ../src/v4l2_controls.c:712 msgid "Right" msgstr "" #: ../src/v4l2_controls.c:716 msgid "Down" msgstr "" #: ../src/v4l2_controls.c:717 msgid "Up" msgstr "" #: ../src/v4l2_controls.c:762 msgid "Off" msgstr "" #: ../src/v4l2_controls.c:762 msgid "On" msgstr "" #: ../src/v4l2_controls.c:762 msgid "Blinking" msgstr "" #: ../src/v4l2_controls.c:762 msgid "Auto" msgstr "" #. turn it into a menu control #: ../src/v4l2_controls.c:813 msgid "8 bit" msgstr "" #: ../src/v4l2_controls.c:813 msgid "12 bit" msgstr "" #: ../src/v4l2_dyna_ctrls.c:96 msgid "Pan (relative)" msgstr "" #: ../src/v4l2_dyna_ctrls.c:109 msgid "Tilt (relative)" msgstr "" #: ../src/v4l2_dyna_ctrls.c:122 msgid "Pan Reset" msgstr "" #: ../src/v4l2_dyna_ctrls.c:135 msgid "Tilt Reset" msgstr "" #: ../src/v4l2_dyna_ctrls.c:148 msgid "Focus (absolute)" msgstr "" #: ../src/v4l2_dyna_ctrls.c:161 msgid "LED1 Mode" msgstr "" #: ../src/v4l2_dyna_ctrls.c:174 msgid "LED1 Frequency" msgstr "" #: ../src/v4l2_dyna_ctrls.c:187 msgid "Disable video processing" msgstr "" #: ../src/v4l2_dyna_ctrls.c:200 msgid "Raw bits per pixel" msgstr "" #. needed only for language files (not used) #. V4L2 control strings #: ../src/v4l2uvc.c:56 msgid "User Controls" msgstr "" #: ../src/v4l2uvc.c:57 msgid "Brightness" msgstr "" #: ../src/v4l2uvc.c:58 msgid "Contrast" msgstr "" #: ../src/v4l2uvc.c:59 msgid "Hue" msgstr "" #: ../src/v4l2uvc.c:60 msgid "Saturation" msgstr "" #: ../src/v4l2uvc.c:61 msgid "Sharpness" msgstr "" #: ../src/v4l2uvc.c:62 msgid "Gamma" msgstr "" #: ../src/v4l2uvc.c:63 msgid "Backlight Compensation" msgstr "" #: ../src/v4l2uvc.c:64 msgid "Power Line Frequency" msgstr "" #: ../src/v4l2uvc.c:65 msgid "Hue, Automatic" msgstr "" #: ../src/v4l2uvc.c:66 msgid "Focus, Auto" msgstr "" #: ../src/v4l2uvc.c:67 msgid "Manual Mode" msgstr "" #: ../src/v4l2uvc.c:68 msgid "Auto Mode" msgstr "" #: ../src/v4l2uvc.c:69 msgid "Shutter Priority Mode" msgstr "" #: ../src/v4l2uvc.c:70 msgid "Aperture Priority Mode" msgstr "" #: ../src/v4l2uvc.c:71 msgid "Black Level" msgstr "" #: ../src/v4l2uvc.c:72 msgid "White Balance, Automatic" msgstr "" #: ../src/v4l2uvc.c:73 msgid "Do White Balance" msgstr "" #: ../src/v4l2uvc.c:74 msgid "Red Balance" msgstr "" #: ../src/v4l2uvc.c:75 msgid "Blue Balance" msgstr "" #: ../src/v4l2uvc.c:76 msgid "Exposure" msgstr "" #: ../src/v4l2uvc.c:77 msgid "Gain, Automatic" msgstr "" #: ../src/v4l2uvc.c:78 msgid "Gain" msgstr "" #: ../src/v4l2uvc.c:79 msgid "Horizontal Flip" msgstr "" #: ../src/v4l2uvc.c:80 msgid "Vertical Flip" msgstr "" #: ../src/v4l2uvc.c:81 msgid "Horizontal Center" msgstr "" #: ../src/v4l2uvc.c:82 msgid "Vertical Center" msgstr "" #: ../src/v4l2uvc.c:83 msgid "Chroma AGC" msgstr "" #: ../src/v4l2uvc.c:84 msgid "Color Killer" msgstr "" #: ../src/v4l2uvc.c:85 msgid "Color Effects" msgstr "" #. CAMERA CLASS control strings #: ../src/v4l2uvc.c:88 msgid "Camera Controls" msgstr "" #: ../src/v4l2uvc.c:89 msgid "Auto Exposure" msgstr "" #: ../src/v4l2uvc.c:90 msgid "Exposure Time, Absolute" msgstr "" #: ../src/v4l2uvc.c:91 msgid "Exposure, Dynamic Framerate" msgstr "" #: ../src/v4l2uvc.c:92 msgid "Pan, Relative" msgstr "" #: ../src/v4l2uvc.c:93 msgid "Tilt, Relative" msgstr "" #: ../src/v4l2uvc.c:94 msgid "Pan, Reset" msgstr "" #: ../src/v4l2uvc.c:95 msgid "Tilt, Reset" msgstr "" #: ../src/v4l2uvc.c:96 msgid "Pan, Absolute" msgstr "" #: ../src/v4l2uvc.c:98 msgid "Focus, Absolute" msgstr "" #: ../src/v4l2uvc.c:99 msgid "Focus, Relative" msgstr "" #: ../src/v4l2uvc.c:100 msgid "Focus, Automatic" msgstr "" #: ../src/v4l2uvc.c:101 msgid "Zoom, Absolute" msgstr "" #: ../src/v4l2uvc.c:102 msgid "Zoom, Relative" msgstr "" #: ../src/v4l2uvc.c:103 msgid "Zoom, Continuous" msgstr "" #: ../src/v4l2uvc.c:104 msgid "Privacy" msgstr "" #. UVC specific control strings #: ../src/v4l2uvc.c:107 msgid "Exposure, Auto" msgstr "" #: ../src/v4l2uvc.c:108 msgid "Exposure, Auto Priority" msgstr "" #: ../src/v4l2uvc.c:109 msgid "Exposure (Absolute)" msgstr "" #: ../src/v4l2uvc.c:110 msgid "White Balance Temperature, Auto" msgstr "" #: ../src/v4l2uvc.c:111 msgid "White Balance Temperature" msgstr "" #: ../src/v4l2uvc.c:112 msgid "White Balance Component, Auto" msgstr "" #: ../src/v4l2uvc.c:113 msgid "White Balance Blue Component" msgstr "" #: ../src/v4l2uvc.c:114 msgid "White Balance Red Component" msgstr "" #. libwebcam specific control strings #: ../src/v4l2uvc.c:117 msgid "Focus" msgstr "" #: ../src/v4l2uvc.c:118 msgid "Focus (Absolute)" msgstr "" #: ../src/vcodecs.c:63 msgid "MJPG - compressed" msgstr "" #: ../src/vcodecs.c:99 msgid "YUY2 - uncomp YUV" msgstr "" #: ../src/vcodecs.c:135 msgid "RGB - uncomp BMP" msgstr "" #: ../src/vcodecs.c:171 msgid "MPEG video 1" msgstr "" #: ../src/vcodecs.c:207 msgid "FLV1 - flash video 1" msgstr "" #: ../src/vcodecs.c:243 msgid "WMV1 - win. med. video 7" msgstr "" #: ../src/vcodecs.c:279 msgid "MPG2 - MPG2 format" msgstr "" #: ../src/vcodecs.c:315 msgid "MS MP4 V3" msgstr "" #: ../src/vcodecs.c:351 msgid "MPEG4-ASP" msgstr "" #: ../src/vcodecs.c:387 msgid "MPEG4-AVC (H264)" msgstr "" #: ../src/vcodecs.c:427 msgid "VP8 (VP8)" msgstr "" #: ../src/vcodecs.c:463 msgid "Theora (ogg theora)" msgstr "" #: ../src/video_format.c:43 msgid "AVI - avi format" msgstr "" #: ../src/video_format.c:52 msgid "MKV - Matroska format" msgstr "" #: ../src/video_format.c:61 msgid "WEBM - format" msgstr "" #: ../src/video_tab.c:208 msgid "Frame Rate:" msgstr "" #: ../src/video_tab.c:215 msgid " Show" msgstr "" #: ../src/video_tab.c:237 msgid "Resolution:" msgstr "" #: ../src/video_tab.c:263 msgid "Camera Output:" msgstr "" #: ../src/video_tab.c:285 msgid "Apply" msgstr "" #: ../src/video_tab.c:292 msgid "Quality:" msgstr "" #: ../src/video_tab.c:302 msgid "---- Video Filters ----" msgstr "" #. Mirror #: ../src/video_tab.c:321 msgid " Mirror" msgstr "" #. Upturn #: ../src/video_tab.c:332 msgid " Invert" msgstr "" #. Negate #: ../src/video_tab.c:343 msgid " Negative" msgstr "" #. Mono #: ../src/video_tab.c:354 msgid " Mono" msgstr "" #. Pieces #: ../src/video_tab.c:366 msgid " Pieces" msgstr "" #. Particles #: ../src/video_tab.c:378 msgid " Particles" msgstr "" guvcview-src-1.7.1/po/Rules-quot0000664000175000017500000000337612173235416015626 0ustar paulopaulo# Special Makefile rules for English message catalogs with quotation marks. DISTFILES.common.extra1 = quot.sed boldquot.sed en@quot.header en@boldquot.header insert-header.sin Rules-quot .SUFFIXES: .insert-header .po-update-en en@quot.po-create: $(MAKE) en@quot.po-update en@boldquot.po-create: $(MAKE) en@boldquot.po-update en@quot.po-update: en@quot.po-update-en en@boldquot.po-update: en@boldquot.po-update-en .insert-header.po-update-en: @lang=`echo $@ | sed -e 's/\.po-update-en$$//'`; \ if test "$(PACKAGE)" = "gettext"; then PATH=`pwd`/../src:$$PATH; GETTEXTLIBDIR=`cd $(top_srcdir)/src && pwd`; export GETTEXTLIBDIR; fi; \ tmpdir=`pwd`; \ echo "$$lang:"; \ ll=`echo $$lang | sed -e 's/@.*//'`; \ LC_ALL=C; export LC_ALL; \ cd $(srcdir); \ if $(MSGINIT) -i $(DOMAIN).pot --no-translator -l $$ll -o - 2>/dev/null | sed -f $$tmpdir/$$lang.insert-header | $(MSGCONV) -t UTF-8 | $(MSGFILTER) sed -f `echo $$lang | sed -e 's/.*@//'`.sed 2>/dev/null > $$tmpdir/$$lang.new.po; then \ if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \ rm -f $$tmpdir/$$lang.new.po; \ else \ if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \ :; \ else \ echo "creation of $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \ exit 1; \ fi; \ fi; \ else \ echo "creation of $$lang.po failed!" 1>&2; \ rm -f $$tmpdir/$$lang.new.po; \ fi en@quot.insert-header: insert-header.sin sed -e '/^#/d' -e 's/HEADER/en@quot.header/g' $(srcdir)/insert-header.sin > en@quot.insert-header en@boldquot.insert-header: insert-header.sin sed -e '/^#/d' -e 's/HEADER/en@boldquot.header/g' $(srcdir)/insert-header.sin > en@boldquot.insert-header mostlyclean: mostlyclean-quot mostlyclean-quot: rm -f *.insert-header guvcview-src-1.7.1/po/POTFILES.skip0000664000175000017500000000003212173235416015722 0ustar paulopaulodata/guvcview.desktop.in guvcview-src-1.7.1/po/insert-header.sin0000664000175000017500000000124012173235416017054 0ustar paulopaulo# Sed script that inserts the file called HEADER before the header entry. # # At each occurrence of a line starting with "msgid ", we execute the following # commands. At the first occurrence, insert the file. At the following # occurrences, do nothing. The distinction between the first and the following # occurrences is achieved by looking at the hold space. /^msgid /{ x # Test if the hold space is empty. s/m/m/ ta # Yes it was empty. First occurrence. Read the file. r HEADER # Output the file's contents by reading the next line. But don't lose the # current line while doing this. g N bb :a # The hold space was nonempty. Following occurrences. Do nothing. x :b } guvcview-src-1.7.1/po/pt.po0000664000175000017500000005371612173235416014611 0ustar paulopaulo# translation of pt_PT.po to Portuguese # translation of guvcview to Portuguese # Copyright (C) 2008 Paulo Assis # This file is distributed under the same license as the guvcview package. # # guvcview , 2008. msgid "" msgstr "" "Project-Id-Version: pt_PT\n" "Report-Msgid-Bugs-To: pj.assis@gmail.com\n" "POT-Creation-Date: 2013-07-16 12:53+0000\n" "PO-Revision-Date: 2013-02-25 05:38+0000\n" "Last-Translator: Paulo Assis \n" "Language-Team: Portuguese\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2013-07-22 13:32+0000\n" "X-Generator: Launchpad (build 16696)\n" "Language: \n" #: ../data/guvcview.desktop.in.in.h:1 msgid "guvcview" msgstr "guvcview" #: ../data/guvcview.desktop.in.in.h:2 msgid "GTK UVC video viewer" msgstr "Visualizador de vídeo GTK UVC" #: ../data/guvcview.desktop.in.in.h:3 msgid "A video viewer and capturer for the linux uvc driver" msgstr "" "Um visualizador e capturador de de vídeo para o controlador linux uvc" #: ../src/acodecs.c:59 msgid "PCM - uncompressed (16 bit)" msgstr "PCM - não comprimido (16 bit)" #: ../src/acodecs.c:76 msgid "MPEG2 - (lavc)" msgstr "MPEG2 - (lavc)" #: ../src/acodecs.c:93 msgid "MP3 - (lavc)" msgstr "MP3 - (lavc)" #: ../src/acodecs.c:110 msgid "Dolby AC3 - (lavc)" msgstr "Dolby AC3 - (lavc)" #: ../src/acodecs.c:127 msgid "ACC Low - (faac)" msgstr "ACC - (faac)" #: ../src/acodecs.c:144 msgid "Vorbis" msgstr "" #: ../src/audio_tab.c:80 msgid "Audio" msgstr "Ãudio" #: ../src/audio_tab.c:98 msgid " Sound" msgstr " Som" #. VU meter on the image (OSD) #: ../src/audio_tab.c:109 msgid " Show VU meter" msgstr " Mostrar medidor VU" #: ../src/audio_tab.c:121 msgid "Audio API:" msgstr "Ãudio API:" #: ../src/audio_tab.c:132 msgid "PORTAUDIO" msgstr "PORTAUDIO" #: ../src/audio_tab.c:133 msgid "PULSEAUDIO" msgstr "PULSEAUDIO" #: ../src/audio_tab.c:149 ../src/audio_tab.c:172 msgid "Input Device:" msgstr "Dispositivo de som:" #: ../src/audio_tab.c:182 ../src/audio_tab.c:214 msgid "Dev. Default" msgstr "Automático" #: ../src/audio_tab.c:204 msgid "Sample Rate:" msgstr "Frequência:" #: ../src/audio_tab.c:215 msgid "1 - mono" msgstr "1 - mono" #: ../src/audio_tab.c:216 msgid "2 - stereo" msgstr "2 - estéreo" #: ../src/audio_tab.c:251 msgid "Channels:" msgstr "Canais:" #: ../src/audio_tab.c:302 msgid "---- Audio Effects ----" msgstr "---- Efeitos áudio ----" #. Echo #: ../src/audio_tab.c:321 msgid " Echo" msgstr " Eco" #. FUZZ #: ../src/audio_tab.c:332 msgid " Fuzz" msgstr " Ruído" #. Reverb #: ../src/audio_tab.c:344 msgid " Reverb" msgstr " Reverb" #. WahWah #: ../src/audio_tab.c:356 msgid " WahWah" msgstr " WhaWah" #. Ducky #: ../src/audio_tab.c:368 msgid " Ducky" msgstr " Patinho" #: ../src/callbacks.c:108 msgid "Error" msgstr "Erro" #: ../src/callbacks.c:132 msgid "" "\n" "You have more than one video device installed.\n" "Do you want to try another one ?\n" msgstr "" "\n" "Parece que possui mais do que 1 dispositivo de vídeo.\n" "Quer tentar outro?\n" #. Devices #: ../src/callbacks.c:139 ../src/video_tab.c:103 msgid "Device:" msgstr "Dispositivo:" #: ../src/callbacks.c:271 msgid "Save File" msgstr "Gravar ficheiro" #: ../src/callbacks.c:283 msgid "File Format:" msgstr "" #: ../src/callbacks.c:454 msgid "codec values" msgstr "valores do codificador" #: ../src/callbacks.c:465 msgid "" " encoder fps: \n" " (0 - use fps combobox value)" msgstr "" " fps do codificador: \n" " (0 - utilizar valor da caixa de combinação)" #: ../src/callbacks.c:478 msgid " monotonic pts" msgstr " pts monótonos" #. bit rate #: ../src/callbacks.c:485 ../src/callbacks.c:808 msgid "bit rate: " msgstr "taxa de dados " #: ../src/callbacks.c:498 msgid "qmax: " msgstr "qmax: " #: ../src/callbacks.c:511 msgid "qmin: " msgstr "qmin: " #: ../src/callbacks.c:524 msgid "max. qdiff: " msgstr "max. qdiff: " #: ../src/callbacks.c:537 msgid "dia size: " msgstr "tamanho dia: " #: ../src/callbacks.c:550 msgid "pre dia size: " msgstr "tamanho pré-dia: " #: ../src/callbacks.c:563 msgid "pre me: " msgstr "pre me: " #: ../src/callbacks.c:576 msgid "pre cmp: " msgstr "pre cmp: " #: ../src/callbacks.c:589 msgid "cmp: " msgstr "cmp: " #: ../src/callbacks.c:602 msgid "sub cmp: " msgstr "sub cmp: " #: ../src/callbacks.c:615 msgid "last predictor count: " msgstr "última contagem: " #: ../src/callbacks.c:628 msgid "gop size: " msgstr "tamanho gop: " #: ../src/callbacks.c:641 msgid "qcompress: " msgstr "qcompress: " #: ../src/callbacks.c:654 msgid "qblur: " msgstr "qblur: " #: ../src/callbacks.c:667 msgid "subq: " msgstr "subq: " #: ../src/callbacks.c:680 msgid "framerefs: " msgstr "framerefs: " #: ../src/callbacks.c:693 msgid "me method: " msgstr "método me: " #: ../src/callbacks.c:706 msgid "mb decision: " msgstr "decisão mb: " #: ../src/callbacks.c:719 msgid "max B frames: " msgstr "max B frames: " #: ../src/callbacks.c:732 msgid "num threads: " msgstr "processos: " #: ../src/callbacks.c:795 msgid "audio codec values" msgstr "valores do codificador áudio" #. sample format #: ../src/callbacks.c:822 msgid "sample format: " msgstr "" #: ../src/callbacks.c:1250 msgid "start new" msgstr "iniciar novo" #: ../src/callbacks.c:1253 msgid "restart" msgstr "reiniciar" #: ../src/callbacks.c:1255 msgid "new" msgstr "novo" #: ../src/callbacks.c:1257 msgid "cancel" msgstr "cancelar" #: ../src/callbacks.c:1262 msgid "" "launch new process or restart?.\n" "\n" msgstr "" "quer iniciar um novo processo ou reiniciar?\n" "\n" #: ../src/callbacks.c:1716 ../src/guvcview.c:537 msgid "Cap. Image (I)" msgstr "Cap. Imagem (I)" #. disable image controls #: ../src/callbacks.c:1727 ../src/guvcview.c:658 ../src/timers.c:101 msgid "capturing photo to" msgstr "" #: ../src/callbacks.c:1786 ../src/guvcview.c:547 msgid "Cap. Video (V)" msgstr "Cap. Video (V)" #: ../src/callbacks.c:1812 ../src/guvcview.c:708 msgid "capturing video to" msgstr "" #. vid capture enabled from start #: ../src/callbacks.c:1845 ../src/guvcview.c:542 msgid "Stop Video (V)" msgstr "Parar Video (V)" #: ../src/callbacks.c:1901 ../src/menubar.c:66 msgid "Save Profile" msgstr "Gravar Perfil" #: ../src/callbacks.c:1914 ../src/menubar.c:65 msgid "Load Profile" msgstr "Carregar Perfil" #: ../src/create_video.c:1016 ../src/guvcview.c:700 msgid "Cap. Video" msgstr "Capturar vídeo" #: ../src/guvcview.c:279 msgid "Guvcview Video Capture" msgstr "Captura de vídeo Guvcview" #: ../src/guvcview.c:291 msgid "GUVCViewer Controls" msgstr "Controlos do Guvcview" #. can't open device #: ../src/guvcview.c:336 msgid "" "Guvcview error:\n" "\n" "Unable to open device" msgstr "" "Erro Guvcview:\n" "\n" "Não foi possível ligar à câmara" #: ../src/guvcview.c:337 msgid "" "Please make sure the camera is connected\n" "and that the correct driver is installed." msgstr "" "Verifique a ligação à câmara e certifique-se\n" "que tem o controlador instalado" #. uvc extension controls OK, give warning and shutdown (called with --add_ctrls) #: ../src/guvcview.c:342 msgid "" "Guvcview:\n" "\n" "UVC Extension controls" msgstr "" "Guvcview:\n" "\n" "Controlos dinâmicos UVC" #: ../src/guvcview.c:343 msgid "Extension controls were added to the UVC driver" msgstr "Os controlos dinâmicos foram adicionados ao controlador UVC" #. uvc extension controls error - EACCES (needs root user) #: ../src/guvcview.c:350 msgid "" "Guvcview error:\n" "\n" "UVC Extension controls" msgstr "" "Erro Guvcview:\n" "\n" "Controlos dinâmicos UVC" #: ../src/guvcview.c:351 msgid "" "An error occurred while adding extension\n" "controls to the UVC driver\n" "Make sure you run guvcview as root (or sudo)." msgstr "" "Ocorreu um erro ao adicionar os controlos\n" "dinâmicos ao controlador UVC\n" "Verifique se iniciou guvcview como root (ou sudo)." #: ../src/guvcview.c:377 ../src/guvcview.c:455 msgid "" "Guvcview error:\n" "\n" "Can't set a valid video stream for guvcview" msgstr "" "Erro Guvcview:\n" "\n" "Não foi possível definir um formato de vídeo válido" #: ../src/guvcview.c:378 ../src/guvcview.c:456 msgid "" "Make sure your device driver is v4l2 compliant\n" "and that it is properly installed." msgstr "" "Certifique-se que a câmara é compatível com\n" "o v4l2 e que está instalada corretamente" #: ../src/guvcview.c:400 ../src/guvcview.c:422 msgid "" "Guvcview error:\n" "\n" "Unable to start with minimum setup" msgstr "" "Erro Guvcview:\n" "\n" "Não foi possível iniciar a configuração mínima" #: ../src/guvcview.c:401 ../src/guvcview.c:423 msgid "Please reconnect your camera." msgstr "Deve remover e ligar novamente a câmara" #: ../src/guvcview.c:430 msgid "" "Guvcview error:\n" "\n" "Couldn't query device capabilities" msgstr "" "Erro Guvcview:\n" "\n" "Não foi possível verificar as propriedades do dispositivo" #: ../src/guvcview.c:431 msgid "Make sure the device driver supports v4l2." msgstr "Certifique-se que o dispositivo tem suporte ao v4l2" #: ../src/guvcview.c:435 msgid "" "Guvcview error:\n" "\n" "Read method error" msgstr "" "Erro Guvcview:\n" "\n" "Erro no método de leitura" #: ../src/guvcview.c:436 msgid "Please try mmap instead (--capture_method=1)." msgstr "Tente com mmap (--capture_method=1)" #: ../src/guvcview.c:444 msgid "" "Guvcview error:\n" "\n" "Unable to allocate Buffers" msgstr "" "Erro Guvcview:\n" "\n" "Não foi possível alocar os \"buffers\"" #: ../src/guvcview.c:445 msgid "Please try restarting your system." msgstr "Por favor reinicie o sistema" #: ../src/guvcview.c:490 msgid "Image Controls" msgstr "Controlos de imagem" #. image auto capture #: ../src/guvcview.c:533 msgid "Stop Auto (I)" msgstr "Parar Auto (I):" #: ../src/guvcview.c:644 msgid "" "Guvcview error:\n" "\n" "Unable to create Video Thread" msgstr "" "Erro Guvcview:\n" "\n" "Não foi possível criar processo de vídeo" #: ../src/guvcview.c:645 msgid "Please report it to http://developer.berlios.de/bugs/?group_id=8179" msgstr "Reporte este erro em http://developer.berlios.de/bugs/?group_id=8179" #: ../src/img_controls.c:121 msgid "Auto Focus (continuous)" msgstr "Foco automático (continuo)" #: ../src/img_controls.c:122 msgid "set Focus" msgstr "Focar" #: ../src/image_format.c:35 msgid "Jpeg (jpg)" msgstr "" #: ../src/image_format.c:41 msgid "Bitmap (Bmp)" msgstr "" #: ../src/image_format.c:47 msgid "Portable Network Graphics (Png)" msgstr "" #: ../src/image_format.c:53 msgid "Raw Image (raw)" msgstr "" #. controls menu #: ../src/menubar.c:64 msgid "Settings" msgstr "Definições" #: ../src/menubar.c:67 msgid "Hardware Defaults" msgstr "Pré-definição de Hardware" #: ../src/menubar.c:75 msgid "Camera Button" msgstr "Botão da Câmera" #: ../src/menubar.c:79 msgid "Capture Image" msgstr "Capturar Imagem" #: ../src/menubar.c:84 msgid "Capture Video" msgstr "Capturar Video" #. video menu #: ../src/menubar.c:144 ../src/video_tab.c:87 msgid "Video" msgstr "Video" #: ../src/menubar.c:145 ../src/menubar.c:231 msgid "File" msgstr "Ficheiro" #: ../src/menubar.c:146 ../src/menubar.c:232 msgid "Increment Filename" msgstr "Increm. nome do ficheiro" #: ../src/menubar.c:164 msgid "Video Codec" msgstr "Codec de Video" #: ../src/menubar.c:187 msgid "Video Codec Properties" msgstr "Propr. Codec de Video" #: ../src/menubar.c:194 msgid "Audio Codec" msgstr "Codec de Audio" #: ../src/menubar.c:215 msgid "Audio Codec Properties" msgstr "Propr. Codec de Audio" #. photo menu #: ../src/menubar.c:230 msgid "Photo" msgstr "Foto" #: ../src/options.c:752 msgid "Prints version" msgstr "Mostra a versão" #: ../src/options.c:753 msgid "Displays debug information" msgstr "Mostrar informações de depuração" #: ../src/options.c:754 msgid "Video Device to use [default: /dev/video0]" msgstr "Dispositivo de vídeo [predefinição: /dev/video0]" #: ../src/options.c:755 msgid "Exit after adding UVC extension controls (needs root/sudo)" msgstr "Sair após adicionar os controlos dinâmicos ao UVC (requer root/sudo)" #: ../src/options.c:756 msgid "Don't stream video (image controls only)" msgstr "Não emitir vídeo (só controlo de imagem)" #: ../src/options.c:757 msgid "Don't display a GUI" msgstr "Não mostrar interface" #: ../src/options.c:758 msgid "Capture method (1-mmap (default) 2-read)" msgstr "Método de captura (1-mmap (predefinido) 2 -leitura)" #: ../src/options.c:759 msgid "Configuration file" msgstr "Ficheiro de configuração" #: ../src/options.c:760 msgid "Hardware accelaration (enable(1) | disable(0))" msgstr "Aceleração de vídeo (ativa (1) | inativa (0))" #: ../src/options.c:761 msgid "" "Pixel " "format(mjpg|jpeg|yuyv|yvyu|uyvy|yyuv|yu12|yv12|nv12|nv21|nv16|nv61|y41p|grey|" "y10b|y16 |s501|s505|s508|gbrg|grbg|ba81|rggb|bgr3|rgb3)" msgstr "" "Formatos pixel " "(mjpg|jpeg|yuyv|yvyu|uyvy|yyuv|yu12|yv12|nv12|nv21|nv16|nv61|y41p|grey|y10b|y" "16 |s501|s505|s508|gbrg|grbg|ba81|rggb|bgr3|rgb3)" #: ../src/options.c:762 msgid "Frame size, default: 640x480" msgstr "Resolução (predefinido: 640x480" #: ../src/options.c:763 msgid "Image File name" msgstr "Nome do ficheiro" #: ../src/options.c:764 msgid "Image capture interval in seconds" msgstr "Intervalo entre capturas (em segundos)" #: ../src/options.c:765 msgid "Number of Pictures to capture" msgstr "Numero de imagens a capturar" #: ../src/options.c:766 msgid "Video File name (capture from start)" msgstr "Nome do ficheiro (capturar ao iniciar)" #: ../src/options.c:767 msgid "Video capture time (in seconds)" msgstr "Tempo de captura vídeo (em segundos)" #: ../src/options.c:768 msgid "Exits guvcview after closing video" msgstr "Sair do Guvcview ao fechar o vídeo" #: ../src/options.c:769 msgid "Number of initial frames to skip" msgstr "Número de fotogramas iniciais a ignorar" #: ../src/options.c:770 msgid "Show FPS value (enable(1) | disable (0))" msgstr "Mostrar valor FPS (ativo (1) | inativo (0))" #: ../src/options.c:771 msgid "Load Profile at start" msgstr "Carregar perfil ao iniciar" #: ../src/options.c:777 msgid "- local options" msgstr "- opções locais" #. gdk_threads_enter(); #: ../src/timers.c:119 msgid "Cap. Image" msgstr "Capturar imagem" #: ../src/timers.c:217 msgid "Guvcview Warning:" msgstr "Alerta do Guvcview:" #: ../src/timers.c:217 msgid "Not enough free space left on disk" msgstr "O espaço livre do disco não é suficiente" #: ../src/v4l2_controls.c:711 msgid "Left" msgstr "Esquerda" #: ../src/v4l2_controls.c:712 msgid "Right" msgstr "Direita" #: ../src/v4l2_controls.c:716 msgid "Down" msgstr "Baixo" #: ../src/v4l2_controls.c:717 msgid "Up" msgstr "Cima" #: ../src/v4l2_controls.c:762 msgid "Off" msgstr "Desligado" #: ../src/v4l2_controls.c:762 msgid "On" msgstr "Ligado" #: ../src/v4l2_controls.c:762 msgid "Blinking" msgstr "Intermitente" #: ../src/v4l2_controls.c:762 msgid "Auto" msgstr "Automático" #. turn it into a menu control #: ../src/v4l2_controls.c:813 msgid "8 bit" msgstr "8 bits" #: ../src/v4l2_controls.c:813 msgid "12 bit" msgstr "12 bits" #: ../src/v4l2_dyna_ctrls.c:96 msgid "Pan (relative)" msgstr "Rotação (relativa)" #: ../src/v4l2_dyna_ctrls.c:109 msgid "Tilt (relative)" msgstr "Inclinação (relativa)" #: ../src/v4l2_dyna_ctrls.c:122 msgid "Pan Reset" msgstr "Restaurar rotação" #: ../src/v4l2_dyna_ctrls.c:135 msgid "Tilt Reset" msgstr "Restaurar inclinação" #: ../src/v4l2_dyna_ctrls.c:148 msgid "Focus (absolute)" msgstr "Focagem (absoluta)" #: ../src/v4l2_dyna_ctrls.c:161 msgid "LED1 Mode" msgstr "Modo LED1" #: ../src/v4l2_dyna_ctrls.c:174 msgid "LED1 Frequency" msgstr "Frequência LED1" #: ../src/v4l2_dyna_ctrls.c:187 msgid "Disable video processing" msgstr "Desativar processamento vídeo" #: ../src/v4l2_dyna_ctrls.c:200 msgid "Raw bits per pixel" msgstr "Bits por pixel (Raw)" #. needed only for language files (not used) #. V4L2 control strings #: ../src/v4l2uvc.c:56 msgid "User Controls" msgstr "Controlos de utilizador" #: ../src/v4l2uvc.c:57 msgid "Brightness" msgstr "Brilho" #: ../src/v4l2uvc.c:58 msgid "Contrast" msgstr "Contraste" #: ../src/v4l2uvc.c:59 msgid "Hue" msgstr "Cor" #: ../src/v4l2uvc.c:60 msgid "Saturation" msgstr "Saturação" #: ../src/v4l2uvc.c:61 msgid "Sharpness" msgstr "Nitidez" #: ../src/v4l2uvc.c:62 msgid "Gamma" msgstr "Gama" #: ../src/v4l2uvc.c:63 msgid "Backlight Compensation" msgstr "Compensação da iluminação" #: ../src/v4l2uvc.c:64 msgid "Power Line Frequency" msgstr "Frequência da linha elétrica" #: ../src/v4l2uvc.c:65 msgid "Hue, Automatic" msgstr "Cor automática" #: ../src/v4l2uvc.c:66 msgid "Focus, Auto" msgstr "Focagem automática" #: ../src/v4l2uvc.c:67 msgid "Manual Mode" msgstr "Modo manual" #: ../src/v4l2uvc.c:68 msgid "Auto Mode" msgstr "Modo automático" #: ../src/v4l2uvc.c:69 msgid "Shutter Priority Mode" msgstr "Modo prioridade do obturador" #: ../src/v4l2uvc.c:70 msgid "Aperture Priority Mode" msgstr "Modo prioridade da abertura" #: ../src/v4l2uvc.c:71 msgid "Black Level" msgstr "Nível do preto" #: ../src/v4l2uvc.c:72 msgid "White Balance, Automatic" msgstr "Balanço de brancos automático" #: ../src/v4l2uvc.c:73 msgid "Do White Balance" msgstr "Balancear brancos" #: ../src/v4l2uvc.c:74 msgid "Red Balance" msgstr "Balancear vermelhos" #: ../src/v4l2uvc.c:75 msgid "Blue Balance" msgstr "Balancear azuis" #: ../src/v4l2uvc.c:76 msgid "Exposure" msgstr "Exposição" #: ../src/v4l2uvc.c:77 msgid "Gain, Automatic" msgstr "Ganho automático" #: ../src/v4l2uvc.c:78 msgid "Gain" msgstr "Ganho" #: ../src/v4l2uvc.c:79 msgid "Horizontal Flip" msgstr "Inversão horizontal" #: ../src/v4l2uvc.c:80 msgid "Vertical Flip" msgstr "Inversão vertical" #: ../src/v4l2uvc.c:81 msgid "Horizontal Center" msgstr "Eixo horizontal" #: ../src/v4l2uvc.c:82 msgid "Vertical Center" msgstr "Eixo vertical" #: ../src/v4l2uvc.c:83 msgid "Chroma AGC" msgstr "Chroma AGC" #: ../src/v4l2uvc.c:84 msgid "Color Killer" msgstr "Remoção de cores" #: ../src/v4l2uvc.c:85 msgid "Color Effects" msgstr "Efeitos de cor" #. CAMERA CLASS control strings #: ../src/v4l2uvc.c:88 msgid "Camera Controls" msgstr "Controlos de câmara" #: ../src/v4l2uvc.c:89 msgid "Auto Exposure" msgstr "Exposição automática" #: ../src/v4l2uvc.c:90 msgid "Exposure Time, Absolute" msgstr "Tempo de exposição absoluto" #: ../src/v4l2uvc.c:91 msgid "Exposure, Dynamic Framerate" msgstr "Exposição com fotogramas dinâmicos" #: ../src/v4l2uvc.c:92 msgid "Pan, Relative" msgstr "Rotação relativa" #: ../src/v4l2uvc.c:93 msgid "Tilt, Relative" msgstr "Inclinação relativa" #: ../src/v4l2uvc.c:94 msgid "Pan, Reset" msgstr "Restaurar rotação" #: ../src/v4l2uvc.c:95 msgid "Tilt, Reset" msgstr "Restaurar inclinação" #: ../src/v4l2uvc.c:96 msgid "Pan, Absolute" msgstr "Rotação absoluta" #: ../src/v4l2uvc.c:98 msgid "Focus, Absolute" msgstr "Focagem absoluta" #: ../src/v4l2uvc.c:99 msgid "Focus, Relative" msgstr "Focagem relativa" #: ../src/v4l2uvc.c:100 msgid "Focus, Automatic" msgstr "Focagem automática" #: ../src/v4l2uvc.c:101 msgid "Zoom, Absolute" msgstr "Ampliação absoluta" #: ../src/v4l2uvc.c:102 msgid "Zoom, Relative" msgstr "Ampliação relativa" #: ../src/v4l2uvc.c:103 msgid "Zoom, Continuous" msgstr "Ampliação continua" #: ../src/v4l2uvc.c:104 msgid "Privacy" msgstr "Privacidade" #. UVC specific control strings #: ../src/v4l2uvc.c:107 msgid "Exposure, Auto" msgstr "Exposição automática" #: ../src/v4l2uvc.c:108 msgid "Exposure, Auto Priority" msgstr "Esxposição com prioridade automática" #: ../src/v4l2uvc.c:109 msgid "Exposure (Absolute)" msgstr "Exposição absoluta" #: ../src/v4l2uvc.c:110 msgid "White Balance Temperature, Auto" msgstr "Balanceamento de brancos automático" #: ../src/v4l2uvc.c:111 msgid "White Balance Temperature" msgstr "Temperatura do balanceamento de brancos" #: ../src/v4l2uvc.c:112 msgid "White Balance Component, Auto" msgstr "Componente de brancos automática" #: ../src/v4l2uvc.c:113 msgid "White Balance Blue Component" msgstr "Componente azul" #: ../src/v4l2uvc.c:114 msgid "White Balance Red Component" msgstr "Componente vermelho" #. libwebcam specific control strings #: ../src/v4l2uvc.c:117 msgid "Focus" msgstr "Focagem" #: ../src/v4l2uvc.c:118 msgid "Focus (Absolute)" msgstr "Focagem absoluta" #: ../src/vcodecs.c:63 msgid "MJPG - compressed" msgstr "MJPG - com compressão" #: ../src/vcodecs.c:99 msgid "YUY2 - uncomp YUV" msgstr "YUY2 - YUV sem compressão" #: ../src/vcodecs.c:135 msgid "RGB - uncomp BMP" msgstr "RGB - BMP sem compressão" #: ../src/vcodecs.c:171 msgid "MPEG video 1" msgstr "MPEG vídeo 1" #: ../src/vcodecs.c:207 msgid "FLV1 - flash video 1" msgstr "FLV1 - Vídeo flash 1" #: ../src/vcodecs.c:243 msgid "WMV1 - win. med. video 7" msgstr "WMV1 - vídeo wma 7" #: ../src/vcodecs.c:279 msgid "MPG2 - MPG2 format" msgstr "MPG2 - vídeo MPG2" #: ../src/vcodecs.c:315 msgid "MS MP4 V3" msgstr "MS MP4 V3" #: ../src/vcodecs.c:351 msgid "MPEG4-ASP" msgstr "MPEG4-ASP" #: ../src/vcodecs.c:387 msgid "MPEG4-AVC (H264)" msgstr "MPEG4-AVC (H264)" #: ../src/vcodecs.c:427 msgid "VP8 (VP8)" msgstr "" #: ../src/vcodecs.c:463 msgid "Theora (ogg theora)" msgstr "" #: ../src/video_format.c:43 msgid "AVI - avi format" msgstr "AVI - vídeo avi" #: ../src/video_format.c:52 msgid "MKV - Matroska format" msgstr "MKV - Vídeo mkv" #: ../src/video_format.c:61 msgid "WEBM - format" msgstr "" #: ../src/video_tab.c:208 msgid "Frame Rate:" msgstr "Taxa de imagens:" #: ../src/video_tab.c:215 msgid " Show" msgstr " Mostrar" #: ../src/video_tab.c:237 msgid "Resolution:" msgstr "Resolução:" #: ../src/video_tab.c:263 msgid "Camera Output:" msgstr "Saída da câmara:" #: ../src/video_tab.c:285 msgid "Apply" msgstr "Aplicar" #: ../src/video_tab.c:292 msgid "Quality:" msgstr "Qualidade:" #: ../src/video_tab.c:302 msgid "---- Video Filters ----" msgstr "---- Filtros de vídeo ----" #. Mirror #: ../src/video_tab.c:321 msgid " Mirror" msgstr " Espelho" #. Upturn #: ../src/video_tab.c:332 msgid " Invert" msgstr " Invertido" #. Negate #: ../src/video_tab.c:343 msgid " Negative" msgstr " Negativo" #. Mono #: ../src/video_tab.c:354 msgid " Mono" msgstr " Cinza" #. Pieces #: ../src/video_tab.c:366 msgid " Pieces" msgstr " Pedaços" #. Particles #: ../src/video_tab.c:378 msgid " Particles" msgstr " Partículas" guvcview-src-1.7.1/po/pt_BR.po0000664000175000017500000005353212173235416015170 0ustar paulopaulo# translation of pt_BR.po to Portuguese # translation of guvcview to Portuguese # Copyright (C) 2008 Paulo Assis # This file is distributed under the same license as the guvcview package. # guvcview , 2008. # Djavan Fagundes , 2011. msgid "" msgstr "" "Project-Id-Version: pt_BR\n" "Report-Msgid-Bugs-To: pj.assis@gmail.com\n" "POT-Creation-Date: 2013-07-16 12:53+0000\n" "PO-Revision-Date: 2013-02-25 05:32+0000\n" "Last-Translator: Giovanni Scafora \n" "Language-Team: Brazilian Portuguese \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2013-07-22 13:32+0000\n" "X-Generator: Launchpad (build 16696)\n" "X-Project-Style: default\n" "Language: pt\n" #: ../data/guvcview.desktop.in.in.h:1 msgid "guvcview" msgstr "" #: ../data/guvcview.desktop.in.in.h:2 msgid "GTK UVC video viewer" msgstr "" #: ../data/guvcview.desktop.in.in.h:3 msgid "A video viewer and capturer for the linux uvc driver" msgstr "Um visualizador de vídeos e captura para o driver linux uvc" #: ../src/acodecs.c:59 msgid "PCM - uncompressed (16 bit)" msgstr "" #: ../src/acodecs.c:76 msgid "MPEG2 - (lavc)" msgstr "" #: ../src/acodecs.c:93 msgid "MP3 - (lavc)" msgstr "" #: ../src/acodecs.c:110 msgid "Dolby AC3 - (lavc)" msgstr "" #: ../src/acodecs.c:127 msgid "ACC Low - (faac)" msgstr "" #: ../src/acodecs.c:144 msgid "Vorbis" msgstr "" #: ../src/audio_tab.c:80 msgid "Audio" msgstr "Ãudio" #: ../src/audio_tab.c:98 msgid " Sound" msgstr " Som" #. VU meter on the image (OSD) #: ../src/audio_tab.c:109 msgid " Show VU meter" msgstr " Mostrar Volume" #: ../src/audio_tab.c:121 msgid "Audio API:" msgstr "API de áudio:" #: ../src/audio_tab.c:132 msgid "PORTAUDIO" msgstr "PORTAUDIO" #: ../src/audio_tab.c:133 msgid "PULSEAUDIO" msgstr "PULSEAUDIO" #: ../src/audio_tab.c:149 ../src/audio_tab.c:172 msgid "Input Device:" msgstr "Dispositivo de entrada:" #: ../src/audio_tab.c:182 ../src/audio_tab.c:214 msgid "Dev. Default" msgstr "Padrão" #: ../src/audio_tab.c:204 msgid "Sample Rate:" msgstr "Taxa de amostragem:" #: ../src/audio_tab.c:215 msgid "1 - mono" msgstr "1 - mono" #: ../src/audio_tab.c:216 msgid "2 - stereo" msgstr "2 - stereo" #: ../src/audio_tab.c:251 msgid "Channels:" msgstr "Canais:" #: ../src/audio_tab.c:302 msgid "---- Audio Effects ----" msgstr "---- Efeitos de áudio ----" #. Echo #: ../src/audio_tab.c:321 msgid " Echo" msgstr " Eco" #. FUZZ #: ../src/audio_tab.c:332 msgid " Fuzz" msgstr " Ruído" #. Reverb #: ../src/audio_tab.c:344 msgid " Reverb" msgstr " Reverb" #. WahWah #: ../src/audio_tab.c:356 msgid " WahWah" msgstr " WahWah" #. Ducky #: ../src/audio_tab.c:368 msgid " Ducky" msgstr " Patinho" #: ../src/callbacks.c:108 msgid "Error" msgstr "Erro" #: ../src/callbacks.c:132 msgid "" "\n" "You have more than one video device installed.\n" "Do you want to try another one ?\n" msgstr "" "\n" "Foram detectados múltiplos dispositivos de vídeo.\n" "Quer tentar outro?\n" #. Devices #: ../src/callbacks.c:139 ../src/video_tab.c:103 msgid "Device:" msgstr "Dispositivo:" #: ../src/callbacks.c:271 msgid "Save File" msgstr "Salvar arquivo" #: ../src/callbacks.c:283 msgid "File Format:" msgstr "" #: ../src/callbacks.c:454 msgid "codec values" msgstr "valores do codec" #: ../src/callbacks.c:465 msgid "" " encoder fps: \n" " (0 - use fps combobox value)" msgstr "" " codificador fps: \n" " (0 - use o valor fps da caixa de marcação)" #: ../src/callbacks.c:478 msgid " monotonic pts" msgstr " pts monotonico" #. bit rate #: ../src/callbacks.c:485 ../src/callbacks.c:808 msgid "bit rate: " msgstr "taxa de bits: " #: ../src/callbacks.c:498 msgid "qmax: " msgstr "qmax: " #: ../src/callbacks.c:511 msgid "qmin: " msgstr "qmin: " #: ../src/callbacks.c:524 msgid "max. qdiff: " msgstr "qdiff max: " #: ../src/callbacks.c:537 msgid "dia size: " msgstr "tamanho do dia: " #: ../src/callbacks.c:550 msgid "pre dia size: " msgstr "tamanho do diâ pré: " #: ../src/callbacks.c:563 msgid "pre me: " msgstr "pre me: " #: ../src/callbacks.c:576 msgid "pre cmp: " msgstr "pre cmp: " #: ../src/callbacks.c:589 msgid "cmp: " msgstr "cmp: " #: ../src/callbacks.c:602 msgid "sub cmp: " msgstr "sub cmp: " #: ../src/callbacks.c:615 msgid "last predictor count: " msgstr "última contagem preditor: " #: ../src/callbacks.c:628 msgid "gop size: " msgstr "tamanho do gop: " #: ../src/callbacks.c:641 msgid "qcompress: " msgstr "qcompress: " #: ../src/callbacks.c:654 msgid "qblur: " msgstr "qblur: " #: ../src/callbacks.c:667 msgid "subq: " msgstr "subq: " #: ../src/callbacks.c:680 msgid "framerefs: " msgstr "framerefs: " #: ../src/callbacks.c:693 msgid "me method: " msgstr "método me: " #: ../src/callbacks.c:706 msgid "mb decision: " msgstr "decisão mb: " #: ../src/callbacks.c:719 msgid "max B frames: " msgstr "Max quadros B: " #: ../src/callbacks.c:732 msgid "num threads: " msgstr "num threads: " #: ../src/callbacks.c:795 msgid "audio codec values" msgstr "valores do codec de áudio" #. sample format #: ../src/callbacks.c:822 msgid "sample format: " msgstr "" #: ../src/callbacks.c:1250 msgid "start new" msgstr "iniciar novo" #: ../src/callbacks.c:1253 msgid "restart" msgstr "reiniciar" #: ../src/callbacks.c:1255 msgid "new" msgstr "novo" #: ../src/callbacks.c:1257 msgid "cancel" msgstr "cancelar" #: ../src/callbacks.c:1262 msgid "" "launch new process or restart?.\n" "\n" msgstr "" "lançar novo processo ou recomeçar?.\n" "\n" #: ../src/callbacks.c:1716 ../src/guvcview.c:537 msgid "Cap. Image (I)" msgstr "Cap. imagem (I)" #. disable image controls #: ../src/callbacks.c:1727 ../src/guvcview.c:658 ../src/timers.c:101 msgid "capturing photo to" msgstr "" #: ../src/callbacks.c:1786 ../src/guvcview.c:547 msgid "Cap. Video (V)" msgstr "Cap. vídeo (V)" #: ../src/callbacks.c:1812 ../src/guvcview.c:708 msgid "capturing video to" msgstr "" #. vid capture enabled from start #: ../src/callbacks.c:1845 ../src/guvcview.c:542 msgid "Stop Video (V)" msgstr "Parar vídeo (V)" #: ../src/callbacks.c:1901 ../src/menubar.c:66 msgid "Save Profile" msgstr "" #: ../src/callbacks.c:1914 ../src/menubar.c:65 msgid "Load Profile" msgstr "Carregar Perfil" #: ../src/create_video.c:1016 ../src/guvcview.c:700 msgid "Cap. Video" msgstr "Cap. vídeo" #: ../src/guvcview.c:279 msgid "Guvcview Video Capture" msgstr "Capturador de vídeo Guvcview" #: ../src/guvcview.c:291 msgid "GUVCViewer Controls" msgstr "Controles do GUVCViewer" #. can't open device #: ../src/guvcview.c:336 msgid "" "Guvcview error:\n" "\n" "Unable to open device" msgstr "" "Erro do Guvcview:\n" "\n" "Não foi possível conectar a câmera" #: ../src/guvcview.c:337 msgid "" "Please make sure the camera is connected\n" "and that the correct driver is installed." msgstr "" "Por favor, verifique a conexão\n" "e se o driver correto está instalado." #. uvc extension controls OK, give warning and shutdown (called with --add_ctrls) #: ../src/guvcview.c:342 msgid "" "Guvcview:\n" "\n" "UVC Extension controls" msgstr "" "Guvcview:\n" "\n" "Extensão de controles UVC" #: ../src/guvcview.c:343 msgid "Extension controls were added to the UVC driver" msgstr "As extensões de controles foram adicionadas ao driver UVC" #. uvc extension controls error - EACCES (needs root user) #: ../src/guvcview.c:350 msgid "" "Guvcview error:\n" "\n" "UVC Extension controls" msgstr "" "Erro do Guvcview:\n" "\n" "Extensões de controles UVC" #: ../src/guvcview.c:351 msgid "" "An error occurred while adding extension\n" "controls to the UVC driver\n" "Make sure you run guvcview as root (or sudo)." msgstr "" "Ocorreu um erro ao adicionar as extensões de\n" "controles ao driver UVC\n" "Verifique se iniciou o guvcview como root (ou sudo)." #: ../src/guvcview.c:377 ../src/guvcview.c:455 msgid "" "Guvcview error:\n" "\n" "Can't set a valid video stream for guvcview" msgstr "" "Erro do Guvcview:\n" "\n" "Não foi possível definir um fluxo de vídeo para o guvcview" #: ../src/guvcview.c:378 ../src/guvcview.c:456 msgid "" "Make sure your device driver is v4l2 compliant\n" "and that it is properly installed." msgstr "" "Verifique se o driver é compatível com v4l2\n" "e se este se está instalado corretamente." #: ../src/guvcview.c:400 ../src/guvcview.c:422 msgid "" "Guvcview error:\n" "\n" "Unable to start with minimum setup" msgstr "" "Guvcview erro:\n" "\n" "Não foi possível iniciar com as definições mínimas" #: ../src/guvcview.c:401 ../src/guvcview.c:423 msgid "Please reconnect your camera." msgstr "Por favor, reconecte sua câmera." #: ../src/guvcview.c:430 msgid "" "Guvcview error:\n" "\n" "Couldn't query device capabilities" msgstr "" "Guvcview erro:\n" "\n" "Não foi possível consultar as propriedades do dispositivo" #: ../src/guvcview.c:431 msgid "Make sure the device driver supports v4l2." msgstr "Por favor, verifique se o driver oferece suporte v4l2." #: ../src/guvcview.c:435 msgid "" "Guvcview error:\n" "\n" "Read method error" msgstr "" "Erro do Guvcview:\n" "\n" "Erro do método de leitura" #: ../src/guvcview.c:436 msgid "Please try mmap instead (--capture_method=1)." msgstr "Por favor, tente o mmap no lugar (--capture_method=1)" #: ../src/guvcview.c:444 msgid "" "Guvcview error:\n" "\n" "Unable to allocate Buffers" msgstr "" "Erro do Guvcview:\n" "\n" "Não foi possível alocar Buffers" #: ../src/guvcview.c:445 msgid "Please try restarting your system." msgstr "Por favor, tente reiniciar o sistema." #: ../src/guvcview.c:490 msgid "Image Controls" msgstr "Controles de imagem" #. image auto capture #: ../src/guvcview.c:533 msgid "Stop Auto (I)" msgstr "Parar auto (I):" #: ../src/guvcview.c:644 msgid "" "Guvcview error:\n" "\n" "Unable to create Video Thread" msgstr "" "Erro de Guvcview:\n" "\n" "Não foi possível criar o thread de vídeo" #: ../src/guvcview.c:645 msgid "Please report it to http://developer.berlios.de/bugs/?group_id=8179" msgstr "" "Por favor, reporte em http://developer.berlios.de/bugs/?group_id=8179" #: ../src/img_controls.c:121 msgid "Auto Focus (continuous)" msgstr "Focagem automática (contínua)" #: ../src/img_controls.c:122 msgid "set Focus" msgstr "Definir foco" #: ../src/image_format.c:35 msgid "Jpeg (jpg)" msgstr "" #: ../src/image_format.c:41 msgid "Bitmap (Bmp)" msgstr "" #: ../src/image_format.c:47 msgid "Portable Network Graphics (Png)" msgstr "" #: ../src/image_format.c:53 msgid "Raw Image (raw)" msgstr "" #. controls menu #: ../src/menubar.c:64 msgid "Settings" msgstr "Definições" #: ../src/menubar.c:67 msgid "Hardware Defaults" msgstr "Pré-definição de Hardware" #: ../src/menubar.c:75 msgid "Camera Button" msgstr "Botão da Câmera" #: ../src/menubar.c:79 msgid "Capture Image" msgstr "Capturar Imagem" #: ../src/menubar.c:84 msgid "Capture Video" msgstr "Capturar Video" #. video menu #: ../src/menubar.c:144 ../src/video_tab.c:87 msgid "Video" msgstr "Video" #: ../src/menubar.c:145 ../src/menubar.c:231 msgid "File" msgstr "Ficheiro" #: ../src/menubar.c:146 ../src/menubar.c:232 msgid "Increment Filename" msgstr "Increm. nome do ficheiro" #: ../src/menubar.c:164 msgid "Video Codec" msgstr "Codec de Video" #: ../src/menubar.c:187 msgid "Video Codec Properties" msgstr "Propr. Codec de Video" #: ../src/menubar.c:194 msgid "Audio Codec" msgstr "Codec de Audio" #: ../src/menubar.c:215 msgid "Audio Codec Properties" msgstr "Propr. Codec de Audio" #. photo menu #: ../src/menubar.c:230 msgid "Photo" msgstr "Foto" #: ../src/options.c:752 msgid "Prints version" msgstr "Exibe a versão" #: ../src/options.c:753 msgid "Displays debug information" msgstr "Mostra informação de depuração" #: ../src/options.c:754 msgid "Video Device to use [default: /dev/video0]" msgstr "Dispositivo de vídeo para usar [padrão: /dev/video0]" #: ../src/options.c:755 msgid "Exit after adding UVC extension controls (needs root/sudo)" msgstr "Sair após adicionar extensão de controles UVC (precisa de root/sudo)" #: ../src/options.c:756 msgid "Don't stream video (image controls only)" msgstr "Desabilitar o fluxo de vídeo (apenas controles de imagens)" #: ../src/options.c:757 msgid "Don't display a GUI" msgstr "Não mostrar GUI" #: ../src/options.c:758 msgid "Capture method (1-mmap (default) 2-read)" msgstr "Método de captura (1-mmap (padrão) 2-leitura)" #: ../src/options.c:759 msgid "Configuration file" msgstr "Arquivo de configuração" #: ../src/options.c:760 msgid "Hardware accelaration (enable(1) | disable(0))" msgstr "Aceleração de hardware (habilitado(1) | desabilitado(0))" #: ../src/options.c:761 msgid "" "Pixel " "format(mjpg|jpeg|yuyv|yvyu|uyvy|yyuv|yu12|yv12|nv12|nv21|nv16|nv61|y41p|grey|" "y10b|y16 |s501|s505|s508|gbrg|grbg|ba81|rggb|bgr3|rgb3)" msgstr "" #: ../src/options.c:762 msgid "Frame size, default: 640x480" msgstr "Tamanho do quadro, padrão: 640x480" #: ../src/options.c:763 msgid "Image File name" msgstr "Nome do arquivo de imagem" #: ../src/options.c:764 msgid "Image capture interval in seconds" msgstr "Intervalo de captura de imagens em segundos" #: ../src/options.c:765 msgid "Number of Pictures to capture" msgstr "Numero de imagens a capturar" #: ../src/options.c:766 msgid "Video File name (capture from start)" msgstr "Arquivo de vídeo (captura ao iniciar)" #: ../src/options.c:767 msgid "Video capture time (in seconds)" msgstr "Tempo de captura de vídeo (em segundos)" #: ../src/options.c:768 msgid "Exits guvcview after closing video" msgstr "Termina o guvcview depois de fechar o vídeo" #: ../src/options.c:769 msgid "Number of initial frames to skip" msgstr "Numero inicial de quadros a ignorar" #: ../src/options.c:770 msgid "Show FPS value (enable(1) | disable (0))" msgstr "Apresentar o valor FPS (habilitado(1) | desabilitado(0))" #: ../src/options.c:771 msgid "Load Profile at start" msgstr "Carrega perfil ao iniciar" #: ../src/options.c:777 msgid "- local options" msgstr "- opções locais" #. gdk_threads_enter(); #: ../src/timers.c:119 msgid "Cap. Image" msgstr "Cap. imagem" #: ../src/timers.c:217 msgid "Guvcview Warning:" msgstr "Alerta Guvcview:" #: ../src/timers.c:217 msgid "Not enough free space left on disk" msgstr "Sem espaço livre suficiente no disco" #: ../src/v4l2_controls.c:711 msgid "Left" msgstr "Esquerda" #: ../src/v4l2_controls.c:712 msgid "Right" msgstr "Direita" #: ../src/v4l2_controls.c:716 msgid "Down" msgstr "Baixo" #: ../src/v4l2_controls.c:717 msgid "Up" msgstr "Cima" #: ../src/v4l2_controls.c:762 msgid "Off" msgstr "Desligado" #: ../src/v4l2_controls.c:762 msgid "On" msgstr "Ligado" #: ../src/v4l2_controls.c:762 msgid "Blinking" msgstr "Intermitente" #: ../src/v4l2_controls.c:762 msgid "Auto" msgstr "Auto" #. turn it into a menu control #: ../src/v4l2_controls.c:813 msgid "8 bit" msgstr "8 bit" #: ../src/v4l2_controls.c:813 msgid "12 bit" msgstr "12 bit" #: ../src/v4l2_dyna_ctrls.c:96 msgid "Pan (relative)" msgstr "Deslocamento (relativo)" #: ../src/v4l2_dyna_ctrls.c:109 msgid "Tilt (relative)" msgstr "Inclinação (relativo)" #: ../src/v4l2_dyna_ctrls.c:122 msgid "Pan Reset" msgstr "Restaurar deslocamento" #: ../src/v4l2_dyna_ctrls.c:135 msgid "Tilt Reset" msgstr "Restaurar inclinação" #: ../src/v4l2_dyna_ctrls.c:148 msgid "Focus (absolute)" msgstr "Foco (absoluto)" #: ../src/v4l2_dyna_ctrls.c:161 msgid "LED1 Mode" msgstr "Modo LED1" #: ../src/v4l2_dyna_ctrls.c:174 msgid "LED1 Frequency" msgstr "Frequência LED1" #: ../src/v4l2_dyna_ctrls.c:187 msgid "Disable video processing" msgstr "Parar processamento de vídeo" #: ../src/v4l2_dyna_ctrls.c:200 msgid "Raw bits per pixel" msgstr "Bits brutos por pixel" #. needed only for language files (not used) #. V4L2 control strings #: ../src/v4l2uvc.c:56 msgid "User Controls" msgstr "Controles do usuário" #: ../src/v4l2uvc.c:57 msgid "Brightness" msgstr "Brilho" #: ../src/v4l2uvc.c:58 msgid "Contrast" msgstr "Contraste" #: ../src/v4l2uvc.c:59 msgid "Hue" msgstr "Matiz" #: ../src/v4l2uvc.c:60 msgid "Saturation" msgstr "Saturação" #: ../src/v4l2uvc.c:61 msgid "Sharpness" msgstr "Nitidez" #: ../src/v4l2uvc.c:62 msgid "Gamma" msgstr "Gama" #: ../src/v4l2uvc.c:63 msgid "Backlight Compensation" msgstr "Compensação de Luz" #: ../src/v4l2uvc.c:64 msgid "Power Line Frequency" msgstr "Frequência da linha de transmissão" #: ../src/v4l2uvc.c:65 msgid "Hue, Automatic" msgstr "Matiz, Automático" #: ../src/v4l2uvc.c:66 msgid "Focus, Auto" msgstr "Focagem, auto" #: ../src/v4l2uvc.c:67 msgid "Manual Mode" msgstr "Modo manual" #: ../src/v4l2uvc.c:68 msgid "Auto Mode" msgstr "Modo automático" #: ../src/v4l2uvc.c:69 msgid "Shutter Priority Mode" msgstr "Modo prioridade do obturador" #: ../src/v4l2uvc.c:70 msgid "Aperture Priority Mode" msgstr "Modo prioridade da abertura" #: ../src/v4l2uvc.c:71 msgid "Black Level" msgstr "Níveis de preto" #: ../src/v4l2uvc.c:72 msgid "White Balance, Automatic" msgstr "Balanço de brancos" #: ../src/v4l2uvc.c:73 msgid "Do White Balance" msgstr "Fazer balanço de brancos" #: ../src/v4l2uvc.c:74 msgid "Red Balance" msgstr "Balanço do vermelho" #: ../src/v4l2uvc.c:75 msgid "Blue Balance" msgstr "Balanço do azul" #: ../src/v4l2uvc.c:76 msgid "Exposure" msgstr "Exposição" #: ../src/v4l2uvc.c:77 msgid "Gain, Automatic" msgstr "Ganho, automático" #: ../src/v4l2uvc.c:78 msgid "Gain" msgstr "Ganho" #: ../src/v4l2uvc.c:79 msgid "Horizontal Flip" msgstr "Virar horizontalmente" #: ../src/v4l2uvc.c:80 msgid "Vertical Flip" msgstr "Virar verticalmente" #: ../src/v4l2uvc.c:81 msgid "Horizontal Center" msgstr "Eixo horizontal" #: ../src/v4l2uvc.c:82 msgid "Vertical Center" msgstr "Eixo vertical" #: ../src/v4l2uvc.c:83 msgid "Chroma AGC" msgstr "AGC de Chroma" #: ../src/v4l2uvc.c:84 msgid "Color Killer" msgstr "Removedor de cores" #: ../src/v4l2uvc.c:85 msgid "Color Effects" msgstr "Efeitos de cor" #. CAMERA CLASS control strings #: ../src/v4l2uvc.c:88 msgid "Camera Controls" msgstr "Controles de câmera" #: ../src/v4l2uvc.c:89 msgid "Auto Exposure" msgstr "Exposição automática" #: ../src/v4l2uvc.c:90 msgid "Exposure Time, Absolute" msgstr "Tempo de exposição, absoluto" #: ../src/v4l2uvc.c:91 msgid "Exposure, Dynamic Framerate" msgstr "Exposição, taxa de quadros dinâmicos" #: ../src/v4l2uvc.c:92 msgid "Pan, Relative" msgstr "Deslocamento, relativo" #: ../src/v4l2uvc.c:93 msgid "Tilt, Relative" msgstr "Inclinação, relativo" #: ../src/v4l2uvc.c:94 msgid "Pan, Reset" msgstr "Deslocamento, restaurar" #: ../src/v4l2uvc.c:95 msgid "Tilt, Reset" msgstr "Inclinação, restaurar" #: ../src/v4l2uvc.c:96 msgid "Pan, Absolute" msgstr "Deslocamento, absoluto" #: ../src/v4l2uvc.c:98 msgid "Focus, Absolute" msgstr "Foco, absoluto" #: ../src/v4l2uvc.c:99 msgid "Focus, Relative" msgstr "Foco, relativo" #: ../src/v4l2uvc.c:100 msgid "Focus, Automatic" msgstr "Foco, automático" #: ../src/v4l2uvc.c:101 msgid "Zoom, Absolute" msgstr "Zoom, absoluto" #: ../src/v4l2uvc.c:102 msgid "Zoom, Relative" msgstr "Zoom, relativo" #: ../src/v4l2uvc.c:103 msgid "Zoom, Continuous" msgstr "Zoom, contínuo" #: ../src/v4l2uvc.c:104 msgid "Privacy" msgstr "Privacidade" #. UVC specific control strings #: ../src/v4l2uvc.c:107 msgid "Exposure, Auto" msgstr "Exposição, auto" #: ../src/v4l2uvc.c:108 msgid "Exposure, Auto Priority" msgstr "Exposição, prioridade auto" #: ../src/v4l2uvc.c:109 msgid "Exposure (Absolute)" msgstr "Exposição (absoluta)" #: ../src/v4l2uvc.c:110 msgid "White Balance Temperature, Auto" msgstr "Balanço de branco, auto" #: ../src/v4l2uvc.c:111 msgid "White Balance Temperature" msgstr "Balanço de branco temperatura" #: ../src/v4l2uvc.c:112 msgid "White Balance Component, Auto" msgstr "Componente de cor, auto" #: ../src/v4l2uvc.c:113 msgid "White Balance Blue Component" msgstr "Balanço de branco componente azul" #: ../src/v4l2uvc.c:114 msgid "White Balance Red Component" msgstr "Balando de branco componente vermelho" #. libwebcam specific control strings #: ../src/v4l2uvc.c:117 msgid "Focus" msgstr "Foco" #: ../src/v4l2uvc.c:118 msgid "Focus (Absolute)" msgstr "Foco (absoluto)" #: ../src/vcodecs.c:63 msgid "MJPG - compressed" msgstr "MJPG - com compressão" #: ../src/vcodecs.c:99 msgid "YUY2 - uncomp YUV" msgstr "YUY2 - sem compressão YUV" #: ../src/vcodecs.c:135 msgid "RGB - uncomp BMP" msgstr "RGB - Sem compressão BMP" #: ../src/vcodecs.c:171 msgid "MPEG video 1" msgstr "Vídeo MPEG 1" #: ../src/vcodecs.c:207 msgid "FLV1 - flash video 1" msgstr "FLV1 - vídeo flash 1" #: ../src/vcodecs.c:243 msgid "WMV1 - win. med. video 7" msgstr "WMV1 - win. med. video 7" #: ../src/vcodecs.c:279 msgid "MPG2 - MPG2 format" msgstr "MPG2 - MPEG vídeo 2" #: ../src/vcodecs.c:315 msgid "MS MP4 V3" msgstr "MS MP4 V3" #: ../src/vcodecs.c:351 msgid "MPEG4-ASP" msgstr "MPEG4-ASP" #: ../src/vcodecs.c:387 msgid "MPEG4-AVC (H264)" msgstr "MPEG4-AVC (H264)" #: ../src/vcodecs.c:427 msgid "VP8 (VP8)" msgstr "" #: ../src/vcodecs.c:463 msgid "Theora (ogg theora)" msgstr "" #: ../src/video_format.c:43 msgid "AVI - avi format" msgstr "AVI - formato avi" #: ../src/video_format.c:52 msgid "MKV - Matroska format" msgstr "" #: ../src/video_format.c:61 msgid "WEBM - format" msgstr "" #: ../src/video_tab.c:208 msgid "Frame Rate:" msgstr "Taxa de quadros:" #: ../src/video_tab.c:215 msgid " Show" msgstr " Mostrar" #: ../src/video_tab.c:237 msgid "Resolution:" msgstr "Resolução:" #: ../src/video_tab.c:263 msgid "Camera Output:" msgstr "Saída de câmera:" #: ../src/video_tab.c:285 msgid "Apply" msgstr "Aplicar" #: ../src/video_tab.c:292 msgid "Quality:" msgstr "Qualidade:" #: ../src/video_tab.c:302 msgid "---- Video Filters ----" msgstr "---- Filtros de vídeo ----" #. Mirror #: ../src/video_tab.c:321 msgid " Mirror" msgstr " Espelho" #. Upturn #: ../src/video_tab.c:332 msgid " Invert" msgstr " Invertido" #. Negate #: ../src/video_tab.c:343 msgid " Negative" msgstr " Negativo" #. Mono #: ../src/video_tab.c:354 msgid " Mono" msgstr " Cinza" #. Pieces #: ../src/video_tab.c:366 msgid " Pieces" msgstr " Pedaços" #. Particles #: ../src/video_tab.c:378 msgid " Particles" msgstr " Partículas" guvcview-src-1.7.1/po/fo.po0000664000175000017500000004164312173235416014566 0ustar paulopaulo# Faroese translation for guvcview # Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 # This file is distributed under the same license as the guvcview package. # FIRST AUTHOR , 2010. # msgid "" msgstr "" "Project-Id-Version: guvcview\n" "Report-Msgid-Bugs-To: pj.assis@gmail.com\n" "POT-Creation-Date: 2013-07-16 12:53+0000\n" "PO-Revision-Date: 2010-08-05 18:25+0000\n" "Last-Translator: Gunleif Joensen \n" "Language-Team: Faroese \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2013-07-22 13:32+0000\n" "X-Generator: Launchpad (build 16696)\n" "Language: fo\n" #: ../data/guvcview.desktop.in.in.h:1 msgid "guvcview" msgstr "" #: ../data/guvcview.desktop.in.in.h:2 msgid "GTK UVC video viewer" msgstr "" #: ../data/guvcview.desktop.in.in.h:3 msgid "A video viewer and capturer for the linux uvc driver" msgstr "" #: ../src/acodecs.c:59 msgid "PCM - uncompressed (16 bit)" msgstr "" #: ../src/acodecs.c:76 msgid "MPEG2 - (lavc)" msgstr "" #: ../src/acodecs.c:93 msgid "MP3 - (lavc)" msgstr "" #: ../src/acodecs.c:110 msgid "Dolby AC3 - (lavc)" msgstr "" #: ../src/acodecs.c:127 msgid "ACC Low - (faac)" msgstr "" #: ../src/acodecs.c:144 msgid "Vorbis" msgstr "" #: ../src/audio_tab.c:80 msgid "Audio" msgstr "" #: ../src/audio_tab.c:98 msgid " Sound" msgstr "" #. VU meter on the image (OSD) #: ../src/audio_tab.c:109 msgid " Show VU meter" msgstr "" #: ../src/audio_tab.c:121 msgid "Audio API:" msgstr "" #: ../src/audio_tab.c:132 msgid "PORTAUDIO" msgstr "" #: ../src/audio_tab.c:133 msgid "PULSEAUDIO" msgstr "" #: ../src/audio_tab.c:149 ../src/audio_tab.c:172 msgid "Input Device:" msgstr "" #: ../src/audio_tab.c:182 ../src/audio_tab.c:214 msgid "Dev. Default" msgstr "" #: ../src/audio_tab.c:204 msgid "Sample Rate:" msgstr "" #: ../src/audio_tab.c:215 msgid "1 - mono" msgstr "" #: ../src/audio_tab.c:216 msgid "2 - stereo" msgstr "" #: ../src/audio_tab.c:251 msgid "Channels:" msgstr "" #: ../src/audio_tab.c:302 msgid "---- Audio Effects ----" msgstr "" #. Echo #: ../src/audio_tab.c:321 msgid " Echo" msgstr "" #. FUZZ #: ../src/audio_tab.c:332 msgid " Fuzz" msgstr "" #. Reverb #: ../src/audio_tab.c:344 msgid " Reverb" msgstr "" #. WahWah #: ../src/audio_tab.c:356 msgid " WahWah" msgstr "" #. Ducky #: ../src/audio_tab.c:368 msgid " Ducky" msgstr "" #: ../src/callbacks.c:108 msgid "Error" msgstr "" #: ../src/callbacks.c:132 msgid "" "\n" "You have more than one video device installed.\n" "Do you want to try another one ?\n" msgstr "" #. Devices #: ../src/callbacks.c:139 ../src/video_tab.c:103 msgid "Device:" msgstr "" #: ../src/callbacks.c:271 msgid "Save File" msgstr "" #: ../src/callbacks.c:283 msgid "File Format:" msgstr "" #: ../src/callbacks.c:454 msgid "codec values" msgstr "" #: ../src/callbacks.c:465 msgid "" " encoder fps: \n" " (0 - use fps combobox value)" msgstr "" #: ../src/callbacks.c:478 msgid " monotonic pts" msgstr "" #. bit rate #: ../src/callbacks.c:485 ../src/callbacks.c:808 msgid "bit rate: " msgstr "" #: ../src/callbacks.c:498 msgid "qmax: " msgstr "" #: ../src/callbacks.c:511 msgid "qmin: " msgstr "" #: ../src/callbacks.c:524 msgid "max. qdiff: " msgstr "" #: ../src/callbacks.c:537 msgid "dia size: " msgstr "" #: ../src/callbacks.c:550 msgid "pre dia size: " msgstr "" #: ../src/callbacks.c:563 msgid "pre me: " msgstr "" #: ../src/callbacks.c:576 msgid "pre cmp: " msgstr "" #: ../src/callbacks.c:589 msgid "cmp: " msgstr "" #: ../src/callbacks.c:602 msgid "sub cmp: " msgstr "" #: ../src/callbacks.c:615 msgid "last predictor count: " msgstr "" #: ../src/callbacks.c:628 msgid "gop size: " msgstr "" #: ../src/callbacks.c:641 msgid "qcompress: " msgstr "" #: ../src/callbacks.c:654 msgid "qblur: " msgstr "" #: ../src/callbacks.c:667 msgid "subq: " msgstr "" #: ../src/callbacks.c:680 msgid "framerefs: " msgstr "" #: ../src/callbacks.c:693 msgid "me method: " msgstr "" #: ../src/callbacks.c:706 msgid "mb decision: " msgstr "" #: ../src/callbacks.c:719 msgid "max B frames: " msgstr "" #: ../src/callbacks.c:732 msgid "num threads: " msgstr "" #: ../src/callbacks.c:795 msgid "audio codec values" msgstr "" #. sample format #: ../src/callbacks.c:822 msgid "sample format: " msgstr "" #: ../src/callbacks.c:1250 msgid "start new" msgstr "" #: ../src/callbacks.c:1253 msgid "restart" msgstr "" #: ../src/callbacks.c:1255 msgid "new" msgstr "" #: ../src/callbacks.c:1257 msgid "cancel" msgstr "" #: ../src/callbacks.c:1262 msgid "" "launch new process or restart?.\n" "\n" msgstr "" #: ../src/callbacks.c:1716 ../src/guvcview.c:537 msgid "Cap. Image (I)" msgstr "" #. disable image controls #: ../src/callbacks.c:1727 ../src/guvcview.c:658 ../src/timers.c:101 msgid "capturing photo to" msgstr "" #: ../src/callbacks.c:1786 ../src/guvcview.c:547 msgid "Cap. Video (V)" msgstr "" #: ../src/callbacks.c:1812 ../src/guvcview.c:708 msgid "capturing video to" msgstr "" #. vid capture enabled from start #: ../src/callbacks.c:1845 ../src/guvcview.c:542 msgid "Stop Video (V)" msgstr "" #: ../src/callbacks.c:1901 ../src/menubar.c:66 msgid "Save Profile" msgstr "" #: ../src/callbacks.c:1914 ../src/menubar.c:65 msgid "Load Profile" msgstr "" #: ../src/create_video.c:1016 ../src/guvcview.c:700 msgid "Cap. Video" msgstr "" #: ../src/guvcview.c:279 msgid "Guvcview Video Capture" msgstr "" #: ../src/guvcview.c:291 msgid "GUVCViewer Controls" msgstr "" #. can't open device #: ../src/guvcview.c:336 msgid "" "Guvcview error:\n" "\n" "Unable to open device" msgstr "" "Guvcview villa:\n" "\n" "Kundi ikki lata tóleind upp" #: ../src/guvcview.c:337 msgid "" "Please make sure the camera is connected\n" "and that the correct driver is installed." msgstr "" #. uvc extension controls OK, give warning and shutdown (called with --add_ctrls) #: ../src/guvcview.c:342 msgid "" "Guvcview:\n" "\n" "UVC Extension controls" msgstr "" #: ../src/guvcview.c:343 msgid "Extension controls were added to the UVC driver" msgstr "" #. uvc extension controls error - EACCES (needs root user) #: ../src/guvcview.c:350 msgid "" "Guvcview error:\n" "\n" "UVC Extension controls" msgstr "" #: ../src/guvcview.c:351 msgid "" "An error occurred while adding extension\n" "controls to the UVC driver\n" "Make sure you run guvcview as root (or sudo)." msgstr "" #: ../src/guvcview.c:377 ../src/guvcview.c:455 msgid "" "Guvcview error:\n" "\n" "Can't set a valid video stream for guvcview" msgstr "" #: ../src/guvcview.c:378 ../src/guvcview.c:456 msgid "" "Make sure your device driver is v4l2 compliant\n" "and that it is properly installed." msgstr "" #: ../src/guvcview.c:400 ../src/guvcview.c:422 msgid "" "Guvcview error:\n" "\n" "Unable to start with minimum setup" msgstr "" #: ../src/guvcview.c:401 ../src/guvcview.c:423 msgid "Please reconnect your camera." msgstr "" #: ../src/guvcview.c:430 msgid "" "Guvcview error:\n" "\n" "Couldn't query device capabilities" msgstr "" #: ../src/guvcview.c:431 msgid "Make sure the device driver supports v4l2." msgstr "" #: ../src/guvcview.c:435 msgid "" "Guvcview error:\n" "\n" "Read method error" msgstr "" #: ../src/guvcview.c:436 msgid "Please try mmap instead (--capture_method=1)." msgstr "" #: ../src/guvcview.c:444 msgid "" "Guvcview error:\n" "\n" "Unable to allocate Buffers" msgstr "" #: ../src/guvcview.c:445 msgid "Please try restarting your system." msgstr "" #: ../src/guvcview.c:490 msgid "Image Controls" msgstr "" #. image auto capture #: ../src/guvcview.c:533 msgid "Stop Auto (I)" msgstr "" #: ../src/guvcview.c:644 msgid "" "Guvcview error:\n" "\n" "Unable to create Video Thread" msgstr "" #: ../src/guvcview.c:645 msgid "Please report it to http://developer.berlios.de/bugs/?group_id=8179" msgstr "" #: ../src/img_controls.c:121 msgid "Auto Focus (continuous)" msgstr "" #: ../src/img_controls.c:122 msgid "set Focus" msgstr "" #: ../src/image_format.c:35 msgid "Jpeg (jpg)" msgstr "" #: ../src/image_format.c:41 msgid "Bitmap (Bmp)" msgstr "" #: ../src/image_format.c:47 msgid "Portable Network Graphics (Png)" msgstr "" #: ../src/image_format.c:53 msgid "Raw Image (raw)" msgstr "" #. controls menu #: ../src/menubar.c:64 msgid "Settings" msgstr "" #: ../src/menubar.c:67 msgid "Hardware Defaults" msgstr "" #: ../src/menubar.c:75 msgid "Camera Button" msgstr "" #: ../src/menubar.c:79 msgid "Capture Image" msgstr "" #: ../src/menubar.c:84 msgid "Capture Video" msgstr "" #. video menu #: ../src/menubar.c:144 ../src/video_tab.c:87 msgid "Video" msgstr "" #: ../src/menubar.c:145 ../src/menubar.c:231 msgid "File" msgstr "" #: ../src/menubar.c:146 ../src/menubar.c:232 msgid "Increment Filename" msgstr "" #: ../src/menubar.c:164 msgid "Video Codec" msgstr "" #: ../src/menubar.c:187 msgid "Video Codec Properties" msgstr "" #: ../src/menubar.c:194 msgid "Audio Codec" msgstr "" #: ../src/menubar.c:215 msgid "Audio Codec Properties" msgstr "" #. photo menu #: ../src/menubar.c:230 msgid "Photo" msgstr "" #: ../src/options.c:752 msgid "Prints version" msgstr "" #: ../src/options.c:753 msgid "Displays debug information" msgstr "" #: ../src/options.c:754 msgid "Video Device to use [default: /dev/video0]" msgstr "" #: ../src/options.c:755 msgid "Exit after adding UVC extension controls (needs root/sudo)" msgstr "" #: ../src/options.c:756 msgid "Don't stream video (image controls only)" msgstr "" #: ../src/options.c:757 msgid "Don't display a GUI" msgstr "" #: ../src/options.c:758 msgid "Capture method (1-mmap (default) 2-read)" msgstr "" #: ../src/options.c:759 msgid "Configuration file" msgstr "" #: ../src/options.c:760 msgid "Hardware accelaration (enable(1) | disable(0))" msgstr "" #: ../src/options.c:761 msgid "" "Pixel " "format(mjpg|jpeg|yuyv|yvyu|uyvy|yyuv|yu12|yv12|nv12|nv21|nv16|nv61|y41p|grey|" "y10b|y16 |s501|s505|s508|gbrg|grbg|ba81|rggb|bgr3|rgb3)" msgstr "" #: ../src/options.c:762 msgid "Frame size, default: 640x480" msgstr "" #: ../src/options.c:763 msgid "Image File name" msgstr "" #: ../src/options.c:764 msgid "Image capture interval in seconds" msgstr "" #: ../src/options.c:765 msgid "Number of Pictures to capture" msgstr "" #: ../src/options.c:766 msgid "Video File name (capture from start)" msgstr "" #: ../src/options.c:767 msgid "Video capture time (in seconds)" msgstr "" #: ../src/options.c:768 msgid "Exits guvcview after closing video" msgstr "" #: ../src/options.c:769 msgid "Number of initial frames to skip" msgstr "" #: ../src/options.c:770 msgid "Show FPS value (enable(1) | disable (0))" msgstr "" #: ../src/options.c:771 msgid "Load Profile at start" msgstr "" #: ../src/options.c:777 msgid "- local options" msgstr "" #. gdk_threads_enter(); #: ../src/timers.c:119 msgid "Cap. Image" msgstr "" #: ../src/timers.c:217 msgid "Guvcview Warning:" msgstr "" #: ../src/timers.c:217 msgid "Not enough free space left on disk" msgstr "" #: ../src/v4l2_controls.c:711 msgid "Left" msgstr "" #: ../src/v4l2_controls.c:712 msgid "Right" msgstr "" #: ../src/v4l2_controls.c:716 msgid "Down" msgstr "" #: ../src/v4l2_controls.c:717 msgid "Up" msgstr "" #: ../src/v4l2_controls.c:762 msgid "Off" msgstr "" #: ../src/v4l2_controls.c:762 msgid "On" msgstr "" #: ../src/v4l2_controls.c:762 msgid "Blinking" msgstr "" #: ../src/v4l2_controls.c:762 msgid "Auto" msgstr "" #. turn it into a menu control #: ../src/v4l2_controls.c:813 msgid "8 bit" msgstr "" #: ../src/v4l2_controls.c:813 msgid "12 bit" msgstr "" #: ../src/v4l2_dyna_ctrls.c:96 msgid "Pan (relative)" msgstr "" #: ../src/v4l2_dyna_ctrls.c:109 msgid "Tilt (relative)" msgstr "" #: ../src/v4l2_dyna_ctrls.c:122 msgid "Pan Reset" msgstr "" #: ../src/v4l2_dyna_ctrls.c:135 msgid "Tilt Reset" msgstr "" #: ../src/v4l2_dyna_ctrls.c:148 msgid "Focus (absolute)" msgstr "" #: ../src/v4l2_dyna_ctrls.c:161 msgid "LED1 Mode" msgstr "" #: ../src/v4l2_dyna_ctrls.c:174 msgid "LED1 Frequency" msgstr "" #: ../src/v4l2_dyna_ctrls.c:187 msgid "Disable video processing" msgstr "" #: ../src/v4l2_dyna_ctrls.c:200 msgid "Raw bits per pixel" msgstr "" #. needed only for language files (not used) #. V4L2 control strings #: ../src/v4l2uvc.c:56 msgid "User Controls" msgstr "" #: ../src/v4l2uvc.c:57 msgid "Brightness" msgstr "" #: ../src/v4l2uvc.c:58 msgid "Contrast" msgstr "" #: ../src/v4l2uvc.c:59 msgid "Hue" msgstr "" #: ../src/v4l2uvc.c:60 msgid "Saturation" msgstr "" #: ../src/v4l2uvc.c:61 msgid "Sharpness" msgstr "" #: ../src/v4l2uvc.c:62 msgid "Gamma" msgstr "" #: ../src/v4l2uvc.c:63 msgid "Backlight Compensation" msgstr "" #: ../src/v4l2uvc.c:64 msgid "Power Line Frequency" msgstr "" #: ../src/v4l2uvc.c:65 msgid "Hue, Automatic" msgstr "" #: ../src/v4l2uvc.c:66 msgid "Focus, Auto" msgstr "" #: ../src/v4l2uvc.c:67 msgid "Manual Mode" msgstr "" #: ../src/v4l2uvc.c:68 msgid "Auto Mode" msgstr "" #: ../src/v4l2uvc.c:69 msgid "Shutter Priority Mode" msgstr "" #: ../src/v4l2uvc.c:70 msgid "Aperture Priority Mode" msgstr "" #: ../src/v4l2uvc.c:71 msgid "Black Level" msgstr "" #: ../src/v4l2uvc.c:72 msgid "White Balance, Automatic" msgstr "" #: ../src/v4l2uvc.c:73 msgid "Do White Balance" msgstr "" #: ../src/v4l2uvc.c:74 msgid "Red Balance" msgstr "" #: ../src/v4l2uvc.c:75 msgid "Blue Balance" msgstr "" #: ../src/v4l2uvc.c:76 msgid "Exposure" msgstr "" #: ../src/v4l2uvc.c:77 msgid "Gain, Automatic" msgstr "" #: ../src/v4l2uvc.c:78 msgid "Gain" msgstr "" #: ../src/v4l2uvc.c:79 msgid "Horizontal Flip" msgstr "" #: ../src/v4l2uvc.c:80 msgid "Vertical Flip" msgstr "" #: ../src/v4l2uvc.c:81 msgid "Horizontal Center" msgstr "" #: ../src/v4l2uvc.c:82 msgid "Vertical Center" msgstr "" #: ../src/v4l2uvc.c:83 msgid "Chroma AGC" msgstr "" #: ../src/v4l2uvc.c:84 msgid "Color Killer" msgstr "" #: ../src/v4l2uvc.c:85 msgid "Color Effects" msgstr "" #. CAMERA CLASS control strings #: ../src/v4l2uvc.c:88 msgid "Camera Controls" msgstr "" #: ../src/v4l2uvc.c:89 msgid "Auto Exposure" msgstr "" #: ../src/v4l2uvc.c:90 msgid "Exposure Time, Absolute" msgstr "" #: ../src/v4l2uvc.c:91 msgid "Exposure, Dynamic Framerate" msgstr "" #: ../src/v4l2uvc.c:92 msgid "Pan, Relative" msgstr "" #: ../src/v4l2uvc.c:93 msgid "Tilt, Relative" msgstr "" #: ../src/v4l2uvc.c:94 msgid "Pan, Reset" msgstr "" #: ../src/v4l2uvc.c:95 msgid "Tilt, Reset" msgstr "" #: ../src/v4l2uvc.c:96 msgid "Pan, Absolute" msgstr "" #: ../src/v4l2uvc.c:98 msgid "Focus, Absolute" msgstr "" #: ../src/v4l2uvc.c:99 msgid "Focus, Relative" msgstr "" #: ../src/v4l2uvc.c:100 msgid "Focus, Automatic" msgstr "" #: ../src/v4l2uvc.c:101 msgid "Zoom, Absolute" msgstr "" #: ../src/v4l2uvc.c:102 msgid "Zoom, Relative" msgstr "" #: ../src/v4l2uvc.c:103 msgid "Zoom, Continuous" msgstr "" #: ../src/v4l2uvc.c:104 msgid "Privacy" msgstr "" #. UVC specific control strings #: ../src/v4l2uvc.c:107 msgid "Exposure, Auto" msgstr "" #: ../src/v4l2uvc.c:108 msgid "Exposure, Auto Priority" msgstr "" #: ../src/v4l2uvc.c:109 msgid "Exposure (Absolute)" msgstr "" #: ../src/v4l2uvc.c:110 msgid "White Balance Temperature, Auto" msgstr "" #: ../src/v4l2uvc.c:111 msgid "White Balance Temperature" msgstr "" #: ../src/v4l2uvc.c:112 msgid "White Balance Component, Auto" msgstr "" #: ../src/v4l2uvc.c:113 msgid "White Balance Blue Component" msgstr "" #: ../src/v4l2uvc.c:114 msgid "White Balance Red Component" msgstr "" #. libwebcam specific control strings #: ../src/v4l2uvc.c:117 msgid "Focus" msgstr "" #: ../src/v4l2uvc.c:118 msgid "Focus (Absolute)" msgstr "" #: ../src/vcodecs.c:63 msgid "MJPG - compressed" msgstr "" #: ../src/vcodecs.c:99 msgid "YUY2 - uncomp YUV" msgstr "" #: ../src/vcodecs.c:135 msgid "RGB - uncomp BMP" msgstr "" #: ../src/vcodecs.c:171 msgid "MPEG video 1" msgstr "" #: ../src/vcodecs.c:207 msgid "FLV1 - flash video 1" msgstr "" #: ../src/vcodecs.c:243 msgid "WMV1 - win. med. video 7" msgstr "" #: ../src/vcodecs.c:279 msgid "MPG2 - MPG2 format" msgstr "" #: ../src/vcodecs.c:315 msgid "MS MP4 V3" msgstr "" #: ../src/vcodecs.c:351 msgid "MPEG4-ASP" msgstr "" #: ../src/vcodecs.c:387 msgid "MPEG4-AVC (H264)" msgstr "" #: ../src/vcodecs.c:427 msgid "VP8 (VP8)" msgstr "" #: ../src/vcodecs.c:463 msgid "Theora (ogg theora)" msgstr "" #: ../src/video_format.c:43 msgid "AVI - avi format" msgstr "" #: ../src/video_format.c:52 msgid "MKV - Matroska format" msgstr "" #: ../src/video_format.c:61 msgid "WEBM - format" msgstr "" #: ../src/video_tab.c:208 msgid "Frame Rate:" msgstr "" #: ../src/video_tab.c:215 msgid " Show" msgstr "" #: ../src/video_tab.c:237 msgid "Resolution:" msgstr "" #: ../src/video_tab.c:263 msgid "Camera Output:" msgstr "" #: ../src/video_tab.c:285 msgid "Apply" msgstr "" #: ../src/video_tab.c:292 msgid "Quality:" msgstr "" #: ../src/video_tab.c:302 msgid "---- Video Filters ----" msgstr "" #. Mirror #: ../src/video_tab.c:321 msgid " Mirror" msgstr "" #. Upturn #: ../src/video_tab.c:332 msgid " Invert" msgstr "" #. Negate #: ../src/video_tab.c:343 msgid " Negative" msgstr "" #. Mono #: ../src/video_tab.c:354 msgid " Mono" msgstr "" #. Pieces #: ../src/video_tab.c:366 msgid " Pieces" msgstr "" #. Particles #: ../src/video_tab.c:378 msgid " Particles" msgstr "" guvcview-src-1.7.1/README0000664000175000017500000000466412173235416014066 0ustar paulopauloGTK UVC VIEWER (guvcview) ************************* Basic Configuration =================== *Dependencies: -------------- Guvcview depends on the following: - intltool, - autotools, - libsdl, - libgtk-3, - portaudio19, - libpng, - libavcodec, - libavutil, - libv4l, - libudev, - libpulse (optional) On most distributions you can just install the development packages: intltool, autotools-dev, libsdl1.2-dev, libgtk-3-dev, portaudio19-dev, libpng12-dev, libavcodec-dev, libavutil-dev, libv4l-dev, libudev-dev, libpulse-dev *Build configuration: --------------------- (./bootstrap.sh; ./configure) The configure script is generated from configure.ac by autoconf, the helper script ./bootstrap.sh can be used for this, it will also run the generated configure with the command line options passed. After configuration a simple 'make && make install' will build and install guvcview and all the associated data files. *Data Files: ------------ (language files; image files; gnome menu entry) guvcview data files are stored by default to /usr/local/share setting a different prefix (--prefix=BASEDIR) during configuration will change the installation path to BASEDIR/share. Built files, src/guvcview and data/gnome.desktop, are dependent on this path, so if a new prefix is set a make clean is required before issuing the make command. After running the configure script the normal, make && make install should build and install all the necessary files. *guvcview bin: -------------- (src/guvcview) The binarie file installs to the standart location, /usr/local/bin, to change the install path, configure must be executed with --prefix=DIR set, this will cause the bin file to be installed in DIR/bin, make sure DIR/bin is set in your PATH variable, or the gnome menu entry will fail. *guvcview.desktop: ------------------ (data/guvcview.desktop) The desktop file (gnome menu entry) is built from the data/guvcview.desktop.in definition and is dependent on the configure --prefix setting, any changes to this, must be done in data/guvcview.desktop.in. *configuration files: --------------------- (~/.config/guvcview/video0) The configuration file is saved into the $HOME dir when exiting guvcview. If a video device with index > 0, e.g: /dev/video1 is used then the file stored will be named ~/.config/guvcview/video1 Executing guvcview ================== For instructions on the command line args execute "guvcview --help". guvcview-src-1.7.1/depcomp0000755000175000017500000005064312173257653014566 0ustar paulopaulo#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2012-03-27.16; # UTC # Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009, 2010, # 2011, 2012 Free Software Foundation, Inc. # 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, 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, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Alexandre Oliva . case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: depcomp [--help] [--version] PROGRAM [ARGS] Run PROGRAMS ARGS to compile a file, generating dependencies as side-effects. Environment variables: depmode Dependency tracking mode. source Source file read by 'PROGRAMS ARGS'. object Object file output by 'PROGRAMS ARGS'. DEPDIR directory where to store dependencies. depfile Dependency file to output. tmpdepfile Temporary file to use when outputting dependencies. libtool Whether libtool is used (yes/no). Report bugs to . EOF exit $? ;; -v | --v*) echo "depcomp $scriptversion" exit $? ;; esac # A tabulation character. tab=' ' # A newline character. nl=' ' if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 fi # Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. depfile=${depfile-`echo "$object" | sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case # here, because this file can only contain one case statement. if test "$depmode" = hp; then # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc fi if test "$depmode" = dashXmstdout; then # This is just like dashmstdout with a different argument. dashmflag=-xM depmode=dashmstdout fi cygpath_u="cygpath -u -f -" if test "$depmode" = msvcmsys; then # This is just like msvisualcpp but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvisualcpp fi if test "$depmode" = msvc7msys; then # This is just like msvc7 but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvc7 fi if test "$depmode" = xlc; then # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency informations. gccflag=-qmakedep=gcc,-MF depmode=gcc fi case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what ## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## it if -MD -MP comes after the -MF stuff. Hmm. ## Unfortunately, FreeBSD c89 acceptance of flags depends upon ## the command line argument order; so add the flags where they ## appear in depend2.am. Note that the slowdown incurred here ## affects only configure: in makefiles, %FASTDEP% shortcuts this. for arg do case $arg in -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; *) set fnord "$@" "$arg" ;; esac shift # fnord shift # $arg done "$@" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like ## -MM, not -M (despite what the docs say). ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then gccflag=-MD, fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz ## The second -e expression handles DOS-style file names with drive letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" ## This next piece of magic avoids the "deleted header file" problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. tr ' ' "$nl" < "$tmpdepfile" | ## Some versions of gcc put a space before the ':'. On the theory ## that the space means something, we add a space to the output as ## well. hp depmode also adds that space, but also prefixes the VPATH ## to the object. Take care to not repeat it in the output. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; sgi) if test "$libtool" = yes; then "$@" "-Wp,-MDupdate,$tmpdepfile" else "$@" -MDupdate "$tmpdepfile" fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; # the IRIX cc adds comments like '#:fec' to the end of the # dependency line. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ tr "$nl" ' ' >> "$depfile" echo >> "$depfile" # The second pass generates a dummy entry for each header file. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> "$depfile" else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; xlc) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. In older versions, this file always lives in the # current directory. Also, the AIX compiler puts '$object:' at the # start of each line; $object doesn't have directory information. # Version 6 uses the directory in both cases. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then tmpdepfile1=$dir$base.u tmpdepfile2=$base.u tmpdepfile3=$dir.libs/$base.u "$@" -Wc,-M else tmpdepfile1=$dir$base.u tmpdepfile2=$dir$base.u tmpdepfile3=$dir$base.u "$@" -M fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then # Each line is of the form 'foo.o: dependent.h'. # Do two passes, one to just change these to # '$object: dependent.h' and one to simply 'dependent.h:'. sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" sed -e 's,^.*\.[a-z]*:['"$tab"' ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; icc) # Intel's C compiler anf tcc (Tiny C Compiler) understand '-MD -MF file'. # However on # $CC -MD -MF foo.d -c -o sub/foo.o sub/foo.c # ICC 7.0 will fill foo.d with something like # foo.o: sub/foo.c # foo.o: sub/foo.h # which is wrong. We want # sub/foo.o: sub/foo.c # sub/foo.o: sub/foo.h # sub/foo.c: # sub/foo.h: # ICC 7.1 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using '\': # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... # tcc 0.9.26 (FIXME still under development at the moment of writing) # will emit a similar output, but also prepend the continuation lines # with horizontal tabulation characters. "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each line is of the form 'foo.o: dependent.h', # or 'foo.o: dep1.h dep2.h \', or ' dep3.h dep4.h \'. # Do two passes, one to just change these to # '$object: dependent.h' and one to simply 'dependent.h:'. sed -e "s/^[ $tab][ $tab]*/ /" -e "s,^[^:]*:,$object :," \ < "$tmpdepfile" > "$depfile" sed ' s/[ '"$tab"'][ '"$tab"']*/ /g s/^ *// s/ *\\*$// s/^[^:]*: *// /^$/d /:$/d s/$/ :/ ' < "$tmpdepfile" >> "$depfile" rm -f "$tmpdepfile" ;; hp2) # The "hp" stanza above does not work with aCC (C++) and HP's ia64 # compilers, which have integrated preprocessors. The correct option # to use with these is +Maked; it writes dependencies to a file named # 'foo.d', which lands next to the object file, wherever that # happens to be. # Much of this is similar to the tru64 case; see comments there. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then tmpdepfile1=$dir$base.d tmpdepfile2=$dir.libs/$base.d "$@" -Wc,+Maked else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d "$@" +Maked fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" # Add 'dependent.h:' lines. sed -ne '2,${ s/^ *// s/ \\*$// s/$/:/ p }' "$tmpdepfile" >> "$depfile" else echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" "$tmpdepfile2" ;; tru64) # The Tru64 compiler uses -MD to generate dependencies as a side # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put # dependencies in 'foo.d' instead, so we check for that too. # Subdirectories are respected. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then # With Tru64 cc, shared objects can also be used to make a # static library. This mechanism is used in libtool 1.4 series to # handle both shared and static libraries in a single compilation. # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. # # With libtool 1.5 this exception was removed, and libtool now # generates 2 separate objects for the 2 libraries. These two # compilations output dependencies in $dir.libs/$base.o.d and # in $dir$base.o.d. We have to check for both files, because # one of the two compilations can be disabled. We should prefer # $dir$base.o.d over $dir.libs/$base.o.d because the latter is # automatically cleaned when .libs/ is deleted, while ignoring # the former would cause a distcleancheck panic. tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 tmpdepfile2=$dir$base.o.d # libtool 1.5 tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 "$@" -Wc,-MD else tmpdepfile1=$dir$base.o.d tmpdepfile2=$dir$base.d tmpdepfile3=$dir$base.d tmpdepfile4=$dir$base.d "$@" -MD fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" sed -e 's,^.*\.[a-z]*:['"$tab"' ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" else echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; msvc7) if test "$libtool" = yes; then showIncludes=-Wc,-showIncludes else showIncludes=-showIncludes fi "$@" $showIncludes > "$tmpdepfile" stat=$? grep -v '^Note: including file: ' "$tmpdepfile" if test "$stat" = 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The first sed program below extracts the file names and escapes # backslashes for cygpath. The second sed program outputs the file # name when reading, but also accumulates all include files in the # hold buffer in order to output them again at the end. This only # works with sed implementations that can handle large buffers. sed < "$tmpdepfile" -n ' /^Note: including file: *\(.*\)/ { s//\1/ s/\\/\\\\/g p }' | $cygpath_u | sort -u | sed -n ' s/ /\\ /g s/\(.*\)/'"$tab"'\1 \\/p s/.\(.*\) \\/\1:/ H $ { s/.*/'"$tab"'/ G p }' >> "$depfile" rm -f "$tmpdepfile" ;; msvc7msys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; #nosideeffect) # This comment above is used by automake to tell side-effect # dependency tracking mechanisms from slower ones. dashmstdout) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done test -z "$dashmflag" && dashmflag=-M # Require at least two characters before searching for ':' # in the target name. This is to cope with DOS-style filenames: # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. "$@" $dashmflag | sed 's:^['"$tab"' ]*[^:'"$tab"' ][^:][^:]*\:['"$tab"' ]*:'"$object"'\: :' > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" tr ' ' "$nl" < "$tmpdepfile" | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; dashXmstdout) # This case only exists to satisfy depend.m4. It is never actually # run, as this mode is specially recognized in the preamble. exit 1 ;; makedepend) "$@" || exit $? # Remove any Libtool call if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # X makedepend shift cleared=no eat=no for arg do case $cleared in no) set ""; shift cleared=yes ;; esac if test $eat = yes; then eat=no continue fi case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift ;; # Strip any option that makedepend may not understand. Remove # the object too, otherwise makedepend will parse it as a source file. -arch) eat=yes ;; -*|$object) ;; *) set fnord "$@" "$arg"; shift ;; esac done obj_suffix=`echo "$object" | sed 's/^.*\././'` touch "$tmpdepfile" ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" rm -f "$depfile" # makedepend may prepend the VPATH from the source file name to the object. # No need to regex-escape $object, excess matching of '.' is harmless. sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" sed '1,2d' "$tmpdepfile" | tr ' ' "$nl" | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; cpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done "$@" -E | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | sed '$ s: \\$::' > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" cat < "$tmpdepfile" >> "$depfile" sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; msvisualcpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi IFS=" " for arg do case "$arg" in -o) shift ;; $object) shift ;; "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E 2>/dev/null | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" echo "$tab" >> "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; msvcmsys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; none) exec "$@" ;; *) echo "Unknown depmode $depmode" 1>&2 exit 1 ;; esac exit 0 # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: guvcview-src-1.7.1/install-sh0000755000175000017500000003325612173257652015215 0ustar paulopaulo#!/bin/sh # install - install a program, script, or datafile scriptversion=2011-01-19.21; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # `make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. nl=' ' IFS=" "" $nl" # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit=${DOITPROG-} if test -z "$doit"; then doit_exec=exec else doit_exec=$doit fi # Put in absolute file names if you don't have them in your path; # or use environment vars. chgrpprog=${CHGRPPROG-chgrp} chmodprog=${CHMODPROG-chmod} chownprog=${CHOWNPROG-chown} cmpprog=${CMPPROG-cmp} cpprog=${CPPROG-cp} mkdirprog=${MKDIRPROG-mkdir} mvprog=${MVPROG-mv} rmprog=${RMPROG-rm} stripprog=${STRIPPROG-strip} posix_glob='?' initialize_posix_glob=' test "$posix_glob" != "?" || { if (set -f) 2>/dev/null; then posix_glob= else posix_glob=: fi } ' posix_mkdir= # Desired mode of installed file. mode=0755 chgrpcmd= chmodcmd=$chmodprog chowncmd= mvcmd=$mvprog rmcmd="$rmprog -f" stripcmd= src= dst= dir_arg= dst_arg= copy_on_change=false no_target_directory= usage="\ Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: --help display this help and exit. --version display version info and exit. -c (ignored) -C install only if different (preserve the last data modification time) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -s $stripprog installed files. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test $# -ne 0; do case $1 in -c) ;; -C) copy_on_change=true;; -d) dir_arg=true;; -g) chgrpcmd="$chgrpprog $2" shift;; --help) echo "$usage"; exit $?;; -m) mode=$2 case $mode in *' '* | *' '* | *' '* | *'*'* | *'?'* | *'['*) echo "$0: invalid mode: $mode" >&2 exit 1;; esac shift;; -o) chowncmd="$chownprog $2" shift;; -s) stripcmd=$stripprog;; -t) dst_arg=$2 # Protect names problematic for `test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac shift;; -T) no_target_directory=true;; --version) echo "$0 $scriptversion"; exit $?;; --) shift break;; -*) echo "$0: invalid option: $1" >&2 exit 1;; *) break;; esac shift done if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dst_arg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dst_arg" shift # fnord fi shift # arg dst_arg=$arg # Protect names problematic for `test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac done fi if test $# -eq 0; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call `install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi if test -z "$dir_arg"; then do_exit='(exit $ret); exit $ret' trap "ret=129; $do_exit" 1 trap "ret=130; $do_exit" 2 trap "ret=141; $do_exit" 13 trap "ret=143; $do_exit" 15 # Set umask so as not to create temps with too-generous modes. # However, 'strip' requires both read and write access to temps. case $mode in # Optimize common cases. *644) cp_umask=133;; *755) cp_umask=22;; *[0-7]) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw='% 200' fi cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; *) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw=,u+rw fi cp_umask=$mode$u_plus_rw;; esac fi for src do # Protect names problematic for `test' and other utilities. case $src in -* | [=\(\)!]) src=./$src;; esac if test -n "$dir_arg"; then dst=$src dstdir=$dst test -d "$dstdir" dstdir_status=$? else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dst_arg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dst_arg # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then if test -n "$no_target_directory"; then echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi dstdir=$dst dst=$dstdir/`basename "$src"` dstdir_status=0 else # Prefer dirname, but fall back on a substitute if dirname fails. dstdir=` (dirname "$dst") 2>/dev/null || expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$dst" : 'X\(//\)[^/]' \| \ X"$dst" : 'X\(//\)$' \| \ X"$dst" : 'X\(/\)' \| . 2>/dev/null || echo X"$dst" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q' ` test -d "$dstdir" dstdir_status=$? fi fi obsolete_mkdir_used=false if test $dstdir_status != 0; then case $posix_mkdir in '') # Create intermediate dirs using mode 755 as modified by the umask. # This is like FreeBSD 'install' as of 1997-10-28. umask=`umask` case $stripcmd.$umask in # Optimize common cases. *[2367][2367]) mkdir_umask=$umask;; .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; *[0-7]) mkdir_umask=`expr $umask + 22 \ - $umask % 100 % 40 + $umask % 20 \ - $umask % 10 % 4 + $umask % 2 `;; *) mkdir_umask=$umask,go-w;; esac # With -d, create the new directory with the user-specified mode. # Otherwise, rely on $mkdir_umask. if test -n "$dir_arg"; then mkdir_mode=-m$mode else mkdir_mode= fi posix_mkdir=false case $umask in *[123567][0-7][0-7]) # POSIX mkdir -p sets u+wx bits regardless of umask, which # is incompatible with FreeBSD 'install' when (umask & 300) != 0. ;; *) tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 if (umask $mkdir_umask && exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 then if test -z "$dir_arg" || { # Check for POSIX incompatibilities with -m. # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or # other-writeable bit of parent directory when it shouldn't. # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. ls_ld_tmpdir=`ls -ld "$tmpdir"` case $ls_ld_tmpdir in d????-?r-*) different_mode=700;; d????-?--*) different_mode=755;; *) false;; esac && $mkdirprog -m$different_mode -p -- "$tmpdir" && { ls_ld_tmpdir_1=`ls -ld "$tmpdir"` test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" } } then posix_mkdir=: fi rmdir "$tmpdir/d" "$tmpdir" else # Remove any dirs left behind by ancient mkdir implementations. rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null fi trap '' 0;; esac;; esac if $posix_mkdir && ( umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" ) then : else # The umask is ridiculous, or mkdir does not conform to POSIX, # or it failed possibly due to a race condition. Create the # directory the slow way, step by step, checking for races as we go. case $dstdir in /*) prefix='/';; [-=\(\)!]*) prefix='./';; *) prefix='';; esac eval "$initialize_posix_glob" oIFS=$IFS IFS=/ $posix_glob set -f set fnord $dstdir shift $posix_glob set +f IFS=$oIFS prefixes= for d do test X"$d" = X && continue prefix=$prefix$d if test -d "$prefix"; then prefixes= else if $posix_mkdir; then (umask=$mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break # Don't fail if two instances are running concurrently. test -d "$prefix" || exit 1 else case $prefix in *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; *) qprefix=$prefix;; esac prefixes="$prefixes '$qprefix'" fi fi prefix=$prefix/ done if test -n "$prefixes"; then # Don't fail if two instances are running concurrently. (umask $mkdir_umask && eval "\$doit_exec \$mkdirprog $prefixes") || test -d "$dstdir" || exit 1 obsolete_mkdir_used=true fi fi fi if test -n "$dir_arg"; then { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 else # Make a couple of temp file names in the proper directory. dsttmp=$dstdir/_inst.$$_ rmtmp=$dstdir/_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 # Copy the file name to the temp name. (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && # If -C, don't bother to copy if it wouldn't change the file. if $copy_on_change && old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && eval "$initialize_posix_glob" && $posix_glob set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && $posix_glob set +f && test "$old" = "$new" && $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 then rm -f "$dsttmp" else # Rename the file to the real destination. $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. { # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { test ! -f "$dst" || $doit $rmcmd -f "$dst" 2>/dev/null || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } } || { echo "$0: cannot unlink or rename $dst" >&2 (exit 1); exit 1 } } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dst" } fi || exit 1 trap '' 0 fi done # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: guvcview-src-1.7.1/config.h.in0000664000175000017500000000522112173257652015225 0ustar paulopaulo/* config.h.in. Generated from configure.ac by autoheader. */ /* Define if building universal (internal helper macro) */ #undef AC_APPLE_UNIVERSAL_BUILD /* always defined to indicate that i18n is enabled */ #undef ENABLE_NLS /* guvcview */ #undef GETTEXT_PACKAGE /* Define if avcodec.h can be acessed directly */ #undef HAS_AVCODEC_H /* Define if avcodec.h installed to ffmpeg dir */ #undef HAS_FFMPEG_AVCODEC_H /* Define if avcodec.h installed to libavcodec dir */ #undef HAS_LIBAVCODEC_AVCODEC_H /* Define to 1 if you have the `bind_textdomain_codeset' function. */ #undef HAVE_BIND_TEXTDOMAIN_CODESET /* Define to 1 if you have the `dcgettext' function. */ #undef HAVE_DCGETTEXT /* Define if the GNU gettext() function is already present or preinstalled. */ #undef HAVE_GETTEXT /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* Define if your file defines LC_MESSAGES. */ #undef HAVE_LC_MESSAGES /* Define to 1 if you have the header file. */ #undef HAVE_LOCALE_H /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the header file. */ #undef HAVE_STRING_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* Name of package */ #undef PACKAGE /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the home page for this package. */ #undef PACKAGE_URL /* Define to the version of this package. */ #undef PACKAGE_VERSION /* set to 1 if pulseaudio installed */ #undef PULSEAUDIO /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* Version number of package */ #undef VERSION /* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most significant byte first (like Motorola and SPARC, unlike Intel). */ #if defined AC_APPLE_UNIVERSAL_BUILD # if defined __BIG_ENDIAN__ # define WORDS_BIGENDIAN 1 # endif #else # ifndef WORDS_BIGENDIAN # undef WORDS_BIGENDIAN # endif #endif