├── .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 |
--------------------------------------------------------------------------------