summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--TODO6
-rw-r--r--configure.in166
-rw-r--r--src/decoder.cc3
-rw-r--r--src/decoder.h4
-rw-r--r--src/encoder.cc4
-rw-r--r--src/encoder.h3
-rw-r--r--src/mainwindow.cc8
-rw-r--r--src/mainwindow.h2
-rw-r--r--src/messagebox.cc4
-rw-r--r--src/messagebox.h5
-rw-r--r--src/miav.conf2
-rw-r--r--src/miav_config.cc65
-rw-r--r--src/miav_config.h8
13 files changed, 120 insertions, 160 deletions
diff --git a/TODO b/TODO
index 5133296..1bbef10 100644
--- a/TODO
+++ b/TODO
@@ -16,6 +16,7 @@ Mainwindow:
[x] - Make generic gui layout code.
[x] - Make icons.
[x] - Make statusbar.
+ [ ] - Make flashing record bar.
[ ] - Show network connection in statusbar.
[ ] - Show camera connection in statusbar.
[ ] - Test it.
@@ -33,8 +34,8 @@ Decoder:
[ ] - Enable sound decoding for the network stream.
Camera:
- [ ] - Add initialize method (constructor should do nothing).
- [ ] - Add getStatus methods.
+ [x] - Add initialize method (constructor should do nothing).
+ [%] - Add getStatus methods. (implemented through error object)
==========================================================================
TASKS (server)
@@ -58,6 +59,7 @@ Makesystem:
[x] - Make server standalone compilable (through flag to configure)
[x] - Include pixmaps and tools in distdir.
[x] - Make pixmaps correctly intalled.
+ [ ] - Make QT link correctly on fedora core 1
MiavConfig:
[x] - Integrate file parser.
diff --git a/configure.in b/configure.in
index cb5514d..d53a1aa 100644
--- a/configure.in
+++ b/configure.in
@@ -1,4 +1,4 @@
-# Filnavn: configure.in
+# Filename: configure.in
AC_INIT(src/miav.cc)
AM_INIT_AUTOMAKE( miav, 0.1.1 )
@@ -12,142 +12,37 @@ AM_CXXFLAGS="-O2"
AC_STDC_HEADERS
AC_ARG_WITH(gui, [ --without-gui build without GUI support])
- if test x$with_gui != xno && test -z "$GUI"; then
-#dnl ====================
-#dnl Check for Qt library
-#dnl ====================
-#AC_ARG_WITH(qt, [ --with-qt build with Qt utils. (autodetected)],
-# [], with_qt=yes)
-#dnl no X means no Qt
-#test x$have_x != xyes && with_qt=no
-#
-#if test x$with_qt = xyes ; then
-# AC_PATH_QT(200, test -z "$qt_version" && qt_version=0
-# AC_DEFINE_UNQUOTED(HAVE_LIBQT, $qt_version, [Define if using 'Qt' libraries.]),
-# with_qt=no)
-#else
-# AC_MSG_RESULT([compilation of Qt utils disabled])
-#fi
-#
-#if test x$with_qt = xyes ; then
-# AC_LANG_SAVE
-# AC_LANG_CPLUSPLUS
-# save_CXXFLAGS=$CXXFLAGS
-# save_LIBS=$LIBS
-# CXXFLAGS="$CXXFLAGS $QT_CFLAGS $X_CFLAGS"
-# LIBS="$LIBS $QT_LIBS $X_LIBS $PTHREAD_LIBS"
-# AC_CACHE_CHECK([for multithreading support in Qt],
-# ac_cv_val_with_qt_multi,
-# [ AC_TRY_LINK([
-# #define QT_THREAD_SUPPORT
-# #include <qapplication.h> ],
-# [ qApp->wakeUpGuiThread(); ],
-# [ ac_cv_val_with_qt_multi=yes ],
-# [ ac_cv_val_with_qt_multi=no ])
-# ])
-# CXXFLAGS=$save_CXXFLAGS
-# LIBS=$save_LIBS
-#
-# if test x$ac_cv_val_with_qt_multi != xyes ; then
-# AC_MSG_WARN([
-#*** Your Qt installation does not support multi-threading!
-#*** Avifile will be compiled - however it might crash mysteriously
-#*** Instalation of threaded Qt library version (qt-mt) is recommended
-#*** When rebuilding Qt use configure option '-thread'.])
-# fi
-#
-# AC_MSG_CHECKING(Qt version for Avicap)
-# if test $qt_version -ge 220 ; then
-# AC_MSG_RESULT([yes])
-# else
-# AC_MSG_RESULT([no (needs Qt 2.2.0 or better)])
-# build_avicap=no
-# fi
-# AC_LANG_RESTORE
-#fi
-
+if test x$with_gui != xno && test -z "$GUI"; then
+ dnl =====================
+ dnl Check for QT library
+ dnl =====================
+ gw_CHECK_QT
+ CXXFLAGS="$CXXFLAGS $QT_CXXLAGS"
+ LDFLAGS="$LDFLAGS $QT_LDADD"
+
+ dnl =====================
+ dnl Check for SDL library
+ dnl =====================
+ SDL_VERSION=1.2.0
+ AM_PATH_SDL($SDL_VERSION,:,AC_MSG_ERROR([*** SDL version $SDL_VERSION not found!]))
+ CXXFLAGS="$CXXFLAGS $SDL_CFLAGS"
+ LDFLAGS="$LDFLAGS $SDL_LIBS"
+
+ dnl Make code aware of the gui
+ AC_DEFINE([USE_GUI], [], [Is defined if the project is configured to compile with gui])
+else
+ AC_MSG_WARN([*** Building without GUI support!])
+fi
dnl ======================
dnl Check for Jpeg library
dnl ======================
-AC_CHECK_HEADER(jpeglib.h, have_jpeglib=yes, have_jpeglib="no ")
-if test x$have_jpeglib = xyes; then
-dnl default action left - saving $LIBS is necessary
- save_LIBS=$LIBS
- AC_CHECK_LIB(jpeg, jpeg_start_compress, , have_jpeglib="no ")
- LIBS=$save_LIBS
-fi
-
-#dnl =====================
-#dnl Check for SDL library
-#dnl =====================
-#AC_ARG_WITH(sdl, [ --with-sdl build with SDL. (autodetected)],
-# [], with_sdl=yes)
-#
-#if test x$with_sdl != xyes; then
-# with_sdl="no (video rendering unavailable as requested!)"
-# AC_MSG_WARN([
-#*** there will be NO video rendering without SDL support!])
-#else
-# SDL_MIN_VERSION=1.0.0
-# save_CFLAGS=$CFLAGS
-# save_CPPFLAGS=$CPPFLAGS
-# save_LIBS=$LD_FLAGS
-# LIBS=
-# AM_PATH_SDL($SDL_MIN_VERSION,
-# AC_DEFINE(HAVE_LIBSDL, 1, [Define if using 'SDL' library (-lsdl).]),
-# with_sdl="no (*** no SDL => no video rendering! ***)"
-# AC_MSG_WARN([Could not find SDL >= $SDL_MIN_VERSION!]) )
-# CFLAGS=$save_CFLAGS
-# CXXFLAGS=$save_CPPFLAGS
-# LDFLAGS="$save_LIBS
-#fi
-
- dnl QT lib check macro (located in acinclude.m4)
- gw_CHECK_QT
- CXXFLAGS="$CXXFLAGS $QT_CXXLAGS"
- LDFLAGS="$LDFLAGS $QT_LDADD"
-
- dnl Check for SDL
- SDL_VERSION=1.2.0
- AM_PATH_SDL($SDL_VERSION,
- :,
- AC_MSG_ERROR([*** SDL version $SDL_VERSION not found!])
- )
- CXXFLAGS="$CXXFLAGS $SDL_CFLAGS"
- LDFLAGS="$LDFLAGS $SDL_LIBS"
-
- dnl Make code aware of the gui
- AC_DEFINE([USE_GUI], [], [Is defined if te project is configured to compile with gui])
- fi
-
-dnl =======================
-dnl Configure ffmpeg plugin
-dnl =======================
-#AM_PATH_FFMPEG
-
-#LD_FLAGS=$LD_FLAGS $LIBS
-
-# And now for the conditionals (for ffmpeg)
-#AM_CONDITIONAL(AMM_LINK_SHARED, test $lt_major_version -ge 1 -a $lt_minor_version -ge 4 -a $lt_micro_version -ge 3 )
-#AM_CONDITIONAL(AMM_FF_A52BIN, test x$enable_ffmpeg_a52bin = xyes)
-#AM_CONDITIONAL(AMM_FF_FAAD, test x$have_faad = xyes )
-#AM_CONDITIONAL(AMM_FF_ALPHAOPT, test x$enable_alphaopt = xyes)
-#AM_CONDITIONAL(AMM_FF_ARMOPT, test x$enable_armopt = xyes)
-#AM_CONDITIONAL(AMM_FF_MIPSOPT, test x$enable_mipsopt = xyes)
-#AM_CONDITIONAL(AMM_FF_MLIBOPT, test x$enable_mlibopt = xyes)
-#AM_CONDITIONAL(AMM_FF_PPCOPT, test x$enable_ppcopt = xyes)
-#AM_CONDITIONAL(AMM_FF_PS2OPT, test x$enable_ps2opt = xyes)
-#AM_CONDITIONAL(AMM_FF_SH4OPT, test x$enable_sh4opt = xyes)
-#AM_CONDITIONAL(AMM_FF_X86OPT, test x$enable_x86opt = xyes)
-#AM_CONDITIONAL(AMM_USE_OSS, test x$enable_oss = xyes)
-#AM_CONDITIONAL(AMM_USE_V4L, test x$enable_v4l = xyes )
-
+AC_CHECK_HEADER(jpeglib.h, , AC_MSG_ERROR([*** LibJpeg not found!]))
+AC_CHECK_LIB(jpeg, jpeg_start_compress, , AC_MSG_ERROR([*** LibJpeg not found!]))
AC_SUBST(CFLAGS)
AC_SUBST(CPPFLAGS)
AC_SUBST(CXXFLAGS)
-
AC_SUBST(LDFLAGS)
AC_OUTPUT(
@@ -155,16 +50,3 @@ AC_OUTPUT(
src/Makefile
tools/Makefile
pixmaps/Makefile)
-# ffmpeg/Makefile
-# ffmpeg/libavformat/Makefile
-# ffmpeg/libavcodec/Makefile
-# ffmpeg/libavcodec/alpha/Makefile
-# ffmpeg/libavcodec/armv4l/Makefile
-# ffmpeg/libavcodec/i386/Makefile
-# ffmpeg/libavcodec/liba52/Makefile
-# ffmpeg/libavcodec/libpostproc/Makefile
-# ffmpeg/libavcodec/mlib/Makefile
-# ffmpeg/libavcodec/ppc/Makefile
-# ffmpeg/libavcodec/ps2/Makefile
-# ffmpeg/libavcodec/sh4/Makefile
-# )
diff --git a/src/decoder.cc b/src/decoder.cc
index bf9b75c..c7a4e50 100644
--- a/src/decoder.cc
+++ b/src/decoder.cc
@@ -21,6 +21,7 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include <config.h>
+#ifdef USE_GUI
#include "decoder.h"
@@ -179,3 +180,5 @@ void Decoder::decode()
void Decoder::run() {
decode();
}
+
+#endif /*USE_GUI*/
diff --git a/src/decoder.h b/src/decoder.h
index 846ac26..fcf61cf 100644
--- a/src/decoder.h
+++ b/src/decoder.h
@@ -20,6 +20,8 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include <config.h>
+#ifdef USE_GUI
+
#ifndef __RTVIDEOREC_DECODER_H
#define __RTVIDEOREC_DECODER_H
@@ -68,3 +70,5 @@ public:
};
#endif
+
+#endif/*USE_GUI*/
diff --git a/src/encoder.cc b/src/encoder.cc
index fc19921..3a4ade2 100644
--- a/src/encoder.cc
+++ b/src/encoder.cc
@@ -22,6 +22,8 @@
*/
#include <config.h>
+#ifdef USE_GUI
+
#include "encoder.h"
Encoder::Encoder(Error* err,
@@ -154,3 +156,5 @@ void Encoder::stop() {
n = NULL;
}
}
+
+#endif /*USE_GUI*/
diff --git a/src/encoder.h b/src/encoder.h
index 8a458c8..554839c 100644
--- a/src/encoder.h
+++ b/src/encoder.h
@@ -20,6 +20,8 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include <config.h>
+#ifdef USE_GUI
+
#ifndef __RTVIDEOREC_ENCODER_H
#define __RTVIDEOREC_ENCODER_H
@@ -96,3 +98,4 @@ private:
#endif
+#endif /*USE_GUI*/
diff --git a/src/mainwindow.cc b/src/mainwindow.cc
index 5da340b..8bfc53e 100644
--- a/src/mainwindow.cc
+++ b/src/mainwindow.cc
@@ -50,9 +50,15 @@
MainWindow::MainWindow( QWidget* parent, const char* name )
: QWidget( parent, name, WStyle_Customize | WStyle_NoBorder )
{
- MiavConfig cfg("miav.conf");
+ error = new Error();
+ MiavConfig cfg("miav.conf", error);
int resolution_w = cfg.readInt("pixel_width");
int resolution_h = cfg.readInt("pixel_height");
+ while(error->hasError()) {
+ show();
+ MessageBox(this, TXT_ERROR_TITLE, error->popErrorString().c_str(),
+ TYPE_OK, ICON_ERROR).exec();
+ }
unit = ((float)resolution_w / (float)(cfg.readFloat("screensize") * 3.1f));
move(0,0);
diff --git a/src/mainwindow.h b/src/mainwindow.h
index 18f616d..25a938b 100644
--- a/src/mainwindow.h
+++ b/src/mainwindow.h
@@ -82,6 +82,8 @@ public slots:
void freeze_clicked();
private:
+ Error *error;
+
void checkErrors();
void createGui();
diff --git a/src/messagebox.cc b/src/messagebox.cc
index fe5420f..63bbeee 100644
--- a/src/messagebox.cc
+++ b/src/messagebox.cc
@@ -22,7 +22,8 @@
* along with this program; 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 "messagebox.h"
////////////////////////////////////////////////////////////////////////////////////////
@@ -184,3 +185,4 @@ void MessageBox::bno_clicked()
{
done(MSG_NO);
}
+#endif/*USE_GUI*/
diff --git a/src/messagebox.h b/src/messagebox.h
index 5cb2bd8..313d395 100644
--- a/src/messagebox.h
+++ b/src/messagebox.h
@@ -23,6 +23,9 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
+#include <config.h>
+#ifdef USE_GUI
+
#ifndef __MIAV_MESSAGEBOX_H__
#define __MIAV_MESSAGEBOX_H__
@@ -98,3 +101,5 @@ private:
};
#endif/*__MIAV_MESSAGEBOX_H__*/
+
+#endif /*USE_GUI*/
diff --git a/src/miav.conf b/src/miav.conf
index 3fab263..ba2ceda 100644
--- a/src/miav.conf
+++ b/src/miav.conf
@@ -3,6 +3,8 @@
#
# Cpr Database configuration
+fisk =
+ = true
cpr_host = "cpr.j.auh.dk"
cpr_port = 10301
cpr_timeout = 10000
diff --git a/src/miav_config.cc b/src/miav_config.cc
index 1c2d0c6..8a9307d 100644
--- a/src/miav_config.cc
+++ b/src/miav_config.cc
@@ -26,15 +26,20 @@
#include <config.h>
#include "miav_config.h"
-MiavConfig::MiavConfig(char *file)
+MiavConfig::MiavConfig(char *file, Error* err)
{
+ error = err;
configs = NULL;
+
+ filename = string(file);
// Read config file
FILE* fp = fopen(file, "r");
if(!fp) {
- fprintf(stderr, "Error reading configuration file %s\n", file);
+ char errbuf[256];
+ sprintf(errbuf, "Error reading configuration file %s\n", file);
+ if(error) error->pushError(errbuf);
return;
}
fseek(fp, 0, SEEK_END);
@@ -63,16 +68,39 @@ MiavConfig::~MiavConfig()
if(die) free(die);
}
+/**
+ * Prints a reasonable error message when a parse error occurres.
+ */
+_cfg *MiavConfig::parseError(char* msg, char* line)
+{
+ char errbuf[512];
+ sprintf(errbuf, "Error parsing file %s at line:\n\t%s\n\t%s\n", filename.c_str(), line, msg);
+ if(error) error->pushError(errbuf);
+ return NULL;
+}
+
/**
* Adds one configuration entry, from a single zero terminated line.
*/
_cfg *MiavConfig::addConfig(_cfg *parent, char* conf)
{
+ // Check for wellformed input:
+ // Check for =
+ if(strstr(conf, "=") == 0) return parseError("Missing '='", conf);
+ /*
+ if(strstr(conf, "\"")) {
+ if(strstr(conf, "=") > strstr(conf, "\""))
+ return parseError("Missing '=', first occurrence inside string", conf);
+ }
+ */
- //
- // FIXME: Check for wellformedness
- //
+ // Check for nonempty left side
+ if(strstr(conf, "=") == conf) return parseError("Empty left side", conf);
+ // Check for nonempty right side
+ if(strstr(conf, "=") == conf + strlen(conf) - 1) return parseError("Empty right side.", conf);
+
+ // Parse this wellformed input.
_cfg *cfg;
cfg = (_cfg*) malloc(sizeof(_cfg));
@@ -86,6 +114,8 @@ _cfg *MiavConfig::addConfig(_cfg *parent, char* conf)
char* val = (char*)calloc(vallen + 1, 1);
strncpy(val, conf + strlen(conf) - vallen, vallen);
+ // TODO: Check valid rightside (true, false, number or "..")
+
cfg->name = new string((const char*)name);
free(name);
@@ -118,13 +148,12 @@ int MiavConfig::parse(char* raw)
for(p = conf; p < conf_end; p++) {
if(*p == '\n') {
*p = '\0';
- cfg = addConfig(cfg, start);
+ if(!(cfg = addConfig(cfg, start))) return 1;
start = p+1;
}
}
// Allocated in strip
free(conf);
- printf("done!\n");
return 0;
}
@@ -186,22 +215,30 @@ char* MiavConfig::strip(char* conf)
int MiavConfig::readInt(char *node)
{
- return findNode(node)->intval;
+ _cfg* n = findNode(node);
+ if(n) return n->intval;
+ else return 0;
}
bool MiavConfig::readBool(char *node)
{
- return findNode(node)->boolval;
+ _cfg* n = findNode(node);
+ if(n) return n->boolval;
+ else return false;
}
string *MiavConfig::readString(char *node)
{
- return findNode(node)->stringval;
+ _cfg* n = findNode(node);
+ if(n) return n->stringval;
+ else return &emptyString;
}
float MiavConfig::readFloat(char *node)
{
- return findNode(node)->floatval;
+ _cfg* n = findNode(node);
+ if(n) return n->floatval;
+ else return 0.0f;
}
_cfg *MiavConfig::findNode(char* node)
@@ -212,6 +249,8 @@ _cfg *MiavConfig::findNode(char* node)
if(!strcmp(node, cfg->name->c_str())) return cfg;
cfg = cfg->next;
}
- fprintf(stderr, "ERROR: Request for nonexisting node \"%s\"!\n", node);
- exit(1);
+ char errbuf[256];
+ sprintf(errbuf, "Request for nonexisting node \"%s\"!\n", node);
+ if(error) error->pushError(errbuf);
+ return NULL;
}
diff --git a/src/miav_config.h b/src/miav_config.h
index 1ca6e04..45eab0c 100644
--- a/src/miav_config.h
+++ b/src/miav_config.h
@@ -30,6 +30,8 @@
#include <string>
using namespace std;
+#include "error.h"
+
typedef struct __cfg {
string *name;
bool boolval;
@@ -41,7 +43,7 @@ typedef struct __cfg {
class MiavConfig {
public:
- MiavConfig(char *file);
+ MiavConfig(char *file, Error* err = NULL);
~MiavConfig();
int readInt(char *node);
@@ -50,9 +52,13 @@ public:
float readFloat(char *node);
private:
+ string emptyString;
+ Error* error;
+ string filename;
_cfg *addConfig(_cfg *parent, char* conf);
int parse(char* conf);
char *strip(char* conf);
+ _cfg *parseError(char* msg, char* line);
_cfg *findNode(char* node);
_cfg *configs;
};