diff options
37 files changed, 431 insertions, 756 deletions
diff --git a/client/Makefile.am b/client/Makefile.am index 803bf51..a89f214 100644 --- a/client/Makefile.am +++ b/client/Makefile.am @@ -15,11 +15,13 @@ miav_client_SOURCES = $(shell if [ $QT_CXXFLAGS ] ; then ../tools/MocList cc; f dv1394.cc \ dvfile.cc \ networksender.cc \ + historyframe.cc \ historywidget.cc \ info_gui.cc \ mainwindow.cc \ messagebox.cc \ player.cc \ + splashscreen.cc \ videowidget.cc \ yuv_draw.cc @@ -32,11 +34,13 @@ EXTRA_DIST = \ dv1394.h \ dvfile.h \ networksender.h \ + historyframe.h \ historywidget.h \ info_gui.h \ mainwindow.h \ messagebox.h \ player.h \ + splashscreen.h \ videowidget.h \ yuv_draw.h diff --git a/client/aboutwindow.h b/client/aboutwindow.h index 25fb6f0..a062302 100644 --- a/client/aboutwindow.h +++ b/client/aboutwindow.h @@ -41,7 +41,7 @@ Official homepage:\n\ http://www.aasimon.org/miav\n\ Author:\n\ Bent Bisballe (deva@aasimon.org)\n\ -Copyright (c) 2004" +Copyright (c) 2004-2006" #define GPL_LICENSE "\ This program is free software; you can\n\ diff --git a/client/cprlisten.cc b/client/cprlisten.cc index 4c1272e..035269a 100644 --- a/client/cprlisten.cc +++ b/client/cprlisten.cc @@ -56,13 +56,13 @@ void CPRListen::stop() socket.connect("localhost", port); socket.send_string(MAGIC_STOP_STRING); } catch(Network_error &e) { - gInfo::info->error("In stop(): %s.", e.error.c_str()); + MIaV::info->error("In stop(): %s.", e.error.c_str()); } } void CPRListen::thread_main() { - gInfo::info->log("Listening for CPRs."); + MIaV::info->log("Listening for CPRs."); while(running) { try { string newcpr; @@ -77,15 +77,15 @@ void CPRListen::thread_main() cprchanged = true; cpr = newcpr; mutex.unlock(); - gInfo::info->log("Got CPR: %s.", cpr.c_str()); + MIaV::info->log("Got CPR: %s.", cpr.c_str()); } } catch(Network_error &e) { - gInfo::info->error("In thread_main(): %s.", e.error.c_str()); + MIaV::info->error("In thread_main(): %s.", e.error.c_str()); running = false; } } - gInfo::info->log("Stopped listening for CPRs."); + MIaV::info->log("Stopped listening for CPRs."); } bool CPRListen::cprChanged() diff --git a/client/cprquerydialog.cc b/client/cprquerydialog.cc index 1461943..47224f0 100644 --- a/client/cprquerydialog.cc +++ b/client/cprquerydialog.cc @@ -52,9 +52,9 @@ CPRQueryDialog::CPRQueryDialog(QLabel *lcpr, statusbar = status; //Read configuration - CPR_HOST = config->readString("cpr_host"); - CPR_PORT = config->readInt("cpr_port"); - CPR_TIMEOUT = config->readInt("cpr_timeout"); + CPR_HOST = MIaV::config->readString("cpr_host"); + CPR_PORT = MIaV::config->readInt("cpr_port"); + CPR_TIMEOUT = MIaV::config->readInt("cpr_timeout"); cpr[0] = '\0'; internalCpr[0] = '\0'; @@ -116,7 +116,7 @@ CPRQueryDialog::CPRQueryDialog(QLabel *lcpr, this->move(175,150); - listen = new CPRListen(config->readInt("cprlisten_port")); + listen = new CPRListen(MIaV::config->readInt("cprlisten_port")); listen_timer = new QTimer(this); connect(listen_timer, SIGNAL(timeout()), SLOT(listen_timeout())); listen->run(); diff --git a/client/decoder.cc b/client/decoder.cc index f90e1dd..85661ca 100644 --- a/client/decoder.cc +++ b/client/decoder.cc @@ -37,6 +37,6 @@ Decoder::~Decoder() void Decoder::run() { - gInfo::info->info("The decoder thread is running."); + // MIaV::info->info("The decoder thread is running."); } diff --git a/client/dv1394.cc b/client/dv1394.cc index 611d815..ea32f7a 100644 --- a/client/dv1394.cc +++ b/client/dv1394.cc @@ -127,13 +127,13 @@ bool dv1394::connect() // Get handle to firewire channels handle = raw1394_new_handle(); if(!handle) { - gInfo::info->error("raw1394 - failed to get handle: %s.", strerror( errno ) ); + MIaV::info->error("raw1394 - failed to get handle: %s.", strerror( errno ) ); return false; } // how many adapters are hooked in? if((n_ports = raw1394_get_port_info(handle, pinf, 16)) < 0 ) { - gInfo::info->error("raw1394 - failed to get port info: %s.", strerror( errno ) ); + MIaV::info->error("raw1394 - failed to get port info: %s.", strerror( errno ) ); raw1394_destroy_handle(handle); handle = NULL; return false; @@ -141,7 +141,7 @@ bool dv1394::connect() // Tell raw1394 which host adapter to use if(raw1394_set_port(handle, port) < 0 ) { - gInfo::info->error("raw1394 - failed to set port: %s.", strerror( errno ) ); + MIaV::info->error("raw1394 - failed to set port: %s.", strerror( errno ) ); raw1394_destroy_handle(handle); handle = NULL; return false; diff --git a/client/dvfile.cc b/client/dvfile.cc index 8caecc0..2f13e5e 100644 --- a/client/dvfile.cc +++ b/client/dvfile.cc @@ -35,7 +35,7 @@ dvfile::dvfile() { fp = fopen(TEST_MOVIE, "r"); - if(!fp) gInfo::info->error("Couldn't open %s for reading.", TEST_MOVIE); + if(!fp) MIaV::info->error("Couldn't open %s for reading.", TEST_MOVIE); } dvfile::~dvfile() diff --git a/client/historyframe.cc b/client/historyframe.cc new file mode 100644 index 0000000..ad9154b --- /dev/null +++ b/client/historyframe.cc @@ -0,0 +1,68 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/*************************************************************************** + * historyframe.cc + * + * Tue Mar 7 17:50:00 CET 2006 + * Copyright 2006 Bent Bisballe Nyeng + * deva@aasimon.org + ****************************************************************************/ + +/* + * This file is part of MIaV. + * + * MIaV 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. + * + * MIaV 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 MIaV; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + */ +#include "config.h" +#include "historyframe.h" + +#include <QVBoxLayout> +#include <QResizeEvent> + +HistoryFrame::HistoryFrame() +{ + QVBoxLayout *layout = new QVBoxLayout(); + setLayout(layout); +} + +HistoryFrame::~HistoryFrame() +{ +} + +void HistoryFrame::addHistoryItem(HistoryWidget *item) +{ + widgets.append(item); +} + +void HistoryFrame::resizeEvent(QResizeEvent *event) +{ + int w = event->size().width(); + int h = event->size().height(); + + int widget_height = h / 10; + + int num_widgets = h / widget_height; + int top = num_widgets<widgets.size()?num_widgets:widgets.size(); + + while(layout()->count()) { + layout()->removeItem(layout()->itemAt(0)); // Remove all widgets + } + + for(int i = 0; i < top; i++) { + HistoryWidget *history = widgets.at(i); + history->resize(w, widget_height); + layout()->addWidget(history); + } + +} diff --git a/client/historyframe.h b/client/historyframe.h new file mode 100644 index 0000000..39366a9 --- /dev/null +++ b/client/historyframe.h @@ -0,0 +1,50 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/*************************************************************************** + * historyframe.h + * + * Tue Mar 7 17:49:59 CET 2006 + * Copyright 2006 Bent Bisballe Nyeng + * deva@aasimon.org + ****************************************************************************/ + +/* + * This file is part of MIaV. + * + * MIaV 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. + * + * MIaV 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 MIaV; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + */ +#include "config.h" +#ifndef __MIAV_HISTORYFRAME_H__ +#define __MIAV_HISTORYFRAME_H__ + +#include <QFrame> +#include <QList> +#include "historywidget.h" + +class HistoryFrame : public QFrame +{ +public: + HistoryFrame(); + ~HistoryFrame(); + + void addHistoryItem(HistoryWidget *item); + +protected: + void resizeEvent(QResizeEvent *event); + +private: + QList<HistoryWidget*> widgets; +}; + +#endif/*__MIAV_HISTORYFRAME_H__*/ diff --git a/client/historywidget.cc b/client/historywidget.cc index 55fb178..ba768eb 100644 --- a/client/historywidget.cc +++ b/client/historywidget.cc @@ -24,18 +24,20 @@ * along with MIaV; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -#include <config.h> -#ifdef USE_GUI #include "historywidget.h" #include "miav_config.h" #include <QPixmap> +#include <QResizeEvent> -HistoryWidget::HistoryWidget(QWidget *p) : QLabel(p) +#define PIXMAP_DUMMY PIXMAPS"/dummy.png" +HistoryWidget::HistoryWidget() : QLabel() { - parent = p; image = NULL; + // set_image(new QImage(PIXMAP_DUMMY)); + setLineWidth(1); + setFrameStyle(QFrame::Plain); } HistoryWidget::~HistoryWidget() @@ -44,7 +46,7 @@ HistoryWidget::~HistoryWidget() } void HistoryWidget::set_image(QImage *i) -{ +{/* if(image) delete image; image = new QImage(*i); @@ -53,6 +55,7 @@ void HistoryWidget::set_image(QImage *i) QPixmap pixmap; pixmap.fromImage(resized); setPixmap(pixmap); + */ } QImage * HistoryWidget::get_image() @@ -60,10 +63,11 @@ QImage * HistoryWidget::get_image() return image; } -static HistoryWidget *fs = NULL; +//static HistoryWidget *fs = NULL; void HistoryWidget::mouseReleaseEvent(QMouseEvent *event) { + /* if(!parent) { // We are a fullscreen window destroy(); } else { // We are a nested window @@ -72,10 +76,22 @@ void HistoryWidget::mouseReleaseEvent(QMouseEvent *event) fs = new HistoryWidget(NULL); fs->showFullScreen(); - fs->setFixedWidth(config->readInt("pixel_width")); - fs->setFixedHeight(config->readInt("pixel_height")); + fs->setFixedWidth(MIaV::config->readInt("pixel_width")); + fs->setFixedHeight(MIaV::config->readInt("pixel_height")); fs->set_image(image); } + */ } -#endif/*USE_GUI*/ +void HistoryWidget::resizeEvent(QResizeEvent *event) +{ + /* + QImage resized = image->scaled(event->size().width(), + event->size().height(), + Qt::KeepAspectRatio, + Qt::SmoothTransformation); + QPixmap pixmap; + pixmap.fromImage(resized); + setPixmap(pixmap); + */ +} diff --git a/client/historywidget.h b/client/historywidget.h index b798ddb..dd2345d 100644 --- a/client/historywidget.h +++ b/client/historywidget.h @@ -25,7 +25,6 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ #include "config.h" -#ifdef USE_GUI #ifndef __MIAV_HISTORYWIDGET_H__ #define __MIAV_HISTORYWIDGET_H__ @@ -35,7 +34,7 @@ class HistoryWidget : public QLabel { Q_OBJECT public: - HistoryWidget(QWidget *parent); + HistoryWidget(); ~HistoryWidget(); void set_image(QImage *image); @@ -43,10 +42,12 @@ public: void mouseReleaseEvent(QMouseEvent *event); +protected: + void resizeEvent(QResizeEvent *event); + private: QImage *image; QWidget *parent; }; #endif/*__MIAV_HISTORYWIDGET_H__*/ -#endif/*USE_GUI*/ diff --git a/client/mainwindow.cc b/client/mainwindow.cc index 8efcad0..3a0eeab 100644 --- a/client/mainwindow.cc +++ b/client/mainwindow.cc @@ -25,407 +25,96 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ #include <config.h> -#ifdef USE_GUI #include "mainwindow.h" - -#include <QPainter> -#include <QPicture> -#include <QPushButton> -#include <QFont> -#include <QPixmap> -#include <QBitmap> -#include <QImage> -#include <QLayout> -#include <QGroupBox> -#include <QStatusBar> - -#include <math.h> - #include "info.h" - -//#include "mgui_alert.h" -//#include "mgui_datasocket.h" - #include "miav_config.h" +#include "splashscreen.h" +#include "aboutwindow.h" -#include <config.h> -//"miav-grab.h" - -//#define WITH_DV -MainWindow::MainWindow(QWidget* parent ) - : QWidget( parent, Qt::FramelessWindowHint ) -{ - // info = new InfoGui(qApp, this, config); - - gInfo::info->info("Starting MIaV v. %s.", VERSION); - - video_width = config->readInt("video_width"); - video_height = config->readInt("video_height"); - - int resolution_w = config->readInt("pixel_width"); - int resolution_h = config->readInt("pixel_height"); - - unit = ((float)resolution_w / config->readFloat("screensize")) / INCH_IN_CM; - - printf("Unit: %f\n", unit); - - move(0,0); - resize(resolution_w, resolution_h); - - // Load icons - img_record = loadButtonIcon( PIXMAP_RECORD ); - img_stop = loadButtonIcon( PIXMAP_STOP ); - img_freeze = loadButtonIcon( PIXMAP_FREEZE ); - img_unfreeze = loadButtonIcon( PIXMAP_UNFREEZE ); - img_cpr = loadButtonIcon( PIXMAP_CPR ); - img_clear = loadButtonIcon( PIXMAP_CLEAR ); - img_snapshot = loadButtonIcon( PIXMAP_SNAPSHOT ); - img_logo = loadButtonIcon( PIXMAP_LOGO_SMALL, 1 ); - img_mute = loadButtonIcon( PIXMAP_MUTE ); - img_unmute = loadButtonIcon( PIXMAP_UNMUTE ); - - img_dummy = loadImage( PIXMAP_DUMMY ); - - timer = new QTimer(this); - connect(timer, SIGNAL(timeout()), SLOT(redraw_edge())); - rec_edge_counter = 0.0f; - - // This must be defined before the gui i created (img_live uses it as parameter) - // camera = new Camera(info); - - createGui(); - show(); - - /* - camera->connect(config->readString("server_addr")->c_str(), - config->readInt("server_port"), - img_live->width(), img_live->height()); - */ - // Make sure this is created *after* the camera object! - taskbartimer = new QTimer(this); - connect(taskbartimer, SIGNAL(timeout()), SLOT(taskbar_update())); - taskbartimer->start(200); - - recording = false; - frozen = false; - muted = false; - - gInfo::info->log("MIaV is ready."); - - // Open the CPR Dialog - cpr_clicked(); - -} - -MainWindow::~MainWindow() -{ - gInfo::info->log("MIaV is shutting down."); - - delete img_history; - // delete camera; - delete btn_cpr; +#include <QGridLayout> - gInfo::info->log("MIaV is shut down."); -} +#include "videowidget.h" +#include "historyframe.h" +#include "historywidget.h" -QImage *MainWindow::loadButtonIcon( char *name, int height ) +// Macro for creating buttons +static QPushButton *createButton(char* icon) { + QPixmap pixmap(icon); - QImage scaled; - QImage *img; - - img = new QImage(); - img->load( name ); + Qt::AspectRatioMode aspect = pixmap.width()<pixmap.height()? + Qt::KeepAspectRatio:Qt::KeepAspectRatioByExpanding; - int h = (int)(height * unit); - int w = (int)((float)img->width() / (float)(img->height() / (float)h)); + pixmap = pixmap.scaled(50, 50, aspect, Qt::SmoothTransformation); + QPushButton *btn = new QPushButton(); + btn->setIconSize(pixmap.size()); + btn->setIcon(pixmap); - scaled = img->scaled(w, h, Qt::KeepAspectRatio, Qt::SmoothTransformation); - delete img; - img = new QImage(scaled); - - return img; + return btn; } -QImage *MainWindow::loadImage( char *name ) +MainWindow::MainWindow(): QWidget() { - QImage *img; + MIaV::info->log("Starting MIaV v. %s.", VERSION); - img = new QImage(); - img->load( name ); + // Create the overlaying splashscreen + // SplashScreen splash; - return img; -} + // Create layout + QGridLayout *layout = new QGridLayout(this); + setLayout(layout); -void MainWindow::createGui() -{ - // Layout widgets - - /* __________________________________________________ - *(0) ___________________________ | ______________ | - * | | | | | | | | | | - * |(1) | | | | |(2) | | - * | | | | | | | | | | - * | | | | | | | | | | - * | | | | | | | |______________| | - * | | | | | | | | | | - * | | | | | | | | | | - * | | | | | | | | | | - * | |______|______|______|______| | | | | - * | | | | | | | |______________| | - * | |______|______|______|______| | | | | - * | | | | | | | | | | - * | |______|______|______|______| | | | | - * | | | | | | | | | | - * | |______|______|______|______| | |______________| | - * |_______________________________|__________________| - * |_______________________________|__________________| - */ - - QPixmap pixmap; - - QGridLayout *g0 = new QGridLayout(this); - QGridLayout *g1 = new QGridLayout(); - g0->addLayout(g1, 0, 0); - - QGroupBox *gb = new QGroupBox(); - /* - gb->setColumns(1); - gb->setInsideMargin(HISTORY_LIST_MARGIN); - gb->setInsideSpacing(HISTORY_LIST_SPACING); - gb->setFlat(true); - g0->addWidget(gb, 0, 1); - */ - - int resolution_w = config->readInt("pixel_width"); - int resolution_h = config->readInt("pixel_height"); - - int output_width = resolution_w - // this->width() - - (int)(BUTTON_WIDTH * unit) - - /* (gb->insideMargin() * 2) - */ - g1->margin() * 2 - - g0->margin() * 2; - - int output_height = resolution_h - // this->height() - - (int)(3 * BUTTON_HEIGHT * unit) - - g1->margin() * 5 - - g0->margin() * 3; - - img_recedge = new QLabel(); - QPalette palette; - palette.setColor(img_recedge->backgroundRole(), QColor(160,160,160)); - img_recedge->setPalette(palette); - img_recedge->setFixedSize(output_width, output_height); - - img_live = new VideoWidget(img_recedge); - img_live->setFixedSize(output_width - 20, output_height - 20); - img_live->move(10,10); - g1->addWidget( img_recedge, 0, 0, 1, 3, Qt::AlignHCenter); - - // CPR/NAME LABEL + CPR button - lbl_cpr = createLabel("", output_width - (int)(BUTTON_WIDTH * unit), BUTTON_HEIGHT); - g1->addWidget( lbl_cpr, 1, 0, 1, 2); - - btn_cpr = createButton(""); - btn_cpr->setFocus(); - pixmap.fromImage(*img_cpr); - btn_cpr->setIcon(pixmap); - QObject::connect( btn_cpr, SIGNAL(clicked()), this, SLOT(cpr_clicked()) ); - // Will also be connected in the MGUI code - g1->addWidget(btn_cpr, 1, 3); - - lbl_name = createLabel("", output_width, (int)(BUTTON_HEIGHT * 0.8f)); - g1->addWidget( lbl_name, 2, 0, 1, 2); -/* - btn_clear = createButton(""); - btn_clear->setPixmap(*img_clear); - QObject::connect( btn_clear, SIGNAL(clicked()), this, SLOT(clear_clicked()) ); - // Will also be connected in the MGUI code - g1->addWidget(btn_clear, 1, 2); -*/ - // Rec + Shot + Freeze buttons - btn_rec = createButton(""); - pixmap.fromImage(*img_record); - btn_rec->setIcon(pixmap); - QObject::connect( btn_rec, SIGNAL(clicked()), this, SLOT(rec_clicked()) ); - g1->addWidget(btn_rec, 3, 0); - - btn_shoot = createButton(""); - pixmap.fromImage(*img_snapshot); - btn_shoot->setIcon(pixmap); - QObject::connect( btn_shoot, SIGNAL(clicked()), this, SLOT(shoot_clicked()) ); - g1->addWidget(btn_shoot, 3, 1); - - btn_freeze = createButton(""); - pixmap.fromImage(*img_freeze); - btn_freeze->setIcon(pixmap); - QObject::connect( btn_freeze, SIGNAL(clicked()), this, SLOT(freeze_clicked()) ); - g1->addWidget(btn_freeze, 3, 2); - - btn_mute = createButton(""); - pixmap.fromImage(*img_unmute); - btn_mute->setIcon(pixmap); - QObject::connect( btn_mute, SIGNAL(clicked()), this, SLOT(mute_clicked()) ); - g1->addWidget(btn_mute, 3, 3); - - // History widgets - int w = (int)((float)BUTTON_WIDTH * unit); - int h = (int)(576.0f / (720.0f / ((float)BUTTON_WIDTH * unit))); - - int window_height = config->readInt("pixel_height"); - this->num_history = (window_height - - ((int)unit * BUTTON_HEIGHT + HISTORY_LIST_SPACING ) - - (2 * HISTORY_LIST_MARGIN)) / (h + HISTORY_LIST_SPACING); - img_history = new HistoryWidget*[this->num_history]; - - for(unsigned int i = 0; i < num_history; i++) { - img_history[i] = new HistoryWidget(gb); - img_history[i]->set_image(img_dummy); - img_history[i]->setFixedSize(w, h); - } - - // Clear button - btn_clear = createButton("", gb); - pixmap.fromImage(*img_clear); - btn_clear->setIcon(pixmap); - QObject::connect( btn_clear, SIGNAL(clicked()), this, SLOT(clear_clicked()) ); - - // Statusbar - status = new QStatusBar(this); - status->setSizeGripEnabled(FALSE); - // status->setFont(QFont( "Sans Serif", (int)(unit * height / 3), QFont::Normal )); - g0->addWidget(status, 4, 0, 4, 1); - - lbl_recordtime = createLabel("", BUTTON_WIDTH, 1); - lbl_recordtime->setFixedWidth((int)(BUTTON_WIDTH * unit) + - /* (gb->insideMargin() * 2) + */ - g1->margin() * 2 + - g0->margin() * 2); - status->addWidget(lbl_recordtime, 0); - - // About button - btn_about = new QPushButton(); - btn_about->setFixedHeight((int)unit); - pixmap.fromImage(*img_logo); - btn_about->setIcon(pixmap); - QObject::connect( btn_about, SIGNAL(clicked()), this, SLOT(about_clicked()) ); - status->addWidget(btn_about, 0); - - // Version label - lbl_version = createLabel("MIaV-Grab v" VERSION, BUTTON_WIDTH, 1); - lbl_version->setFixedWidth((int)(BUTTON_WIDTH * unit) + - /* (gb->insideMargin() * 2) + */ - g1->margin() * 2 + - g0->margin() * 2); - status->addWidget(lbl_version, 0); - - status->showMessage( TXT_READY ); -} + // Create the videoarea + VideoWidget *video = new VideoWidget(); + layout->addWidget(video, 0,0, 1,4); + // Create the control buttons + QPushButton *button; -QPushButton *MainWindow::createButton(char *caption, int width, int height) -{ - return createButton(caption, this);//, width, height); -} + button = createButton(PIXMAP_CPR); + layout->addWidget(button, 1,3, 1,1); + connect(button, SIGNAL(clicked()), this, SLOT(cpr_clicked())); + button = createButton(PIXMAP_RECORD); + layout->addWidget(button, 2,0, 1,1); + connect(button, SIGNAL(clicked()), this, SLOT(record_clicked())); -QPushButton *MainWindow::createButton(char *caption, QWidget *parent, int width, int height) -{ - QPushButton *btn = new QPushButton(caption, parent); - btn->setFont( QFont( "Sans Serif", (int)(unit * height / 2), QFont::Bold ) ); - btn->setFixedHeight((int)(unit * height)); - // btn->setFixedWidth((int)(unit * width)); - return btn; -} + button = createButton(PIXMAP_SNAPSHOT); + layout->addWidget(button, 2,1, 1,1); + connect(button, SIGNAL(clicked()), this, SLOT(snapshot_clicked())); + button = createButton(PIXMAP_FREEZE); + layout->addWidget(button, 2,2, 1,1); + connect(button, SIGNAL(clicked()), this, SLOT(freeze_clicked())); -QLabel *MainWindow::createLabel(char *caption, int width, int height) -{ - QLabel *lbl = new QLabel(caption, this); - lbl->setFont( QFont( "Sans Serif", - //(height>1)?(int)(unit * height / 2):(int)(unit * height / 2), - (int)(unit * height / 2), - (height>1)?QFont::Bold:QFont::Normal ) ); - lbl->setFixedHeight((int)(unit * height)); - // lbl->setFixedWidth((int)(unit * width)); - return lbl; -} + button = createButton(PIXMAP_MUTE); + layout->addWidget(button, 2,3, 1,1); + connect(button, SIGNAL(clicked()), this, SLOT(mute_clicked())); -#include <sys/time.h> -static struct timeval starttime; -static int h = 0; -static int m = 0; -static int s = 0; -static int watchdog = 0; + // Create history bar + HistoryFrame *frame = new HistoryFrame(); + layout->addWidget(frame, 0,4, 3,1); + frame->addHistoryItem(new HistoryWidget()); + frame->addHistoryItem(new HistoryWidget()); + frame->addHistoryItem(new HistoryWidget()); -void MainWindow::taskbar_update() -{ - struct timeval time; - watchdog++; - - if(recording) { - /* - if((watchdog % 300 == 0) || ((camera->getQueueLength() > 1000) && (watchdog % 50 == 0))) - info->log("Queue length: %d (active)", camera->getQueueLength()); - */ - gettimeofday(&time, NULL); - - s = time.tv_sec - starttime.tv_sec; - - h = s / (60 * 60); - s -= h * (60 * 60); - m = s / 60; - s -= m * 60; - } else { - /* - if((camera->getQueueLength() > 0) && (watchdog % 300 == 0)) - info->log("Queue length: %d (passive)", camera->getQueueLength()); - */ - gettimeofday(&starttime, NULL); - } - - char msg[256]; - int l = 0;//camera->getQueueLength(); - sprintf(msg, TXT_TIME " %.02d:%.02d:%.02d " TXT_QUEUELENGTH " %d", h, m, s, l); - lbl_recordtime->setText(msg); -} -#define GREY 160 -#define SPEED 0.07f -void MainWindow::redraw_edge() -{ - rec_edge_counter += SPEED; - float val = fabs(sin(rec_edge_counter)); - - QPalette palette; - palette.setColor(img_recedge->backgroundRole(), QColor((int) ((255 - GREY) * val + GREY), - (int) (GREY - (GREY * val)), - (int) (GREY - (GREY * val)))); - img_recedge->setPalette(palette); -} + // Create statusbar -void MainWindow::message(char *msg) -{ - status->showMessage(msg); - gInfo::info->log("Message: %s", msg); + show(); + // setWindowState(Qt::WindowFullScreen); + + MIaV::info->log("MIaV is ready."); } -void MainWindow::clear() +MainWindow::~MainWindow() { - gInfo::info->log("Clearing screen."); - + MIaV::info->log("MIaV is shutting down."); - // History widgets - for(unsigned int i = 0; i < num_history; i++) { - img_history[i]->set_image(img_dummy); - } - - lbl_name->setText(""); - lbl_cpr->setText(""); + MIaV::info->log("MIaV is shut down."); } -#include "aboutwindow.h" void MainWindow::about_clicked() { AboutWindow about; @@ -434,184 +123,24 @@ void MainWindow::about_clicked() void MainWindow::clear_clicked() { - if(MessageBox(this, - TXT_ASK_CLEAR_SCREEN_TITLE, - TXT_ASK_CLEAR_SCREEN, - TYPE_YES_NO, - ICON_QUESTION).exec() == MSG_YES) { - clear(); - } } void MainWindow::cpr_clicked() { - char oldcpr[256]; - char oldname[256]; - - // If recording, stop recording before changingcpr - if(recording) { - MessageBox(this, - TXT_STOP_RECORDING_TITLE, - TXT_STOP_RECORDING, - TYPE_OK, - ICON_WARNING).exec(); - return; - } - gInfo::info->log("Activated CPR chooser."); - - // Save CPR and name, from the labels. - strcpy(oldname, lbl_name->text().toStdString().c_str()); - strcpy(oldcpr, lbl_cpr->text().toStdString().c_str()); - - clear(); - - // Create and call the CPRQueryDialog. - CPRQueryDialog dlg(lbl_cpr, lbl_name, this, TXT_CPRDLG_TITLE, status); - - if(dlg.exec() == 0) { - // Restore old CPR and name, in the labels. - lbl_name->setText(oldname); - lbl_cpr->setText(oldcpr); - gInfo::info->log("Cancelled CPR chooser."); - } else { - // Change CPR camera. - gInfo::info->log("New CPR %s (old %s).", (char*)lbl_cpr->text().toStdString().c_str(), oldcpr); - strcpy(oldname, lbl_name->text().toStdString().c_str()); - strcpy(oldcpr, lbl_cpr->text().toStdString().c_str()); - clear(); - lbl_name->setText(oldname); - lbl_cpr->setText(oldcpr); - // camera->setCpr((char*)lbl_cpr->text().toStdString().c_str(), (char*)lbl_name->text().toStdString().c_str()); - } } void MainWindow::rec_clicked() { - QPalette palette; - QPixmap pixmap; - - if(!recording) { - gInfo::info->log("Start recording."); - recording = 1; - // Start flashing the edge - rec_edge_counter = 0.0f; - timer->start(100); - pixmap.fromImage(*img_stop); - btn_rec->setIcon(pixmap); - // camera->start(); - } else { - switch(MessageBox(this, - TXT_ASK_SAVE_TITLE, - TXT_ASK_SAVE, - TYPE_YES_NO_MAYBE_CANCEL, - ICON_QUESTION).exec()) { - case MSG_YES: - gInfo::info->log("Stop recording (Said yes to save)."); - recording = 0; - // camera->stop(SAVE); - timer->stop(); - palette.setColor(img_recedge->backgroundRole(), QColor(160,160,160)); - img_recedge->setPalette(palette); - pixmap.fromImage(*img_record); - btn_rec->setIcon(pixmap); - break; - - case MSG_NO: - gInfo::info->log("Stop recording (Said no to save)."); - recording = 0; - // camera->stop(DELETE); - timer->stop(); - palette.setColor(img_recedge->backgroundRole(), QColor(160,160,160)); - img_recedge->setPalette(palette); - pixmap.fromImage(*img_record); - btn_rec->setIcon(pixmap); - break; - - case MSG_MAYBE: - gInfo::info->log("Stop recording (Said maybe to save)."); - recording = 0; - // camera->stop(LATER); - timer->stop(); - palette.setColor(img_recedge->backgroundRole(), QColor(160,160,160)); - img_recedge->setPalette(palette); - pixmap.fromImage(*img_record); - btn_rec->setIcon(pixmap); - break; - - case MSG_CANCEL: - gInfo::info->log("Didn't stop recording (canceled)."); - break; - } - } } void MainWindow::shoot_clicked() { - // unsigned char pixels[720*576*3]; - gInfo::info->log("Snapshot (%s).", frozen?"frozen":"unfrozen"); - - QImage screenshot(720, 576, QImage::Format_RGB32); - - // camera->snapshot(screenshot.bits()); - - QImage *image; - for(int cnt = (num_history-1); cnt > 0; cnt--) { - image = img_history[cnt-1]->get_image(); - img_history[cnt]->set_image(image); - } - img_history[0]->set_image(&screenshot); - - if(frozen) { - // camera->unfreeze(); - - QPixmap pixmap; - pixmap.fromImage(*img_freeze); - btn_freeze->setIcon(pixmap); - - btn_freeze->setDown(false); - frozen = false; - } } void MainWindow::freeze_clicked() { - if(frozen) { - gInfo::info->log("Unfreeze."); - // camera->unfreeze(); - - QPixmap pixmap; - pixmap.fromImage(*img_freeze); - btn_freeze->setIcon(pixmap); - - btn_freeze->setDown(false); - frozen = false; - } else { - gInfo::info->log("Freeze."); - // camera->freeze(); - - QPixmap pixmap; - pixmap.fromImage(*img_freeze); - btn_freeze->setIcon(pixmap); - - btn_freeze->setDown(true); - frozen = true; - } } void MainWindow::mute_clicked() { - QPixmap pixmap; - - muted = !muted; - if(muted) { - pixmap.fromImage(*img_mute); - btn_mute->setIcon(pixmap); - } else { - pixmap.fromImage(*img_unmute); - btn_mute->setIcon(pixmap); - } - - // camera->setMute(muted); } - -#endif /*USE_GUI*/ diff --git a/client/mainwindow.h b/client/mainwindow.h index 627b431..acba62c 100644 --- a/client/mainwindow.h +++ b/client/mainwindow.h @@ -25,56 +25,12 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ #include "config.h" -#ifdef USE_GUI - -#ifndef __MAINWINDOW_H__ -#define __MAINWINDOW_H__ - -#include <string> -using namespace std; +#ifndef __MIAV_MAINWINDOW_H__ +#define __MIAV_MAINWINDOW_H__ #include <QWidget> -#include <QLabel> -#include <QPushButton> -#include <QStatusBar> -#include <QTimer> -#include <QPixmap> -#include <QImage> - -#include "videowidget.h" -#include "cprquerydialog.h" -#include "historywidget.h" - -#define INCH_IN_CM 2.54f - -/** - * First some GUI specs - */ -//#define NUM_HISTORY 3 // moved to a genuine variable -// Button sizes in cm (metric) -#define BUTTON_WIDTH 7 -#define BUTTON_HEIGHT 2 - -#define HISTORY_LIST_MARGIN 25 -#define HISTORY_LIST_SPACING 5 /** - * Textstrings - */ -#define TXT_ERROR_TITLE "Der er opstået en fejl!" -#define TXT_READY "Klar..." -#define TXT_CPRDLG_TITLE "CPRQueryDialog" -#define TXT_ASK_SAVE_TITLE "Vil du gemme filmen?" -#define TXT_ASK_SAVE "Vil du gemme filmen permanent?" -#define TXT_STOP_RECORDING_TITLE "Stop optagelsen" -#define TXT_STOP_RECORDING "Optagelsen skal standses, inden et nyt cpr nummer kan indtastes.\n\ -Optagelsen standses ved tryk på den røde cirkel med gul streg over." -#define TXT_TIME "Tid:" -#define TXT_QUEUELENGTH "Buffer størelse:" -#define TXT_ASK_CLEAR_SCREEN_TITLE "Fjerne data fra skærmen?" -#define TXT_ASK_CLEAR_SCREEN "Er du sikker på at du vil dataene fra skærmen (billeder, CPR nummer og navn)?" - -/** * Images */ #define PIXMAP_MUTE PIXMAPS"/mute.png" @@ -97,88 +53,20 @@ class MainWindow : public QWidget { Q_OBJECT public: - MainWindow(QWidget* parent = 0); + MainWindow(); ~MainWindow(); - void message(char* msg); - public slots: void cpr_clicked(); void clear_clicked(); void rec_clicked(); void shoot_clicked(); void freeze_clicked(); - void redraw_edge(); - void taskbar_update(); void about_clicked(); void mute_clicked(); private: - unsigned int num_history; - - void clear(); - void createGui(); - - // Image loading routines. - QImage *loadButtonIcon( char *name, int height = BUTTON_HEIGHT ); - QImage *loadImage( char *name ); - - QImage *img_unfreeze; - QImage *img_freeze; - QImage *img_snapshot; - QImage *img_cpr; - QImage *img_clear; - QImage *img_record; - QImage *img_stop; - QImage *img_logo; - QImage *img_mute; - QImage *img_unmute; - QImage *img_dummy; - - QLabel *lbl_version; - QLabel *lbl_cpr; - QLabel *lbl_name; - QLabel *lbl_recordtime; - - QTimer *taskbartimer; - - // Used for the check_for_error_once_per_2_seconds (very ugly) - QTimer *errtimer; - - float rec_edge_counter; - QTimer *timer; - QLabel *img_recedge; - HistoryWidget **img_history; - - QPushButton *btn_logo; - QPushButton *btn_clear; - QPushButton *btn_cpr; - QPushButton *btn_rec; - QPushButton *btn_shoot; - QPushButton *btn_freeze; - QPushButton *btn_mute; - - QPushButton *btn_about; - - QStatusBar *status; - - VideoWidget *img_live; - - bool recording; - bool frozen; - bool muted; - - // Configuration values - float unit; - int video_width; - int video_height; - - QPushButton *createButton(char *caption, int width = BUTTON_WIDTH, int height = BUTTON_HEIGHT); - QPushButton *createButton(char *caption, QWidget *parent, int width = BUTTON_WIDTH, int height = BUTTON_HEIGHT); - QLabel *createLabel(char *caption, int width, int height); }; -#endif - -#endif /*USE_GUI*/ +#endif/*__MIAV_MAINWINDOW_H__*/ diff --git a/client/messagebox.cc b/client/messagebox.cc index f4797ab..11686c7 100644 --- a/client/messagebox.cc +++ b/client/messagebox.cc @@ -29,9 +29,9 @@ #include "messagebox.h" #include "miav_config.h" -// For button sizes! -#include "mainwindow.h" - +#define INCH_IN_CM 2 +#define BUTTON_HEIGHT 1 +#define BUTTON_WIDTH 3 //////////////////////////////////////////////////////////////////////////////////////// /* If the cpr input by the user is not valid, this dialog * ask the user what to do. Edit the number, use it as it is, @@ -45,9 +45,9 @@ MessageBox::MessageBox(QWidget* parent, msg_icon icon) : QDialog(parent) { - int resolution_w = config->readInt("pixel_width"); + int resolution_w = MIaV::config->readInt("pixel_width"); //int resolution_h = config->readInt("pixel_height"); - unit = ((float)resolution_w / config->readFloat("screensize")) / INCH_IN_CM; + unit = ((float)resolution_w / MIaV::config->readFloat("screensize")) / INCH_IN_CM; setModal(true); setWindowTitle(name); diff --git a/client/miav_client.cc b/client/miav_client.cc index 29826ef..eea9cdf 100644 --- a/client/miav_client.cc +++ b/client/miav_client.cc @@ -39,14 +39,13 @@ int main(int argc, char *argv[]) { - QApplication miav_grab( argc, argv ); + QApplication app(argc, argv); - MiavConfig cfg(ETC"/miav.conf", NULL); + MiavConfig config(ETC"/miav.conf"); + MIaV::initConfig(&config); - InfoGui info(&cfg); - gInfo::initInfo(&info); - - config = new MiavConfig(ETC"/miav.conf", &info); + InfoGui info(MIaV::config); + MIaV::initInfo(&info); MainWindow mainwindow; @@ -58,5 +57,5 @@ int main(int argc, char *argv[]) player.start(); sender.start(); - return miav_grab.exec(); + return app.exec(); } diff --git a/client/networksender.cc b/client/networksender.cc index 19df3f3..7e367f1 100644 --- a/client/networksender.cc +++ b/client/networksender.cc @@ -37,5 +37,5 @@ NetworkSender::~NetworkSender() void NetworkSender::run() { - gInfo::info->info("The NetworkSender thread is running."); + // MIaV::info->info("The NetworkSender thread is running."); } diff --git a/client/player.cc b/client/player.cc index cec7b0f..143279f 100644 --- a/client/player.cc +++ b/client/player.cc @@ -37,5 +37,5 @@ Player::~Player() void Player::run() { - gInfo::info->info("The player thread is running."); + // MIaV::info->info("The player thread is running."); } diff --git a/client/splashscreen.cc b/client/splashscreen.cc new file mode 100644 index 0000000..c4acb25 --- /dev/null +++ b/client/splashscreen.cc @@ -0,0 +1,55 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/*************************************************************************** + * splashscreen.cc + * + * Tue Mar 7 14:50:09 CET 2006 + * Copyright 2006 Bent Bisballe Nyeng + * deva@aasimon.org + ****************************************************************************/ + +/* + * This file is part of MIaV. + * + * MIaV 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. + * + * MIaV 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 MIaV; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + */ +#include "config.h" +#include "splashscreen.h" + +SplashScreen::SplashScreen() +{ + start(); +} + +SplashScreen::~SplashScreen() +{ +} + +void SplashScreen::setProgress(QString text, unsigned int pct) +{ + // progbartext->text = text; + // progbar->setValue(pct); +} + +void SplashScreen::run() +{ + /* + QDialog splash; + splash.setModal(true); + progbar = new QProgressBar(&splash); + progbar->setRange(0, 100); + progbar->setTextVisible(true); + splash.exec(); + */ +} diff --git a/client/splashscreen.h b/client/splashscreen.h new file mode 100644 index 0000000..95de335 --- /dev/null +++ b/client/splashscreen.h @@ -0,0 +1,52 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/*************************************************************************** + * splashscreen.h + * + * Tue Mar 7 14:50:08 CET 2006 + * Copyright 2006 Bent Bisballe Nyeng + * deva@aasimon.org + ****************************************************************************/ + +/* + * This file is part of MIaV. + * + * MIaV 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. + * + * MIaV 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 MIaV; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + */ +#include "config.h" +#ifndef __MIAV_SPLASHSCREEN_H__ +#define __MIAV_SPLASHSCREEN_H__ + +#include <QThread> +#include <QDialog> +#include <QProgressBar> +#include <QString> + +class SplashScreen : public QThread +{ +public: + SplashScreen(); + ~SplashScreen(); + + void setProgress(QString text, unsigned int pct); + + void run(); + +private: + QDialog *splash; + QProgressBar *progbar; +}; + + +#endif/*__MIAV_SPLASHSCREEN_H__*/ diff --git a/client/videowidget.cc b/client/videowidget.cc index 8f733d5..6ff062d 100644 --- a/client/videowidget.cc +++ b/client/videowidget.cc @@ -24,38 +24,33 @@ * along with MIaV; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -#include <config.h> - -#ifdef USE_GUI - #include "videowidget.h" - #include "miav_config.h" -VideoWidget::VideoWidget(QWidget *p, QWidget* old) : QWidget(p) +VideoWidget::VideoWidget() : QFrame() { - parent = p; + // A welltested hack to force SDL to draw in the QWidget - oldWindow = old; + // QString ids; + // setenv("SDL_WINDOWID", ids.setNum(winId()).toStdString().c_str(), 1); + + // Make it visible + QPalette palette; + palette.setColor(backgroundRole(), Qt::blue); + setPalette(palette); + + setLineWidth(1); + setFrameStyle(QFrame::Plain); - // A welltested hack to force SDL to draw in the QWidget - QString ids; - setenv("SDL_WINDOWID", ids.setNum(winId()).toStdString().c_str(), 1); } VideoWidget::~VideoWidget() { } -QPixmap VideoWidget::getScreenshot() -{ - return QPixmap::grabWindow (winId()); -} - -static VideoWidget *fs = NULL; - void VideoWidget::mouseReleaseEvent(QMouseEvent *event) { + /* if(!parent) { // We are a fullscreen window QString ids; setenv("SDL_WINDOWID", ids.setNum(oldWindow->winId()).toStdString().c_str(), 1); @@ -64,12 +59,11 @@ void VideoWidget::mouseReleaseEvent(QMouseEvent *event) } else { // We are a nested window // first delete old instance (if any) if(fs) delete fs; - fs = new VideoWidget(NULL, this); + fs = new VideoWidget(); fs->showFullScreen(); - fs->setFixedWidth(config->readInt("pixel_width")); - fs->setFixedHeight(config->readInt("pixel_height")); + fs->setFixedWidth(MIaV::config->readInt("pixel_width")); + fs->setFixedHeight(MIaV::config->readInt("pixel_height")); //camera->resize(fs->width(), fs->height(), true); } + */ } - -#endif /* USE_GUI */ diff --git a/client/videowidget.h b/client/videowidget.h index 3ccbd97..25f5bed 100644 --- a/client/videowidget.h +++ b/client/videowidget.h @@ -25,29 +25,20 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ #include "config.h" -#ifdef USE_GUI - #ifndef __VIDEOWIDGET_H__ #define __VIDEOWIDGET_H__ -#include <QWidget> +#include <QFrame> #include <QPixmap> -class VideoWidget : public QWidget { +class VideoWidget : public QFrame +{ Q_OBJECT public: - VideoWidget(QWidget *parent, QWidget *old = NULL); + VideoWidget(); ~VideoWidget(); - QPixmap getScreenshot(); - void mouseReleaseEvent(QMouseEvent *event); - -private: - QWidget *parent; - // Reassign SDL to this when closing (if non-NULL) - QWidget *oldWindow; + void mouseReleaseEvent(QMouseEvent *event); }; #endif /* __VIDEOWIDGET_H__ */ - -#endif /* USE_GUI */ diff --git a/lib/file.cc b/lib/file.cc index 3a59334..6bd8438 100644 --- a/lib/file.cc +++ b/lib/file.cc @@ -81,8 +81,8 @@ File::~File() info->info("[%s]", filelist[cnt].c_str()); } - std::string *trash = config->readString("server_trash"); - std::string *later = config->readString("server_later"); + std::string *trash = MIaV::config->readString("server_trash"); + std::string *later = MIaV::config->readString("server_later"); switch(savestate) { case NO_CHANGE: diff --git a/lib/info.cc b/lib/info.cc index 701a705..a7b5f3e 100644 --- a/lib/info.cc +++ b/lib/info.cc @@ -66,3 +66,13 @@ void Info::log(char *fmt, ...) // End of safezone pthread_mutex_unlock(&mutex); } + + +// For the global info object +void MIaV::initInfo(Info* i) +{ + info = i; +} + +Info *MIaV::info = NULL; + @@ -58,4 +58,10 @@ protected: string log_filename; }; +// For the global info object +namespace MIaV { + void initInfo(Info* info); + extern Info* info; +}; + #endif/*__MIAV_INFO_H__*/ diff --git a/lib/miav_config.cc b/lib/miav_config.cc index adfa5c5..81436cf 100644 --- a/lib/miav_config.cc +++ b/lib/miav_config.cc @@ -26,12 +26,10 @@ */ #include <config.h> #include "miav_config.h" +#include "info.h" -MiavConfig *config; - -MiavConfig::MiavConfig(char *file, Info *i) +MiavConfig::MiavConfig(char *file) { - info = i; configs = NULL; filename = string(file); @@ -40,7 +38,7 @@ MiavConfig::MiavConfig(char *file, Info *i) FILE* fp = fopen(file, "r"); if(!fp) { - if(info) info->error("Error reading configuration file %s\n", file); + if(MIaV::info) MIaV::info->error("Error reading configuration file %s\n", file); else fprintf(stderr, "Error reading configuration file %s\n", file); return; } @@ -76,7 +74,7 @@ MiavConfig::~MiavConfig() */ void MiavConfig::parseError(char* msg, _cfg* cfg) { - if(info) info->error("Error parsing file %s at line %d:\n\t%s\n\t%s\n", + if(MIaV::info) MIaV::info->error("Error parsing file %s at line %d:\n\t%s\n\t%s\n", filename.c_str(), cfg->line, cfg->orig, @@ -462,12 +460,21 @@ _cfg *MiavConfig::findNode(char* node) if(!strcmp(node, cfg->name->c_str())) return cfg; cfg = cfg->next; } - if(info) info->error("Missing line in configuration file: \"%s\"!\n", node); + if(MIaV::info) MIaV::info->error("Missing line in configuration file: \"%s\"!\n", node); else fprintf(stderr, "Missing line in configuration file: \"%s\"!\n", node); return NULL; } +// For the global config object. +void MIaV::initConfig(MiavConfig *c) +{ + config = c; +} + +MiavConfig *MIaV::config = NULL; + + #ifdef __TEST_MIAV_CONFIG int main(int argc, char *argv[]) { diff --git a/lib/miav_config.h b/lib/miav_config.h index a8658f1..c97802d 100644 --- a/lib/miav_config.h +++ b/lib/miav_config.h @@ -64,7 +64,7 @@ typedef struct __cfg { class MiavConfig { public: - MiavConfig(char *file, Info *info = NULL); + MiavConfig(char *file); ~MiavConfig(); int readInt(char *node); @@ -73,7 +73,6 @@ public: float readFloat(char *node); protected: - Info *info; string filename; _cfg *createSemantics(_cfg *cfg); @@ -93,6 +92,11 @@ protected: _cfg *configs; }; -extern MiavConfig *config; + +// For the global config object +namespace MIaV { + void initConfig(MiavConfig *config); + extern MiavConfig *config; +}; #endif/*__MIAV_MIAV_CONFIG_H__*/ diff --git a/server/img_encoder.cc b/server/img_encoder.cc index bb36009..2ed0113 100644 --- a/server/img_encoder.cc +++ b/server/img_encoder.cc @@ -57,7 +57,7 @@ ImgEncoder::ImgEncoder(const char* cpr, Info *i) char encrypted_cpr[32]; // Get server root - server_root = config->readString("server_image_root"); + server_root = MIaV::config->readString("server_image_root"); // Copy the bytes representing the birth month from the cpr // [dd][mm][yy]-[nn][nn] diff --git a/server/libfame_wrapper.cc b/server/libfame_wrapper.cc index a663df6..e1d3660 100644 --- a/server/libfame_wrapper.cc +++ b/server/libfame_wrapper.cc @@ -94,13 +94,13 @@ LibFAMEWrapper::LibFAMEWrapper(Info *i) // to JPEG), whereas P and B frames are motion compressed, respectively // predicted from past reference (I or P) frame, or bidirectionally predicted // from past and future reference frame. - fame_par.coding = config->readString("frame_sequence")->c_str(); + fame_par.coding = MIaV::config->readString("frame_sequence")->c_str(); // quality is a percentage, which controls compression versus quality. - fame_par.quality = config->readInt("video_quality"); + fame_par.quality = MIaV::config->readInt("video_quality"); // Bitrate - fame_par.bitrate = config->readInt("video_bitrate") * 1000; // video bitrate in bytes pr second (0=VBR) + fame_par.bitrate = MIaV::config->readInt("video_bitrate") * 1000; // video bitrate in bytes pr second (0=VBR) // slices_per_frame is the number of frame slices per frame. More slices provide // better error recovery. There must be at least one slice per frame, and at most @@ -133,7 +133,7 @@ LibFAMEWrapper::LibFAMEWrapper(Info *i) fame_par.profile = profilename; // profile name fame_par.total_frames = 0; // total number of frames - if(strcmp(config->readString("encoding_codec")->c_str(), "mpeg4") == 0) { + if(strcmp(MIaV::config->readString("encoding_codec")->c_str(), "mpeg4") == 0) { info->info("Using mpeg4 compression."); fame_object_t *object; @@ -141,7 +141,7 @@ LibFAMEWrapper::LibFAMEWrapper(Info *i) object = fame_get_object(fame_context, "profile/mpeg4/simple"); if(object) fame_register(fame_context, "profile", object); - } else if(strcmp(config->readString("encoding_codec")->c_str(), "mpeg1") == 0) { + } else if(strcmp(MIaV::config->readString("encoding_codec")->c_str(), "mpeg1") == 0) { info->info("Using mpeg1 compression."); fame_object_t *object; @@ -149,7 +149,7 @@ LibFAMEWrapper::LibFAMEWrapper(Info *i) object = fame_get_object(fame_context, "profile/mpeg1"); if(object) fame_register(fame_context, "profile", object); - } else if(strcmp(config->readString("encoding_codec")->c_str(), "mpeg1") == 0) { + } else if(strcmp(MIaV::config->readString("encoding_codec")->c_str(), "mpeg1") == 0) { } else { info->info("Using default (mpeg1) compression."); } diff --git a/server/liblame_wrapper.cc b/server/liblame_wrapper.cc index 5603d6f..137ac6a 100644 --- a/server/liblame_wrapper.cc +++ b/server/liblame_wrapper.cc @@ -46,9 +46,9 @@ LibLAMEWrapper::LibLAMEWrapper(Info *i) // lame_set_num_samples(gfp, SAMPLES); // lame_set_num_samples(gfp, 0); - lame_set_quality(gfp, config->readInt("mp3_quality")); + lame_set_quality(gfp, MIaV::config->readInt("mp3_quality")); lame_set_mode(gfp, STEREO); - lame_set_brate(gfp, config->readInt("mp3_bitrate")); + lame_set_brate(gfp, MIaV::config->readInt("mp3_bitrate")); lame_set_strict_ISO(gfp, 1); diff --git a/server/miav_daemon.cc b/server/miav_daemon.cc index 500e92a..06c6c3e 100644 --- a/server/miav_daemon.cc +++ b/server/miav_daemon.cc @@ -44,11 +44,12 @@ MiavDaemon::~MiavDaemon() int MiavDaemon::daemon_main() { - MiavConfig cfg(ETC"/miav.conf", NULL); - InfoConsole info(&cfg); - config = new MiavConfig(ETC"/miav.conf", &info); + MiavConfig config(ETC"/miav.conf"); + MIaV::initConfig(&config); + + InfoConsole info(&config); - int port = config->readInt("server_port"); + int port = MIaV::config->readInt("server_port"); pid_t childpid; // variable to store the child's pid signal(SIGCLD, SIG_IGN); // Ved SIGCHILD til IGNORE maa wait/waitpid ikke kaldes diff --git a/server/miav_server.cc b/server/miav_server.cc index 5b5a29d..2005afd 100644 --- a/server/miav_server.cc +++ b/server/miav_server.cc @@ -41,7 +41,7 @@ int main(int argc, char *argv[]) { MiavDaemon daemon; - MiavConfig cfg(ETC"/miav.conf", NULL); + MiavConfig cfg(ETC"/miav.conf"); string *user = cfg.readString("server_user"); string *group = cfg.readString("server_group"); diff --git a/server/mov_encoder.cc b/server/mov_encoder.cc index 0c97e18..e9049a6 100644 --- a/server/mov_encoder.cc +++ b/server/mov_encoder.cc @@ -100,7 +100,7 @@ void MovEncoder::thread_main() *running = false; // Kick them sleepy ones so they get the message. - int threads = config->readInt("encoding_threads") - 1; // -1 cause we only need the others! + int threads = MIaV::config->readInt("encoding_threads") - 1; // -1 cause we only need the others! for(int cnt = 0; cnt < threads; cnt++) { inputqueue->push(NULL); } @@ -230,7 +230,7 @@ void MovEncoder::thread_main() *running = false; // Kick them sleepy ones so they get the message. - int threads = config->readInt("encoding_threads"); + int threads = MIaV::config->readInt("encoding_threads"); for(int cnt = 0; cnt < threads; cnt++) sem_post(input_sem); } // Encode video diff --git a/server/mov_encoder_thread.cc b/server/mov_encoder_thread.cc index 2ff013d..c0b8b27 100644 --- a/server/mov_encoder_thread.cc +++ b/server/mov_encoder_thread.cc @@ -50,11 +50,11 @@ MovEncoderThread::MovEncoderThread(const char *clientip, const char *cpr, Info * block = new FrameVector(); - num_frames_in_block = config->readString("frame_sequence")->length(); + num_frames_in_block = MIaV::config->readString("frame_sequence")->length(); info->info("Frame sequence length %d", num_frames_in_block); - threads = config->readInt("encoding_threads"); + threads = MIaV::config->readInt("encoding_threads"); movencodersrunning = true; diff --git a/server/mov_encoder_writer.cc b/server/mov_encoder_writer.cc index 1773527..d3eb0ef 100644 --- a/server/mov_encoder_writer.cc +++ b/server/mov_encoder_writer.cc @@ -64,7 +64,7 @@ MovEncoderWriter::MovEncoderWriter(const char *clientip, const char* cpr, char date[32]; // Get server root - server_root = config->readString("server_movie_root"); + server_root = MIaV::config->readString("server_movie_root"); // Copy the bytes representing the birth month from the cpr // [dd][mm][yy]-[nn][nn] diff --git a/server/multicast.cc b/server/multicast.cc index 0072c19..dd12c27 100644 --- a/server/multicast.cc +++ b/server/multicast.cc @@ -59,7 +59,7 @@ Multicast::Multicast(Info *i, mcastconf_t &mcclientconf) mcclientconf.addr.c_str(), mcclientconf.port); - int mtu = config->readInt("udp_packet_size"); + int mtu = MIaV::config->readInt("udp_packet_size"); // Create buffer with the size of MTU // socklen_t mtu_sz; diff --git a/server/multicast_configuration.cc b/server/multicast_configuration.cc index 969faca..f4e7414 100644 --- a/server/multicast_configuration.cc +++ b/server/multicast_configuration.cc @@ -28,7 +28,7 @@ #include "multicast_configuration.h" MulticastConfiguration::MulticastConfiguration(Info *info, char *file) - : MiavConfig(file, info) + : MiavConfig(file) { mcastconf_t conf; diff --git a/tools/MIaVAdd b/tools/MIaVAdd index 0fc0bd3..bb342b7 100755 --- a/tools/MIaVAdd +++ b/tools/MIaVAdd @@ -6,7 +6,7 @@ function allfile() { echo " * $1" >> $1; echo " *" >> $1 ; echo " * `date`" >> $1; - echo " * Copyright 2005 Bent Bisballe Nyeng" >> $1; + echo " * Copyright 2006 Bent Bisballe Nyeng" >> $1; echo " * deva@aasimon.org" >> $1; echo " ****************************************************************************/" >> $1; echo "" >> $1; |