diff -Nru /tmp/OyXMDwAdGt/cheese-0.1.4/AUTHORS /tmp/N37mQaXamu/cheese-0.2.0/AUTHORS --- /tmp/OyXMDwAdGt/cheese-0.1.4/AUTHORS 2007-07-30 10:59:31.000000000 +0200 +++ /tmp/N37mQaXamu/cheese-0.2.0/AUTHORS 2007-08-13 12:18:39.000000000 +0200 @@ -3,6 +3,7 @@ - Lucas Rocha - Jaap Haitsma - Diego Escalante Urrelo + - Alessandro Decina i18n: - czech translation by Vítězslav Kotrla diff -Nru /tmp/OyXMDwAdGt/cheese-0.1.4/ChangeLog /tmp/N37mQaXamu/cheese-0.2.0/ChangeLog --- /tmp/OyXMDwAdGt/cheese-0.1.4/ChangeLog 2007-08-02 12:50:56.000000000 +0200 +++ /tmp/N37mQaXamu/cheese-0.2.0/ChangeLog 2007-08-15 10:40:09.000000000 +0200 @@ -1,6 +1,18 @@ ChangeLog for Cheese -------------------- +version 0.2.0: + - store video thumbnails in the right thumbnail directory + - video support. we can record a video with audio taken from any source + - add mnemonics for the buttons in the ui + - probably the dumbest change ever: the fsf has changed its address + - updated translations: + - de + - fr, courtesy of Pierre Slamich + - it, courtesy of Alessandro Falappa + - pl, courtesy of Tomasz Dominikowski + - pt, courtesy of Miguel Rosa + version 0.1.4: - remove photos automatically from the thumbnail row - check automatically for webcams and their resolution diff -Nru /tmp/OyXMDwAdGt/cheese-0.1.4/configure /tmp/N37mQaXamu/cheese-0.2.0/configure --- /tmp/OyXMDwAdGt/cheese-0.1.4/configure 2007-07-30 10:50:51.000000000 +0200 +++ /tmp/N37mQaXamu/cheese-0.2.0/configure 2007-08-15 21:22:24.000000000 +0200 @@ -2,7 +2,7 @@ # ^^^^ toc needs a Genuine Bash, not some cheap work-alike!!! export PACKAGE_NAME=cheese -export PACKAGE_VERSION=0.1.4 +export PACKAGE_VERSION=0.2.0 export TOC2_HOME=${PWD}/toc2 export TOC2_QUIET=1 # toconfigure will call configure.${PACKAGE_NAME}, so package-specific diff -Nru /tmp/OyXMDwAdGt/cheese-0.1.4/configure.cheese /tmp/N37mQaXamu/cheese-0.2.0/configure.cheese --- /tmp/OyXMDwAdGt/cheese-0.1.4/configure.cheese 2007-07-08 13:09:46.000000000 +0200 +++ /tmp/N37mQaXamu/cheese-0.2.0/configure.cheese 2007-08-13 13:52:37.000000000 +0200 @@ -64,6 +64,7 @@ do_check gstreamer-plugins-base-0.10 $GSTREAMER_REQUIRED do_check gnome-vfs-2.0 do_check cairo +do_check libgnomeui-2.0 echo " all ok ${TOC2_EMOTICON_OKAY}" echo diff -Nru /tmp/OyXMDwAdGt/cheese-0.1.4/COPYING /tmp/N37mQaXamu/cheese-0.2.0/COPYING --- /tmp/OyXMDwAdGt/cheese-0.1.4/COPYING 2007-06-12 04:11:21.000000000 +0200 +++ /tmp/N37mQaXamu/cheese-0.2.0/COPYING 2006-05-17 01:13:33.000000000 +0200 @@ -2,7 +2,7 @@ Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. @@ -305,7 +305,7 @@ 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 + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA Also add information on how to contact you by electronic and paper mail. @@ -313,7 +313,7 @@ If the program is interactive, make it output a short notice like this when it starts in an interactive mode: - Gnomovision version 69, Copyright (C) year name of author + Gnomovision version 69, Copyright (C) year name of author Gnomovision 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. @@ -336,5 +336,5 @@ This 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 Library General +library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. diff -Nru /tmp/OyXMDwAdGt/cheese-0.1.4/data/cheese.glade /tmp/N37mQaXamu/cheese-0.2.0/data/cheese.glade --- /tmp/OyXMDwAdGt/cheese-0.1.4/data/cheese.glade 2007-07-09 23:24:39.000000000 +0200 +++ /tmp/N37mQaXamu/cheese-0.2.0/data/cheese.glade 2007-08-12 23:05:48.000000000 +0200 @@ -105,6 +105,7 @@ True True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + 0 True @@ -125,7 +126,10 @@ True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - Photo + _Photo + True + True + button_photo 1 @@ -143,6 +147,7 @@ True True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + 0 True @@ -163,7 +168,10 @@ True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - Video + _Video + True + True + button_video 1 @@ -190,6 +198,7 @@ True True + 0 True @@ -200,7 +209,7 @@ True 2 - + True gtk-media-record @@ -212,9 +221,10 @@ True - <b>Take a photo</b> + <b>_Take a photo</b> True True + take_picture False @@ -239,6 +249,7 @@ True True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + 0 True @@ -259,7 +270,10 @@ True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - Effects + _Effects + True + True + button_effects 1 diff -Nru /tmp/OyXMDwAdGt/cheese-0.1.4/debian/changelog /tmp/N37mQaXamu/cheese-0.2.0/debian/changelog --- /tmp/OyXMDwAdGt/cheese-0.1.4/debian/changelog 2007-08-16 10:10:01.000000000 +0200 +++ /tmp/N37mQaXamu/cheese-0.2.0/debian/changelog 2007-08-16 10:10:01.000000000 +0200 @@ -1,3 +1,10 @@ +cheese (0.2.0-0ubuntu1) gutsy; urgency=low + + * New upstream release + * debian/control: Add libgnomeui as b-d + + -- Mario Danic Thu, 16 Aug 2007 10:08:53 +0200 + cheese (0.1.4-0ubuntu1) gutsy; urgency=low * New upstream release diff -Nru /tmp/OyXMDwAdGt/cheese-0.1.4/debian/control /tmp/N37mQaXamu/cheese-0.2.0/debian/control --- /tmp/OyXMDwAdGt/cheese-0.1.4/debian/control 2007-08-16 10:10:01.000000000 +0200 +++ /tmp/N37mQaXamu/cheese-0.2.0/debian/control 2007-08-16 10:10:01.000000000 +0200 @@ -10,7 +10,8 @@ libglade2-dev (>= 2.3.6), libgstreamer0.10-dev, libgstreamer-plugins-base0.10-dev, - libgnomevfs2-dev + libgnomevfs2-dev, + libgnomeui-dev Package: cheese Architecture: any diff -Nru /tmp/OyXMDwAdGt/cheese-0.1.4/po/cheese.pot /tmp/N37mQaXamu/cheese-0.2.0/po/cheese.pot --- /tmp/OyXMDwAdGt/cheese-0.1.4/po/cheese.pot 2007-08-02 00:03:06.000000000 +0200 +++ /tmp/N37mQaXamu/cheese-0.2.0/po/cheese.pot 2007-08-14 11:52:00.000000000 +0200 @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2007-08-02 00:03+0200\n" +"POT-Creation-Date: 2007-08-14 11:52+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -16,90 +16,98 @@ "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" -#: ../src/cheese-effects-widget.c:78 +#: ../src/cheese-effects-widget.c:77 msgid "No Effect" msgstr "" -#: ../src/cheese-effects-widget.c:81 +#: ../src/cheese-effects-widget.c:80 msgid "Mauve" msgstr "" -#: ../src/cheese-effects-widget.c:84 +#: ../src/cheese-effects-widget.c:83 msgid "Noir/Blanc" msgstr "" -#: ../src/cheese-effects-widget.c:87 +#: ../src/cheese-effects-widget.c:86 msgid "Saturation" msgstr "" -#: ../src/cheese-effects-widget.c:90 +#: ../src/cheese-effects-widget.c:89 msgid "Hulk" msgstr "" -#: ../src/cheese-effects-widget.c:93 +#: ../src/cheese-effects-widget.c:92 msgid "Vertical Flip" msgstr "" -#: ../src/cheese-effects-widget.c:96 +#: ../src/cheese-effects-widget.c:95 msgid "Horizontal Flip" msgstr "" -#: ../src/cheese-effects-widget.c:99 +#: ../src/cheese-effects-widget.c:98 msgid "Shagadelic" msgstr "" -#: ../src/cheese-effects-widget.c:102 +#: ../src/cheese-effects-widget.c:101 msgid "Vertigo" msgstr "" -#: ../src/cheese-effects-widget.c:105 +#: ../src/cheese-effects-widget.c:104 msgid "Edge" msgstr "" -#: ../src/cheese-effects-widget.c:108 +#: ../src/cheese-effects-widget.c:107 msgid "Dice" msgstr "" -#: ../src/cheese-effects-widget.c:111 +#: ../src/cheese-effects-widget.c:110 msgid "Warp" msgstr "" -#: ../src/cheese-pipeline-photo.c:201 +#: ../src/cheese-pipeline-video.c:140 +msgid "_Stop recording" +msgstr "" + +#: ../src/cheese-pipeline-video.c:145 ../src/cheese-window.c:94 +msgid "_Start recording" +msgstr "" + +#: ../src/cheese-pipeline.c:188 msgid "Unable to find a webcam, SORRY!" msgstr "" -#: ../src/cheese-window.c:66 ../data/cheese.glade:262 -msgid "Effects" +#: ../src/cheese-window.c:65 ../data/cheese.glade:273 +msgid "_Effects" msgstr "" -#: ../src/cheese-window.c:72 -msgid "Back" +#: ../src/cheese-window.c:71 +msgid "_Back" msgstr "" -#: ../src/cheese-window.c:123 +#: ../src/cheese-window.c:105 ../data/cheese.glade:224 +msgid "_Take a photo" +msgstr "" + +#: ../src/cheese-window.c:158 msgid "_File" msgstr "" -#: ../src/cheese-window.c:124 +#: ../src/cheese-window.c:159 msgid "_Help" msgstr "" -#: ../src/cheese-window.c:180 -msgid "A cheesy program to take pictures from your webcam" +#: ../src/cheese-window.c:220 +msgid "A cheesy program to take pictures and videos from your webcam" msgstr "" -#: ../src/cheese.c:72 ../data/cheese.glade:7 +#: ../src/cheese.c:68 ../data/cheese.glade:7 msgid "Cheese" msgstr "" -#: ../data/cheese.glade:128 -msgid "Photo" -msgstr "" - -#: ../data/cheese.glade:166 -msgid "Video" +#: ../data/cheese.glade:129 +msgid "_Photo" msgstr "" -#: ../data/cheese.glade:215 -msgid "Take a photo" +#: ../data/cheese.glade:171 +msgid "_Video" msgstr "" diff -Nru /tmp/OyXMDwAdGt/cheese-0.1.4/po/cs.po /tmp/N37mQaXamu/cheese-0.2.0/po/cs.po --- /tmp/OyXMDwAdGt/cheese-0.1.4/po/cs.po 2007-08-02 00:03:06.000000000 +0200 +++ /tmp/N37mQaXamu/cheese-0.2.0/po/cs.po 2007-08-14 11:52:00.000000000 +0200 @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: cheese\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2007-08-02 00:03+0200\n" +"POT-Creation-Date: 2007-08-14 11:52+0200\n" "PO-Revision-Date: 2007-06-25 11:00+0100\n" "Last-Translator: Vítězslav Kotrla \n" "Language-Team: LANGUAGE \n" @@ -15,90 +15,104 @@ "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: ../src/cheese-effects-widget.c:78 +#: ../src/cheese-effects-widget.c:77 msgid "No Effect" msgstr "Bez efektů" -#: ../src/cheese-effects-widget.c:81 +#: ../src/cheese-effects-widget.c:80 msgid "Mauve" msgstr "Růžová (lila)" -#: ../src/cheese-effects-widget.c:84 +#: ../src/cheese-effects-widget.c:83 msgid "Noir/Blanc" msgstr "Černá a bílá" -#: ../src/cheese-effects-widget.c:87 +#: ../src/cheese-effects-widget.c:86 msgid "Saturation" msgstr "Syté barvy" -#: ../src/cheese-effects-widget.c:90 +#: ../src/cheese-effects-widget.c:89 msgid "Hulk" msgstr "Hulk" -#: ../src/cheese-effects-widget.c:93 +#: ../src/cheese-effects-widget.c:92 msgid "Vertical Flip" msgstr "Svislé překlopení" -#: ../src/cheese-effects-widget.c:96 +#: ../src/cheese-effects-widget.c:95 msgid "Horizontal Flip" msgstr "Vodorovné překlopení" -#: ../src/cheese-effects-widget.c:99 +#: ../src/cheese-effects-widget.c:98 msgid "Shagadelic" msgstr "Shagadelic" -#: ../src/cheese-effects-widget.c:102 +#: ../src/cheese-effects-widget.c:101 msgid "Vertigo" msgstr "Vír" -#: ../src/cheese-effects-widget.c:105 +#: ../src/cheese-effects-widget.c:104 msgid "Edge" msgstr "Zvýraznění hran" -#: ../src/cheese-effects-widget.c:108 +#: ../src/cheese-effects-widget.c:107 msgid "Dice" msgstr "Kostičky" -#: ../src/cheese-effects-widget.c:111 +#: ../src/cheese-effects-widget.c:110 msgid "Warp" msgstr "Deformace" -#: ../src/cheese-pipeline-photo.c:201 +#: ../src/cheese-pipeline-video.c:140 +msgid "_Stop recording" +msgstr "" + +#: ../src/cheese-pipeline-video.c:145 ../src/cheese-window.c:94 +msgid "_Start recording" +msgstr "" + +#: ../src/cheese-pipeline.c:188 msgid "Unable to find a webcam, SORRY!" msgstr "" -#: ../src/cheese-window.c:66 ../data/cheese.glade:262 -msgid "Effects" +#: ../src/cheese-window.c:65 ../data/cheese.glade:273 +#, fuzzy +msgid "_Effects" msgstr "Efekty" -#: ../src/cheese-window.c:72 -msgid "Back" +#: ../src/cheese-window.c:71 +#, fuzzy +msgid "_Back" msgstr "Zpět" -#: ../src/cheese-window.c:123 +#: ../src/cheese-window.c:105 ../data/cheese.glade:224 +#, fuzzy +msgid "_Take a photo" +msgstr "Vyfotit" + +#: ../src/cheese-window.c:158 msgid "_File" msgstr "Soubor" -#: ../src/cheese-window.c:124 +#: ../src/cheese-window.c:159 msgid "_Help" msgstr "Nápověda" -#: ../src/cheese-window.c:180 -msgid "A cheesy program to take pictures from your webcam" +#: ../src/cheese-window.c:220 +#, fuzzy +msgid "A cheesy program to take pictures and videos from your webcam" msgstr "Vykutálený program pro snímání obrázků z webové kamery" -#: ../src/cheese.c:72 ../data/cheese.glade:7 +#: ../src/cheese.c:68 ../data/cheese.glade:7 msgid "Cheese" msgstr "Cheese" -#: ../data/cheese.glade:128 -msgid "Photo" +#: ../data/cheese.glade:129 +#, fuzzy +msgid "_Photo" msgstr "Snímek" -#: ../data/cheese.glade:166 -msgid "Video" +#: ../data/cheese.glade:171 +#, fuzzy +msgid "_Video" msgstr "Video" - -#: ../data/cheese.glade:215 -msgid "Take a photo" -msgstr "Vyfotit" diff -Nru /tmp/OyXMDwAdGt/cheese-0.1.4/po/de.po /tmp/N37mQaXamu/cheese-0.2.0/po/de.po --- /tmp/OyXMDwAdGt/cheese-0.1.4/po/de.po 2007-08-02 00:06:56.000000000 +0200 +++ /tmp/N37mQaXamu/cheese-0.2.0/po/de.po 2007-08-14 11:52:19.000000000 +0200 @@ -7,98 +7,106 @@ msgstr "" "Project-Id-Version: cheese\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2007-08-02 00:03+0200\n" -"PO-Revision-Date: 2007-08-02 00:03+0200\n" +"POT-Creation-Date: 2007-08-14 11:52+0200\n" +"PO-Revision-Date: 2007-08-14 11:49+0200\n" "Last-Translator: daniel g. siegel \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: ../src/cheese-effects-widget.c:78 +#: ../src/cheese-effects-widget.c:77 msgid "No Effect" msgstr "Kein Effekt" -#: ../src/cheese-effects-widget.c:81 +#: ../src/cheese-effects-widget.c:80 msgid "Mauve" msgstr "Mauve" -#: ../src/cheese-effects-widget.c:84 +#: ../src/cheese-effects-widget.c:83 msgid "Noir/Blanc" msgstr "Schwarz/weiß" -#: ../src/cheese-effects-widget.c:87 +#: ../src/cheese-effects-widget.c:86 msgid "Saturation" msgstr "Sättigung" -#: ../src/cheese-effects-widget.c:90 +#: ../src/cheese-effects-widget.c:89 msgid "Hulk" msgstr "Hulk" -#: ../src/cheese-effects-widget.c:93 +#: ../src/cheese-effects-widget.c:92 msgid "Vertical Flip" msgstr "Vertikale Drehung" -#: ../src/cheese-effects-widget.c:96 +#: ../src/cheese-effects-widget.c:95 msgid "Horizontal Flip" msgstr "Horizontale Drehung" -#: ../src/cheese-effects-widget.c:99 +#: ../src/cheese-effects-widget.c:98 msgid "Shagadelic" -msgstr "Shagadelic" +msgstr "Psychadelisch" -#: ../src/cheese-effects-widget.c:102 +#: ../src/cheese-effects-widget.c:101 msgid "Vertigo" msgstr "Vertigo" -#: ../src/cheese-effects-widget.c:105 +#: ../src/cheese-effects-widget.c:104 msgid "Edge" msgstr "Ecken" -#: ../src/cheese-effects-widget.c:108 +#: ../src/cheese-effects-widget.c:107 msgid "Dice" msgstr "Würfel" -#: ../src/cheese-effects-widget.c:111 +#: ../src/cheese-effects-widget.c:110 msgid "Warp" msgstr "Warp" -#: ../src/cheese-pipeline-photo.c:201 +#: ../src/cheese-pipeline-video.c:140 +msgid "_Stop recording" +msgstr "_Aufnahme starten" + +#: ../src/cheese-pipeline-video.c:145 ../src/cheese-window.c:94 +msgid "_Start recording" +msgstr "_Aufnahme stoppen" + +#: ../src/cheese-pipeline.c:188 msgid "Unable to find a webcam, SORRY!" msgstr "Kann keine Webcam finden, Entschuldigung!" -#: ../src/cheese-window.c:66 ../data/cheese.glade:262 -msgid "Effects" -msgstr "Effekte" - -#: ../src/cheese-window.c:72 -msgid "Back" -msgstr "Zurück" +#: ../src/cheese-window.c:65 ../data/cheese.glade:273 +msgid "_Effects" +msgstr "_Effekte" + +#: ../src/cheese-window.c:71 +msgid "_Back" +msgstr "_Zurück" + +#: ../src/cheese-window.c:105 ../data/cheese.glade:224 +msgid "_Take a photo" +msgstr "Foto _aufnehmen" -#: ../src/cheese-window.c:123 +#: ../src/cheese-window.c:158 msgid "_File" msgstr "_Datei" -#: ../src/cheese-window.c:124 +#: ../src/cheese-window.c:159 msgid "_Help" msgstr "_Hilfe" -#: ../src/cheese-window.c:180 -msgid "A cheesy program to take pictures from your webcam" -msgstr "Ein Programm um Bilder deiner Webcam aufzunehmen" +#: ../src/cheese-window.c:220 +msgid "A cheesy program to take pictures and videos from your webcam" +msgstr "Ein Programm um Bilder und Videos deiner Webcam aufzunehmen" -#: ../src/cheese.c:72 ../data/cheese.glade:7 +#: ../src/cheese.c:68 ../data/cheese.glade:7 msgid "Cheese" msgstr "Cheese" -#: ../data/cheese.glade:128 -msgid "Photo" -msgstr "Foto" - -#: ../data/cheese.glade:166 -msgid "Video" -msgstr "Video" - -#: ../data/cheese.glade:215 -msgid "Take a photo" -msgstr "Foto aufnehmen" +#: ../data/cheese.glade:129 +msgid "_Photo" +msgstr "_Foto" + +#: ../data/cheese.glade:171 +msgid "_Video" +msgstr "_Video" diff -Nru /tmp/OyXMDwAdGt/cheese-0.1.4/po/es.po /tmp/N37mQaXamu/cheese-0.2.0/po/es.po --- /tmp/OyXMDwAdGt/cheese-0.1.4/po/es.po 2007-08-02 00:03:06.000000000 +0200 +++ /tmp/N37mQaXamu/cheese-0.2.0/po/es.po 2007-08-14 11:52:00.000000000 +0200 @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: cheese\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2007-08-02 00:03+0200\n" +"POT-Creation-Date: 2007-08-14 11:52+0200\n" "PO-Revision-Date: 2007-06-27 18:46+0100\n" "Last-Translator: Ricardo González Castro \n" "Language-Team: \n" @@ -15,90 +15,104 @@ "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: ../src/cheese-effects-widget.c:78 +#: ../src/cheese-effects-widget.c:77 msgid "No Effect" msgstr "Sin efectos" -#: ../src/cheese-effects-widget.c:81 +#: ../src/cheese-effects-widget.c:80 msgid "Mauve" msgstr "Malva" -#: ../src/cheese-effects-widget.c:84 +#: ../src/cheese-effects-widget.c:83 msgid "Noir/Blanc" msgstr "Blanco/Negro" -#: ../src/cheese-effects-widget.c:87 +#: ../src/cheese-effects-widget.c:86 msgid "Saturation" msgstr "Saturación" -#: ../src/cheese-effects-widget.c:90 +#: ../src/cheese-effects-widget.c:89 msgid "Hulk" msgstr "Hulk" -#: ../src/cheese-effects-widget.c:93 +#: ../src/cheese-effects-widget.c:92 msgid "Vertical Flip" msgstr "Giro vertical" -#: ../src/cheese-effects-widget.c:96 +#: ../src/cheese-effects-widget.c:95 msgid "Horizontal Flip" msgstr "Giro horizontal" -#: ../src/cheese-effects-widget.c:99 +#: ../src/cheese-effects-widget.c:98 msgid "Shagadelic" msgstr "Psicodélico" -#: ../src/cheese-effects-widget.c:102 +#: ../src/cheese-effects-widget.c:101 msgid "Vertigo" msgstr "Vértigo" -#: ../src/cheese-effects-widget.c:105 +#: ../src/cheese-effects-widget.c:104 msgid "Edge" msgstr "Contornos" -#: ../src/cheese-effects-widget.c:108 +#: ../src/cheese-effects-widget.c:107 msgid "Dice" msgstr "Pedazos" -#: ../src/cheese-effects-widget.c:111 +#: ../src/cheese-effects-widget.c:110 msgid "Warp" msgstr "Distorsión" -#: ../src/cheese-pipeline-photo.c:201 +#: ../src/cheese-pipeline-video.c:140 +msgid "_Stop recording" +msgstr "" + +#: ../src/cheese-pipeline-video.c:145 ../src/cheese-window.c:94 +msgid "_Start recording" +msgstr "" + +#: ../src/cheese-pipeline.c:188 msgid "Unable to find a webcam, SORRY!" msgstr "" -#: ../src/cheese-window.c:66 ../data/cheese.glade:262 -msgid "Effects" +#: ../src/cheese-window.c:65 ../data/cheese.glade:273 +#, fuzzy +msgid "_Effects" msgstr "Efectos" -#: ../src/cheese-window.c:72 -msgid "Back" +#: ../src/cheese-window.c:71 +#, fuzzy +msgid "_Back" msgstr "Atras" -#: ../src/cheese-window.c:123 +#: ../src/cheese-window.c:105 ../data/cheese.glade:224 +#, fuzzy +msgid "_Take a photo" +msgstr "Sacar una fotografía" + +#: ../src/cheese-window.c:158 msgid "_File" msgstr "_Archivo" -#: ../src/cheese-window.c:124 +#: ../src/cheese-window.c:159 msgid "_Help" msgstr "Ayuda" -#: ../src/cheese-window.c:180 -msgid "A cheesy program to take pictures from your webcam" +#: ../src/cheese-window.c:220 +#, fuzzy +msgid "A cheesy program to take pictures and videos from your webcam" msgstr "Un programa para sacar fotografías con tu cámara web" -#: ../src/cheese.c:72 ../data/cheese.glade:7 +#: ../src/cheese.c:68 ../data/cheese.glade:7 msgid "Cheese" msgstr "Cheese" -#: ../data/cheese.glade:128 -msgid "Photo" +#: ../data/cheese.glade:129 +#, fuzzy +msgid "_Photo" msgstr "Fotografía" -#: ../data/cheese.glade:166 -msgid "Video" +#: ../data/cheese.glade:171 +#, fuzzy +msgid "_Video" msgstr "Video" - -#: ../data/cheese.glade:215 -msgid "Take a photo" -msgstr "Sacar una fotografía" diff -Nru /tmp/OyXMDwAdGt/cheese-0.1.4/po/fr.po /tmp/N37mQaXamu/cheese-0.2.0/po/fr.po --- /tmp/OyXMDwAdGt/cheese-0.1.4/po/fr.po 2007-08-02 00:10:01.000000000 +0200 +++ /tmp/N37mQaXamu/cheese-0.2.0/po/fr.po 2007-08-14 13:28:57.000000000 +0200 @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: cheese\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2007-08-02 00:03+0200\n" +"POT-Creation-Date: 2007-08-14 11:52+0200\n" "PO-Revision-Date: 2007-08-02 00:03+0200\n" "Last-Translator: Pierre Slamich\n" "Language-Team: French \n" @@ -15,90 +15,98 @@ "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -#: ../src/cheese-effects-widget.c:78 +#: ../src/cheese-effects-widget.c:77 msgid "No Effect" msgstr "Aucun Effet" -#: ../src/cheese-effects-widget.c:81 +#: ../src/cheese-effects-widget.c:80 msgid "Mauve" msgstr "Mauve" -#: ../src/cheese-effects-widget.c:84 +#: ../src/cheese-effects-widget.c:83 msgid "Noir/Blanc" msgstr "Noir/Blanc" -#: ../src/cheese-effects-widget.c:87 +#: ../src/cheese-effects-widget.c:86 msgid "Saturation" msgstr "Saturation" -#: ../src/cheese-effects-widget.c:90 +#: ../src/cheese-effects-widget.c:89 msgid "Hulk" msgstr "Hulk" -#: ../src/cheese-effects-widget.c:93 +#: ../src/cheese-effects-widget.c:92 msgid "Vertical Flip" msgstr "Retournement vertical" -#: ../src/cheese-effects-widget.c:96 +#: ../src/cheese-effects-widget.c:95 msgid "Horizontal Flip" msgstr "Retournement horizontal" -#: ../src/cheese-effects-widget.c:99 +#: ../src/cheese-effects-widget.c:98 msgid "Shagadelic" msgstr "Shagadélique!" -#: ../src/cheese-effects-widget.c:102 +#: ../src/cheese-effects-widget.c:101 msgid "Vertigo" msgstr "Vertigo" -#: ../src/cheese-effects-widget.c:105 +#: ../src/cheese-effects-widget.c:104 msgid "Edge" msgstr "Contours" -#: ../src/cheese-effects-widget.c:108 +#: ../src/cheese-effects-widget.c:107 msgid "Dice" -msgstr "en petits dés" +msgstr "En petits dés" -#: ../src/cheese-effects-widget.c:111 +#: ../src/cheese-effects-widget.c:110 msgid "Warp" msgstr "Déformer" -#: ../src/cheese-pipeline-photo.c:201 +#: ../src/cheese-pipeline-video.c:140 +msgid "_Stop recording" +msgstr "_Arrêter l'enregistrement" + +#: ../src/cheese-pipeline-video.c:145 ../src/cheese-window.c:94 +msgid "_Start recording" +msgstr "_Démarrer l'enregistrement" + +#: ../src/cheese-pipeline.c:188 msgid "Unable to find a webcam, SORRY!" msgstr "Impossible de détecter une webcam, DESOLE!" -#: ../src/cheese-window.c:66 ../data/cheese.glade:262 -msgid "Effects" -msgstr "Effets" - -#: ../src/cheese-window.c:72 -msgid "Back" -msgstr "Retour" +#: ../src/cheese-window.c:65 ../data/cheese.glade:273 +msgid "_Effects" +msgstr "_Effets" + +#: ../src/cheese-window.c:71 +msgid "_Back" +msgstr "_Retour" + +#: ../src/cheese-window.c:105 ../data/cheese.glade:224 +msgid "_Take a photo" +msgstr "_Prendre une photo" -#: ../src/cheese-window.c:123 +#: ../src/cheese-window.c:158 msgid "_File" msgstr "_Fichier" -#: ../src/cheese-window.c:124 +#: ../src/cheese-window.c:159 msgid "_Help" msgstr "_Aide" -#: ../src/cheese-window.c:180 -msgid "A cheesy program to take pictures from your webcam" -msgstr "Un programme qui fait cheese pour prendre des photos de votre webcam" +#: ../src/cheese-window.c:220 +msgid "A cheesy program to take pictures and videos from your webcam" +msgstr "Un programme qui fait cheese pour prendre des photos et des vidéos grâce à votre webcam" -#: ../src/cheese.c:72 ../data/cheese.glade:7 +#: ../src/cheese.c:68 ../data/cheese.glade:7 msgid "Cheese" msgstr "Cheese" -#: ../data/cheese.glade:128 -msgid "Photo" -msgstr "Photo" - -#: ../data/cheese.glade:166 -msgid "Video" -msgstr "Vidéo" - -#: ../data/cheese.glade:215 -msgid "Take a photo" -msgstr "Prendre une photo" +#: ../data/cheese.glade:129 +msgid "_Photo" +msgstr "_Photo" + +#: ../data/cheese.glade:171 +msgid "_Video" +msgstr "_Vidéo" diff -Nru /tmp/OyXMDwAdGt/cheese-0.1.4/po/gl.po /tmp/N37mQaXamu/cheese-0.2.0/po/gl.po --- /tmp/OyXMDwAdGt/cheese-0.1.4/po/gl.po 2007-08-02 00:03:06.000000000 +0200 +++ /tmp/N37mQaXamu/cheese-0.2.0/po/gl.po 2007-08-14 11:52:00.000000000 +0200 @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: cheese\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2007-08-02 00:03+0200\n" +"POT-Creation-Date: 2007-08-14 11:52+0200\n" "PO-Revision-Date: 2007-06-27 18:46+0100\n" "Last-Translator: Ricardo González Castro \n" "Language-Team: \n" @@ -15,90 +15,104 @@ "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: ../src/cheese-effects-widget.c:78 +#: ../src/cheese-effects-widget.c:77 msgid "No Effect" msgstr "Sen efectos" -#: ../src/cheese-effects-widget.c:81 +#: ../src/cheese-effects-widget.c:80 msgid "Mauve" msgstr "Malva" -#: ../src/cheese-effects-widget.c:84 +#: ../src/cheese-effects-widget.c:83 msgid "Noir/Blanc" msgstr "Branco/Negro" -#: ../src/cheese-effects-widget.c:87 +#: ../src/cheese-effects-widget.c:86 msgid "Saturation" msgstr "Saturación" -#: ../src/cheese-effects-widget.c:90 +#: ../src/cheese-effects-widget.c:89 msgid "Hulk" msgstr "Hulk" -#: ../src/cheese-effects-widget.c:93 +#: ../src/cheese-effects-widget.c:92 msgid "Vertical Flip" msgstr "Xiro vertical" -#: ../src/cheese-effects-widget.c:96 +#: ../src/cheese-effects-widget.c:95 msgid "Horizontal Flip" msgstr "Xiro horizontal" -#: ../src/cheese-effects-widget.c:99 +#: ../src/cheese-effects-widget.c:98 msgid "Shagadelic" msgstr "Psicodélico" -#: ../src/cheese-effects-widget.c:102 +#: ../src/cheese-effects-widget.c:101 msgid "Vertigo" msgstr "Vértigo" -#: ../src/cheese-effects-widget.c:105 +#: ../src/cheese-effects-widget.c:104 msgid "Edge" msgstr "Contornos" -#: ../src/cheese-effects-widget.c:108 +#: ../src/cheese-effects-widget.c:107 msgid "Dice" msgstr "Anacos" -#: ../src/cheese-effects-widget.c:111 +#: ../src/cheese-effects-widget.c:110 msgid "Warp" msgstr "Distorsión" -#: ../src/cheese-pipeline-photo.c:201 +#: ../src/cheese-pipeline-video.c:140 +msgid "_Stop recording" +msgstr "" + +#: ../src/cheese-pipeline-video.c:145 ../src/cheese-window.c:94 +msgid "_Start recording" +msgstr "" + +#: ../src/cheese-pipeline.c:188 msgid "Unable to find a webcam, SORRY!" msgstr "" -#: ../src/cheese-window.c:66 ../data/cheese.glade:262 -msgid "Effects" +#: ../src/cheese-window.c:65 ../data/cheese.glade:273 +#, fuzzy +msgid "_Effects" msgstr "Efectos" -#: ../src/cheese-window.c:72 -msgid "Back" +#: ../src/cheese-window.c:71 +#, fuzzy +msgid "_Back" msgstr "Atras" -#: ../src/cheese-window.c:123 +#: ../src/cheese-window.c:105 ../data/cheese.glade:224 +#, fuzzy +msgid "_Take a photo" +msgstr "Sacar unha fotografía" + +#: ../src/cheese-window.c:158 msgid "_File" msgstr "_Arquivo" -#: ../src/cheese-window.c:124 +#: ../src/cheese-window.c:159 msgid "_Help" msgstr "Axuda" -#: ../src/cheese-window.c:180 -msgid "A cheesy program to take pictures from your webcam" +#: ../src/cheese-window.c:220 +#, fuzzy +msgid "A cheesy program to take pictures and videos from your webcam" msgstr "Un programa para sacar fotografías coa tua cámara web" -#: ../src/cheese.c:72 ../data/cheese.glade:7 +#: ../src/cheese.c:68 ../data/cheese.glade:7 msgid "Cheese" msgstr "Cheese" -#: ../data/cheese.glade:128 -msgid "Photo" +#: ../data/cheese.glade:129 +#, fuzzy +msgid "_Photo" msgstr "Fotografía" -#: ../data/cheese.glade:166 -msgid "Video" +#: ../data/cheese.glade:171 +#, fuzzy +msgid "_Video" msgstr "Video" - -#: ../data/cheese.glade:215 -msgid "Take a photo" -msgstr "Sacar unha fotografía" diff -Nru /tmp/OyXMDwAdGt/cheese-0.1.4/po/it.po /tmp/N37mQaXamu/cheese-0.2.0/po/it.po --- /tmp/OyXMDwAdGt/cheese-0.1.4/po/it.po 2007-08-02 00:03:06.000000000 +0200 +++ /tmp/N37mQaXamu/cheese-0.2.0/po/it.po 2007-08-14 11:52:00.000000000 +0200 @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: cheese\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2007-08-02 00:03+0200\n" +"POT-Creation-Date: 2007-08-14 11:52+0200\n" "PO-Revision-Date: 2007-06-28 00:04+0100\n" "Last-Translator: Alessandro Falappa \n" "Language-Team: \n" @@ -15,90 +15,99 @@ "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: ../src/cheese-effects-widget.c:78 +#: ../src/cheese-effects-widget.c:77 msgid "No Effect" msgstr "Nessun effetto" -#: ../src/cheese-effects-widget.c:81 +#: ../src/cheese-effects-widget.c:80 msgid "Mauve" msgstr "Viola" -#: ../src/cheese-effects-widget.c:84 +#: ../src/cheese-effects-widget.c:83 msgid "Noir/Blanc" msgstr "Bianco e nero" -#: ../src/cheese-effects-widget.c:87 +#: ../src/cheese-effects-widget.c:86 msgid "Saturation" msgstr "Saturazione" -#: ../src/cheese-effects-widget.c:90 +#: ../src/cheese-effects-widget.c:89 msgid "Hulk" msgstr "Hulk" -#: ../src/cheese-effects-widget.c:93 +#: ../src/cheese-effects-widget.c:92 msgid "Vertical Flip" msgstr "Riflesso verticale" -#: ../src/cheese-effects-widget.c:96 +#: ../src/cheese-effects-widget.c:95 msgid "Horizontal Flip" msgstr "Riflesso orizzontale" -#: ../src/cheese-effects-widget.c:99 +#: ../src/cheese-effects-widget.c:98 msgid "Shagadelic" msgstr "Psichedelico" -#: ../src/cheese-effects-widget.c:102 +#: ../src/cheese-effects-widget.c:101 msgid "Vertigo" msgstr "Vertigo" -#: ../src/cheese-effects-widget.c:105 +#: ../src/cheese-effects-widget.c:104 msgid "Edge" msgstr "Bordi" -#: ../src/cheese-effects-widget.c:108 +#: ../src/cheese-effects-widget.c:107 msgid "Dice" msgstr "A quadratini" -#: ../src/cheese-effects-widget.c:111 +#: ../src/cheese-effects-widget.c:110 msgid "Warp" msgstr "Distorsione" -#: ../src/cheese-pipeline-photo.c:201 -msgid "Unable to find a webcam, SORRY!" +#: ../src/cheese-pipeline-video.c:140 +msgid "_Stop recording" +msgstr "" + +#: ../src/cheese-pipeline-video.c:145 ../src/cheese-window.c:94 +msgid "_Start recording" msgstr "" -#: ../src/cheese-window.c:66 ../data/cheese.glade:262 -msgid "Effects" -msgstr "Effetti" - -#: ../src/cheese-window.c:72 -msgid "Back" -msgstr "Indietro" +#: ../src/cheese-pipeline.c:188 +msgid "Unable to find a webcam, SORRY!" +msgstr "Webcam non rilevata!" + +#: ../src/cheese-window.c:65 ../data/cheese.glade:273 +msgid "_Effects" +msgstr "_Effetti" + +#: ../src/cheese-window.c:71 +msgid "_Back" +msgstr "_Indietro" + +#: ../src/cheese-window.c:105 ../data/cheese.glade:224 +msgid "_Take a photo" +msgstr "_Scatta foto" -#: ../src/cheese-window.c:123 +#: ../src/cheese-window.c:158 msgid "_File" msgstr "_File" -#: ../src/cheese-window.c:124 +#: ../src/cheese-window.c:159 msgid "_Help" msgstr "_Aiuto" -#: ../src/cheese-window.c:180 -msgid "A cheesy program to take pictures from your webcam" +#: ../src/cheese-window.c:220 +#, fuzzy +msgid "A cheesy program to take pictures and videos from your webcam" msgstr "Un programma sfizioso per scattare fotografie con la propria webcam" -#: ../src/cheese.c:72 ../data/cheese.glade:7 +#: ../src/cheese.c:68 ../data/cheese.glade:7 msgid "Cheese" msgstr "Cheese" -#: ../data/cheese.glade:128 -msgid "Photo" -msgstr "Foto" - -#: ../data/cheese.glade:166 -msgid "Video" -msgstr "Video" - -#: ../data/cheese.glade:215 -msgid "Take a photo" -msgstr "Scatta foto" +#: ../data/cheese.glade:129 +msgid "_Photo" +msgstr "F_oto" + +#: ../data/cheese.glade:171 +msgid "_Video" +msgstr "_Video" diff -Nru /tmp/OyXMDwAdGt/cheese-0.1.4/po/nl.po /tmp/N37mQaXamu/cheese-0.2.0/po/nl.po --- /tmp/OyXMDwAdGt/cheese-0.1.4/po/nl.po 2007-08-02 00:03:06.000000000 +0200 +++ /tmp/N37mQaXamu/cheese-0.2.0/po/nl.po 2007-08-14 16:55:10.000000000 +0200 @@ -8,99 +8,108 @@ msgstr "" "Project-Id-Version: cheese\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2007-08-02 00:03+0200\n" -"PO-Revision-Date: 2007-07-01 15:38+0200\n" -"Last-Translator: Wouter Bolsterlee \n" +"POT-Creation-Date: 2007-08-14 11:52+0200\n" +"PO-Revision-Date: 2007-08-14 13:58+0200\n" +"Last-Translator: Max Beauchez \n" "Language-Team: Dutch\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ../src/cheese-effects-widget.c:78 +#: ../src/cheese-effects-widget.c:77 msgid "No Effect" msgstr "Geen effect" -#: ../src/cheese-effects-widget.c:81 +#: ../src/cheese-effects-widget.c:80 msgid "Mauve" msgstr "Zacht paars" -#: ../src/cheese-effects-widget.c:84 +#: ../src/cheese-effects-widget.c:83 msgid "Noir/Blanc" msgstr "Zwart/wit" -#: ../src/cheese-effects-widget.c:87 +#: ../src/cheese-effects-widget.c:86 msgid "Saturation" msgstr "Verzadiging" -#: ../src/cheese-effects-widget.c:90 +#: ../src/cheese-effects-widget.c:89 msgid "Hulk" msgstr "Hulk" -#: ../src/cheese-effects-widget.c:93 +#: ../src/cheese-effects-widget.c:92 msgid "Vertical Flip" msgstr "Verticaal spiegelen" -#: ../src/cheese-effects-widget.c:96 +#: ../src/cheese-effects-widget.c:95 msgid "Horizontal Flip" msgstr "Horizontaal spiegelen" -#: ../src/cheese-effects-widget.c:99 +#: ../src/cheese-effects-widget.c:98 msgid "Shagadelic" msgstr "Shagadelic" -#: ../src/cheese-effects-widget.c:102 +#: ../src/cheese-effects-widget.c:101 msgid "Vertigo" msgstr "Vertigo" -#: ../src/cheese-effects-widget.c:105 +#: ../src/cheese-effects-widget.c:104 msgid "Edge" msgstr "Edge" -#: ../src/cheese-effects-widget.c:108 +#: ../src/cheese-effects-widget.c:107 msgid "Dice" msgstr "Versnijden" -#: ../src/cheese-effects-widget.c:111 +#: ../src/cheese-effects-widget.c:110 msgid "Warp" msgstr "Vervormen" -#: ../src/cheese-pipeline-photo.c:201 +#: ../src/cheese-pipeline-video.c:140 +msgid "_Stop recording" +msgstr "_Stoppen met opnemen" + +#: ../src/cheese-pipeline-video.c:145 ../src/cheese-window.c:94 +msgid "_Start recording" +msgstr "_Beginnen met opnemen" + +#: ../src/cheese-pipeline.c:188 msgid "Unable to find a webcam, SORRY!" -msgstr "" +msgstr "Er kon geen webcam gevonden worden" + +#: ../src/cheese-window.c:65 ../data/cheese.glade:273 +msgid "_Effects" +msgstr "_Effecten" + +#: ../src/cheese-window.c:71 +msgid "_Back" +msgstr "_Terug" -#: ../src/cheese-window.c:66 ../data/cheese.glade:262 -msgid "Effects" -msgstr "Effecten" - -#: ../src/cheese-window.c:72 -msgid "Back" -msgstr "Terug" +#: ../src/cheese-window.c:105 ../data/cheese.glade:224 +msgid "_Take a photo" +msgstr "Foto _nemen" -#: ../src/cheese-window.c:123 +#: ../src/cheese-window.c:158 msgid "_File" msgstr "_Bestand" -#: ../src/cheese-window.c:124 +#: ../src/cheese-window.c:159 msgid "_Help" msgstr "_Hulp" -#: ../src/cheese-window.c:180 -msgid "A cheesy program to take pictures from your webcam" +#: ../src/cheese-window.c:220 +#, fuzzy +msgid "A cheesy program to take pictures and videos from your webcam" msgstr "Een melig programma om foto's met je webcam te nemen" -#: ../src/cheese.c:72 ../data/cheese.glade:7 +#: ../src/cheese.c:68 ../data/cheese.glade:7 msgid "Cheese" msgstr "Cheese" -#: ../data/cheese.glade:128 -msgid "Photo" -msgstr "Foto" - -#: ../data/cheese.glade:166 -msgid "Video" -msgstr "Video" - -#: ../data/cheese.glade:215 -msgid "Take a photo" -msgstr "Foto nemen" +#: ../data/cheese.glade:129 +msgid "_Photo" +msgstr "_Foto" + +#: ../data/cheese.glade:171 +msgid "_Video" +msgstr "_Video" diff -Nru /tmp/OyXMDwAdGt/cheese-0.1.4/po/pl.po /tmp/N37mQaXamu/cheese-0.2.0/po/pl.po --- /tmp/OyXMDwAdGt/cheese-0.1.4/po/pl.po 2007-08-02 00:03:06.000000000 +0200 +++ /tmp/N37mQaXamu/cheese-0.2.0/po/pl.po 2007-08-15 10:38:57.000000000 +0200 @@ -7,98 +7,111 @@ msgstr "" "Project-Id-Version: cheese\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2007-08-02 00:03+0200\n" -"PO-Revision-Date: 2007-07-04 13:44+0100\n" +"POT-Creation-Date: 2007-08-14 11:52+0200\n" +"PO-Revision-Date: 2007-08-14 20:43+0100\n" "Last-Translator: Tomasz Dominikowski \n" -"Language-Team: Tomasz Dominikowsi \n" +"Language-Team: Tomasz Dominikowsi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -#: ../src/cheese-effects-widget.c:78 +#: ../src/cheese-effects-widget.c:77 msgid "No Effect" msgstr "Bez efektów" -#: ../src/cheese-effects-widget.c:81 +#: ../src/cheese-effects-widget.c:80 msgid "Mauve" msgstr "Fiołkowy" -#: ../src/cheese-effects-widget.c:84 +#: ../src/cheese-effects-widget.c:83 msgid "Noir/Blanc" msgstr "Mroczny/Siwy" -#: ../src/cheese-effects-widget.c:87 +#: ../src/cheese-effects-widget.c:86 msgid "Saturation" msgstr "Nasycenie" -#: ../src/cheese-effects-widget.c:90 +#: ../src/cheese-effects-widget.c:89 msgid "Hulk" msgstr "Hulk" -#: ../src/cheese-effects-widget.c:93 +#: ../src/cheese-effects-widget.c:92 msgid "Vertical Flip" msgstr "Obrót pionowy" -#: ../src/cheese-effects-widget.c:96 +#: ../src/cheese-effects-widget.c:95 msgid "Horizontal Flip" msgstr "Obrót poziomy" -#: ../src/cheese-effects-widget.c:99 +#: ../src/cheese-effects-widget.c:98 msgid "Shagadelic" msgstr "Zwariowany" -#: ../src/cheese-effects-widget.c:102 +#: ../src/cheese-effects-widget.c:101 msgid "Vertigo" msgstr "Zawrót głowy" -#: ../src/cheese-effects-widget.c:105 +#: ../src/cheese-effects-widget.c:104 msgid "Edge" msgstr "Krawędź" -#: ../src/cheese-effects-widget.c:108 +#: ../src/cheese-effects-widget.c:107 msgid "Dice" msgstr "Kostka" -#: ../src/cheese-effects-widget.c:111 +#: ../src/cheese-effects-widget.c:110 msgid "Warp" msgstr "Deformacja" -#: ../src/cheese-pipeline-photo.c:201 +#: ../src/cheese-pipeline-video.c:140 +msgid "_Stop recording" +msgstr "_Zatrzymaj nagrywanie" + +#: ../src/cheese-pipeline-video.c:145 +#: ../src/cheese-window.c:94 +msgid "_Start recording" +msgstr "_Uruchom nagrywanie" + +#: ../src/cheese-pipeline.c:188 msgid "Unable to find a webcam, SORRY!" -msgstr "" +msgstr "Nie znaleziono kamery internetowej, przepraszamy!" -#: ../src/cheese-window.c:66 ../data/cheese.glade:262 -msgid "Effects" -msgstr "Efekty" - -#: ../src/cheese-window.c:72 -msgid "Back" -msgstr "Wstecz" +#: ../src/cheese-window.c:65 +#: ../data/cheese.glade:273 +msgid "_Effects" +msgstr "_Efekty" + +#: ../src/cheese-window.c:71 +msgid "_Back" +msgstr "_Wstecz" + +#: ../src/cheese-window.c:105 +#: ../data/cheese.glade:224 +msgid "_Take a photo" +msgstr "Zrób z_djęcie" -#: ../src/cheese-window.c:123 +#: ../src/cheese-window.c:158 msgid "_File" msgstr "_Plik" -#: ../src/cheese-window.c:124 +#: ../src/cheese-window.c:159 msgid "_Help" msgstr "Pomo_c" -#: ../src/cheese-window.c:180 -msgid "A cheesy program to take pictures from your webcam" -msgstr "Tandetny program do robienia zdjęć za pomocą kamery internetowej" +#: ../src/cheese-window.c:220 +msgid "A cheesy program to take pictures and videos from your webcam" +msgstr "Tandetny program do robienia zdjęć i nagrywania filmów za pomocą kamery internetowej" -#: ../src/cheese.c:72 ../data/cheese.glade:7 +#: ../src/cheese.c:68 +#: ../data/cheese.glade:7 msgid "Cheese" msgstr "Cheese" -#: ../data/cheese.glade:128 -msgid "Photo" -msgstr "Zdjęcie" - -#: ../data/cheese.glade:166 -msgid "Video" -msgstr "Wideo" - -#: ../data/cheese.glade:215 -msgid "Take a photo" -msgstr "Zrób zdjęcie" +#: ../data/cheese.glade:129 +msgid "_Photo" +msgstr "Zdjęci_e" + +#: ../data/cheese.glade:171 +msgid "_Video" +msgstr "Wide_o" + diff -Nru /tmp/OyXMDwAdGt/cheese-0.1.4/po/pt.po /tmp/N37mQaXamu/cheese-0.2.0/po/pt.po --- /tmp/OyXMDwAdGt/cheese-0.1.4/po/pt.po 2007-08-02 00:03:07.000000000 +0200 +++ /tmp/N37mQaXamu/cheese-0.2.0/po/pt.po 2007-08-14 14:04:09.000000000 +0200 @@ -1,5 +1,5 @@ # Cheese Portuguese translation -# Copyright (C) 2007 daniel g. siegel +# Copyright (C) 2007 daniel g. siegel # This file is distributed under the same license as cheese # Miguel Rosa , 2007. # @@ -7,98 +7,106 @@ msgstr "" "Project-Id-Version: cheese\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2007-08-02 00:03+0200\n" -"PO-Revision-Date: 2007-06-25 12:30+WEST\n" +"POT-Creation-Date: 2007-08-14 11:52+0200\n" +"PO-Revision-Date: 2007-08-14 11:52+WEST\n" "Last-Translator: Miguel Rosa \n" -"Language-Team: LANGUAGE \n" +"Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: ../src/cheese-effects-widget.c:78 +#: ../src/cheese-effects-widget.c:77 msgid "No Effect" -msgstr "Sem efeitos" +msgstr "Sem Efeitos" -#: ../src/cheese-effects-widget.c:81 +#: ../src/cheese-effects-widget.c:80 msgid "Mauve" msgstr "Lilás" -#: ../src/cheese-effects-widget.c:84 +#: ../src/cheese-effects-widget.c:83 msgid "Noir/Blanc" -msgstr "Negro/Branco" +msgstr "Branco/Negro" -#: ../src/cheese-effects-widget.c:87 +#: ../src/cheese-effects-widget.c:86 msgid "Saturation" msgstr "Saturação" -#: ../src/cheese-effects-widget.c:90 +#: ../src/cheese-effects-widget.c:89 msgid "Hulk" msgstr "Hulk" -#: ../src/cheese-effects-widget.c:93 +#: ../src/cheese-effects-widget.c:92 msgid "Vertical Flip" -msgstr "Inversão vertical" +msgstr "Inversão Vertical" -#: ../src/cheese-effects-widget.c:96 +#: ../src/cheese-effects-widget.c:95 msgid "Horizontal Flip" -msgstr "Inversão horizontal" +msgstr "Inversão Horizontal" -#: ../src/cheese-effects-widget.c:99 +#: ../src/cheese-effects-widget.c:98 msgid "Shagadelic" msgstr "Psicadélico" -#: ../src/cheese-effects-widget.c:102 +#: ../src/cheese-effects-widget.c:101 msgid "Vertigo" msgstr "Vertigo" -#: ../src/cheese-effects-widget.c:105 +#: ../src/cheese-effects-widget.c:104 msgid "Edge" msgstr "Contornos" -#: ../src/cheese-effects-widget.c:108 +#: ../src/cheese-effects-widget.c:107 msgid "Dice" msgstr "Pedaços" -#: ../src/cheese-effects-widget.c:111 +#: ../src/cheese-effects-widget.c:110 msgid "Warp" msgstr "Distorção" -#: ../src/cheese-pipeline-photo.c:201 +#: ../src/cheese-pipeline-video.c:140 +msgid "_Stop recording" +msgstr "_Terminar gravação" + +#: ../src/cheese-pipeline-video.c:145 ../src/cheese-window.c:94 +msgid "_Start recording" +msgstr "_Iniciar gravação" + +#: ../src/cheese-pipeline.c:188 msgid "Unable to find a webcam, SORRY!" -msgstr "" +msgstr "Não foi possível encontrar uma webcam, Perdão!" + +#: ../src/cheese-window.c:65 ../data/cheese.glade:273 +msgid "_Effects" +msgstr "_Efeitos" + +#: ../src/cheese-window.c:71 +msgid "_Back" +msgstr "_Retroceder" -#: ../src/cheese-window.c:66 ../data/cheese.glade:262 -msgid "Effects" -msgstr "Efeitos" - -#: ../src/cheese-window.c:72 -msgid "Back" -msgstr "Retroceder" +#: ../src/cheese-window.c:105 ../data/cheese.glade:224 +msgid "_Take a photo" +msgstr "_Tirar uma foto" -#: ../src/cheese-window.c:123 +#: ../src/cheese-window.c:158 msgid "_File" msgstr "_Ficheiro" -#: ../src/cheese-window.c:124 +#: ../src/cheese-window.c:159 msgid "_Help" -msgstr "Ajuda" +msgstr "_Ajuda" -#: ../src/cheese-window.c:180 -msgid "A cheesy program to take pictures from your webcam" -msgstr "Uma aplicação para tirar fotografias da sua webcam" +#: ../src/cheese-window.c:220 +msgid "A cheesy program to take pictures and videos from your webcam" +msgstr "Uma aplicação para tirar fotografias e vídeos da sua webcam" -#: ../src/cheese.c:72 ../data/cheese.glade:7 +#: ../src/cheese.c:68 ../data/cheese.glade:7 msgid "Cheese" msgstr "Cheese" -#: ../data/cheese.glade:128 -msgid "Photo" -msgstr "Foto" - -#: ../data/cheese.glade:166 -msgid "Video" -msgstr "Vídeo" - -#: ../data/cheese.glade:215 -msgid "Take a photo" -msgstr "Tirar uma foto" +#: ../data/cheese.glade:129 +msgid "_Photo" +msgstr "_Foto" + +#: ../data/cheese.glade:171 +msgid "_Video" +msgstr "_Vídeo" diff -Nru /tmp/OyXMDwAdGt/cheese-0.1.4/src/cheese.c /tmp/N37mQaXamu/cheese-0.2.0/src/cheese.c --- /tmp/OyXMDwAdGt/cheese-0.1.4/src/cheese.c 2007-08-01 18:41:31.000000000 +0200 +++ /tmp/N37mQaXamu/cheese-0.2.0/src/cheese.c 2007-08-15 18:54:02.000000000 +0200 @@ -14,11 +14,9 @@ * 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. + * along with this program. If not, see . */ - #include #include #include @@ -27,7 +25,7 @@ #include "cheese-config.h" #include "cheese.h" -#include "cheese-pipeline-photo.h" +#include "cheese-pipeline.h" #include "cheese-fileutil.h" #include "cheese-thumbnails.h" #include "cheese-window.h" @@ -37,15 +35,13 @@ struct _thumbnails thumbnails; GnomeVFSMonitorHandle *monitor_handle = NULL; -Pipeline *PipelinePhoto; void on_cheese_window_close_cb(GtkWidget *widget, gpointer data) { - pipeline_set_stop(PipelinePhoto); - g_object_unref(G_OBJECT(PipelinePhoto)); gnome_vfs_monitor_cancel(monitor_handle); + cheese_pipeline_finalize(); cheese_effects_widget_finalize(); cheese_window_finalize(); cheese_thumbnails_finalize(); @@ -81,33 +77,39 @@ g_mkdir_with_parents(path, 0775); g_print("creating new directory: %s\n", path); } + path = cheese_fileutil_get_video_path(); + uri = gnome_vfs_uri_new(path); + + if (!gnome_vfs_uri_exists(uri)) { + gnome_vfs_make_directory_for_uri(uri, 0775); + g_mkdir_with_parents(path, 0775); + g_print("creating new directory: %s\n", path); + } cheese_window_init(); cheese_effects_widget_init(); - PipelinePhoto = PIPELINE(pipeline_new()); - pipeline_create(PipelinePhoto); - pipeline_set_play(PipelinePhoto); - cheese_thumbnails_init(); - gtk_icon_view_set_model(GTK_ICON_VIEW(thumbnails.iconview), GTK_TREE_MODEL(thumbnails.store)); + gtk_icon_view_set_model(GTK_ICON_VIEW(thumbnails.iconview), + GTK_TREE_MODEL(thumbnails.store)); cheese_thumbnails_fill_thumbs(); gnome_vfs_monitor_add(&monitor_handle, cheese_fileutil_get_photo_path(), GNOME_VFS_MONITOR_DIRECTORY, - (GnomeVFSMonitorCallback)cheese_fileutil_photos_monitor_cb, NULL); + (GnomeVFSMonitorCallback)cheese_fileutil_monitor_cb, NULL); + gnome_vfs_monitor_add(&monitor_handle, cheese_fileutil_get_video_path(), + GNOME_VFS_MONITOR_DIRECTORY, + (GnomeVFSMonitorCallback)cheese_fileutil_monitor_cb, NULL); + + gtk_widget_show_all(cheese_window.window); + + cheese_pipeline_init(); + cheese_pipeline_set_play(); - g_signal_connect(G_OBJECT(cheese_window.window), "destroy", - G_CALLBACK(on_cheese_window_close_cb), NULL); - g_signal_connect(G_OBJECT(cheese_window.widgets.take_picture), "clicked", - G_CALLBACK(pipeline_button_clicked), PipelinePhoto); g_signal_connect(cheese_window.widgets.screen, "expose-event", - G_CALLBACK(cheese_window_expose_cb), PipelinePhoto); - g_signal_connect(G_OBJECT(cheese_window.widgets.button_effects), "clicked", - G_CALLBACK(cheese_window_change_effect), PipelinePhoto); + G_CALLBACK(cheese_window_expose_cb), NULL); - gtk_widget_show_all(cheese_window.window); gtk_main(); return EXIT_SUCCESS; diff -Nru /tmp/OyXMDwAdGt/cheese-0.1.4/src/cheese-cairo-custom.c /tmp/N37mQaXamu/cheese-0.2.0/src/cheese-cairo-custom.c --- /tmp/OyXMDwAdGt/cheese-0.1.4/src/cheese-cairo-custom.c 2007-07-16 00:52:41.000000000 +0200 +++ /tmp/N37mQaXamu/cheese-0.2.0/src/cheese-cairo-custom.c 2007-08-02 20:38:18.000000000 +0200 @@ -14,8 +14,7 @@ * 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. + * along with this program. If not, see . */ #include "cheese-cairo-custom.h" diff -Nru /tmp/OyXMDwAdGt/cheese-0.1.4/src/cheese-cairo-custom.h /tmp/N37mQaXamu/cheese-0.2.0/src/cheese-cairo-custom.h --- /tmp/OyXMDwAdGt/cheese-0.1.4/src/cheese-cairo-custom.h 2007-07-08 13:17:02.000000000 +0200 +++ /tmp/N37mQaXamu/cheese-0.2.0/src/cheese-cairo-custom.h 2007-08-02 20:38:16.000000000 +0200 @@ -14,8 +14,7 @@ * 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. + * along with this program. If not, see . */ #ifndef __CHEESE_CAIRO_CUSTOM_H__ diff -Nru /tmp/OyXMDwAdGt/cheese-0.1.4/src/cheese-effects-widget.c /tmp/N37mQaXamu/cheese-0.2.0/src/cheese-effects-widget.c --- /tmp/OyXMDwAdGt/cheese-0.1.4/src/cheese-effects-widget.c 2007-07-30 11:58:22.000000000 +0200 +++ /tmp/N37mQaXamu/cheese-0.2.0/src/cheese-effects-widget.c 2007-08-09 16:02:47.000000000 +0200 @@ -14,8 +14,7 @@ * 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. + * along with this program. If not, see . */ #include "cheese-config.h" @@ -148,6 +147,13 @@ return effect; } +void +cheese_effects_widget_remove_all_effects() { + int i; + for (i = 0; i < MAX_EFFECTS; i++) + g_array_index(effects_widget.effects, gsteffects, i).selected = FALSE; +} + static void paint (GtkWidget *widget, GdkEventExpose *eev, gpointer self) { diff -Nru /tmp/OyXMDwAdGt/cheese-0.1.4/src/cheese-effects-widget.h /tmp/N37mQaXamu/cheese-0.2.0/src/cheese-effects-widget.h --- /tmp/OyXMDwAdGt/cheese-0.1.4/src/cheese-effects-widget.h 2007-07-30 11:58:33.000000000 +0200 +++ /tmp/N37mQaXamu/cheese-0.2.0/src/cheese-effects-widget.h 2007-08-09 16:02:05.000000000 +0200 @@ -14,8 +14,7 @@ * 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. + * along with this program. If not, see . */ #ifndef __CHEESE_EFFECTS_WIDGET_H__ @@ -23,6 +22,7 @@ void cheese_effects_widget_init(); void cheese_effects_widget_finalize(); +void cheese_effects_widget_remove_all_effects(); gchar *cheese_effects_get_selection(); #endif /* __CHEESE_EFFECTS_WIDGET_H__ */ diff -Nru /tmp/OyXMDwAdGt/cheese-0.1.4/src/cheese-fileutil.c /tmp/N37mQaXamu/cheese-0.2.0/src/cheese-fileutil.c --- /tmp/OyXMDwAdGt/cheese-0.1.4/src/cheese-fileutil.c 2007-08-02 12:10:43.000000000 +0200 +++ /tmp/N37mQaXamu/cheese-0.2.0/src/cheese-fileutil.c 2007-08-15 18:55:52.000000000 +0200 @@ -14,8 +14,7 @@ * 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. + * along with this program. If not, see . */ #include @@ -39,8 +38,8 @@ //FIXME: check for real path // maybe ~/cheese or on the desktop.. //g_get_home_dir() - //gchar *path = g_strdup_printf("%s/%s", getenv("PWD"), SAVE_FOLDER_DEFAULT); - gchar *path = g_strdup_printf("%s/.gnome2/cheese/%s", g_get_home_dir(), SAVE_FOLDER_DEFAULT); + //gchar *path = g_strdup_printf("%s/%s", getenv("PWD"), PHOTO_FOLDER_DEFAULT); + gchar *path = g_strdup_printf("%s/.gnome2/cheese/%s", g_get_home_dir(), PHOTO_FOLDER_DEFAULT); return path; } @@ -57,8 +56,43 @@ return filename; } +gchar * +cheese_fileutil_get_video_path() { + //FIXME: check for real path + // maybe ~/cheese or on the desktop.. + //g_get_home_dir() + //gchar *path = g_strdup_printf("%s/%s", getenv("PWD"), VIDEO_FOLDER_DEFAULT); + gchar *path = g_strdup_printf("%s/.gnome2/cheese/%s", g_get_home_dir(), VIDEO_FOLDER_DEFAULT); + return path; +} + +gchar * +cheese_fileutil_get_video_filename() { + gchar *filename; + int i; + GnomeVFSURI *uri; + + i = 1; + filename = g_strdup_printf("%s%s0%d%s", cheese_fileutil_get_video_path(), VIDEO_NAME_DEFAULT, i, VIDEO_NAME_SUFFIX_DEFAULT); + + uri = gnome_vfs_uri_new(filename); + + while (gnome_vfs_uri_exists(uri)) { + i++; + if (i < 10) + filename = g_strdup_printf("%s%s0%d%s", cheese_fileutil_get_video_path(), VIDEO_NAME_DEFAULT, i, VIDEO_NAME_SUFFIX_DEFAULT); + else + filename = g_strdup_printf("%s%s%d%s", cheese_fileutil_get_video_path(), VIDEO_NAME_DEFAULT, i, VIDEO_NAME_SUFFIX_DEFAULT); + g_free(uri); + uri = gnome_vfs_uri_new(filename); + } + g_free(uri); + + return filename; +} + void -cheese_fileutil_photos_monitor_cb(GnomeVFSMonitorHandle *monitor_handle, const gchar *monitor_uri, const gchar *info_uri, GnomeVFSMonitorEventType event_type) +cheese_fileutil_monitor_cb(GnomeVFSMonitorHandle *monitor_handle, const gchar *monitor_uri, const gchar *info_uri, GnomeVFSMonitorEventType event_type) { gchar *filename = gnome_vfs_get_local_path_from_uri(info_uri); gboolean is_dir; @@ -68,13 +102,15 @@ if (!is_dir) { switch (event_type) { case GNOME_VFS_MONITOR_EVENT_DELETED: - cheese_thumbnails_remove_photo(filename); + cheese_thumbnails_remove_item(filename); break; // in case if we need to check if a file changed //case GNOME_VFS_MONITOR_EVENT_CHANGED: case GNOME_VFS_MONITOR_EVENT_CREATED: - //g_message("new file found: %s\n", filename); - cheese_thumbnails_append_photo(filename); + if (!g_str_has_suffix(filename, VIDEO_NAME_SUFFIX_DEFAULT)) { + g_message("new file found: %s\n", filename); + cheese_thumbnails_append_item(filename); + } break; default: break; diff -Nru /tmp/OyXMDwAdGt/cheese-0.1.4/src/cheese-fileutil.h /tmp/N37mQaXamu/cheese-0.2.0/src/cheese-fileutil.h --- /tmp/OyXMDwAdGt/cheese-0.1.4/src/cheese-fileutil.h 2007-07-30 12:19:02.000000000 +0200 +++ /tmp/N37mQaXamu/cheese-0.2.0/src/cheese-fileutil.h 2007-08-13 14:42:22.000000000 +0200 @@ -14,8 +14,7 @@ * 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. + * along with this program. If not, see . */ #ifndef __CHEESE_FILE_UTIL_H__ @@ -25,6 +24,8 @@ void cheese_fileutil_finalize(); gchar *cheese_fileutil_get_photo_path(void); gchar *cheese_fileutil_get_photo_filename(int); -void cheese_fileutil_photos_monitor_cb(GnomeVFSMonitorHandle *, const gchar *, const gchar *, GnomeVFSMonitorEventType); +gchar *cheese_fileutil_get_video_path(void); +gchar *cheese_fileutil_get_video_filename(void); +void cheese_fileutil_monitor_cb(GnomeVFSMonitorHandle *, const gchar *, const gchar *, GnomeVFSMonitorEventType); #endif /* __CHEESE_FILE_UTIL_H__ */ diff -Nru /tmp/OyXMDwAdGt/cheese-0.1.4/src/cheese.h /tmp/N37mQaXamu/cheese-0.2.0/src/cheese.h --- /tmp/OyXMDwAdGt/cheese-0.1.4/src/cheese.h 2007-08-02 12:13:02.000000000 +0200 +++ /tmp/N37mQaXamu/cheese-0.2.0/src/cheese.h 2007-08-13 00:01:10.000000000 +0200 @@ -14,8 +14,7 @@ * 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. + * along with this program. If not, see . */ #ifndef __CHEESE_H__ @@ -25,9 +24,12 @@ #include //FIXME: provide option to choose the folder -#define SAVE_FOLDER_DEFAULT "images/" +#define PHOTO_FOLDER_DEFAULT "images/" #define PHOTO_NAME_DEFAULT "Picture" #define PHOTO_NAME_SUFFIX_DEFAULT ".jpg" +#define VIDEO_FOLDER_DEFAULT "videos/" +#define VIDEO_NAME_DEFAULT "Video" +#define VIDEO_NAME_SUFFIX_DEFAULT ".ogg" void on_cheese_window_close_cb(GtkWidget *widget, gpointer data); diff -Nru /tmp/OyXMDwAdGt/cheese-0.1.4/src/cheese-pipeline.c /tmp/N37mQaXamu/cheese-0.2.0/src/cheese-pipeline.c --- /tmp/OyXMDwAdGt/cheese-0.1.4/src/cheese-pipeline.c 1970-01-01 01:00:00.000000000 +0100 +++ /tmp/N37mQaXamu/cheese-0.2.0/src/cheese-pipeline.c 2007-08-13 16:01:36.000000000 +0200 @@ -0,0 +1,329 @@ +/* + * Copyright (C) 2007 Copyright (C) 2007 daniel g. siegel + * + * Licensed under the GNU General Public License Version 2 + * + * 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, see . + */ + +#include "cheese-config.h" + +#include +#include +#include +#include +#include + +#include "cheese.h" +#include "cheese-window.h" +#include "cheese-pipeline.h" +#include "cheese-pipeline-photo.h" +#include "cheese-pipeline-video.h" +#include "cheese-effects-widget.h" + + +struct _cheese_pipeline +{ + PipelinePhoto *PhotoPipeline; + PipelineVideo *VideoPipeline; + + gboolean pipeline_is_photo; + gchar *source_pipeline; + GstElement *gst_test_pipeline; +}; + +struct _cheese_pipeline cheese_pipeline; + +// private methods +static gboolean cheese_pipeline_test_build(const gchar *pipeline_desc, GError **p_err); +static gboolean cheese_pipeline_test(const gchar *pipeline_desc); +//static void cheese_pipeline_error_dlg(const gchar *pipeline_desc, const gchar *error_message); +static void cheese_pipeline_error_print(const gchar *pipeline_desc, const gchar *error_message); + +void +cheese_pipeline_finalize() +{ + cheese_pipeline_set_stop(); + cheese_pipeline.pipeline_is_photo ? + g_object_unref(G_OBJECT(cheese_pipeline.PhotoPipeline)) : + g_object_unref(G_OBJECT(cheese_pipeline.VideoPipeline)); +} + +void +cheese_pipeline_init() +{ + cheese_pipeline.pipeline_is_photo = TRUE; + cheese_pipeline.PhotoPipeline = PIPELINE_PHOTO(cheese_pipeline_photo_new()); + cheese_pipeline_create(); + cheese_pipeline_set_play(); + cheese_window_expose_cb(cheese_window.widgets.screen, NULL, NULL); +} + +void +cheese_pipeline_set_play() +{ + cheese_pipeline.pipeline_is_photo ? + cheese_pipeline_photo_set_play(cheese_pipeline.PhotoPipeline) : + cheese_pipeline_video_set_play(cheese_pipeline.VideoPipeline); +} + +void +cheese_pipeline_set_stop() +{ + cheese_pipeline.pipeline_is_photo ? + cheese_pipeline_photo_set_stop(cheese_pipeline.PhotoPipeline) : + cheese_pipeline_video_set_stop(cheese_pipeline.VideoPipeline); +} + +void +cheese_pipeline_button_clicked(GtkWidget *widget) +{ + if (cheese_pipeline.pipeline_is_photo) + cheese_pipeline_photo_button_clicked(widget, cheese_pipeline.PhotoPipeline); + else + cheese_pipeline_video_button_clicked(widget, cheese_pipeline.VideoPipeline); +} + +GstElement * +cheese_pipeline_get_ximagesink() +{ + return cheese_pipeline.pipeline_is_photo ? + cheese_pipeline_photo_get_ximagesink(cheese_pipeline.PhotoPipeline) : + cheese_pipeline_video_get_ximagesink(cheese_pipeline.VideoPipeline); +} + +GstElement * +cheese_pipeline_get_fakesink() +{ + return cheese_pipeline.pipeline_is_photo ? + cheese_pipeline_photo_get_fakesink(cheese_pipeline.PhotoPipeline) : + cheese_pipeline_video_get_fakesink(cheese_pipeline.VideoPipeline); +} + +GstElement * +cheese_pipeline_get_pipeline() +{ + return cheese_pipeline.pipeline_is_photo ? + cheese_pipeline_photo_get_pipeline(cheese_pipeline.PhotoPipeline) : + cheese_pipeline_video_get_pipeline(cheese_pipeline.VideoPipeline); +} + +void +cheese_pipeline_change_effect() +{ + gchar *effect = cheese_effects_get_selection(); + cheese_pipeline.pipeline_is_photo ? + cheese_pipeline_photo_change_effect(effect, cheese_pipeline.PhotoPipeline) : + cheese_pipeline_video_change_effect(effect, cheese_pipeline.VideoPipeline); +} + +gboolean +cheese_pipeline_pipeline_is_photo() +{ + return cheese_pipeline.pipeline_is_photo; +} + +void +cheese_pipeline_change_pipeline_type() +{ + cheese_effects_widget_remove_all_effects(); + if (cheese_pipeline.pipeline_is_photo) { + g_print("changing to video-mode\n"); + + cheese_pipeline_set_stop(); + g_object_unref(G_OBJECT(cheese_pipeline.PhotoPipeline)); + + cheese_pipeline.pipeline_is_photo = FALSE; + cheese_pipeline.VideoPipeline = PIPELINE_VIDEO(cheese_pipeline_video_new()); + cheese_pipeline_video_create(cheese_pipeline.source_pipeline, cheese_pipeline.VideoPipeline); + cheese_pipeline_set_play(); + } else { + g_print("changing to photo-mode\n"); + + cheese_pipeline_set_stop(); + g_object_unref(G_OBJECT(cheese_pipeline.VideoPipeline)); + + cheese_pipeline.pipeline_is_photo = TRUE; + cheese_pipeline.PhotoPipeline = PIPELINE_PHOTO(cheese_pipeline_photo_new()); + cheese_pipeline_photo_create(cheese_pipeline.source_pipeline, cheese_pipeline.PhotoPipeline); + cheese_pipeline_set_play(); + } +} + +void +cheese_pipeline_create() { + + g_message("Probing the webcam, please ignore the following, not applicabable tries"); + if (cheese_pipeline_test("v4l2src ! fakesink")) { + cheese_pipeline.source_pipeline = "v4l2src"; + } else if (cheese_pipeline_test("v4lsrc ! video/x-raw-rgb,width=640,height=480 ! fakesink")) { + cheese_pipeline.source_pipeline = "v4lsrc ! video/x-raw-rgb,width=640,height=480"; + } else if (cheese_pipeline_test("v4lsrc ! video/x-raw-yuv,width=640,height=480 ! fakesink")) { + cheese_pipeline.source_pipeline = "v4lsrc ! video/x-raw-yuv,width=640,height=480"; + } else if (cheese_pipeline_test("v4lsrc ! video/x-raw-rgb,width=320,height=240 ! fakesink")) { + cheese_pipeline.source_pipeline = "v4lsrc ! video/x-raw-rgb,width=320,height=240"; + } else if (cheese_pipeline_test("v4lsrc ! video/x-raw-rgb,width=1280,height=960 ! fakesink")) { + cheese_pipeline.source_pipeline = "v4lsrc ! video/x-raw-rgb,width=1280,height=960"; + } else if (cheese_pipeline_test("v4lsrc ! video/x-raw-rgb,width=160,height=120 ! fakesink")) { + cheese_pipeline.source_pipeline = "v4lsrc ! video/x-raw-rgb,width=160,height=120"; + } else if (cheese_pipeline_test("v4lsrc ! fakesink")) { + cheese_pipeline.source_pipeline = "v4lsrc"; + } else { + GtkWidget *dialog; + + dialog = gtk_message_dialog_new(GTK_WINDOW(cheese_window.window), + GTK_DIALOG_DESTROY_WITH_PARENT, + GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE, + _("Unable to find a webcam, SORRY!")); + + gtk_dialog_run(GTK_DIALOG (dialog)); + gtk_widget_destroy(dialog); + cheese_pipeline.source_pipeline = "videotestsrc"; + } + + g_print("using source: %s\n", cheese_pipeline.source_pipeline); + + cheese_pipeline_photo_create(cheese_pipeline.source_pipeline, cheese_pipeline.PhotoPipeline); +} + +/* + * shamelessly Stolen from gnome-media: + * pipeline-tests.c + * Copyright (C) 2002 Jan Schmidt + * Copyright (C) 2005 Tim-Philipp Müller + * + * 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. + */ + +static gboolean +cheese_pipeline_test_build(const gchar *pipeline_desc, GError **p_err) { + gboolean return_val = FALSE; + + g_assert (p_err != NULL); + + if (pipeline_desc) { + cheese_pipeline.gst_test_pipeline = gst_parse_launch(pipeline_desc, p_err); + + if (*p_err == NULL && cheese_pipeline.gst_test_pipeline != NULL) { + return_val = TRUE; + } + } + + return return_val; +} + +static gboolean +cheese_pipeline_test(const gchar *pipeline_desc) { + GstStateChangeReturn ret; + GstMessage *msg; + GError *err = NULL; + GstBus *bus; + + + /* Build the pipeline */ + if (!cheese_pipeline_test_build(pipeline_desc, &err)) { + /* Show the error pipeline */ + //cheese_pipeline_error_dlg(pipeline_desc, (err) ? err->message : NULL); + cheese_pipeline_error_print(pipeline_desc, (err) ? err->message : NULL); + if (err) + g_error_free(err); + return FALSE; + } + + /* Start the pipeline and wait for max. 3 seconds for it to start up */ + gst_element_set_state(cheese_pipeline.gst_test_pipeline, GST_STATE_PLAYING); + ret = gst_element_get_state(cheese_pipeline.gst_test_pipeline, NULL, NULL, 3 * GST_SECOND); + + /* Check if any error messages were posted on the bus */ + bus = gst_element_get_bus(cheese_pipeline.gst_test_pipeline); + msg = gst_bus_poll(bus, GST_MESSAGE_ERROR, 0); + gst_object_unref(bus); + + if (cheese_pipeline.gst_test_pipeline) { + gst_element_set_state (cheese_pipeline.gst_test_pipeline, GST_STATE_NULL); + gst_object_unref (cheese_pipeline.gst_test_pipeline); + cheese_pipeline.gst_test_pipeline = NULL; + } + + if (msg != NULL) { + gchar *dbg = NULL; + + gst_message_parse_error(msg, &err, &dbg); + gst_message_unref(msg); + + g_message("Error running pipeline '%s': %s [%s]", pipeline_desc, + (err) ? err->message : "(null error)", + (dbg) ? dbg : "no additional debugging details"); + //cheese_pipeline_error_dlg(pipeline_desc, err->message); + cheese_pipeline_error_print(pipeline_desc, err->message); + g_error_free (err); + g_free (dbg); + return FALSE; + } else if (ret != GST_STATE_CHANGE_SUCCESS) { + //cheese_pipeline_error_dlg(pipeline_desc, NULL); + cheese_pipeline_error_print(pipeline_desc, NULL); + return FALSE; + } else { + //works + return TRUE; + } + return FALSE; +} + +/* +static void +cheese_pipeline_error_dlg(const gchar *pipeline_desc, const gchar *error_message) { + gchar *errstr; + + if (error_message) { + errstr = g_strdup_printf("[%s]: %s", pipeline_desc, error_message); + } else { + errstr = g_strdup_printf(("Failed to construct test pipeline for '%s'"), + pipeline_desc); + } + + GtkWidget *dialog; + + dialog = gtk_message_dialog_new(GTK_WINDOW(cheese_window.window), + GTK_DIALOG_DESTROY_WITH_PARENT, + GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE, + "SORRY, but Cheese has failed to set up you webcam with %s:\n\n%s", + g_strsplit(pipeline_desc, " !", 0)[0], errstr); + + gtk_dialog_run(GTK_DIALOG (dialog)); + gtk_widget_destroy(dialog); + + g_free(errstr); +} +*/ + +static void +cheese_pipeline_error_print(const gchar *pipeline_desc, const gchar *error_message) { + gchar *errstr; + + if (error_message) { + errstr = g_strdup_printf("[%s]: %s", pipeline_desc, error_message); + } else { + errstr = g_strdup_printf(("Failed to construct test pipeline for '%s'"), + pipeline_desc); + } + + g_message("test pipeline for %s failed:\n%s", + g_strsplit(pipeline_desc, " !", 0)[0], errstr); + + g_free(errstr); +} diff -Nru /tmp/OyXMDwAdGt/cheese-0.1.4/src/cheese-pipeline.h /tmp/N37mQaXamu/cheese-0.2.0/src/cheese-pipeline.h --- /tmp/OyXMDwAdGt/cheese-0.1.4/src/cheese-pipeline.h 1970-01-01 01:00:00.000000000 +0100 +++ /tmp/N37mQaXamu/cheese-0.2.0/src/cheese-pipeline.h 2007-08-12 22:40:52.000000000 +0200 @@ -0,0 +1,38 @@ +/* + * Copyright (C) 2007 Copyright (C) 2007 daniel g. siegel + * + * Licensed under the GNU General Public License Version 2 + * + * 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, see . + */ + +#ifndef __CHEESE_PIPELINE_H__ +#define __CHEESE_PIPELINE_H__ + +#include + +void cheese_pipeline_finalize(void); +void cheese_pipeline_init(void); +void cheese_pipeline_set_play(void); +void cheese_pipeline_set_stop(void); +void cheese_pipeline_button_clicked(GtkWidget *widget); +void cheese_pipeline_change_effect(void); +void cheese_pipeline_change_pipeline_type(); +void cheese_pipeline_create(void); +GstElement *cheese_pipeline_get_ximagesink(void); +GstElement *cheese_pipeline_get_fakesink(void); +GstElement *cheese_pipeline_get_pipeline(void); +gboolean cheese_pipeline_pipeline_is_photo(void); + +#endif /* __CHEESE_PIPELINE_H__ */ diff -Nru /tmp/OyXMDwAdGt/cheese-0.1.4/src/cheese-pipeline-photo.c /tmp/N37mQaXamu/cheese-0.2.0/src/cheese-pipeline-photo.c --- /tmp/OyXMDwAdGt/cheese-0.1.4/src/cheese-pipeline-photo.c 2007-08-02 10:56:31.000000000 +0200 +++ /tmp/N37mQaXamu/cheese-0.2.0/src/cheese-pipeline-photo.c 2007-08-10 12:23:02.000000000 +0200 @@ -14,8 +14,7 @@ * 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. + * along with this program. If not, see . */ #include "cheese-config.h" @@ -32,13 +31,13 @@ #include "cheese-effects-widget.h" #include "cheese-fileutil.h" -G_DEFINE_TYPE (Pipeline, pipeline, G_TYPE_OBJECT) +G_DEFINE_TYPE(PipelinePhoto, cheese_pipeline_photo, G_TYPE_OBJECT) static GObjectClass *parent_class = NULL; -typedef struct _PipelinePrivate PipelinePrivate; +typedef struct _PipelinePhotoPrivate PipelinePhotoPrivate; -struct _PipelinePrivate +struct _PipelinePhotoPrivate { int picture_requested; @@ -49,169 +48,130 @@ GstElement *caps; GstElement *effect; GstCaps *filter; - GstElement *gst_test_pipeline; }; -#define PIPELINE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), PIPELINE_TYPE, PipelinePrivate)) +#define PIPELINE_PHOTO_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), PIPELINE_PHOTO_TYPE, PipelinePhotoPrivate)) // private methods -static gboolean cb_have_data(GstElement *element, GstBuffer *buffer, GstPad *pad, gpointer user_data); -static void pipeline_lens_open(Pipeline *self); -static void create_photo(unsigned char *data, int width, int height); -static gboolean build_test_pipeline(const gchar *pipeline_desc, GError **p_err, Pipeline *self); -static gboolean test_pipeline(const gchar *pipeline_desc, Pipeline *self); -//static void pipeline_error_dlg(const gchar *pipeline_desc, const gchar *error_message, Pipeline *self); -static void pipeline_error_print(const gchar *pipeline_desc, const gchar *error_message, Pipeline *self); +static gboolean cheese_pipeline_photo_have_data_cb(GstElement *element, GstBuffer *buffer, GstPad *pad, gpointer user_data); +static void cheese_pipeline_photo_lens_open(PipelinePhoto *self); +static void cheese_pipeline_photo_create_photo(unsigned char *data, int width, int height); void -pipeline_finalize(GObject *object) +cheese_pipeline_photo_finalize(GObject *object) { - PipelinePrivate *priv = PIPELINE_GET_PRIVATE(object); + PipelinePhotoPrivate *priv = PIPELINE_PHOTO_GET_PRIVATE(object); gst_caps_unref(priv->filter); (*parent_class->finalize) (object); return; } -Pipeline * -pipeline_new(void) +PipelinePhoto * +cheese_pipeline_photo_new(void) { - Pipeline *self = g_object_new(PIPELINE_TYPE, NULL); + PipelinePhoto *self = g_object_new(PIPELINE_PHOTO_TYPE, NULL); return self; } void -pipeline_class_init(PipelineClass *klass) +cheese_pipeline_photo_class_init(PipelinePhotoClass *klass) { GObjectClass *object_class; parent_class = g_type_class_peek_parent(klass); object_class = (GObjectClass*) klass; - object_class->finalize = pipeline_finalize; - g_type_class_add_private(klass, sizeof(PipelinePrivate)); + object_class->finalize = cheese_pipeline_photo_finalize; + g_type_class_add_private(klass, sizeof(PipelinePhotoPrivate)); - G_OBJECT_CLASS(klass)->finalize = (GObjectFinalizeFunc) pipeline_finalize; + G_OBJECT_CLASS(klass)->finalize = (GObjectFinalizeFunc) cheese_pipeline_photo_finalize; } void -pipeline_init(Pipeline *self) +cheese_pipeline_photo_init(PipelinePhoto *self) { } void -pipeline_set_play(Pipeline *self) +cheese_pipeline_photo_set_play(PipelinePhoto *self) { gst_element_set_state(self->pipeline, GST_STATE_PLAYING); return; } void -pipeline_set_stop(Pipeline *self) +cheese_pipeline_photo_set_stop(PipelinePhoto *self) { gst_element_set_state(self->pipeline, GST_STATE_NULL); return; } void -pipeline_button_clicked(GtkWidget *widget, gpointer self) +cheese_pipeline_photo_button_clicked(GtkWidget *widget, gpointer self) { - pipeline_lens_open(self); + cheese_pipeline_photo_lens_open(self); return; } static void -pipeline_lens_open(Pipeline *self) +cheese_pipeline_photo_lens_open(PipelinePhoto *self) { - PipelinePrivate *priv = PIPELINE_GET_PRIVATE(self); + PipelinePhotoPrivate *priv = PIPELINE_PHOTO_GET_PRIVATE(self); priv->picture_requested = TRUE; return; } GstElement * -pipeline_get_ximagesink(Pipeline *self) +cheese_pipeline_photo_get_ximagesink(PipelinePhoto *self) { return self->ximagesink; } GstElement * -pipeline_get_fakesink(Pipeline *self) +cheese_pipeline_photo_get_fakesink(PipelinePhoto *self) { return self->fakesink; } GstElement * -pipeline_get_pipeline(Pipeline *self) +cheese_pipeline_photo_get_pipeline(PipelinePhoto *self) { return self->pipeline; } void -pipeline_change_effect(gpointer self) +cheese_pipeline_photo_change_effect(gchar *effect, gpointer self) { - PipelinePrivate *priv = PIPELINE_GET_PRIVATE(self); - gchar *effect = cheese_effects_get_selection(); + PipelinePhotoPrivate *priv = PIPELINE_PHOTO_GET_PRIVATE(self); if (effect != NULL) { - pipeline_set_stop(PIPELINE(self)); + cheese_pipeline_photo_set_stop(PIPELINE_PHOTO(self)); gst_element_unlink(priv->ffmpeg1, priv->effect); gst_element_unlink(priv->effect, priv->ffmpeg2); - gst_bin_remove(GST_BIN(PIPELINE(self)->pipeline), priv->effect); + gst_bin_remove(GST_BIN(PIPELINE_PHOTO(self)->pipeline), priv->effect); g_print("changing to effect: %s\n", effect); priv->effect = gst_parse_bin_from_description(effect, TRUE, NULL); - gst_bin_add(GST_BIN(PIPELINE(self)->pipeline), priv->effect); + gst_bin_add(GST_BIN(PIPELINE_PHOTO(self)->pipeline), priv->effect); gst_element_link(priv->ffmpeg1, priv->effect); gst_element_link(priv->effect, priv->ffmpeg2); - pipeline_set_play(self); + cheese_pipeline_photo_set_play(self); } } void -pipeline_create(Pipeline *self) { +cheese_pipeline_photo_create(gchar *source_pipeline, PipelinePhoto *self) { + PipelinePhotoPrivate *priv = PIPELINE_PHOTO_GET_PRIVATE(self); gboolean link_ok; - gchar *source_pipeline; - - PipelinePrivate *priv = PIPELINE_GET_PRIVATE(self); - - if (test_pipeline("v4l2src ! fakesink", self)) { - //source_pipeline = g_strdup_printf ("%s", v4l2src); - source_pipeline = "v4l2src"; - } else if (test_pipeline("v4lsrc ! video/x-raw-rgb,width=640,height=480 ! fakesink", self)) { - source_pipeline = "v4lsrc ! ffmpegcolorspace ! video/x-raw-rgb,width=640,height=480"; - } else if (test_pipeline("v4lsrc ! video/x-raw-rgb,width=320,height=240 ! fakesink", self)) { - source_pipeline = "v4lsrc ! ffmpegcolorspace ! video/x-raw-rgb,width=320,height=240"; - } else if (test_pipeline("v4lsrc ! video/x-raw-rgb,width=1280,height=960 ! fakesink", self)) { - source_pipeline = "v4lsrc ! ffmpegcolorspace ! video/x-raw-rgb,width=1280,height=960"; - } else if (test_pipeline("v4lsrc ! video/x-raw-rgb,width=160,height=120 ! fakesink", self)) { - source_pipeline = "v4lsrc ! ffmpegcolorspace ! video/x-raw-rgb,width=160,height=120"; - } else if (test_pipeline("v4lsrc ! fakesink", self)) { - source_pipeline = "v4lsrc"; - } else { - GtkWidget *dialog; - - dialog = gtk_message_dialog_new(GTK_WINDOW(cheese_window.window), - GTK_DIALOG_DESTROY_WITH_PARENT, - GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE, - _("Unable to find a webcam, SORRY!")); - - gtk_dialog_run(GTK_DIALOG (dialog)); - gtk_widget_destroy(dialog); - source_pipeline = "videotestsrc"; - } - - g_print("using source: %s\n", source_pipeline); self->pipeline = gst_pipeline_new("pipeline"); priv->source = gst_parse_bin_from_description(source_pipeline, TRUE, NULL); - //priv->source = gst_element_factory_make(source_pipeline, source_pipeline); - // if you want to test without having a webcam - // priv->source = gst_element_factory_make("videotestsrc", "v4l2src"); gst_bin_add(GST_BIN(self->pipeline), priv->source); priv->ffmpeg1 = gst_element_factory_make("ffmpegcolorspace", "ffmpegcolorspace"); @@ -243,7 +203,7 @@ /* * the pipeline looks like this: - * gconfvideosrc -> ffmpegcsp + * v4l(2)src -> ffmpegcsp * '-> videoscale * '-> ffmpegcsp -> effects -> ffmpegcsp * -------------------------------------------------------' @@ -284,13 +244,13 @@ g_object_set(G_OBJECT(self->fakesink), "signal-handoffs", TRUE, NULL); g_signal_connect(G_OBJECT(self->fakesink), "handoff", - G_CALLBACK(cb_have_data), self); + G_CALLBACK(cheese_pipeline_photo_have_data_cb), self); } static gboolean -cb_have_data(GstElement *element, GstBuffer *buffer, GstPad *pad, gpointer self) +cheese_pipeline_photo_have_data_cb(GstElement *element, GstBuffer *buffer, GstPad *pad, gpointer self) { - PipelinePrivate *priv = PIPELINE_GET_PRIVATE(self); + PipelinePhotoPrivate *priv = PIPELINE_PHOTO_GET_PRIVATE(self); unsigned char *data_photo = (unsigned char *)GST_BUFFER_DATA(buffer); if (priv->picture_requested) { @@ -304,14 +264,14 @@ gst_structure_get_int(structure, "width", &width); gst_structure_get_int(structure, "height", &height); - create_photo(data_photo, width, height); + cheese_pipeline_photo_create_photo(data_photo, width, height); priv->picture_requested = FALSE; } return TRUE; } void -create_photo(unsigned char *data, int width, int height) +cheese_pipeline_photo_create_photo(unsigned char *data, int width, int height) { int i; gchar *filename = NULL; @@ -339,136 +299,3 @@ g_print("Photo saved: %s (%dx%d)\n", filename, width, height); } - -/* - * shamelessly Stolen from gnome-media: - * pipeline-tests.c - * Copyright (C) 2002 Jan Schmidt - * Copyright (C) 2005 Tim-Philipp Müller - * - * 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. - */ - -static gboolean -build_test_pipeline(const gchar *pipeline_desc, GError **p_err, Pipeline *self) { - PipelinePrivate *priv = PIPELINE_GET_PRIVATE(self); - gboolean return_val = FALSE; - - g_assert (p_err != NULL); - - if (pipeline_desc) { - priv->gst_test_pipeline = gst_parse_launch(pipeline_desc, p_err); - - if (*p_err == NULL && priv->gst_test_pipeline != NULL) { - return_val = TRUE; - } - } - - return return_val; -} - -static gboolean -test_pipeline(const gchar *pipeline_desc, Pipeline *self) { - PipelinePrivate *priv = PIPELINE_GET_PRIVATE(self); - GstStateChangeReturn ret; - GstMessage *msg; - GError *err = NULL; - GstBus *bus; - - - /* Build the pipeline */ - if (!build_test_pipeline (pipeline_desc, &err, self)) { - /* Show the error pipeline */ - //pipeline_error_dlg(pipeline_desc, (err) ? err->message : NULL, self); - pipeline_error_print(pipeline_desc, (err) ? err->message : NULL, self); - if (err) - g_error_free(err); - return FALSE; - } - - /* Start the pipeline and wait for max. 3 seconds for it to start up */ - gst_element_set_state(priv->gst_test_pipeline, GST_STATE_PLAYING); - ret = gst_element_get_state(priv->gst_test_pipeline, NULL, NULL, 3 * GST_SECOND); - - /* Check if any error messages were posted on the bus */ - bus = gst_element_get_bus(priv->gst_test_pipeline); - msg = gst_bus_poll(bus, GST_MESSAGE_ERROR, 0); - gst_object_unref(bus); - - if (priv->gst_test_pipeline) { - gst_element_set_state (priv->gst_test_pipeline, GST_STATE_NULL); - gst_object_unref (priv->gst_test_pipeline); - priv->gst_test_pipeline = NULL; - } - - if (msg != NULL) { - gchar *dbg = NULL; - - gst_message_parse_error(msg, &err, &dbg); - gst_message_unref(msg); - - g_message("Error running pipeline '%s': %s [%s]", pipeline_desc, - (err) ? err->message : "(null error)", - (dbg) ? dbg : "no additional debugging details"); - //pipeline_error_dlg(pipeline_desc, err->message, self); - pipeline_error_print(pipeline_desc, err->message, self); - g_error_free (err); - g_free (dbg); - return FALSE; - } else if (ret != GST_STATE_CHANGE_SUCCESS) { - //pipeline_error_dlg(pipeline_desc, NULL, self); - pipeline_error_print(pipeline_desc, NULL, self); - return FALSE; - } else { - //works - return TRUE; - } - return FALSE; -} - -/* -static void -pipeline_error_dlg(const gchar *pipeline_desc, const gchar *error_message, Pipeline *self) { - gchar *errstr; - - if (error_message) { - errstr = g_strdup_printf("[%s]: %s", pipeline_desc, error_message); - } else { - errstr = g_strdup_printf(("Failed to construct test pipeline for '%s'"), - pipeline_desc); - } - - GtkWidget *dialog; - - dialog = gtk_message_dialog_new(GTK_WINDOW(cheese_window.window), - GTK_DIALOG_DESTROY_WITH_PARENT, - GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE, - "SORRY, but Cheese has failed to set up you webcam with %s:\n\n%s", - g_strsplit(pipeline_desc, " !", 0)[0], errstr); - - gtk_dialog_run(GTK_DIALOG (dialog)); - gtk_widget_destroy(dialog); - - g_free(errstr); -} -*/ - -static void -pipeline_error_print(const gchar *pipeline_desc, const gchar *error_message, Pipeline *self) { - gchar *errstr; - - if (error_message) { - errstr = g_strdup_printf("[%s]: %s", pipeline_desc, error_message); - } else { - errstr = g_strdup_printf(("Failed to construct test pipeline for '%s'"), - pipeline_desc); - } - - g_message("test pipeline for %s failed:\n%s", - g_strsplit(pipeline_desc, " !", 0)[0], errstr); - - g_free(errstr); -} diff -Nru /tmp/OyXMDwAdGt/cheese-0.1.4/src/cheese-pipeline-photo.h /tmp/N37mQaXamu/cheese-0.2.0/src/cheese-pipeline-photo.h --- /tmp/OyXMDwAdGt/cheese-0.1.4/src/cheese-pipeline-photo.h 2007-07-08 13:17:23.000000000 +0200 +++ /tmp/N37mQaXamu/cheese-0.2.0/src/cheese-pipeline-photo.h 2007-08-09 15:34:58.000000000 +0200 @@ -14,8 +14,7 @@ * 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. + * along with this program. If not, see . */ #ifndef __CHEESE_PIPELINE_PHOTO_H__ @@ -26,17 +25,17 @@ G_BEGIN_DECLS -#define PIPELINE_TYPE (pipeline_get_type ()) -#define PIPELINE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), PIPELINE_TYPE, Pipeline)) -#define PIPELINE_CLASS(vtable) (G_TYPE_CHECK_CLASS_CAST ((vtable), PIPELINE_TYPE, PipelineClass)) -#define IS_PIPELINE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), PIPELINE_TYPE)) -#define IS_PIPELINE_CLASS(vtable) (G_TYPE_CHECK_CLASS_TYPE ((vtable), PIPELINE_TYPE)) -#define PIPELINE_GET_CLASS(inst) (G_TYPE_INSTANCE_GET_CLASS ((inst), PIPELINE_TYPE, PipelineClass)) +#define PIPELINE_PHOTO_TYPE (cheese_pipeline_photo_get_type()) +#define PIPELINE_PHOTO(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), PIPELINE_PHOTO_TYPE, PipelinePhoto)) +#define PIPELINE_PHOTO_CLASS(vtable) (G_TYPE_CHECK_CLASS_CAST ((vtable), PIPELINE_PHOTO_TYPE, PipelinePhotoClass)) +#define IS_PIPELINE_PHOTO(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), PIPELINE_PHOTO_TYPE)) +#define IS_PIPELINE_PHOTO_CLASS(vtable) (G_TYPE_CHECK_CLASS_TYPE ((vtable), PIPELINE_PHOTO_TYPE)) +#define PIPELINE_PHOTO_GET_CLASS(inst) (G_TYPE_INSTANCE_GET_CLASS ((inst), PIPELINE_PHOTO_TYPE, PipelinePhotoClass)) -typedef struct _Pipeline Pipeline; -typedef struct _PipelineClass PipelineClass; +typedef struct _PipelinePhoto PipelinePhoto; +typedef struct _PipelinePhotoClass PipelinePhotoClass; -struct _Pipeline +struct _PipelinePhoto { GObject parent; @@ -45,21 +44,21 @@ GstElement *fakesink; }; -struct _PipelineClass +struct _PipelinePhotoClass { GObjectClass parent_class; }; -Pipeline* pipeline_new (void); -GType pipeline_get_type (void); -void pipeline_set_play (Pipeline *self); -void pipeline_set_stop (Pipeline *self); -void pipeline_create (Pipeline *self); -GstElement *pipeline_get_ximagesink (Pipeline *self); -GstElement *pipeline_get_fakesink (Pipeline *self); -GstElement *pipeline_get_pipeline (Pipeline *self); -void pipeline_button_clicked (GtkWidget *widget, gpointer self); -void pipeline_change_effect (gpointer self); +PipelinePhoto* cheese_pipeline_photo_new (void); +GType cheese_pipeline_photo_get_type (void); +void cheese_pipeline_photo_set_play (PipelinePhoto *self); +void cheese_pipeline_photo_set_stop (PipelinePhoto *self); +void cheese_pipeline_photo_create (gchar *source_pipeline, PipelinePhoto *self); +GstElement *cheese_pipeline_photo_get_ximagesink (PipelinePhoto *self); +GstElement *cheese_pipeline_photo_get_fakesink (PipelinePhoto *self); +GstElement *cheese_pipeline_photo_get_pipeline (PipelinePhoto *self); +void cheese_pipeline_photo_button_clicked (GtkWidget *widget, gpointer self); +void cheese_pipeline_photo_change_effect (gchar *effect, gpointer self); G_END_DECLS diff -Nru /tmp/OyXMDwAdGt/cheese-0.1.4/src/cheese-pipeline-video.c /tmp/N37mQaXamu/cheese-0.2.0/src/cheese-pipeline-video.c --- /tmp/OyXMDwAdGt/cheese-0.1.4/src/cheese-pipeline-video.c 1970-01-01 01:00:00.000000000 +0100 +++ /tmp/N37mQaXamu/cheese-0.2.0/src/cheese-pipeline-video.c 2007-08-15 18:56:13.000000000 +0200 @@ -0,0 +1,425 @@ +/* + * Copyright (C) 2007 Copyright (C) 2007 daniel g. siegel + * + * Licensed under the GNU General Public License Version 2 + * + * 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, see . + */ + +#include "cheese-config.h" + +#include +#include +#include +#include +#include + +#include "cheese.h" +#include "cheese-window.h" +#include "cheese-pipeline-video.h" +#include "cheese-effects-widget.h" +#include "cheese-fileutil.h" +#include "cheese-thumbnails.h" + +G_DEFINE_TYPE(PipelineVideo, cheese_pipeline_video, G_TYPE_OBJECT) + +static GObjectClass *parent_class = NULL; + +typedef struct _PipelineVideoPrivate PipelineVideoPrivate; + +struct _PipelineVideoPrivate +{ + gboolean lens_open; + gchar *source_pipeline; + gchar *used_effect; + gchar *filename; + + GstElement *pipeline, *pipeline_rec; + GstElement *ximagesink, *ximagesink_rec; + GstElement *fakesink, *fakesink_rec; + + GstElement *source; + GstElement *ffmpeg1, *ffmpeg2, *ffmpeg3; + GstElement *ffmpeg1_rec, *ffmpeg2_rec, *ffmpeg3_rec, *ffmpeg4_rec; + GstElement *tee, *tee_rec; + GstElement *queuedisplay, *queuedisplay_rec, *queuemovie; + GstElement *effect, *effect_rec; + GstElement *audiosrc; + GstElement *audioconvert; + GstElement *vorbisenc; + GstElement *filesink; + GstElement *oggmux; + GstElement *theoraenc; + GstElement *videorate; + GstElement *videoscale; + GstCaps *filter, *filter_rec; +}; + +#define PIPELINE_VIDEO_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), PIPELINE_VIDEO_TYPE, PipelineVideoPrivate)) + +// private methods +static void cheese_pipeline_video_create_display(PipelineVideo *self); +static void cheese_pipeline_video_create_rec(PipelineVideo *self); + +void +cheese_pipeline_video_finalize(GObject *object) +{ + PipelineVideoPrivate *priv = PIPELINE_VIDEO_GET_PRIVATE(object); + gst_caps_unref(priv->filter); + + (*parent_class->finalize) (object); + return; +} + +PipelineVideo * +cheese_pipeline_video_new(void) +{ + PipelineVideo *self = g_object_new(PIPELINE_VIDEO_TYPE, NULL); + + return self; +} + +void +cheese_pipeline_video_class_init(PipelineVideoClass *klass) +{ + GObjectClass *object_class; + + parent_class = g_type_class_peek_parent(klass); + object_class = (GObjectClass*) klass; + + object_class->finalize = cheese_pipeline_video_finalize; + g_type_class_add_private(klass, sizeof(PipelineVideoPrivate)); + + G_OBJECT_CLASS(klass)->finalize = (GObjectFinalizeFunc) cheese_pipeline_video_finalize; +} + +void +cheese_pipeline_video_init(PipelineVideo *self) +{ +} + +void +cheese_pipeline_video_set_play(PipelineVideo *self) +{ + PipelineVideoPrivate *priv = PIPELINE_VIDEO_GET_PRIVATE(self); + if (priv->lens_open) + gst_element_set_state(priv->pipeline_rec, GST_STATE_PLAYING); + else + gst_element_set_state(priv->pipeline, GST_STATE_PLAYING); + return; +} + +void +cheese_pipeline_video_set_stop(PipelineVideo *self) +{ + PipelineVideoPrivate *priv = PIPELINE_VIDEO_GET_PRIVATE(self); + if (priv->lens_open) + gst_element_set_state(priv->pipeline_rec, GST_STATE_NULL); + else + gst_element_set_state(priv->pipeline, GST_STATE_NULL); + return; +} + +void +cheese_pipeline_video_button_clicked(GtkWidget *widget, gpointer self) +{ + PipelineVideoPrivate *priv = PIPELINE_VIDEO_GET_PRIVATE(self); + + cheese_pipeline_video_set_stop(self); + priv->lens_open = !priv->lens_open; + if (priv->lens_open) { + gtk_widget_set_sensitive(GTK_WIDGET(cheese_window.widgets.button_effects), FALSE); + gtk_label_set_text_with_mnemonic(GTK_LABEL(cheese_window.widgets.label_take_photo), _("_Stop recording")); + gtk_label_set_use_markup(GTK_LABEL(cheese_window.widgets.label_take_photo), TRUE); + gtk_image_set_from_stock(GTK_IMAGE(cheese_window.widgets.image_take_photo), GTK_STOCK_MEDIA_STOP, GTK_ICON_SIZE_BUTTON); + } else { + gtk_widget_set_sensitive(GTK_WIDGET(cheese_window.widgets.button_effects), TRUE); + gtk_label_set_text_with_mnemonic(GTK_LABEL(cheese_window.widgets.label_take_photo), _("_Start recording")); + gtk_label_set_use_markup(GTK_LABEL(cheese_window.widgets.label_take_photo), TRUE); + gtk_image_set_from_stock(GTK_IMAGE(cheese_window.widgets.image_take_photo), GTK_STOCK_MEDIA_RECORD, GTK_ICON_SIZE_BUTTON); + + g_print("Video saved: %s\n", priv->filename); + cheese_thumbnails_append_item(priv->filename); + priv->filename = cheese_fileutil_get_video_filename(); + + g_object_set(priv->filesink, "location", priv->filename, NULL); + + // we have to create a new instance of oggmux, as + // it is waiting for an EOS signal otherwise + gst_element_unlink(priv->theoraenc, priv->oggmux); + gst_element_unlink(priv->vorbisenc, priv->oggmux); + gst_element_unlink(priv->oggmux, priv->filesink); + + gst_bin_remove(GST_BIN(priv->pipeline_rec), priv->oggmux); + priv->oggmux = gst_element_factory_make("oggmux", "oggmux"); + gst_bin_add(GST_BIN(priv->pipeline_rec), priv->oggmux); + + gst_element_link(priv->theoraenc, priv->oggmux); + gst_element_link(priv->vorbisenc, priv->oggmux); + gst_element_link(priv->oggmux, priv->filesink); + } + + // gst_element_set_state(priv->pipeline_rec, GST_STATE_READY); + cheese_pipeline_video_set_play(self); + return; +} + +GstElement * +cheese_pipeline_video_get_ximagesink(PipelineVideo *self) +{ + PipelineVideoPrivate *priv = PIPELINE_VIDEO_GET_PRIVATE(self); + return priv->ximagesink; +} + +GstElement * +cheese_pipeline_video_get_fakesink(PipelineVideo *self) +{ + PipelineVideoPrivate *priv = PIPELINE_VIDEO_GET_PRIVATE(self); + return priv->fakesink; +} + +GstElement * +cheese_pipeline_video_get_pipeline(PipelineVideo *self) +{ + PipelineVideoPrivate *priv = PIPELINE_VIDEO_GET_PRIVATE(self); + return priv->lens_open ? priv->pipeline_rec : priv->pipeline; +} + +void +cheese_pipeline_video_change_effect(gchar *effect, gpointer self) +{ + PipelineVideoPrivate *priv = PIPELINE_VIDEO_GET_PRIVATE(self); + + if (effect != NULL) { + cheese_pipeline_video_set_stop(PIPELINE_VIDEO(self)); + + gst_element_unlink(priv->ffmpeg1, priv->effect); + gst_element_unlink(priv->effect, priv->ffmpeg2); + gst_bin_remove(GST_BIN(priv->pipeline), priv->effect); + + gst_element_unlink(priv->ffmpeg1_rec, priv->effect_rec); + gst_element_unlink(priv->effect_rec, priv->ffmpeg2_rec); + gst_bin_remove(GST_BIN(priv->pipeline_rec), priv->effect_rec); + + g_print("changing to effect: %s\n", effect); + priv->effect = gst_parse_bin_from_description(effect, TRUE, NULL); + priv->effect_rec = gst_parse_bin_from_description(effect, TRUE, NULL); + + gst_bin_add(GST_BIN(priv->pipeline_rec), priv->effect_rec); + gst_bin_add(GST_BIN(priv->pipeline), priv->effect); + + gst_element_link(priv->ffmpeg1, priv->effect); + gst_element_link(priv->effect, priv->ffmpeg2); + + gst_element_link(priv->ffmpeg1_rec, priv->effect_rec); + gst_element_link(priv->effect_rec, priv->ffmpeg2_rec); + + cheese_pipeline_video_set_play(self); + priv->used_effect = effect; + } +} + +void +cheese_pipeline_video_create(gchar *source_pipeline, PipelineVideo *self) { + + PipelineVideoPrivate *priv = PIPELINE_VIDEO_GET_PRIVATE(self); + priv->source_pipeline = source_pipeline; + cheese_pipeline_video_create_display(self); + cheese_pipeline_video_create_rec(self); +} + +static void +cheese_pipeline_video_create_display(PipelineVideo *self) { + + PipelineVideoPrivate *priv = PIPELINE_VIDEO_GET_PRIVATE(self); + gboolean link_ok; + + priv->pipeline = gst_pipeline_new("pipeline"); + priv->source = gst_parse_bin_from_description(priv->source_pipeline, TRUE, NULL); + gst_bin_add(GST_BIN(priv->pipeline), priv->source); + + priv->ffmpeg1 = gst_element_factory_make("ffmpegcolorspace", "ffmpegcolorspace"); + gst_bin_add(GST_BIN(priv->pipeline), priv->ffmpeg1); + + priv->effect = gst_element_factory_make("identity", "effect"); + gst_bin_add(GST_BIN(priv->pipeline), priv->effect); + + priv->ffmpeg2 = gst_element_factory_make("ffmpegcolorspace", "ffmpegcolorspace2"); + gst_bin_add(GST_BIN(priv->pipeline), priv->ffmpeg2); + + priv->ffmpeg3 = gst_element_factory_make("ffmpegcolorspace", "ffmpegcolorspace3"); + gst_bin_add(GST_BIN(priv->pipeline), priv->ffmpeg3); + + priv->tee = gst_element_factory_make("tee", "tee"); + gst_bin_add(GST_BIN(priv->pipeline), priv->tee); + + priv->queuedisplay = gst_element_factory_make("queue", "queuedisplay"); + gst_bin_add(GST_BIN(priv->pipeline), priv->queuedisplay); + + priv->ximagesink = gst_element_factory_make("gconfvideosink", "gconfvideosink"); + gst_bin_add(GST_BIN(priv->pipeline), priv->ximagesink); + + gst_element_link(priv->source, priv->ffmpeg1); + gst_element_link(priv->ffmpeg1, priv->effect); + gst_element_link(priv->effect, priv->ffmpeg2); + + // theoraenc needs raw yuv data... + priv->filter = gst_caps_new_simple("video/x-raw-yuv", NULL); + link_ok = gst_element_link_filtered(priv->ffmpeg2, priv->tee, priv->filter); + if (!link_ok) { + g_warning("Failed to link elements!"); + } + + gst_element_link(priv->tee, priv->queuedisplay); + gst_element_link(priv->queuedisplay, priv->ffmpeg3); + + gst_element_link(priv->ffmpeg3, priv->ximagesink); +} + +static void +cheese_pipeline_video_create_rec(PipelineVideo *self) { + + PipelineVideoPrivate *priv = PIPELINE_VIDEO_GET_PRIVATE(self); + gboolean link_ok; + + priv->pipeline_rec = gst_pipeline_new("pipeline"); + priv->source = gst_parse_bin_from_description(priv->source_pipeline, TRUE, NULL); + gst_bin_add(GST_BIN(priv->pipeline_rec), priv->source); + + priv->ffmpeg1_rec = gst_element_factory_make("ffmpegcolorspace", "ffmpegcolorspace_rec"); + gst_bin_add(GST_BIN(priv->pipeline_rec), priv->ffmpeg1_rec); + + priv->effect_rec = gst_element_factory_make("identity", "effect_rec"); + gst_bin_add(GST_BIN(priv->pipeline_rec), priv->effect_rec); + + priv->ffmpeg2_rec = gst_element_factory_make("ffmpegcolorspace", "ffmpegcolorspace2_rec"); + gst_bin_add(GST_BIN(priv->pipeline_rec), priv->ffmpeg2_rec); + + priv->ffmpeg3_rec = gst_element_factory_make("ffmpegcolorspace", "ffmpegcolorspace3_rec"); + gst_bin_add(GST_BIN(priv->pipeline_rec), priv->ffmpeg3_rec); + + priv->ffmpeg4_rec = gst_element_factory_make("ffmpegcolorspace", "ffmpegcolorspace4_rec"); + gst_bin_add(GST_BIN(priv->pipeline_rec), priv->ffmpeg4_rec); + + priv->tee_rec = gst_element_factory_make("tee", "tee_rec"); + gst_bin_add(GST_BIN(priv->pipeline_rec), priv->tee_rec); + + priv->videorate = gst_element_factory_make("videorate", "videorate"); + gst_bin_add(GST_BIN(priv->pipeline_rec), priv->videorate); + + priv->videoscale = gst_element_factory_make("videoscale", "videoscale"); + gst_bin_add(GST_BIN(priv->pipeline_rec), priv->videoscale); + + priv->queuedisplay_rec = gst_element_factory_make("queue", "queuedisplay_rec"); + gst_bin_add(GST_BIN(priv->pipeline_rec), priv->queuedisplay_rec); + + priv->ximagesink_rec = gst_element_factory_make("gconfvideosink", "gconfvideosink_rec"); + gst_bin_add(GST_BIN(priv->pipeline_rec), priv->ximagesink_rec); + + /* + * the pipeline looks like this: + * v4l(2)src -> ffmpegcsp + * '-> videoscale + * '-> ffmpegcsp -> effects -> ffmpegcsp + * -------------------------------------------------------' + * '--> tee (filtered) -> queue-> ffmpegcsp -> gconfvideosink + * | + * theoraenc + * | + * queuemovie -------, + * |--------> mux -> filesink + * | + * vorbisenc + * audioconvert--^ + * gconfaudiosrc---^ + */ + + gst_element_link(priv->source, priv->videoscale); + priv->filter_rec = gst_caps_new_simple("video/x-raw-yuv", + "width", G_TYPE_INT, 320, + "height", G_TYPE_INT, 240, NULL); + link_ok = gst_element_link_filtered(priv->videoscale, priv->videorate, priv->filter_rec); + if (!link_ok) { + g_warning("Failed to link elements!"); + } + priv->filter_rec = gst_caps_new_simple("video/x-raw-yuv", "framerate", GST_TYPE_FRACTION, 15, 1, NULL); + link_ok = gst_element_link_filtered(priv->videorate, priv->ffmpeg1_rec, priv->filter_rec); + if (!link_ok) { + g_warning("Failed to link elements!"); + } + gst_element_link(priv->ffmpeg1_rec, priv->effect_rec); + gst_element_link(priv->effect_rec, priv->ffmpeg2_rec); + //gst_element_link(priv->ffmpeg2, priv->tee); + + gst_element_link(priv->ffmpeg2_rec, priv->tee_rec); + + gst_element_link(priv->tee_rec, priv->queuedisplay_rec); + gst_element_link(priv->queuedisplay_rec, priv->ffmpeg3_rec); + + gst_element_link(priv->ffmpeg3_rec, priv->ximagesink_rec); + + priv->audiosrc = gst_element_factory_make("gconfaudiosrc", "gconfaudiosrc"); + gst_bin_add(GST_BIN(priv->pipeline_rec), priv->audiosrc); + + priv->audioconvert = gst_element_factory_make("audioconvert", "audioconvert"); + gst_bin_add(GST_BIN(priv->pipeline_rec), priv->audioconvert); + + priv->vorbisenc = gst_element_factory_make("vorbisenc", "vorbisenc"); + gst_bin_add(GST_BIN(priv->pipeline_rec), priv->vorbisenc); + + priv->oggmux = gst_element_factory_make("oggmux", "oggmux"); + gst_bin_add(GST_BIN(priv->pipeline_rec), priv->oggmux); + + priv->filesink = gst_element_factory_make("filesink", "filesink"); + gst_bin_add(GST_BIN(priv->pipeline_rec), priv->filesink); + priv->filename = cheese_fileutil_get_video_filename(); + g_object_set(priv->filesink, "location", priv->filename, NULL); + + priv->theoraenc = gst_element_factory_make("theoraenc", "theoraenc"); + gst_bin_add(GST_BIN(priv->pipeline_rec), priv->theoraenc); + + priv->queuemovie = gst_element_factory_make("queue", "queuemovie"); + gst_bin_add(GST_BIN(priv->pipeline_rec), priv->queuemovie); + + //gst_element_link(priv->tee_rec, priv->ffmpeg4_rec); + gst_element_link(priv->tee_rec, priv->queuemovie); + gst_element_link(priv->queuemovie, priv->ffmpeg4_rec); + + // theoraenc needs raw yuv data... + priv->filter_rec = gst_caps_new_simple("video/x-raw-yuv", NULL); + //priv->filter_rec = gst_caps_new_simple("video/x-raw-yuv", "framerate", GST_TYPE_FRACTION, 15, 1, NULL); + link_ok = gst_element_link_filtered(priv->ffmpeg4_rec, priv->theoraenc, priv->filter_rec); + if (!link_ok) { + g_warning("Failed to link elements!"); + } + //gst_element_link(priv->queuemovie, priv->theoraenc); + + gst_element_link(priv->theoraenc, priv->oggmux); + + priv->filter = gst_caps_new_simple("audio/x-raw-int", + "channels", G_TYPE_INT, 2, + "rate", G_TYPE_INT, 32000, + "depth", G_TYPE_INT, 16, NULL); + + gst_element_link(priv->audiosrc, priv->audioconvert); + //link_ok = gst_element_link_filtered(priv->audiosrc, priv->audioconvert, priv->filter); + //link_ok = gst_element_link_filtered(priv->audioconvert, priv->vorbisenc, priv->filter); + //if (!link_ok) { + // g_warning("Failed to link elements!"); + //} + + gst_element_link(priv->audioconvert, priv->vorbisenc); + gst_element_link(priv->vorbisenc, priv->oggmux); + gst_element_link(priv->oggmux, priv->filesink); +} diff -Nru /tmp/OyXMDwAdGt/cheese-0.1.4/src/cheese-pipeline-video.h /tmp/N37mQaXamu/cheese-0.2.0/src/cheese-pipeline-video.h --- /tmp/OyXMDwAdGt/cheese-0.1.4/src/cheese-pipeline-video.h 1970-01-01 01:00:00.000000000 +0100 +++ /tmp/N37mQaXamu/cheese-0.2.0/src/cheese-pipeline-video.h 2007-08-12 16:12:12.000000000 +0200 @@ -0,0 +1,62 @@ +/* + * Copyright (C) 2007 Copyright (C) 2007 daniel g. siegel + * + * Licensed under the GNU General Public License Version 2 + * + * 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, see . + */ + +#ifndef __CHEESE_PIPELINE_VIDEO_H__ +#define __CHEESE_PIPELINE_VIDEO_H__ +#include +#include +#include + +G_BEGIN_DECLS + +#define PIPELINE_VIDEO_TYPE (cheese_pipeline_video_get_type()) +#define PIPELINE_VIDEO(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), PIPELINE_VIDEO_TYPE, PipelineVideo)) +#define PIPELINE_VIDEO_CLASS(vtable) (G_TYPE_CHECK_CLASS_CAST ((vtable), PIPELINE_VIDEO_TYPE, PipelineVideoClass)) +#define IS_PIPELINE_VIDEO(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), PIPELINE_VIDEO_TYPE)) +#define IS_PIPELINE_VIDEO_CLASS(vtable) (G_TYPE_CHECK_CLASS_TYPE ((vtable), PIPELINE_VIDEO_TYPE)) +#define PIPELINE_VIDEO_GET_CLASS(inst) (G_TYPE_INSTANCE_GET_CLASS ((inst), PIPELINE_VIDEO_TYPE, PipelineVideoClass)) + +typedef struct _PipelineVideo PipelineVideo; +typedef struct _PipelineVideoClass PipelineVideoClass; + +struct _PipelineVideo +{ + GObject parent; +}; + +struct _PipelineVideoClass +{ + GObjectClass parent_class; +}; + +PipelineVideo* cheese_pipeline_video_new (void); +GType cheese_pipeline_video_get_type (void); +void cheese_pipeline_video_set_play (PipelineVideo *self); +void cheese_pipeline_video_set_stop (PipelineVideo *self); +void cheese_pipeline_video_create (gchar *source_pipeline, PipelineVideo *self); +GstElement *cheese_pipeline_video_get_ximagesink (PipelineVideo *self); +GstElement *cheese_pipeline_video_get_fakesink (PipelineVideo *self); +GstElement *cheese_pipeline_video_get_pipeline (PipelineVideo *self); +void cheese_pipeline_video_button_clicked (GtkWidget *widget, gpointer self); +void cheese_pipeline_video_change_effect (gchar *effect, gpointer self); + +G_END_DECLS + + +#endif /* __CHEESE_PIPELINE_VIDEO_H__ */ diff -Nru /tmp/OyXMDwAdGt/cheese-0.1.4/src/cheese-thumbnails.c /tmp/N37mQaXamu/cheese-0.2.0/src/cheese-thumbnails.c --- /tmp/OyXMDwAdGt/cheese-0.1.4/src/cheese-thumbnails.c 2007-08-02 12:10:29.000000000 +0200 +++ /tmp/N37mQaXamu/cheese-0.2.0/src/cheese-thumbnails.c 2007-08-15 18:57:46.000000000 +0200 @@ -14,13 +14,13 @@ * 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. + * along with this program. If not, see . */ #include #include #include +#include #include "cheese.h" #include "cheese-fileutil.h" @@ -44,12 +44,50 @@ } void -cheese_thumbnails_append_photo(gchar *filename) { - GdkPixbuf *pixbuf = gdk_pixbuf_new_from_file_at_size(filename, THUMB_WIDTH, THUMB_HEIGHT, NULL); +cheese_thumbnails_append_item(gchar *filename) { + GdkPixbuf *pixbuf = NULL; + + if (g_str_has_suffix(filename, PHOTO_NAME_SUFFIX_DEFAULT)) { + pixbuf = gdk_pixbuf_new_from_file_at_size(filename, THUMB_WIDTH, THUMB_HEIGHT, NULL); + + } else if (g_str_has_suffix(filename, VIDEO_NAME_SUFFIX_DEFAULT)) { + GnomeThumbnailFactory *factory; + GnomeVFSFileInfo *file_info; + gchar *uri; + gchar *thumb_loc; + + file_info = gnome_vfs_file_info_new(); + uri = g_filename_to_uri(filename, NULL, NULL); + if (!uri || + (gnome_vfs_get_file_info(uri, file_info, + GNOME_VFS_FILE_INFO_DEFAULT) != GNOME_VFS_OK)) { + g_printerr ("Invalid filename\n"); + return; + } + + factory = gnome_thumbnail_factory_new(GNOME_THUMBNAIL_SIZE_NORMAL); + + thumb_loc = gnome_thumbnail_factory_lookup(factory, uri, file_info->mtime); + //g_print("file: %s, time: %s, icon: %s\n", uri, ctime(&file_info->mtime), thumb_loc); + + if (!thumb_loc) { + g_print("creating thumbnail for %s\n", filename); + pixbuf = gnome_thumbnail_factory_generate_thumbnail(factory, uri, "video/x-theora+ogg"); + if (!pixbuf) { + g_warning("could not load %s\n", filename); + return; + } + gnome_thumbnail_factory_save_thumbnail(factory, pixbuf, uri, file_info->mtime); + } else { + pixbuf = gdk_pixbuf_new_from_file(thumb_loc, NULL); + } + } + if (!pixbuf) { g_warning("could not load %s\n", filename); return; } + g_print("appending %s to thumbnail row\n", filename); gtk_list_store_append(thumbnails.store, &thumbnails.iter); gtk_list_store_set(thumbnails.store, &thumbnails.iter, PIXBUF_COLUMN, pixbuf, URL_COLUMN, filename, -1); @@ -61,7 +99,7 @@ } void -cheese_thumbnails_remove_photo(gchar *filename) { +cheese_thumbnails_remove_item(gchar *filename) { gchar *path; GtkTreeIter i; @@ -93,10 +131,27 @@ while ((name = g_dir_read_name(dir))) { if (name[0] != '.') { - if (!g_str_has_suffix (name, PHOTO_NAME_SUFFIX_DEFAULT)) + if (!g_str_has_suffix(name, PHOTO_NAME_SUFFIX_DEFAULT)) continue; + path = g_build_filename(cheese_fileutil_get_photo_path(), name, NULL); + is_dir = g_file_test(path, G_FILE_TEST_IS_DIR); + + if (!is_dir) + filelist = g_list_prepend(filelist, g_strdup(path)); + g_free(path); + } + } + dir = g_dir_open(cheese_fileutil_get_video_path(), 0, NULL); + if (!dir) + return; + + while ((name = g_dir_read_name(dir))) { + if (name[0] != '.') { + if (!g_str_has_suffix(name, VIDEO_NAME_SUFFIX_DEFAULT)) + continue; + path = g_build_filename(cheese_fileutil_get_video_path(), name, NULL); is_dir = g_file_test(path, G_FILE_TEST_IS_DIR); if (!is_dir) @@ -105,7 +160,7 @@ } } filelist = g_list_sort (filelist, (GCompareFunc)strcmp); - g_list_foreach (filelist, (GFunc)cheese_thumbnails_append_photo, NULL); + g_list_foreach (filelist, (GFunc)cheese_thumbnails_append_item, NULL); g_free(dir); } diff -Nru /tmp/OyXMDwAdGt/cheese-0.1.4/src/cheese-thumbnails.h /tmp/N37mQaXamu/cheese-0.2.0/src/cheese-thumbnails.h --- /tmp/OyXMDwAdGt/cheese-0.1.4/src/cheese-thumbnails.h 2007-08-02 12:13:04.000000000 +0200 +++ /tmp/N37mQaXamu/cheese-0.2.0/src/cheese-thumbnails.h 2007-08-13 14:26:09.000000000 +0200 @@ -14,8 +14,7 @@ * 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. + * along with this program. If not, see . */ #ifndef __CHEESE_THUMBNAILS_H__ @@ -27,8 +26,8 @@ void cheese_thumbnails_init(); void cheese_thumbnails_finalize(); void cheese_thumbnails_fill_thumbs(); -void cheese_thumbnails_append_photo(gchar *); -void cheese_thumbnails_remove_photo(gchar *); +void cheese_thumbnails_append_item(gchar *); +void cheese_thumbnails_remove_item(gchar *); struct _thumbnails { diff -Nru /tmp/OyXMDwAdGt/cheese-0.1.4/src/cheese-window.c /tmp/N37mQaXamu/cheese-0.2.0/src/cheese-window.c --- /tmp/OyXMDwAdGt/cheese-0.1.4/src/cheese-window.c 2007-07-30 11:55:35.000000000 +0200 +++ /tmp/N37mQaXamu/cheese-0.2.0/src/cheese-window.c 2007-08-14 11:51:56.000000000 +0200 @@ -14,8 +14,7 @@ * 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. + * along with this program. If not, see . */ #include @@ -29,7 +28,7 @@ #include "cheese-window.h" #include "cheese-thumbnails.h" #include "cheese-config.h" -#include "cheese-pipeline-photo.h" +#include "cheese-pipeline.h" #include "cheese-effects-widget.h" #define GLADE_FILE CHEESE_DATA_DIR"/cheese.glade" @@ -63,13 +62,13 @@ { if (gtk_notebook_get_current_page(GTK_NOTEBOOK(cheese_window.widgets.notebook)) == 1) { gtk_notebook_set_current_page (GTK_NOTEBOOK(cheese_window.widgets.notebook), 0); - gtk_label_set_text(GTK_LABEL(cheese_window.widgets.label_effects), _("Effects")); + gtk_label_set_text_with_mnemonic(GTK_LABEL(cheese_window.widgets.label_effects), _("_Effects")); gtk_widget_set_sensitive(cheese_window.widgets.take_picture, TRUE); - pipeline_change_effect(self); + cheese_pipeline_change_effect(); } else { gtk_notebook_set_current_page (GTK_NOTEBOOK(cheese_window.widgets.notebook), 1); - gtk_label_set_text(GTK_LABEL(cheese_window.widgets.label_effects), _("Back")); + gtk_label_set_text_with_mnemonic(GTK_LABEL(cheese_window.widgets.label_effects), _("_Back")); gtk_widget_set_sensitive(GTK_WIDGET(cheese_window.widgets.take_picture), FALSE); } } @@ -77,7 +76,8 @@ gboolean cheese_window_expose_cb(GtkWidget *widget, GdkEventExpose *event, gpointer data) { - GstElement *tmp = gst_bin_get_by_interface(GST_BIN(pipeline_get_pipeline(data)), GST_TYPE_X_OVERLAY); + GstElement *tmp = gst_bin_get_by_interface(GST_BIN(cheese_pipeline_get_pipeline()), + GST_TYPE_X_OVERLAY); gst_x_overlay_set_xwindow_id(GST_X_OVERLAY(tmp), GDK_WINDOW_XWINDOW(widget->window)); // this is for using x(v)imagesink natively: @@ -86,6 +86,35 @@ return FALSE; } +void +cheese_window_button_video_cb(GtkWidget *widget, gpointer self) +{ + gtk_widget_set_sensitive(GTK_WIDGET(cheese_window.widgets.button_photo), TRUE); + gtk_widget_set_sensitive(GTK_WIDGET(cheese_window.widgets.button_video), FALSE); + gtk_label_set_text_with_mnemonic(GTK_LABEL(cheese_window.widgets.label_take_photo), _("_Start recording")); + gtk_label_set_use_markup(GTK_LABEL(cheese_window.widgets.label_take_photo), TRUE); + cheese_pipeline_change_pipeline_type(); + cheese_window_expose_cb(cheese_window.widgets.screen, NULL, NULL); +} + +void +cheese_window_button_photo_cb(GtkWidget *widget, gpointer self) +{ + gtk_widget_set_sensitive(GTK_WIDGET(cheese_window.widgets.button_photo), FALSE); + gtk_widget_set_sensitive(GTK_WIDGET(cheese_window.widgets.button_video), TRUE); + gtk_label_set_text_with_mnemonic(GTK_LABEL(cheese_window.widgets.label_take_photo), _("_Take a photo")); + gtk_label_set_use_markup(GTK_LABEL(cheese_window.widgets.label_take_photo), TRUE); + cheese_pipeline_change_pipeline_type(); + cheese_window_expose_cb(cheese_window.widgets.screen, NULL, NULL); +} + +void +cheese_window_pipeline_button_clicked_cb(GtkWidget *widget, gpointer self) +{ + cheese_pipeline_button_clicked(widget); + cheese_window_expose_cb(cheese_window.widgets.screen, NULL, NULL); +} + static void create_window() { @@ -109,12 +138,18 @@ cheese_window.widgets.label_video = glade_xml_get_widget(cheese_window.gxml, "label_video"); cheese_window.widgets.label_take_photo = glade_xml_get_widget(cheese_window.gxml, "label_take_photo"); cheese_window.widgets.effects_widget = glade_xml_get_widget(cheese_window.gxml, "effects_screen"); + cheese_window.widgets.image_take_photo = glade_xml_get_widget(cheese_window.gxml, "image_take_photo"); thumbnails.iconview = glade_xml_get_widget(cheese_window.gxml, "previews"); gtk_widget_set_size_request(thumbnails.iconview, -1 , THUMB_HEIGHT + 20); gtk_widget_set_sensitive(GTK_WIDGET(cheese_window.widgets.button_photo), FALSE); - gtk_widget_set_sensitive(GTK_WIDGET(cheese_window.widgets.button_video), FALSE); + gtk_widget_set_sensitive(GTK_WIDGET(cheese_window.widgets.button_video), TRUE); + + g_signal_connect(G_OBJECT(cheese_window.widgets.button_photo), "clicked", + G_CALLBACK(cheese_window_button_photo_cb), NULL); + g_signal_connect(G_OBJECT(cheese_window.widgets.button_video), "clicked", + G_CALLBACK(cheese_window_button_video_cb), NULL); gtk_icon_view_set_pixbuf_column(GTK_ICON_VIEW(thumbnails.iconview), 0); gtk_icon_view_set_columns(GTK_ICON_VIEW(thumbnails.iconview), G_MAXINT); @@ -146,6 +181,12 @@ gtk_signal_connect(GTK_OBJECT(thumbnails.iconview), "item-activated", GTK_SIGNAL_FUNC(on_item_activated_cb), NULL); + g_signal_connect(G_OBJECT(cheese_window.window), "destroy", + G_CALLBACK(on_cheese_window_close_cb), NULL); + g_signal_connect(G_OBJECT(cheese_window.widgets.take_picture), "clicked", + G_CALLBACK(cheese_window_pipeline_button_clicked_cb), NULL); + g_signal_connect(G_OBJECT(cheese_window.widgets.button_effects), "clicked", + G_CALLBACK(cheese_window_change_effect), NULL); } static void on_about_cb (GtkWidget *p_widget, gpointer user_data) @@ -165,8 +206,7 @@ "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the " "GNU General Public License for more details.\n"), N_("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.") + "along with this program. If not, see .") }; char *license_trans; @@ -177,7 +217,7 @@ gtk_show_about_dialog (GTK_WINDOW(user_data), "version", CHEESE_VERSION, "copyright", "Copyright \xc2\xa9 2007\n daniel g. siegel ", - "comments", _("A cheesy program to take pictures from your webcam"), + "comments", _("A cheesy program to take pictures and videos from your webcam"), "authors", authors, "website", "http://live.gnome.org/Cheese", "logo-icon-name", "cheese", diff -Nru /tmp/OyXMDwAdGt/cheese-0.1.4/src/cheese-window.h /tmp/N37mQaXamu/cheese-0.2.0/src/cheese-window.h --- /tmp/OyXMDwAdGt/cheese-0.1.4/src/cheese-window.h 2007-07-30 11:52:28.000000000 +0200 +++ /tmp/N37mQaXamu/cheese-0.2.0/src/cheese-window.h 2007-08-12 23:04:33.000000000 +0200 @@ -14,8 +14,7 @@ * 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. + * along with this program. If not, see . */ #ifndef __CHEESE_WINDOW_H__ @@ -41,6 +40,7 @@ GtkWidget *file_menu; GtkWidget *help_menu; GtkWidget *effects_widget; + GtkWidget *image_take_photo; }; struct _cheese_window diff -Nru /tmp/OyXMDwAdGt/cheese-0.1.4/src/Makefile /tmp/N37mQaXamu/cheese-0.2.0/src/Makefile --- /tmp/OyXMDwAdGt/cheese-0.1.4/src/Makefile 2007-07-08 13:09:01.000000000 +0200 +++ /tmp/N37mQaXamu/cheese-0.2.0/src/Makefile 2007-08-13 13:54:39.000000000 +0200 @@ -4,12 +4,14 @@ include $(toc2.dirs.makefiles)/toc2-c.make SOURCES := cheese.c \ - cheese-pipeline-photo.c \ + cheese-cairo-custom.c \ + cheese-effects-widget.c \ cheese-fileutil.c \ + cheese-pipeline-photo.c \ + cheese-pipeline-video.c \ + cheese-pipeline.c \ cheese-thumbnails.c \ - cheese-window.c \ - cheese-cairo-custom.c \ - cheese-effects-widget.c + cheese-window.c print-var-%: @echo $*=$($*) @@ -33,8 +35,11 @@ GDK_CFLAGS := $(GDK_2_0_CFLAGS) GDK_LIBS := $(GDK_2_0_LIBS) -CFLAGS := $(call toc2.call.remove-dupes,-g -O2 -Wall -Werror $(DBUS_CFLAGS) $(GTK_CFLAGS) $(GLADE_CFLAGS) $(GSTREAMER_CFLAGS) $(GNOME_VFS_CFLAGS) $(GDK_CFLAGS)) -LDFLAGS := $(call toc2.call.remove-dupes,-lpthread $(DBUS_LIBS) $(GTK_LIBS) $(GLADE_LIBS) $(GSTREAMER_LIBS) $(GNOME_VFS_LIBS) $(GDK_LIBS)) +LIBGNOMEUI_CFLAGS := $(LIBGNOMEUI_2_0_CFLAGS) +LIBGNOMEUI_LIBS := $(LIBGNOMEUI_2_0_LIBS) + +CFLAGS := $(call toc2.call.remove-dupes,-g -O2 -Wall -Werror $(DBUS_CFLAGS) $(GTK_CFLAGS) $(GLADE_CFLAGS) $(GSTREAMER_CFLAGS) $(GNOME_VFS_CFLAGS) $(GDK_CFLAGS) $(LIBGNOMEUI_CFLAGS)) +LDFLAGS := $(call toc2.call.remove-dupes,-lpthread $(DBUS_LIBS) $(GTK_LIBS) $(GLADE_LIBS) $(GSTREAMER_LIBS) $(GNOME_VFS_LIBS) $(GDK_LIBS) $(LIBGNOMEUI_LIBS)) OBJS = $(SOURCES:%.c=%.o)