kamerka-0.8.1/0000755000175000017500000000000011613010530011255 5ustar dosdoskamerka-0.8.1/src/0000755000175000017500000000000011613007262012054 5ustar dosdoskamerka-0.8.1/src/mainwindow.h0000644000175000017500000000335411613007262014406 0ustar dosdos/* * Copyright (c) Sebastian Krzyszkowiak * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include "settingsdialog.h" #include "videowidget.h" class EngineAccess : public QObject { Q_OBJECT public: Q_INVOKABLE void setEngine(QScriptValue val); QScriptEngine *engine; }; class MainWindow : public KMainWindow { Q_OBJECT public: MainWindow(); videowidget *videoViewer; QDeclarativeView *ui; QGraphicsProxyWidget *conf, *dialog; SettingsDialog *confdial; KDialog *kdialog; QLabel *dialoglabel; private: void resizeEvent(QResizeEvent *e); bool first; public slots: void takePhoto(); void timerCounter(int); void showDirectory(); void showConfiguration(); void QMLStatus(QDeclarativeView::Status); int opacityUpdate(QGraphicsProxyWidget*); void opacityUpdateConf(); void closeCanvasLayer(); void tryVideoThread(); void loadSettings(); void startedCapture(int width, int height); }; kamerka-0.8.1/src/videowidget.h0000644000175000017500000000306111613007262014537 0ustar dosdos/* * Copyright (c) Özkan Pakdil * Copyright (c) Sebastian Krzyszkowiak * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef VIDEOWIDGET_H #define VIDEOWIDGET_H #include #include #include #include #include #include "capturethread.h" class videowidget : public QWidget { Q_OBJECT public: videowidget(QWidget *parent = 0); ~videowidget(); QPixmap pixmap; CaptureThread thread; QDeclarativeView *ui; Phonon::MediaObject* media; bool storeImage; protected: void paintEvent(QPaintEvent *event); public slots: void setPicture(QImage); }; class Notification : public KNotification { Q_OBJECT public: Notification(QString, QString filename); QString filename; public slots: void openFile(unsigned int); }; #endif // VIDEOWIDGET_H kamerka-0.8.1/src/settingsdialog.h0000644000175000017500000000245011613007262015246 0ustar dosdos/* * Copyright (c) Sebastian Krzyszkowiak * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #ifndef SETTINGSDIALOG_H #define SETTINGSDIALOG_H class SettingsDialog : public KConfigDialog { Q_OBJECT public: explicit SettingsDialog(QWidget *parent, QString name, KConfigSkeleton *config); private: KLineEdit *subdir; KUrlRequester *urledit; KConfigSkeleton *config; QCheckBox *subdircheck; QGroupBox *xdggroupbox; signals: public slots: void updateUrl(); void checkDir(); }; #endif // SETTINGSDIALOG_H kamerka-0.8.1/src/mainwindow.cpp0000644000175000017500000002430011613007262014733 0ustar dosdos/* * Copyright (c) Sebastian Krzyszkowiak * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include "mainwindow.h" #include "settings.h" // part of QML hack to access script engine in rw mode void EngineAccess::setEngine(QScriptValue val) { this->engine = val.engine(); } // allow QML files to be translated QScriptValue jsi18n(QScriptContext *context, QScriptEngine *engine) { Q_UNUSED(engine) if (context->argumentCount() < 1) { kWarning() << i18n("i18n() takes at least one argument"); return engine->undefinedValue(); } KLocalizedString message = ki18n(context->argument(0).toString().toUtf8()); const int numArgs = context->argumentCount(); for (int i = 1; i < numArgs; ++i) { message = message.subs(context->argument(i).toString()); } return message.toString(); } // show error when loading QML failed void MainWindow::QMLStatus(QDeclarativeView::Status status) { if (status==QDeclarativeView::Error) { QString errors = ""; for (int i=0; ierrors().size(); i++) { errors += ui->errors()[i].toString() +'\n'; } KMessageBox::detailedError(this, i18n("Could not load QML interface!"), errors, i18n("Error"), KMessageBox::Dangerous); close(); } } // slot for UI button - scheldule photo to be taken from next processed frame void MainWindow::takePhoto() { videoViewer->storeImage=true; } // slot for UI button - play timer sound void MainWindow::timerCounter(int count) { //kDebug(QString::number(count).toStdString().c_str()); if ((count==5) && (Settings::soundontimer())) { videoViewer->media->setCurrentSource(KStandardDirs::locate("data", "kamerka/timer.ogg")); videoViewer->media->play(); } } // slot for UI button - open file manager void MainWindow::showDirectory() { QDir dir; dir.mkpath(Settings::photodir()); dir.setPath(Settings::photodir()); QProcess::startDetached("xdg-open", QStringList() << dir.absolutePath()); QApplication::quit(); } void MainWindow::closeCanvasLayer() { QMetaObject::invokeMethod(ui->rootObject(), "hideCanvasBackground"); conf->hide(); } int MainWindow::opacityUpdate(QGraphicsProxyWidget *widget) { widget->setOpacity(widget->opacity()+0.05); if (widget->opacity()>=1) return 0; return 1; } void MainWindow::opacityUpdateConf() { if (opacityUpdate(conf)) { QTimer::singleShot(5, this, SLOT(opacityUpdateConf())); } } // slot for UI button - show canvas layer with configuration void MainWindow::showConfiguration() { QMetaObject::invokeMethod(ui->rootObject(), "showCanvasBackground"); conf->setOpacity(0); conf->show(); QTimer::singleShot(500, this, SLOT(opacityUpdateConf())); } // resize video widget together with window void MainWindow::resizeEvent(QResizeEvent *e) { videoViewer->resize(this->size()); if (conf) conf->setGeometry(QRectF(QPointF(50,50), QPointF(this->size().rwidth()-50,this->size().rheight()-50))); if (dialog) dialog->setGeometry(QRectF(QPointF(0,0), QPointF(this->size().rwidth(), dialog->size().rheight()))); QMainWindow::resizeEvent(e); } void MainWindow::loadSettings() { if (videoViewer->thread.running) { videoViewer->thread.stop(); } if (videoViewer->thread.start()) { // if opening V4L device failed: //KMessageBox::error(this, i18n("Could not connect to V4L device!"), i18n("Error"), KMessageBox::Dangerous); if (this->isVisible()) { dialoglabel->setText( i18n("Could not connect to V4L device!") ); dialog->show(); } else { KMessageBox::error(this, i18n("Could not connect to V4L device!"), i18n("Error"), KMessageBox::Dangerous); } } } void MainWindow::tryVideoThread() { confdial = new SettingsDialog(0, "settings", Settings::self()); if ((videoViewer->thread.running==false) && (videoViewer->thread.start())) { // if opening V4L device failed: if (first) { first = false; KMessageBox::error(this, i18n("Could not connect to V4L device!"), i18n("Error"), KMessageBox::Dangerous); } confdial->setFaceType(KConfigDialog::Plain); KConfigDialog::showDialog("settings"); connect(confdial, SIGNAL(cancelClicked()), this, SLOT(close())); connect(confdial, SIGNAL(closeClicked()), this, SLOT(close())); connect(confdial, SIGNAL(okClicked()), this, SLOT(tryVideoThread())); } else { conf = ui->scene()->addWidget(confdial); KConfigDialog::showDialog("settings"); conf->hide(); connect(confdial, SIGNAL(hidden()), this, SLOT(closeCanvasLayer())); // drop shadow QGraphicsDropShadowEffect* shadow = new QGraphicsDropShadowEffect(); shadow->setOffset(QPointF(0, 0)); shadow->setBlurRadius(8); shadow->setColor(QColor(255,255,255)); conf->setGraphicsEffect(shadow); // show main window this->show(); } connect(confdial, SIGNAL(settingsChanged(const QString&)), this, SLOT(loadSettings())); } void MainWindow::startedCapture(int width, int height) { kDebug() << QString("Driver is sending image at %1x%2").arg( QString::number(width), QString::number(height)); if ((width!=Settings::width()) || (height!=Settings::height())) { 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)); dialog->show(); } else dialog->hide(); } MainWindow::MainWindow() { // initialize variables conf = NULL; confdial = NULL; // register QML effects qmlRegisterType("Effects",1,0,"Blur"); qmlRegisterType("Effects",1,0,"DropShadow"); // setup user interface ui = new QDeclarativeView; connect(ui, SIGNAL(statusChanged(QDeclarativeView::Status)), this, SLOT(QMLStatus(QDeclarativeView::Status))); videoViewer = new videowidget(this); videoViewer->ui = ui; videoViewer->show(); this->setCentralWidget(ui); //Glorious hack:steal the engine - thanks for KDeclarative, from which I stole this code! :) //create the access object EngineAccess *engineAccess = new EngineAccess(); ui->engine()->rootContext()->setContextProperty("__engineAccess", engineAccess); //make engineaccess set our engine QDeclarativeExpression *expr = new QDeclarativeExpression(ui->engine()->rootContext(), ui->engine()->rootContext()->contextObject(), "__engineAccess.setEngine(this)"); expr->evaluate(); delete expr; ui->engine()->rootContext()->setContextProperty("__engineAccess", 0); //change the old globalobject with a new read/write copy QScriptValue originalGlobalObject = engineAccess->engine->globalObject(); QScriptValue newGlobalObject = engineAccess->engine->newObject(); QString eval = QLatin1String("eval"); QString version = QLatin1String("version"); { QScriptValueIterator iter(originalGlobalObject); QVector names; QVector values; QVector flags; while (iter.hasNext()) { iter.next(); QString name = iter.name(); if (name == version) { continue; } if (name != eval) { names.append(name); values.append(iter.value()); flags.append(iter.flags() | QScriptValue::Undeletable); } newGlobalObject.setProperty(iter.scriptName(), iter.value()); } } engineAccess->engine->setGlobalObject(newGlobalObject); engineAccess->engine->globalObject().setProperty("i18n", engineAccess->engine->newFunction(jsi18n)); delete engineAccess; // end of hack ui->rootContext()->setContextProperty("fileName", "qrc:/icons/kamerka.png"); ui->setSource(KUrl("qrc:/qml/kamerka.qml")); // let widgets have transparent background ui->setStyleSheet("background: transparent"); videoViewer->setStyleSheet("background: transparent"); // resize QML UI together with window ui->setResizeMode(QDeclarativeView::SizeRootObjectToView); // setup info dialog on top of screen kdialog = new KDialog( this ); kdialog->setButtons( KDialog::Ok ); dialoglabel = new QLabel(); dialoglabel->setWordWrap(true); dialoglabel->setAlignment(Qt::AlignCenter); kdialog->setMainWidget( dialoglabel ); kdialog->setStyleSheet("QDialog { background-color: rgba(64,64,64,64); border-bottom: 1px solid white; } QLabel { color: white; }"); dialog = ui->scene()->addWidget(kdialog); dialog->hide(); QGraphicsDropShadowEffect* shadow = new QGraphicsDropShadowEffect(); shadow->setOffset(QPointF(0, 0)); shadow->setBlurRadius(8); dialog->setGraphicsEffect(shadow); // connect UI button signals to slots in this class connect(ui->rootObject(), SIGNAL(takePhoto()), this, SLOT(takePhoto())); connect(ui->rootObject(), SIGNAL(timerCounter(int)), this, SLOT(timerCounter(int))); connect(ui->rootObject(), SIGNAL(showDirectory()), this, SLOT(showDirectory())); connect(ui->rootObject(), SIGNAL(showConfiguration()), this, SLOT(showConfiguration())); connect(&(videoViewer->thread), SIGNAL(startedCapture(int, int)), this, SLOT(startedCapture(int, int))); // capture from webcam & setup configuration first = true; tryVideoThread(); } kamerka-0.8.1/src/settings.kcfgc0000644000175000017500000000016111613007262014711 0ustar dosdos# Code generation options for kconfig_compiler File=kamerka.kcfg ClassName=Settings Singleton=true Mutators=true kamerka-0.8.1/src/Button.qml0000644000175000017500000000416211613007262014045 0ustar dosdos/* * Copyright (c) Sebastian Krzyszkowiak * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. */ import Qt 4.7; Rectangle { property alias text: textItem.text; property alias mouse: mouseArea; id: button; width: 100; height: 30; border.width: 1; radius: 5; smooth: true; opacity: 0.5; gradient: Gradient { GradientStop { position: 0.0; color: "darkGray"; } GradientStop { position: 0.5; color: "black"; } GradientStop { position: 1.0; color: "darkGray"; } } MouseArea { id: mouseArea; anchors.fill: parent; hoverEnabled: true; } Text { id: textItem; anchors.centerIn: parent; font.pointSize: 12; color: "white"; Behavior on text { SequentialAnimation { NumberAnimation { target: textItem; property: "opacity"; to: 0; } PropertyAction {} NumberAnimation { target: textItem; property: "opacity"; to: 1; } } } } states: State { name: "down"; when: mouse.containsMouse; PropertyChanges { target: button; opacity: 1; } } transitions: Transition { from: ""; to: "down"; reversible: true; SequentialAnimation { NumberAnimation { property: "opacity"; duration: 400; easing.type: Easing.OutQuad; } } } } kamerka-0.8.1/src/CMakeLists.txt0000644000175000017500000000132311613007262014613 0ustar dosdosSET(kamerka_SRCS main.cpp mainwindow.cpp videowidget.cpp capturethread.cpp kamerka.qml Button.qml settingsdialog.cpp kamerka.kcfg ) SET(kamerka_RCCS kamerka.qrc) SET(kamerka_KCFGCS settings.kcfgc) SET(kamerka_KCFGS kamerka.kcfg) qt4_add_resources(kamerka_RCC_SRCS ${kamerka_RCCS}) kde4_add_kcfg_files(kamerka_SRCS ${kamerka_KCFGCS}) kde4_add_executable(kamerka ${kamerka_SRCS} ${kamerka_RCC_SRCS}) target_link_libraries(kamerka ${KDE4_KDEUI_LIBS} ${KDE4_KIO_LIBS} ${QT_QTDECLARATIVE_LIBRARY} ${QT_QTSCRIPT_LIBRARY} ${KDE4_PHONON_LIBS} ${LIBV4L2_LIBRARY} ${LIBV4LCONVERT_LIBRARY}) install(TARGETS kamerka DESTINATION ${BIN_INSTALL_DIR}) install(FILES ${kamerka_KCFGS} DESTINATION ${KCFG_INSTALL_DIR}) kamerka-0.8.1/src/capturethread.h0000644000175000017500000000402611613007262015062 0ustar dosdos/* * Copyright (c) Özkan Pakdil * Copyright (c) Sebastian Krzyszkowiak * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef CAPTURETHREAD_H #define CAPTURETHREAD_H #include #include #include #include #include #include #include "libv4l2.h" #include "libv4lconvert.h" class CaptureThread : public QThread { Q_OBJECT public: CaptureThread(); int stop(); int start(); bool running; protected: void run(); signals: void renderedImage(const QImage &image); void startedCapture(int width, int height); private: QMutex mutex; int width, height, fps, delay; bool devam; struct buffer { void *start; size_t length; }; struct buffer *buffers; struct v4l2_format fmt; struct v4l2_buffer buf; struct v4l2_requestbuffers req; enum v4l2_buf_type type; fd_set fds; struct timeval tv; int r, fd; unsigned int n_buffers; QString dev_name; struct v4l2_format src_fmt; unsigned char *dst_buf; struct v4lconvert_data *v4lconvert_data; int di; char header [50]; }; #endif // CAPTURETHREAD_H kamerka-0.8.1/src/settingsdialog.cpp0000644000175000017500000001155711613007262015611 0ustar dosdos/* * Copyright (c) Sebastian Krzyszkowiak * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include "settingsdialog.h" void SettingsDialog::updateUrl() { if (xdggroupbox->isChecked()) { QDir dir(KGlobalSettings::picturesPath()); QString sub = ""; if (subdircheck->isChecked()) { sub = subdir->text(); subdir->setEnabled(true); } else subdir->setEnabled(false); config->findItem("photodir")->setProperty(dir.absoluteFilePath(sub)); urledit->setText(dir.absoluteFilePath(sub)); urledit->setEnabled(false); } else urledit->setEnabled(true); } void SettingsDialog::checkDir() { QDir dir; if (!(dir.exists(config->findItem("photodir")->property().toString()))) { int ret = KMessageBox::questionYesNo(0, i18n("Selected path does not exists. Do you want to create it?")); if (ret==KMessageBox::Yes) dir.mkpath(config->findItem("photodir")->property().toString()); } } SettingsDialog::SettingsDialog(QWidget *parent, QString name, KConfigSkeleton *conf) : KConfigDialog(parent, name, conf) { this->showButton(KDialog::Help, false); config=conf; // camera page QWidget *page = new QWidget(this); QFormLayout *layout = new QFormLayout(page); KLineEdit *textedit = new KLineEdit(); textedit->setObjectName("kcfg_node"); layout->addRow(i18n("Device node:"), textedit); QHBoxLayout *hlayout = new QHBoxLayout(); QSpinBox *spinbox = new QSpinBox(); spinbox->setMaximum(10000); spinbox->setObjectName("kcfg_width"); hlayout->addWidget(spinbox); hlayout->addWidget(new QLabel(i18n("x"))); spinbox = new QSpinBox(); spinbox->setMaximum(10000); spinbox->setObjectName("kcfg_height"); hlayout->addWidget(spinbox); hlayout->addWidget(new QLabel(i18n("px"))); layout->addRow(i18n("Resolution:"), hlayout); spinbox = new QSpinBox(); spinbox->setMinimum(0); spinbox->setMaximum(1000); spinbox->setSpecialValueText(i18n("Disabled")); spinbox->setSuffix(i18n(" fps")); spinbox->setObjectName("kcfg_fps"); layout->addRow(i18n("Framerate limit:"), spinbox); this->addPage(page, i18n("Camera"), "camera-web", i18n("Camera settings") ); // storage page page = new QWidget(this); layout = new QFormLayout(page); xdggroupbox = new QGroupBox(); xdggroupbox->setTitle(i18n("Use default pictures directory")); xdggroupbox->setCheckable(true); xdggroupbox->setObjectName("kcfg_usexdgpictures"); connect(xdggroupbox, SIGNAL(toggled(bool)), this, SLOT(updateUrl())); QFormLayout *lay = new QFormLayout(xdggroupbox); xdggroupbox->setLayout(lay); subdircheck = new QCheckBox(i18n("Use subdirectory:")); subdircheck->setObjectName("kcfg_ifsubdirectory"); subdir = new KLineEdit(); connect(subdir, SIGNAL(textChanged(QString)), this, SLOT(updateUrl())); subdir->setObjectName("kcfg_subdirectory"); connect(subdircheck, SIGNAL(stateChanged(int)), this, SLOT(updateUrl())); lay->addRow(subdircheck, subdir); layout->addRow(xdggroupbox); urledit = new KUrlRequester(); urledit->setObjectName("kcfg_photodir"); urledit->setProperty("kcfg_property", QByteArray("text")); layout->addRow(i18n("Photo directory:"), urledit); this->addPage(page, i18n("Storage"), "drive-harddisk", i18n("Photo storage") ); // behaviour page page = new QWidget(this); layout = new QFormLayout(page); QCheckBox *checkbox = new QCheckBox(i18n("Play sound on taking photo")); checkbox->setObjectName("kcfg_soundontaking"); layout->addRow(checkbox); checkbox = new QCheckBox(i18n("Play timer sounds")); checkbox->setObjectName("kcfg_soundontimer"); layout->addRow(checkbox); checkbox = new QCheckBox(i18n("Show notification on taking photo")); checkbox->setObjectName("kcfg_notification"); layout->addRow(checkbox); this->addPage(page, i18n("Behaviour"), "audio-headset", i18n("Behaviour") ); updateUrl(); config->writeConfig(); connect(this, SIGNAL(settingsChanged(const QString&)), this, SLOT(updateUrl())); connect(this, SIGNAL(settingsChanged(const QString&)), this, SLOT(checkDir())); } kamerka-0.8.1/src/videowidget.cpp0000644000175000017500000001137211613007262015076 0ustar dosdos/* * Copyright (c) Özkan Pakdil * Copyright (c) Sebastian Krzyszkowiak * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include "settings.h" #include "videowidget.h" // Notification class is used to connect to notification signal Notification::Notification (QString name, QString filename) : KNotification(name) { this->filename = filename; } void Notification::openFile (unsigned int i) { // kDebug(QString::number(i).toStdString().c_str()); QString app; QStringList arg; if (i==1) { app = "dolphin"; arg << "--select"; } else if (i==2) { app = "gimp"; } else { app = "inkscape"; } arg << this->filename; QProcess::startDetached(app, arg); } videowidget::videowidget(QWidget *parent) : QWidget(parent) { storeImage=false; connect(&thread, SIGNAL(renderedImage(QImage)), this, SLOT(setPicture(QImage))); setAutoFillBackground(true); media = new Phonon::MediaObject(this); Phonon::createPath(media, new Phonon::AudioOutput(Phonon::NotificationCategory, this)); } videowidget::~videowidget() { if (thread.isRunning()) thread.stop(); } // draw picture from webcam (pixmap) on repaint void videowidget::paintEvent(QPaintEvent *) { QPainter* painter = new QPainter(this); painter->setPen(Qt::white); painter->setFont(QFont("Arial", 30)); painter->drawText(rect(), Qt::AlignCenter, i18n("Starting up webcam...")); painter->drawPixmap(this->rect(), pixmap); delete painter; } // image was transfered from capturethread to us - display it and, if requested, store void videowidget::setPicture(QImage i) { pixmap=QPixmap::fromImage(i); update(); if (storeImage) { // we're taking a photo! QDir dir; dir.mkpath(Settings::photodir()); dir.setPath(Settings::photodir()); // play sound if (Settings::soundontaking()) { media->setCurrentSource(KStandardDirs::locate("data", "kamerka/camera_click.ogg")); media->play(); } // check, which number comes next (so we're able to set correct file name) int c = 0; QString counterfilename; counterfilename = dir.absoluteFilePath(".counter"); QFile counterfile(counterfilename.toStdString().c_str()); if (counterfile.open(QIODevice::ReadOnly | QIODevice::Text)) { QTextStream counter(&counterfile); counter >> c; } else kWarning() << "Could not open .counter file!"; c++; counterfile.close(); // store incremented value in counter file counterfile.open(QIODevice::WriteOnly); QTextStream counter(&counterfile); counter << c; counterfile.close(); // save image QString imagepath; imagepath = "image"; imagepath += QString::number(c); imagepath += ".png"; imagepath = dir.absoluteFilePath(imagepath); kDebug() << QString("%1").arg(imagepath); i.save(imagepath, "PNG"); // show taken photo and trigger animation in QML UI ui->rootContext()->setContextProperty("fileName", "file:"+imagepath); QMetaObject::invokeMethod(ui->rootObject(), "photoTaken"); // display notification if (Settings::notification()) { Notification* notification = new Notification("photoTaken", imagepath); QString s = i18n("Photo has been stored in file %1", imagepath); QPixmap pixmap = QPixmap::fromImage(i); notification->setText( s ); notification->setPixmap( pixmap ); QStringList lista; lista << i18n("Show in directory") << i18n("Open in GIMP") << i18n("Open in Inkscape"); notification->setActions( lista ); connect(notification, SIGNAL(activated(unsigned int)), notification , SLOT(openFile(unsigned int)) ); notification->sendEvent(); } // we don't want to store next frames too storeImage=false; } } kamerka-0.8.1/src/kamerka.kcfg0000644000175000017500000000377411613007262014336 0ustar dosdos /dev/video0 640 480 0 true true kamerka true true true kamerka-0.8.1/src/capturethread.cpp0000644000175000017500000001345411613007262015422 0ustar dosdos/* * Copyright (c) Özkan Pakdil * Copyright (c) Sebastian Krzyszkowiak * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. */ #include "capturethread.h" #include "settings.h" #define CLEAR(x) memset(&(x), 0, sizeof(x)) void xioctl(int fh, int request, void *arg) { int r; do { r = v4l2_ioctl(fh, request, arg); } while (r == -1 && ((errno == EINTR) || (errno == EAGAIN))); if (r == -1) { kError() << "error " << errno << " " << strerror(errno); return; } } CaptureThread::CaptureThread() { running = false; } // process video data void CaptureThread::run() { while (devam) { mutex.lock(); do { FD_ZERO(&fds); FD_SET(fd, &fds); /* Timeout. */ tv.tv_sec = 2; tv.tv_usec = 0; r = select(fd + 1, &fds, NULL, NULL, &tv); } while ((r == -1 && (errno = EINTR))); if (r == -1) { kDebug() << "select"; quit(); return; } CLEAR(buf); buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; buf.memory = V4L2_MEMORY_MMAP; xioctl(fd, VIDIOC_DQBUF, &buf); if (v4lconvert_convert(v4lconvert_data, &src_fmt, &fmt, (unsigned char*)buffers[buf.index].start, buf.bytesused, dst_buf, fmt.fmt.pix.sizeimage) < 0) { if (errno != EAGAIN) kDebug() << "v4l_convert"; } unsigned char* asil=(unsigned char*)malloc(fmt.fmt.pix.sizeimage+qstrlen(header)); memmove(asil, dst_buf, fmt.fmt.pix.sizeimage); memmove(asil+qstrlen(header), asil, fmt.fmt.pix.sizeimage); memcpy(asil,header,qstrlen(header)); QImage *qq=new QImage(); if(qq->loadFromData(asil,fmt.fmt.pix.sizeimage+qstrlen(header), "PPM")){ emit renderedImage(*qq); } free(asil); delete qq; if (delay>0) { this->msleep(delay); } xioctl(fd, VIDIOC_QBUF, &buf); di++; mutex.unlock(); } } int CaptureThread::stop() { running = false; devam=false; mutex.lock(); type = V4L2_BUF_TYPE_VIDEO_CAPTURE; xioctl(fd, VIDIOC_STREAMOFF, &type); for (unsigned int i = 0; i < n_buffers; ++i) v4l2_munmap(buffers[i].start, buffers[i].length); v4l2_close(fd); fd = -1; mutex.unlock(); quit(); return 0; } int CaptureThread::start() { wait(); devam=false; fd = -1; // read config dev_name = Settings::node(); width = Settings::width(); height = Settings::height(); fps = Settings::fps(); if (fps>0) { delay = 1000/fps; } else { delay = 0; } // open webcam device node fd = v4l2_open(dev_name.toStdString().c_str(), O_RDWR | O_NONBLOCK, 0); if (fd < 0) { kError() << "Cannot open device"; quit(); return 1; } CLEAR(fmt); fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; fmt.fmt.pix.width = width; fmt.fmt.pix.height = height; fmt.fmt.pix.pixelformat = V4L2_PIX_FMT_RGB24; fmt.fmt.pix.field = V4L2_FIELD_INTERLACED; xioctl(fd, VIDIOC_S_FMT, &fmt); if (fmt.fmt.pix.pixelformat != V4L2_PIX_FMT_RGB24) { kError() << "Libv4l didn't accept RGB24 format. Can't proceed."; quit(); return 1; } emit startedCapture(fmt.fmt.pix.width, fmt.fmt.pix.height); v4lconvert_data = v4lconvert_create(fd); if (v4lconvert_data == NULL) kDebug() << "v4lconvert_create"; if (v4lconvert_try_format(v4lconvert_data, &fmt, &src_fmt) != 0) kDebug() << "v4lconvert_try_format"; xioctl(fd, VIDIOC_S_FMT, &src_fmt); dst_buf = (unsigned char*)malloc(fmt.fmt.pix.sizeimage); CLEAR(req); req.count = 2; req.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; req.memory = V4L2_MEMORY_MMAP; xioctl(fd, VIDIOC_REQBUFS, &req); buffers = (buffer*)calloc(req.count, sizeof(*buffers)); for (n_buffers = 0; n_buffers < req.count; ++n_buffers) { CLEAR(buf); buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; buf.memory = V4L2_MEMORY_MMAP; buf.index = n_buffers; xioctl(fd, VIDIOC_QUERYBUF, &buf); buffers[n_buffers].length = buf.length; buffers[n_buffers].start = v4l2_mmap(NULL, buf.length, PROT_READ | PROT_WRITE, MAP_SHARED, fd, buf.m.offset); if (MAP_FAILED == buffers[n_buffers].start) { kDebug() << "mmap"; quit(); return 1; } } for (unsigned int i = 0; i < n_buffers; ++i) { CLEAR(buf); buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; buf.memory = V4L2_MEMORY_MMAP; buf.index = i; xioctl(fd, VIDIOC_QBUF, &buf); } type = V4L2_BUF_TYPE_VIDEO_CAPTURE; xioctl(fd, VIDIOC_STREAMON, &type); di=0; sprintf(header,"P6\n%d %d 255\n",fmt.fmt.pix.width,fmt.fmt.pix.height); devam=true; // start processing video data running = true; QThread::start(); return 0; } kamerka-0.8.1/src/kamerka.qml0000644000175000017500000002343011613007262014204 0ustar dosdos/* * Copyright (c) Sebastian Krzyszkowiak * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. */ import Qt 4.7; import Effects 1.0; Rectangle { property int rand: 0; property bool cyknij: false; property int timercount: 5; property bool timeranim: false; property bool more: false; property bool canvasVisible: false; signal takePhoto(); signal timerCounter(int count); signal showDirectory(); signal showConfiguration(); id: page; width: 640; height: 480; color: "transparent"; Rectangle { effect: DropShadow { blurRadius: 8; offset.x: 0; offset.y: 0; color: "black"; } id: focia; x: -10; y: -10; z: 100; width: page.width+20; height: page.height+50; color: "white"; smooth: true; opacity: 0; states: State { name: "down"; when: cyknij == true; PropertyChanges { target: focia; x: page.width-width-20; y: page.height-250; width: 180; height: 185; rotation: 180*4+(rand-30); opacity: 0; smooth: true; } PropertyChanges { target: picture; opacity: 1; } } transitions: Transition { from: ""; to: "down"; reversible: false; SequentialAnimation { id: animacja; NumberAnimation { target: picture; property: "opacity"; duration: 500; } NumberAnimation { properties: "width,height,x,y,rotation"; duration: 1000; easing.type: Easing.OutQuad; } NumberAnimation { duration: 1000; } NumberAnimation { target: focia; property: "opacity"; duration: 1500; easing.type:Easing.InQuad; } } } Rectangle { id: picture; x: 10; y: 10; opacity: 1; width: parent.width-20; height: parent.height-50; color: "black"; smooth: true; /* Image { effect: Blur { blurRadius: 8 } opacity: 0.75; anchors.fill: parent; source: fileName; smooth: true; } */ Image { id: preview; anchors.fill: parent; source: fileName; smooth: true; } } } function robFotke() { cyknij=false; page.takePhoto(); page.rand=Math.random()*60; picture.opacity=0; focia.opacity=1; } function photoTaken() { cyknij=true; } function timerGo() { timer.running = true; page.timercount=5; timerTriggered(); } function timerTriggered() { timerCounter(page.timercount); if (page.timercount==-1) { timer.running=false; robFotke(); page.timeranim=false; return; } page.timeranim=false; timerText.text=page.timercount.toString(); page.timercount--; page.timeranim=true; } function moreOrLess() { if (more) { more=false; } else { more=true; } } function showCanvasBackground() { canvasVisible=true; } function hideCanvasBackground() { canvasVisible=false; } Rectangle { id: canvasBackground; color: "#DD000000"; x: 0; y: 0; width: parent.width; height: parent.height; opacity: 0; states: State { name: "visible"; when: canvasVisible == true; PropertyChanges { target: canvasBackground; opacity: 1; } } transitions: Transition { to: "visible"; reversible: true; NumberAnimation { property: "opacity"; duration: 1000; } } } Rectangle { id: toolbar; y: page.height-(height/2); anchors.horizontalCenter: page.horizontalCenter; width: 0.75*page.width; height: 75; color: "#33000000"; radius: 10; opacity: 1; Button { id: shot; anchors.left: parent.left; anchors.bottom: parent.verticalCenter; anchors.bottomMargin: 4; anchors.leftMargin: 4; width: (parent.width/3)-8; text: i18n("Take a photo"); mouse.onClicked: robFotke(); } Button { id: autoshot; anchors.left: shot.right; anchors.bottom: parent.verticalCenter; anchors.bottomMargin: 4; anchors.leftMargin: 2; width: (parent.width/3)-8; text: i18n("Self-timer"); mouse.onClicked: timerGo(); } Button { id: moreBtn; anchors.left: autoshot.right; anchors.bottom: parent.verticalCenter; anchors.bottomMargin: 4; anchors.leftMargin: 2; anchors.right: parent.right; anchors.rightMargin: 4; text: more ? i18n("Less") : i18n("More"); mouse.onClicked: moreOrLess(); } Button { id: configure; anchors.top: parent.verticalCenter; anchors.left: parent.left; anchors.bottom: parent.bottom; anchors.topMargin: 2; anchors.bottomMargin: 4; anchors.leftMargin: 4; width: (parent.width/2)-8; text: i18n("Configure"); mouse.onClicked: showConfiguration(); } Button { id: dolphin; anchors.top: parent.verticalCenter; anchors.left: configure.right; anchors.bottom: parent.bottom; anchors.topMargin: 2; anchors.bottomMargin: 4; anchors.leftMargin: 2; anchors.right: parent.right; anchors.rightMargin: 4; text: i18n("Open directory"); mouse.onClicked: showDirectory(); } states: [ State { name: "down"; when: timer.running == true; PropertyChanges { target: toolbar; y: page.height; } }, State { name: "hidden"; when: canvasVisible == true; extend: "more"; PropertyChanges { target: toolbar; y: page.height; } }, State { name: "more"; when: more == true; PropertyChanges { target: toolbar; y: page.height-height-4; color: "#AA000000"; } } ] transitions: [ Transition { to: "down"; reversible: false; SequentialAnimation { NumberAnimation { property: "y"; duration: 500; easing.type: Easing.OutQuad; } ColorAnimation { property: "color"; duration: 0; } } }, Transition { to: "hidden"; reversible: true; SequentialAnimation { NumberAnimation { property: "y"; duration: 500; easing.type: Easing.InOutBack; } ColorAnimation { property: "color"; duration: 500; } } }, Transition { from: ""; to: "more"; reversible: true; ParallelAnimation { NumberAnimation { property: "y"; duration: 500; easing.type: Easing.InOutBack; } ColorAnimation { property: "color"; duration: 500; } } } ] } Timer { id: timer; interval: 1000; running: false; repeat: true; onTriggered: timerTriggered(); } Text { id: timerText; anchors.centerIn: parent; font.pointSize: 200; color: "white"; opacity: 0; text: "5"; visible: false; effect: DropShadow { blurRadius: 8; offset.x: 0; offset.y: 0; color: "black"; } states: State { name: "down"; when: page.timeranim == true; PropertyChanges { target: timerText; opacity: 1; visible: true; } } transitions: Transition { from: ""; to: "down"; reversible: false; SequentialAnimation { NumberAnimation { property: "opacity"; duration: 500; easing.type: Easing.OutQuad; } } } } } kamerka-0.8.1/src/main.cpp0000644000175000017500000000342211613007262013505 0ustar dosdos/* * Copyright (c) Sebastian Krzyszkowiak * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include "mainwindow.h" #define VERSION "0.8.1" int main(int argc, char *argv[]) { printf("Kamerka version %s\n Copyright (C) 2011 Sebastian Krzyszkowiak\n", VERSION); printf(" Kamerka comes with ABSOLUTELY NO WARRANTY.\n"); printf(" This is free software, and you are welcome to redistribute it\n"); printf(" under certain conditions; type `./kamerka --license' for details.\n"); QApplication::setGraphicsSystem("raster"); // improves performance a lot KAboutData aboutData("kamerka", 0, ki18n("Kamerka"), VERSION, ki18n("Simple photo taking application with fancy animated interface"), KAboutData::License_GPL, ki18n("Copyright (c) 2011 Sebastian Krzyszkowiak") ); KCmdLineArgs::init(argc, argv, &aboutData); KApplication a; QIcon icon(":/icons/kamerka.png"); a.setWindowIcon(icon); new MainWindow(); return a.exec(); } kamerka-0.8.1/src/kamerka.qrc0000644000175000017500000000035311613007262014177 0ustar dosdos kamerka.qml Button.qml ../data/kamerka.png kamerka-0.8.1/TODO0000644000175000017500000000120711613007262011755 0ustar dosdosFor 1.0: * better scalling ui * start with window size = video resolution * animated preview of already taken photos * some basic management of taken photos * some basic effects * consecutive image taking * "About Kamerka" button (probably in configuration dialog) * moar configuration: * buttons in notifications (for instance to set Krita instead of GIMP) * consecutive image taking * allow using custom sounds * brightness, colors, contrast * time of previews * image format For 1.x: * photo uploading to social services * moar effects * various fixes and user requests For 2.0: * video recording * and moar effects! kamerka-0.8.1/README0000644000175000017500000000042711613007262012150 0ustar dosdosKamerka - take photos using your webcam and shiny animated QML interface. Kamerka is an Qt4 app using KDE4 libraries. It uses Video4Linux to get image from webcam and is able to save photos. Interface is based on QML and uses it's possibilities to show easy to use animated UI. kamerka-0.8.1/po/0000755000175000017500000000000011613007262011703 5ustar dosdoskamerka-0.8.1/po/kamerka_sr@ijekavian.po0000644000175000017500000001202311613007262016342 0ustar dosdos# Kamerka Serbian Ijekavian Translation. # Copyright (C) 2011 Sebastian Krzyszkowiak # # Urs Fleisch , 2011. # Mladen Pejaković , 2011. msgid "" msgstr "" "Project-Id-Version: Kamerka\n" "Report-Msgid-Bugs-To: dos@dosowisko.net\n" "POT-Creation-Date: 2011-07-24 14:19+0200\n" "PO-Revision-Date: 2011-06-07 21:25+0100\n" "Last-Translator: Mladen Pejaković \n" "Language-Team: Serbian \n" "Language: sr@ijekavian\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Lokalize 0.3\n" "Plural-Forms: nplurals=4; plural=n==1 ? 3 : n%10==1 && n%100!=11 ? 0 : n" "%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" #: src/kamerka.qml:200 msgid "Take a photo" msgstr "Фотографиши" #: src/kamerka.qml:210 msgid "Self-timer" msgstr "Тајмер" #: src/kamerka.qml:221 msgid "Less" msgstr "Мање" #: src/kamerka.qml:221 msgid "More" msgstr "Више" #: src/kamerka.qml:233 msgid "Configure" msgstr "Подеси" #: src/kamerka.qml:246 msgid "Open directory" msgstr "Отвори фасциклу" #: src/main.cpp:35 msgid "Kamerka" msgstr "Камерка" #: src/main.cpp:36 msgid "Simple photo taking application with fancy animated interface" msgstr "" "Једноставна апликација за хватање фотографија са лијепим анимираним сучељем" #: src/main.cpp:37 msgid "Copyright (c) 2011 Sebastian Krzyszkowiak" msgstr "Copyright (c) 2011 Sebastian Krzyszkowiak" #: src/mainwindow.cpp:36 msgid "i18n() takes at least one argument" msgstr "i18n() захтијева бар један аргумент" #: src/mainwindow.cpp:54 msgid "Could not load QML interface!" msgstr "Не могу да учитам QML сучеље!" #: src/mainwindow.cpp:54 src/mainwindow.cpp:130 src/mainwindow.cpp:141 msgid "Error" msgstr "Грешка" #: src/mainwindow.cpp:126 src/mainwindow.cpp:130 src/mainwindow.cpp:141 msgid "Could not connect to V4L device!" msgstr "Не могу да се повежем са V4L сучењем!" #: src/mainwindow.cpp:170 msgid "" "Requested resolution (%1x%2) was not available. Driver used %3x%4 instead.\n" "Please check your configuration." msgstr "" "Захтијевана резолуција (%1x%2) није доступна. Драјвер је користио %3x%4.\n" "Провјерите подешавања." #: src/settingsdialog.cpp:42 msgid "Selected path does not exists. Do you want to create it?" msgstr "Изабрана путања не постоји. Да ли желите да је направите?" #: src/settingsdialog.cpp:59 msgid "Device node:" msgstr "Чвор уређаја:" #: src/settingsdialog.cpp:66 msgid "x" msgstr "x" #: src/settingsdialog.cpp:71 msgid "px" msgstr "px" #: src/settingsdialog.cpp:72 msgid "Resolution:" msgstr "Резолуција" #: src/settingsdialog.cpp:77 msgid "Disabled" msgstr "Онемогућено" #: src/settingsdialog.cpp:78 msgid " fps" msgstr " fps" #: src/settingsdialog.cpp:80 msgid "Framerate limit:" msgstr "Ограничење брзине кадрова:" #: src/settingsdialog.cpp:82 msgid "Camera" msgstr "Камера" #: src/settingsdialog.cpp:82 msgid "Camera settings" msgstr "Подешавања камере" #: src/settingsdialog.cpp:89 msgid "Use default pictures directory" msgstr "Користи подразумијевану фасциклу слика" #: src/settingsdialog.cpp:96 msgid "Use subdirectory:" msgstr "Отвори подфасциклу" #: src/settingsdialog.cpp:108 msgid "Photo directory:" msgstr "Фасцикла фотографија:" #: src/settingsdialog.cpp:110 msgid "Storage" msgstr "Спремиште" #: src/settingsdialog.cpp:110 msgid "Photo storage" msgstr "Спремиште фотографија" #: src/settingsdialog.cpp:116 msgid "Play sound on taking photo" msgstr "Пусти звук при фотографисању" #: src/settingsdialog.cpp:119 msgid "Play timer sounds" msgstr "Пуштај звуке тајмера" #: src/settingsdialog.cpp:122 msgid "Show notification on taking photo" msgstr "Прикажи обавјештење при фотографисању" #: src/settingsdialog.cpp:126 msgid "Behaviour" msgstr "Понашање" #: src/videowidget.cpp:70 msgid "Starting up webcam..." msgstr "Покрећем веб-камеру..." #: src/videowidget.cpp:129 msgid "Photo has been stored in file %1" msgstr "Фотографија је смјештена у фајл %1" #: src/videowidget.cpp:134 msgid "Show in directory" msgstr "Покажи у фасцикли" #: src/videowidget.cpp:134 msgid "Open in GIMP" msgstr "Отвори помоћу ГИМПа" #: src/videowidget.cpp:134 msgid "Open in Inkscape" msgstr "Отвори помоћу Инкскејпа" #: tools/rc.cpp:1 rc.cpp:1 msgctxt "NAME OF TRANSLATORS" msgid "Your names" msgstr "Младен Пејаковић" #: tools/rc.cpp:2 rc.cpp:2 msgctxt "EMAIL OF TRANSLATORS" msgid "Your emails" msgstr "pejakm@gmail.com" kamerka-0.8.1/po/kamerka_sr@ijekavianlatin.po0000644000175000017500000001063011613007262017374 0ustar dosdos# Kamerka Serbian Ijekavian Latin Translation. # Copyright (C) 2011 Sebastian Krzyszkowiak # # Urs Fleisch , 2011. # Mladen Pejaković , 2011. msgid "" msgstr "" "Project-Id-Version: Kamerka\n" "Report-Msgid-Bugs-To: dos@dosowisko.net\n" "POT-Creation-Date: 2011-07-24 14:19+0200\n" "PO-Revision-Date: 2011-06-07 21:27+0100\n" "Last-Translator: Mladen Pejaković \n" "Language-Team: Serbian \n" "Language: sr@ijekavianlatin\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Lokalize 0.3\n" "Plural-Forms: nplurals=4; plural=n==1 ? 3 : n%10==1 && n%100!=11 ? 0 : n" "%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" #: src/kamerka.qml:200 msgid "Take a photo" msgstr "Fotografiši" #: src/kamerka.qml:210 msgid "Self-timer" msgstr "Tajmer" #: src/kamerka.qml:221 msgid "Less" msgstr "Manje" #: src/kamerka.qml:221 msgid "More" msgstr "Više" #: src/kamerka.qml:233 msgid "Configure" msgstr "Podesi" #: src/kamerka.qml:246 msgid "Open directory" msgstr "Otvori fasciklu" #: src/main.cpp:35 msgid "Kamerka" msgstr "Kamerka" #: src/main.cpp:36 msgid "Simple photo taking application with fancy animated interface" msgstr "" "Jednostavna aplikacija za hvatanje fotografija sa lijepim animiranim sučeljem" #: src/main.cpp:37 msgid "Copyright (c) 2011 Sebastian Krzyszkowiak" msgstr "Copyright (c) 2011 Sebastian Krzyszkowiak" #: src/mainwindow.cpp:36 msgid "i18n() takes at least one argument" msgstr "i18n() zahtijeva bar jedan argument" #: src/mainwindow.cpp:54 msgid "Could not load QML interface!" msgstr "Ne mogu da učitam QML sučelje!" #: src/mainwindow.cpp:54 src/mainwindow.cpp:130 src/mainwindow.cpp:141 msgid "Error" msgstr "Greška" #: src/mainwindow.cpp:126 src/mainwindow.cpp:130 src/mainwindow.cpp:141 msgid "Could not connect to V4L device!" msgstr "Ne mogu da se povežem sa V4L sučenjem!" #: src/mainwindow.cpp:170 msgid "" "Requested resolution (%1x%2) was not available. Driver used %3x%4 instead.\n" "Please check your configuration." msgstr "" "Zahtijevana rezolucija (%1x%2) nije dostupna. Drajver je koristio %3x%4.\n" "Provjerite podešavanja." #: src/settingsdialog.cpp:42 msgid "Selected path does not exists. Do you want to create it?" msgstr "Izabrana putanja ne postoji. Da li želite da je napravite?" #: src/settingsdialog.cpp:59 msgid "Device node:" msgstr "Čvor uređaja:" #: src/settingsdialog.cpp:66 msgid "x" msgstr "x" #: src/settingsdialog.cpp:71 msgid "px" msgstr "px" #: src/settingsdialog.cpp:72 msgid "Resolution:" msgstr "Rezolucija" #: src/settingsdialog.cpp:77 msgid "Disabled" msgstr "Onemogućeno" #: src/settingsdialog.cpp:78 msgid " fps" msgstr " fps" #: src/settingsdialog.cpp:80 msgid "Framerate limit:" msgstr "Ograničenje brzine kadrova:" #: src/settingsdialog.cpp:82 msgid "Camera" msgstr "Kamera" #: src/settingsdialog.cpp:82 msgid "Camera settings" msgstr "Podešavanja kamere" #: src/settingsdialog.cpp:89 msgid "Use default pictures directory" msgstr "Koristi podrazumijevanu fasciklu slika" #: src/settingsdialog.cpp:96 msgid "Use subdirectory:" msgstr "Otvori podfasciklu" #: src/settingsdialog.cpp:108 msgid "Photo directory:" msgstr "Fascikla fotografija:" #: src/settingsdialog.cpp:110 msgid "Storage" msgstr "Spremište" #: src/settingsdialog.cpp:110 msgid "Photo storage" msgstr "Spremište fotografija" #: src/settingsdialog.cpp:116 msgid "Play sound on taking photo" msgstr "Pusti zvuk pri fotografisanju" #: src/settingsdialog.cpp:119 msgid "Play timer sounds" msgstr "Puštaj zvuke tajmera" #: src/settingsdialog.cpp:122 msgid "Show notification on taking photo" msgstr "Prikaži obavještenje pri fotografisanju" #: src/settingsdialog.cpp:126 msgid "Behaviour" msgstr "Ponašanje" #: src/videowidget.cpp:70 msgid "Starting up webcam..." msgstr "Pokrećem veb-kameru..." #: src/videowidget.cpp:129 msgid "Photo has been stored in file %1" msgstr "Fotografija je smještena u fajl %1" #: src/videowidget.cpp:134 msgid "Show in directory" msgstr "Pokaži u fascikli" #: src/videowidget.cpp:134 msgid "Open in GIMP" msgstr "Otvori pomoću GIMPa" #: src/videowidget.cpp:134 msgid "Open in Inkscape" msgstr "Otvori pomoću Inkskejpa" #: tools/rc.cpp:1 rc.cpp:1 msgctxt "NAME OF TRANSLATORS" msgid "Your names" msgstr "Mladen Pejaković" #: tools/rc.cpp:2 rc.cpp:2 msgctxt "EMAIL OF TRANSLATORS" msgid "Your emails" msgstr "pejakm@gmail.com" kamerka-0.8.1/po/kamerka_de.po0000644000175000017500000001061211613007262014326 0ustar dosdos# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Frank Schäfer , 2011. msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: dos@dosowisko.net\n" "POT-Creation-Date: 2011-07-24 14:19+0200\n" "PO-Revision-Date: 2011-07-18 11:54+0200\n" "Last-Translator: Frank Schäfer \n" "Language-Team: \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Lokalize 1.2\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" #: src/kamerka.qml:200 msgid "Take a photo" msgstr "Foto machen" #: src/kamerka.qml:210 msgid "Self-timer" msgstr "Selbstauslöser" #: src/kamerka.qml:221 msgid "Less" msgstr "Weniger" #: src/kamerka.qml:221 msgid "More" msgstr "Mehr" #: src/kamerka.qml:233 msgid "Configure" msgstr "Konfigurieren" #: src/kamerka.qml:246 msgid "Open directory" msgstr "Verzeichnis öffnen" #: src/main.cpp:35 msgid "Kamerka" msgstr "Kamerka" #: src/main.cpp:36 msgid "Simple photo taking application with fancy animated interface" msgstr "" "Einfache Anwendung zum Fotografieren mit einer phantasievollen " "Benutzeroberfläche" #: src/main.cpp:37 msgid "Copyright (c) 2011 Sebastian Krzyszkowiak" msgstr "Copyright (c) 2011 Sebastian Krzyszkowiak" #: src/mainwindow.cpp:36 msgid "i18n() takes at least one argument" msgstr "i18n() benötigt mindestens ein Argument" #: src/mainwindow.cpp:54 msgid "Could not load QML interface!" msgstr "QML-Interface konnte nicht geladen werden !" #: src/mainwindow.cpp:54 src/mainwindow.cpp:130 src/mainwindow.cpp:141 msgid "Error" msgstr "Fehler" #: src/mainwindow.cpp:126 src/mainwindow.cpp:130 src/mainwindow.cpp:141 msgid "Could not connect to V4L device!" msgstr "V4L-Gerät konnte nicht verbunden werden !" #: src/mainwindow.cpp:170 msgid "" "Requested resolution (%1x%2) was not available. Driver used %3x%4 instead.\n" "Please check your configuration." msgstr "" "Die gewählte Auflösung (%1x%2) ist nicht verfügbar. Der Treiber verwendet\n" " stattdessen %3x%4. Bitte überprüfen Sie die Einstellungen." #: src/settingsdialog.cpp:42 msgid "Selected path does not exists. Do you want to create it?" msgstr "Das gewählte Verzeichnis existiert nicht. Soll es erstellt werden ?" #: src/settingsdialog.cpp:59 msgid "Device node:" msgstr "Gerätedatei:" #: src/settingsdialog.cpp:66 msgid "x" msgstr "x" #: src/settingsdialog.cpp:71 msgid "px" msgstr "px" #: src/settingsdialog.cpp:72 msgid "Resolution:" msgstr "Auflösung:" #: src/settingsdialog.cpp:77 msgid "Disabled" msgstr "Deaktiviert" #: src/settingsdialog.cpp:78 msgid " fps" msgstr " Bilder/Sek." #: src/settingsdialog.cpp:80 msgid "Framerate limit:" msgstr "Bildraten-Limit:" #: src/settingsdialog.cpp:82 msgid "Camera" msgstr "Kamera" #: src/settingsdialog.cpp:82 msgid "Camera settings" msgstr "Kamera-Einstellungen" #: src/settingsdialog.cpp:89 msgid "Use default pictures directory" msgstr "Verwende Standard-Bilderverzeichnis" #: src/settingsdialog.cpp:96 msgid "Use subdirectory:" msgstr "Verwende Unterverzeichnis:" #: src/settingsdialog.cpp:108 msgid "Photo directory:" msgstr "Bilderverzeichnis:" #: src/settingsdialog.cpp:110 msgid "Storage" msgstr "Speicherung" #: src/settingsdialog.cpp:110 msgid "Photo storage" msgstr "Foto-Speicherung" #: src/settingsdialog.cpp:116 msgid "Play sound on taking photo" msgstr "Sound beim Fotografieren abspielen" #: src/settingsdialog.cpp:119 msgid "Play timer sounds" msgstr "Timer-Sounds abspielen" #: src/settingsdialog.cpp:122 msgid "Show notification on taking photo" msgstr "Benachrichtigung beim Fotografieren anzeigen" #: src/settingsdialog.cpp:126 msgid "Behaviour" msgstr "Verhalten" #: src/videowidget.cpp:70 msgid "Starting up webcam..." msgstr "Starte webcam..." #: src/videowidget.cpp:129 msgid "Photo has been stored in file %1" msgstr "Foto wurde in Datei %1 gespeichert" #: src/videowidget.cpp:134 msgid "Show in directory" msgstr "In Verzeichnis anzeigen" #: src/videowidget.cpp:134 msgid "Open in GIMP" msgstr "Mit GIMP öffnen" #: src/videowidget.cpp:134 msgid "Open in Inkscape" msgstr "Mit Inkscape öffnen" #: tools/rc.cpp:1 rc.cpp:1 msgctxt "NAME OF TRANSLATORS" msgid "Your names" msgstr "Frank Schäfer" #: tools/rc.cpp:2 rc.cpp:2 msgctxt "EMAIL OF TRANSLATORS" msgid "Your emails" msgstr "fschaefer.oss@googlemail.com" kamerka-0.8.1/po/kamerka_cs.po0000644000175000017500000001064211613007262014346 0ustar dosdos# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Pavel Fric , 2011. # Pavel Fric , 2011. msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: dos@dosowisko.net\n" "POT-Creation-Date: 2011-07-24 14:19+0200\n" "PO-Revision-Date: 2011-07-14 10:10+0200\n" "Last-Translator: Pavel Fric \n" "Language-Team: Czech \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Lokalize 1.2\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" #: src/kamerka.qml:200 msgid "Take a photo" msgstr "Udělat fotku" #: src/kamerka.qml:210 msgid "Self-timer" msgstr "Samospoušť" #: src/kamerka.qml:221 msgid "Less" msgstr "Méně" #: src/kamerka.qml:221 msgid "More" msgstr "Více" #: src/kamerka.qml:233 msgid "Configure" msgstr "Nastavit" #: src/kamerka.qml:246 msgid "Open directory" msgstr "Otevřít adresář" #: src/main.cpp:35 msgid "Kamerka" msgstr "Kamerka" #: src/main.cpp:36 msgid "Simple photo taking application with fancy animated interface" msgstr "" "Jednoduchý program na dělání fotografií s vypracovaných kresleným rozhraním" #: src/main.cpp:37 msgid "Copyright (c) 2011 Sebastian Krzyszkowiak" msgstr "Copyright (c) 2011 Sebastian Krzyszkowiak" #: src/mainwindow.cpp:36 msgid "i18n() takes at least one argument" msgstr "i18n() bere alespoň jeden argument" #: src/mainwindow.cpp:54 msgid "Could not load QML interface!" msgstr "Nepodařilo se nahrát rozhraní QML!" #: src/mainwindow.cpp:54 src/mainwindow.cpp:130 src/mainwindow.cpp:141 msgid "Error" msgstr "Chyba" #: src/mainwindow.cpp:126 src/mainwindow.cpp:130 src/mainwindow.cpp:141 msgid "Could not connect to V4L device!" msgstr "Nepodařilo se spojit se zařízením V4L!" #: src/mainwindow.cpp:170 msgid "" "Requested resolution (%1x%2) was not available. Driver used %3x%4 instead.\n" "Please check your configuration." msgstr "" "Požadované rozlišení (%1x%2) nebylo dostupné. Místo toho použit ovladač %3x" "%4.\n" "Ověřte, prosím, své nastavení" #: src/settingsdialog.cpp:42 msgid "Selected path does not exists. Do you want to create it?" msgstr "Vybraná cesta neexistuje. Chcete ji vytvořit?" #: src/settingsdialog.cpp:59 msgid "Device node:" msgstr "Uzel zařízení:" #: src/settingsdialog.cpp:66 msgid "x" msgstr "x" #: src/settingsdialog.cpp:71 msgid "px" msgstr "px" #: src/settingsdialog.cpp:72 msgid "Resolution:" msgstr "Rozlišení:" #: src/settingsdialog.cpp:77 msgid "Disabled" msgstr "Zakázáno" #: src/settingsdialog.cpp:78 msgid " fps" msgstr " snímků za sekundu (fps)" #: src/settingsdialog.cpp:80 msgid "Framerate limit:" msgstr "Omezení snímkování" #: src/settingsdialog.cpp:82 msgid "Camera" msgstr "Kamera" #: src/settingsdialog.cpp:82 msgid "Camera settings" msgstr "Nastavení kamery" #: src/settingsdialog.cpp:89 msgid "Use default pictures directory" msgstr "Použít výchozí adresář s obrázky" #: src/settingsdialog.cpp:96 msgid "Use subdirectory:" msgstr "Použít podadresář" #: src/settingsdialog.cpp:108 msgid "Photo directory:" msgstr "Adresář s fotografiemi" #: src/settingsdialog.cpp:110 msgid "Storage" msgstr "Úložiště" #: src/settingsdialog.cpp:110 msgid "Photo storage" msgstr "Úložiště fotografií" #: src/settingsdialog.cpp:116 msgid "Play sound on taking photo" msgstr "Při udělání fotky přehrát zvuk" #: src/settingsdialog.cpp:119 msgid "Play timer sounds" msgstr "Přehrát zvuk časovače" #: src/settingsdialog.cpp:122 msgid "Show notification on taking photo" msgstr "Po udělání fotky ukázat oznámení" #: src/settingsdialog.cpp:126 msgid "Behaviour" msgstr "Chování" #: src/videowidget.cpp:70 msgid "Starting up webcam..." msgstr "Spouští se kamera..." #: src/videowidget.cpp:129 msgid "Photo has been stored in file %1" msgstr "Fotografie byla uložena do souboru %1" #: src/videowidget.cpp:134 msgid "Show in directory" msgstr "Ukázat v adresáři" #: src/videowidget.cpp:134 msgid "Open in GIMP" msgstr "Otevřít v GIMPu" #: src/videowidget.cpp:134 msgid "Open in Inkscape" msgstr "Otevřít v Inkscape" #: tools/rc.cpp:1 rc.cpp:1 msgctxt "NAME OF TRANSLATORS" msgid "Your names" msgstr "Pavel Fric" #: tools/rc.cpp:2 rc.cpp:2 msgctxt "EMAIL OF TRANSLATORS" msgid "Your emails" msgstr "pavelfric@seznam.cz" kamerka-0.8.1/po/kamerka_es.po0000644000175000017500000001046311613007262014351 0ustar dosdos# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Daniel Halens Rodriguez , 2011. msgid "" msgstr "" "Project-Id-Version: kamerka\n" "Report-Msgid-Bugs-To: dos@dosowisko.net\n" "POT-Creation-Date: 2011-07-24 14:19+0200\n" "PO-Revision-Date: 2011-07-13 17:30+0100\n" "Last-Translator: Daniel Halens Rodriguez \n" "Language-Team: Spanish \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Lokalize 1.2\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/kamerka.qml:200 msgid "Take a photo" msgstr "Tomar una foto" #: src/kamerka.qml:210 msgid "Self-timer" msgstr "Cuenta atrás" #: src/kamerka.qml:221 msgid "Less" msgstr "Menos" #: src/kamerka.qml:221 msgid "More" msgstr "Más" #: src/kamerka.qml:233 msgid "Configure" msgstr "Configurar" #: src/kamerka.qml:246 msgid "Open directory" msgstr "Abrir carpeta" #: src/main.cpp:35 msgid "Kamerka" msgstr "Kamerka" #: src/main.cpp:36 msgid "Simple photo taking application with fancy animated interface" msgstr "Aplicación sencilla para tomar fotos con un atractivo interfaz animado" #: src/main.cpp:37 msgid "Copyright (c) 2011 Sebastian Krzyszkowiak" msgstr "Copyright (c) 2011 Sebastian Krzyszkowiak" #: src/mainwindow.cpp:36 msgid "i18n() takes at least one argument" msgstr "i18n() requiere de al menos un argumento" #: src/mainwindow.cpp:54 msgid "Could not load QML interface!" msgstr "¡No se pudo cargar el interfaz QML!" #: src/mainwindow.cpp:54 src/mainwindow.cpp:130 src/mainwindow.cpp:141 msgid "Error" msgstr "Error" #: src/mainwindow.cpp:126 src/mainwindow.cpp:130 src/mainwindow.cpp:141 msgid "Could not connect to V4L device!" msgstr "¡No se pudo conectar al dispositivo V4L!" #: src/mainwindow.cpp:170 msgid "" "Requested resolution (%1x%2) was not available. Driver used %3x%4 instead.\n" "Please check your configuration." msgstr "" "La resolución solicitada (%1x%2) no está disponible. El driver usó %3x%4.\n" "Compruebe la configuración." #: src/settingsdialog.cpp:42 msgid "Selected path does not exists. Do you want to create it?" msgstr "La ruta elegida no existe. ¿Desea crearla?" #: src/settingsdialog.cpp:59 msgid "Device node:" msgstr "Dispositivo:" #: src/settingsdialog.cpp:66 msgid "x" msgstr "x" #: src/settingsdialog.cpp:71 msgid "px" msgstr "px" #: src/settingsdialog.cpp:72 msgid "Resolution:" msgstr "Resolución:" #: src/settingsdialog.cpp:77 msgid "Disabled" msgstr "Inhabilitado" #: src/settingsdialog.cpp:78 msgid " fps" msgstr " fps" #: src/settingsdialog.cpp:80 msgid "Framerate limit:" msgstr "Tasa de fotogramas:" #: src/settingsdialog.cpp:82 msgid "Camera" msgstr "Cámara" #: src/settingsdialog.cpp:82 msgid "Camera settings" msgstr "Ajustes de cámara" #: src/settingsdialog.cpp:89 msgid "Use default pictures directory" msgstr "Usar el directorio de imágenes por defecto" #: src/settingsdialog.cpp:96 msgid "Use subdirectory:" msgstr "Usar subdirectorio:" #: src/settingsdialog.cpp:108 msgid "Photo directory:" msgstr "Directorio de imágenes:" #: src/settingsdialog.cpp:110 msgid "Storage" msgstr "Almacenamiento" #: src/settingsdialog.cpp:110 msgid "Photo storage" msgstr "Almacenamiento de imágenes" #: src/settingsdialog.cpp:116 msgid "Play sound on taking photo" msgstr "Reproducir sonido al tomar una foto" #: src/settingsdialog.cpp:119 msgid "Play timer sounds" msgstr "Reproducir sonido en la cuenta atrás" #: src/settingsdialog.cpp:122 msgid "Show notification on taking photo" msgstr "Mostrar nota al tomar una foto" #: src/settingsdialog.cpp:126 msgid "Behaviour" msgstr "Comportamiento" #: src/videowidget.cpp:70 msgid "Starting up webcam..." msgstr "Iniciando la webcam..." #: src/videowidget.cpp:129 msgid "Photo has been stored in file %1" msgstr "Foto guardada como %1" #: src/videowidget.cpp:134 msgid "Show in directory" msgstr "Mostrar en el directorio" #: src/videowidget.cpp:134 msgid "Open in GIMP" msgstr "Abrir en GIMP" #: src/videowidget.cpp:134 msgid "Open in Inkscape" msgstr "Abrir con Inkscape" #: tools/rc.cpp:1 rc.cpp:1 msgctxt "NAME OF TRANSLATORS" msgid "Your names" msgstr "Tus nombres" #: tools/rc.cpp:2 rc.cpp:2 msgctxt "EMAIL OF TRANSLATORS" msgid "Your emails" msgstr "Tus emails" kamerka-0.8.1/po/CMakeLists.txt0000644000175000017500000000236011613007262014444 0ustar dosdosFIND_PROGRAM(GETTEXT_MSGFMT_EXECUTABLE msgfmt) IF(NOT GETTEXT_MSGFMT_EXECUTABLE) MESSAGE( "------ NOTE: msgfmt not found. Translations will *not* be installed ------") ELSE(NOT GETTEXT_MSGFMT_EXECUTABLE) SET(catalogname kamerka) ADD_CUSTOM_TARGET(translations ALL) FILE(GLOB PO_FILES *.po) FOREACH(_poFile ${PO_FILES}) GET_FILENAME_COMPONENT(_poFileName ${_poFile} NAME) STRING(REGEX REPLACE "^${catalogname}_?" "" _langCode ${_poFileName} ) STRING(REGEX REPLACE "\\.po$" "" _langCode ${_langCode} ) IF( _langCode ) GET_FILENAME_COMPONENT(_lang ${_poFile} NAME_WE) SET(_gmoFile ${CMAKE_CURRENT_BINARY_DIR}/${_lang}.gmo) ADD_CUSTOM_COMMAND(TARGET translations COMMAND ${GETTEXT_MSGFMT_EXECUTABLE} --check -o ${_gmoFile} ${_poFile} DEPENDS ${_poFile}) INSTALL(FILES ${_gmoFile} DESTINATION ${LOCALE_INSTALL_DIR}/${_langCode}/LC_MESSAGES/ RENAME ${catalogname}.mo) ENDIF( _langCode ) ENDFOREACH(_poFile ${PO_FILES}) ENDIF(NOT GETTEXT_MSGFMT_EXECUTABLE) kamerka-0.8.1/po/kamerka.pot0000644000175000017500000000652611613007262014053 0ustar dosdos# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: dos@dosowisko.net\n" "POT-Creation-Date: 2011-07-24 14:19+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" #: src/kamerka.qml:200 msgid "Take a photo" msgstr "" #: src/kamerka.qml:210 msgid "Self-timer" msgstr "" #: src/kamerka.qml:221 msgid "Less" msgstr "" #: src/kamerka.qml:221 msgid "More" msgstr "" #: src/kamerka.qml:233 msgid "Configure" msgstr "" #: src/kamerka.qml:246 msgid "Open directory" msgstr "" #: src/main.cpp:35 msgid "Kamerka" msgstr "" #: src/main.cpp:36 msgid "Simple photo taking application with fancy animated interface" msgstr "" #: src/main.cpp:37 msgid "Copyright (c) 2011 Sebastian Krzyszkowiak" msgstr "" #: src/mainwindow.cpp:36 msgid "i18n() takes at least one argument" msgstr "" #: src/mainwindow.cpp:54 msgid "Could not load QML interface!" msgstr "" #: src/mainwindow.cpp:54 src/mainwindow.cpp:130 src/mainwindow.cpp:141 msgid "Error" msgstr "" #: src/mainwindow.cpp:126 src/mainwindow.cpp:130 src/mainwindow.cpp:141 msgid "Could not connect to V4L device!" msgstr "" #: src/mainwindow.cpp:170 msgid "" "Requested resolution (%1x%2) was not available. Driver used %3x%4 instead.\n" "Please check your configuration." msgstr "" #: src/settingsdialog.cpp:42 msgid "Selected path does not exists. Do you want to create it?" msgstr "" #: src/settingsdialog.cpp:59 msgid "Device node:" msgstr "" #: src/settingsdialog.cpp:66 msgid "x" msgstr "" #: src/settingsdialog.cpp:71 msgid "px" msgstr "" #: src/settingsdialog.cpp:72 msgid "Resolution:" msgstr "" #: src/settingsdialog.cpp:77 msgid "Disabled" msgstr "" #: src/settingsdialog.cpp:78 msgid " fps" msgstr "" #: src/settingsdialog.cpp:80 msgid "Framerate limit:" msgstr "" #: src/settingsdialog.cpp:82 msgid "Camera" msgstr "" #: src/settingsdialog.cpp:82 msgid "Camera settings" msgstr "" #: src/settingsdialog.cpp:89 msgid "Use default pictures directory" msgstr "" #: src/settingsdialog.cpp:96 msgid "Use subdirectory:" msgstr "" #: src/settingsdialog.cpp:108 msgid "Photo directory:" msgstr "" #: src/settingsdialog.cpp:110 msgid "Storage" msgstr "" #: src/settingsdialog.cpp:110 msgid "Photo storage" msgstr "" #: src/settingsdialog.cpp:116 msgid "Play sound on taking photo" msgstr "" #: src/settingsdialog.cpp:119 msgid "Play timer sounds" msgstr "" #: src/settingsdialog.cpp:122 msgid "Show notification on taking photo" msgstr "" #: src/settingsdialog.cpp:126 msgid "Behaviour" msgstr "" #: src/videowidget.cpp:70 msgid "Starting up webcam..." msgstr "" #: src/videowidget.cpp:129 msgid "Photo has been stored in file %1" msgstr "" #: src/videowidget.cpp:134 msgid "Show in directory" msgstr "" #: src/videowidget.cpp:134 msgid "Open in GIMP" msgstr "" #: src/videowidget.cpp:134 msgid "Open in Inkscape" msgstr "" #: tools/rc.cpp:1 rc.cpp:1 msgctxt "NAME OF TRANSLATORS" msgid "Your names" msgstr "" #: tools/rc.cpp:2 rc.cpp:2 msgctxt "EMAIL OF TRANSLATORS" msgid "Your emails" msgstr "" kamerka-0.8.1/po/kamerka_sr.po0000644000175000017500000001175111613007262014367 0ustar dosdos# Kamerka Serbian Translation. # Copyright (C) 2011 Sebastian Krzyszkowiak # # Urs Fleisch , 2011. # Mladen Pejaković , 2011. msgid "" msgstr "" "Project-Id-Version: Kamerka\n" "Report-Msgid-Bugs-To: dos@dosowisko.net\n" "POT-Creation-Date: 2011-07-24 14:19+0200\n" "PO-Revision-Date: 2011-06-07 21:24+0100\n" "Last-Translator: Mladen Pejaković \n" "Language-Team: Serbian \n" "Language: sr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Lokalize 0.3\n" "Plural-Forms: nplurals=4; plural=n==1 ? 3 : n%10==1 && n%100!=11 ? 0 : n" "%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" #: src/kamerka.qml:200 msgid "Take a photo" msgstr "Фотографиши" #: src/kamerka.qml:210 msgid "Self-timer" msgstr "Тајмер" #: src/kamerka.qml:221 msgid "Less" msgstr "Мање" #: src/kamerka.qml:221 msgid "More" msgstr "Више" #: src/kamerka.qml:233 msgid "Configure" msgstr "Подеси" #: src/kamerka.qml:246 msgid "Open directory" msgstr "Отвори фасциклу" #: src/main.cpp:35 msgid "Kamerka" msgstr "Камерка" #: src/main.cpp:36 msgid "Simple photo taking application with fancy animated interface" msgstr "" "Једноставна апликација за хватање фотографија са лепим анимираним сучељем" #: src/main.cpp:37 msgid "Copyright (c) 2011 Sebastian Krzyszkowiak" msgstr "Copyright (c) 2011 Sebastian Krzyszkowiak" #: src/mainwindow.cpp:36 msgid "i18n() takes at least one argument" msgstr "i18n() захтева бар један аргумент" #: src/mainwindow.cpp:54 msgid "Could not load QML interface!" msgstr "Не могу да учитам QML сучеље!" #: src/mainwindow.cpp:54 src/mainwindow.cpp:130 src/mainwindow.cpp:141 msgid "Error" msgstr "Грешка" #: src/mainwindow.cpp:126 src/mainwindow.cpp:130 src/mainwindow.cpp:141 msgid "Could not connect to V4L device!" msgstr "Не могу да се повежем са V4L сучењем!" #: src/mainwindow.cpp:170 msgid "" "Requested resolution (%1x%2) was not available. Driver used %3x%4 instead.\n" "Please check your configuration." msgstr "" "Захтевана резолуција (%1x%2) није доступна. Драјвер је користио %3x%4.\n" "Проверите подешавања." #: src/settingsdialog.cpp:42 msgid "Selected path does not exists. Do you want to create it?" msgstr "Изабрана путања не постоји. Да ли желите да је направите?" #: src/settingsdialog.cpp:59 msgid "Device node:" msgstr "Чвор уређаја:" #: src/settingsdialog.cpp:66 msgid "x" msgstr "x" #: src/settingsdialog.cpp:71 msgid "px" msgstr "px" #: src/settingsdialog.cpp:72 msgid "Resolution:" msgstr "Резолуција" #: src/settingsdialog.cpp:77 msgid "Disabled" msgstr "Онемогућено" #: src/settingsdialog.cpp:78 msgid " fps" msgstr " fps" #: src/settingsdialog.cpp:80 msgid "Framerate limit:" msgstr "Ограничење брзине кадрова:" #: src/settingsdialog.cpp:82 msgid "Camera" msgstr "Камера" #: src/settingsdialog.cpp:82 msgid "Camera settings" msgstr "Подешавања камере" #: src/settingsdialog.cpp:89 msgid "Use default pictures directory" msgstr "Користи подразумевану фасциклу слика" #: src/settingsdialog.cpp:96 msgid "Use subdirectory:" msgstr "Отвори подфасциклу" #: src/settingsdialog.cpp:108 msgid "Photo directory:" msgstr "Фасцикла фотографија:" #: src/settingsdialog.cpp:110 msgid "Storage" msgstr "Спремиште" #: src/settingsdialog.cpp:110 msgid "Photo storage" msgstr "Спремиште фотографија" #: src/settingsdialog.cpp:116 msgid "Play sound on taking photo" msgstr "Пусти звук при фотографисању" #: src/settingsdialog.cpp:119 msgid "Play timer sounds" msgstr "Пуштај звуке тајмера" #: src/settingsdialog.cpp:122 msgid "Show notification on taking photo" msgstr "Прикажи обавештење при фотографисању" #: src/settingsdialog.cpp:126 msgid "Behaviour" msgstr "Понашање" #: src/videowidget.cpp:70 msgid "Starting up webcam..." msgstr "Покрећем веб-камеру..." #: src/videowidget.cpp:129 msgid "Photo has been stored in file %1" msgstr "Фотографија је смештена у фајл %1" #: src/videowidget.cpp:134 msgid "Show in directory" msgstr "Покажи у фасцикли" #: src/videowidget.cpp:134 msgid "Open in GIMP" msgstr "Отвори помоћу ГИМПа" #: src/videowidget.cpp:134 msgid "Open in Inkscape" msgstr "Отвори помоћу Инкскејпа" #: tools/rc.cpp:1 rc.cpp:1 msgctxt "NAME OF TRANSLATORS" msgid "Your names" msgstr "Младен Пејаковић" #: tools/rc.cpp:2 rc.cpp:2 msgctxt "EMAIL OF TRANSLATORS" msgid "Your emails" msgstr "pejakm@gmail.com" kamerka-0.8.1/po/kamerka_pl.po0000644000175000017500000001064511613007262014357 0ustar dosdos# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: Kamerka\n" "Report-Msgid-Bugs-To: dos@dosowisko.net\n" "POT-Creation-Date: 2011-07-24 14:19+0200\n" "PO-Revision-Date: 2011-07-12 23:24+0100\n" "Last-Translator: Sebastian Krzyszkowiak \n" "Language-Team: pl_PL \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Poedit-Language: Polish\n" "X-Poedit-Country: POLAND\n" #: src/kamerka.qml:200 msgid "Take a photo" msgstr "Zrób zdjęcie" #: src/kamerka.qml:210 msgid "Self-timer" msgstr "Samowyzwalacz" #: src/kamerka.qml:221 msgid "Less" msgstr "Mniej" #: src/kamerka.qml:221 msgid "More" msgstr "Więcej" #: src/kamerka.qml:233 msgid "Configure" msgstr "Konfiguracja" #: src/kamerka.qml:246 msgid "Open directory" msgstr "Otwórz folder" #: src/main.cpp:35 msgid "Kamerka" msgstr "Kamerka" #: src/main.cpp:36 msgid "Simple photo taking application with fancy animated interface" msgstr "Prosta aplikacja do robienia zdjęć z ładnym, animowanym interfejsem" #: src/main.cpp:37 msgid "Copyright (c) 2011 Sebastian Krzyszkowiak" msgstr "Copyright (c) 2011 Sebastian Krzyszkowiak" #: src/mainwindow.cpp:36 msgid "i18n() takes at least one argument" msgstr "i18n() wymaga conajmniej jednego argumentu" #: src/mainwindow.cpp:54 msgid "Could not load QML interface!" msgstr "Nie można uruchomić interfejsu QML!" #: src/mainwindow.cpp:54 src/mainwindow.cpp:130 src/mainwindow.cpp:141 msgid "Error" msgstr "Błąd" #: src/mainwindow.cpp:126 src/mainwindow.cpp:130 src/mainwindow.cpp:141 msgid "Could not connect to V4L device!" msgstr "Nie można połączyć się z urządzeniem V4L!" #: src/mainwindow.cpp:170 msgid "" "Requested resolution (%1x%2) was not available. Driver used %3x%4 instead.\n" "Please check your configuration." msgstr "" "Żądana rozdzielczość (%1x%2) nie była dostępna. Sterownik użył " "rozdzielczości %3x%4.\n" "Proszę sprawdzić swoją konfigurację." #: src/settingsdialog.cpp:42 msgid "Selected path does not exists. Do you want to create it?" msgstr "Wybrana ścieżka nie istnieje. Czy chcesz ją utworzyć?" #: src/settingsdialog.cpp:59 msgid "Device node:" msgstr "Plik urządzenia:" #: src/settingsdialog.cpp:66 msgid "x" msgstr "x" #: src/settingsdialog.cpp:71 msgid "px" msgstr "px" #: src/settingsdialog.cpp:72 msgid "Resolution:" msgstr "Rozdzielczość:" #: src/settingsdialog.cpp:77 msgid "Disabled" msgstr "Wyłączone" #: src/settingsdialog.cpp:78 msgid " fps" msgstr " fps" #: src/settingsdialog.cpp:80 msgid "Framerate limit:" msgstr "Limit klatek na sekundę:" #: src/settingsdialog.cpp:82 msgid "Camera" msgstr "Kamera" #: src/settingsdialog.cpp:82 msgid "Camera settings" msgstr "Ustawienia kamery" #: src/settingsdialog.cpp:89 msgid "Use default pictures directory" msgstr "Użyj domyślnego folderu z obrazami" #: src/settingsdialog.cpp:96 msgid "Use subdirectory:" msgstr "Użyj podfolderu:" #: src/settingsdialog.cpp:108 msgid "Photo directory:" msgstr "Folder zdjęć:" #: src/settingsdialog.cpp:110 msgid "Storage" msgstr "Przechowywanie" #: src/settingsdialog.cpp:110 msgid "Photo storage" msgstr "Przechowywanie zdjęć" #: src/settingsdialog.cpp:116 msgid "Play sound on taking photo" msgstr "Odtwarzaj dźwięk przy robieniu zdjęcia" #: src/settingsdialog.cpp:119 msgid "Play timer sounds" msgstr "Odtwarzaj dźwięki samowyzwalacza" #: src/settingsdialog.cpp:122 msgid "Show notification on taking photo" msgstr "Pokaż powiadomienie przy robieniu zdjęcia" #: src/settingsdialog.cpp:126 msgid "Behaviour" msgstr "Zachowanie" #: src/videowidget.cpp:70 msgid "Starting up webcam..." msgstr "Uruchamianie kamerki..." #: src/videowidget.cpp:129 msgid "Photo has been stored in file %1" msgstr "Zdjęcie zostało zapisane w pliku %1" #: src/videowidget.cpp:134 msgid "Show in directory" msgstr "Pokaż w folderze" #: src/videowidget.cpp:134 msgid "Open in GIMP" msgstr "Otwórz w GIMPie" #: src/videowidget.cpp:134 msgid "Open in Inkscape" msgstr "Otwórz w Inkscape" #: tools/rc.cpp:1 rc.cpp:1 msgctxt "NAME OF TRANSLATORS" msgid "Your names" msgstr "Sebastian Krzyszkowiak" #: tools/rc.cpp:2 rc.cpp:2 msgctxt "EMAIL OF TRANSLATORS" msgid "Your emails" msgstr "dos@dosowisko.net" #~ msgid "Settings" #~ msgstr "Ustawienia" kamerka-0.8.1/po/kamerka_sr@latin.po0000644000175000017500000001057211613007262015517 0ustar dosdos# Kamerka Serbian Latin Translation. # Copyright (C) 2011 Sebastian Krzyszkowiak # # Urs Fleisch , 2011. # Mladen Pejaković , 2011. msgid "" msgstr "" "Project-Id-Version: Kamerka\n" "Report-Msgid-Bugs-To: dos@dosowisko.net\n" "POT-Creation-Date: 2011-07-24 14:19+0200\n" "PO-Revision-Date: 2011-06-07 21:26+0100\n" "Last-Translator: Mladen Pejaković \n" "Language-Team: Serbian \n" "Language: sr@latin\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Lokalize 0.3\n" "Plural-Forms: nplurals=4; plural=n==1 ? 3 : n%10==1 && n%100!=11 ? 0 : n" "%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" #: src/kamerka.qml:200 msgid "Take a photo" msgstr "Fotografiši" #: src/kamerka.qml:210 msgid "Self-timer" msgstr "Tajmer" #: src/kamerka.qml:221 msgid "Less" msgstr "Manje" #: src/kamerka.qml:221 msgid "More" msgstr "Više" #: src/kamerka.qml:233 msgid "Configure" msgstr "Podesi" #: src/kamerka.qml:246 msgid "Open directory" msgstr "Otvori fasciklu" #: src/main.cpp:35 msgid "Kamerka" msgstr "Kamerka" #: src/main.cpp:36 msgid "Simple photo taking application with fancy animated interface" msgstr "" "Jednostavna aplikacija za hvatanje fotografija sa lepim animiranim sučeljem" #: src/main.cpp:37 msgid "Copyright (c) 2011 Sebastian Krzyszkowiak" msgstr "Copyright (c) 2011 Sebastian Krzyszkowiak" #: src/mainwindow.cpp:36 msgid "i18n() takes at least one argument" msgstr "i18n() zahteva bar jedan argument" #: src/mainwindow.cpp:54 msgid "Could not load QML interface!" msgstr "Ne mogu da učitam QML sučelje!" #: src/mainwindow.cpp:54 src/mainwindow.cpp:130 src/mainwindow.cpp:141 msgid "Error" msgstr "Greška" #: src/mainwindow.cpp:126 src/mainwindow.cpp:130 src/mainwindow.cpp:141 msgid "Could not connect to V4L device!" msgstr "Ne mogu da se povežem sa V4L sučenjem!" #: src/mainwindow.cpp:170 msgid "" "Requested resolution (%1x%2) was not available. Driver used %3x%4 instead.\n" "Please check your configuration." msgstr "" "Zahtevana rezolucija (%1x%2) nije dostupna. Drajver je koristio %3x%4.\n" "Proverite podešavanja." #: src/settingsdialog.cpp:42 msgid "Selected path does not exists. Do you want to create it?" msgstr "Izabrana putanja ne postoji. Da li želite da je napravite?" #: src/settingsdialog.cpp:59 msgid "Device node:" msgstr "Čvor uređaja:" #: src/settingsdialog.cpp:66 msgid "x" msgstr "x" #: src/settingsdialog.cpp:71 msgid "px" msgstr "px" #: src/settingsdialog.cpp:72 msgid "Resolution:" msgstr "Rezolucija" #: src/settingsdialog.cpp:77 msgid "Disabled" msgstr "Onemogućeno" #: src/settingsdialog.cpp:78 msgid " fps" msgstr " fps" #: src/settingsdialog.cpp:80 msgid "Framerate limit:" msgstr "Ograničenje brzine kadrova:" #: src/settingsdialog.cpp:82 msgid "Camera" msgstr "Kamera" #: src/settingsdialog.cpp:82 msgid "Camera settings" msgstr "Podešavanja kamere" #: src/settingsdialog.cpp:89 msgid "Use default pictures directory" msgstr "Koristi podrazumevanu fasciklu slika" #: src/settingsdialog.cpp:96 msgid "Use subdirectory:" msgstr "Otvori podfasciklu" #: src/settingsdialog.cpp:108 msgid "Photo directory:" msgstr "Fascikla fotografija:" #: src/settingsdialog.cpp:110 msgid "Storage" msgstr "Spremište" #: src/settingsdialog.cpp:110 msgid "Photo storage" msgstr "Spremište fotografija" #: src/settingsdialog.cpp:116 msgid "Play sound on taking photo" msgstr "Pusti zvuk pri fotografisanju" #: src/settingsdialog.cpp:119 msgid "Play timer sounds" msgstr "Puštaj zvuke tajmera" #: src/settingsdialog.cpp:122 msgid "Show notification on taking photo" msgstr "Prikaži obaveštenje pri fotografisanju" #: src/settingsdialog.cpp:126 msgid "Behaviour" msgstr "Ponašanje" #: src/videowidget.cpp:70 msgid "Starting up webcam..." msgstr "Pokrećem veb-kameru..." #: src/videowidget.cpp:129 msgid "Photo has been stored in file %1" msgstr "Fotografija je smeštena u fajl %1" #: src/videowidget.cpp:134 msgid "Show in directory" msgstr "Pokaži u fascikli" #: src/videowidget.cpp:134 msgid "Open in GIMP" msgstr "Otvori pomoću GIMPa" #: src/videowidget.cpp:134 msgid "Open in Inkscape" msgstr "Otvori pomoću Inkskejpa" #: tools/rc.cpp:1 rc.cpp:1 msgctxt "NAME OF TRANSLATORS" msgid "Your names" msgstr "Mladen Pejaković" #: tools/rc.cpp:2 rc.cpp:2 msgctxt "EMAIL OF TRANSLATORS" msgid "Your emails" msgstr "pejakm@gmail.com" kamerka-0.8.1/modules/0000755000175000017500000000000011613007262012735 5ustar dosdoskamerka-0.8.1/modules/FindLibAvCodec.cmake0000644000175000017500000000011111613007262016464 0ustar dosdosinclude(FindPkgConfig) pkg_check_modules(LibAvCodec REQUIRED libavcodec) kamerka-0.8.1/modules/FindLibV4LConvert.cmake0000644000175000017500000000210711613007262017135 0ustar dosdos# cmake macro to test LibV4LConvert # Copyright (c) 201, Sebastian Krzyszkowiak # # LIBV4LCONVERT_FOUND # LIBV4LCONVERT_INCLUDE_DIR # LIBV4LCONVERT_LIBRARY # # Redistribution and use is allowed according to the terms of the BSD license. # For details see the accompanying COPYING-CMAKE-SCRIPTS file. INCLUDE (FindPackageHandleStandardArgs) IF (LIBV4LCONVERT_INCLUDE_DIR AND LIBV4LCONVERT_LIBRARY) # Already in cache, be silent SET (LIBV4LCONVERT_FIND_QUIETLY TRUE) ENDIF (LIBV4LCONVERT_INCLUDE_DIR AND LIBV4LCONVERT_LIBRARY) IF (NOT LIBV4LCONVERT_FOUND) FIND_PATH (LIBV4LCONVERT_INCLUDE_DIR libv4lconvert.h) FIND_LIBRARY (LIBV4LCONVERT_LIBRARY NAMES v4lconvert) IF (LIBV4LCONVERT_INCLUDE_DIR AND LIBV4LCONVERT_LIBRARY) SET (LIBV4LCONVERT_FOUND TRUE) ENDIF( LIBV4LCONVERT_INCLUDE_DIR AND LIBV4LCONVERT_LIBRARY ) ENDIF ( NOT LIBV4LCONVERT_FOUND) IF( LIBV4LCONVERT_FOUND ) IF( NOT LIBV4LCONVERT_FIND_QUIETLY ) MESSAGE( STATUS "Found LIBV4LCONVERT: ${LIBV4LCONVERT_LIBRARY}") ENDIF( NOT LIBV4LCONVERT_FIND_QUIETLY ) ENDIF( LIBV4LCONVERT_FOUND ) kamerka-0.8.1/modules/FindLibAvFormat.cmake0000644000175000017500000000011311613007262016701 0ustar dosdosinclude(FindPkgConfig) pkg_check_modules(LibAvFormat REQUIRED libavformat) kamerka-0.8.1/modules/FindLibV4L2.cmake0000644000175000017500000000164611613007262015665 0ustar dosdos# cmake macro to test LibV4L2 # Copyright (c) 2009, Jaroslav Reznik # # LIBV4L2_FOUND # LIBV4L2_INCLUDE_DIR # LIBV4L2_LIBRARY # # Redistribution and use is allowed according to the terms of the BSD license. # For details see the accompanying COPYING-CMAKE-SCRIPTS file. INCLUDE (FindPackageHandleStandardArgs) IF (LIBV4L2_INCLUDE_DIR AND LIBV4L2_LIBRARY) # Already in cache, be silent SET (LIBV4L2_FIND_QUIETLY TRUE) ENDIF (LIBV4L2_INCLUDE_DIR AND LIBV4L2_LIBRARY) IF (NOT LIBV4L2_FOUND) FIND_PATH (LIBV4L2_INCLUDE_DIR libv4l2.h) FIND_LIBRARY (LIBV4L2_LIBRARY NAMES v4l2) IF (LIBV4L2_INCLUDE_DIR AND LIBV4L2_LIBRARY) SET (LIBV4L2_FOUND TRUE) ENDIF( LIBV4L2_INCLUDE_DIR AND LIBV4L2_LIBRARY ) ENDIF ( NOT LIBV4L2_FOUND) IF( LIBV4L2_FOUND ) IF( NOT LIBV4L2_FIND_QUIETLY ) MESSAGE( STATUS "Found LIBV4L2: ${LIBV4L2_LIBRARY}") ENDIF( NOT LIBV4L2_FIND_QUIETLY ) ENDIF( LIBV4L2_FOUND ) kamerka-0.8.1/modules/FindLibAvUtil.cmake0000644000175000017500000000010711613007262016371 0ustar dosdosinclude(FindPkgConfig) pkg_check_modules(LibAvUtil REQUIRED libavutil) kamerka-0.8.1/ChangeLog0000644000175000017500000004063711613007262013051 0ustar dosdos2011-07-24 Sebastian Krzyszkowiak * debian/changelog, debian/compat, debian/control, debian/copyright, debian/docs, debian/menu, debian/rules, debian/source/format, debian/watch: prerelease rm -rf debian 2011-07-23 Sebastian Krzyszkowiak * src/CMakeLists.txt: install kcfg file instead of kcfgc (oops...) 2011-07-18 Frank Schäfer * AUTHORS, po/kamerka_de.po: Add german translation 2011-07-17 Sebastian Krzyszkowiak * TODO: TODO++ * CMakeLists.txt: add cmake_minimum_required to CMakeLists * INSTALL: fix INSTALL instructions 2011-07-16 Sebastian Krzyszkowiak * debian/changelog: [debian] update ticket number in changelog * TODO: another idea for TODO * debian/changelog, debian/compat, debian/control, debian/copyright, debian/docs, debian/menu, debian/rules, debian/source/format, debian/watch: bring debian packaging data back * debian/changelog, debian/compat, debian/control, debian/copyright, debian/docs, debian/menu, debian/rules, debian/source/format, debian/watch: This is Kamerka 0.8 * ChangeLog, po/kamerka.pot, po/kamerka_cs.po, po/kamerka_es.po, po/kamerka_pl.po, po/kamerka_sr.po, po/kamerka_sr@ijekavian.po, po/kamerka_sr@ijekavianlatin.po, po/kamerka_sr@latin.po: pre-release updates * TODO: update TODO 2011-07-14 Pavel Fric * po/kamerka_cs.po: update czech translation 2011-07-13 Sebastian Krzyszkowiak * src/capturethread.cpp, src/mainwindow.cpp, src/videowidget.cpp: clean up includes 2011-07-13 Mladen Pejaković * po/kamerka_sr.po, po/kamerka_sr@ijekavian.po, po/kamerka_sr@ijekavianlatin.po, po/kamerka_sr@latin.po: update serbian translations 2011-07-13 Sebastian Krzyszkowiak * debian/control: [debian] update control file 2011-07-13 Daniel Halens Rodríguez * po/kamerka_es.po: update spanish translation 2011-07-13 Sebastian Krzyszkowiak * debian/control: [debian] change dependences to be less demanding * src/mainwindow.cpp: use xdg-open instead of kde-open * data/kamerka.1, data/kamerka.desktop, src/main.cpp: Kamerka 0.8 RC1 (translations not included yet) * TODO, src/mainwindow.cpp, src/videowidget.cpp: respect configured photo directory * src/settingsdialog.cpp: write config on start to update photodir with XDG settings 2011-07-12 Sebastian Krzyszkowiak * po/kamerka.pot, po/kamerka_cs.po, po/kamerka_es.po, po/kamerka_pl.po, po/kamerka_sr.po, po/kamerka_sr@ijekavian.po, po/kamerka_sr@ijekavianlatin.po, po/kamerka_sr@latin.po: update polish translation and pot file * src/settingsdialog.cpp: [config] ask if user wants to create non-existent directory in storage settings * src/settingsdialog.cpp, src/settingsdialog.h: photo storage settings * src/capturethread.cpp, src/capturethread.h: fix uninitialized variable in capture thread leading to false reports on thread state 2011-07-03 Sebastian Krzyszkowiak * debian/control: change description in debian package * debian/compat, debian/control, debian/copyright: fex fixes for debian packaging * ChangeLog, src/settingsdialog.cpp, src/settingsdialog.h, tools/extract-messages.sh, tools/gitlog2changelog.py: fix license issues * TODO, po/kamerka.pot, po/kamerka_cs.po, po/kamerka_es.po, po/kamerka_pl.po, po/kamerka_sr.po, po/kamerka_sr@ijekavian.po, po/kamerka_sr@ijekavianlatin.po, po/kamerka_sr@latin.po: update polish translation * src/capturethread.cpp, src/mainwindow.cpp, src/videowidget.cpp: respect behavior configuration * src/capturethread.cpp, src/capturethread.h, src/kamerka.kcfg, src/mainwindow.cpp, src/mainwindow.h, src/settingsdialog.cpp: make video configuration fully working * src/kamerka.kcfg: update config descriptions * src/kamerka.kcfg, src/mainwindow.cpp, src/mainwindow.h, src/settingsdialog.cpp: Fix updating config dialog. Finally! 2011-07-02 Sebastian Krzyszkowiak * TODO: update TODO 2011-06-17 Sebastian Krzyszkowiak * src/mainwindow.cpp: use KConfigDialog::showDialog * src/main.cpp, src/mainwindow.cpp, src/mainwindow.h, src/settingsdialog.cpp, src/settingsdialog.h: show camera settings when opening v4l device failed 2011-06-14 Sebastian Krzyszkowiak * src/CMakeLists.txt, src/kamerka.kcfg, src/kamerka.kcfgc, src/mainwindow.cpp, src/settings.kcfgc, src/settingsdialog.cpp: various tries ;x * src/mainwindow.cpp, src/settingsdialog.cpp, src/settingsdialog.h: move attaching settings dialog back to MainWindow class * src/CMakeLists.txt, src/KamerkaSettings.kcfg, src/KamerkaSettings.kcfgc, src/kamerka.kcfg, src/kamerka.kcfgc, src/mainwindow.cpp, src/settingsdialog.cpp, src/settingsdialog.h: move settings dialog to its own class * src/mainwindow.cpp: fix layout errors with configuration dialog 2011-06-13 Sebastian Krzyszkowiak * po/kamerka.pot, po/kamerka_cs.po, po/kamerka_es.po, po/kamerka_pl.po, po/kamerka_sr.po, po/kamerka_sr@ijekavian.po, po/kamerka_sr@ijekavianlatin.po, po/kamerka_sr@latin.po: update pot file and polish translation * src/CMakeLists.txt, src/KamerkaSettings.kcfg, src/KamerkaSettings.kcfgc, src/mainwindow.cpp: add not working yet configuration draft 2011-06-11 Daniel Halens * AUTHORS, po/kamerka_es.po: add es translation 2011-06-10 Sebastian Krzyszkowiak * TODO: TODO++ 2011-06-09 Sebastian Krzyszkowiak * src/mainwindow.cpp: add drop shadow effect to configuration window * TODO: update TODO * src/kamerka.qml, src/mainwindow.cpp, src/mainwindow.h: implement dummy config dialog * src/kamerka.qml: toolbar animation fix * src/Button.qml, src/kamerka.qml: fix for "jumping" color when hiding toolbar at "less" state * src/kamerka.qml: cosmetics in qml file 2011-06-08 Sebastian Krzyszkowiak * src/kamerka.qml, src/mainwindow.cpp, src/mainwindow.h: implement canvas background * src/kamerka.qml: rework toolbar, add configuration button (non-working yet) * src/Button.qml: change text on button with opacity animation * src/capturethread.cpp, src/mainwindow.cpp, src/videowidget.cpp: clean imports * src/CMakeLists.txt, src/kamerka.qml: add QML files to CMakeLists, so they are listed in IDE as part of project * src/mainwindow.cpp, src/videowidget.cpp: use mkpath instead of mkdir * data/kamerka.notifyrc, src/capturethread.cpp, src/mainwindow.cpp, src/videowidget.cpp, src/videowidget.h: merge Notify and KNotification class (and fix debug messages) * src/capturethread.cpp, src/mainwindow.cpp, src/videowidget.cpp: more cosmetics * po/kamerka.pot, po/kamerka_cs.po, po/kamerka_pl.po, po/kamerka_sr.po, po/kamerka_sr@ijekavian.po, po/kamerka_sr@ijekavianlatin.po, po/kamerka_sr@latin.po, src/mainwindow.cpp, tools/extract-messages.sh: extract i18n data from QML in proper way * src/mainwindow.cpp, src/videowidget.cpp: fix closing app on startup errors * src/capturethread.cpp, src/main.cpp, src/videowidget.cpp: cosmetics in formatting * ChangeLog, NEWS, debian/rules, debian/watch, tools/gitlog2changelog.py: little fixes for correct Debian packaging * src/mainwindow.cpp: be more consistent on QRC URLs * src/kamerka.qrc, src/main.cpp, src/mainwindow.cpp, src/videowidget.cpp: reorganize qrc * TODO: TODO++ * src/mainwindow.cpp: remove unnecessary setWindowTitle * TODO, src/main.cpp, src/mainwindow.cpp, src/mainwindow.h: fix crash on closing main window * src/capturethread.cpp, src/capturethread.h, src/kamerka.qml, src/main.cpp, src/mainwindow.cpp, src/mainwindow.h, src/videowidget.cpp, src/videowidget.h: cleanup, add comments etc. 2011-06-08 Mladen Pejaković * data/kamerka.desktop, po/kamerka_sr.po, po/kamerka_sr@ijekavian.po, po/kamerka_sr@ijekavianlatin.po, po/kamerka_sr@latin.po: add serbian translation 2011-06-08 Sebastian Krzyszkowiak * src/mainwindow.cpp, src/videowidget.cpp: fix using XDG PICTURES dir 2011-06-07 Sebastian Krzyszkowiak * TODO, src/capturethread.cpp, src/capturethread.h, src/main.cpp, src/mainwindow.cpp, src/mainwindow.h, src/videowidget.cpp, src/videowidget.h: rework threading (capturethread) * po/kamerka.pot, po/kamerka_pl.po: update pot file and polish translation * TODO, src/mainwindow.cpp, src/mainwindow.h: display error when QML interface couldn't be loaded * src/Button.qml, src/capturethread.cpp, src/capturethread.h, src/kamerka.qml, src/main.cpp, src/mainwindow.cpp, src/mainwindow.h, src/videowidget.cpp, src/videowidget.h: fix FSF address and other licensing issues * TODO: TODO++ * src/Button.qml, src/kamerka.qml: fix running with Qt 4.7.0 2011-06-06 Sebastian Krzyszkowiak * data/kamerka.1: give more love to manpage * NEWS, po/extract-messages.sh, tools/extract-messages.sh, tools/gitlog2changelog.py: add gitlog2changelog script (also, add "tools" folder for such usefull scripts) * data/kamerka.1: remove unnecessary line from manpage with KDE and Qt version used on author's PC :] * data/kamerka.1, data/kamerka.desktop, src/main.cpp: bump version number to testing 0.7 Odd minor numbers are testing, even are stable :) * src/videowidget.cpp: debug-- * TODO, src/mainwindow.cpp, src/videowidget.cpp: if possible, use XDG Pictures directory * po/kamerka.pot, po/kamerka_cs.po, po/kamerka_pl.po, src/videowidget.cpp: fix in wording (was stored -> has been stored) * po/extract-messages.sh, po/kamerka.pot, po/kamerka_cs.po, po/kamerka_pl.po: little fix to extract-messages.sh * AUTHORS: add translators to AUTHORS file * TODO, src/mainwindow.cpp: create directory if it does not exist when pressing "Show directory" * TODO: TODO++ * INSTALL: remove unneccessary coma 2011-06-06 Pavel Fric * po/kamerka_cs.po: add czech translation 2011-06-06 Sebastian Krzyszkowiak * INSTALL: add INSTALL file * TODO: KISS 2011-06-05 Sebastian Krzyszkowiak * CMakeLists.txt, modules/FindLibV4LConvert.cmake, src/CMakeLists.txt: use cmake macro to find libv4lconvert * TODO, src/CMakeLists.txt: link to Phonon from KDE, not Qt one * TODO: and once again * TODO: moar TODO++ * TODO: TODO++ 2011-06-04 Sebastian Krzyszkowiak * data/kamerka.1, data/kamerka.desktop, debian/changelog, src/main.cpp: release 0.6 * src/mainwindow.cpp, src/videowidget.cpp: fix sounds * TODO, data/kamerka.1: add info about config file to manual page * TODO, src/capturethread.cpp, src/capturethread.h, src/videowidget.cpp, src/videowidget.h: make device node and resolution configurable * src/capturethread.cpp, src/capturethread.h, src/main.cpp, src/mainwindow.cpp, src/mainwindow.h, src/videowidget.cpp, src/videowidget.h: unify style of #include declarations * data/kamerka.desktop: add polish translation to .desktop file * TODO, src/capturethread.cpp, src/main.cpp, src/mainwindow.cpp, src/mainwindow.h, src/videowidget.cpp: use KDE classes * src/kamerka.qrc, src/mainwindow.cpp: fix ReferenceError in QML * TODO, debian/changelog: first preparations for 0.6 release * debian/changelog, debian/compat, debian/control, debian/copyright, debian/docs, debian/menu, debian/rules, debian/source/format, debian/watch: add debian directory * CMakeLists.txt, data/CMakeLists.txt, data/kamerka.1: install manual * src/capturethread.cpp, src/capturethread.h, src/main.cpp, src/mainwindow.cpp, src/mainwindow.h, src/videowidget.cpp, src/videowidget.h: better wording on GPL2+ license in code * README: README: typo * Button.qml, CMakeLists.txt, camera_click.ogg, capturethread.cpp, capturethread.h, data/CMakeLists.txt, data/camera_click.ogg, data/kamerka.desktop, data/kamerka.notifyrc, data/kamerka.png, data/timer.ogg, extract-messages.sh, kamerka.desktop, kamerka.notifyrc, kamerka.png, kamerka.pot, kamerka.qml, kamerka.qrc, main.cpp, mainwindow.cpp, mainwindow.h, po/extract-messages.sh, po/kamerka.pot, po/kamerka_pl.po, src/Button.qml, src/CMakeLists.txt, src/capturethread.cpp, src/capturethread.h, src/kamerka.qml, src/kamerka.qrc, src/main.cpp, src/mainwindow.cpp, src/mainwindow.h, src/videowidget.cpp, src/videowidget.h, timer.ogg, videowidget.cpp, videowidget.h: reorganize source directories * CMakeLists.txt: fix installing files to app data dir * capturethread.cpp, videowidget.cpp: cosmetics * Button.qml: make inactive button less transculent 2011-06-03 Sebastian Krzyszkowiak * CMakeLists.txt, TODO, kamerka.desktop, mainwindow.cpp, videowidget.cpp: make "make install" working * kamerka.pot, mainwindow.cpp, po/kamerka.pot, po/kamerka_pl.po: update translations with QML strings (dirty hack :() * po/kamerka_pl.po: add polish translation * CMakeLists.txt, extract-messages.sh, po/CMakeLists.txt, po/kamerka.pot: teach cmake how to compile translations * CMakeLists.txt, TODO, kamerka.qml, main.cpp, mainwindow.cpp, mainwindow.h, videowidget.cpp: add i18n support * mainwindow.cpp, timer.ogg, timer_beep.ogg, timer_go.ogg: better timer sounds 2011-06-02 Sebastian Krzyszkowiak * TODO, mainwindow.cpp, timer_beep.ogg, timer_go.ogg, videowidget.cpp: Replace beep calls with Phonon and audio files 2011-06-01 Sebastian Krzyszkowiak * TODO: TODO++ 2011-05-31 Sebastian Krzyszkowiak * capturethread.h, mainwindow.h, videowidget.h: add licence information to headers * README, TODO: add README * AUTHORS, COPYING, capturethread.cpp, main.cpp, mainwindow.cpp, videowidget.cpp: add AUTHORS and licencing informations * mainwindow.cpp: delete only phonon instance instead of whole viewer widget dirty hack, but with current threading - necessary to avoid running crash handler on every exit :( * mainwindow.cpp: try turning camera on earlier * TODO: TODO++ * mainwindow.cpp, videowidget.cpp: replace system() calls with QProcess * mainwindow.cpp: delete videoViewer before all exit(0) calls This exit() madness has to be fixed :( * TODO, mainwindow.cpp, videowidget.cpp, videowidget.h: move deleting phonon object to videowidget destructor and call it on closing app * CMakeLists.txt, camera_click.ogg, kamerka.wav, mainwindow.cpp, videowidget.cpp, videowidget.h: replace aplay call with phonon and use ogg file instead of wav * TODO, videowidget.cpp: replace mkdir system call and pwd functions with Qt methods * .gitignore: add QT Creator config file to .gitignore * kamerka.qml: cosmetics in qml file * TODO, main.cpp, videowidget.cpp: mkdir on taking photo instead of on app start 2011-05-31 user * TODO, main.cpp, videowidget.cpp: mkdir on taking photo instead of on app start 2011-05-30 Sebastian Krzyszkowiak * TODO: TODO++ * TODO: TODO++ * CMakeLists.txt: -Wall * TODO, videowidget.cpp: update TODO * CMakeLists.txt, capturethread.cpp, videowidget.cpp: Remove -fexceptions * TODO, capturethread.cpp, capturethread.h, mainwindow.cpp, mainwindow.h, videowidget.cpp, videowidget.h: clean up imports * TODO: add TODO file * videowidget.cpp: replace iostreams with QFile when dealing with .counter file * capturethread.cpp: make framerate higher (it should be configurable!) 2011-05-29 Sebastian Krzyszkowiak * kamerka.qml, mainwindow.cpp: add drop shadow to photo preview * main.cpp: require raster graphics system * capturethread.cpp, mainwindow.cpp, mainwindow.h, videowidget.cpp, videowidget.h: little clean up * CMakeLists.txt: cosmetic changes in cmake build system * Button.qml, CMakeLists.txt, capturethread.cpp, capturethread.h, image72.png, kamerka.desktop, kamerka.notifyrc, kamerka.png, kamerka.pro, kamerka.qml, kamerka.qrc, kamerka.wav, main.cpp, mainwindow.cpp, mainwindow.h, modules/FindLibAvCodec.cmake, modules/FindLibAvFormat.cmake, modules/FindLibAvUtil.cmake, modules/FindLibV4L2.cmake, videowidget.cpp, videowidget.h: cmake based build, integrate with old 0.1 code 2011-05-28 Sebastian Krzyszkowiak * image72.png, kamerka.pro, main.cpp: Fix loading QML interface * kamerka.pro, kamerka.qml, kamerka.qrc, main.cpp: Proof-of-concept interface kamerka-0.8.1/INSTALL0000644000175000017500000000032711613007262012320 0ustar dosdosKamerka uses CMake build system. It is recommended to build in another directory than source - for instance, in "build" subdirectory. To build: mkdir build cd build cmake .. make To install: (sudo) make install kamerka-0.8.1/COPYING0000644000175000017500000004325511613007262012331 0ustar dosdos GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. kamerka-0.8.1/AUTHORS0000644000175000017500000000077211613007262012343 0ustar dosdos* Sebastian Krzyszkowiak Main tester: * Agata Kurczewska v4l handling code was based on qtv4lcapture code from Özkan Pakdil http://qtv4lcapture.sourceforge.net/ Translations: * Czech: Pavel Fric * German: Frank Schäfer * Polish: Sebastian Krzyszkowiak * Serbian: Mladen Pejaković * Spanish: Daniel Halens kamerka-0.8.1/CMakeLists.txt0000644000175000017500000000074711613007262014035 0ustar dosdoscmake_minimum_required(VERSION 2.8) project (kamerka) SET(CMAKE_CXX_FLAGS "-Wall") SET(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/modules) find_package(Qt4 REQUIRED) find_package(KDE4 REQUIRED) include(KDE4Defaults) include_directories(${KDE4_INCLUDES}) find_package(LibV4L2 REQUIRED) include_directories(${LIBV2L2_INCLUDE_DIR}) find_package(LibV4LConvert REQUIRED) include_directories(${LIBV2LCONVERT_INCLUDE_DIR}) add_subdirectory(src) add_subdirectory(po) add_subdirectory(data) kamerka-0.8.1/data/0000755000175000017500000000000011613007262012176 5ustar dosdoskamerka-0.8.1/data/kamerka.png0000644000175000017500000001153411613007262014323 0ustar dosdosPNG  IHDR@@iqsBIT|d pHYsu85tEXtSoftwarewww.inkscape.org<IDATx՛ ǟ 3}IIpd;ڨSνun\-[uuB\ -J\MŖ}1=9ϼs~>o=s1n喸 .w}??G 9|qUTcǎzׅʕK._| *Ė)S8p/yGNKK;Zju>}jժٲe˘֭[%K%Jp?w_~e?p ))x㍽ nQbbM7Ty.!!h$\NNNk?7sL4dիHcRѣ'J%q_Q$]$ Sdee[x_^zilv۵k>vZҥ]zz:9?ؽ+{;|ʕ;)w}w۷o;*ԩS'$shJJKMMI۳g{'^W!W`MVt֭$< 㧼9R Yr$>3f̘Ij<ݻw}ݗB㼼B3`V($9󉋋sZr:/g6mT{S ̼;t萓bmDJ*NHNNp o3Omb?3S@D_|:tС @\`Bƍ݂ uFT( 0a~K*5pl01ys9j=bw7O?4 %R믿5kլYOG< kaÆ) ݚtPJޟ/S{8 H믿vZ$ ~c =H}'nر#[;^ve^еTR(;m-2M|7ɓ r&M8NwL4qw'4'M?>ځFp k rQNN?(KE6~ǎk`*\@ᰅL*C q|-wr?#jv1 ҥK! >|tsCde%uA ]t]xiApgyٳQ{$\[n[jٳS =z0aBPEH|h>3"Յa.}:lT\5wY,_d 3mÏ?c\uU0i&T %cK/Q 8νhMM@FeQ5~\}偍3X\1<8FXHT' ޗa(#ovxv0a/{:q|Ƈ޽;sSk1$rfIlv RӨ(ev G0& Ӱ5kXw~Č̀#0G֏&Ub y ~aSPĜ38:P M(`0h ӎ/ɤE4,)ٹUr62wh/tA-0q|l0l}zpx2ь/ ^&ᰈϨ")b>[7)ի;5*p#2׺dWjBABtM ^ &{we.F|HRM2f`>[j,j!0Y`eb%ů .Nz<$! 3o aTh$#RJ0g5;@q͆gԐ 4+p6l`A0&@(LiϙȐE86,7nHXC)saF C:H3H\\zk-;k@=C0BG`-ܿ>X^q{o^|@L$B[7nҥ{뭷cTx?AvZL_`}` >3ŵ ]֫1> dRjJMX^z!6M$@r, uuN;7nȑW_}SW9p6,Hk;MFCp3E-[~H[ j@6t5̚;w^`BHoo`~@ӦM#P@a%bw##CdY/1ǃ 8?A2h[i~ߘfX݀vY!Mۑ6@"3[Z6l:3XiL]f15mkh;{%Ѭ贷"d!S1{# BBv42mK w2vvvk$v> ϖ"*~eh=e+0Ym܏Vpt٢ L qL h`*Y2=?]#`9zIVeE9uК̙Ur- < $h[i>0j2,x)p~L#igO4pS \@8nsC>~ykph_S =L!}w6 @I}9sZ")@H;a`&̼I=\Y4 Cަv`ݟ- J 4Q}לdaЏ-6aF@U#(. R}t0 HES-~´`Q̀adFQFĞg!YO6$[t9}PD͛7QB#- 6gjF u=[[0I/8d?iʥ _+if-iB %n`~D1ĆiӴ/H Rl|VV8R=$`;`+08&зoxcIo|"I=0o@rj1##X51=:$ S걢6"'⛃Z_~`+* V(7z>~]G&'bj>S[90V G>j(fNTWhBNVab4HIexhܣr\SxS$i$CpL`ਫ਼"_H ڗ= uʱ3aN;+DT(CEx9zq+P8$}A)j-UEdɒmj/T!*QؠArcƌG9çLS1*<mEwM"km %$.|w''DYm9_xWmey缋w&@L}L򪴫֙lM[b)1&_#Mi`NBnK3Y=s=)C{( "'[VX;,0P{Ĝ֦K_K u$gXmr1ΗN@󳎨#h#QW{1BvVۣIjP00)-:(Z/AdX8˒5WSP殁1`9 Ô>B cɮ~s_IENDB`kamerka-0.8.1/data/camera_click.ogg0000644000175000017500000007253211613007262015302 0ustar dosdosOggSP/vorbisDOggSPPE =qvorbis-Xiph.Org libVorbis I 20101101 (Schaufenugget)vorbis+BCV1L ŀАU`$)fI)(yHI)0c1c1c 4d( Ij9g'r9iN8 Q9 &cnkn)% Y@H!RH!b!b!r!r * 2 L2餓N:騣:(B -JL1Vc]|s9s9s BCV BdB!R)r 2ȀАU GI˱$O,Q53ESTMUUUUu]Wvevuv}Y[}Y[؅]aaaa}}} 4d #9)"9d ")Ifjihm˲,˲ iiiiiiifYeYeYeYeYeYeYeYeYeYeYeYeY@h*@@qq$ER$r, Y@R,r4Gs4s6pR4XhJ 01Ƙr9s9H) tNJ)=Bz!B))C(!R뱆N:k!Zj2(R=PRj){K%ZkK*)z9RL-``'EcbC BH)RJ)c1c1c1c1 V+j'tfdȥTD#5b%ء`!+2Q5^+bj, AAe($)XSȔRY%tL)F)BƔc)tZ=TJ @P` CpK(0(I @"3D"b1HL`q!246..tqׁ P@N7<':xH6hf8:<>@BDFHJLNPRT> "9@@OggSP(uszxuDs{mrHvxsEtuzyIH?ADEsylttqssgqR5|^Nj>Eo;zO$&$03u^קO>}ECwf 9a KXtta KXt?w`ta x<8HZGȰ%,r\.W?\0%,a KX¢xW?].rE].511@9x<8RMrx |Tdv(X!+ء` ૈ,D';4;R\mLĔP8%f"E( aQU48fc\uD ,&a^3T^/'1T^OKc|6̐ f!㺘#0ipF#"Tà;8$^ !n!)Mj{CBS$ +)_Hp1W.E<3DYo@h4wH?lݮ* bvU)Z"+ $K: „!# i\$ A<[wDi4ٮtul`:JX[^ 4UfPVui1 \NF0|`8mTaPx8Vñe:33f ) B ? 3x$,x}X#P >æO= ᮓ`s!uRPlNT:R)3"8-H^ \.=cd(E]d?:(&:j\L!i}jg I UdEEb8͜2&( $ ,A”8@yH";LX SN VӴ5L{[ UJWMPCuLI`wSro2++ Y)Ռ 3s- f$@$`@\E(!DDhBr1L+Ktp202upbVҰ x9&:Fgԛ&d. !$/2BEr:N@PCޥיȆ :1Ѕq9wL`W6zDvpЄ6GhΡ׳J`}F?E&j"!.Z"C 0$iTD1vf cpf c'+̪"2 YBE܎aѮK8Μ18K ! $1M",e8r8\9^y%k !?u\$E(AƄ4aO<&9Ʉ1 C=0 09#t3c 8Hf!!J@ `Kp1:ryL}w\|'a" ƢL^|yu (#@l=FAo1:V55(b]Ƅg퍥@ F 1::~7h0XЌ~c"j:%L(@bF :Z жr `Mc&VOggS?PT-E!DIEwvyFAqsyxvmKAEovs`^WgxABtvYlXxR:H`zZd $3c` S }<40C="$Ɗ<ݮŠSnbPAGMDdbfLPGXExG]Da>rD]DTa4<0@zڕaHuJʜe9$ÊK"B j:ő88i^D0l2l `kggnmM_^LJO"# \veT\~;QXrb*u.%DQ\tr  .NAD"Α#G8:pacΪXL'P[ȁ1qV;Gp|s&tv uyX߅Mcv( eXSGl`+<$!!JADT(8bBD .& B4]N T8b4|xrd^áCaaдW{1MF1 b <^YFl^f(pjkYeIcB@`!ap1"H:Ow1\H"\jz]3T^OKAzZB*H A§IA;ջzp]>]!gAP=Tvb+ rj KX9.}FQ&JQsH@..AD)JD"D0:2{%P,fް`k:4ȑ:1ml8L6*b '03LGlvcj P,,T5)e" b 4 EDE!J "*u`c:fbq:Q؋`o0m aZpBWQ;q̾gbJpCZ =]e!MäjC!B#C &&N4  i(%&Dh1BCcq`Ձ'l0LLډ ؙbq[/K-Pya 0?H3\/8nG C z ZQA<^( i.'k5Eu")mf d6 D DX//!f0't; A"0\vQ p_W]!&TQTWh3N6 B(DD!*JJL\&b"B("!d-* 0Łői#X9!jLJ3~9wtQI{#wQI{#"ȈPwd&'k! bIB%.@,NBq!DE(Q™ńBQ"*"*6дGULlői##t-_EZv-_EZʊL; 1tjYБ` PqQBb!XHBHJT 8p)Hau`8 p Jx"98@FְZ"%@;h4Pba"H:FI]V]& nG3NѠO7b?@mсPG=>u.PbjY1؊th ЈF 5 9#F&ܖn3+X FB1q0'!B"PBq@L(LEr|H&WH `x"ULT0NG%&G8^sW9H^B&3Gc`fq@6D#FR=L2y1\PC X43Ma\ y =-NaP8 ^o"@]]]:F'B sLuRJ@`@$x d [D7xlD&6a et[~'.g@X  y>9 F1;iЩt8IX$#EB-(CM((%J *(0-Ba)XLj!ؙbA8̑9y|dbW`pĉnAmC+I=hp%tcf"ZJ^YvppwWS,CE%r69}7Ep$$66d,,!-*.,d%&)M{'&Vau]뚁$$p]1驙9%p7 pe2#IcfxaUV1M\aSC3|zj@)qb\Nhat\H!Xx"NH :qYd02`u:@)̈́^#9 !hƄ"ݎhDBkFk-Ĺ6:Fw3F]>(bB@4 #vh0 A˘`Sft@NAp礹SSxJ4}Hӏs`ȚGf@yYWfXG@iHg(cH.>L&X@v;h!1nh8A4vY9$nΈY!$1,GТ> > I5ᰍО6OggS@gP㶑BDBFuzwzxIDvzqvnlum|q4CzŦ[9#ID ([y%2Ic$ 3}d'#u8f@.E^?7&~at)„zgT>HuA,=}FĤۆ~=M-t54Q0qft"'CiZGш=FG 0FnC bU1?a(àz 0$KVL7|OYe2"+BTPbE&ʅYdL AD$![ RZLS$Ay)OQ 55$d2sV3^G&$ydfA Nbʧ5Wf8\+u sq2$3 Lp=& d&sp1 sppeWH"w}(0̃ i08^9Hd=oat4T_PaB<^1b30D#MAd]ʊ21ee -+r@9iH@-CCqu$z2!b0< 执KAЪ\#'BT!)hw KEKZHPð_v#×5<{I1D:PŜ6>*AtU'Dv&UrYT(äJE5RYVfI5L+NC0K@2 b(CӁwVL {[{Ǭ`:4x1ŁцL?akg5S1_2|H|D čm%0/jYRJp8B,1h!"&ll-:XU [C ޑa1ml-E1ÊZM{IÁbE퓚E" p"G p"G,2j(˲̌TYQCsUH$IbI3I b0K8U۪iU;q(بc ẮO@H28 yex=cd$@<^3 c(ae<1!pC)u\s\WEf^yqr$ :e1P8dt29r$M9&I3+KOiXCE' _\\y+0sPE)cWa2(("Ap"xncCk N NݾQ=c:Ƙh!tBthNMLp&"\ $#<(muB& i8:D?۳ qFL}*dms7|phNj9j8.1Kb4L",*FPP@XM;Q5bt}03O| q \9p\7P0]&7z'ՙb:4T1| !̻x>19<!3"Px0^H:'t#Ꝡ acHLSm58#@=u:@F3R c0D.0kaxqFiFD( ]I`h(tL)C8DR/cUAB8u M#BOL Hp@Mat;Z`tc ў\{u -O4Mlɸw1@1u@wX)&]].IRd2(DAh1 h1( fD(*N D!baڊFM!VlE bӁazL:2 9a8y1dO{1I1pdW.cPhBCZ!wQs]Gxqu\}H`@ B#3:r0a&kdf#CF#LK`N F`#yqjJM$=|3 DŽbw:cRP(~'DM3Z좣c&8@O=)B1Qw2bMMB=A -@sC#|>\z֌V´Z4~@hE E("`].K,&IaIf !$@ "E(Dhaq4@Q\c2L丮$<.B2+W>z$ypp@z 30W2dׇc..19!qMb! IMD(w0r @H{ #(t Ă+y}xBʐ6Q ?;'CdP'趉 tFO"tztOA>]dCD!A=RF1Մ8~?L[׈ :NAS ][<{! 1b@xa^ߏmR_^b똰&zP=u6Ű &!n ٚ a(haqb*bb~_*iBc7wit8kIr혝;I%mE/fL@8b4S4D)- BRpdk㘽CbV7l lSbz=^yJ2Oבq W.DOhd>\fraZ`9r:ℱ@C#:pq 5C50"PNH0FO9u2tQ atSj u+]0a2C$C\z1 0f0©! 3ÕF4!H8`@PM Iawtt> nh&0mkxo%6 囮hIgqb3NCLl2^;{,\; c$K&Z@B BZ("%J DZZN69֡㨭ʁX("Gk@ a`tY` W13yÑX0.̑ /k  ׼f:!fzFF :DpCZ !1CF*x]0-@ߝ@X@ z0&BO (etyo OcL"2#qˆB ` '`tzcSw¹zba czW #ĺFb}mo41Fk-M <N q h+o#6kkb4&nh,'d0tBW CΈv\*(2$@HQZ\Ei1ZD H9 A@,"Z(avjQAqq\s155q%\C]NB-2 0\E0:"wq 3׋c C5:FFBS#`g@w0bf1,4.+@t{1 3@!:7BdnN) '@ 2F>"`l#=Ƙ@8zh͗Ħi1+EY-DQ;"(Q;"(wLXYdrXLKqQqEӄЄi10B<(  YTЮ&ɕ2v=Rw W+ ǼrGB0ו!\&#9ɀRc^39x0+3DŽ+:•'ȡ:!.0 .;#9)1" B>„| @ )3Rma ep>:x}d'@nA$a Mxʙ [&xxoDA"лg C! m#ޞmLLcB#[ a1tnڇo Uc&F#h @a>n;'N%!&f$&Y\ Qe E@Q񊲘PLL@bNEm[{G4vbƥ e$:IY  0ԡ08au=#A"5Z? ќ7B3{0bP+8$Ӟ;qI8K B Y(hM$(b"Bb@!"`QPiX>$5!T ~~A.jA,F&tPcއ{'9Q@BAØP}2x&ո;!z:bB~ 4Q?TF c"R2:b?F!>_@a z1H@G*ZpuLcLh+ =F!RNFGhM7 I D2zjo=,fN3(&c$D)0L -.& 8aE!*B[VF6Y lk$)drp$1 Gf\W25aF-Z$421a7y 9Rjh iI29GZxp`嘁#3CzcpdFՅuBu:ViD `QdFȄ6 *'4g0D@!6'}m,ԩNg 7@Υ0GNB"``ut GAz7 D2c ԪR"vHS!n7DqC[Z k K;1ZGFOggS@Psdyihv>t-bcA" ( $ij8Ō$ NZ\(.cQYRBJ԰ud:b2|a>s=0:20:d#C2̕y0s"21e GEf8zJt0B,`^3 BzG:'# < #^&r20. ! pdD3,޷кcD5tQB' Cw#5]ysk:`6h:߄ؑ;B 810:@h& zJ!0tFZ7ZQBN'#tmLh) Btɀ`р@|]A (?RnrL{.tWCE&E&PLL)1qZLbb,&&F++rJ@hRxˢ8dK,]ÐT0uMr̄0d&pǼu# C R0+r8$F@*8GәL" ,82%C-`_\NS3E8t`(T?L#D0Ըx +Hz\2:i,zgXF"4NIGj3!x'` zlCcd>3z8BP0>| ^zeKԺƢ'a,"yCگJz`x0"ȕ\;ބhmW$19>n7N.oYkhTMcmdZ9+;Ė[w+˨Z8b;jϒ=O*gt}2|W-@g#^xB~_0T~H{U{MRf8"YmեO&]J{1j#Z_R-ޗIgs=(DsʶoL5Vor}8TSٱĜs'8#vJ7EE:0l`ߜs)'ʙ%ᴢxFFk}ZXQ?FδBY>X\ :8AF0~UPsƀAѺ#c3cK4k< r,yu7\NrEq}( N6wsKuhrP#]ΙZ[ hZBRR^/@Gjgw-O2/aRQׅgGR,6Z6'uy,a5{_f-֒Ț6;u9s@\~%t-oF>)7VSkr2dHnkX }Ngsԍ׬d_KGkH2:=Mq{9f{vzOg^ҷ_W?+B|1_kMTmP4+sb>j Xl%m>B-nSwg~2:]< ӁHd&ؤw1[1QY|='uOtmm r}9vxlNϯ<'|}I˚Mĉ$,8gH U{E6*k`󏘙;I#x{̃/ƯAn~&nnj<%[h]Zh:k&A7_7tFGOPN[Z X_$~{z`&^`f7=:.=v{ɘ 0gi>IagPQK»Jj{J l>s۝B?"rXB6s⤙gKO.i?ԴI|L.$g1 Z+~_<i;g,%-Lɐ1kݿ7y2>v}MCUgnKll9F|+݇E-sKj9Rš/;z+C:gOFswܵ= 6CͩX2>J~VK̏=d+8.Wsm'iB]#-4_Mo8Opk˟.Y(W~sz^*yv|jWkb75b&*ޚ~qn'b[3D [8a!>D,e֞Eҥls_j57_wXX?ײLډ4?K.lw[78]@bZg?3&yRtj'> g^)hrmoMl8$ ; Q!m˜z'sޝN3iywis+bgl :Ӝ˞k=`i,4?L4U='k˺%l?7tdIwtk~tZ<*%rtuuv.~%pDHkUs=b  {u/3t#w'8Xm?@z97>|Y/W]MǚK>'qf~^>YÄtm"_UrͤU.ּ57C1zM_S4I!!~`3WZ,H"9t|/Z}+6Wse ȟ:!܈k.I>@vٛcٻ|gRϷyбB#I:&9kWr:.T2; ?{˧̷^:qYdIw^O˳bCMGY-2Hgև?#{$Ioߗ$ލύ|y%(./~%tM<D,oZKh鴫0]GMbQ Eh1W_+"Oנφ+ /Lc$3Ek0n*قu}T{X;ގP~۞z~sf!`&BJ ?#;}@;Dv;w41?bwidrdg缻qa|]-vJZHKpc|v>~4{}!{LНb :\ ^Ofޢùw6'?};t}9󕂚o#}m=!1CwszLlcFl_wh[fP YE3JdېC۾-QJU4T >,~%<ӕp#!f`sW6@]'!,7P;`Qtg4ZRl9rU;Hnsg_Ns>ܜpsWڱX0c\3qf^Zgg$7wVlT(~aKs%$~(>bnW Ⱥ+b~2as%{D_OLk御}\懾$=v7dbeGqWIn3 3k/Q>:˝ÌY`r>ٍݦI0"gH3luq2K+jh%.Tֲ0;ޥ+&̣࣓fmSQ~oK9GWڠJ3>^|l*J,oVP~tt{&^=@tpU*Q xq̟A_ltnB0闹eQ $4/>rqea>;Xgg>{_E̞BfolMT]-Sym<|?8{tq5:@{ b1T? ɍlȓZ2'b$ћau?9̧]ԅY#l.4\~ǺϬ3O,4H;t noKEA^wdsaON"7]?F3q?{(DF{}=;/)m*x59[o3_t,f}ȚӉ Mgܶh̿N=sTD[  ~{:` ==/|0"n$Sww3 }1nRn/>=8[%b?8N^6~WAiJ ʹv.CHlhK]l G8)<2rd̘sM *{լb6*8G}9G}ú-?oހaH~p/ـK`\5“?,yY?Ϯ;w+\6o//9l>K.1rJ+ʥN5Vl~Wc~sc9QR~ j 3=5i1m&k)QegX_]` ?{=63rzf{3+Y{&9ɿ-hٟ4N,FhSyNee`yW*9><;bks{妃Oc׍'v~5_`jQ DXb1N+IL ހ'\>[N\V0xt} P>n`. @zry,w'+,w'Md@<.MN߿~xң vNn[ˀE\S,. [Gz$>bn@Q_~%\厎 $QkjԩS(((zw >:L2;N>"F<5:7OCf1u~p{M{׺>]6Y7`J: oi9>]§䶘;V0*ѫ0Oç6YO @}ٲyy>]XO0/P%>]6Yo?H 0ڿ>]§6_V+2AeZ^]ç>Yް_F [.0Mp>]§6YUB`T;d F>]2O)}1v`T#w $*ç6;T0*F]6 ;V0*@%ç6Y7`ge x,O)sun @U0> `]Xy'>]6;V0*@.*ػçXhF2:1T>]6YsQ=R$Y_m>]§X_F`3ےlT3Om8`|>]O)sa? @pPB%Μ>]Xs7G#0ޒR>]6;0*`Wb0}O&>]䶘;0*#d78ç6:`_>[. e)D. 6]10kZd(!Uw ?nߴ75Fw:T2N" nߌo޻; ['zEn?oG{1 %n>#pz-,Yˆ/jߞ^'@!Y>!Q ^vb>kg?L% a_R?y0M D<OK<l.3nnw16; ql1^F'6}7?ۖtŸ pܫZ֠HT30QYU?<}6ہLWR'~~9V?`C'{D#}VCQȯobkA~mb]SvSv_vs>jM^3wiύ`c|DKQ~3Om8`??#>]2O)}8aF 8z)J, p ^]6Yo @}0mO>]䶘 _ F`tʠ:+ >]6 ;T0* $]§X @Ӣ%>]2O)}a?F [@Ob>]2O)}]§X0}J,RG^]6Ye%0* ox >]§6YܰUQR؉3O)mkN @WP ^]3wsej iO\a2u Gb>h=rD& W)&E轢\֨P0 -ި3g{۳ڗԣ.XݴYN}tv_Q{TӮn,doL~7FI+Za>/>78zv>zv XHSmT7T)WxO;o.{Z]|\fu.{k2{jNw7%Jtn̞l|զK iv# th"ѿǻe:;9yOD,~Dsz!\0T?`͡.}1,r{]*~VV{ۭE9^ J>vOVIu˓|Puu9^/w+џI[yI*.Yd6kX*β=#jF'5yh'wO^]&MZdkݓhY\6훧Œєz0nzsNzA_}㊑gFy6L/-/[oNoț?.LI:P\Jr,av t\zz_eW=}U dl}p[cȝeewZ;Tk>]§6YOd "J/*>]§XܰC Yuo;^]6YI`T'M&u&7>]2O)}8a? x$*uhP>]§6Yhe%0*]à>]O)sp`X LB* >]6hE0*DT`rjB>]6 _ F`ߴ %Y/P>]§䶘_FY `IFVQ0^]6YUJ`T/B34 >]§XްU/$;jt3Om:`~U O`QdAp66]{}q<ωk/?wݻw`5@u_yA"enlo޻;yRVZi? nߔ+5Fwo&'5f nߌwMRŴrn _޻atG{'>O^Kjݥ)wWػ  ΜmpIdd.f\NUџ(E(QJz"3OggSR2!}|n>PEZ%&$&&&&%'&%%-JPTxTHHCBAGBIBAJCEGFEHGDFCIEHHEHDZ܁`"Lo%Yͻ}\Jލ+_U0R\Xl .]ü+SoVkd,y'[?unSڡ\ 0~+2f O9\zo/׫~|=}ӫr?~</ ǰݺQL*)ٶ\3~|!7ufS U7]nCt/lE(ggT|[s}Yxw,i1DmZƚZkv_u8q~^1O)4%OK!~맋]b'Jy*_sUw.ar5.^:rA*uLӑ)'ס=`AP$}}0.徫JAUBV AApn]4ݵ01^&>]§62`g:0*,0F3Om8`h%0B~v >]§6YoQ&9çXo >DĒU>]§6YVPB -i1V^]ç ;!`T?v:\-sOsaGɫ3H>]O)s2vC wON dak3Om8`FP?~`dC?>]§6YoQP L+0ç6Ys?c< ç6YF`ߴ`sO)skn @Ud1rL,;G V̬cY6]wIG98 @ 0yN{?xw߹-5# 3[n?#NydbRV?W1o>QS;WA_!t.6`B_l#(fwCse3ޝywSgi[h@_ؼ𿫮k3|invgvQoVk({|~;g߿V;?ٳgs2 ~"J`?»+Hԧ"@»wNޔ6d2IB!x 🁞^.+$?X&zrgۋ_^G-ODS6(PFE P ֗%^_ L%}Y$p@xGGF͜zSxP NT4`enmӵ?X+ bIGxeT3B:#nՓV:a_x> GgeP{Qb(NP(: +I*pr,GmmPр:;@u҇'<:걂Q@3<@Wm}m\1:Caszt H\2(ڀ|axGm;ۨfT1 `h']?a@ƸIyGm}mT{T1I'}( 4朻 _vPGmt˨Nb>P 3h~u{al|tW[-HWmV%Z+T'}#ujJ|@ PeWefQb@`T}@IDj+F\$-G淦3P*0SEH/Q"{.F CWdV> S뛄Nq:? 7_/>B[Ϗ>)t 6 Wm}mT1 `HUdg~j xl3G;KSCzbI8@Ш.6// ]0@%GF͚CQb4>Qmz5?^i% Z IGmVMMaj=tvJ褏> 5'}K?O|*`8GxeP3R̀`:Sh&v*v[J(,Gm˨f S@*@>P`2Wb=sL6%ho Wm@mfG%tI ǟ,PWZij|vCT p;X~4+g 6*TR 3}i;"wl&4U0"S*lHVWhG2+Kmo"xe:7-T::\[g_k{Lpmom_k{fsG21V:-Xõu&u7i4wMho2Mܣݿx{7osv&mnmñwXWmm+҆0bo(­nj:PJ18Y pOggSR2!#j"CGk### GG`GDGHEK##$$FHh$!%$!>SOWmdF%L*@P g[d-pu L (qGmV5 W; SE+Ҏ7_/.{تW ~G*Be,[u (@ S %PX9'ì˧7pE-ref([`g|p?U뒿{5;z$'5wQBA F  :?$NÔ xaz8q d ss}W=9};W%{]RUӑkk 6.Gl P;jrnUwfWDuvXvݾDu9 ZG`xyPSիW<X+Zg pUVe>=J!DKt+W&\ :;5xGmT˨fQb@`:TȻܳHqОWJd iW@efS@'`}`GmȖ5T1*Gkqkmk sD&-}CG@eP3j)T (h:S(goO]@'#o8GmTF9MbCQ9>-lw?Gme-)Lg8*SEk- ٵ@*'D!G)u[@y!֭Q]uouJ?](@j37HW9}~X|:==7{D"پ=U&XAtO(B#>B "j)58eBS;jS2=Q3jy3jOɨOI#tU딿8 g:wpJEQ(UӒ땽Aπz߭"`7 UӖ?8{I1s - KCHhUۜo]ù@j+P@* hUۙ;Ms8M!d6rpc;ښV+~s_}ÿB RӚ+(x7CvBEMͫ6ݯ=?Ϳ7w#F7*bCyu>(8(ֽVžӗ`E!k`\R `j]-mm/="l}qUrBW3h=L. :[@U뜿GsLGh{|J(_)Q홿 τ"݁xZs W'7 ,\g}MÑ? ښ;#qIJ 8dCR@Iے?/ kxOFb@(A%OI~Ga+Yޝ [v+@7gKPTMԅ`#k 'W'+W}9uٻտO>)?sgu!ۿ kcN(]zO]R؟M^?(?v^yt<._ߞ[jt~z)Y~z5n+qÊtyyG$IДRy|36?:pٷٳ3Siiu\ӧO./V/Pi>}bswFU͋Ot2K,KJiԴ=>m%%Ou]%䧧q/-Wi2===x=?ig ٍgB kamerka-0.8.1/data/kamerka.desktop0000644000175000017500000000225411613007262015207 0ustar dosdos[Desktop Entry] Type=Application Version=0.8.1 Name=Kamerka Name[sr]=Камерка Name[sr@ijekavian]=Камерка GenericName=Taking photos with the webcam GenericName[pl]=Robienie zdjęć kamerką internetową GenericName[sr]=Хватање фотографија са веб-камере GenericName[sr@ijekavian]=Хватање фотографија са веб-камере GenericName[sr@latin]=Hvatanje fotografija sa veb-kamere GenericName[sr@ijekavianlatin]=Hvatanje fotografija sa veb-kamere Exec=kamerka Comment=Fancy-looking animated application for taking photos from webcam Comment[pl]=Fajnie wyglądająca, animowana aplikacja do robienia zdjęć kamerką internetową Comment[sr]=Апликација лепог изгледа за хватање фотографија са веб-камере Comment[sr@ijekavian]=Апликација лијепог изгледа за хватање фотографија са веб-камере Comment[sr@latin]=Aplikacija lepog izgleda za hvatanje fotografija sa veb-kamere Comment[sr@ijekavianlatin]=Aplikacija lijepog izgleda za hvatanje fotografija sa veb-kamere Icon=camera-web Terminal=false Categories=Qt;KDE;AudioVideo;Video; kamerka-0.8.1/data/kamerka.10000644000175000017500000000256311613007262013701 0ustar dosdos.TH KAMERKA "1" "July 2011" "Kamerka version 0.8.1" "User Commands" .SH NAME Kamerka \- take photos using your webcam and shiny animated QML interface .SH SYNOPSIS .B kamerka [\fIQt-options\fR] [\fIKDE-options\fR] .SH DESCRIPTION Kamerka version 0.8.1 .PP Simple photo taking application with fancy animated interface .SS "Configuration options:" .PP You can use kamerkarc file (usually in ~/.kde/share/config directory) in order to set up device node for your webcam and resolution of video stream. Example file with default config: .IP [Video] node=/dev/video0 width=640 height=480 .PP If some option (or even whole file) is not present, then default values are used, as seen in example config above. You can access those settings from user interface too. .SS "Generic options:" .TP \fB\-\-help\fR Show help about options .TP \fB\-\-help\-qt\fR Show Qt specific options .TP \fB\-\-help\-kde\fR Show KDE specific options .TP \fB\-\-help\-all\fR Show all options .TP \fB\-\-author\fR Show author information .TP \fB\-v\fR, \fB\-\-version\fR Show version information .TP \fB\-\-license\fR Show license information .TP \fB\-\-\fR End of options .SH "SEE ALSO" The full documentation for .B Kamerka is maintained as a Texinfo manual. If the .B info and .B Kamerka programs are properly installed at your site, the command .IP .B info Kamerka .PP should give you access to the complete manual. kamerka-0.8.1/data/kamerka.notifyrc0000644000175000017500000000027011613007262015367 0ustar dosdos[Global] Comment=Kamerka IconName=camera-web [Event/photoTaken] Name=Photo Name[pl]=Zdjęcie Comment=New photo has been taken Comment[pl]=Zostało zrobione nowe zdjęcie Action=Popup kamerka-0.8.1/tools/0000755000175000017500000000000011613007262012425 5ustar dosdoskamerka-0.8.1/tools/gitlog2changelog.py0000755000175000017500000001141311613007262016221 0ustar dosdos#!/usr/bin/python ''' * Copyright (c) 2008 Marcus D. Hanwell * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. ''' import string, re, os # Execute git log with the desired command line options. fin = os.popen('git log --summary --stat --no-merges --date=short', 'r') # Create a ChangeLog file in the current directory. fout = open('../ChangeLog', 'w') # Set up the loop variables in order to locate the blocks we want authorFound = False dateFound = False messageFound = False filesFound = False message = "" messageNL = False files = "" prevAuthorLine = "" # The main part of the loop for line in fin: # The commit line marks the start of a new commit object. if string.find(line, 'commit') >= 0: # Start all over again... authorFound = False dateFound = False messageFound = False messageNL = False message = "" filesFound = False files = "" continue # Match the author line and extract the part we want elif re.match('Author:', line) >=0: authorList = re.split(': ', line, 1) author = authorList[1] author = author[0:len(author)-1] authorFound = True # Match the date line elif re.match('Date:', line) >= 0: dateList = re.split(': ', line, 1) date = dateList[1] date = date[0:len(date)-1] dateFound = True # The svn-id lines are ignored elif re.match(' git-svn-id:', line) >= 0: continue # The sign off line is ignored too elif re.search('Signed-off-by', line) >= 0: continue # Extract the actual commit message for this commit elif authorFound & dateFound & messageFound == False: # Find the commit message if we can if len(line) == 1: if messageNL: messageFound = True else: messageNL = True elif len(line) == 4: messageFound = True else: if len(message) == 0: message = message + line.strip() else: message = message + " " + line.strip() # If this line is hit all of the files have been stored for this commit elif re.search('files changed', line) >= 0: filesFound = True continue # Collect the files for this commit. FIXME: Still need to add +/- to files elif authorFound & dateFound & messageFound: fileList = re.split(' \| ', line, 2) if len(fileList) > 1: if len(files) > 0: files = files + ", " + fileList[0].strip() else: files = fileList[0].strip() # All of the parts of the commit have been found - write out the entry if authorFound & dateFound & messageFound & filesFound: # First the author line, only outputted if it is the first for that # author on this day authorLine = date + " " + author if len(prevAuthorLine) == 0: fout.write(authorLine + "\n") elif authorLine == prevAuthorLine: pass else: fout.write("\n" + authorLine + "\n") # Assemble the actual commit message line(s) and limit the line length # to 80 characters. commitLine = "* " + files + ": " + message i = 0 commit = "" while i < len(commitLine): if len(commitLine) < i + 78: commit = commit + "\n " + commitLine[i:len(commitLine)] break index = commitLine.rfind(' ', i, i+78) if index > i: commit = commit + "\n " + commitLine[i:index] i = index+1 else: commit = commit + "\n " + commitLine[i:78] i = i+79 # Write out the commit line fout.write(commit + "\n") #Now reset all the variables ready for a new commit block. authorFound = False dateFound = False messageFound = False messageNL = False message = "" filesFound = False files = "" prevAuthorLine = authorLine # Close the input and output lines now that we are finished. fin.close() fout.close() kamerka-0.8.1/tools/extract-messages.sh0000755000175000017500000000416211613007262016246 0ustar dosdos#!/bin/sh # Copyright (c) Sebastian Krzyszkowiak # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. BASEDIR=".." # root of translatable sources PROJECT="kamerka" # project name BUGADDR="dos@dosowisko.net" # MSGID-Bugs WDIR=`pwd` # working dir echo "Preparing additional data" cd ${BASEDIR} # additional string for KAboutData echo 'i18nc("NAME OF TRANSLATORS","Your names");' > ${WDIR}/rc.cpp echo 'i18nc("EMAIL OF TRANSLATORS","Your emails");' >> ${WDIR}/rc.cpp cd ${WDIR} echo "Done preparing additional data" echo "Extracting messages" cd ${BASEDIR} # we use simple sorting to make sure the lines do not jump around too much from system to system find . -name '*.cpp' -o -name '*.h' -o -name '*.c' -o -name '*.qml' | sort > ${WDIR}/infiles.list echo "rc.cpp" >> ${WDIR}/infiles.list cd ${WDIR} xgettext --from-code=UTF-8 -C -kde -ci18n -ki18n:1 -ki18nc:1c,2 -ki18np:1,2 -ki18ncp:1c,2,3 -ktr2i18n:1 \ -kI18N_NOOP:1 -kI18N_NOOP2:1c,2 -kaliasLocale -kki18n:1 -kki18nc:1c,2 -kki18np:1,2 -kki18ncp:1c,2,3 \ --msgid-bugs-address="${BUGADDR}" \ --files-from=infiles.list -D ${BASEDIR} -D ${WDIR} -o ../po/${PROJECT}.pot || { echo "error while calling xgettext. aborting."; exit 1; } echo "Done extracting messages" echo "Merging translations" cd ${BASEDIR} catalogs=`find . -name '*.po'` for cat in $catalogs; do echo $cat msgmerge -o $cat.new $cat po/${PROJECT}.pot mv $cat.new $cat done echo "Done merging translations" echo "Cleaning up" cd ${WDIR} rm infiles.list rm rc.cpp echo "Done"