├── .gitignore ├── data ├── timer.ogg ├── kamerka.png ├── camera_click.ogg ├── kamerka.notifyrc ├── CMakeLists.txt ├── kamerka.desktop └── kamerka.1 ├── modules ├── FindLibAvUtil.cmake ├── FindLibAvCodec.cmake ├── FindLibAvFormat.cmake ├── FindLibV4L2.cmake └── FindLibV4LConvert.cmake ├── src ├── fonts │ └── fontawesome-webfont.ttf ├── settings.kcfgc ├── kamerka.qrc ├── CMakeLists.txt ├── settingsdialog.h ├── videowidget.h ├── mainwindow.h ├── main.cpp ├── imageeffect.h ├── capturethread.h ├── imageeffect.cpp ├── Button.qml ├── kamerka.kcfg ├── videowidget.cpp ├── settingsdialog.cpp ├── mainwindow.cpp └── capturethread.cpp ├── INSTALL ├── README ├── TODO ├── AUTHORS ├── CMakeLists.txt ├── po ├── CMakeLists.txt ├── kamerka.pot ├── zh_CN.po ├── zh_TW.po ├── pt.po ├── nl.po ├── es.po ├── sr.po ├── sr@latin.po ├── sr@ijekavian.po ├── cs.po ├── sr@ijekavianlatin.po ├── ru.po ├── de.po ├── uk.po └── pl.po ├── tools ├── extract-messages.sh └── gitlog2changelog.py └── COPYING /.gitignore: -------------------------------------------------------------------------------- 1 | CMakeLists.txt.user 2 | build 3 | -------------------------------------------------------------------------------- /data/timer.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dos1/kamerka/HEAD/data/timer.ogg -------------------------------------------------------------------------------- /data/kamerka.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dos1/kamerka/HEAD/data/kamerka.png -------------------------------------------------------------------------------- /data/camera_click.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dos1/kamerka/HEAD/data/camera_click.ogg -------------------------------------------------------------------------------- /modules/FindLibAvUtil.cmake: -------------------------------------------------------------------------------- 1 | include(FindPkgConfig) 2 | pkg_check_modules(LibAvUtil REQUIRED libavutil) 3 | -------------------------------------------------------------------------------- /modules/FindLibAvCodec.cmake: -------------------------------------------------------------------------------- 1 | include(FindPkgConfig) 2 | pkg_check_modules(LibAvCodec REQUIRED libavcodec) 3 | -------------------------------------------------------------------------------- /modules/FindLibAvFormat.cmake: -------------------------------------------------------------------------------- 1 | include(FindPkgConfig) 2 | pkg_check_modules(LibAvFormat REQUIRED libavformat) 3 | -------------------------------------------------------------------------------- /src/fonts/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dos1/kamerka/HEAD/src/fonts/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /src/settings.kcfgc: -------------------------------------------------------------------------------- 1 | # Code generation options for kconfig_compiler 2 | File=kamerka.kcfg 3 | ClassName=Settings 4 | Singleton=true 5 | Mutators=true 6 | -------------------------------------------------------------------------------- /data/kamerka.notifyrc: -------------------------------------------------------------------------------- 1 | [Global] 2 | Comment=Kamerka 3 | IconName=camera-web 4 | 5 | [Event/photoTaken] 6 | Name=Photo 7 | Name[pl]=Zdjęcie 8 | Comment=New photo has been taken 9 | Comment[pl]=Zostało zrobione nowe zdjęcie 10 | Action=Popup 11 | -------------------------------------------------------------------------------- /INSTALL: -------------------------------------------------------------------------------- 1 | Kamerka uses CMake build system. 2 | It is recommended to build in another directory than source - for instance, in "build" subdirectory. 3 | 4 | To build: 5 | 6 | mkdir build 7 | cd build 8 | cmake .. 9 | make 10 | 11 | 12 | To install: 13 | (sudo) make install 14 | -------------------------------------------------------------------------------- /src/kamerka.qrc: -------------------------------------------------------------------------------- 1 | 2 | 3 | kamerka.qml 4 | Button.qml 5 | fonts/fontawesome-webfont.ttf 6 | 7 | 8 | ../data/kamerka.png 9 | 10 | 11 | -------------------------------------------------------------------------------- /data/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | install(FILES kamerka.desktop DESTINATION ${XDG_APPS_INSTALL_DIR}) 2 | install(FILES camera_click.ogg timer.ogg DESTINATION "${DATA_INSTALL_DIR}/kamerka") 3 | install(FILES kamerka.notifyrc DESTINATION ${KNOTIFYRC_INSTALL_DIR}) 4 | install(FILES kamerka.png DESTINATION "share/pixmaps") 5 | install(FILES kamerka.1 DESTINATION "${MAN_INSTALL_DIR}/man1") 6 | -------------------------------------------------------------------------------- /README: -------------------------------------------------------------------------------- 1 | Kamerka - take photos using your webcam and shiny animated QML interface. 2 | 3 | Kamerka is a Qt5 app that uses KF5 libraries. It uses Video4Linux to get 4 | images from a webcam and is able to save photos. The interface is based 5 | on QML and uses its possibilities to show an easy-to-use animated UI. 6 | 7 | Note: 8 | You need to have QImageBlitz built with Qt5. Most distributions provide 9 | it only in Qt4 version. 10 | 11 | You can get it from svn repo: 12 | svn://anonsvn.kde.org/home/kde/trunk/kdesupport/qimageblitz 13 | -------------------------------------------------------------------------------- /TODO: -------------------------------------------------------------------------------- 1 | For 1.0: 2 | * investigate using phonon for getting video data 3 | * animated preview and some basic management of taken photos 4 | * maybe some moar effects 5 | * "About Kamerka" button (probably in configuration dialog) 6 | * moar configuration: 7 | * buttons in notifications (for instance to set Krita instead of GIMP) 8 | * allow using custom sounds 9 | * time of previews 10 | * image format 11 | * better object oriented application design 12 | 13 | For 1.x: 14 | * photo uploading to social services 15 | * moar effects 16 | * various fixes and user requests 17 | 18 | For 2.0: 19 | * video recording 20 | * and moar effects! 21 | -------------------------------------------------------------------------------- /AUTHORS: -------------------------------------------------------------------------------- 1 | * Sebastian Krzyszkowiak 2 | * Dejan Noveski 3 | 4 | v4l handling code was based on qtv4lcapture code from Özkan Pakdil 5 | http://qtv4lcapture.sourceforge.net/ 6 | 7 | Translations: 8 | * Czech: Pavel Fric 9 | * Dutch: Kenny Verstraete 10 | * German: Frank Schäfer 11 | * Polish: Sebastian Krzyszkowiak 12 | * Portuguese: Jurasampaio 13 | * Serbian: Mladen Pejaković 14 | * Spanish: Daniel Halens 15 | * Traditional Chinese: Max Lin 16 | * Simplified Chinese: zcj 17 | -------------------------------------------------------------------------------- /src/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | SET(kamerka_SRCS 2 | main.cpp 3 | mainwindow.cpp 4 | videowidget.cpp 5 | capturethread.cpp 6 | imageeffect.cpp 7 | kamerka.qml 8 | Button.qml 9 | settingsdialog.cpp 10 | kamerka.kcfg 11 | ) 12 | 13 | SET(kamerka_RCCS kamerka.qrc) 14 | 15 | SET(kamerka_KCFGCS settings.kcfgc) 16 | SET(kamerka_KCFGS kamerka.kcfg) 17 | 18 | qt5_add_resources(kamerka_RCC_SRCS ${kamerka_RCCS}) 19 | 20 | kconfig_add_kcfg_files(kamerka_SRCS ${kamerka_KCFGCS}) 21 | 22 | add_executable(kamerka ${kamerka_SRCS} ${kamerka_RCC_SRCS}) 23 | target_link_libraries(kamerka Qt5::Core Qt5::Gui Qt5::Script Qt5::Qml Qt5::Quick Qt5::QuickWidgets KF5::ConfigCore KF5::ConfigGui KF5::CoreAddons KF5::Declarative KF5::WidgetsAddons KF5::KIOFileWidgets KF5::I18n KF5::KDELibs4Support KF5::Notifications ${PHONON_LIBRARY} ${LIBV4L2_LIBRARY} ${LIBV4LCONVERT_LIBRARY} ${QIMAGEBLITZ_LIBRARIES}) 24 | 25 | install(TARGETS kamerka DESTINATION ${BIN_INSTALL_DIR}) 26 | install(FILES ${kamerka_KCFGS} DESTINATION ${KCFG_INSTALL_DIR}) 27 | -------------------------------------------------------------------------------- /modules/FindLibV4L2.cmake: -------------------------------------------------------------------------------- 1 | # cmake macro to test LibV4L2 2 | 3 | # Copyright (c) 2009, Jaroslav Reznik 4 | # 5 | # LIBV4L2_FOUND 6 | # LIBV4L2_INCLUDE_DIR 7 | # LIBV4L2_LIBRARY 8 | # 9 | # Redistribution and use is allowed according to the terms of the BSD license. 10 | # For details see the accompanying COPYING-CMAKE-SCRIPTS file. 11 | 12 | INCLUDE (FindPackageHandleStandardArgs) 13 | 14 | IF (LIBV4L2_INCLUDE_DIR AND LIBV4L2_LIBRARY) 15 | # Already in cache, be silent 16 | SET (LIBV4L2_FIND_QUIETLY TRUE) 17 | ENDIF (LIBV4L2_INCLUDE_DIR AND LIBV4L2_LIBRARY) 18 | 19 | IF (NOT LIBV4L2_FOUND) 20 | FIND_PATH (LIBV4L2_INCLUDE_DIR libv4l2.h) 21 | FIND_LIBRARY (LIBV4L2_LIBRARY NAMES v4l2) 22 | 23 | IF (LIBV4L2_INCLUDE_DIR AND LIBV4L2_LIBRARY) 24 | SET (LIBV4L2_FOUND TRUE) 25 | ENDIF( LIBV4L2_INCLUDE_DIR AND LIBV4L2_LIBRARY ) 26 | ENDIF ( NOT LIBV4L2_FOUND) 27 | 28 | IF( LIBV4L2_FOUND ) 29 | IF( NOT LIBV4L2_FIND_QUIETLY ) 30 | MESSAGE( STATUS "Found LIBV4L2: ${LIBV4L2_LIBRARY}") 31 | ENDIF( NOT LIBV4L2_FIND_QUIETLY ) 32 | ENDIF( LIBV4L2_FOUND ) 33 | -------------------------------------------------------------------------------- /data/kamerka.desktop: -------------------------------------------------------------------------------- 1 | [Desktop Entry] 2 | Type=Application 3 | Version=1.0 4 | Name=Kamerka 5 | Name[sr]=Камерка 6 | Name[sr@ijekavian]=Камерка 7 | GenericName=Taking photos with the webcam 8 | GenericName[pl]=Robienie zdjęć kamerką internetową 9 | GenericName[sr]=Хватање фотографија са веб-камере 10 | GenericName[sr@ijekavian]=Хватање фотографија са веб-камере 11 | GenericName[sr@latin]=Hvatanje fotografija sa veb-kamere 12 | GenericName[sr@ijekavianlatin]=Hvatanje fotografija sa veb-kamere 13 | Exec=kamerka 14 | Comment=Fancy-looking animated application for taking photos from webcam 15 | Comment[pl]=Fajnie wyglądająca, animowana aplikacja do robienia zdjęć kamerką internetową 16 | Comment[sr]=Апликација лепог изгледа за хватање фотографија са веб-камере 17 | Comment[sr@ijekavian]=Апликација лијепог изгледа за хватање фотографија са веб-камере 18 | Comment[sr@latin]=Aplikacija lepog izgleda za hvatanje fotografija sa veb-kamere 19 | Comment[sr@ijekavianlatin]=Aplikacija lijepog izgleda za hvatanje fotografija sa veb-kamere 20 | Icon=kamerka 21 | Terminal=false 22 | Categories=Qt;KDE;AudioVideo;Recorder;Video; 23 | -------------------------------------------------------------------------------- /modules/FindLibV4LConvert.cmake: -------------------------------------------------------------------------------- 1 | # cmake macro to test LibV4LConvert 2 | 3 | # Copyright (c) 201, Sebastian Krzyszkowiak 4 | # 5 | # LIBV4LCONVERT_FOUND 6 | # LIBV4LCONVERT_INCLUDE_DIR 7 | # LIBV4LCONVERT_LIBRARY 8 | # 9 | # Redistribution and use is allowed according to the terms of the BSD license. 10 | # For details see the accompanying COPYING-CMAKE-SCRIPTS file. 11 | 12 | INCLUDE (FindPackageHandleStandardArgs) 13 | 14 | IF (LIBV4LCONVERT_INCLUDE_DIR AND LIBV4LCONVERT_LIBRARY) 15 | # Already in cache, be silent 16 | SET (LIBV4LCONVERT_FIND_QUIETLY TRUE) 17 | ENDIF (LIBV4LCONVERT_INCLUDE_DIR AND LIBV4LCONVERT_LIBRARY) 18 | 19 | IF (NOT LIBV4LCONVERT_FOUND) 20 | FIND_PATH (LIBV4LCONVERT_INCLUDE_DIR libv4lconvert.h) 21 | FIND_LIBRARY (LIBV4LCONVERT_LIBRARY NAMES v4lconvert) 22 | 23 | IF (LIBV4LCONVERT_INCLUDE_DIR AND LIBV4LCONVERT_LIBRARY) 24 | SET (LIBV4LCONVERT_FOUND TRUE) 25 | ENDIF( LIBV4LCONVERT_INCLUDE_DIR AND LIBV4LCONVERT_LIBRARY ) 26 | ENDIF ( NOT LIBV4LCONVERT_FOUND) 27 | 28 | IF( LIBV4LCONVERT_FOUND ) 29 | IF( NOT LIBV4LCONVERT_FIND_QUIETLY ) 30 | MESSAGE( STATUS "Found LIBV4LCONVERT: ${LIBV4LCONVERT_LIBRARY}") 31 | ENDIF( NOT LIBV4LCONVERT_FIND_QUIETLY ) 32 | ENDIF( LIBV4LCONVERT_FOUND ) 33 | -------------------------------------------------------------------------------- /CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 2.8.12) 2 | 3 | project(Kamerka) 4 | 5 | SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall") 6 | 7 | find_package(ECM 0.0.11 REQUIRED NO_MODULE) 8 | set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH} ${ECM_KDE_MODULE_DIR} ${PROJECT_SOURCE_DIR}/modules) 9 | 10 | find_package(Qt5 REQUIRED COMPONENTS Core Script Gui Widgets Qml Quick QuickWidgets) 11 | 12 | include(KDEInstallDirs) 13 | include(KDECMakeSettings) 14 | include(KDECompilerSettings) 15 | 16 | include(FeatureSummary) 17 | 18 | find_package(KF5 REQUIRED COMPONENTS CoreAddons WidgetsAddons Config I18n KIO Notifications KDELibs4Support Declarative) 19 | include_directories(${KF5CoreAddons_INCLUDES} ${KF5Config_INCLUDES} ${KF5I18n_INCLUDES} ${KF5KIO_INCLUDES} ${KF5Notifications_INCLUDES} ${KF5KDELibs4Support_INCLUDES} ${KF5Declarative_INCLUDES}) 20 | 21 | find_package(Phonon4Qt5 REQUIRED) 22 | include_directories(${PHONON_INCLUDE_DIR}) 23 | 24 | find_package(QImageBlitz 5.0.0 REQUIRED) 25 | include_directories(${QIMAGEBLITZ_INCLUDE_DIR}) 26 | 27 | find_package(LibV4L2 REQUIRED) 28 | include_directories(${LIBV2L2_INCLUDE_DIR}) 29 | 30 | find_package(LibV4LConvert REQUIRED) 31 | include_directories(${LIBV2LCONVERT_INCLUDE_DIR}) 32 | 33 | add_subdirectory(src) 34 | add_subdirectory(po) 35 | add_subdirectory(data) 36 | 37 | feature_summary(WHAT ALL FATAL_ON_MISSING_REQUIRED_PACKAGES) 38 | -------------------------------------------------------------------------------- /po/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | FIND_PROGRAM(GETTEXT_MSGFMT_EXECUTABLE msgfmt) 2 | 3 | IF(NOT GETTEXT_MSGFMT_EXECUTABLE) 4 | MESSAGE( 5 | "------ 6 | NOTE: msgfmt not found. Translations will *not* be installed 7 | ------") 8 | ELSE(NOT GETTEXT_MSGFMT_EXECUTABLE) 9 | 10 | SET(catalogname kamerka) 11 | 12 | ADD_CUSTOM_TARGET(translations ALL) 13 | 14 | FILE(GLOB PO_FILES *.po) 15 | 16 | FOREACH(_poFile ${PO_FILES}) 17 | GET_FILENAME_COMPONENT(_poFileName ${_poFile} NAME) 18 | STRING(REGEX REPLACE "^${catalogname}_?" "" _langCode ${_poFileName} ) 19 | STRING(REGEX REPLACE "\\.po$" "" _langCode ${_langCode} ) 20 | 21 | IF( _langCode ) 22 | GET_FILENAME_COMPONENT(_lang ${_poFile} NAME_WE) 23 | SET(_gmoFile ${CMAKE_CURRENT_BINARY_DIR}/${_lang}.gmo) 24 | 25 | ADD_CUSTOM_COMMAND(TARGET translations 26 | COMMAND ${GETTEXT_MSGFMT_EXECUTABLE} --check -o ${_gmoFile} ${_poFile} 27 | DEPENDS ${_poFile}) 28 | INSTALL(FILES ${_gmoFile} DESTINATION ${LOCALE_INSTALL_DIR}/${_langCode}/LC_MESSAGES/ RENAME ${catalogname}.mo) 29 | ENDIF( _langCode ) 30 | 31 | ENDFOREACH(_poFile ${PO_FILES}) 32 | 33 | ENDIF(NOT GETTEXT_MSGFMT_EXECUTABLE) 34 | -------------------------------------------------------------------------------- /src/settingsdialog.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) Sebastian Krzyszkowiak 3 | * 4 | * This program is free software; you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation; either version 2 of the License, or 7 | * (at your option) any later version. 8 | * 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License 15 | * along with this program; if not, write to the Free Software 16 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. 17 | */ 18 | 19 | #include 20 | #include 21 | #include 22 | #include 23 | #include 24 | 25 | #ifndef SETTINGSDIALOG_H 26 | #define SETTINGSDIALOG_H 27 | 28 | class SettingsDialog : public KConfigDialog 29 | { 30 | Q_OBJECT 31 | public: 32 | explicit SettingsDialog(QWidget *parent, QString name, KConfigSkeleton *config); 33 | private: 34 | KLineEdit *subdir; 35 | KUrlRequester *urledit; 36 | KConfigSkeleton *config; 37 | QCheckBox *subdircheck; 38 | QGroupBox *xdggroupbox; 39 | signals: 40 | 41 | public slots: 42 | void updateUrl(); 43 | void checkDir(); 44 | }; 45 | 46 | #endif // SETTINGSDIALOG_H 47 | -------------------------------------------------------------------------------- /data/kamerka.1: -------------------------------------------------------------------------------- 1 | .TH KAMERKA "1" "July 2011" "Kamerka version 0.8.1" "User Commands" 2 | .SH NAME 3 | Kamerka \- take photos using your webcam and shiny animated QML interface 4 | .SH SYNOPSIS 5 | .B kamerka 6 | [\fIQt-options\fR] [\fIKDE-options\fR] 7 | .SH DESCRIPTION 8 | Kamerka version 0.8.1 9 | .PP 10 | Simple photo taking application with fancy animated interface 11 | .SS "Configuration options:" 12 | .PP 13 | You can use kamerkarc file (usually in ~/.kde/share/config directory) in order 14 | to set up device node for your webcam and resolution of video stream. 15 | 16 | Example file with default config: 17 | .IP 18 | [Video] 19 | 20 | node=/dev/video0 21 | 22 | width=640 23 | 24 | height=480 25 | .PP 26 | If some option (or even whole file) is not present, then default values are 27 | used, as seen in example config above. You can access those settings from 28 | user interface too. 29 | .SS "Generic options:" 30 | .TP 31 | \fB\-\-help\fR 32 | Show help about options 33 | .TP 34 | \fB\-\-help\-qt\fR 35 | Show Qt specific options 36 | .TP 37 | \fB\-\-help\-kde\fR 38 | Show KDE specific options 39 | .TP 40 | \fB\-\-help\-all\fR 41 | Show all options 42 | .TP 43 | \fB\-\-author\fR 44 | Show author information 45 | .TP 46 | \fB\-v\fR, \fB\-\-version\fR 47 | Show version information 48 | .TP 49 | \fB\-\-license\fR 50 | Show license information 51 | .TP 52 | \fB\-\-\fR 53 | End of options 54 | .SH "SEE ALSO" 55 | The full documentation for 56 | .B Kamerka 57 | is maintained as a Texinfo manual. If the 58 | .B info 59 | and 60 | .B Kamerka 61 | programs are properly installed at your site, the command 62 | .IP 63 | .B info Kamerka 64 | .PP 65 | should give you access to the complete manual. 66 | -------------------------------------------------------------------------------- /src/videowidget.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) Özkan Pakdil 3 | * Copyright (c) Sebastian Krzyszkowiak 4 | * 5 | * This program is free software; you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation; either version 2 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program; if not, write to the Free Software 17 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. 18 | */ 19 | 20 | #ifndef VIDEOWIDGET_H 21 | #define VIDEOWIDGET_H 22 | 23 | #include 24 | #include 25 | #include 26 | #include 27 | 28 | #include "capturethread.h" 29 | 30 | class videowidget : public QWidget 31 | { 32 | Q_OBJECT 33 | public: 34 | videowidget(QWidget *parent = 0); 35 | ~videowidget(); 36 | 37 | QPixmap pixmap; 38 | CaptureThread thread; 39 | QQuickWidget *ui; 40 | Phonon::MediaObject* media; 41 | void resize(const QSize& size); 42 | void takeImage(); 43 | protected: 44 | void paintEvent(QPaintEvent *event); 45 | 46 | public slots: 47 | void setPicture(QImage); 48 | 49 | private: 50 | bool storeImage; 51 | int imageDelay; 52 | }; 53 | 54 | class Notification : public KNotification { 55 | Q_OBJECT 56 | public: 57 | Notification(QString, QString filename); 58 | QString filename; 59 | public slots: 60 | void openFile(unsigned int); 61 | }; 62 | 63 | #endif // VIDEOWIDGET_H 64 | -------------------------------------------------------------------------------- /src/mainwindow.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) Sebastian Krzyszkowiak 3 | * 4 | * This program is free software; you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation; either version 2 of the License, or 7 | * (at your option) any later version. 8 | * 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License 15 | * along with this program; if not, write to the Free Software 16 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. 17 | */ 18 | 19 | #include 20 | #include 21 | #include 22 | #include 23 | #include 24 | 25 | #include "settingsdialog.h" 26 | #include "videowidget.h" 27 | 28 | class EngineAccess : public QObject 29 | { 30 | Q_OBJECT 31 | public: 32 | Q_INVOKABLE void setEngine(QScriptValue val); 33 | QScriptEngine *engine; 34 | }; 35 | 36 | 37 | class MainWindow : public KMainWindow { 38 | Q_OBJECT 39 | public: 40 | MainWindow(); 41 | videowidget *videoViewer; 42 | QQuickWidget *ui; 43 | QGraphicsProxyWidget *conf, *dialog; 44 | SettingsDialog *confdial; 45 | KDialog *kdialog; 46 | QLabel *dialoglabel; 47 | private: 48 | void resizeEvent(QResizeEvent *e); 49 | bool first; 50 | public slots: 51 | void takePhoto(); 52 | void timerCounter(int); 53 | void showDirectory(); 54 | void showConfiguration(); 55 | void QMLStatus(QQuickWidget::Status); 56 | void tryVideoThread(); 57 | void loadSettings(); 58 | void applyEffect(int effect); 59 | void startedCapture(int width, int height); 60 | void openFile(QString filename); 61 | }; 62 | 63 | -------------------------------------------------------------------------------- /src/main.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) Sebastian Krzyszkowiak 3 | * 4 | * This program is free software; you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation; either version 2 of the License, or 7 | * (at your option) any later version. 8 | * 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License 15 | * along with this program; if not, write to the Free Software 16 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. 17 | */ 18 | 19 | #include 20 | #include 21 | 22 | #include "mainwindow.h" 23 | 24 | #define VERSION "0.20" 25 | 26 | int main(int argc, char *argv[]) { 27 | printf("Kamerka version %s\n", VERSION); 28 | printf(" Copyright (C) 2011-2019 Sebastian Krzyszkowiak\n"); 29 | printf(" https://dosowisko.net/\n"); 30 | printf(" Kamerka comes with ABSOLUTELY NO WARRANTY.\n"); 31 | printf(" This is free software, and you are welcome to redistribute it\n"); 32 | printf(" under certain conditions; type `./kamerka --license' for details.\n\n"); 33 | fflush(stdout); 34 | 35 | QApplication a(argc, argv); 36 | a.setAttribute(Qt::AA_DontCreateNativeWidgetSiblings); 37 | KAboutData aboutData("kamerka", i18n("Kamerka"), VERSION, 38 | i18n("Simple photo taking application with fancy animated interface"), 39 | KAboutLicense::GPL, i18n("Copyright (C) 2011-2014 Sebastian Krzyszkowiak") ); 40 | KAboutData::setApplicationData(aboutData); 41 | QIcon icon(":/icons/kamerka.png"); 42 | a.setWindowIcon(icon); 43 | new MainWindow(); 44 | return a.exec(); 45 | } 46 | -------------------------------------------------------------------------------- /src/imageeffect.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) Dejan Noveski 3 | * 4 | * This program is free software; you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation; either version 2 of the License, or 7 | * (at your option) any later version. 8 | * 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License 15 | * along with this program; if not, write to the Free Software 16 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. 17 | */ 18 | 19 | #ifndef IMAGEEFFECT_H 20 | #define IMAGEEFFECT_H 21 | 22 | #include 23 | #include 24 | 25 | class ImageEffect: public QObject{ 26 | Q_OBJECT 27 | Q_ENUMS(Effect) 28 | 29 | public: 30 | 31 | enum Effect { 32 | Effect_None, 33 | Effect_Grey, 34 | Effect_Invert, 35 | Effect_Equalize, 36 | Effect_Smurf, 37 | Effect_Implode, 38 | Effect_Explode, 39 | Effect_Charcoal, 40 | Effect_Edge, 41 | Effect_Emboss, 42 | Effect_Swirl, 43 | Effect_OilPaint, 44 | Effect_Wave 45 | }; 46 | 47 | static void grey(QImage &image); 48 | static void invert(QImage &image); 49 | static void equalize(QImage &image); 50 | static void smurf(QImage &image); 51 | static void implode(QImage &image); 52 | static void explode(QImage &image); 53 | static void charcoal(QImage &image); 54 | static void edge(QImage &image); 55 | static void emboss(QImage &image); 56 | static void swirl(QImage &image); 57 | static void oilPaint(QImage &image); 58 | static void wave(QImage &image); 59 | static void applyEffect(QImage &image, int effect = Effect_None); 60 | 61 | }; 62 | 63 | 64 | #endif // IMAGEEFFECT_H 65 | -------------------------------------------------------------------------------- /tools/extract-messages.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # Copyright (c) Sebastian Krzyszkowiak 3 | # 4 | # This program is free software; you can redistribute it and/or modify 5 | # it under the terms of the GNU General Public License as published by 6 | # the Free Software Foundation; either version 2 of the License, or 7 | # (at your option) any later version. 8 | # 9 | # This program is distributed in the hope that it will be useful, 10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | # GNU General Public License for more details. 13 | # 14 | # You should have received a copy of the GNU General Public License 15 | # along with this program; if not, write to the Free Software 16 | # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. 17 | 18 | BASEDIR=".." # root of translatable sources 19 | PROJECT="kamerka" # project name 20 | BUGADDR="dos@dosowisko.net" # MSGID-Bugs 21 | WDIR=`pwd` # working dir 22 | 23 | echo "Preparing additional data" 24 | cd ${BASEDIR} 25 | # additional string for KAboutData 26 | echo 'i18nc("NAME OF TRANSLATORS","Your names");' > ${WDIR}/rc.cpp 27 | echo 'i18nc("EMAIL OF TRANSLATORS","Your emails");' >> ${WDIR}/rc.cpp 28 | cd ${WDIR} 29 | echo "Done preparing additional data" 30 | 31 | echo "Extracting messages" 32 | cd ${BASEDIR} 33 | # we use simple sorting to make sure the lines do not jump around too much from system to system 34 | find . -name '*.cpp' -o -name '*.h' -o -name '*.c' -o -name '*.qml' | sort > ${WDIR}/infiles.list 35 | echo "rc.cpp" >> ${WDIR}/infiles.list 36 | cd ${WDIR} 37 | xgettext --from-code=UTF-8 -C -kde -ci18n -ki18n:1 -ki18nc:1c,2 -ki18np:1,2 -ki18ncp:1c,2,3 -ktr2i18n:1 \ 38 | -kI18N_NOOP:1 -kI18N_NOOP2:1c,2 -kaliasLocale -kki18n:1 -kki18nc:1c,2 -kki18np:1,2 -kki18ncp:1c,2,3 \ 39 | --msgid-bugs-address="${BUGADDR}" \ 40 | --files-from=infiles.list -D ${BASEDIR} -D ${WDIR} -o ../po/${PROJECT}.pot || { echo "error while calling xgettext. aborting."; exit 1; } 41 | echo "Done extracting messages" 42 | 43 | echo "Merging translations" 44 | cd ${BASEDIR} 45 | catalogs=`find . -name '*.po'` 46 | for cat in $catalogs; do 47 | echo $cat 48 | msgmerge -o $cat.new $cat po/${PROJECT}.pot 49 | mv $cat.new $cat 50 | done 51 | echo "Done merging translations" 52 | 53 | echo "Cleaning up" 54 | cd ${WDIR} 55 | rm infiles.list 56 | rm rc.cpp 57 | echo "Done" 58 | -------------------------------------------------------------------------------- /src/capturethread.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) Özkan Pakdil 3 | * Copyright (c) Sebastian Krzyszkowiak 4 | * 5 | * This program is free software; you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation; either version 2 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program; if not, write to the Free Software 17 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. 18 | */ 19 | 20 | #ifndef CAPTURETHREAD_H 21 | #define CAPTURETHREAD_H 22 | 23 | #include 24 | #include 25 | #include 26 | #include 27 | #include 28 | #include 29 | #include "libv4l2.h" 30 | #include "libv4lconvert.h" 31 | 32 | class CaptureThread : public QThread 33 | { 34 | Q_OBJECT 35 | 36 | public: 37 | CaptureThread(); 38 | int stop(); 39 | int start(); 40 | bool running; 41 | int effect; 42 | protected: 43 | void run(); 44 | void updateImageSettings(); 45 | signals: 46 | void renderedImage(const QImage &image); 47 | void startedCapture(int width, int height); 48 | 49 | private: 50 | QMutex mutex; 51 | 52 | int width, height, fps, delay; 53 | 54 | bool devam; 55 | 56 | struct buffer { 57 | void *start; 58 | size_t length; 59 | }; 60 | struct buffer *buffers; 61 | 62 | struct v4l2_format fmt; 63 | struct v4l2_buffer buf; 64 | struct v4l2_requestbuffers req; 65 | enum v4l2_buf_type type; 66 | fd_set fds; 67 | struct timeval tv; 68 | int r, fd; 69 | unsigned int n_buffers; 70 | QString dev_name; 71 | 72 | struct v4l2_format src_fmt; 73 | unsigned char *dst_buf; 74 | struct v4lconvert_data *v4lconvert_data; 75 | int di; 76 | char header [50]; 77 | }; 78 | 79 | #endif // CAPTURETHREAD_H 80 | -------------------------------------------------------------------------------- /src/imageeffect.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) Dejan Noveski 3 | * 4 | * This program is free software; you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation; either version 2 of the License, or 7 | * (at your option) any later version. 8 | * 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License 15 | * along with this program; if not, write to the Free Software 16 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. 17 | */ 18 | 19 | #include 20 | #include 21 | #include 22 | #include "imageeffect.h" 23 | #include 24 | 25 | void ImageEffect::grey(QImage &i) { 26 | Blitz::grayscale(i, true); 27 | } 28 | 29 | void ImageEffect::invert(QImage &i) { 30 | Blitz::invert(i); 31 | } 32 | 33 | void ImageEffect::equalize(QImage &i) { 34 | Blitz::equalize(i); 35 | } 36 | 37 | void ImageEffect::smurf(QImage &i) { 38 | i = i.rgbSwapped(); 39 | } 40 | 41 | void ImageEffect::implode(QImage &i) { 42 | i = Blitz::implode(i, 0.3); 43 | } 44 | 45 | void ImageEffect::explode(QImage &i) { 46 | i = Blitz::implode(i, -0.3); 47 | } 48 | 49 | void ImageEffect::charcoal(QImage &i) { 50 | i = Blitz::charcoal(i); 51 | } 52 | 53 | void ImageEffect::edge(QImage &i) { 54 | i = Blitz::edge(i); 55 | } 56 | 57 | void ImageEffect::emboss(QImage &i) { 58 | i = Blitz::emboss(i, 0, 0.8, Blitz::Low); 59 | } 60 | 61 | void ImageEffect::swirl(QImage &i) { 62 | i = Blitz::swirl(i); 63 | } 64 | 65 | void ImageEffect::oilPaint(QImage &i) { 66 | i = Blitz::oilPaint(i, 0, Blitz::Low); 67 | } 68 | 69 | void ImageEffect::wave(QImage &i) { 70 | i = Blitz::wave(i); 71 | } 72 | 73 | void ImageEffect::applyEffect(QImage &i, int effect) { 74 | switch(effect) 75 | { 76 | case ImageEffect::Effect_None: 77 | break; 78 | case ImageEffect::Effect_Grey: 79 | grey(i); break; 80 | case ImageEffect::Effect_Invert: 81 | invert(i); break; 82 | case ImageEffect::Effect_Equalize: 83 | equalize(i); break; 84 | case ImageEffect::Effect_Smurf: 85 | smurf(i); break; 86 | case ImageEffect::Effect_Implode: 87 | implode(i); break; 88 | case ImageEffect::Effect_Explode: 89 | explode(i); break; 90 | case ImageEffect::Effect_Charcoal: 91 | charcoal(i); break; 92 | case ImageEffect::Effect_Edge: 93 | edge(i); break; 94 | case ImageEffect::Effect_Emboss: 95 | emboss(i); break; 96 | case ImageEffect::Effect_Swirl: 97 | swirl(i); break; 98 | case ImageEffect::Effect_OilPaint: 99 | oilPaint(i); break; 100 | case ImageEffect::Effect_Wave: 101 | wave(i); break; 102 | } 103 | } 104 | 105 | -------------------------------------------------------------------------------- /src/Button.qml: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) Sebastian Krzyszkowiak 3 | * 4 | * This program is free software; you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation; either version 2 of the License, or 7 | * (at your option) any later version. 8 | * 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License 15 | * along with this program; if not, write to the Free Software 16 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. 17 | */ 18 | 19 | import QtQuick 2.0; 20 | 21 | 22 | Rectangle { 23 | property alias text: textItem.text; 24 | property alias mouse: mouseArea; 25 | property alias font: textItem.font; 26 | property alias tooltip: toolTipText.text; 27 | property bool active; 28 | id: button; 29 | width: 100; height: 30; 30 | border.width: 1; 31 | radius: 3; 32 | smooth: true; 33 | opacity: active ? 1.0 : 0.7; 34 | z: 10; 35 | 36 | gradient: Gradient { 37 | GradientStop { position: 0.0; color: "#888"; } 38 | //GradientStop { position: 0.5; color: "black"; } 39 | GradientStop { position: 1.0; color: "#575757"; } 40 | } 41 | 42 | MouseArea { 43 | id: mouseArea; 44 | anchors.fill: parent; 45 | hoverEnabled: true; 46 | cursorShape: Qt.PointingHandCursor; 47 | } 48 | 49 | Text { 50 | id: textItem; 51 | anchors.centerIn: parent; 52 | font.pointSize: 12; 53 | color: "white"; 54 | Behavior on text { 55 | SequentialAnimation { 56 | NumberAnimation { target: textItem; property: "opacity"; to: 0; } 57 | PropertyAction {} 58 | NumberAnimation { target: textItem; property: "opacity"; to: 1; } 59 | } 60 | } 61 | } 62 | 63 | 64 | Rectangle{ 65 | id: toolTip; 66 | color: "#fff"; 67 | border.color: "#000"; 68 | border.width: 1; 69 | x: mouse.mouseX + 10; 70 | y: mouse.mouseY - toolTip.height; 71 | z:parent.z + 10 72 | height: toolTipText.paintedHeight + 4 73 | width: toolTipText.paintedWidth + 4 74 | opacity:0; 75 | 76 | Text { 77 | id: toolTipText; 78 | anchors.centerIn: parent; 79 | color: "#000"; 80 | z: parent.z + 10; 81 | wrapMode: Text.WordWrap; 82 | } 83 | } 84 | 85 | 86 | 87 | states: [ 88 | State { 89 | name: "down"; when: mouse.containsMouse; 90 | PropertyChanges { 91 | target: button; 92 | opacity: 1; 93 | } 94 | PropertyChanges { 95 | target: toolTip; 96 | opacity: toolTipText.text ? 1 : 0; 97 | } 98 | } 99 | ] 100 | 101 | transitions: Transition { 102 | from: "*"; to: "down"; reversible: true; 103 | SequentialAnimation { 104 | NumberAnimation { property: "opacity"; duration: 400; easing.type: Easing.OutQuad; target:button} 105 | } 106 | 107 | } 108 | 109 | } 110 | -------------------------------------------------------------------------------- /src/kamerka.kcfg: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | 9 | 10 | /dev/video0 11 | 12 | 13 | 14 | 640 15 | 16 | 17 | 18 | 480 19 | 20 | 21 | 22 | 0 23 | 24 | 25 | 26 | 50 27 | 28 | 29 | 30 | 50 31 | 32 | 33 | 34 | 30 35 | 36 | 37 | 38 | 50 39 | 40 | 41 | 42 | false 43 | 44 | 45 | 46 | false 47 | 48 | 49 | 50 | false 51 | 52 | 53 | 54 | true 55 | 56 | 57 | 58 | 59 | 60 | 5 61 | 62 | 63 | 64 | 3 65 | 66 | 67 | 68 | 1 69 | 70 | 71 | 72 | 73 | 74 | true 75 | 76 | 77 | 78 | true 79 | 80 | 81 | 82 | kamerka 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | true 93 | 94 | 95 | 96 | true 97 | 98 | 99 | 100 | true 101 | 102 | 103 | 104 | -------------------------------------------------------------------------------- /tools/gitlog2changelog.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python2 2 | ''' 3 | * Copyright (c) 2008 Marcus D. Hanwell 4 | * 5 | * This program is free software; you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation; either version 2 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program; if not, write to the Free Software 17 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. 18 | ''' 19 | 20 | import string, re, os 21 | 22 | # Execute git log with the desired command line options. 23 | fin = os.popen('git log --summary --stat --no-merges --date=short', 'r') 24 | # Create a ChangeLog file in the current directory. 25 | fout = open('../ChangeLog', 'w') 26 | 27 | # Set up the loop variables in order to locate the blocks we want 28 | authorFound = False 29 | dateFound = False 30 | messageFound = False 31 | filesFound = False 32 | message = "" 33 | messageNL = False 34 | files = "" 35 | prevAuthorLine = "" 36 | 37 | # The main part of the loop 38 | for line in fin: 39 | # The commit line marks the start of a new commit object. 40 | if line.find('commit') >= 0: 41 | # Start all over again... 42 | authorFound = False 43 | dateFound = False 44 | messageFound = False 45 | messageNL = False 46 | message = "" 47 | filesFound = False 48 | files = "" 49 | continue 50 | # Match the author line and extract the part we want 51 | elif re.match('Author:', line) >=0: 52 | authorList = re.split(': ', line, 1) 53 | author = authorList[1] 54 | author = author[0:len(author)-1] 55 | authorFound = True 56 | # Match the date line 57 | elif re.match('Date:', line) >= 0: 58 | dateList = re.split(': ', line, 1) 59 | date = dateList[1] 60 | date = date[0:len(date)-1] 61 | dateFound = True 62 | # The svn-id lines are ignored 63 | elif re.match(' git-svn-id:', line) >= 0: 64 | continue 65 | # The sign off line is ignored too 66 | elif re.search('Signed-off-by', line) >= 0: 67 | continue 68 | # Extract the actual commit message for this commit 69 | elif authorFound & dateFound & messageFound == False: 70 | # Find the commit message if we can 71 | if len(line) == 1: 72 | if messageNL: 73 | messageFound = True 74 | else: 75 | messageNL = True 76 | elif len(line) == 4: 77 | messageFound = True 78 | else: 79 | if len(message) == 0: 80 | message = message + line.strip() 81 | else: 82 | message = message + " " + line.strip() 83 | # If this line is hit all of the files have been stored for this commit 84 | elif re.search('files changed', line) >= 0: 85 | filesFound = True 86 | continue 87 | # Collect the files for this commit. FIXME: Still need to add +/- to files 88 | elif authorFound & dateFound & messageFound: 89 | fileList = re.split(' \| ', line, 2) 90 | if len(fileList) > 1: 91 | if len(files) > 0: 92 | files = files + ", " + fileList[0].strip() 93 | else: 94 | files = fileList[0].strip() 95 | # All of the parts of the commit have been found - write out the entry 96 | if authorFound & dateFound & messageFound & filesFound: 97 | # First the author line, only outputted if it is the first for that 98 | # author on this day 99 | authorLine = date + " " + author 100 | if len(prevAuthorLine) == 0: 101 | fout.write(authorLine + "\n") 102 | elif authorLine == prevAuthorLine: 103 | pass 104 | else: 105 | fout.write("\n" + authorLine + "\n") 106 | 107 | # Assemble the actual commit message line(s) and limit the line length 108 | # to 80 characters. 109 | commitLine = "* " + files + ": " + message 110 | i = 0 111 | commit = "" 112 | while i < len(commitLine): 113 | if len(commitLine) < i + 78: 114 | commit = commit + "\n " + commitLine[i:len(commitLine)] 115 | break 116 | index = commitLine.rfind(' ', i, i+78) 117 | if index > i: 118 | commit = commit + "\n " + commitLine[i:index] 119 | i = index+1 120 | else: 121 | commit = commit + "\n " + commitLine[i:78] 122 | i = i+79 123 | 124 | # Write out the commit line 125 | fout.write(commit + "\n") 126 | 127 | #Now reset all the variables ready for a new commit block. 128 | authorFound = False 129 | dateFound = False 130 | messageFound = False 131 | messageNL = False 132 | message = "" 133 | filesFound = False 134 | files = "" 135 | prevAuthorLine = authorLine 136 | 137 | # Close the input and output lines now that we are finished. 138 | fin.close() 139 | fout.close() 140 | -------------------------------------------------------------------------------- /po/kamerka.pot: -------------------------------------------------------------------------------- 1 | # SOME DESCRIPTIVE TITLE. 2 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the PACKAGE package. 4 | # FIRST AUTHOR , YEAR. 5 | # 6 | #, fuzzy 7 | msgid "" 8 | msgstr "" 9 | "Project-Id-Version: PACKAGE VERSION\n" 10 | "Report-Msgid-Bugs-To: dos@dosowisko.net\n" 11 | "POT-Creation-Date: 2019-04-10 21:34+0200\n" 12 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" 13 | "Last-Translator: FULL NAME \n" 14 | "Language-Team: LANGUAGE \n" 15 | "Language: \n" 16 | "MIME-Version: 1.0\n" 17 | "Content-Type: text/plain; charset=CHARSET\n" 18 | "Content-Transfer-Encoding: 8bit\n" 19 | 20 | #: src/kamerka.qml:248 21 | msgid "Take a photo" 22 | msgstr "" 23 | 24 | #: src/kamerka.qml:263 src/settingsdialog.cpp:156 25 | msgid "Burst mode" 26 | msgstr "" 27 | 28 | #: src/kamerka.qml:286 src/settingsdialog.cpp:144 29 | msgid "Self-timer" 30 | msgstr "" 31 | 32 | #: src/kamerka.qml:302 33 | msgid "Hide effects" 34 | msgstr "" 35 | 36 | #: src/kamerka.qml:302 37 | msgid "Show effects" 38 | msgstr "" 39 | 40 | #: src/kamerka.qml:318 41 | msgid "Open directory" 42 | msgstr "" 43 | 44 | #: src/kamerka.qml:333 45 | msgid "Configure" 46 | msgstr "" 47 | 48 | #: src/kamerka.qml:537 49 | msgid "No Effect" 50 | msgstr "" 51 | 52 | #: src/kamerka.qml:553 53 | msgid "Grey" 54 | msgstr "" 55 | 56 | #: src/kamerka.qml:569 57 | msgid "Invert" 58 | msgstr "" 59 | 60 | #: src/kamerka.qml:585 61 | msgid "Equalize" 62 | msgstr "" 63 | 64 | #: src/kamerka.qml:601 65 | msgid "Smurf" 66 | msgstr "" 67 | 68 | #: src/kamerka.qml:616 69 | msgid "Implode" 70 | msgstr "" 71 | 72 | #: src/kamerka.qml:631 73 | msgid "Explode" 74 | msgstr "" 75 | 76 | #: src/kamerka.qml:646 77 | msgid "Charcoal" 78 | msgstr "" 79 | 80 | #: src/kamerka.qml:661 81 | msgid "Edge" 82 | msgstr "" 83 | 84 | #: src/kamerka.qml:676 85 | msgid "Emboss" 86 | msgstr "" 87 | 88 | #: src/kamerka.qml:691 89 | msgid "Swirl" 90 | msgstr "" 91 | 92 | #: src/kamerka.qml:706 93 | msgid "Oil Paint" 94 | msgstr "" 95 | 96 | #: src/kamerka.qml:721 97 | msgid "Wave" 98 | msgstr "" 99 | 100 | #: src/main.cpp:37 101 | msgid "Kamerka" 102 | msgstr "" 103 | 104 | #: src/main.cpp:38 105 | msgid "Simple photo taking application with fancy animated interface" 106 | msgstr "" 107 | 108 | #: src/main.cpp:39 109 | msgid "Copyright (C) 2011-2014 Sebastian Krzyszkowiak" 110 | msgstr "" 111 | 112 | #: src/mainwindow.cpp:46 113 | msgid "i18n() takes at least one argument" 114 | msgstr "" 115 | 116 | #: src/mainwindow.cpp:64 117 | msgid "Could not load QML interface!" 118 | msgstr "" 119 | 120 | #: src/mainwindow.cpp:64 src/mainwindow.cpp:115 src/mainwindow.cpp:138 121 | msgid "Error" 122 | msgstr "" 123 | 124 | #: src/mainwindow.cpp:111 src/mainwindow.cpp:115 src/mainwindow.cpp:138 125 | msgid "Could not connect to V4L device!" 126 | msgstr "" 127 | 128 | #: src/mainwindow.cpp:157 129 | msgid "" 130 | "Requested resolution (%1x%2) was not available. Driver used %3x%4 instead.\n" 131 | "Please check your configuration." 132 | msgstr "" 133 | 134 | #: src/settingsdialog.cpp:43 135 | msgid "Selected path does not exists. Do you want to create it?" 136 | msgstr "" 137 | 138 | #: src/settingsdialog.cpp:60 139 | msgid "Device node:" 140 | msgstr "" 141 | 142 | #: src/settingsdialog.cpp:67 143 | msgid "x" 144 | msgstr "" 145 | 146 | #: src/settingsdialog.cpp:72 147 | msgid "px" 148 | msgstr "" 149 | 150 | #: src/settingsdialog.cpp:73 151 | msgid "Resolution:" 152 | msgstr "" 153 | 154 | #: src/settingsdialog.cpp:78 155 | msgid "Disabled" 156 | msgstr "" 157 | 158 | #: src/settingsdialog.cpp:79 159 | msgid " fps" 160 | msgstr "" 161 | 162 | #: src/settingsdialog.cpp:81 163 | msgid "Framerate limit:" 164 | msgstr "" 165 | 166 | #: src/settingsdialog.cpp:83 167 | msgid "Lock aspect ratio" 168 | msgstr "" 169 | 170 | #: src/settingsdialog.cpp:86 171 | msgid "Enhance contrast" 172 | msgstr "" 173 | 174 | #: src/settingsdialog.cpp:89 175 | msgid "Mirror output" 176 | msgstr "" 177 | 178 | #: src/settingsdialog.cpp:92 179 | msgid "Flip output" 180 | msgstr "" 181 | 182 | #: src/settingsdialog.cpp:97 183 | msgid "Image Settings" 184 | msgstr "" 185 | 186 | #: src/settingsdialog.cpp:107 187 | msgid "Brightness:" 188 | msgstr "" 189 | 190 | #: src/settingsdialog.cpp:116 191 | msgid "Contrast:" 192 | msgstr "" 193 | 194 | #: src/settingsdialog.cpp:125 195 | msgid "Saturation:" 196 | msgstr "" 197 | 198 | #: src/settingsdialog.cpp:134 199 | msgid "Hue:" 200 | msgstr "" 201 | 202 | #: src/settingsdialog.cpp:138 203 | msgid "Camera" 204 | msgstr "" 205 | 206 | #: src/settingsdialog.cpp:138 207 | msgid "Camera settings" 208 | msgstr "" 209 | 210 | #: src/settingsdialog.cpp:149 src/settingsdialog.cpp:167 211 | msgid " seconds" 212 | msgstr "" 213 | 214 | #: src/settingsdialog.cpp:152 215 | msgid "Self-timer timeout:" 216 | msgstr "" 217 | 218 | #: src/settingsdialog.cpp:163 219 | msgid "Number of photos:" 220 | msgstr "" 221 | 222 | #: src/settingsdialog.cpp:170 223 | msgid "Delay between photos:" 224 | msgstr "" 225 | 226 | #: src/settingsdialog.cpp:174 227 | msgid "Capture" 228 | msgstr "" 229 | 230 | #: src/settingsdialog.cpp:182 231 | msgid "Use default pictures directory" 232 | msgstr "" 233 | 234 | #: src/settingsdialog.cpp:189 235 | msgid "Use subdirectory:" 236 | msgstr "" 237 | 238 | #: src/settingsdialog.cpp:202 239 | msgid "Photo directory:" 240 | msgstr "" 241 | 242 | #: src/settingsdialog.cpp:204 243 | msgid "Storage" 244 | msgstr "" 245 | 246 | #: src/settingsdialog.cpp:204 247 | msgid "Photo storage" 248 | msgstr "" 249 | 250 | #: src/settingsdialog.cpp:210 251 | msgid "Play sound on taking photo" 252 | msgstr "" 253 | 254 | #: src/settingsdialog.cpp:213 255 | msgid "Play timer sounds" 256 | msgstr "" 257 | 258 | #: src/settingsdialog.cpp:216 259 | msgid "Show notification on taking photo" 260 | msgstr "" 261 | 262 | #: src/settingsdialog.cpp:220 263 | msgid "Behaviour" 264 | msgstr "" 265 | 266 | #: src/videowidget.cpp:100 267 | msgid "Starting up webcam..." 268 | msgstr "" 269 | 270 | #: src/videowidget.cpp:170 271 | msgid "Photo has been stored in file %1" 272 | msgstr "" 273 | 274 | #: src/videowidget.cpp:175 275 | msgid "Open" 276 | msgstr "" 277 | 278 | #: src/videowidget.cpp:175 279 | msgid "Show in directory" 280 | msgstr "" 281 | 282 | #: tools/rc.cpp:1 rc.cpp:1 283 | msgctxt "NAME OF TRANSLATORS" 284 | msgid "Your names" 285 | msgstr "" 286 | 287 | #: tools/rc.cpp:2 rc.cpp:2 288 | msgctxt "EMAIL OF TRANSLATORS" 289 | msgid "Your emails" 290 | msgstr "" 291 | -------------------------------------------------------------------------------- /src/videowidget.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) Özkan Pakdil 3 | * Copyright (c) Sebastian Krzyszkowiak 4 | * 5 | * This program is free software; you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation; either version 2 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program; if not, write to the Free Software 17 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. 18 | */ 19 | 20 | #include 21 | #include 22 | #include 23 | #include 24 | #include 25 | #include 26 | #include 27 | #include 28 | 29 | #include "settings.h" 30 | #include "videowidget.h" 31 | 32 | // Notification class is used to connect to notification signal 33 | Notification::Notification (QString name, QString filename) : KNotification(name) { 34 | this->filename = filename; 35 | } 36 | 37 | void Notification::openFile (unsigned int i) { 38 | // qDebug(QString::number(i).toStdString().c_str()); 39 | if (i==1) { 40 | QDesktopServices::openUrl(this->filename); 41 | } 42 | else if (i==2) { 43 | if (!QProcess::startDetached("dolphin", {"--select", this->filename})) { 44 | QDesktopServices::openUrl(Settings::photodir()); 45 | } 46 | } 47 | } 48 | 49 | videowidget::videowidget(QWidget *parent) : QWidget(parent) { 50 | storeImage=false; 51 | connect(&thread, SIGNAL(renderedImage(QImage)), 52 | this, SLOT(setPicture(QImage))); 53 | 54 | setAutoFillBackground(true); 55 | 56 | QSizePolicy sizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); 57 | sizePolicy.setHeightForWidth(true); 58 | setSizePolicy(sizePolicy); 59 | 60 | media = new Phonon::MediaObject(this); 61 | Phonon::createPath(media, new Phonon::AudioOutput(Phonon::NotificationCategory, this)); 62 | } 63 | 64 | void videowidget::resize(const QSize& size) { 65 | if (Settings::aspectlock()) { 66 | QSize s(size); 67 | 68 | double aspect = Settings::width()/(double)Settings::height(); 69 | 70 | if (s.width()>s.height()*aspect) { 71 | s.setWidth(s.height()*aspect); 72 | } else { 73 | s.setHeight(s.width()/aspect); 74 | } 75 | 76 | QSize p = this->parentWidget()->size(); 77 | QWidget::setGeometry((p.width()-s.width())/2,(p.height()-s.height())/2, s.width(), s.height()); 78 | } else { 79 | QWidget::setGeometry(0, 0, size.width(), size.height()); 80 | //QWidget::resize(size); 81 | } 82 | } 83 | 84 | 85 | videowidget::~videowidget() { 86 | if (thread.isRunning()) 87 | thread.stop(); 88 | } 89 | 90 | void videowidget::takeImage() { 91 | storeImage = true; 92 | imageDelay = 3; 93 | } 94 | 95 | // draw picture from webcam (pixmap) on repaint 96 | void videowidget::paintEvent(QPaintEvent *) { 97 | QPainter* painter = new QPainter(this); 98 | painter->setPen(Qt::white); 99 | painter->setFont(QFont("Arial", 30)); 100 | painter->drawText(rect(), Qt::AlignCenter, i18n("Starting up webcam...")); 101 | 102 | painter->drawPixmap(this->rect(), pixmap); 103 | delete painter; 104 | } 105 | 106 | // image was transfered from capturethread to us - display it and, if requested, store 107 | void videowidget::setPicture(QImage i) { 108 | 109 | pixmap=QPixmap::fromImage(i); 110 | update(); 111 | 112 | if (storeImage) { 113 | imageDelay--; 114 | if (imageDelay) { 115 | return; 116 | } 117 | // we're taking a photo! 118 | QDir dir; 119 | dir.mkpath(Settings::photodir()); 120 | dir.setPath(Settings::photodir()); 121 | 122 | // play sound 123 | if (Settings::soundontaking()) { 124 | media->setCurrentSource(QUrl::fromLocalFile(QStandardPaths::locate(QStandardPaths::GenericDataLocation, "kamerka/camera_click.ogg"))); 125 | media->play(); 126 | } 127 | 128 | // check, which number comes next (so we're able to set correct file name) 129 | int c = 0; 130 | QString counterfilename; 131 | counterfilename = dir.absoluteFilePath(".counter"); 132 | 133 | QFile counterfile(counterfilename.toStdString().c_str()); 134 | if (counterfile.open(QIODevice::ReadOnly | QIODevice::Text)) { 135 | QTextStream counter(&counterfile); 136 | counter >> c; 137 | } 138 | else qWarning() << "Could not open .counter file!"; 139 | counterfile.close(); 140 | 141 | // determine file name 142 | QString imagepath; 143 | do { 144 | c++; 145 | imagepath = "image"; 146 | imagepath += QString::number(c); 147 | imagepath += ".png"; 148 | imagepath = dir.absoluteFilePath(imagepath); 149 | } while (QFile::exists(imagepath)); 150 | 151 | // store incremented value in counter file 152 | counterfile.open(QIODevice::WriteOnly); 153 | QTextStream counter(&counterfile); 154 | counter << c; 155 | counterfile.close(); 156 | 157 | // save image 158 | qDebug() << QString("%1").arg(imagepath); 159 | i.save(imagepath, "PNG"); 160 | 161 | 162 | 163 | // show taken photo and trigger animation in QML UI 164 | ui->rootContext()->setContextProperty("fileName", "file:"+imagepath); 165 | QMetaObject::invokeMethod(ui->rootObject(), "photoTaken"); 166 | 167 | // display notification 168 | if (Settings::notification()) { 169 | Notification* notification = new Notification("photoTaken", imagepath); 170 | QString s = i18n("Photo has been stored in file %1", imagepath); 171 | QPixmap pixmap = QPixmap::fromImage(i); 172 | notification->setText( s ); 173 | notification->setPixmap( pixmap ); 174 | QStringList list; 175 | list << i18n("Open") << i18n("Show in directory"); 176 | notification->setActions( list ); 177 | notification->setFlags(KNotification::SkipGrouping); 178 | connect(notification, SIGNAL(activated(unsigned int)), notification , SLOT(openFile(unsigned int)) ); 179 | notification->sendEvent(); 180 | } 181 | 182 | // we don't want to store next frames too 183 | storeImage=false; 184 | } 185 | } 186 | -------------------------------------------------------------------------------- /po/zh_CN.po: -------------------------------------------------------------------------------- 1 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER 2 | # This file is distributed under the same license as the PACKAGE package. 3 | # 4 | # zcj , 2014. 5 | msgid "" 6 | msgstr "" 7 | "Project-Id-Version: \n" 8 | "Report-Msgid-Bugs-To: dos@dosowisko.net\n" 9 | "POT-Creation-Date: 2019-04-10 21:34+0200\n" 10 | "PO-Revision-Date: 2011-10-28 12:53+0800\n" 11 | "Last-Translator: zcj \n" 12 | "Language-Team: Chinese Simplified \n" 13 | "Language: zh_CN\n" 14 | "MIME-Version: 1.0\n" 15 | "Content-Type: text/plain; charset=UTF-8\n" 16 | "Content-Transfer-Encoding: 8bit\n" 17 | "X-Generator: Lokalize 1.2\n" 18 | "Plural-Forms: nplurals=2; plural=n != 1;\n" 19 | 20 | #: src/kamerka.qml:248 21 | msgid "Take a photo" 22 | msgstr "拍照" 23 | 24 | #: src/kamerka.qml:263 src/settingsdialog.cpp:156 25 | msgid "Burst mode" 26 | msgstr "连拍" 27 | 28 | #: src/kamerka.qml:286 src/settingsdialog.cpp:144 29 | msgid "Self-timer" 30 | msgstr "自拍" 31 | 32 | #: src/kamerka.qml:302 33 | msgid "Hide effects" 34 | msgstr "隐藏效果" 35 | 36 | #: src/kamerka.qml:302 37 | msgid "Show effects" 38 | msgstr "显示效果" 39 | 40 | #: src/kamerka.qml:318 41 | msgid "Open directory" 42 | msgstr "打开目录" 43 | 44 | #: src/kamerka.qml:333 45 | msgid "Configure" 46 | msgstr "设置" 47 | 48 | #: src/kamerka.qml:537 49 | msgid "No Effect" 50 | msgstr "无效果" 51 | 52 | #: src/kamerka.qml:553 53 | msgid "Grey" 54 | msgstr "灰度" 55 | 56 | #: src/kamerka.qml:569 57 | msgid "Invert" 58 | msgstr "底片" 59 | 60 | #: src/kamerka.qml:585 61 | msgid "Equalize" 62 | msgstr "均衡" 63 | 64 | #: src/kamerka.qml:601 65 | msgid "Smurf" 66 | msgstr "蓝精灵" 67 | 68 | #: src/kamerka.qml:616 69 | msgid "Implode" 70 | msgstr "汇聚" 71 | 72 | #: src/kamerka.qml:631 73 | msgid "Explode" 74 | msgstr "发散" 75 | 76 | #: src/kamerka.qml:646 77 | msgid "Charcoal" 78 | msgstr "炭笔" 79 | 80 | #: src/kamerka.qml:661 81 | msgid "Edge" 82 | msgstr "像缘" 83 | 84 | #: src/kamerka.qml:676 85 | msgid "Emboss" 86 | msgstr "浮雕" 87 | 88 | #: src/kamerka.qml:691 89 | msgid "Swirl" 90 | msgstr "漩涡" 91 | 92 | #: src/kamerka.qml:706 93 | msgid "Oil Paint" 94 | msgstr "油画" 95 | 96 | #: src/kamerka.qml:721 97 | msgid "Wave" 98 | msgstr "波浪" 99 | 100 | #: src/main.cpp:37 101 | msgid "Kamerka" 102 | msgstr "Kamerka" 103 | 104 | #: src/main.cpp:38 105 | msgid "Simple photo taking application with fancy animated interface" 106 | msgstr "一个漂亮动画界面的简单拍照程序" 107 | 108 | #: src/main.cpp:39 109 | #, fuzzy 110 | msgid "Copyright (C) 2011-2014 Sebastian Krzyszkowiak" 111 | msgstr "Copyright (c) 2011 Sebastian Krzyszkowiak" 112 | 113 | #: src/mainwindow.cpp:46 114 | msgid "i18n() takes at least one argument" 115 | msgstr "i18n() 至少需要一个参数" 116 | 117 | #: src/mainwindow.cpp:64 118 | msgid "Could not load QML interface!" 119 | msgstr "不能载入 QML 界面!" 120 | 121 | #: src/mainwindow.cpp:64 src/mainwindow.cpp:115 src/mainwindow.cpp:138 122 | msgid "Error" 123 | msgstr "错误" 124 | 125 | #: src/mainwindow.cpp:111 src/mainwindow.cpp:115 src/mainwindow.cpp:138 126 | msgid "Could not connect to V4L device!" 127 | msgstr "不能连接到 V4L 设备!" 128 | 129 | #: src/mainwindow.cpp:157 130 | msgid "" 131 | "Requested resolution (%1x%2) was not available. Driver used %3x%4 instead.\n" 132 | "Please check your configuration." 133 | msgstr "" 134 | "请求的分辨率 (%1x%2) 不可用。驱动程序使用 %3x%4 代替。\n" 135 | "请检查您的配置。" 136 | 137 | #: src/settingsdialog.cpp:43 138 | msgid "Selected path does not exists. Do you want to create it?" 139 | msgstr "选择的路径不存在。您想建立它吗?" 140 | 141 | #: src/settingsdialog.cpp:60 142 | msgid "Device node:" 143 | msgstr "设备节点:" 144 | 145 | #: src/settingsdialog.cpp:67 146 | msgid "x" 147 | msgstr "x" 148 | 149 | #: src/settingsdialog.cpp:72 150 | msgid "px" 151 | msgstr "px" 152 | 153 | #: src/settingsdialog.cpp:73 154 | msgid "Resolution:" 155 | msgstr "分辨率:" 156 | 157 | #: src/settingsdialog.cpp:78 158 | msgid "Disabled" 159 | msgstr "关闭" 160 | 161 | #: src/settingsdialog.cpp:79 162 | msgid " fps" 163 | msgstr "fps" 164 | 165 | #: src/settingsdialog.cpp:81 166 | msgid "Framerate limit:" 167 | msgstr "帧率限制:" 168 | 169 | #: src/settingsdialog.cpp:83 170 | msgid "Lock aspect ratio" 171 | msgstr "锁定纵横比" 172 | 173 | #: src/settingsdialog.cpp:86 174 | msgid "Enhance contrast" 175 | msgstr "增强对比度" 176 | 177 | #: src/settingsdialog.cpp:89 178 | msgid "Mirror output" 179 | msgstr "镜面输出" 180 | 181 | #: src/settingsdialog.cpp:92 182 | msgid "Flip output" 183 | msgstr "翻转输出" 184 | 185 | #: src/settingsdialog.cpp:97 186 | #, fuzzy 187 | msgid "Image Settings" 188 | msgstr "摄像头设置" 189 | 190 | #: src/settingsdialog.cpp:107 191 | msgid "Brightness:" 192 | msgstr "" 193 | 194 | #: src/settingsdialog.cpp:116 195 | msgid "Contrast:" 196 | msgstr "" 197 | 198 | #: src/settingsdialog.cpp:125 199 | msgid "Saturation:" 200 | msgstr "" 201 | 202 | #: src/settingsdialog.cpp:134 203 | msgid "Hue:" 204 | msgstr "" 205 | 206 | #: src/settingsdialog.cpp:138 207 | msgid "Camera" 208 | msgstr "摄像头" 209 | 210 | #: src/settingsdialog.cpp:138 211 | msgid "Camera settings" 212 | msgstr "摄像头设置" 213 | 214 | #: src/settingsdialog.cpp:149 src/settingsdialog.cpp:167 215 | msgid " seconds" 216 | msgstr "秒" 217 | 218 | #: src/settingsdialog.cpp:152 219 | msgid "Self-timer timeout:" 220 | msgstr "自拍延时" 221 | 222 | #: src/settingsdialog.cpp:163 223 | msgid "Number of photos:" 224 | msgstr "照片数量" 225 | 226 | #: src/settingsdialog.cpp:170 227 | msgid "Delay between photos:" 228 | msgstr "连拍间隔" 229 | 230 | #: src/settingsdialog.cpp:174 231 | msgid "Capture" 232 | msgstr "拍照" 233 | 234 | #: src/settingsdialog.cpp:182 235 | msgid "Use default pictures directory" 236 | msgstr "使用默认的图片目录" 237 | 238 | #: src/settingsdialog.cpp:189 239 | msgid "Use subdirectory:" 240 | msgstr "使用子目录:" 241 | 242 | #: src/settingsdialog.cpp:202 243 | msgid "Photo directory:" 244 | msgstr "照片目录:" 245 | 246 | #: src/settingsdialog.cpp:204 247 | msgid "Storage" 248 | msgstr "存储" 249 | 250 | #: src/settingsdialog.cpp:204 251 | msgid "Photo storage" 252 | msgstr "照片存储" 253 | 254 | #: src/settingsdialog.cpp:210 255 | msgid "Play sound on taking photo" 256 | msgstr "拍照时播放音效" 257 | 258 | #: src/settingsdialog.cpp:213 259 | msgid "Play timer sounds" 260 | msgstr "播放计时音效" 261 | 262 | #: src/settingsdialog.cpp:216 263 | msgid "Show notification on taking photo" 264 | msgstr "拍照时显示通知" 265 | 266 | #: src/settingsdialog.cpp:220 267 | msgid "Behaviour" 268 | msgstr "行为" 269 | 270 | #: src/videowidget.cpp:100 271 | msgid "Starting up webcam..." 272 | msgstr "启动摄像头..." 273 | 274 | #: src/videowidget.cpp:170 275 | msgid "Photo has been stored in file %1" 276 | msgstr "照片已存储到文件 %1" 277 | 278 | #: src/videowidget.cpp:175 279 | msgid "Open" 280 | msgstr "" 281 | 282 | #: src/videowidget.cpp:175 283 | msgid "Show in directory" 284 | msgstr "在目录中显示" 285 | 286 | #: tools/rc.cpp:1 rc.cpp:1 287 | msgctxt "NAME OF TRANSLATORS" 288 | msgid "Your names" 289 | msgstr "zcj" 290 | 291 | #: tools/rc.cpp:2 rc.cpp:2 292 | msgctxt "EMAIL OF TRANSLATORS" 293 | msgid "Your emails" 294 | msgstr "zcjsjz@gmail.com" 295 | 296 | #~ msgid "Open in GIMP" 297 | #~ msgstr "用GIMP打开" 298 | 299 | #~ msgid "Open in Inkscape" 300 | #~ msgstr "用Inkscape打开" 301 | -------------------------------------------------------------------------------- /po/zh_TW.po: -------------------------------------------------------------------------------- 1 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER 2 | # This file is distributed under the same license as the PACKAGE package. 3 | # 4 | # Max Lin , 2011. 5 | msgid "" 6 | msgstr "" 7 | "Project-Id-Version: \n" 8 | "Report-Msgid-Bugs-To: dos@dosowisko.net\n" 9 | "POT-Creation-Date: 2019-04-10 21:34+0200\n" 10 | "PO-Revision-Date: 2011-10-28 12:53+0800\n" 11 | "Last-Translator: Max Lin \n" 12 | "Language-Team: Chinese Traditional \n" 13 | "Language: zh_TW\n" 14 | "MIME-Version: 1.0\n" 15 | "Content-Type: text/plain; charset=UTF-8\n" 16 | "Content-Transfer-Encoding: 8bit\n" 17 | "X-Generator: Lokalize 1.2\n" 18 | "Plural-Forms: nplurals=2; plural=n != 1;\n" 19 | 20 | #: src/kamerka.qml:248 21 | msgid "Take a photo" 22 | msgstr "拍張照片" 23 | 24 | #: src/kamerka.qml:263 src/settingsdialog.cpp:156 25 | msgid "Burst mode" 26 | msgstr "" 27 | 28 | #: src/kamerka.qml:286 src/settingsdialog.cpp:144 29 | msgid "Self-timer" 30 | msgstr "自拍" 31 | 32 | #: src/kamerka.qml:302 33 | msgid "Hide effects" 34 | msgstr "" 35 | 36 | #: src/kamerka.qml:302 37 | msgid "Show effects" 38 | msgstr "" 39 | 40 | #: src/kamerka.qml:318 41 | msgid "Open directory" 42 | msgstr "開啟目錄" 43 | 44 | #: src/kamerka.qml:333 45 | msgid "Configure" 46 | msgstr "配置" 47 | 48 | #: src/kamerka.qml:537 49 | msgid "No Effect" 50 | msgstr "" 51 | 52 | #: src/kamerka.qml:553 53 | msgid "Grey" 54 | msgstr "" 55 | 56 | #: src/kamerka.qml:569 57 | msgid "Invert" 58 | msgstr "" 59 | 60 | #: src/kamerka.qml:585 61 | msgid "Equalize" 62 | msgstr "" 63 | 64 | #: src/kamerka.qml:601 65 | msgid "Smurf" 66 | msgstr "" 67 | 68 | #: src/kamerka.qml:616 69 | msgid "Implode" 70 | msgstr "" 71 | 72 | #: src/kamerka.qml:631 73 | msgid "Explode" 74 | msgstr "" 75 | 76 | #: src/kamerka.qml:646 77 | msgid "Charcoal" 78 | msgstr "" 79 | 80 | #: src/kamerka.qml:661 81 | msgid "Edge" 82 | msgstr "" 83 | 84 | #: src/kamerka.qml:676 85 | msgid "Emboss" 86 | msgstr "" 87 | 88 | #: src/kamerka.qml:691 89 | msgid "Swirl" 90 | msgstr "" 91 | 92 | #: src/kamerka.qml:706 93 | msgid "Oil Paint" 94 | msgstr "" 95 | 96 | #: src/kamerka.qml:721 97 | msgid "Wave" 98 | msgstr "" 99 | 100 | #: src/main.cpp:37 101 | msgid "Kamerka" 102 | msgstr "Kamerka" 103 | 104 | #: src/main.cpp:38 105 | msgid "Simple photo taking application with fancy animated interface" 106 | msgstr "簡易的拍照應用程式與花俏的動畫介面" 107 | 108 | #: src/main.cpp:39 109 | #, fuzzy 110 | msgid "Copyright (C) 2011-2014 Sebastian Krzyszkowiak" 111 | msgstr "Copyright (c) 2011 Sebastian Krzyszkowiak" 112 | 113 | #: src/mainwindow.cpp:46 114 | msgid "i18n() takes at least one argument" 115 | msgstr "i18n() 至少需要一個參數" 116 | 117 | #: src/mainwindow.cpp:64 118 | msgid "Could not load QML interface!" 119 | msgstr "不能載入 QML 介面!" 120 | 121 | #: src/mainwindow.cpp:64 src/mainwindow.cpp:115 src/mainwindow.cpp:138 122 | msgid "Error" 123 | msgstr "錯誤" 124 | 125 | #: src/mainwindow.cpp:111 src/mainwindow.cpp:115 src/mainwindow.cpp:138 126 | msgid "Could not connect to V4L device!" 127 | msgstr "不能連結到 V4L 設備!" 128 | 129 | #: src/mainwindow.cpp:157 130 | msgid "" 131 | "Requested resolution (%1x%2) was not available. Driver used %3x%4 instead.\n" 132 | "Please check your configuration." 133 | msgstr "" 134 | "請求的解析度 (%1x%2) 不可用。驅動程式使用 %3x%4 代替。\n" 135 | "請檢查您的配置。" 136 | 137 | #: src/settingsdialog.cpp:43 138 | msgid "Selected path does not exists. Do you want to create it?" 139 | msgstr "選擇的路徑不存在。您想建立它嗎?" 140 | 141 | #: src/settingsdialog.cpp:60 142 | msgid "Device node:" 143 | msgstr "設備節點:" 144 | 145 | #: src/settingsdialog.cpp:67 146 | msgid "x" 147 | msgstr "x" 148 | 149 | #: src/settingsdialog.cpp:72 150 | msgid "px" 151 | msgstr "px" 152 | 153 | #: src/settingsdialog.cpp:73 154 | msgid "Resolution:" 155 | msgstr "解析度:" 156 | 157 | #: src/settingsdialog.cpp:78 158 | msgid "Disabled" 159 | msgstr "關閉" 160 | 161 | #: src/settingsdialog.cpp:79 162 | msgid " fps" 163 | msgstr "fps" 164 | 165 | #: src/settingsdialog.cpp:81 166 | msgid "Framerate limit:" 167 | msgstr "幀率限制:" 168 | 169 | #: src/settingsdialog.cpp:83 170 | msgid "Lock aspect ratio" 171 | msgstr "" 172 | 173 | #: src/settingsdialog.cpp:86 174 | msgid "Enhance contrast" 175 | msgstr "" 176 | 177 | #: src/settingsdialog.cpp:89 178 | msgid "Mirror output" 179 | msgstr "" 180 | 181 | #: src/settingsdialog.cpp:92 182 | msgid "Flip output" 183 | msgstr "" 184 | 185 | #: src/settingsdialog.cpp:97 186 | #, fuzzy 187 | msgid "Image Settings" 188 | msgstr "攝影機設定" 189 | 190 | #: src/settingsdialog.cpp:107 191 | msgid "Brightness:" 192 | msgstr "" 193 | 194 | #: src/settingsdialog.cpp:116 195 | msgid "Contrast:" 196 | msgstr "" 197 | 198 | #: src/settingsdialog.cpp:125 199 | msgid "Saturation:" 200 | msgstr "" 201 | 202 | #: src/settingsdialog.cpp:134 203 | msgid "Hue:" 204 | msgstr "" 205 | 206 | #: src/settingsdialog.cpp:138 207 | msgid "Camera" 208 | msgstr "攝影機" 209 | 210 | #: src/settingsdialog.cpp:138 211 | msgid "Camera settings" 212 | msgstr "攝影機設定" 213 | 214 | #: src/settingsdialog.cpp:149 src/settingsdialog.cpp:167 215 | msgid " seconds" 216 | msgstr "" 217 | 218 | #: src/settingsdialog.cpp:152 219 | #, fuzzy 220 | msgid "Self-timer timeout:" 221 | msgstr "自拍" 222 | 223 | #: src/settingsdialog.cpp:163 224 | msgid "Number of photos:" 225 | msgstr "" 226 | 227 | #: src/settingsdialog.cpp:170 228 | msgid "Delay between photos:" 229 | msgstr "" 230 | 231 | #: src/settingsdialog.cpp:174 232 | msgid "Capture" 233 | msgstr "" 234 | 235 | #: src/settingsdialog.cpp:182 236 | msgid "Use default pictures directory" 237 | msgstr "使用預設的圖片目錄" 238 | 239 | #: src/settingsdialog.cpp:189 240 | msgid "Use subdirectory:" 241 | msgstr "使用子目錄:" 242 | 243 | #: src/settingsdialog.cpp:202 244 | msgid "Photo directory:" 245 | msgstr "照片目錄:" 246 | 247 | #: src/settingsdialog.cpp:204 248 | msgid "Storage" 249 | msgstr "儲存" 250 | 251 | #: src/settingsdialog.cpp:204 252 | msgid "Photo storage" 253 | msgstr "照片儲存" 254 | 255 | #: src/settingsdialog.cpp:210 256 | msgid "Play sound on taking photo" 257 | msgstr "拍照時播放音效" 258 | 259 | #: src/settingsdialog.cpp:213 260 | msgid "Play timer sounds" 261 | msgstr "播放計時音效" 262 | 263 | #: src/settingsdialog.cpp:216 264 | msgid "Show notification on taking photo" 265 | msgstr "拍照時顯示通知" 266 | 267 | #: src/settingsdialog.cpp:220 268 | msgid "Behaviour" 269 | msgstr "行為" 270 | 271 | #: src/videowidget.cpp:100 272 | msgid "Starting up webcam..." 273 | msgstr "啟動網路攝影機..." 274 | 275 | #: src/videowidget.cpp:170 276 | msgid "Photo has been stored in file %1" 277 | msgstr "照片已儲存在檔案 %1" 278 | 279 | #: src/videowidget.cpp:175 280 | msgid "Open" 281 | msgstr "" 282 | 283 | #: src/videowidget.cpp:175 284 | msgid "Show in directory" 285 | msgstr "在目錄中顯示" 286 | 287 | #: tools/rc.cpp:1 rc.cpp:1 288 | msgctxt "NAME OF TRANSLATORS" 289 | msgid "Your names" 290 | msgstr "Max Lin" 291 | 292 | #: tools/rc.cpp:2 rc.cpp:2 293 | msgctxt "EMAIL OF TRANSLATORS" 294 | msgid "Your emails" 295 | msgstr "max7442@gmail.com" 296 | 297 | #~ msgid "Open in GIMP" 298 | #~ msgstr "在GIMP中開啟" 299 | 300 | #~ msgid "Open in Inkscape" 301 | #~ msgstr "在Inkscape中開啟" 302 | 303 | #~ msgid "Less" 304 | #~ msgstr "顯示較少" 305 | 306 | #~ msgid "More" 307 | #~ msgstr "顯示更多" 308 | -------------------------------------------------------------------------------- /po/pt.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Project-Id-Version: kamerka\n" 4 | "Report-Msgid-Bugs-To: dos@dosowisko.net\n" 5 | "POT-Creation-Date: 2019-04-10 21:34+0200\n" 6 | "PO-Revision-Date: 2012-10-23 03:29-0300\n" 7 | "Last-Translator: Jurasampaio \n" 8 | "Language-Team: Jurasampaio \n" 9 | "Language: pt\n" 10 | "MIME-Version: 1.0\n" 11 | "Content-Type: text/plain; charset=UTF-8\n" 12 | "Content-Transfer-Encoding: 8bit\n" 13 | "X-Generator: Lokalize 1.2\n" 14 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 15 | "X-Poedit-Language: Portuguese\n" 16 | "X-Poedit-Country: BRAZIL\n" 17 | 18 | #: src/kamerka.qml:248 19 | msgid "Take a photo" 20 | msgstr "Tirar uma foto" 21 | 22 | #: src/kamerka.qml:263 src/settingsdialog.cpp:156 23 | msgid "Burst mode" 24 | msgstr "" 25 | 26 | #: src/kamerka.qml:286 src/settingsdialog.cpp:144 27 | msgid "Self-timer" 28 | msgstr "Temporizador" 29 | 30 | #: src/kamerka.qml:302 31 | msgid "Hide effects" 32 | msgstr "Esconder efeitos" 33 | 34 | #: src/kamerka.qml:302 35 | msgid "Show effects" 36 | msgstr "Mostrar efeitos" 37 | 38 | #: src/kamerka.qml:318 39 | msgid "Open directory" 40 | msgstr "Abrir diretorio" 41 | 42 | #: src/kamerka.qml:333 43 | msgid "Configure" 44 | msgstr "Configurar" 45 | 46 | #: src/kamerka.qml:537 47 | msgid "No Effect" 48 | msgstr "Sem efeitos" 49 | 50 | #: src/kamerka.qml:553 51 | msgid "Grey" 52 | msgstr "Cinza" 53 | 54 | #: src/kamerka.qml:569 55 | msgid "Invert" 56 | msgstr "Inverter" 57 | 58 | #: src/kamerka.qml:585 59 | msgid "Equalize" 60 | msgstr "" 61 | 62 | #: src/kamerka.qml:601 63 | msgid "Smurf" 64 | msgstr "Smurf" 65 | 66 | #: src/kamerka.qml:616 67 | msgid "Implode" 68 | msgstr "" 69 | 70 | #: src/kamerka.qml:631 71 | msgid "Explode" 72 | msgstr "" 73 | 74 | #: src/kamerka.qml:646 75 | msgid "Charcoal" 76 | msgstr "" 77 | 78 | #: src/kamerka.qml:661 79 | msgid "Edge" 80 | msgstr "" 81 | 82 | #: src/kamerka.qml:676 83 | msgid "Emboss" 84 | msgstr "" 85 | 86 | #: src/kamerka.qml:691 87 | msgid "Swirl" 88 | msgstr "" 89 | 90 | #: src/kamerka.qml:706 91 | msgid "Oil Paint" 92 | msgstr "" 93 | 94 | #: src/kamerka.qml:721 95 | msgid "Wave" 96 | msgstr "" 97 | 98 | #: src/main.cpp:37 99 | msgid "Kamerka" 100 | msgstr "Kamerka" 101 | 102 | #: src/main.cpp:38 103 | msgid "Simple photo taking application with fancy animated interface" 104 | msgstr "Simples foto com aplicação de fantasia animada" 105 | 106 | #: src/main.cpp:39 107 | #, fuzzy 108 | msgid "Copyright (C) 2011-2014 Sebastian Krzyszkowiak" 109 | msgstr "Copyright (c) 2011 Sebastian Krzyszkowiak" 110 | 111 | #: src/mainwindow.cpp:46 112 | msgid "i18n() takes at least one argument" 113 | msgstr "i18n() requer ao menos um argumento" 114 | 115 | #: src/mainwindow.cpp:64 116 | msgid "Could not load QML interface!" 117 | msgstr "¡Não foi possível carregar a interface QML!" 118 | 119 | #: src/mainwindow.cpp:64 src/mainwindow.cpp:115 src/mainwindow.cpp:138 120 | msgid "Error" 121 | msgstr "Erro" 122 | 123 | #: src/mainwindow.cpp:111 src/mainwindow.cpp:115 src/mainwindow.cpp:138 124 | msgid "Could not connect to V4L device!" 125 | msgstr "¡Não foi possível se conectar ao dispositivo V4L!" 126 | 127 | #: src/mainwindow.cpp:157 128 | msgid "" 129 | "Requested resolution (%1x%2) was not available. Driver used %3x%4 instead.\n" 130 | "Please check your configuration." 131 | msgstr "" 132 | "A resolução solicitada (%1x%2) não está disponivel. O driver usará %3x%4.\n" 133 | "Compruebe la configuración." 134 | 135 | #: src/settingsdialog.cpp:43 136 | msgid "Selected path does not exists. Do you want to create it?" 137 | msgstr "O caminho escolhido não existe. Deseja criar?" 138 | 139 | #: src/settingsdialog.cpp:60 140 | msgid "Device node:" 141 | msgstr "Dispositivo:" 142 | 143 | #: src/settingsdialog.cpp:67 144 | msgid "x" 145 | msgstr "x" 146 | 147 | #: src/settingsdialog.cpp:72 148 | msgid "px" 149 | msgstr "px" 150 | 151 | #: src/settingsdialog.cpp:73 152 | msgid "Resolution:" 153 | msgstr "Resolução:" 154 | 155 | #: src/settingsdialog.cpp:78 156 | msgid "Disabled" 157 | msgstr "Desabilitado" 158 | 159 | #: src/settingsdialog.cpp:79 160 | msgid " fps" 161 | msgstr " fps" 162 | 163 | #: src/settingsdialog.cpp:81 164 | msgid "Framerate limit:" 165 | msgstr "Limite de frames" 166 | 167 | #: src/settingsdialog.cpp:83 168 | msgid "Lock aspect ratio" 169 | msgstr "Bloquear proporção" 170 | 171 | #: src/settingsdialog.cpp:86 172 | msgid "Enhance contrast" 173 | msgstr "" 174 | 175 | #: src/settingsdialog.cpp:89 176 | msgid "Mirror output" 177 | msgstr "Saída espelhada" 178 | 179 | #: src/settingsdialog.cpp:92 180 | msgid "Flip output" 181 | msgstr "Saida fip" 182 | 183 | #: src/settingsdialog.cpp:97 184 | #, fuzzy 185 | msgid "Image Settings" 186 | msgstr "Ajustes de cámara" 187 | 188 | #: src/settingsdialog.cpp:107 189 | msgid "Brightness:" 190 | msgstr "" 191 | 192 | #: src/settingsdialog.cpp:116 193 | msgid "Contrast:" 194 | msgstr "" 195 | 196 | #: src/settingsdialog.cpp:125 197 | msgid "Saturation:" 198 | msgstr "" 199 | 200 | #: src/settingsdialog.cpp:134 201 | msgid "Hue:" 202 | msgstr "" 203 | 204 | #: src/settingsdialog.cpp:138 205 | msgid "Camera" 206 | msgstr "Cámara" 207 | 208 | #: src/settingsdialog.cpp:138 209 | msgid "Camera settings" 210 | msgstr "Ajustes de cámara" 211 | 212 | #: src/settingsdialog.cpp:149 src/settingsdialog.cpp:167 213 | msgid " seconds" 214 | msgstr "" 215 | 216 | #: src/settingsdialog.cpp:152 217 | #, fuzzy 218 | msgid "Self-timer timeout:" 219 | msgstr "Temporizador" 220 | 221 | #: src/settingsdialog.cpp:163 222 | msgid "Number of photos:" 223 | msgstr "" 224 | 225 | #: src/settingsdialog.cpp:170 226 | msgid "Delay between photos:" 227 | msgstr "" 228 | 229 | #: src/settingsdialog.cpp:174 230 | msgid "Capture" 231 | msgstr "" 232 | 233 | #: src/settingsdialog.cpp:182 234 | msgid "Use default pictures directory" 235 | msgstr "Use o diretório de imagens padrão" 236 | 237 | #: src/settingsdialog.cpp:189 238 | msgid "Use subdirectory:" 239 | msgstr "Usar subdiretório:" 240 | 241 | #: src/settingsdialog.cpp:202 242 | msgid "Photo directory:" 243 | msgstr "Diretório de imagens:" 244 | 245 | #: src/settingsdialog.cpp:204 246 | msgid "Storage" 247 | msgstr "Armazenamento" 248 | 249 | #: src/settingsdialog.cpp:204 250 | msgid "Photo storage" 251 | msgstr "Armazenamento de imágenes" 252 | 253 | #: src/settingsdialog.cpp:210 254 | msgid "Play sound on taking photo" 255 | msgstr "Reproduzir som ao tirar uma foto" 256 | 257 | #: src/settingsdialog.cpp:213 258 | msgid "Play timer sounds" 259 | msgstr "Reproduzir sons temporizados" 260 | 261 | #: src/settingsdialog.cpp:216 262 | msgid "Show notification on taking photo" 263 | msgstr "Mostrar notificação ao tomar foto" 264 | 265 | #: src/settingsdialog.cpp:220 266 | msgid "Behaviour" 267 | msgstr "Comportamento" 268 | 269 | #: src/videowidget.cpp:100 270 | msgid "Starting up webcam..." 271 | msgstr "Iniciando a webcam..." 272 | 273 | #: src/videowidget.cpp:170 274 | msgid "Photo has been stored in file %1" 275 | msgstr "Foto guardada como %1" 276 | 277 | #: src/videowidget.cpp:175 278 | msgid "Open" 279 | msgstr "" 280 | 281 | #: src/videowidget.cpp:175 282 | msgid "Show in directory" 283 | msgstr "Mostrar no diretório" 284 | 285 | #: tools/rc.cpp:1 rc.cpp:1 286 | msgctxt "NAME OF TRANSLATORS" 287 | msgid "Your names" 288 | msgstr "Seus nomes" 289 | 290 | #: tools/rc.cpp:2 rc.cpp:2 291 | msgctxt "EMAIL OF TRANSLATORS" 292 | msgid "Your emails" 293 | msgstr "Seu email" 294 | 295 | #~ msgid "Open in GIMP" 296 | #~ msgstr "Abrir com GIMP" 297 | 298 | #~ msgid "Open in Inkscape" 299 | #~ msgstr "Abrir com Inkscape" 300 | 301 | #~ msgid "Mono" 302 | #~ msgstr "Mono" 303 | 304 | #~ msgid "Less" 305 | #~ msgstr "Menos" 306 | 307 | #~ msgid "More" 308 | #~ msgstr "Mais" 309 | -------------------------------------------------------------------------------- /po/nl.po: -------------------------------------------------------------------------------- 1 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER 2 | # This file is distributed under the same license as the PACKAGE package. 3 | # 4 | # Kenny Verstraete , 2011. 5 | msgid "" 6 | msgstr "" 7 | "Project-Id-Version: \n" 8 | "Report-Msgid-Bugs-To: dos@dosowisko.net\n" 9 | "POT-Creation-Date: 2019-04-10 21:34+0200\n" 10 | "PO-Revision-Date: 2011-08-07 23:05+0200\n" 11 | "Last-Translator: Kenny Verstraete \n" 12 | "Language-Team: Dutch \n" 13 | "Language: nl\n" 14 | "MIME-Version: 1.0\n" 15 | "Content-Type: text/plain; charset=UTF-8\n" 16 | "Content-Transfer-Encoding: 8bit\n" 17 | "X-Generator: Lokalize 1.2\n" 18 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 19 | 20 | #: src/kamerka.qml:248 21 | msgid "Take a photo" 22 | msgstr "Neem een foto" 23 | 24 | #: src/kamerka.qml:263 src/settingsdialog.cpp:156 25 | msgid "Burst mode" 26 | msgstr "" 27 | 28 | #: src/kamerka.qml:286 src/settingsdialog.cpp:144 29 | msgid "Self-timer" 30 | msgstr "Zelfontspanner" 31 | 32 | #: src/kamerka.qml:302 33 | msgid "Hide effects" 34 | msgstr "" 35 | 36 | #: src/kamerka.qml:302 37 | msgid "Show effects" 38 | msgstr "" 39 | 40 | #: src/kamerka.qml:318 41 | msgid "Open directory" 42 | msgstr "Map openen" 43 | 44 | #: src/kamerka.qml:333 45 | msgid "Configure" 46 | msgstr "Configureer" 47 | 48 | #: src/kamerka.qml:537 49 | msgid "No Effect" 50 | msgstr "" 51 | 52 | #: src/kamerka.qml:553 53 | msgid "Grey" 54 | msgstr "" 55 | 56 | #: src/kamerka.qml:569 57 | msgid "Invert" 58 | msgstr "" 59 | 60 | #: src/kamerka.qml:585 61 | msgid "Equalize" 62 | msgstr "" 63 | 64 | #: src/kamerka.qml:601 65 | msgid "Smurf" 66 | msgstr "" 67 | 68 | #: src/kamerka.qml:616 69 | msgid "Implode" 70 | msgstr "" 71 | 72 | #: src/kamerka.qml:631 73 | msgid "Explode" 74 | msgstr "" 75 | 76 | #: src/kamerka.qml:646 77 | msgid "Charcoal" 78 | msgstr "" 79 | 80 | #: src/kamerka.qml:661 81 | msgid "Edge" 82 | msgstr "" 83 | 84 | #: src/kamerka.qml:676 85 | msgid "Emboss" 86 | msgstr "" 87 | 88 | #: src/kamerka.qml:691 89 | msgid "Swirl" 90 | msgstr "" 91 | 92 | #: src/kamerka.qml:706 93 | msgid "Oil Paint" 94 | msgstr "" 95 | 96 | #: src/kamerka.qml:721 97 | msgid "Wave" 98 | msgstr "" 99 | 100 | #: src/main.cpp:37 101 | msgid "Kamerka" 102 | msgstr "Kamerka" 103 | 104 | #: src/main.cpp:38 105 | msgid "Simple photo taking application with fancy animated interface" 106 | msgstr "Simpele toepassing om foto's te nemen met een geanimeerde interface" 107 | 108 | #: src/main.cpp:39 109 | #, fuzzy 110 | msgid "Copyright (C) 2011-2014 Sebastian Krzyszkowiak" 111 | msgstr "Copyright (c) 2011 Sebastian Krzyszkowiak" 112 | 113 | #: src/mainwindow.cpp:46 114 | msgid "i18n() takes at least one argument" 115 | msgstr "i18n() neemt op zijn minst één argument" 116 | 117 | #: src/mainwindow.cpp:64 118 | msgid "Could not load QML interface!" 119 | msgstr "Kon QML interface niet laden!" 120 | 121 | #: src/mainwindow.cpp:64 src/mainwindow.cpp:115 src/mainwindow.cpp:138 122 | msgid "Error" 123 | msgstr "Fout" 124 | 125 | #: src/mainwindow.cpp:111 src/mainwindow.cpp:115 src/mainwindow.cpp:138 126 | msgid "Could not connect to V4L device!" 127 | msgstr "Kon niet verbinden met V4L apparaat!" 128 | 129 | #: src/mainwindow.cpp:157 130 | msgid "" 131 | "Requested resolution (%1x%2) was not available. Driver used %3x%4 instead.\n" 132 | "Please check your configuration." 133 | msgstr "" 134 | "Gevraagde resolutie (%1x%2) was niet beschikbaar. De driver gebruikte %3x%4 " 135 | "in de plaats.\n" 136 | "Kijk uw configuratie na." 137 | 138 | #: src/settingsdialog.cpp:43 139 | msgid "Selected path does not exists. Do you want to create it?" 140 | msgstr "Geselecteerde pad bestaat niet. Wilt u het nu aanmaken?" 141 | 142 | #: src/settingsdialog.cpp:60 143 | msgid "Device node:" 144 | msgstr "Aankoppelingspunt apparaat:" 145 | 146 | #: src/settingsdialog.cpp:67 147 | msgid "x" 148 | msgstr "x" 149 | 150 | #: src/settingsdialog.cpp:72 151 | msgid "px" 152 | msgstr "px" 153 | 154 | #: src/settingsdialog.cpp:73 155 | msgid "Resolution:" 156 | msgstr "Resolutie:" 157 | 158 | #: src/settingsdialog.cpp:78 159 | msgid "Disabled" 160 | msgstr "Uitgeschakeld" 161 | 162 | #: src/settingsdialog.cpp:79 163 | msgid " fps" 164 | msgstr " fps" 165 | 166 | #: src/settingsdialog.cpp:81 167 | msgid "Framerate limit:" 168 | msgstr "Framerate limiet:" 169 | 170 | #: src/settingsdialog.cpp:83 171 | msgid "Lock aspect ratio" 172 | msgstr "" 173 | 174 | #: src/settingsdialog.cpp:86 175 | msgid "Enhance contrast" 176 | msgstr "" 177 | 178 | #: src/settingsdialog.cpp:89 179 | msgid "Mirror output" 180 | msgstr "" 181 | 182 | #: src/settingsdialog.cpp:92 183 | msgid "Flip output" 184 | msgstr "" 185 | 186 | #: src/settingsdialog.cpp:97 187 | #, fuzzy 188 | msgid "Image Settings" 189 | msgstr "Camera instellingen" 190 | 191 | #: src/settingsdialog.cpp:107 192 | msgid "Brightness:" 193 | msgstr "" 194 | 195 | #: src/settingsdialog.cpp:116 196 | msgid "Contrast:" 197 | msgstr "" 198 | 199 | #: src/settingsdialog.cpp:125 200 | msgid "Saturation:" 201 | msgstr "" 202 | 203 | #: src/settingsdialog.cpp:134 204 | msgid "Hue:" 205 | msgstr "" 206 | 207 | #: src/settingsdialog.cpp:138 208 | msgid "Camera" 209 | msgstr "Camera" 210 | 211 | #: src/settingsdialog.cpp:138 212 | msgid "Camera settings" 213 | msgstr "Camera instellingen" 214 | 215 | #: src/settingsdialog.cpp:149 src/settingsdialog.cpp:167 216 | msgid " seconds" 217 | msgstr "" 218 | 219 | #: src/settingsdialog.cpp:152 220 | #, fuzzy 221 | msgid "Self-timer timeout:" 222 | msgstr "Zelfontspanner" 223 | 224 | #: src/settingsdialog.cpp:163 225 | msgid "Number of photos:" 226 | msgstr "" 227 | 228 | #: src/settingsdialog.cpp:170 229 | msgid "Delay between photos:" 230 | msgstr "" 231 | 232 | #: src/settingsdialog.cpp:174 233 | msgid "Capture" 234 | msgstr "" 235 | 236 | #: src/settingsdialog.cpp:182 237 | msgid "Use default pictures directory" 238 | msgstr "Gebruik de standaardmap voor afbeeldingen" 239 | 240 | #: src/settingsdialog.cpp:189 241 | msgid "Use subdirectory:" 242 | msgstr "Gebruik submap:" 243 | 244 | #: src/settingsdialog.cpp:202 245 | msgid "Photo directory:" 246 | msgstr "fotomap:" 247 | 248 | #: src/settingsdialog.cpp:204 249 | msgid "Storage" 250 | msgstr "Opslag" 251 | 252 | #: src/settingsdialog.cpp:204 253 | msgid "Photo storage" 254 | msgstr "Foto opslag" 255 | 256 | #: src/settingsdialog.cpp:210 257 | msgid "Play sound on taking photo" 258 | msgstr "Speel geluid af bij het nemen van een foto" 259 | 260 | #: src/settingsdialog.cpp:213 261 | msgid "Play timer sounds" 262 | msgstr "Speel timer geluiden af" 263 | 264 | #: src/settingsdialog.cpp:216 265 | msgid "Show notification on taking photo" 266 | msgstr "Toon notificatie bij het nemen van een foto" 267 | 268 | #: src/settingsdialog.cpp:220 269 | msgid "Behaviour" 270 | msgstr "Gedrag" 271 | 272 | #: src/videowidget.cpp:100 273 | msgid "Starting up webcam..." 274 | msgstr "Webcam aan het starten..." 275 | 276 | #: src/videowidget.cpp:170 277 | msgid "Photo has been stored in file %1" 278 | msgstr "Foto is opgeslagen in bestand %1" 279 | 280 | #: src/videowidget.cpp:175 281 | msgid "Open" 282 | msgstr "" 283 | 284 | #: src/videowidget.cpp:175 285 | msgid "Show in directory" 286 | msgstr "Geef weer in map" 287 | 288 | #: tools/rc.cpp:1 rc.cpp:1 289 | msgctxt "NAME OF TRANSLATORS" 290 | msgid "Your names" 291 | msgstr "Kenny Verstraete" 292 | 293 | #: tools/rc.cpp:2 rc.cpp:2 294 | msgctxt "EMAIL OF TRANSLATORS" 295 | msgid "Your emails" 296 | msgstr "verstraete_kenny@skynet.be" 297 | 298 | #~ msgid "Open in GIMP" 299 | #~ msgstr "Openen in GIMP" 300 | 301 | #~ msgid "Open in Inkscape" 302 | #~ msgstr "Openen in Inkscape" 303 | 304 | #~ msgid "Less" 305 | #~ msgstr "Minder" 306 | 307 | #~ msgid "More" 308 | #~ msgstr "Meer" 309 | -------------------------------------------------------------------------------- /po/es.po: -------------------------------------------------------------------------------- 1 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER 2 | # This file is distributed under the same license as the PACKAGE package. 3 | # 4 | # Daniel Halens Rodriguez , 2011, 2012, 2014. 5 | msgid "" 6 | msgstr "" 7 | "Project-Id-Version: kamerka\n" 8 | "Report-Msgid-Bugs-To: dos@dosowisko.net\n" 9 | "POT-Creation-Date: 2019-04-10 21:34+0200\n" 10 | "PO-Revision-Date: 2014-03-30 16:56+0100\n" 11 | "Last-Translator: Daniel\n" 12 | "Language-Team: Spanish \n" 13 | "Language: es\n" 14 | "MIME-Version: 1.0\n" 15 | "Content-Type: text/plain; charset=UTF-8\n" 16 | "Content-Transfer-Encoding: 8bit\n" 17 | "X-Generator: Lokalize 1.5\n" 18 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 19 | 20 | #: src/kamerka.qml:248 21 | msgid "Take a photo" 22 | msgstr "Tomar una foto" 23 | 24 | #: src/kamerka.qml:263 src/settingsdialog.cpp:156 25 | msgid "Burst mode" 26 | msgstr "Modo ráfaga" 27 | 28 | #: src/kamerka.qml:286 src/settingsdialog.cpp:144 29 | msgid "Self-timer" 30 | msgstr "Cuenta atrás" 31 | 32 | #: src/kamerka.qml:302 33 | msgid "Hide effects" 34 | msgstr "Ocultar efectos" 35 | 36 | #: src/kamerka.qml:302 37 | msgid "Show effects" 38 | msgstr "Mostrar efectos" 39 | 40 | #: src/kamerka.qml:318 41 | msgid "Open directory" 42 | msgstr "Abrir carpeta" 43 | 44 | #: src/kamerka.qml:333 45 | msgid "Configure" 46 | msgstr "Configurar" 47 | 48 | #: src/kamerka.qml:537 49 | msgid "No Effect" 50 | msgstr "Ninguno" 51 | 52 | #: src/kamerka.qml:553 53 | msgid "Grey" 54 | msgstr "Gris" 55 | 56 | #: src/kamerka.qml:569 57 | msgid "Invert" 58 | msgstr "Invertir" 59 | 60 | #: src/kamerka.qml:585 61 | msgid "Equalize" 62 | msgstr "Ecualizado" 63 | 64 | #: src/kamerka.qml:601 65 | msgid "Smurf" 66 | msgstr "Pitufo" 67 | 68 | #: src/kamerka.qml:616 69 | msgid "Implode" 70 | msgstr "Implosionar" 71 | 72 | #: src/kamerka.qml:631 73 | msgid "Explode" 74 | msgstr "Explosionar" 75 | 76 | #: src/kamerka.qml:646 77 | msgid "Charcoal" 78 | msgstr "Carboncillo" 79 | 80 | #: src/kamerka.qml:661 81 | msgid "Edge" 82 | msgstr "Bordeado" 83 | 84 | #: src/kamerka.qml:676 85 | msgid "Emboss" 86 | msgstr "Repujar" 87 | 88 | #: src/kamerka.qml:691 89 | msgid "Swirl" 90 | msgstr "Remolino" 91 | 92 | #: src/kamerka.qml:706 93 | msgid "Oil Paint" 94 | msgstr "Óleo" 95 | 96 | #: src/kamerka.qml:721 97 | msgid "Wave" 98 | msgstr "Ondulado" 99 | 100 | #: src/main.cpp:37 101 | msgid "Kamerka" 102 | msgstr "Kamerka" 103 | 104 | #: src/main.cpp:38 105 | msgid "Simple photo taking application with fancy animated interface" 106 | msgstr "Aplicación sencilla para tomar fotos con un atractivo interfaz animado" 107 | 108 | #: src/main.cpp:39 109 | msgid "Copyright (C) 2011-2014 Sebastian Krzyszkowiak" 110 | msgstr "Copyright (C) 2011-2014 Sebastian Krzyszkowiak" 111 | 112 | #: src/mainwindow.cpp:46 113 | msgid "i18n() takes at least one argument" 114 | msgstr "i18n() requiere de al menos un argumento" 115 | 116 | #: src/mainwindow.cpp:64 117 | msgid "Could not load QML interface!" 118 | msgstr "¡No se pudo cargar el interfaz QML!" 119 | 120 | #: src/mainwindow.cpp:64 src/mainwindow.cpp:115 src/mainwindow.cpp:138 121 | msgid "Error" 122 | msgstr "Error" 123 | 124 | #: src/mainwindow.cpp:111 src/mainwindow.cpp:115 src/mainwindow.cpp:138 125 | msgid "Could not connect to V4L device!" 126 | msgstr "¡No se pudo conectar al dispositivo V4L!" 127 | 128 | #: src/mainwindow.cpp:157 129 | msgid "" 130 | "Requested resolution (%1x%2) was not available. Driver used %3x%4 instead.\n" 131 | "Please check your configuration." 132 | msgstr "" 133 | "La resolución solicitada (%1x%2) no está disponible. El driver usó %3x%4.\n" 134 | "Compruebe la configuración." 135 | 136 | #: src/settingsdialog.cpp:43 137 | msgid "Selected path does not exists. Do you want to create it?" 138 | msgstr "La ruta elegida no existe. ¿Desea crearla?" 139 | 140 | #: src/settingsdialog.cpp:60 141 | msgid "Device node:" 142 | msgstr "Dispositivo:" 143 | 144 | #: src/settingsdialog.cpp:67 145 | msgid "x" 146 | msgstr "x" 147 | 148 | #: src/settingsdialog.cpp:72 149 | msgid "px" 150 | msgstr "px" 151 | 152 | #: src/settingsdialog.cpp:73 153 | msgid "Resolution:" 154 | msgstr "Resolución:" 155 | 156 | #: src/settingsdialog.cpp:78 157 | msgid "Disabled" 158 | msgstr "Inhabilitado" 159 | 160 | #: src/settingsdialog.cpp:79 161 | msgid " fps" 162 | msgstr " fps" 163 | 164 | #: src/settingsdialog.cpp:81 165 | msgid "Framerate limit:" 166 | msgstr "Tasa de fotogramas:" 167 | 168 | #: src/settingsdialog.cpp:83 169 | msgid "Lock aspect ratio" 170 | msgstr "Bloquear relación de aspecto" 171 | 172 | #: src/settingsdialog.cpp:86 173 | msgid "Enhance contrast" 174 | msgstr "Mejorar contraste" 175 | 176 | #: src/settingsdialog.cpp:89 177 | msgid "Mirror output" 178 | msgstr "Vista en espejo" 179 | 180 | #: src/settingsdialog.cpp:92 181 | msgid "Flip output" 182 | msgstr "Bocabajo" 183 | 184 | #: src/settingsdialog.cpp:97 185 | #, fuzzy 186 | msgid "Image Settings" 187 | msgstr "Ajustes de cámara" 188 | 189 | #: src/settingsdialog.cpp:107 190 | msgid "Brightness:" 191 | msgstr "" 192 | 193 | #: src/settingsdialog.cpp:116 194 | msgid "Contrast:" 195 | msgstr "" 196 | 197 | #: src/settingsdialog.cpp:125 198 | msgid "Saturation:" 199 | msgstr "" 200 | 201 | #: src/settingsdialog.cpp:134 202 | msgid "Hue:" 203 | msgstr "" 204 | 205 | #: src/settingsdialog.cpp:138 206 | msgid "Camera" 207 | msgstr "Cámara" 208 | 209 | #: src/settingsdialog.cpp:138 210 | msgid "Camera settings" 211 | msgstr "Ajustes de cámara" 212 | 213 | #: src/settingsdialog.cpp:149 src/settingsdialog.cpp:167 214 | msgid " seconds" 215 | msgstr " segundos" 216 | 217 | #: src/settingsdialog.cpp:152 218 | msgid "Self-timer timeout:" 219 | msgstr "Tiempo para cuenta atrás" 220 | 221 | #: src/settingsdialog.cpp:163 222 | msgid "Number of photos:" 223 | msgstr "Número de fotos" 224 | 225 | #: src/settingsdialog.cpp:170 226 | msgid "Delay between photos:" 227 | msgstr "Retraso entre fotos" 228 | 229 | #: src/settingsdialog.cpp:174 230 | msgid "Capture" 231 | msgstr "Captura" 232 | 233 | #: src/settingsdialog.cpp:182 234 | msgid "Use default pictures directory" 235 | msgstr "Usar el directorio de imágenes por defecto" 236 | 237 | #: src/settingsdialog.cpp:189 238 | msgid "Use subdirectory:" 239 | msgstr "Usar subdirectorio:" 240 | 241 | #: src/settingsdialog.cpp:202 242 | msgid "Photo directory:" 243 | msgstr "Directorio de imágenes:" 244 | 245 | #: src/settingsdialog.cpp:204 246 | msgid "Storage" 247 | msgstr "Almacenamiento" 248 | 249 | #: src/settingsdialog.cpp:204 250 | msgid "Photo storage" 251 | msgstr "Almacenamiento de imágenes" 252 | 253 | #: src/settingsdialog.cpp:210 254 | msgid "Play sound on taking photo" 255 | msgstr "Reproducir sonido al tomar una foto" 256 | 257 | #: src/settingsdialog.cpp:213 258 | msgid "Play timer sounds" 259 | msgstr "Reproducir sonido en la cuenta atrás" 260 | 261 | #: src/settingsdialog.cpp:216 262 | msgid "Show notification on taking photo" 263 | msgstr "Mostrar nota al tomar una foto" 264 | 265 | #: src/settingsdialog.cpp:220 266 | msgid "Behaviour" 267 | msgstr "Comportamiento" 268 | 269 | #: src/videowidget.cpp:100 270 | msgid "Starting up webcam..." 271 | msgstr "Iniciando la webcam..." 272 | 273 | #: src/videowidget.cpp:170 274 | msgid "Photo has been stored in file %1" 275 | msgstr "Foto guardada como %1" 276 | 277 | #: src/videowidget.cpp:175 278 | msgid "Open" 279 | msgstr "" 280 | 281 | #: src/videowidget.cpp:175 282 | msgid "Show in directory" 283 | msgstr "Mostrar en el directorio" 284 | 285 | #: tools/rc.cpp:1 rc.cpp:1 286 | msgctxt "NAME OF TRANSLATORS" 287 | msgid "Your names" 288 | msgstr "Daniel Halens Rodríguez" 289 | 290 | #: tools/rc.cpp:2 rc.cpp:2 291 | msgctxt "EMAIL OF TRANSLATORS" 292 | msgid "Your emails" 293 | msgstr "DanielHalens@gmail.com" 294 | 295 | #~ msgid "Open in GIMP" 296 | #~ msgstr "Abrir en GIMP" 297 | 298 | #~ msgid "Open in Inkscape" 299 | #~ msgstr "Abrir en Inkscape" 300 | -------------------------------------------------------------------------------- /po/sr.po: -------------------------------------------------------------------------------- 1 | # Kamerka Serbian Translation. 2 | # Copyright (C) 2011-2014 Sebastian Krzyszkowiak 3 | # 4 | # Mladen Pejaković , 2011, 2014. 5 | msgid "" 6 | msgstr "" 7 | "Project-Id-Version: Kamerka\n" 8 | "Report-Msgid-Bugs-To: dos@dosowisko.net\n" 9 | "POT-Creation-Date: 2019-04-10 21:34+0200\n" 10 | "PO-Revision-Date: 2014-03-27 12:46+0100\n" 11 | "Last-Translator: Mladen Pejaković \n" 12 | "Language-Team: Serbian \n" 13 | "Language: sr\n" 14 | "MIME-Version: 1.0\n" 15 | "Content-Type: text/plain; charset=UTF-8\n" 16 | "Content-Transfer-Encoding: 8bit\n" 17 | "X-Generator: Lokalize 0.3\n" 18 | "Plural-Forms: nplurals=4; plural=n==1 ? 3 : n%10==1 && n%100!=11 ? 0 : n" 19 | "%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" 20 | 21 | #: src/kamerka.qml:248 22 | msgid "Take a photo" 23 | msgstr "Фотографиши" 24 | 25 | #: src/kamerka.qml:263 src/settingsdialog.cpp:156 26 | msgid "Burst mode" 27 | msgstr "Режим узастопног окидања" 28 | 29 | #: src/kamerka.qml:286 src/settingsdialog.cpp:144 30 | msgid "Self-timer" 31 | msgstr "Самоокидач" 32 | 33 | #: src/kamerka.qml:302 34 | msgid "Hide effects" 35 | msgstr "Сакриј ефекте" 36 | 37 | #: src/kamerka.qml:302 38 | msgid "Show effects" 39 | msgstr "Прикажи ефекте" 40 | 41 | #: src/kamerka.qml:318 42 | msgid "Open directory" 43 | msgstr "Отвори фасциклу" 44 | 45 | #: src/kamerka.qml:333 46 | msgid "Configure" 47 | msgstr "Подеси" 48 | 49 | #: src/kamerka.qml:537 50 | msgid "No Effect" 51 | msgstr "Без ефекта" 52 | 53 | #: src/kamerka.qml:553 54 | msgid "Grey" 55 | msgstr "Сивило" 56 | 57 | #: src/kamerka.qml:569 58 | msgid "Invert" 59 | msgstr "Изврнуто" 60 | 61 | #: src/kamerka.qml:585 62 | msgid "Equalize" 63 | msgstr "Уједначено" 64 | 65 | #: src/kamerka.qml:601 66 | msgid "Smurf" 67 | msgstr "Штрумф" 68 | 69 | #: src/kamerka.qml:616 70 | msgid "Implode" 71 | msgstr "Имплозија" 72 | 73 | #: src/kamerka.qml:631 74 | msgid "Explode" 75 | msgstr "Експлозија" 76 | 77 | #: src/kamerka.qml:646 78 | msgid "Charcoal" 79 | msgstr "Угаљ" 80 | 81 | #: src/kamerka.qml:661 82 | msgid "Edge" 83 | msgstr "Ивице" 84 | 85 | #: src/kamerka.qml:676 86 | msgid "Emboss" 87 | msgstr "Уклесано" 88 | 89 | #: src/kamerka.qml:691 90 | msgid "Swirl" 91 | msgstr "Ковитлац" 92 | 93 | #: src/kamerka.qml:706 94 | msgid "Oil Paint" 95 | msgstr "Уље на платну" 96 | 97 | #: src/kamerka.qml:721 98 | msgid "Wave" 99 | msgstr "Талас" 100 | 101 | #: src/main.cpp:37 102 | msgid "Kamerka" 103 | msgstr "Камерка" 104 | 105 | #: src/main.cpp:38 106 | msgid "Simple photo taking application with fancy animated interface" 107 | msgstr "" 108 | "Једноставна апликација за хватање фотографија са лепим анимираним сучељем" 109 | 110 | #: src/main.cpp:39 111 | msgid "Copyright (C) 2011-2014 Sebastian Krzyszkowiak" 112 | msgstr "© 2011-2014 Себастијан Кшишковијак (Sebastian Krzyszkowiak)" 113 | 114 | #: src/mainwindow.cpp:46 115 | msgid "i18n() takes at least one argument" 116 | msgstr "i18n() захтева бар један аргумент" 117 | 118 | #: src/mainwindow.cpp:64 119 | msgid "Could not load QML interface!" 120 | msgstr "Не могу да учитам QML сучеље!" 121 | 122 | #: src/mainwindow.cpp:64 src/mainwindow.cpp:115 src/mainwindow.cpp:138 123 | msgid "Error" 124 | msgstr "Грешка" 125 | 126 | #: src/mainwindow.cpp:111 src/mainwindow.cpp:115 src/mainwindow.cpp:138 127 | msgid "Could not connect to V4L device!" 128 | msgstr "Не могу да се повежем са В4Л уређајем!" 129 | 130 | #: src/mainwindow.cpp:157 131 | msgid "" 132 | "Requested resolution (%1x%2) was not available. Driver used %3x%4 instead.\n" 133 | "Please check your configuration." 134 | msgstr "" 135 | "Захтевана резолуција (%1x%2) није доступна. Драјвер је користио %3x%4.\n" 136 | "Проверите ваше поставке." 137 | 138 | #: src/settingsdialog.cpp:43 139 | msgid "Selected path does not exists. Do you want to create it?" 140 | msgstr "Изабрана путања не постоји. Желите ли да је направите?" 141 | 142 | #: src/settingsdialog.cpp:60 143 | msgid "Device node:" 144 | msgstr "Чвор уређаја:" 145 | 146 | #: src/settingsdialog.cpp:67 147 | msgid "x" 148 | msgstr "x" 149 | 150 | #: src/settingsdialog.cpp:72 151 | msgid "px" 152 | msgstr "px" 153 | 154 | #: src/settingsdialog.cpp:73 155 | msgid "Resolution:" 156 | msgstr "Резолуција" 157 | 158 | #: src/settingsdialog.cpp:78 159 | msgid "Disabled" 160 | msgstr "Онемогућено" 161 | 162 | #: src/settingsdialog.cpp:79 163 | msgid " fps" 164 | msgstr " fps" 165 | 166 | #: src/settingsdialog.cpp:81 167 | msgid "Framerate limit:" 168 | msgstr "Ограничење брзине кадрова:" 169 | 170 | #: src/settingsdialog.cpp:83 171 | msgid "Lock aspect ratio" 172 | msgstr "Задржи размеру" 173 | 174 | #: src/settingsdialog.cpp:86 175 | msgid "Enhance contrast" 176 | msgstr "Побољшај контраст" 177 | 178 | #: src/settingsdialog.cpp:89 179 | msgid "Mirror output" 180 | msgstr "Пресликано" 181 | 182 | #: src/settingsdialog.cpp:92 183 | msgid "Flip output" 184 | msgstr "Обрнуто" 185 | 186 | #: src/settingsdialog.cpp:97 187 | #, fuzzy 188 | msgid "Image Settings" 189 | msgstr "Поставке камере" 190 | 191 | #: src/settingsdialog.cpp:107 192 | msgid "Brightness:" 193 | msgstr "" 194 | 195 | #: src/settingsdialog.cpp:116 196 | msgid "Contrast:" 197 | msgstr "" 198 | 199 | #: src/settingsdialog.cpp:125 200 | msgid "Saturation:" 201 | msgstr "" 202 | 203 | #: src/settingsdialog.cpp:134 204 | msgid "Hue:" 205 | msgstr "" 206 | 207 | #: src/settingsdialog.cpp:138 208 | msgid "Camera" 209 | msgstr "Камера" 210 | 211 | #: src/settingsdialog.cpp:138 212 | msgid "Camera settings" 213 | msgstr "Поставке камере" 214 | 215 | #: src/settingsdialog.cpp:149 src/settingsdialog.cpp:167 216 | msgid " seconds" 217 | msgstr " секунди" 218 | 219 | #: src/settingsdialog.cpp:152 220 | msgid "Self-timer timeout:" 221 | msgstr "Време самоокидача:" 222 | 223 | #: src/settingsdialog.cpp:163 224 | msgid "Number of photos:" 225 | msgstr "Број фотографија:" 226 | 227 | #: src/settingsdialog.cpp:170 228 | msgid "Delay between photos:" 229 | msgstr "Застој окидања:" 230 | 231 | #: src/settingsdialog.cpp:174 232 | msgid "Capture" 233 | msgstr "Хватање" 234 | 235 | #: src/settingsdialog.cpp:182 236 | msgid "Use default pictures directory" 237 | msgstr "Користи подразумевану фасциклу слика" 238 | 239 | #: src/settingsdialog.cpp:189 240 | msgid "Use subdirectory:" 241 | msgstr "Отвори подфасциклу" 242 | 243 | #: src/settingsdialog.cpp:202 244 | msgid "Photo directory:" 245 | msgstr "Фасцикла фотографија:" 246 | 247 | #: src/settingsdialog.cpp:204 248 | msgid "Storage" 249 | msgstr "Спремиште" 250 | 251 | #: src/settingsdialog.cpp:204 252 | msgid "Photo storage" 253 | msgstr "Спремиште фотографија" 254 | 255 | #: src/settingsdialog.cpp:210 256 | msgid "Play sound on taking photo" 257 | msgstr "Пусти звук при фотографисању" 258 | 259 | #: src/settingsdialog.cpp:213 260 | msgid "Play timer sounds" 261 | msgstr "Пуштај звуке тајмера" 262 | 263 | #: src/settingsdialog.cpp:216 264 | msgid "Show notification on taking photo" 265 | msgstr "Прикажи обавештење при фотографисању" 266 | 267 | #: src/settingsdialog.cpp:220 268 | msgid "Behaviour" 269 | msgstr "Понашање" 270 | 271 | #: src/videowidget.cpp:100 272 | msgid "Starting up webcam..." 273 | msgstr "Покрећем веб-камеру..." 274 | 275 | #: src/videowidget.cpp:170 276 | msgid "Photo has been stored in file %1" 277 | msgstr "Фотографија је смештена у фајл %1" 278 | 279 | #: src/videowidget.cpp:175 280 | msgid "Open" 281 | msgstr "" 282 | 283 | #: src/videowidget.cpp:175 284 | msgid "Show in directory" 285 | msgstr "Покажи у фасцикли" 286 | 287 | #: tools/rc.cpp:1 rc.cpp:1 288 | msgctxt "NAME OF TRANSLATORS" 289 | msgid "Your names" 290 | msgstr "Младен Пејаковић" 291 | 292 | #: tools/rc.cpp:2 rc.cpp:2 293 | msgctxt "EMAIL OF TRANSLATORS" 294 | msgid "Your emails" 295 | msgstr "pejakm@autistici.org" 296 | 297 | #~ msgid "Open in GIMP" 298 | #~ msgstr "Отвори у Гимпу" 299 | 300 | #~ msgid "Open in Inkscape" 301 | #~ msgstr "Отвори у Инкскејпу" 302 | -------------------------------------------------------------------------------- /po/sr@latin.po: -------------------------------------------------------------------------------- 1 | # Kamerka Serbian Latin Translation. 2 | # Copyright (C) 2011-2014 Sebastian Krzyszkowiak 3 | # 4 | # Mladen Pejaković , 2011, 2014. 5 | msgid "" 6 | msgstr "" 7 | "Project-Id-Version: Kamerka\n" 8 | "Report-Msgid-Bugs-To: dos@dosowisko.net\n" 9 | "POT-Creation-Date: 2019-04-10 21:34+0200\n" 10 | "PO-Revision-Date: 2014-03-27 12:46+0100\n" 11 | "Last-Translator: Mladen Pejaković \n" 12 | "Language-Team: Serbian \n" 13 | "Language: sr@latin\n" 14 | "MIME-Version: 1.0\n" 15 | "Content-Type: text/plain; charset=UTF-8\n" 16 | "Content-Transfer-Encoding: 8bit\n" 17 | "X-Generator: Lokalize 0.3\n" 18 | "Plural-Forms: nplurals=4; plural=n==1 ? 3 : n%10==1 && n%100!=11 ? 0 : n" 19 | "%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" 20 | 21 | #: src/kamerka.qml:248 22 | msgid "Take a photo" 23 | msgstr "Fotografiši" 24 | 25 | #: src/kamerka.qml:263 src/settingsdialog.cpp:156 26 | msgid "Burst mode" 27 | msgstr "Režim uzastopnog okidanja" 28 | 29 | #: src/kamerka.qml:286 src/settingsdialog.cpp:144 30 | msgid "Self-timer" 31 | msgstr "Samookidač" 32 | 33 | #: src/kamerka.qml:302 34 | msgid "Hide effects" 35 | msgstr "Sakrij efekte" 36 | 37 | #: src/kamerka.qml:302 38 | msgid "Show effects" 39 | msgstr "Prikaži efekte" 40 | 41 | #: src/kamerka.qml:318 42 | msgid "Open directory" 43 | msgstr "Otvori fasciklu" 44 | 45 | #: src/kamerka.qml:333 46 | msgid "Configure" 47 | msgstr "Podesi" 48 | 49 | #: src/kamerka.qml:537 50 | msgid "No Effect" 51 | msgstr "Bez efekta" 52 | 53 | #: src/kamerka.qml:553 54 | msgid "Grey" 55 | msgstr "Sivilo" 56 | 57 | #: src/kamerka.qml:569 58 | msgid "Invert" 59 | msgstr "Izvrnuto" 60 | 61 | #: src/kamerka.qml:585 62 | msgid "Equalize" 63 | msgstr "Ujednačeno" 64 | 65 | #: src/kamerka.qml:601 66 | msgid "Smurf" 67 | msgstr "Štrumf" 68 | 69 | #: src/kamerka.qml:616 70 | msgid "Implode" 71 | msgstr "Implozija" 72 | 73 | #: src/kamerka.qml:631 74 | msgid "Explode" 75 | msgstr "Eksplozija" 76 | 77 | #: src/kamerka.qml:646 78 | msgid "Charcoal" 79 | msgstr "Ugalj" 80 | 81 | #: src/kamerka.qml:661 82 | msgid "Edge" 83 | msgstr "Ivice" 84 | 85 | #: src/kamerka.qml:676 86 | msgid "Emboss" 87 | msgstr "Uklesano" 88 | 89 | #: src/kamerka.qml:691 90 | msgid "Swirl" 91 | msgstr "Kovitlac" 92 | 93 | #: src/kamerka.qml:706 94 | msgid "Oil Paint" 95 | msgstr "Ulje na platnu" 96 | 97 | #: src/kamerka.qml:721 98 | msgid "Wave" 99 | msgstr "Talas" 100 | 101 | #: src/main.cpp:37 102 | msgid "Kamerka" 103 | msgstr "Kamerka" 104 | 105 | #: src/main.cpp:38 106 | msgid "Simple photo taking application with fancy animated interface" 107 | msgstr "" 108 | "Jednostavna aplikacija za hvatanje fotografija sa lepim animiranim sučeljem" 109 | 110 | #: src/main.cpp:39 111 | msgid "Copyright (C) 2011-2014 Sebastian Krzyszkowiak" 112 | msgstr "© 2011-2014 Sebastijan Kšiškovijak (Sebastian Krzyszkowiak)" 113 | 114 | #: src/mainwindow.cpp:46 115 | msgid "i18n() takes at least one argument" 116 | msgstr "i18n() zahteva bar jedan argument" 117 | 118 | #: src/mainwindow.cpp:64 119 | msgid "Could not load QML interface!" 120 | msgstr "Ne mogu da učitam QML sučelje!" 121 | 122 | #: src/mainwindow.cpp:64 src/mainwindow.cpp:115 src/mainwindow.cpp:138 123 | msgid "Error" 124 | msgstr "Greška" 125 | 126 | #: src/mainwindow.cpp:111 src/mainwindow.cpp:115 src/mainwindow.cpp:138 127 | msgid "Could not connect to V4L device!" 128 | msgstr "Ne mogu da se povežem sa V4L uređajem!" 129 | 130 | #: src/mainwindow.cpp:157 131 | msgid "" 132 | "Requested resolution (%1x%2) was not available. Driver used %3x%4 instead.\n" 133 | "Please check your configuration." 134 | msgstr "" 135 | "Zahtevana rezolucija (%1x%2) nije dostupna. Drajver je koristio %3x%4.\n" 136 | "Proverite vaše postavke." 137 | 138 | #: src/settingsdialog.cpp:43 139 | msgid "Selected path does not exists. Do you want to create it?" 140 | msgstr "Izabrana putanja ne postoji. Želite li da je napravite?" 141 | 142 | #: src/settingsdialog.cpp:60 143 | msgid "Device node:" 144 | msgstr "Čvor uređaja:" 145 | 146 | #: src/settingsdialog.cpp:67 147 | msgid "x" 148 | msgstr "x" 149 | 150 | #: src/settingsdialog.cpp:72 151 | msgid "px" 152 | msgstr "px" 153 | 154 | #: src/settingsdialog.cpp:73 155 | msgid "Resolution:" 156 | msgstr "Rezolucija" 157 | 158 | #: src/settingsdialog.cpp:78 159 | msgid "Disabled" 160 | msgstr "Onemogućeno" 161 | 162 | #: src/settingsdialog.cpp:79 163 | msgid " fps" 164 | msgstr " fps" 165 | 166 | #: src/settingsdialog.cpp:81 167 | msgid "Framerate limit:" 168 | msgstr "Ograničenje brzine kadrova:" 169 | 170 | #: src/settingsdialog.cpp:83 171 | msgid "Lock aspect ratio" 172 | msgstr "Zadrži razmeru" 173 | 174 | #: src/settingsdialog.cpp:86 175 | msgid "Enhance contrast" 176 | msgstr "Poboljšaj kontrast" 177 | 178 | #: src/settingsdialog.cpp:89 179 | msgid "Mirror output" 180 | msgstr "Preslikano" 181 | 182 | #: src/settingsdialog.cpp:92 183 | msgid "Flip output" 184 | msgstr "Obrnuto" 185 | 186 | #: src/settingsdialog.cpp:97 187 | #, fuzzy 188 | msgid "Image Settings" 189 | msgstr "Postavke kamere" 190 | 191 | #: src/settingsdialog.cpp:107 192 | msgid "Brightness:" 193 | msgstr "" 194 | 195 | #: src/settingsdialog.cpp:116 196 | msgid "Contrast:" 197 | msgstr "" 198 | 199 | #: src/settingsdialog.cpp:125 200 | msgid "Saturation:" 201 | msgstr "" 202 | 203 | #: src/settingsdialog.cpp:134 204 | msgid "Hue:" 205 | msgstr "" 206 | 207 | #: src/settingsdialog.cpp:138 208 | msgid "Camera" 209 | msgstr "Kamera" 210 | 211 | #: src/settingsdialog.cpp:138 212 | msgid "Camera settings" 213 | msgstr "Postavke kamere" 214 | 215 | #: src/settingsdialog.cpp:149 src/settingsdialog.cpp:167 216 | msgid " seconds" 217 | msgstr " sekundi" 218 | 219 | #: src/settingsdialog.cpp:152 220 | msgid "Self-timer timeout:" 221 | msgstr "Vreme samookidača:" 222 | 223 | #: src/settingsdialog.cpp:163 224 | msgid "Number of photos:" 225 | msgstr "Broj fotografija:" 226 | 227 | #: src/settingsdialog.cpp:170 228 | msgid "Delay between photos:" 229 | msgstr "Zastoj okidanja:" 230 | 231 | #: src/settingsdialog.cpp:174 232 | msgid "Capture" 233 | msgstr "Hvatanje" 234 | 235 | #: src/settingsdialog.cpp:182 236 | msgid "Use default pictures directory" 237 | msgstr "Koristi podrazumevanu fasciklu slika" 238 | 239 | #: src/settingsdialog.cpp:189 240 | msgid "Use subdirectory:" 241 | msgstr "Otvori podfasciklu" 242 | 243 | #: src/settingsdialog.cpp:202 244 | msgid "Photo directory:" 245 | msgstr "Fascikla fotografija:" 246 | 247 | #: src/settingsdialog.cpp:204 248 | msgid "Storage" 249 | msgstr "Spremište" 250 | 251 | #: src/settingsdialog.cpp:204 252 | msgid "Photo storage" 253 | msgstr "Spremište fotografija" 254 | 255 | #: src/settingsdialog.cpp:210 256 | msgid "Play sound on taking photo" 257 | msgstr "Pusti zvuk pri fotografisanju" 258 | 259 | #: src/settingsdialog.cpp:213 260 | msgid "Play timer sounds" 261 | msgstr "Puštaj zvuke tajmera" 262 | 263 | #: src/settingsdialog.cpp:216 264 | msgid "Show notification on taking photo" 265 | msgstr "Prikaži obaveštenje pri fotografisanju" 266 | 267 | #: src/settingsdialog.cpp:220 268 | msgid "Behaviour" 269 | msgstr "Ponašanje" 270 | 271 | #: src/videowidget.cpp:100 272 | msgid "Starting up webcam..." 273 | msgstr "Pokrećem veb-kameru..." 274 | 275 | #: src/videowidget.cpp:170 276 | msgid "Photo has been stored in file %1" 277 | msgstr "Fotografija je smeštena u fajl %1" 278 | 279 | #: src/videowidget.cpp:175 280 | msgid "Open" 281 | msgstr "" 282 | 283 | #: src/videowidget.cpp:175 284 | msgid "Show in directory" 285 | msgstr "Pokaži u fascikli" 286 | 287 | #: tools/rc.cpp:1 rc.cpp:1 288 | msgctxt "NAME OF TRANSLATORS" 289 | msgid "Your names" 290 | msgstr "Mladen Pejaković" 291 | 292 | #: tools/rc.cpp:2 rc.cpp:2 293 | msgctxt "EMAIL OF TRANSLATORS" 294 | msgid "Your emails" 295 | msgstr "pejakm@autistici.org" 296 | 297 | #~ msgid "Open in GIMP" 298 | #~ msgstr "Otvori u Gimpu" 299 | 300 | #~ msgid "Open in Inkscape" 301 | #~ msgstr "Otvori u Inkskejpu" 302 | -------------------------------------------------------------------------------- /po/sr@ijekavian.po: -------------------------------------------------------------------------------- 1 | # Kamerka Serbian Ijekavian Translation. 2 | # Copyright (C) 2011-2014 Sebastian Krzyszkowiak 3 | # 4 | # Mladen Pejaković , 2011, 2014. 5 | msgid "" 6 | msgstr "" 7 | "Project-Id-Version: Kamerka\n" 8 | "Report-Msgid-Bugs-To: dos@dosowisko.net\n" 9 | "POT-Creation-Date: 2019-04-10 21:34+0200\n" 10 | "PO-Revision-Date: 2014-03-27 12:46+0100\n" 11 | "Last-Translator: Mladen Pejaković \n" 12 | "Language-Team: Serbian \n" 13 | "Language: sr@ijekavian\n" 14 | "MIME-Version: 1.0\n" 15 | "Content-Type: text/plain; charset=UTF-8\n" 16 | "Content-Transfer-Encoding: 8bit\n" 17 | "X-Generator: Lokalize 0.3\n" 18 | "Plural-Forms: nplurals=4; plural=n==1 ? 3 : n%10==1 && n%100!=11 ? 0 : n" 19 | "%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" 20 | 21 | #: src/kamerka.qml:248 22 | msgid "Take a photo" 23 | msgstr "Фотографиши" 24 | 25 | #: src/kamerka.qml:263 src/settingsdialog.cpp:156 26 | msgid "Burst mode" 27 | msgstr "Режим узастопног окидања" 28 | 29 | #: src/kamerka.qml:286 src/settingsdialog.cpp:144 30 | msgid "Self-timer" 31 | msgstr "Самоокидач" 32 | 33 | #: src/kamerka.qml:302 34 | msgid "Hide effects" 35 | msgstr "Сакриј ефекте" 36 | 37 | #: src/kamerka.qml:302 38 | msgid "Show effects" 39 | msgstr "Прикажи ефекте" 40 | 41 | #: src/kamerka.qml:318 42 | msgid "Open directory" 43 | msgstr "Отвори фасциклу" 44 | 45 | #: src/kamerka.qml:333 46 | msgid "Configure" 47 | msgstr "Подеси" 48 | 49 | #: src/kamerka.qml:537 50 | msgid "No Effect" 51 | msgstr "Без ефекта" 52 | 53 | #: src/kamerka.qml:553 54 | msgid "Grey" 55 | msgstr "Сивило" 56 | 57 | #: src/kamerka.qml:569 58 | msgid "Invert" 59 | msgstr "Изврнуто" 60 | 61 | #: src/kamerka.qml:585 62 | msgid "Equalize" 63 | msgstr "Уједначено" 64 | 65 | #: src/kamerka.qml:601 66 | msgid "Smurf" 67 | msgstr "Штрумф" 68 | 69 | #: src/kamerka.qml:616 70 | msgid "Implode" 71 | msgstr "Имплозија" 72 | 73 | #: src/kamerka.qml:631 74 | msgid "Explode" 75 | msgstr "Експлозија" 76 | 77 | #: src/kamerka.qml:646 78 | msgid "Charcoal" 79 | msgstr "Угаљ" 80 | 81 | #: src/kamerka.qml:661 82 | msgid "Edge" 83 | msgstr "Ивице" 84 | 85 | #: src/kamerka.qml:676 86 | msgid "Emboss" 87 | msgstr "Уклесано" 88 | 89 | #: src/kamerka.qml:691 90 | msgid "Swirl" 91 | msgstr "Ковитлац" 92 | 93 | #: src/kamerka.qml:706 94 | msgid "Oil Paint" 95 | msgstr "Уље на платну" 96 | 97 | #: src/kamerka.qml:721 98 | msgid "Wave" 99 | msgstr "Талас" 100 | 101 | #: src/main.cpp:37 102 | msgid "Kamerka" 103 | msgstr "Камерка" 104 | 105 | #: src/main.cpp:38 106 | msgid "Simple photo taking application with fancy animated interface" 107 | msgstr "" 108 | "Једноставна апликација за хватање фотографија са лијепим анимираним сучељем" 109 | 110 | #: src/main.cpp:39 111 | msgid "Copyright (C) 2011-2014 Sebastian Krzyszkowiak" 112 | msgstr "© 2011-2014 Себастијан Кшишковијак (Sebastian Krzyszkowiak)" 113 | 114 | #: src/mainwindow.cpp:46 115 | msgid "i18n() takes at least one argument" 116 | msgstr "i18n() захтијева бар један аргумент" 117 | 118 | #: src/mainwindow.cpp:64 119 | msgid "Could not load QML interface!" 120 | msgstr "Не могу да учитам QML сучеље!" 121 | 122 | #: src/mainwindow.cpp:64 src/mainwindow.cpp:115 src/mainwindow.cpp:138 123 | msgid "Error" 124 | msgstr "Грешка" 125 | 126 | #: src/mainwindow.cpp:111 src/mainwindow.cpp:115 src/mainwindow.cpp:138 127 | msgid "Could not connect to V4L device!" 128 | msgstr "Не могу да се повежем са В4Л уређајем!" 129 | 130 | #: src/mainwindow.cpp:157 131 | msgid "" 132 | "Requested resolution (%1x%2) was not available. Driver used %3x%4 instead.\n" 133 | "Please check your configuration." 134 | msgstr "" 135 | "Захтијевана резолуција (%1x%2) није доступна. Драјвер је користио %3x%4.\n" 136 | "Провјерите ваше поставке." 137 | 138 | #: src/settingsdialog.cpp:43 139 | msgid "Selected path does not exists. Do you want to create it?" 140 | msgstr "Изабрана путања не постоји. Желите ли да је направите?" 141 | 142 | #: src/settingsdialog.cpp:60 143 | msgid "Device node:" 144 | msgstr "Чвор уређаја:" 145 | 146 | #: src/settingsdialog.cpp:67 147 | msgid "x" 148 | msgstr "x" 149 | 150 | #: src/settingsdialog.cpp:72 151 | msgid "px" 152 | msgstr "px" 153 | 154 | #: src/settingsdialog.cpp:73 155 | msgid "Resolution:" 156 | msgstr "Резолуција" 157 | 158 | #: src/settingsdialog.cpp:78 159 | msgid "Disabled" 160 | msgstr "Онемогућено" 161 | 162 | #: src/settingsdialog.cpp:79 163 | msgid " fps" 164 | msgstr " fps" 165 | 166 | #: src/settingsdialog.cpp:81 167 | msgid "Framerate limit:" 168 | msgstr "Ограничење брзине кадрова:" 169 | 170 | #: src/settingsdialog.cpp:83 171 | msgid "Lock aspect ratio" 172 | msgstr "Задржи размјеру" 173 | 174 | #: src/settingsdialog.cpp:86 175 | msgid "Enhance contrast" 176 | msgstr "Побољшај контраст" 177 | 178 | #: src/settingsdialog.cpp:89 179 | msgid "Mirror output" 180 | msgstr "Пресликано" 181 | 182 | #: src/settingsdialog.cpp:92 183 | msgid "Flip output" 184 | msgstr "Обрнуто" 185 | 186 | #: src/settingsdialog.cpp:97 187 | #, fuzzy 188 | msgid "Image Settings" 189 | msgstr "Поставке камере" 190 | 191 | #: src/settingsdialog.cpp:107 192 | msgid "Brightness:" 193 | msgstr "" 194 | 195 | #: src/settingsdialog.cpp:116 196 | msgid "Contrast:" 197 | msgstr "" 198 | 199 | #: src/settingsdialog.cpp:125 200 | msgid "Saturation:" 201 | msgstr "" 202 | 203 | #: src/settingsdialog.cpp:134 204 | msgid "Hue:" 205 | msgstr "" 206 | 207 | #: src/settingsdialog.cpp:138 208 | msgid "Camera" 209 | msgstr "Камера" 210 | 211 | #: src/settingsdialog.cpp:138 212 | msgid "Camera settings" 213 | msgstr "Поставке камере" 214 | 215 | #: src/settingsdialog.cpp:149 src/settingsdialog.cpp:167 216 | msgid " seconds" 217 | msgstr " секунди" 218 | 219 | #: src/settingsdialog.cpp:152 220 | msgid "Self-timer timeout:" 221 | msgstr "Вријеме самоокидача:" 222 | 223 | #: src/settingsdialog.cpp:163 224 | msgid "Number of photos:" 225 | msgstr "Број фотографија:" 226 | 227 | #: src/settingsdialog.cpp:170 228 | msgid "Delay between photos:" 229 | msgstr "Застој окидања:" 230 | 231 | #: src/settingsdialog.cpp:174 232 | msgid "Capture" 233 | msgstr "Хватање" 234 | 235 | #: src/settingsdialog.cpp:182 236 | msgid "Use default pictures directory" 237 | msgstr "Користи подразумијевану фасциклу слика" 238 | 239 | #: src/settingsdialog.cpp:189 240 | msgid "Use subdirectory:" 241 | msgstr "Отвори подфасциклу" 242 | 243 | #: src/settingsdialog.cpp:202 244 | msgid "Photo directory:" 245 | msgstr "Фасцикла фотографија:" 246 | 247 | #: src/settingsdialog.cpp:204 248 | msgid "Storage" 249 | msgstr "Спремиште" 250 | 251 | #: src/settingsdialog.cpp:204 252 | msgid "Photo storage" 253 | msgstr "Спремиште фотографија" 254 | 255 | #: src/settingsdialog.cpp:210 256 | msgid "Play sound on taking photo" 257 | msgstr "Пусти звук при фотографисању" 258 | 259 | #: src/settingsdialog.cpp:213 260 | msgid "Play timer sounds" 261 | msgstr "Пуштај звуке тајмера" 262 | 263 | #: src/settingsdialog.cpp:216 264 | msgid "Show notification on taking photo" 265 | msgstr "Прикажи обавјештење при фотографисању" 266 | 267 | #: src/settingsdialog.cpp:220 268 | msgid "Behaviour" 269 | msgstr "Понашање" 270 | 271 | #: src/videowidget.cpp:100 272 | msgid "Starting up webcam..." 273 | msgstr "Покрећем веб-камеру..." 274 | 275 | #: src/videowidget.cpp:170 276 | msgid "Photo has been stored in file %1" 277 | msgstr "Фотографија је смјештена у фајл %1" 278 | 279 | #: src/videowidget.cpp:175 280 | msgid "Open" 281 | msgstr "" 282 | 283 | #: src/videowidget.cpp:175 284 | msgid "Show in directory" 285 | msgstr "Покажи у фасцикли" 286 | 287 | #: tools/rc.cpp:1 rc.cpp:1 288 | msgctxt "NAME OF TRANSLATORS" 289 | msgid "Your names" 290 | msgstr "Младен Пејаковић" 291 | 292 | #: tools/rc.cpp:2 rc.cpp:2 293 | msgctxt "EMAIL OF TRANSLATORS" 294 | msgid "Your emails" 295 | msgstr "pejakm@autistici.org" 296 | 297 | #~ msgid "Open in GIMP" 298 | #~ msgstr "Отвори у Гимпу" 299 | 300 | #~ msgid "Open in Inkscape" 301 | #~ msgstr "Отвори у Инкскејпу" 302 | -------------------------------------------------------------------------------- /po/cs.po: -------------------------------------------------------------------------------- 1 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER 2 | # This file is distributed under the same license as the PACKAGE package. 3 | # 4 | # Pavel Fric , 2011. 5 | # Pavel Fric , 2011, 2012. 6 | msgid "" 7 | msgstr "" 8 | "Project-Id-Version: \n" 9 | "Report-Msgid-Bugs-To: dos@dosowisko.net\n" 10 | "POT-Creation-Date: 2019-04-10 21:34+0200\n" 11 | "PO-Revision-Date: 2012-10-21 20:37+0200\n" 12 | "Last-Translator: Pavel Fric \n" 13 | "Language-Team: Czech \n" 14 | "Language: cs\n" 15 | "MIME-Version: 1.0\n" 16 | "Content-Type: text/plain; charset=UTF-8\n" 17 | "Content-Transfer-Encoding: 8bit\n" 18 | "X-Generator: Lokalize 1.5\n" 19 | "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" 20 | 21 | #: src/kamerka.qml:248 22 | msgid "Take a photo" 23 | msgstr "Udělat fotku" 24 | 25 | #: src/kamerka.qml:263 src/settingsdialog.cpp:156 26 | msgid "Burst mode" 27 | msgstr "" 28 | 29 | #: src/kamerka.qml:286 src/settingsdialog.cpp:144 30 | msgid "Self-timer" 31 | msgstr "Samospoušť" 32 | 33 | #: src/kamerka.qml:302 34 | msgid "Hide effects" 35 | msgstr "Skrýt efekty" 36 | 37 | #: src/kamerka.qml:302 38 | msgid "Show effects" 39 | msgstr "Ukázat efekty" 40 | 41 | #: src/kamerka.qml:318 42 | msgid "Open directory" 43 | msgstr "Otevřít adresář" 44 | 45 | #: src/kamerka.qml:333 46 | msgid "Configure" 47 | msgstr "Nastavit" 48 | 49 | #: src/kamerka.qml:537 50 | msgid "No Effect" 51 | msgstr "Žádný efekt" 52 | 53 | #: src/kamerka.qml:553 54 | msgid "Grey" 55 | msgstr "Šedá" 56 | 57 | #: src/kamerka.qml:569 58 | msgid "Invert" 59 | msgstr "Obrátit" 60 | 61 | #: src/kamerka.qml:585 62 | msgid "Equalize" 63 | msgstr "" 64 | 65 | #: src/kamerka.qml:601 66 | msgid "Smurf" 67 | msgstr "Šmoula" 68 | 69 | #: src/kamerka.qml:616 70 | msgid "Implode" 71 | msgstr "" 72 | 73 | #: src/kamerka.qml:631 74 | msgid "Explode" 75 | msgstr "" 76 | 77 | #: src/kamerka.qml:646 78 | msgid "Charcoal" 79 | msgstr "" 80 | 81 | #: src/kamerka.qml:661 82 | msgid "Edge" 83 | msgstr "" 84 | 85 | #: src/kamerka.qml:676 86 | msgid "Emboss" 87 | msgstr "" 88 | 89 | #: src/kamerka.qml:691 90 | msgid "Swirl" 91 | msgstr "" 92 | 93 | #: src/kamerka.qml:706 94 | msgid "Oil Paint" 95 | msgstr "" 96 | 97 | #: src/kamerka.qml:721 98 | msgid "Wave" 99 | msgstr "" 100 | 101 | #: src/main.cpp:37 102 | msgid "Kamerka" 103 | msgstr "Kamerka" 104 | 105 | #: src/main.cpp:38 106 | msgid "Simple photo taking application with fancy animated interface" 107 | msgstr "" 108 | "Jednoduchý program na dělání fotografií s vypracovaných kresleným rozhraním" 109 | 110 | #: src/main.cpp:39 111 | #, fuzzy 112 | msgid "Copyright (C) 2011-2014 Sebastian Krzyszkowiak" 113 | msgstr "Copyright (c) 2011-2012 Sebastian Krzyszkowiak" 114 | 115 | #: src/mainwindow.cpp:46 116 | msgid "i18n() takes at least one argument" 117 | msgstr "i18n() bere alespoň jeden argument" 118 | 119 | #: src/mainwindow.cpp:64 120 | msgid "Could not load QML interface!" 121 | msgstr "Nepodařilo se nahrát rozhraní QML!" 122 | 123 | #: src/mainwindow.cpp:64 src/mainwindow.cpp:115 src/mainwindow.cpp:138 124 | msgid "Error" 125 | msgstr "Chyba" 126 | 127 | #: src/mainwindow.cpp:111 src/mainwindow.cpp:115 src/mainwindow.cpp:138 128 | msgid "Could not connect to V4L device!" 129 | msgstr "Nepodařilo se spojit se zařízením V4L!" 130 | 131 | #: src/mainwindow.cpp:157 132 | msgid "" 133 | "Requested resolution (%1x%2) was not available. Driver used %3x%4 instead.\n" 134 | "Please check your configuration." 135 | msgstr "" 136 | "Požadované rozlišení (%1x%2) nebylo dostupné. Místo toho použit ovladač %3x" 137 | "%4.\n" 138 | "Ověřte, prosím, své nastavení" 139 | 140 | #: src/settingsdialog.cpp:43 141 | msgid "Selected path does not exists. Do you want to create it?" 142 | msgstr "Vybraná cesta neexistuje. Chcete ji vytvořit?" 143 | 144 | #: src/settingsdialog.cpp:60 145 | msgid "Device node:" 146 | msgstr "Uzel zařízení:" 147 | 148 | #: src/settingsdialog.cpp:67 149 | msgid "x" 150 | msgstr "x" 151 | 152 | #: src/settingsdialog.cpp:72 153 | msgid "px" 154 | msgstr "px" 155 | 156 | #: src/settingsdialog.cpp:73 157 | msgid "Resolution:" 158 | msgstr "Rozlišení:" 159 | 160 | #: src/settingsdialog.cpp:78 161 | msgid "Disabled" 162 | msgstr "Zakázáno" 163 | 164 | #: src/settingsdialog.cpp:79 165 | msgid " fps" 166 | msgstr " snímků za sekundu (fps)" 167 | 168 | #: src/settingsdialog.cpp:81 169 | msgid "Framerate limit:" 170 | msgstr "Omezení snímkování" 171 | 172 | #: src/settingsdialog.cpp:83 173 | msgid "Lock aspect ratio" 174 | msgstr "Zamknout poměr stran" 175 | 176 | #: src/settingsdialog.cpp:86 177 | msgid "Enhance contrast" 178 | msgstr "" 179 | 180 | #: src/settingsdialog.cpp:89 181 | msgid "Mirror output" 182 | msgstr "Zrcadlit výstup" 183 | 184 | #: src/settingsdialog.cpp:92 185 | msgid "Flip output" 186 | msgstr "Převrátit výstup" 187 | 188 | #: src/settingsdialog.cpp:97 189 | #, fuzzy 190 | msgid "Image Settings" 191 | msgstr "Nastavení kamery" 192 | 193 | #: src/settingsdialog.cpp:107 194 | msgid "Brightness:" 195 | msgstr "" 196 | 197 | #: src/settingsdialog.cpp:116 198 | msgid "Contrast:" 199 | msgstr "" 200 | 201 | #: src/settingsdialog.cpp:125 202 | msgid "Saturation:" 203 | msgstr "" 204 | 205 | #: src/settingsdialog.cpp:134 206 | msgid "Hue:" 207 | msgstr "" 208 | 209 | #: src/settingsdialog.cpp:138 210 | msgid "Camera" 211 | msgstr "Kamera" 212 | 213 | #: src/settingsdialog.cpp:138 214 | msgid "Camera settings" 215 | msgstr "Nastavení kamery" 216 | 217 | #: src/settingsdialog.cpp:149 src/settingsdialog.cpp:167 218 | msgid " seconds" 219 | msgstr "" 220 | 221 | #: src/settingsdialog.cpp:152 222 | #, fuzzy 223 | msgid "Self-timer timeout:" 224 | msgstr "Samospoušť" 225 | 226 | #: src/settingsdialog.cpp:163 227 | msgid "Number of photos:" 228 | msgstr "" 229 | 230 | #: src/settingsdialog.cpp:170 231 | msgid "Delay between photos:" 232 | msgstr "" 233 | 234 | #: src/settingsdialog.cpp:174 235 | msgid "Capture" 236 | msgstr "" 237 | 238 | #: src/settingsdialog.cpp:182 239 | msgid "Use default pictures directory" 240 | msgstr "Použít výchozí adresář s obrázky" 241 | 242 | #: src/settingsdialog.cpp:189 243 | msgid "Use subdirectory:" 244 | msgstr "Použít podadresář" 245 | 246 | #: src/settingsdialog.cpp:202 247 | msgid "Photo directory:" 248 | msgstr "Adresář s fotografiemi" 249 | 250 | #: src/settingsdialog.cpp:204 251 | msgid "Storage" 252 | msgstr "Úložiště" 253 | 254 | #: src/settingsdialog.cpp:204 255 | msgid "Photo storage" 256 | msgstr "Úložiště fotografií" 257 | 258 | #: src/settingsdialog.cpp:210 259 | msgid "Play sound on taking photo" 260 | msgstr "Při udělání fotky přehrát zvuk" 261 | 262 | #: src/settingsdialog.cpp:213 263 | msgid "Play timer sounds" 264 | msgstr "Přehrát zvuk časovače" 265 | 266 | #: src/settingsdialog.cpp:216 267 | msgid "Show notification on taking photo" 268 | msgstr "Po udělání fotky ukázat oznámení" 269 | 270 | #: src/settingsdialog.cpp:220 271 | msgid "Behaviour" 272 | msgstr "Chování" 273 | 274 | #: src/videowidget.cpp:100 275 | msgid "Starting up webcam..." 276 | msgstr "Spouští se kamera..." 277 | 278 | #: src/videowidget.cpp:170 279 | msgid "Photo has been stored in file %1" 280 | msgstr "Fotografie byla uložena do souboru %1" 281 | 282 | #: src/videowidget.cpp:175 283 | msgid "Open" 284 | msgstr "" 285 | 286 | #: src/videowidget.cpp:175 287 | msgid "Show in directory" 288 | msgstr "Ukázat v adresáři" 289 | 290 | #: tools/rc.cpp:1 rc.cpp:1 291 | msgctxt "NAME OF TRANSLATORS" 292 | msgid "Your names" 293 | msgstr "Pavel Fric" 294 | 295 | #: tools/rc.cpp:2 rc.cpp:2 296 | msgctxt "EMAIL OF TRANSLATORS" 297 | msgid "Your emails" 298 | msgstr "pavelfric@seznam.cz" 299 | 300 | #~ msgid "Open in GIMP" 301 | #~ msgstr "Otevřít v GIMPu" 302 | 303 | #~ msgid "Open in Inkscape" 304 | #~ msgstr "Otevřít v Inkscape" 305 | 306 | #~ msgid "Mono" 307 | #~ msgstr "Mono" 308 | 309 | #~ msgid "Less" 310 | #~ msgstr "Méně" 311 | 312 | #~ msgid "More" 313 | #~ msgstr "Více" 314 | -------------------------------------------------------------------------------- /po/sr@ijekavianlatin.po: -------------------------------------------------------------------------------- 1 | # Kamerka Serbian Ijekavian Latin Translation. 2 | # Copyright (C) 2011-2014 Sebastian Krzyszkowiak 3 | # 4 | # Mladen Pejaković , 2011, 2014. 5 | msgid "" 6 | msgstr "" 7 | "Project-Id-Version: Kamerka\n" 8 | "Report-Msgid-Bugs-To: dos@dosowisko.net\n" 9 | "POT-Creation-Date: 2019-04-10 21:34+0200\n" 10 | "PO-Revision-Date: 2014-03-27 12:46+0100\n" 11 | "Last-Translator: Mladen Pejaković \n" 12 | "Language-Team: Serbian \n" 13 | "Language: sr@ijekavianlatin\n" 14 | "MIME-Version: 1.0\n" 15 | "Content-Type: text/plain; charset=UTF-8\n" 16 | "Content-Transfer-Encoding: 8bit\n" 17 | "X-Generator: Lokalize 0.3\n" 18 | "Plural-Forms: nplurals=4; plural=n==1 ? 3 : n%10==1 && n%100!=11 ? 0 : n" 19 | "%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" 20 | 21 | #: src/kamerka.qml:248 22 | msgid "Take a photo" 23 | msgstr "Fotografiši" 24 | 25 | #: src/kamerka.qml:263 src/settingsdialog.cpp:156 26 | msgid "Burst mode" 27 | msgstr "Režim uzastopnog okidanja" 28 | 29 | #: src/kamerka.qml:286 src/settingsdialog.cpp:144 30 | msgid "Self-timer" 31 | msgstr "Samookidač" 32 | 33 | #: src/kamerka.qml:302 34 | msgid "Hide effects" 35 | msgstr "Sakrij efekte" 36 | 37 | #: src/kamerka.qml:302 38 | msgid "Show effects" 39 | msgstr "Prikaži efekte" 40 | 41 | #: src/kamerka.qml:318 42 | msgid "Open directory" 43 | msgstr "Otvori fasciklu" 44 | 45 | #: src/kamerka.qml:333 46 | msgid "Configure" 47 | msgstr "Podesi" 48 | 49 | #: src/kamerka.qml:537 50 | msgid "No Effect" 51 | msgstr "Bez efekta" 52 | 53 | #: src/kamerka.qml:553 54 | msgid "Grey" 55 | msgstr "Sivilo" 56 | 57 | #: src/kamerka.qml:569 58 | msgid "Invert" 59 | msgstr "Izvrnuto" 60 | 61 | #: src/kamerka.qml:585 62 | msgid "Equalize" 63 | msgstr "Ujednačeno" 64 | 65 | #: src/kamerka.qml:601 66 | msgid "Smurf" 67 | msgstr "Štrumf" 68 | 69 | #: src/kamerka.qml:616 70 | msgid "Implode" 71 | msgstr "Implozija" 72 | 73 | #: src/kamerka.qml:631 74 | msgid "Explode" 75 | msgstr "Eksplozija" 76 | 77 | #: src/kamerka.qml:646 78 | msgid "Charcoal" 79 | msgstr "Ugalj" 80 | 81 | #: src/kamerka.qml:661 82 | msgid "Edge" 83 | msgstr "Ivice" 84 | 85 | #: src/kamerka.qml:676 86 | msgid "Emboss" 87 | msgstr "Uklesano" 88 | 89 | #: src/kamerka.qml:691 90 | msgid "Swirl" 91 | msgstr "Kovitlac" 92 | 93 | #: src/kamerka.qml:706 94 | msgid "Oil Paint" 95 | msgstr "Ulje na platnu" 96 | 97 | #: src/kamerka.qml:721 98 | msgid "Wave" 99 | msgstr "Talas" 100 | 101 | #: src/main.cpp:37 102 | msgid "Kamerka" 103 | msgstr "Kamerka" 104 | 105 | #: src/main.cpp:38 106 | msgid "Simple photo taking application with fancy animated interface" 107 | msgstr "" 108 | "Jednostavna aplikacija za hvatanje fotografija sa lijepim animiranim sučeljem" 109 | 110 | #: src/main.cpp:39 111 | msgid "Copyright (C) 2011-2014 Sebastian Krzyszkowiak" 112 | msgstr "© 2011-2014 Sebastijan Kšiškovijak (Sebastian Krzyszkowiak)" 113 | 114 | #: src/mainwindow.cpp:46 115 | msgid "i18n() takes at least one argument" 116 | msgstr "i18n() zahtijeva bar jedan argument" 117 | 118 | #: src/mainwindow.cpp:64 119 | msgid "Could not load QML interface!" 120 | msgstr "Ne mogu da učitam QML sučelje!" 121 | 122 | #: src/mainwindow.cpp:64 src/mainwindow.cpp:115 src/mainwindow.cpp:138 123 | msgid "Error" 124 | msgstr "Greška" 125 | 126 | #: src/mainwindow.cpp:111 src/mainwindow.cpp:115 src/mainwindow.cpp:138 127 | msgid "Could not connect to V4L device!" 128 | msgstr "Ne mogu da se povežem sa V4L uređajem!" 129 | 130 | #: src/mainwindow.cpp:157 131 | msgid "" 132 | "Requested resolution (%1x%2) was not available. Driver used %3x%4 instead.\n" 133 | "Please check your configuration." 134 | msgstr "" 135 | "Zahtijevana rezolucija (%1x%2) nije dostupna. Drajver je koristio %3x%4.\n" 136 | "Provjerite vaše postavke." 137 | 138 | #: src/settingsdialog.cpp:43 139 | msgid "Selected path does not exists. Do you want to create it?" 140 | msgstr "Izabrana putanja ne postoji. Želite li da je napravite?" 141 | 142 | #: src/settingsdialog.cpp:60 143 | msgid "Device node:" 144 | msgstr "Čvor uređaja:" 145 | 146 | #: src/settingsdialog.cpp:67 147 | msgid "x" 148 | msgstr "x" 149 | 150 | #: src/settingsdialog.cpp:72 151 | msgid "px" 152 | msgstr "px" 153 | 154 | #: src/settingsdialog.cpp:73 155 | msgid "Resolution:" 156 | msgstr "Rezolucija" 157 | 158 | #: src/settingsdialog.cpp:78 159 | msgid "Disabled" 160 | msgstr "Onemogućeno" 161 | 162 | #: src/settingsdialog.cpp:79 163 | msgid " fps" 164 | msgstr " fps" 165 | 166 | #: src/settingsdialog.cpp:81 167 | msgid "Framerate limit:" 168 | msgstr "Ograničenje brzine kadrova:" 169 | 170 | #: src/settingsdialog.cpp:83 171 | msgid "Lock aspect ratio" 172 | msgstr "Zadrži razmjeru" 173 | 174 | #: src/settingsdialog.cpp:86 175 | msgid "Enhance contrast" 176 | msgstr "Poboljšaj kontrast" 177 | 178 | #: src/settingsdialog.cpp:89 179 | msgid "Mirror output" 180 | msgstr "Preslikano" 181 | 182 | #: src/settingsdialog.cpp:92 183 | msgid "Flip output" 184 | msgstr "Obrnuto" 185 | 186 | #: src/settingsdialog.cpp:97 187 | #, fuzzy 188 | msgid "Image Settings" 189 | msgstr "Postavke kamere" 190 | 191 | #: src/settingsdialog.cpp:107 192 | msgid "Brightness:" 193 | msgstr "" 194 | 195 | #: src/settingsdialog.cpp:116 196 | msgid "Contrast:" 197 | msgstr "" 198 | 199 | #: src/settingsdialog.cpp:125 200 | msgid "Saturation:" 201 | msgstr "" 202 | 203 | #: src/settingsdialog.cpp:134 204 | msgid "Hue:" 205 | msgstr "" 206 | 207 | #: src/settingsdialog.cpp:138 208 | msgid "Camera" 209 | msgstr "Kamera" 210 | 211 | #: src/settingsdialog.cpp:138 212 | msgid "Camera settings" 213 | msgstr "Postavke kamere" 214 | 215 | #: src/settingsdialog.cpp:149 src/settingsdialog.cpp:167 216 | msgid " seconds" 217 | msgstr " sekundi" 218 | 219 | #: src/settingsdialog.cpp:152 220 | msgid "Self-timer timeout:" 221 | msgstr "Vrijeme samookidača:" 222 | 223 | #: src/settingsdialog.cpp:163 224 | msgid "Number of photos:" 225 | msgstr "Broj fotografija:" 226 | 227 | #: src/settingsdialog.cpp:170 228 | msgid "Delay between photos:" 229 | msgstr "Zastoj okidanja:" 230 | 231 | #: src/settingsdialog.cpp:174 232 | msgid "Capture" 233 | msgstr "Hvatanje" 234 | 235 | #: src/settingsdialog.cpp:182 236 | msgid "Use default pictures directory" 237 | msgstr "Koristi podrazumijevanu fasciklu slika" 238 | 239 | #: src/settingsdialog.cpp:189 240 | msgid "Use subdirectory:" 241 | msgstr "Otvori podfasciklu" 242 | 243 | #: src/settingsdialog.cpp:202 244 | msgid "Photo directory:" 245 | msgstr "Fascikla fotografija:" 246 | 247 | #: src/settingsdialog.cpp:204 248 | msgid "Storage" 249 | msgstr "Spremište" 250 | 251 | #: src/settingsdialog.cpp:204 252 | msgid "Photo storage" 253 | msgstr "Spremište fotografija" 254 | 255 | #: src/settingsdialog.cpp:210 256 | msgid "Play sound on taking photo" 257 | msgstr "Pusti zvuk pri fotografisanju" 258 | 259 | #: src/settingsdialog.cpp:213 260 | msgid "Play timer sounds" 261 | msgstr "Puštaj zvuke tajmera" 262 | 263 | #: src/settingsdialog.cpp:216 264 | msgid "Show notification on taking photo" 265 | msgstr "Prikaži obavještenje pri fotografisanju" 266 | 267 | #: src/settingsdialog.cpp:220 268 | msgid "Behaviour" 269 | msgstr "Ponašanje" 270 | 271 | #: src/videowidget.cpp:100 272 | msgid "Starting up webcam..." 273 | msgstr "Pokrećem veb-kameru..." 274 | 275 | #: src/videowidget.cpp:170 276 | msgid "Photo has been stored in file %1" 277 | msgstr "Fotografija je smještena u fajl %1" 278 | 279 | #: src/videowidget.cpp:175 280 | msgid "Open" 281 | msgstr "" 282 | 283 | #: src/videowidget.cpp:175 284 | msgid "Show in directory" 285 | msgstr "Pokaži u fascikli" 286 | 287 | #: tools/rc.cpp:1 rc.cpp:1 288 | msgctxt "NAME OF TRANSLATORS" 289 | msgid "Your names" 290 | msgstr "Mladen Pejaković" 291 | 292 | #: tools/rc.cpp:2 rc.cpp:2 293 | msgctxt "EMAIL OF TRANSLATORS" 294 | msgid "Your emails" 295 | msgstr "pejakm@autistici.org" 296 | 297 | #~ msgid "Open in GIMP" 298 | #~ msgstr "Otvori u Gimpu" 299 | 300 | #~ msgid "Open in Inkscape" 301 | #~ msgstr "Otvori u Inkskejpu" 302 | -------------------------------------------------------------------------------- /po/ru.po: -------------------------------------------------------------------------------- 1 | # Kamerka Serbian Translation. 2 | # Copyright (C) 2011 Sebastian Krzyszkowiak 3 | # 4 | # Urs Fleisch , 2011. 5 | # Mladen Pejaković , 2011. 6 | msgid "" 7 | msgstr "" 8 | "Project-Id-Version: Kamerka\n" 9 | "Report-Msgid-Bugs-To: dos@dosowisko.net\n" 10 | "POT-Creation-Date: 2019-04-10 21:34+0200\n" 11 | "PO-Revision-Date: 2014-04-26 00:24+0300\n" 12 | "Last-Translator: Сергей Головко \n" 13 | "Language-Team: Russian \n" 14 | "Language: ru\n" 15 | "MIME-Version: 1.0\n" 16 | "Content-Type: text/plain; charset=UTF-8\n" 17 | "Content-Transfer-Encoding: 8bit\n" 18 | "X-Generator: Poedit 1.5.4\n" 19 | "Plural-Forms: nplurals=4; plural=n==1 ? 3 : n%10==1 && n%100!=11 ? 0 : n" 20 | "%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" 21 | 22 | #: src/kamerka.qml:248 23 | msgid "Take a photo" 24 | msgstr "Сфотографируйте" 25 | 26 | #: src/kamerka.qml:263 src/settingsdialog.cpp:156 27 | msgid "Burst mode" 28 | msgstr "" 29 | 30 | #: src/kamerka.qml:286 src/settingsdialog.cpp:144 31 | msgid "Self-timer" 32 | msgstr "Таймер" 33 | 34 | #: src/kamerka.qml:302 35 | msgid "Hide effects" 36 | msgstr "Скрыть еффекты" 37 | 38 | #: src/kamerka.qml:302 39 | msgid "Show effects" 40 | msgstr "Показать еффекты" 41 | 42 | #: src/kamerka.qml:318 43 | msgid "Open directory" 44 | msgstr "Открыть папку" 45 | 46 | #: src/kamerka.qml:333 47 | msgid "Configure" 48 | msgstr "Конфигурация" 49 | 50 | #: src/kamerka.qml:537 51 | msgid "No Effect" 52 | msgstr "Без еффекта" 53 | 54 | #: src/kamerka.qml:553 55 | msgid "Grey" 56 | msgstr "Серый" 57 | 58 | #: src/kamerka.qml:569 59 | msgid "Invert" 60 | msgstr "Искажение" 61 | 62 | #: src/kamerka.qml:585 63 | msgid "Equalize" 64 | msgstr "" 65 | 66 | #: src/kamerka.qml:601 67 | msgid "Smurf" 68 | msgstr "Штрумф" 69 | 70 | #: src/kamerka.qml:616 71 | msgid "Implode" 72 | msgstr "" 73 | 74 | #: src/kamerka.qml:631 75 | msgid "Explode" 76 | msgstr "" 77 | 78 | #: src/kamerka.qml:646 79 | msgid "Charcoal" 80 | msgstr "" 81 | 82 | #: src/kamerka.qml:661 83 | msgid "Edge" 84 | msgstr "" 85 | 86 | #: src/kamerka.qml:676 87 | msgid "Emboss" 88 | msgstr "" 89 | 90 | #: src/kamerka.qml:691 91 | msgid "Swirl" 92 | msgstr "" 93 | 94 | #: src/kamerka.qml:706 95 | msgid "Oil Paint" 96 | msgstr "" 97 | 98 | #: src/kamerka.qml:721 99 | msgid "Wave" 100 | msgstr "" 101 | 102 | #: src/main.cpp:37 103 | msgid "Kamerka" 104 | msgstr "Камерка" 105 | 106 | #: src/main.cpp:38 107 | msgid "Simple photo taking application with fancy animated interface" 108 | msgstr "" 109 | "Простое приложение для захвата изображения с красивым анимированным " 110 | "интерфейсом" 111 | 112 | #: src/main.cpp:39 113 | #, fuzzy 114 | msgid "Copyright (C) 2011-2014 Sebastian Krzyszkowiak" 115 | msgstr "© 2011-2012 Себастиан Кшишковияк (Sebastian Krzyszkowiak)" 116 | 117 | #: src/mainwindow.cpp:46 118 | msgid "i18n() takes at least one argument" 119 | msgstr "i18n() требуется как минимум один аргумент" 120 | 121 | #: src/mainwindow.cpp:64 122 | msgid "Could not load QML interface!" 123 | msgstr "Не удается загрузить интерфейс QML!" 124 | 125 | #: src/mainwindow.cpp:64 src/mainwindow.cpp:115 src/mainwindow.cpp:138 126 | msgid "Error" 127 | msgstr "Ошибка" 128 | 129 | #: src/mainwindow.cpp:111 src/mainwindow.cpp:115 src/mainwindow.cpp:138 130 | msgid "Could not connect to V4L device!" 131 | msgstr "Я не могу подключиться к устройству V4L!" 132 | 133 | #: src/mainwindow.cpp:157 134 | msgid "" 135 | "Requested resolution (%1x%2) was not available. Driver used %3x%4 instead.\n" 136 | "Please check your configuration." 137 | msgstr "" 138 | "Запрашиваемое разрешение (% 1x% 2) не доступно. Драйвер использовал 3x%% 4 \n" 139 | " Проверьте настройки." 140 | 141 | #: src/settingsdialog.cpp:43 142 | msgid "Selected path does not exists. Do you want to create it?" 143 | msgstr "Выбранный путь не существует. Вы хотите его создать?" 144 | 145 | #: src/settingsdialog.cpp:60 146 | msgid "Device node:" 147 | msgstr "Узел ( имя ) устройства:" 148 | 149 | #: src/settingsdialog.cpp:67 150 | msgid "x" 151 | msgstr "x" 152 | 153 | #: src/settingsdialog.cpp:72 154 | msgid "px" 155 | msgstr "px" 156 | 157 | #: src/settingsdialog.cpp:73 158 | msgid "Resolution:" 159 | msgstr "Разрешение:" 160 | 161 | #: src/settingsdialog.cpp:78 162 | msgid "Disabled" 163 | msgstr "Отключено" 164 | 165 | #: src/settingsdialog.cpp:79 166 | msgid " fps" 167 | msgstr " fps" 168 | 169 | #: src/settingsdialog.cpp:81 170 | msgid "Framerate limit:" 171 | msgstr "Ограничение скорости:" 172 | 173 | #: src/settingsdialog.cpp:83 174 | msgid "Lock aspect ratio" 175 | msgstr "Блокировка соотношения сторон" 176 | 177 | #: src/settingsdialog.cpp:86 178 | msgid "Enhance contrast" 179 | msgstr "" 180 | 181 | #: src/settingsdialog.cpp:89 182 | msgid "Mirror output" 183 | msgstr "Зеркальный вывод" 184 | 185 | #: src/settingsdialog.cpp:92 186 | msgid "Flip output" 187 | msgstr "Вывод наоборот" 188 | 189 | #: src/settingsdialog.cpp:97 190 | #, fuzzy 191 | msgid "Image Settings" 192 | msgstr "Настройка камеры" 193 | 194 | #: src/settingsdialog.cpp:107 195 | msgid "Brightness:" 196 | msgstr "" 197 | 198 | #: src/settingsdialog.cpp:116 199 | msgid "Contrast:" 200 | msgstr "" 201 | 202 | #: src/settingsdialog.cpp:125 203 | msgid "Saturation:" 204 | msgstr "" 205 | 206 | #: src/settingsdialog.cpp:134 207 | msgid "Hue:" 208 | msgstr "" 209 | 210 | #: src/settingsdialog.cpp:138 211 | msgid "Camera" 212 | msgstr "Камера" 213 | 214 | #: src/settingsdialog.cpp:138 215 | msgid "Camera settings" 216 | msgstr "Настройка камеры" 217 | 218 | #: src/settingsdialog.cpp:149 src/settingsdialog.cpp:167 219 | msgid " seconds" 220 | msgstr "" 221 | 222 | #: src/settingsdialog.cpp:152 223 | #, fuzzy 224 | msgid "Self-timer timeout:" 225 | msgstr "Таймер" 226 | 227 | #: src/settingsdialog.cpp:163 228 | msgid "Number of photos:" 229 | msgstr "" 230 | 231 | #: src/settingsdialog.cpp:170 232 | msgid "Delay between photos:" 233 | msgstr "" 234 | 235 | #: src/settingsdialog.cpp:174 236 | msgid "Capture" 237 | msgstr "" 238 | 239 | #: src/settingsdialog.cpp:182 240 | msgid "Use default pictures directory" 241 | msgstr "Используйте папку для изображений по умолчанию" 242 | 243 | #: src/settingsdialog.cpp:189 244 | msgid "Use subdirectory:" 245 | msgstr "Откройте вложенную папку:" 246 | 247 | #: src/settingsdialog.cpp:202 248 | msgid "Photo directory:" 249 | msgstr "Папка изображения:" 250 | 251 | #: src/settingsdialog.cpp:204 252 | msgid "Storage" 253 | msgstr "Хранилище" 254 | 255 | #: src/settingsdialog.cpp:204 256 | msgid "Photo storage" 257 | msgstr "Хранилище изображений" 258 | 259 | #: src/settingsdialog.cpp:210 260 | msgid "Play sound on taking photo" 261 | msgstr "Воспроизведение звука при съемке" 262 | 263 | #: src/settingsdialog.cpp:213 264 | msgid "Play timer sounds" 265 | msgstr "Играть звуки таймера" 266 | 267 | #: src/settingsdialog.cpp:216 268 | msgid "Show notification on taking photo" 269 | msgstr "Показывать уведомление при съемке" 270 | 271 | #: src/settingsdialog.cpp:220 272 | msgid "Behaviour" 273 | msgstr "Поведение" 274 | 275 | #: src/videowidget.cpp:100 276 | msgid "Starting up webcam..." 277 | msgstr "Запуск веб-камеры ..." 278 | 279 | #: src/videowidget.cpp:170 280 | msgid "Photo has been stored in file %1" 281 | msgstr "Фото расположено в файле% 1" 282 | 283 | #: src/videowidget.cpp:175 284 | msgid "Open" 285 | msgstr "" 286 | 287 | #: src/videowidget.cpp:175 288 | msgid "Show in directory" 289 | msgstr "Показать в папке" 290 | 291 | #: tools/rc.cpp:1 rc.cpp:1 292 | msgctxt "NAME OF TRANSLATORS" 293 | msgid "Your names" 294 | msgstr "Сергей Головко" 295 | 296 | #: tools/rc.cpp:2 rc.cpp:2 297 | msgctxt "EMAIL OF TRANSLATORS" 298 | msgid "Your emails" 299 | msgstr "cappelikan@gmail.com" 300 | 301 | #~ msgid "Open in GIMP" 302 | #~ msgstr "Открыть в ГИМПе" 303 | 304 | #~ msgid "Open in Inkscape" 305 | #~ msgstr "Открыть в Инкскейпе" 306 | 307 | #~ msgid "Less" 308 | #~ msgstr "Менее" 309 | 310 | #~ msgid "More" 311 | #~ msgstr "Более" 312 | 313 | #~ msgid "Mono" 314 | #~ msgstr "монохромный" 315 | -------------------------------------------------------------------------------- /po/de.po: -------------------------------------------------------------------------------- 1 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER 2 | # This file is distributed under the same license as the PACKAGE package. 3 | # 4 | # Frank Schäfer , 2011, 2012. 5 | msgid "" 6 | msgstr "" 7 | "Project-Id-Version: \n" 8 | "Report-Msgid-Bugs-To: dos@dosowisko.net\n" 9 | "POT-Creation-Date: 2019-04-10 21:34+0200\n" 10 | "PO-Revision-Date: 2012-10-21 12:37+0300\n" 11 | "Last-Translator: Frank Schäfer\n" 12 | "Language-Team: German \n" 13 | "Language: de\n" 14 | "MIME-Version: 1.0\n" 15 | "Content-Type: text/plain; charset=UTF-8\n" 16 | "Content-Transfer-Encoding: 8bit\n" 17 | "X-Generator: Lokalize 1.5\n" 18 | "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" 19 | 20 | #: src/kamerka.qml:248 21 | msgid "Take a photo" 22 | msgstr "Foto machen" 23 | 24 | #: src/kamerka.qml:263 src/settingsdialog.cpp:156 25 | msgid "Burst mode" 26 | msgstr "" 27 | 28 | #: src/kamerka.qml:286 src/settingsdialog.cpp:144 29 | msgid "Self-timer" 30 | msgstr "Selbstauslöser" 31 | 32 | #: src/kamerka.qml:302 33 | msgid "Hide effects" 34 | msgstr "Effekte ausblenden" 35 | 36 | #: src/kamerka.qml:302 37 | msgid "Show effects" 38 | msgstr "Zeige Effekte" 39 | 40 | #: src/kamerka.qml:318 41 | msgid "Open directory" 42 | msgstr "Verzeichnis öffnen" 43 | 44 | #: src/kamerka.qml:333 45 | msgid "Configure" 46 | msgstr "Konfigurieren" 47 | 48 | #: src/kamerka.qml:537 49 | msgid "No Effect" 50 | msgstr "Kein Effekt" 51 | 52 | #: src/kamerka.qml:553 53 | msgid "Grey" 54 | msgstr "Grau" 55 | 56 | #: src/kamerka.qml:569 57 | msgid "Invert" 58 | msgstr "Invertiert" 59 | 60 | #: src/kamerka.qml:585 61 | msgid "Equalize" 62 | msgstr "" 63 | 64 | # Schlumpf 65 | #: src/kamerka.qml:601 66 | msgid "Smurf" 67 | msgstr "Smurf" 68 | 69 | #: src/kamerka.qml:616 70 | msgid "Implode" 71 | msgstr "" 72 | 73 | #: src/kamerka.qml:631 74 | msgid "Explode" 75 | msgstr "" 76 | 77 | #: src/kamerka.qml:646 78 | msgid "Charcoal" 79 | msgstr "" 80 | 81 | #: src/kamerka.qml:661 82 | msgid "Edge" 83 | msgstr "" 84 | 85 | #: src/kamerka.qml:676 86 | msgid "Emboss" 87 | msgstr "" 88 | 89 | #: src/kamerka.qml:691 90 | msgid "Swirl" 91 | msgstr "" 92 | 93 | #: src/kamerka.qml:706 94 | msgid "Oil Paint" 95 | msgstr "" 96 | 97 | #: src/kamerka.qml:721 98 | msgid "Wave" 99 | msgstr "" 100 | 101 | #: src/main.cpp:37 102 | msgid "Kamerka" 103 | msgstr "Kamerka" 104 | 105 | #: src/main.cpp:38 106 | msgid "Simple photo taking application with fancy animated interface" 107 | msgstr "" 108 | "Einfache Anwendung zum Fotografieren mit einer phantasievollen " 109 | "Benutzeroberfläche" 110 | 111 | #: src/main.cpp:39 112 | #, fuzzy 113 | msgid "Copyright (C) 2011-2014 Sebastian Krzyszkowiak" 114 | msgstr "Copyright (c) 2011-2012 Sebastian Krzyszkowiak" 115 | 116 | #: src/mainwindow.cpp:46 117 | msgid "i18n() takes at least one argument" 118 | msgstr "i18n() benötigt mindestens ein Argument" 119 | 120 | #: src/mainwindow.cpp:64 121 | msgid "Could not load QML interface!" 122 | msgstr "QML-Interface konnte nicht geladen werden !" 123 | 124 | #: src/mainwindow.cpp:64 src/mainwindow.cpp:115 src/mainwindow.cpp:138 125 | msgid "Error" 126 | msgstr "Fehler" 127 | 128 | #: src/mainwindow.cpp:111 src/mainwindow.cpp:115 src/mainwindow.cpp:138 129 | msgid "Could not connect to V4L device!" 130 | msgstr "V4L-Gerät konnte nicht verbunden werden !" 131 | 132 | #: src/mainwindow.cpp:157 133 | msgid "" 134 | "Requested resolution (%1x%2) was not available. Driver used %3x%4 instead.\n" 135 | "Please check your configuration." 136 | msgstr "" 137 | "Die gewählte Auflösung (%1x%2) ist nicht verfügbar. Der Treiber verwendet\n" 138 | " stattdessen %3x%4. Bitte überprüfen Sie die Einstellungen." 139 | 140 | #: src/settingsdialog.cpp:43 141 | msgid "Selected path does not exists. Do you want to create it?" 142 | msgstr "Das gewählte Verzeichnis existiert nicht. Soll es erstellt werden ?" 143 | 144 | #: src/settingsdialog.cpp:60 145 | msgid "Device node:" 146 | msgstr "Gerätedatei:" 147 | 148 | #: src/settingsdialog.cpp:67 149 | msgid "x" 150 | msgstr "x" 151 | 152 | #: src/settingsdialog.cpp:72 153 | msgid "px" 154 | msgstr "px" 155 | 156 | #: src/settingsdialog.cpp:73 157 | msgid "Resolution:" 158 | msgstr "Auflösung:" 159 | 160 | #: src/settingsdialog.cpp:78 161 | msgid "Disabled" 162 | msgstr "Deaktiviert" 163 | 164 | #: src/settingsdialog.cpp:79 165 | msgid " fps" 166 | msgstr " Bilder/Sek." 167 | 168 | #: src/settingsdialog.cpp:81 169 | msgid "Framerate limit:" 170 | msgstr "Bildraten-Limit:" 171 | 172 | #: src/settingsdialog.cpp:83 173 | msgid "Lock aspect ratio" 174 | msgstr "Festes Bildseitenverhältnis" 175 | 176 | #: src/settingsdialog.cpp:86 177 | msgid "Enhance contrast" 178 | msgstr "" 179 | 180 | #: src/settingsdialog.cpp:89 181 | msgid "Mirror output" 182 | msgstr "Vertikal spiegeln" 183 | 184 | #: src/settingsdialog.cpp:92 185 | msgid "Flip output" 186 | msgstr "Horizontal spiegeln" 187 | 188 | #: src/settingsdialog.cpp:97 189 | #, fuzzy 190 | msgid "Image Settings" 191 | msgstr "Kamera-Einstellungen" 192 | 193 | #: src/settingsdialog.cpp:107 194 | msgid "Brightness:" 195 | msgstr "" 196 | 197 | #: src/settingsdialog.cpp:116 198 | msgid "Contrast:" 199 | msgstr "" 200 | 201 | #: src/settingsdialog.cpp:125 202 | msgid "Saturation:" 203 | msgstr "" 204 | 205 | #: src/settingsdialog.cpp:134 206 | msgid "Hue:" 207 | msgstr "" 208 | 209 | #: src/settingsdialog.cpp:138 210 | msgid "Camera" 211 | msgstr "Kamera" 212 | 213 | #: src/settingsdialog.cpp:138 214 | msgid "Camera settings" 215 | msgstr "Kamera-Einstellungen" 216 | 217 | #: src/settingsdialog.cpp:149 src/settingsdialog.cpp:167 218 | msgid " seconds" 219 | msgstr "" 220 | 221 | #: src/settingsdialog.cpp:152 222 | #, fuzzy 223 | msgid "Self-timer timeout:" 224 | msgstr "Selbstauslöser" 225 | 226 | #: src/settingsdialog.cpp:163 227 | msgid "Number of photos:" 228 | msgstr "" 229 | 230 | #: src/settingsdialog.cpp:170 231 | msgid "Delay between photos:" 232 | msgstr "" 233 | 234 | #: src/settingsdialog.cpp:174 235 | msgid "Capture" 236 | msgstr "" 237 | 238 | #: src/settingsdialog.cpp:182 239 | msgid "Use default pictures directory" 240 | msgstr "Verwende Standard-Bilderverzeichnis" 241 | 242 | #: src/settingsdialog.cpp:189 243 | msgid "Use subdirectory:" 244 | msgstr "Verwende Unterverzeichnis:" 245 | 246 | #: src/settingsdialog.cpp:202 247 | msgid "Photo directory:" 248 | msgstr "Bilderverzeichnis:" 249 | 250 | #: src/settingsdialog.cpp:204 251 | msgid "Storage" 252 | msgstr "Speicherung" 253 | 254 | #: src/settingsdialog.cpp:204 255 | msgid "Photo storage" 256 | msgstr "Foto-Speicherung" 257 | 258 | #: src/settingsdialog.cpp:210 259 | msgid "Play sound on taking photo" 260 | msgstr "Sound beim Fotografieren abspielen" 261 | 262 | #: src/settingsdialog.cpp:213 263 | msgid "Play timer sounds" 264 | msgstr "Timer-Sounds abspielen" 265 | 266 | #: src/settingsdialog.cpp:216 267 | msgid "Show notification on taking photo" 268 | msgstr "Benachrichtigung beim Fotografieren anzeigen" 269 | 270 | #: src/settingsdialog.cpp:220 271 | msgid "Behaviour" 272 | msgstr "Verhalten" 273 | 274 | #: src/videowidget.cpp:100 275 | msgid "Starting up webcam..." 276 | msgstr "Starte webcam..." 277 | 278 | #: src/videowidget.cpp:170 279 | msgid "Photo has been stored in file %1" 280 | msgstr "Foto wurde in Datei %1 gespeichert" 281 | 282 | #: src/videowidget.cpp:175 283 | msgid "Open" 284 | msgstr "" 285 | 286 | #: src/videowidget.cpp:175 287 | msgid "Show in directory" 288 | msgstr "In Verzeichnis anzeigen" 289 | 290 | #: tools/rc.cpp:1 rc.cpp:1 291 | msgctxt "NAME OF TRANSLATORS" 292 | msgid "Your names" 293 | msgstr "Frank Schäfer" 294 | 295 | #: tools/rc.cpp:2 rc.cpp:2 296 | msgctxt "EMAIL OF TRANSLATORS" 297 | msgid "Your emails" 298 | msgstr "fschaefer.oss@googlemail.com" 299 | 300 | #~ msgid "Open in GIMP" 301 | #~ msgstr "Mit GIMP öffnen" 302 | 303 | #~ msgid "Open in Inkscape" 304 | #~ msgstr "Mit Inkscape öffnen" 305 | 306 | #~ msgid "Mono" 307 | #~ msgstr "Mono" 308 | 309 | #~ msgid "Less" 310 | #~ msgstr "Weniger" 311 | 312 | #~ msgid "More" 313 | #~ msgstr "Mehr" 314 | -------------------------------------------------------------------------------- /po/uk.po: -------------------------------------------------------------------------------- 1 | # Kamerka Serbian Translation. 2 | # Copyright (C) 2011 Sebastian Krzyszkowiak 3 | # 4 | # Urs Fleisch , 2011. 5 | # Mladen Pejaković , 2011. 6 | msgid "" 7 | msgstr "" 8 | "Project-Id-Version: Kamerka\n" 9 | "Report-Msgid-Bugs-To: dos@dosowisko.net\n" 10 | "POT-Creation-Date: 2019-04-10 21:34+0200\n" 11 | "PO-Revision-Date: 2014-04-26 00:50+0300\n" 12 | "Last-Translator: Сергей Головко \n" 13 | "Language-Team: Russian \n" 14 | "Language: ru\n" 15 | "MIME-Version: 1.0\n" 16 | "Content-Type: text/plain; charset=UTF-8\n" 17 | "Content-Transfer-Encoding: 8bit\n" 18 | "X-Generator: Poedit 1.5.4\n" 19 | "Plural-Forms: nplurals=4; plural=n==1 ? 3 : n%10==1 && n%100!=11 ? 0 : n" 20 | "%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" 21 | 22 | #: src/kamerka.qml:248 23 | msgid "Take a photo" 24 | msgstr "Зфотографуйте" 25 | 26 | #: src/kamerka.qml:263 src/settingsdialog.cpp:156 27 | msgid "Burst mode" 28 | msgstr "" 29 | 30 | #: src/kamerka.qml:286 src/settingsdialog.cpp:144 31 | msgid "Self-timer" 32 | msgstr "Таймер" 33 | 34 | #: src/kamerka.qml:302 35 | msgid "Hide effects" 36 | msgstr "Сховати еффекти" 37 | 38 | #: src/kamerka.qml:302 39 | msgid "Show effects" 40 | msgstr "Показати еффекти" 41 | 42 | #: src/kamerka.qml:318 43 | msgid "Open directory" 44 | msgstr "Відкрити папку" 45 | 46 | #: src/kamerka.qml:333 47 | msgid "Configure" 48 | msgstr "Конфігурація" 49 | 50 | #: src/kamerka.qml:537 51 | msgid "No Effect" 52 | msgstr "Без еффекту" 53 | 54 | #: src/kamerka.qml:553 55 | msgid "Grey" 56 | msgstr "Сірий" 57 | 58 | #: src/kamerka.qml:569 59 | msgid "Invert" 60 | msgstr "Спотворення" 61 | 62 | #: src/kamerka.qml:585 63 | msgid "Equalize" 64 | msgstr "" 65 | 66 | #: src/kamerka.qml:601 67 | msgid "Smurf" 68 | msgstr "Штрумф" 69 | 70 | #: src/kamerka.qml:616 71 | msgid "Implode" 72 | msgstr "" 73 | 74 | #: src/kamerka.qml:631 75 | msgid "Explode" 76 | msgstr "" 77 | 78 | #: src/kamerka.qml:646 79 | msgid "Charcoal" 80 | msgstr "" 81 | 82 | #: src/kamerka.qml:661 83 | msgid "Edge" 84 | msgstr "" 85 | 86 | #: src/kamerka.qml:676 87 | msgid "Emboss" 88 | msgstr "" 89 | 90 | #: src/kamerka.qml:691 91 | msgid "Swirl" 92 | msgstr "" 93 | 94 | #: src/kamerka.qml:706 95 | msgid "Oil Paint" 96 | msgstr "" 97 | 98 | #: src/kamerka.qml:721 99 | msgid "Wave" 100 | msgstr "" 101 | 102 | #: src/main.cpp:37 103 | msgid "Kamerka" 104 | msgstr "Камерка" 105 | 106 | #: src/main.cpp:38 107 | msgid "Simple photo taking application with fancy animated interface" 108 | msgstr "" 109 | "Простий додаток для захоплення зображення з красивим анімованним інтерфейсом" 110 | 111 | #: src/main.cpp:39 112 | #, fuzzy 113 | msgid "Copyright (C) 2011-2014 Sebastian Krzyszkowiak" 114 | msgstr "© 2011-2012 Себастіан Кшишков'як (Sebastian Krzyszkowiak)" 115 | 116 | #: src/mainwindow.cpp:46 117 | msgid "i18n() takes at least one argument" 118 | msgstr "i18n() потрібний як мінімум один аргумент" 119 | 120 | #: src/mainwindow.cpp:64 121 | msgid "Could not load QML interface!" 122 | msgstr "Не вдаеться завантажити інтерфейс QML!" 123 | 124 | #: src/mainwindow.cpp:64 src/mainwindow.cpp:115 src/mainwindow.cpp:138 125 | msgid "Error" 126 | msgstr "Помилка" 127 | 128 | #: src/mainwindow.cpp:111 src/mainwindow.cpp:115 src/mainwindow.cpp:138 129 | msgid "Could not connect to V4L device!" 130 | msgstr "Я не можу підключитися до пристрою V4L!" 131 | 132 | #: src/mainwindow.cpp:157 133 | msgid "" 134 | "Requested resolution (%1x%2) was not available. Driver used %3x%4 instead.\n" 135 | "Please check your configuration." 136 | msgstr "" 137 | "Запитувана роздільна здатність (% 1x% 2) не доступна. Драйвер використовував " 138 | "3x%% 4 \n" 139 | " Перевірте налаштуання." 140 | 141 | #: src/settingsdialog.cpp:43 142 | msgid "Selected path does not exists. Do you want to create it?" 143 | msgstr "Обраний шлях не иснує. Ви хочете його створити?" 144 | 145 | #: src/settingsdialog.cpp:60 146 | msgid "Device node:" 147 | msgstr "Вузол ( імґя ) пристрою:" 148 | 149 | #: src/settingsdialog.cpp:67 150 | msgid "x" 151 | msgstr "x" 152 | 153 | #: src/settingsdialog.cpp:72 154 | msgid "px" 155 | msgstr "px" 156 | 157 | #: src/settingsdialog.cpp:73 158 | msgid "Resolution:" 159 | msgstr "Роздільна здатність:" 160 | 161 | #: src/settingsdialog.cpp:78 162 | msgid "Disabled" 163 | msgstr "Відключено" 164 | 165 | #: src/settingsdialog.cpp:79 166 | msgid " fps" 167 | msgstr " fps" 168 | 169 | #: src/settingsdialog.cpp:81 170 | msgid "Framerate limit:" 171 | msgstr "Обмеження швидкості:" 172 | 173 | #: src/settingsdialog.cpp:83 174 | msgid "Lock aspect ratio" 175 | msgstr "Блокування співвідношення сторін" 176 | 177 | #: src/settingsdialog.cpp:86 178 | msgid "Enhance contrast" 179 | msgstr "" 180 | 181 | #: src/settingsdialog.cpp:89 182 | msgid "Mirror output" 183 | msgstr "Дзеркальний вивід" 184 | 185 | #: src/settingsdialog.cpp:92 186 | msgid "Flip output" 187 | msgstr "Вивід навпаки" 188 | 189 | #: src/settingsdialog.cpp:97 190 | #, fuzzy 191 | msgid "Image Settings" 192 | msgstr "Налаштування камери" 193 | 194 | #: src/settingsdialog.cpp:107 195 | msgid "Brightness:" 196 | msgstr "" 197 | 198 | #: src/settingsdialog.cpp:116 199 | msgid "Contrast:" 200 | msgstr "" 201 | 202 | #: src/settingsdialog.cpp:125 203 | msgid "Saturation:" 204 | msgstr "" 205 | 206 | #: src/settingsdialog.cpp:134 207 | msgid "Hue:" 208 | msgstr "" 209 | 210 | #: src/settingsdialog.cpp:138 211 | msgid "Camera" 212 | msgstr "Камера" 213 | 214 | #: src/settingsdialog.cpp:138 215 | msgid "Camera settings" 216 | msgstr "Налаштування камери" 217 | 218 | #: src/settingsdialog.cpp:149 src/settingsdialog.cpp:167 219 | msgid " seconds" 220 | msgstr "" 221 | 222 | #: src/settingsdialog.cpp:152 223 | #, fuzzy 224 | msgid "Self-timer timeout:" 225 | msgstr "Таймер" 226 | 227 | #: src/settingsdialog.cpp:163 228 | msgid "Number of photos:" 229 | msgstr "" 230 | 231 | #: src/settingsdialog.cpp:170 232 | msgid "Delay between photos:" 233 | msgstr "" 234 | 235 | #: src/settingsdialog.cpp:174 236 | msgid "Capture" 237 | msgstr "" 238 | 239 | #: src/settingsdialog.cpp:182 240 | msgid "Use default pictures directory" 241 | msgstr "Використовуйте теку для зображень по умовчанню" 242 | 243 | #: src/settingsdialog.cpp:189 244 | msgid "Use subdirectory:" 245 | msgstr "Відкрийте вкладену теку:" 246 | 247 | #: src/settingsdialog.cpp:202 248 | msgid "Photo directory:" 249 | msgstr "Тека зображення:" 250 | 251 | #: src/settingsdialog.cpp:204 252 | msgid "Storage" 253 | msgstr "Сховище" 254 | 255 | #: src/settingsdialog.cpp:204 256 | msgid "Photo storage" 257 | msgstr "Сховище зображень" 258 | 259 | #: src/settingsdialog.cpp:210 260 | msgid "Play sound on taking photo" 261 | msgstr "Відтворення звуку при зйомці" 262 | 263 | #: src/settingsdialog.cpp:213 264 | msgid "Play timer sounds" 265 | msgstr "Грати звуки таймера" 266 | 267 | #: src/settingsdialog.cpp:216 268 | msgid "Show notification on taking photo" 269 | msgstr "Показувати повідомлення при зйомці" 270 | 271 | #: src/settingsdialog.cpp:220 272 | msgid "Behaviour" 273 | msgstr "Поведінка" 274 | 275 | #: src/videowidget.cpp:100 276 | msgid "Starting up webcam..." 277 | msgstr "Запуск веб-камери ..." 278 | 279 | #: src/videowidget.cpp:170 280 | msgid "Photo has been stored in file %1" 281 | msgstr "Фото розташоване у файлі% 1" 282 | 283 | #: src/videowidget.cpp:175 284 | msgid "Open" 285 | msgstr "" 286 | 287 | #: src/videowidget.cpp:175 288 | msgid "Show in directory" 289 | msgstr "Показати в теці" 290 | 291 | #: tools/rc.cpp:1 rc.cpp:1 292 | msgctxt "NAME OF TRANSLATORS" 293 | msgid "Your names" 294 | msgstr "Сергій Головко" 295 | 296 | #: tools/rc.cpp:2 rc.cpp:2 297 | msgctxt "EMAIL OF TRANSLATORS" 298 | msgid "Your emails" 299 | msgstr "cappelikan@gmail.com" 300 | 301 | #~ msgid "Open in GIMP" 302 | #~ msgstr "Відкрити у ГИМПе" 303 | 304 | #~ msgid "Open in Inkscape" 305 | #~ msgstr "Відкрити у Инкскейпі" 306 | 307 | #~ msgid "Less" 308 | #~ msgstr "Менше" 309 | 310 | #~ msgid "More" 311 | #~ msgstr "Більше" 312 | 313 | #~ msgid "Mono" 314 | #~ msgstr "монохромний" 315 | -------------------------------------------------------------------------------- /po/pl.po: -------------------------------------------------------------------------------- 1 | # Kamerka - Polish Translation 2 | # Copyright (C) 2011-2014 Sebastian Krzyszkowiak 3 | # This file is distributed under the same license as the Kamerka package. 4 | # Sebastian Krzyszkowiak , 2011-2014. 5 | # 6 | msgid "" 7 | msgstr "" 8 | "Project-Id-Version: Kamerka\n" 9 | "Report-Msgid-Bugs-To: dos@dosowisko.net\n" 10 | "POT-Creation-Date: 2019-04-10 21:34+0200\n" 11 | "PO-Revision-Date: 2019-04-10 21:35+0200\n" 12 | "Last-Translator: Sebastian Krzyszkowiak \n" 13 | "Language-Team: pl_PL \n" 14 | "Language: pl\n" 15 | "MIME-Version: 1.0\n" 16 | "Content-Type: text/plain; charset=UTF-8\n" 17 | "Content-Transfer-Encoding: 8bit\n" 18 | "X-Generator: Poedit 2.2.1\n" 19 | 20 | #: src/kamerka.qml:248 21 | msgid "Take a photo" 22 | msgstr "Zrób zdjęcie" 23 | 24 | #: src/kamerka.qml:263 src/settingsdialog.cpp:156 25 | msgid "Burst mode" 26 | msgstr "Zdjęcia seryjne" 27 | 28 | #: src/kamerka.qml:286 src/settingsdialog.cpp:144 29 | msgid "Self-timer" 30 | msgstr "Samowyzwalacz" 31 | 32 | #: src/kamerka.qml:302 33 | msgid "Hide effects" 34 | msgstr "Schowaj efekty" 35 | 36 | #: src/kamerka.qml:302 37 | msgid "Show effects" 38 | msgstr "Pokaż efekty" 39 | 40 | #: src/kamerka.qml:318 41 | msgid "Open directory" 42 | msgstr "Otwórz folder" 43 | 44 | #: src/kamerka.qml:333 45 | msgid "Configure" 46 | msgstr "Konfiguracja" 47 | 48 | #: src/kamerka.qml:537 49 | msgid "No Effect" 50 | msgstr "Bez efektów" 51 | 52 | #: src/kamerka.qml:553 53 | msgid "Grey" 54 | msgstr "Szarość" 55 | 56 | #: src/kamerka.qml:569 57 | msgid "Invert" 58 | msgstr "Inwersja" 59 | 60 | #: src/kamerka.qml:585 61 | msgid "Equalize" 62 | msgstr "Wyrównanie" 63 | 64 | #: src/kamerka.qml:601 65 | msgid "Smurf" 66 | msgstr "Smerf" 67 | 68 | #: src/kamerka.qml:616 69 | msgid "Implode" 70 | msgstr "Implozja" 71 | 72 | #: src/kamerka.qml:631 73 | msgid "Explode" 74 | msgstr "Eksplozja" 75 | 76 | #: src/kamerka.qml:646 77 | msgid "Charcoal" 78 | msgstr "Rysunek węglem" 79 | 80 | #: src/kamerka.qml:661 81 | msgid "Edge" 82 | msgstr "Krawędzie" 83 | 84 | #: src/kamerka.qml:676 85 | msgid "Emboss" 86 | msgstr "Płaskorzeźba" 87 | 88 | #: src/kamerka.qml:691 89 | msgid "Swirl" 90 | msgstr "Wir" 91 | 92 | #: src/kamerka.qml:706 93 | msgid "Oil Paint" 94 | msgstr "Farba olejna" 95 | 96 | #: src/kamerka.qml:721 97 | msgid "Wave" 98 | msgstr "Fala" 99 | 100 | #: src/main.cpp:37 101 | msgid "Kamerka" 102 | msgstr "Kamerka" 103 | 104 | #: src/main.cpp:38 105 | msgid "Simple photo taking application with fancy animated interface" 106 | msgstr "Prosta aplikacja do robienia zdjęć z ładnym, animowanym interfejsem" 107 | 108 | #: src/main.cpp:39 109 | msgid "Copyright (C) 2011-2014 Sebastian Krzyszkowiak" 110 | msgstr "Copyright (c) 2011-2014 Sebastian Krzyszkowiak" 111 | 112 | #: src/mainwindow.cpp:46 113 | msgid "i18n() takes at least one argument" 114 | msgstr "i18n() wymaga conajmniej jednego argumentu" 115 | 116 | #: src/mainwindow.cpp:64 117 | msgid "Could not load QML interface!" 118 | msgstr "Nie można uruchomić interfejsu QML!" 119 | 120 | #: src/mainwindow.cpp:64 src/mainwindow.cpp:115 src/mainwindow.cpp:138 121 | msgid "Error" 122 | msgstr "Błąd" 123 | 124 | #: src/mainwindow.cpp:111 src/mainwindow.cpp:115 src/mainwindow.cpp:138 125 | msgid "Could not connect to V4L device!" 126 | msgstr "Nie można połączyć się z urządzeniem V4L!" 127 | 128 | #: src/mainwindow.cpp:157 129 | msgid "" 130 | "Requested resolution (%1x%2) was not available. Driver used %3x%4 " 131 | "instead.\n" 132 | "Please check your configuration." 133 | msgstr "" 134 | "Żądana rozdzielczość (%1x%2) nie była dostępna. Sterownik użył " 135 | "rozdzielczości %3x%4.\n" 136 | "Proszę sprawdzić swoją konfigurację." 137 | 138 | #: src/settingsdialog.cpp:43 139 | msgid "Selected path does not exists. Do you want to create it?" 140 | msgstr "Wybrana ścieżka nie istnieje. Czy chcesz ją utworzyć?" 141 | 142 | #: src/settingsdialog.cpp:60 143 | msgid "Device node:" 144 | msgstr "Plik urządzenia:" 145 | 146 | #: src/settingsdialog.cpp:67 147 | msgid "x" 148 | msgstr "x" 149 | 150 | #: src/settingsdialog.cpp:72 151 | msgid "px" 152 | msgstr "px" 153 | 154 | #: src/settingsdialog.cpp:73 155 | msgid "Resolution:" 156 | msgstr "Rozdzielczość:" 157 | 158 | #: src/settingsdialog.cpp:78 159 | msgid "Disabled" 160 | msgstr "Wyłączone" 161 | 162 | #: src/settingsdialog.cpp:79 163 | msgid " fps" 164 | msgstr " fps" 165 | 166 | #: src/settingsdialog.cpp:81 167 | msgid "Framerate limit:" 168 | msgstr "Limit klatek na sekundę:" 169 | 170 | #: src/settingsdialog.cpp:83 171 | msgid "Lock aspect ratio" 172 | msgstr "Zachowaj proporcje" 173 | 174 | #: src/settingsdialog.cpp:86 175 | msgid "Enhance contrast" 176 | msgstr "Popraw kontrast" 177 | 178 | #: src/settingsdialog.cpp:89 179 | msgid "Mirror output" 180 | msgstr "Odbij obraz poziomo" 181 | 182 | #: src/settingsdialog.cpp:92 183 | msgid "Flip output" 184 | msgstr "Odbij obraz pionowo" 185 | 186 | #: src/settingsdialog.cpp:97 187 | msgid "Image Settings" 188 | msgstr "Ustawienia obrazu" 189 | 190 | #: src/settingsdialog.cpp:107 191 | msgid "Brightness:" 192 | msgstr "Jasność:" 193 | 194 | #: src/settingsdialog.cpp:116 195 | msgid "Contrast:" 196 | msgstr "Kontrast:" 197 | 198 | #: src/settingsdialog.cpp:125 199 | msgid "Saturation:" 200 | msgstr "Nasycenie:" 201 | 202 | #: src/settingsdialog.cpp:134 203 | msgid "Hue:" 204 | msgstr "Barwa:" 205 | 206 | #: src/settingsdialog.cpp:138 207 | msgid "Camera" 208 | msgstr "Kamera" 209 | 210 | #: src/settingsdialog.cpp:138 211 | msgid "Camera settings" 212 | msgstr "Ustawienia kamery" 213 | 214 | #: src/settingsdialog.cpp:149 src/settingsdialog.cpp:167 215 | msgid " seconds" 216 | msgstr " sek." 217 | 218 | #: src/settingsdialog.cpp:152 219 | msgid "Self-timer timeout:" 220 | msgstr "Czas samowyzwalacza:" 221 | 222 | #: src/settingsdialog.cpp:163 223 | msgid "Number of photos:" 224 | msgstr "Liczba ujęć:" 225 | 226 | #: src/settingsdialog.cpp:170 227 | msgid "Delay between photos:" 228 | msgstr "Opóźnienie między ujęciami:" 229 | 230 | #: src/settingsdialog.cpp:174 231 | msgid "Capture" 232 | msgstr "Przechwytywanie" 233 | 234 | #: src/settingsdialog.cpp:182 235 | msgid "Use default pictures directory" 236 | msgstr "Użyj domyślnego folderu z obrazami" 237 | 238 | #: src/settingsdialog.cpp:189 239 | msgid "Use subdirectory:" 240 | msgstr "Użyj podfolderu:" 241 | 242 | #: src/settingsdialog.cpp:202 243 | msgid "Photo directory:" 244 | msgstr "Folder zdjęć:" 245 | 246 | #: src/settingsdialog.cpp:204 247 | msgid "Storage" 248 | msgstr "Przechowywanie" 249 | 250 | #: src/settingsdialog.cpp:204 251 | msgid "Photo storage" 252 | msgstr "Przechowywanie zdjęć" 253 | 254 | #: src/settingsdialog.cpp:210 255 | msgid "Play sound on taking photo" 256 | msgstr "Odtwarzaj dźwięk przy robieniu zdjęcia" 257 | 258 | #: src/settingsdialog.cpp:213 259 | msgid "Play timer sounds" 260 | msgstr "Odtwarzaj dźwięki samowyzwalacza" 261 | 262 | #: src/settingsdialog.cpp:216 263 | msgid "Show notification on taking photo" 264 | msgstr "Pokaż powiadomienie przy robieniu zdjęcia" 265 | 266 | #: src/settingsdialog.cpp:220 267 | msgid "Behaviour" 268 | msgstr "Zachowanie" 269 | 270 | #: src/videowidget.cpp:100 271 | msgid "Starting up webcam..." 272 | msgstr "Uruchamianie kamerki..." 273 | 274 | #: src/videowidget.cpp:170 275 | msgid "Photo has been stored in file %1" 276 | msgstr "Zdjęcie zostało zapisane w pliku %1" 277 | 278 | #: src/videowidget.cpp:175 279 | msgid "Open" 280 | msgstr "Otwórz" 281 | 282 | #: src/videowidget.cpp:175 283 | msgid "Show in directory" 284 | msgstr "Pokaż w folderze" 285 | 286 | #: tools/rc.cpp:1 rc.cpp:1 287 | msgctxt "NAME OF TRANSLATORS" 288 | msgid "Your names" 289 | msgstr "Sebastian Krzyszkowiak" 290 | 291 | #: tools/rc.cpp:2 rc.cpp:2 292 | msgctxt "EMAIL OF TRANSLATORS" 293 | msgid "Your emails" 294 | msgstr "dos@dosowisko.net" 295 | 296 | #~ msgid "Open in GIMP" 297 | #~ msgstr "Otwórz w GIMPie" 298 | 299 | #~ msgid "Open in Inkscape" 300 | #~ msgstr "Otwórz w Inkscape" 301 | 302 | #~ msgid "Mono" 303 | #~ msgstr "Mono" 304 | 305 | #~ msgid "Less" 306 | #~ msgstr "Mniej" 307 | 308 | #~ msgid "More" 309 | #~ msgstr "Więcej" 310 | -------------------------------------------------------------------------------- /src/settingsdialog.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) Sebastian Krzyszkowiak 3 | * 4 | * This program is free software; you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation; either version 2 of the License, or 7 | * (at your option) any later version. 8 | * 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License 15 | * along with this program; if not, write to the Free Software 16 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. 17 | */ 18 | 19 | #include 20 | #include 21 | #include 22 | #include 23 | #include 24 | #include "settingsdialog.h" 25 | 26 | void SettingsDialog::updateUrl() { 27 | if (xdggroupbox->isChecked()) { 28 | QDir dir(QStandardPaths::writableLocation(QStandardPaths::PicturesLocation)); 29 | QString sub = ""; 30 | if (subdircheck->isChecked()) { 31 | sub = subdir->text(); 32 | subdir->setEnabled(true); 33 | } else subdir->setEnabled(false); 34 | config->findItem("photodir")->setProperty(dir.absoluteFilePath(sub)); 35 | urledit->setText(dir.absoluteFilePath(sub)); 36 | urledit->setEnabled(false); 37 | } else urledit->setEnabled(true); 38 | } 39 | 40 | void SettingsDialog::checkDir() { 41 | QDir dir; 42 | if (!(dir.exists(config->findItem("photodir")->property().toString()))) { 43 | int ret = KMessageBox::questionYesNo(0, i18n("Selected path does not exists. Do you want to create it?")); 44 | if (ret==KMessageBox::Yes) dir.mkpath(config->findItem("photodir")->property().toString()); 45 | } 46 | } 47 | 48 | SettingsDialog::SettingsDialog(QWidget *parent, QString name, KConfigSkeleton *conf) : 49 | KConfigDialog(parent, name, conf) 50 | { 51 | //this->showButton(QDialog::Help, false); 52 | config=conf; 53 | 54 | // camera page 55 | QWidget *page = new QWidget(this); 56 | QFormLayout *layout = new QFormLayout(page); 57 | 58 | KLineEdit *textedit = new KLineEdit(); 59 | textedit->setObjectName("kcfg_node"); 60 | layout->addRow(i18n("Device node:"), textedit); 61 | 62 | QHBoxLayout *hlayout = new QHBoxLayout(); 63 | QSpinBox *spinbox = new QSpinBox(); 64 | spinbox->setMaximum(10000); 65 | spinbox->setObjectName("kcfg_width"); 66 | hlayout->addWidget(spinbox); 67 | hlayout->addWidget(new QLabel(i18n("x"))); 68 | spinbox = new QSpinBox(); 69 | spinbox->setMaximum(10000); 70 | spinbox->setObjectName("kcfg_height"); 71 | hlayout->addWidget(spinbox); 72 | hlayout->addWidget(new QLabel(i18n("px"))); 73 | layout->addRow(i18n("Resolution:"), hlayout); 74 | 75 | spinbox = new QSpinBox(); 76 | spinbox->setMinimum(0); 77 | spinbox->setMaximum(1000); 78 | spinbox->setSpecialValueText(i18n("Disabled")); 79 | spinbox->setSuffix(i18n(" fps")); 80 | spinbox->setObjectName("kcfg_fps"); 81 | layout->addRow(i18n("Framerate limit:"), spinbox); 82 | 83 | QCheckBox *checkbox = new QCheckBox(i18n("Lock aspect ratio")); 84 | checkbox->setObjectName("kcfg_aspectlock"); 85 | layout->addRow(checkbox); 86 | checkbox = new QCheckBox(i18n("Enhance contrast")); 87 | checkbox->setObjectName("kcfg_normalize"); 88 | layout->addRow(checkbox); 89 | checkbox = new QCheckBox(i18n("Mirror output")); 90 | checkbox->setObjectName("kcfg_mirror"); 91 | layout->addRow(checkbox); 92 | checkbox = new QCheckBox(i18n("Flip output")); 93 | checkbox->setObjectName("kcfg_flip"); 94 | layout->addRow(checkbox); 95 | 96 | xdggroupbox = new QGroupBox(); 97 | xdggroupbox->setTitle(i18n("Image Settings")); 98 | xdggroupbox->setCheckable(false); 99 | QFormLayout *lay = new QFormLayout(xdggroupbox); 100 | QSlider *slider = new QSlider(); 101 | slider->setObjectName("kcfg_brightness"); 102 | slider->setMinimum(-100); 103 | slider->setMaximum(100); 104 | slider->setTickInterval(10); 105 | slider->setTickPosition(QSlider::TicksBelow); 106 | slider->setOrientation(Qt::Horizontal); 107 | lay->addRow(i18n("Brightness:"), slider); 108 | 109 | slider = new QSlider(); 110 | slider->setObjectName("kcfg_contrast"); 111 | slider->setMinimum(0); 112 | slider->setMaximum(100); 113 | slider->setTickInterval(10); 114 | slider->setTickPosition(QSlider::TicksBelow); 115 | slider->setOrientation(Qt::Horizontal); 116 | lay->addRow(i18n("Contrast:"), slider); 117 | 118 | slider = new QSlider(); 119 | slider->setObjectName("kcfg_saturation"); 120 | slider->setMinimum(0); 121 | slider->setMaximum(100); 122 | slider->setTickInterval(10); 123 | slider->setTickPosition(QSlider::TicksBelow); 124 | slider->setOrientation(Qt::Horizontal); 125 | lay->addRow(i18n("Saturation:"), slider); 126 | 127 | slider = new QSlider(); 128 | slider->setObjectName("kcfg_hue"); 129 | slider->setMinimum(-100); 130 | slider->setMaximum(100); 131 | slider->setTickInterval(10); 132 | slider->setTickPosition(QSlider::TicksBelow); 133 | slider->setOrientation(Qt::Horizontal); 134 | lay->addRow(i18n("Hue:"), slider); 135 | 136 | layout->addRow(xdggroupbox); 137 | 138 | this->addPage(page, i18n("Camera"), "camera-web", i18n("Camera settings") ); 139 | 140 | // Capture page 141 | page = new QWidget(this); 142 | layout = new QFormLayout(page); 143 | xdggroupbox = new QGroupBox(); 144 | xdggroupbox->setTitle(i18n("Self-timer")); 145 | xdggroupbox->setCheckable(false); 146 | lay = new QFormLayout(xdggroupbox); 147 | spinbox = new QSpinBox(); 148 | spinbox->setObjectName("kcfg_selftimer"); 149 | spinbox->setSuffix(i18n(" seconds")); 150 | spinbox->setMinimum(1); 151 | spinbox->setMaximum(360); 152 | lay->addRow(i18n("Self-timer timeout:"), spinbox); 153 | layout->addRow(xdggroupbox); 154 | 155 | xdggroupbox = new QGroupBox(); 156 | xdggroupbox->setTitle(i18n("Burst mode")); 157 | xdggroupbox->setCheckable(false); 158 | lay = new QFormLayout(xdggroupbox); 159 | spinbox = new QSpinBox(); 160 | spinbox->setObjectName("kcfg_burstnumphotos"); 161 | spinbox->setMinimum(2); 162 | spinbox->setMaximum(20); 163 | lay->addRow(i18n("Number of photos:"), spinbox); 164 | 165 | spinbox = new QSpinBox(); 166 | spinbox->setObjectName("kcfg_delaybetweenphotos"); 167 | spinbox->setSuffix(i18n(" seconds")); 168 | spinbox->setMinimum(1); 169 | spinbox->setMaximum(3600); 170 | lay->addRow(i18n("Delay between photos:"), spinbox); 171 | 172 | layout->addRow(xdggroupbox); 173 | 174 | this->addPage(page, i18n("Capture"), "camera-photo", i18n("Capture") ); 175 | 176 | 177 | // storage page 178 | page = new QWidget(this); 179 | layout = new QFormLayout(page); 180 | 181 | xdggroupbox = new QGroupBox(); 182 | xdggroupbox->setTitle(i18n("Use default pictures directory")); 183 | xdggroupbox->setCheckable(true); 184 | xdggroupbox->setObjectName("kcfg_usexdgpictures"); 185 | connect(xdggroupbox, SIGNAL(toggled(bool)), this, SLOT(updateUrl())); 186 | lay = new QFormLayout(xdggroupbox); 187 | xdggroupbox->setLayout(lay); 188 | 189 | subdircheck = new QCheckBox(i18n("Use subdirectory:")); 190 | subdircheck->setObjectName("kcfg_ifsubdirectory"); 191 | subdir = new KLineEdit(); 192 | connect(subdir, SIGNAL(textChanged(QString)), this, SLOT(updateUrl())); 193 | subdir->setObjectName("kcfg_subdirectory"); 194 | connect(subdircheck, SIGNAL(stateChanged(int)), this, SLOT(updateUrl())); 195 | lay->addRow(subdircheck, subdir); 196 | 197 | layout->addRow(xdggroupbox); 198 | urledit = new KUrlRequester(); 199 | urledit->setMode(KFile::Directory); 200 | urledit->setObjectName("kcfg_photodir"); 201 | urledit->setProperty("kcfg_property", QByteArray("text")); 202 | layout->addRow(i18n("Photo directory:"), urledit); 203 | 204 | this->addPage(page, i18n("Storage"), "drive-harddisk", i18n("Photo storage") ); 205 | 206 | // behaviour page 207 | page = new QWidget(this); 208 | layout = new QFormLayout(page); 209 | 210 | checkbox = new QCheckBox(i18n("Play sound on taking photo")); 211 | checkbox->setObjectName("kcfg_soundontaking"); 212 | layout->addRow(checkbox); 213 | checkbox = new QCheckBox(i18n("Play timer sounds")); 214 | checkbox->setObjectName("kcfg_soundontimer"); 215 | layout->addRow(checkbox); 216 | checkbox = new QCheckBox(i18n("Show notification on taking photo")); 217 | checkbox->setObjectName("kcfg_notification"); 218 | layout->addRow(checkbox); 219 | 220 | this->addPage(page, i18n("Behaviour"), "audio-headset", i18n("Behaviour") ); 221 | 222 | updateUrl(); 223 | config->writeConfig(); 224 | connect(this, SIGNAL(settingsChanged(const QString&)), this, SLOT(updateUrl())); 225 | connect(this, SIGNAL(settingsChanged(const QString&)), this, SLOT(checkDir())); 226 | } 227 | -------------------------------------------------------------------------------- /src/mainwindow.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) Sebastian Krzyszkowiak 3 | * 4 | * This program is free software; you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation; either version 2 of the License, or 7 | * (at your option) any later version. 8 | * 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License 15 | * along with this program; if not, write to the Free Software 16 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. 17 | */ 18 | 19 | #include 20 | #include 21 | #include 22 | #include 23 | #include 24 | #include 25 | #include 26 | #include 27 | #include 28 | #include 29 | #include 30 | #include 31 | #include 32 | #include 33 | 34 | #include "mainwindow.h" 35 | #include "settings.h" 36 | 37 | // part of QML hack to access script engine in rw mode 38 | void EngineAccess::setEngine(QScriptValue val) { 39 | this->engine = val.engine(); 40 | } 41 | 42 | // allow QML files to be translated 43 | QScriptValue jsi18n(QScriptContext *context, QScriptEngine *engine) { 44 | Q_UNUSED(engine) 45 | if (context->argumentCount() < 1) { 46 | qWarning() << i18n("i18n() takes at least one argument"); 47 | return engine->undefinedValue(); 48 | } 49 | KLocalizedString message = ki18n(context->argument(0).toString().toUtf8()); 50 | const int numArgs = context->argumentCount(); 51 | for (int i = 1; i < numArgs; ++i) { 52 | message = message.subs(context->argument(i).toString()); 53 | } 54 | return message.toString(); 55 | } 56 | 57 | // show error when loading QML failed 58 | void MainWindow::QMLStatus(QQuickWidget::Status status) { 59 | if (status==QQuickWidget::Error) { 60 | QString errors = ""; 61 | for (int i=0; ierrors().size(); i++) { 62 | errors += ui->errors()[i].toString() +'\n'; 63 | } 64 | KMessageBox::detailedError(this, i18n("Could not load QML interface!"), errors, i18n("Error"), KMessageBox::Dangerous); 65 | close(); 66 | } 67 | } 68 | 69 | // slot for UI button - scheldule photo to be taken from next processed frame 70 | void MainWindow::takePhoto() { 71 | videoViewer->takeImage(); 72 | } 73 | 74 | // slot for UI button - play timer sound 75 | void MainWindow::timerCounter(int count) { 76 | //qDebug(QString::number(count).toStdString().c_str()); 77 | if ((count==5) && (Settings::soundontimer())) { 78 | videoViewer->media->setCurrentSource(QUrl::fromLocalFile(QStandardPaths::locate(QStandardPaths::GenericDataLocation, "kamerka/timer.ogg"))); 79 | videoViewer->media->play(); 80 | } 81 | } 82 | 83 | // slot for UI button - open file manager 84 | void MainWindow::showDirectory() { 85 | openFile(Settings::photodir()); 86 | } 87 | 88 | // slot for UI button 89 | void MainWindow::showConfiguration() { 90 | confdial->show(); 91 | } 92 | 93 | // resize video widget together with window 94 | void MainWindow::resizeEvent(QResizeEvent *e) { 95 | videoViewer->resize(this->size()); 96 | if (conf) 97 | conf->setGeometry(QRectF(QPointF(50,50), QPointF(this->size().rwidth()-50,this->size().rheight()-50))); 98 | if (dialog) 99 | dialog->setGeometry(QRectF(QPointF(0,0), QPointF(this->size().rwidth(), dialog->size().rheight()))); 100 | QMainWindow::resizeEvent(e); 101 | } 102 | 103 | void MainWindow::loadSettings() { 104 | if (videoViewer->thread.running) { 105 | videoViewer->thread.stop(); 106 | } 107 | if (videoViewer->thread.start()) { 108 | // if opening V4L device failed: 109 | //KMessageBox::error(this, i18n("Could not connect to V4L device!"), i18n("Error"), KMessageBox::Dangerous); 110 | if (this->isVisible()) { 111 | dialoglabel->setText( i18n("Could not connect to V4L device!") ); 112 | kdialog->show(); 113 | } 114 | else { 115 | KMessageBox::error(this, i18n("Could not connect to V4L device!"), i18n("Error"), KMessageBox::Dangerous); 116 | } 117 | } 118 | videoViewer->ui->rootObject()->setProperty("burstPhotoNumber", Settings::burstnumphotos()); 119 | videoViewer->ui->rootObject()->setProperty("delayBetweenPhotosBurst", Settings::delaybetweenphotos()); 120 | videoViewer->ui->rootObject()->setProperty("selftimer", Settings::selftimer()); 121 | videoViewer->resize(this->size()); 122 | } 123 | 124 | void MainWindow::applyEffect(int effect) { 125 | videoViewer->thread.effect = effect; 126 | } 127 | 128 | void MainWindow::openFile(QString filename) { 129 | QDesktopServices::openUrl(filename); 130 | } 131 | 132 | void MainWindow::tryVideoThread() { 133 | confdial = new SettingsDialog(0, "settings", Settings::self()); 134 | if ((videoViewer->thread.running==false) && (videoViewer->thread.start())) { 135 | // if opening V4L device failed: 136 | if (first) { 137 | first = false; 138 | KMessageBox::error(this, i18n("Could not connect to V4L device!"), i18n("Error"), KMessageBox::Dangerous); 139 | } 140 | confdial->setFaceType(KConfigDialog::Plain); 141 | if (confdial->exec()) { 142 | tryVideoThread(); 143 | } else { 144 | close(); 145 | } 146 | } 147 | else { 148 | this->show(); 149 | } 150 | connect(confdial, SIGNAL(settingsChanged(const QString&)), this, SLOT(loadSettings())); 151 | } 152 | 153 | void MainWindow::startedCapture(int width, int height) { 154 | qDebug() << QString("Driver is sending image at %1x%2").arg( 155 | QString::number(width), QString::number(height)); 156 | if ((width!=Settings::width()) || (height!=Settings::height())) { 157 | dialoglabel->setText(i18n("Requested resolution (%1x%2) was not available. Driver used %3x%4 instead.\nPlease check your configuration.", Settings::width(), Settings::height(), width, height)); 158 | kdialog->show(); 159 | } 160 | else kdialog->hide(); 161 | } 162 | 163 | MainWindow::MainWindow() { 164 | // initialize variables 165 | conf = NULL; 166 | confdial = NULL; 167 | dialog = NULL; 168 | 169 | videoViewer = new videowidget(this); 170 | 171 | // setup user interface 172 | ui = new QQuickWidget(this); 173 | ui->quickWindow()->setColor(Qt::transparent); 174 | ui->setAttribute(Qt::WA_AlwaysStackOnTop); 175 | 176 | ui->show(); 177 | //ui->setColor(Qt::transparent); 178 | 179 | KDeclarative::KDeclarative kdeclarative; 180 | kdeclarative.setDeclarativeEngine(ui->engine()); 181 | kdeclarative.setupBindings(); 182 | 183 | connect(ui, SIGNAL(statusChanged(QQuickWidget::Status)), this, SLOT(QMLStatus(QQuickWidget::Status))); 184 | 185 | videoViewer->ui = ui; 186 | videoViewer->show(); 187 | 188 | QVBoxLayout *layout = new QVBoxLayout(); 189 | QWidget *widget = new QWidget(this); 190 | widget->setLayout(layout); 191 | layout->setSpacing(0); 192 | layout->setContentsMargins(0,0,0,0); 193 | widget->show(); 194 | this->setCentralWidget(widget); 195 | 196 | ui->rootContext()->setContextProperty("fileName", "qrc:/icons/kamerka.png"); 197 | ui->setSource(QUrl("qrc:/qml/kamerka.qml")); 198 | 199 | // let widgets have transparent background 200 | // ui->setStyleSheet("background: transparent"); 201 | videoViewer->setStyleSheet("background: transparent"); 202 | 203 | // Burst mode settings 204 | videoViewer->ui->rootObject()->setProperty("burstPhotoNumber", Settings::burstnumphotos()); 205 | videoViewer->ui->rootObject()->setProperty("delayBetweenPhotosBurst", Settings::delaybetweenphotos()); 206 | videoViewer->ui->rootObject()->setProperty("selftimer", Settings::selftimer()); 207 | 208 | // resize QML UI together with window 209 | ui->setResizeMode(QQuickWidget::SizeRootObjectToView); 210 | 211 | // setup info dialog on top of screen 212 | kdialog = new KDialog( this ); 213 | kdialog->setButtons( KDialog::Ok ); 214 | dialoglabel = new QLabel(kdialog); 215 | dialoglabel->setWordWrap(true); 216 | dialoglabel->setAlignment(Qt::AlignCenter); 217 | kdialog->setMainWidget( dialoglabel ); 218 | kdialog->setStyleSheet("QDialog { background-color: rgba(64,64,64,64); border-bottom: 1px solid white; } QLabel { color: white; }"); 219 | //dialog = ui->scene()->addWidget(kdialog); 220 | //dialog->hide(); 221 | 222 | QGraphicsDropShadowEffect* shadow = new QGraphicsDropShadowEffect(); 223 | shadow->setOffset(QPointF(0, 0)); 224 | shadow->setBlurRadius(8); 225 | kdialog->setGraphicsEffect(shadow); 226 | kdialog->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Maximum); 227 | //kdialog->show(); 228 | layout->addWidget(kdialog); 229 | layout->addWidget(ui); 230 | 231 | 232 | // connect UI button signals to slots in this class 233 | connect(ui->rootObject(), SIGNAL(takePhoto()), this, SLOT(takePhoto())); 234 | connect(ui->rootObject(), SIGNAL(timerCounter(int)), this, SLOT(timerCounter(int))); 235 | connect(ui->rootObject(), SIGNAL(showDirectory()), this, SLOT(showDirectory())); 236 | connect(ui->rootObject(), SIGNAL(showConfiguration()), this, SLOT(showConfiguration())); 237 | connect(ui->rootObject(), SIGNAL(applyEffect(int)), this, SLOT(applyEffect(int))); 238 | connect(ui->rootObject(), SIGNAL(openFile(QString)), this, SLOT(openFile(QString))); 239 | 240 | connect(&(videoViewer->thread), SIGNAL(startedCapture(int, int)), this, SLOT(startedCapture(int, int))); 241 | 242 | resize(Settings::width(), Settings::height()); 243 | 244 | // capture from webcam & setup configuration 245 | first = true; 246 | tryVideoThread(); 247 | } 248 | -------------------------------------------------------------------------------- /src/capturethread.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) Özkan Pakdil 3 | * Copyright (c) Sebastian Krzyszkowiak 4 | * 5 | * This program is free software; you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation; either version 2 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program; if not, write to the Free Software 17 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. 18 | */ 19 | 20 | #include 21 | #include "capturethread.h" 22 | #include "settings.h" 23 | #include "imageeffect.h" 24 | 25 | #define CLEAR(x) memset(&(x), 0, sizeof(x)) 26 | 27 | void xioctl(int fh, int request, void *arg) { 28 | int r; 29 | do { 30 | r = v4l2_ioctl(fh, request, arg); 31 | } while (r == -1 && ((errno == EINTR) || (errno == EAGAIN))); 32 | 33 | if (r == -1) { 34 | qCritical() << "error " << errno << " " << strerror(errno); 35 | return; 36 | } 37 | } 38 | 39 | CaptureThread::CaptureThread() { 40 | effect = 0; 41 | running = false; 42 | } 43 | 44 | void CaptureThread::updateImageSettings() { 45 | 46 | struct v4l2_queryctrl queryctrl; 47 | struct v4l2_control control; 48 | 49 | memset (&queryctrl, 0, sizeof (queryctrl)); 50 | memset (&control, 0, sizeof (control)); 51 | queryctrl.id = V4L2_CID_BRIGHTNESS; 52 | control.id = V4L2_CID_BRIGHTNESS; 53 | 54 | if (-1 == v4l2_ioctl(fd, VIDIOC_QUERYCTRL, &queryctrl)) { 55 | if (errno != EINVAL) { 56 | qCritical() << "VIDIOC_QUERYCTRL"; 57 | exit (EXIT_FAILURE); 58 | } else { 59 | qDebug() << "V4L2_CID_BRIGHTNESS is not supported."; 60 | } 61 | } else if (queryctrl.flags & V4L2_CTRL_FLAG_DISABLED) { 62 | qDebug() << "V4L2_CID_BRIGHTNESS is not supported."; 63 | } else { 64 | control.value = (queryctrl.maximum - queryctrl.minimum) * Settings::brightness()/100; 65 | if (-1 == v4l2_ioctl (fd, VIDIOC_S_CTRL, &control)) { 66 | qCritical() << "VIDIOC_S_CTRL"; 67 | exit (EXIT_FAILURE); 68 | } 69 | } 70 | 71 | memset (&queryctrl, 0, sizeof (queryctrl)); 72 | memset (&control, 0, sizeof (control)); 73 | queryctrl.id = V4L2_CID_CONTRAST; 74 | control.id = V4L2_CID_CONTRAST; 75 | 76 | if (-1 == v4l2_ioctl(fd, VIDIOC_QUERYCTRL, &queryctrl)) { 77 | if (errno != EINVAL) { 78 | qCritical() << "VIDIOC_QUERYCTRL"; 79 | exit (EXIT_FAILURE); 80 | } else { 81 | qDebug() << "V4L2_CID_CONTRAST is not supported."; 82 | } 83 | } else if (queryctrl.flags & V4L2_CTRL_FLAG_DISABLED) { 84 | qDebug() << "V4L2_CID_CONTRAST is not supported."; 85 | } else { 86 | control.value = (queryctrl.maximum - queryctrl.minimum) * Settings::contrast()/100; 87 | if (-1 == v4l2_ioctl (fd, VIDIOC_S_CTRL, &control)) { 88 | qCritical() << "VIDIOC_S_CTRL"; 89 | exit (EXIT_FAILURE); 90 | } 91 | } 92 | 93 | 94 | memset (&queryctrl, 0, sizeof (queryctrl)); 95 | memset (&control, 0, sizeof (control)); 96 | queryctrl.id = V4L2_CID_SATURATION; 97 | control.id = V4L2_CID_SATURATION; 98 | 99 | if (-1 == v4l2_ioctl(fd, VIDIOC_QUERYCTRL, &queryctrl)) { 100 | if (errno != EINVAL) { 101 | qCritical() << "VIDIOC_QUERYCTRL"; 102 | exit (EXIT_FAILURE); 103 | } else { 104 | qDebug() << "V4L2_CID_SATURATION is not supported."; 105 | } 106 | } else if (queryctrl.flags & V4L2_CTRL_FLAG_DISABLED) { 107 | qDebug() << "V4L2_CID_SATURATION is not supported."; 108 | } else { 109 | control.value = (queryctrl.maximum - queryctrl.minimum) * Settings::saturation()/100; 110 | if (-1 == v4l2_ioctl (fd, VIDIOC_S_CTRL, &control)) { 111 | qCritical() << "VIDIOC_S_CTRL"; 112 | exit (EXIT_FAILURE); 113 | } 114 | } 115 | 116 | 117 | memset (&queryctrl, 0, sizeof (queryctrl)); 118 | memset (&control, 0, sizeof (control)); 119 | queryctrl.id = V4L2_CID_HUE; 120 | control.id = V4L2_CID_HUE; 121 | 122 | if (-1 == v4l2_ioctl(fd, VIDIOC_QUERYCTRL, &queryctrl)) { 123 | if (errno != EINVAL) { 124 | qCritical() << "VIDIOC_QUERYCTRL"; 125 | exit (EXIT_FAILURE); 126 | } else { 127 | qDebug() << "V4L2_CID_HUE is not supported."; 128 | } 129 | } else if (queryctrl.flags & V4L2_CTRL_FLAG_DISABLED) { 130 | qDebug() << "V4L2_CID_HUE is not supported."; 131 | } else { 132 | control.value = (queryctrl.maximum - queryctrl.minimum) * Settings::hue()/100; 133 | if (-1 == v4l2_ioctl (fd, VIDIOC_S_CTRL, &control)) { 134 | qCritical() << "VIDIOC_S_CTRL"; 135 | exit (EXIT_FAILURE); 136 | } 137 | } 138 | 139 | } 140 | 141 | 142 | // process video data 143 | void CaptureThread::run() { 144 | while (devam) { 145 | mutex.lock(); 146 | do { 147 | FD_ZERO(&fds); 148 | FD_SET(fd, &fds); 149 | 150 | /* Timeout. */ 151 | tv.tv_sec = 2; 152 | tv.tv_usec = 0; 153 | 154 | r = select(fd + 1, &fds, NULL, NULL, &tv); 155 | } while ((r == -1 && (errno = EINTR))); 156 | 157 | if (r == -1) { 158 | qDebug() << "select"; 159 | quit(); 160 | return; 161 | } 162 | 163 | CLEAR(buf); 164 | buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; 165 | buf.memory = V4L2_MEMORY_MMAP; 166 | xioctl(fd, VIDIOC_DQBUF, &buf); 167 | 168 | if (v4lconvert_convert(v4lconvert_data, 169 | &src_fmt, 170 | &fmt, 171 | (unsigned char*)buffers[buf.index].start, buf.bytesused, 172 | dst_buf, fmt.fmt.pix.sizeimage) < 0) { 173 | if (errno != EAGAIN) 174 | qDebug() << "v4l_convert"; 175 | } 176 | 177 | unsigned char* asil=(unsigned char*)malloc(fmt.fmt.pix.sizeimage+qstrlen(header)); 178 | memmove(asil, dst_buf, fmt.fmt.pix.sizeimage); 179 | memmove(asil+qstrlen(header), asil, fmt.fmt.pix.sizeimage); 180 | memcpy(asil,header,qstrlen(header)); 181 | 182 | QImage *qq=new QImage(); 183 | 184 | if (qq->loadFromData(asil,fmt.fmt.pix.sizeimage+qstrlen(header), "PPM")) { 185 | 186 | if (Settings::normalize()) { 187 | Blitz::normalize(*qq); 188 | } 189 | 190 | ImageEffect::applyEffect(*qq, effect); 191 | 192 | QTransform outTransform; 193 | outTransform.scale(Settings::mirror() ? -1 : 1, Settings::flip() ? -1 : 1); 194 | 195 | emit renderedImage(qq->transformed(outTransform)); 196 | } 197 | free(asil); 198 | delete qq; 199 | if (delay>0) { 200 | this->msleep(delay); 201 | } 202 | xioctl(fd, VIDIOC_QBUF, &buf); 203 | di++; 204 | mutex.unlock(); 205 | } 206 | } 207 | 208 | int CaptureThread::stop() { 209 | running = false; 210 | devam=false; 211 | mutex.lock(); 212 | type = V4L2_BUF_TYPE_VIDEO_CAPTURE; 213 | xioctl(fd, VIDIOC_STREAMOFF, &type); 214 | for (unsigned int i = 0; i < n_buffers; ++i) 215 | v4l2_munmap(buffers[i].start, buffers[i].length); 216 | 217 | v4l2_close(fd); 218 | fd = -1; 219 | mutex.unlock(); 220 | quit(); 221 | return 0; 222 | } 223 | 224 | int CaptureThread::start() { 225 | wait(); 226 | 227 | devam=false; 228 | fd = -1; 229 | 230 | // read config 231 | dev_name = Settings::node(); 232 | width = Settings::width(); 233 | height = Settings::height(); 234 | fps = Settings::fps(); 235 | if (fps>0) { 236 | delay = 1000/fps; 237 | } 238 | else { delay = 0; } 239 | 240 | // open webcam device node 241 | fd = v4l2_open(dev_name.toStdString().c_str(), O_RDWR | O_NONBLOCK, 0); 242 | if (fd < 0) { 243 | qCritical() << "Cannot open device"; 244 | quit(); 245 | return 1; 246 | } 247 | 248 | updateImageSettings(); 249 | 250 | CLEAR(fmt); 251 | fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; 252 | fmt.fmt.pix.width = width; 253 | fmt.fmt.pix.height = height; 254 | fmt.fmt.pix.pixelformat = V4L2_PIX_FMT_RGB24; 255 | fmt.fmt.pix.field = V4L2_FIELD_INTERLACED; 256 | xioctl(fd, VIDIOC_S_FMT, &fmt); 257 | if (fmt.fmt.pix.pixelformat != V4L2_PIX_FMT_RGB24) { 258 | qCritical() << "Libv4l didn't accept RGB24 format. Can't proceed."; 259 | quit(); 260 | return 1; 261 | } 262 | emit startedCapture(fmt.fmt.pix.width, fmt.fmt.pix.height); 263 | 264 | v4lconvert_data = v4lconvert_create(fd); 265 | if (v4lconvert_data == NULL) 266 | qDebug() << "v4lconvert_create"; 267 | if (v4lconvert_try_format(v4lconvert_data, &fmt, &src_fmt) != 0) 268 | qDebug() << "v4lconvert_try_format"; 269 | xioctl(fd, VIDIOC_S_FMT, &src_fmt); 270 | dst_buf = (unsigned char*)malloc(fmt.fmt.pix.sizeimage); 271 | 272 | CLEAR(req); 273 | req.count = 2; 274 | req.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; 275 | req.memory = V4L2_MEMORY_MMAP; 276 | xioctl(fd, VIDIOC_REQBUFS, &req); 277 | 278 | buffers = (buffer*)calloc(req.count, sizeof(*buffers)); 279 | for (n_buffers = 0; n_buffers < req.count; ++n_buffers) { 280 | CLEAR(buf); 281 | 282 | buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; 283 | buf.memory = V4L2_MEMORY_MMAP; 284 | buf.index = n_buffers; 285 | 286 | xioctl(fd, VIDIOC_QUERYBUF, &buf); 287 | 288 | buffers[n_buffers].length = buf.length; 289 | buffers[n_buffers].start = v4l2_mmap(NULL, buf.length, 290 | PROT_READ | PROT_WRITE, MAP_SHARED, 291 | fd, buf.m.offset); 292 | 293 | if (MAP_FAILED == buffers[n_buffers].start) { 294 | qDebug() << "mmap"; 295 | quit(); 296 | return 1; 297 | } 298 | } 299 | 300 | for (unsigned int i = 0; i < n_buffers; ++i) { 301 | CLEAR(buf); 302 | buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; 303 | buf.memory = V4L2_MEMORY_MMAP; 304 | buf.index = i; 305 | xioctl(fd, VIDIOC_QBUF, &buf); 306 | } 307 | type = V4L2_BUF_TYPE_VIDEO_CAPTURE; 308 | xioctl(fd, VIDIOC_STREAMON, &type); 309 | 310 | di=0; 311 | sprintf(header,"P6\n%d %d 255\n",fmt.fmt.pix.width,fmt.fmt.pix.height); 312 | devam=true; 313 | 314 | // start processing video data 315 | running = true; 316 | QThread::start(); 317 | return 0; 318 | } 319 | -------------------------------------------------------------------------------- /COPYING: -------------------------------------------------------------------------------- 1 | GNU GENERAL PUBLIC LICENSE 2 | Version 2, June 1991 3 | 4 | Copyright (C) 1989, 1991 Free Software Foundation, Inc., 5 | 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 6 | Everyone is permitted to copy and distribute verbatim copies 7 | of this license document, but changing it is not allowed. 8 | 9 | Preamble 10 | 11 | The licenses for most software are designed to take away your 12 | freedom to share and change it. By contrast, the GNU General Public 13 | License is intended to guarantee your freedom to share and change free 14 | software--to make sure the software is free for all its users. This 15 | General Public License applies to most of the Free Software 16 | Foundation's software and to any other program whose authors commit to 17 | using it. (Some other Free Software Foundation software is covered by 18 | the GNU Lesser General Public License instead.) You can apply it to 19 | your programs, too. 20 | 21 | When we speak of free software, we are referring to freedom, not 22 | price. Our General Public Licenses are designed to make sure that you 23 | have the freedom to distribute copies of free software (and charge for 24 | this service if you wish), that you receive source code or can get it 25 | if you want it, that you can change the software or use pieces of it 26 | in new free programs; and that you know you can do these things. 27 | 28 | To protect your rights, we need to make restrictions that forbid 29 | anyone to deny you these rights or to ask you to surrender the rights. 30 | These restrictions translate to certain responsibilities for you if you 31 | distribute copies of the software, or if you modify it. 32 | 33 | For example, if you distribute copies of such a program, whether 34 | gratis or for a fee, you must give the recipients all the rights that 35 | you have. You must make sure that they, too, receive or can get the 36 | source code. And you must show them these terms so they know their 37 | rights. 38 | 39 | We protect your rights with two steps: (1) copyright the software, and 40 | (2) offer you this license which gives you legal permission to copy, 41 | distribute and/or modify the software. 42 | 43 | Also, for each author's protection and ours, we want to make certain 44 | that everyone understands that there is no warranty for this free 45 | software. If the software is modified by someone else and passed on, we 46 | want its recipients to know that what they have is not the original, so 47 | that any problems introduced by others will not reflect on the original 48 | authors' reputations. 49 | 50 | Finally, any free program is threatened constantly by software 51 | patents. We wish to avoid the danger that redistributors of a free 52 | program will individually obtain patent licenses, in effect making the 53 | program proprietary. To prevent this, we have made it clear that any 54 | patent must be licensed for everyone's free use or not licensed at all. 55 | 56 | The precise terms and conditions for copying, distribution and 57 | modification follow. 58 | 59 | GNU GENERAL PUBLIC LICENSE 60 | TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 61 | 62 | 0. This License applies to any program or other work which contains 63 | a notice placed by the copyright holder saying it may be distributed 64 | under the terms of this General Public License. The "Program", below, 65 | refers to any such program or work, and a "work based on the Program" 66 | means either the Program or any derivative work under copyright law: 67 | that is to say, a work containing the Program or a portion of it, 68 | either verbatim or with modifications and/or translated into another 69 | language. (Hereinafter, translation is included without limitation in 70 | the term "modification".) Each licensee is addressed as "you". 71 | 72 | Activities other than copying, distribution and modification are not 73 | covered by this License; they are outside its scope. The act of 74 | running the Program is not restricted, and the output from the Program 75 | is covered only if its contents constitute a work based on the 76 | Program (independent of having been made by running the Program). 77 | Whether that is true depends on what the Program does. 78 | 79 | 1. You may copy and distribute verbatim copies of the Program's 80 | source code as you receive it, in any medium, provided that you 81 | conspicuously and appropriately publish on each copy an appropriate 82 | copyright notice and disclaimer of warranty; keep intact all the 83 | notices that refer to this License and to the absence of any warranty; 84 | and give any other recipients of the Program a copy of this License 85 | along with the Program. 86 | 87 | You may charge a fee for the physical act of transferring a copy, and 88 | you may at your option offer warranty protection in exchange for a fee. 89 | 90 | 2. You may modify your copy or copies of the Program or any portion 91 | of it, thus forming a work based on the Program, and copy and 92 | distribute such modifications or work under the terms of Section 1 93 | above, provided that you also meet all of these conditions: 94 | 95 | a) You must cause the modified files to carry prominent notices 96 | stating that you changed the files and the date of any change. 97 | 98 | b) You must cause any work that you distribute or publish, that in 99 | whole or in part contains or is derived from the Program or any 100 | part thereof, to be licensed as a whole at no charge to all third 101 | parties under the terms of this License. 102 | 103 | c) If the modified program normally reads commands interactively 104 | when run, you must cause it, when started running for such 105 | interactive use in the most ordinary way, to print or display an 106 | announcement including an appropriate copyright notice and a 107 | notice that there is no warranty (or else, saying that you provide 108 | a warranty) and that users may redistribute the program under 109 | these conditions, and telling the user how to view a copy of this 110 | License. (Exception: if the Program itself is interactive but 111 | does not normally print such an announcement, your work based on 112 | the Program is not required to print an announcement.) 113 | 114 | These requirements apply to the modified work as a whole. If 115 | identifiable sections of that work are not derived from the Program, 116 | and can be reasonably considered independent and separate works in 117 | themselves, then this License, and its terms, do not apply to those 118 | sections when you distribute them as separate works. But when you 119 | distribute the same sections as part of a whole which is a work based 120 | on the Program, the distribution of the whole must be on the terms of 121 | this License, whose permissions for other licensees extend to the 122 | entire whole, and thus to each and every part regardless of who wrote it. 123 | 124 | Thus, it is not the intent of this section to claim rights or contest 125 | your rights to work written entirely by you; rather, the intent is to 126 | exercise the right to control the distribution of derivative or 127 | collective works based on the Program. 128 | 129 | In addition, mere aggregation of another work not based on the Program 130 | with the Program (or with a work based on the Program) on a volume of 131 | a storage or distribution medium does not bring the other work under 132 | the scope of this License. 133 | 134 | 3. You may copy and distribute the Program (or a work based on it, 135 | under Section 2) in object code or executable form under the terms of 136 | Sections 1 and 2 above provided that you also do one of the following: 137 | 138 | a) Accompany it with the complete corresponding machine-readable 139 | source code, which must be distributed under the terms of Sections 140 | 1 and 2 above on a medium customarily used for software interchange; or, 141 | 142 | b) Accompany it with a written offer, valid for at least three 143 | years, to give any third party, for a charge no more than your 144 | cost of physically performing source distribution, a complete 145 | machine-readable copy of the corresponding source code, to be 146 | distributed under the terms of Sections 1 and 2 above on a medium 147 | customarily used for software interchange; or, 148 | 149 | c) Accompany it with the information you received as to the offer 150 | to distribute corresponding source code. (This alternative is 151 | allowed only for noncommercial distribution and only if you 152 | received the program in object code or executable form with such 153 | an offer, in accord with Subsection b above.) 154 | 155 | The source code for a work means the preferred form of the work for 156 | making modifications to it. For an executable work, complete source 157 | code means all the source code for all modules it contains, plus any 158 | associated interface definition files, plus the scripts used to 159 | control compilation and installation of the executable. However, as a 160 | special exception, the source code distributed need not include 161 | anything that is normally distributed (in either source or binary 162 | form) with the major components (compiler, kernel, and so on) of the 163 | operating system on which the executable runs, unless that component 164 | itself accompanies the executable. 165 | 166 | If distribution of executable or object code is made by offering 167 | access to copy from a designated place, then offering equivalent 168 | access to copy the source code from the same place counts as 169 | distribution of the source code, even though third parties are not 170 | compelled to copy the source along with the object code. 171 | 172 | 4. You may not copy, modify, sublicense, or distribute the Program 173 | except as expressly provided under this License. Any attempt 174 | otherwise to copy, modify, sublicense or distribute the Program is 175 | void, and will automatically terminate your rights under this License. 176 | However, parties who have received copies, or rights, from you under 177 | this License will not have their licenses terminated so long as such 178 | parties remain in full compliance. 179 | 180 | 5. You are not required to accept this License, since you have not 181 | signed it. However, nothing else grants you permission to modify or 182 | distribute the Program or its derivative works. These actions are 183 | prohibited by law if you do not accept this License. Therefore, by 184 | modifying or distributing the Program (or any work based on the 185 | Program), you indicate your acceptance of this License to do so, and 186 | all its terms and conditions for copying, distributing or modifying 187 | the Program or works based on it. 188 | 189 | 6. Each time you redistribute the Program (or any work based on the 190 | Program), the recipient automatically receives a license from the 191 | original licensor to copy, distribute or modify the Program subject to 192 | these terms and conditions. You may not impose any further 193 | restrictions on the recipients' exercise of the rights granted herein. 194 | You are not responsible for enforcing compliance by third parties to 195 | this License. 196 | 197 | 7. If, as a consequence of a court judgment or allegation of patent 198 | infringement or for any other reason (not limited to patent issues), 199 | conditions are imposed on you (whether by court order, agreement or 200 | otherwise) that contradict the conditions of this License, they do not 201 | excuse you from the conditions of this License. If you cannot 202 | distribute so as to satisfy simultaneously your obligations under this 203 | License and any other pertinent obligations, then as a consequence you 204 | may not distribute the Program at all. For example, if a patent 205 | license would not permit royalty-free redistribution of the Program by 206 | all those who receive copies directly or indirectly through you, then 207 | the only way you could satisfy both it and this License would be to 208 | refrain entirely from distribution of the Program. 209 | 210 | If any portion of this section is held invalid or unenforceable under 211 | any particular circumstance, the balance of the section is intended to 212 | apply and the section as a whole is intended to apply in other 213 | circumstances. 214 | 215 | It is not the purpose of this section to induce you to infringe any 216 | patents or other property right claims or to contest validity of any 217 | such claims; this section has the sole purpose of protecting the 218 | integrity of the free software distribution system, which is 219 | implemented by public license practices. Many people have made 220 | generous contributions to the wide range of software distributed 221 | through that system in reliance on consistent application of that 222 | system; it is up to the author/donor to decide if he or she is willing 223 | to distribute software through any other system and a licensee cannot 224 | impose that choice. 225 | 226 | This section is intended to make thoroughly clear what is believed to 227 | be a consequence of the rest of this License. 228 | 229 | 8. If the distribution and/or use of the Program is restricted in 230 | certain countries either by patents or by copyrighted interfaces, the 231 | original copyright holder who places the Program under this License 232 | may add an explicit geographical distribution limitation excluding 233 | those countries, so that distribution is permitted only in or among 234 | countries not thus excluded. In such case, this License incorporates 235 | the limitation as if written in the body of this License. 236 | 237 | 9. The Free Software Foundation may publish revised and/or new versions 238 | of the General Public License from time to time. Such new versions will 239 | be similar in spirit to the present version, but may differ in detail to 240 | address new problems or concerns. 241 | 242 | Each version is given a distinguishing version number. If the Program 243 | specifies a version number of this License which applies to it and "any 244 | later version", you have the option of following the terms and conditions 245 | either of that version or of any later version published by the Free 246 | Software Foundation. If the Program does not specify a version number of 247 | this License, you may choose any version ever published by the Free Software 248 | Foundation. 249 | 250 | 10. If you wish to incorporate parts of the Program into other free 251 | programs whose distribution conditions are different, write to the author 252 | to ask for permission. For software which is copyrighted by the Free 253 | Software Foundation, write to the Free Software Foundation; we sometimes 254 | make exceptions for this. Our decision will be guided by the two goals 255 | of preserving the free status of all derivatives of our free software and 256 | of promoting the sharing and reuse of software generally. 257 | 258 | NO WARRANTY 259 | 260 | 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY 261 | FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN 262 | OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES 263 | PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED 264 | OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 265 | MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS 266 | TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE 267 | PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, 268 | REPAIR OR CORRECTION. 269 | 270 | 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING 271 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR 272 | REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, 273 | INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING 274 | OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED 275 | TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY 276 | YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER 277 | PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE 278 | POSSIBILITY OF SUCH DAMAGES. 279 | 280 | END OF TERMS AND CONDITIONS 281 | 282 | How to Apply These Terms to Your New Programs 283 | 284 | If you develop a new program, and you want it to be of the greatest 285 | possible use to the public, the best way to achieve this is to make it 286 | free software which everyone can redistribute and change under these terms. 287 | 288 | To do so, attach the following notices to the program. It is safest 289 | to attach them to the start of each source file to most effectively 290 | convey the exclusion of warranty; and each file should have at least 291 | the "copyright" line and a pointer to where the full notice is found. 292 | 293 | 294 | Copyright (C) 295 | 296 | This program is free software; you can redistribute it and/or modify 297 | it under the terms of the GNU General Public License as published by 298 | the Free Software Foundation; either version 2 of the License, or 299 | (at your option) any later version. 300 | 301 | This program is distributed in the hope that it will be useful, 302 | but WITHOUT ANY WARRANTY; without even the implied warranty of 303 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 304 | GNU General Public License for more details. 305 | 306 | You should have received a copy of the GNU General Public License along 307 | with this program; if not, write to the Free Software Foundation, Inc., 308 | 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 309 | 310 | Also add information on how to contact you by electronic and paper mail. 311 | 312 | If the program is interactive, make it output a short notice like this 313 | when it starts in an interactive mode: 314 | 315 | Gnomovision version 69, Copyright (C) year name of author 316 | Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. 317 | This is free software, and you are welcome to redistribute it 318 | under certain conditions; type `show c' for details. 319 | 320 | The hypothetical commands `show w' and `show c' should show the appropriate 321 | parts of the General Public License. Of course, the commands you use may 322 | be called something other than `show w' and `show c'; they could even be 323 | mouse-clicks or menu items--whatever suits your program. 324 | 325 | You should also get your employer (if you work as a programmer) or your 326 | school, if any, to sign a "copyright disclaimer" for the program, if 327 | necessary. Here is a sample; alter the names: 328 | 329 | Yoyodyne, Inc., hereby disclaims all copyright interest in the program 330 | `Gnomovision' (which makes passes at compilers) written by James Hacker. 331 | 332 | , 1 April 1989 333 | Ty Coon, President of Vice 334 | 335 | This General Public License does not permit incorporating your program into 336 | proprietary programs. If your program is a subroutine library, you may 337 | consider it more useful to permit linking proprietary applications with the 338 | library. If this is what you want to do, use the GNU Lesser General 339 | Public License instead of this License. 340 | 341 | --------------------------------------------------------------------------------