diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/Makefile.am | 4 | ||||
| -rw-r--r-- | src/daemon.cc | 6 | ||||
| -rw-r--r-- | src/file.cc | 10 | ||||
| -rw-r--r-- | src/img_file.cc | 42 | ||||
| -rw-r--r-- | src/img_file.h | 43 | ||||
| -rw-r--r-- | src/info.cc | 12 | ||||
| -rw-r--r-- | src/info.h | 7 | ||||
| -rw-r--r-- | src/info_console.cc | 17 | ||||
| -rw-r--r-- | src/info_console.h | 4 | ||||
| -rw-r--r-- | src/info_gui.cc | 13 | ||||
| -rw-r--r-- | src/info_gui.h | 4 | ||||
| -rw-r--r-- | src/mainwindow.cc | 5 | ||||
| -rw-r--r-- | src/miav.cc | 10 | ||||
| -rw-r--r-- | src/miav_config.cc | 17 | ||||
| -rw-r--r-- | src/miav_config.h | 9 | ||||
| -rw-r--r-- | src/miav_daemon.cc | 15 | ||||
| -rw-r--r-- | src/mov_encoder.cc | 18 | ||||
| -rw-r--r-- | src/mov_encoder.h | 10 | ||||
| -rw-r--r-- | src/mov_encoder_thread.cc | 16 | ||||
| -rw-r--r-- | src/mov_encoder_thread.h | 9 | ||||
| -rw-r--r-- | src/mov_encoder_writer.cc | 103 | ||||
| -rw-r--r-- | src/mov_encoder_writer.h | 17 | ||||
| -rw-r--r-- | src/mov_file.cc | 42 | ||||
| -rw-r--r-- | src/mov_file.h | 43 | ||||
| -rw-r--r-- | src/server.cc | 31 | ||||
| -rw-r--r-- | src/server.h | 17 | 
26 files changed, 188 insertions, 336 deletions
| diff --git a/src/Makefile.am b/src/Makefile.am index 9c7d187..0afb24a 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -16,7 +16,6 @@ miav_SOURCES = $(shell  if [ $QT_CXXFLAGS ] ; then ../tools/MocList cc; fi ) \  	file.cc \  	frame.cc \  	img_encoder.cc \ -	img_file.cc \  	info.cc \  	info_console.cc \  	info_gui.cc \ @@ -28,7 +27,6 @@ miav_SOURCES = $(shell  if [ $QT_CXXFLAGS ] ; then ../tools/MocList cc; fi ) \  	mov_encoder.cc \  	mov_encoder_thread.cc \  	mov_encoder_writer.cc \ -	mov_file.cc \  	network.cc \  	player.cc \  	server.cc \ @@ -51,7 +49,6 @@ EXTRA_DIST = \  	file.h \  	frame.h \  	img_encoder.h \ -	img_file.h \  	info.h \  	info_console.h \  	info_gui.h \ @@ -63,7 +60,6 @@ EXTRA_DIST = \  	mov_encoder.h \  	mov_encoder_thread.h \  	mov_encoder_writer.h \ -	mov_file.h \  	network.h \  	package.h \  	player.h \ diff --git a/src/daemon.cc b/src/daemon.cc index 95cf0df..e80af78 100644 --- a/src/daemon.cc +++ b/src/daemon.cc @@ -40,7 +40,7 @@ Daemon::~Daemon()  int Daemon::run(uid_t uid, gid_t gid)  {    int f; -  int fd; +  //  int fd;    chdir("/");    umask(0); @@ -62,13 +62,13 @@ int Daemon::run(uid_t uid, gid_t gid)        fprintf(stderr, "Failed to change to uid %d, quitting.\n", uid);        return 1;      } - +    /* // Redirect stdin, stdout and stderr to /dev/null      fd = open("/dev/null", O_NOCTTY | O_RDWR, 0666);      dup2(0, fd);      dup2(1, fd);      dup2(2, fd); - +    */      setsid();      signal (SIGTERM, SIG_IGN); diff --git a/src/file.cc b/src/file.cc index 1a94150..813a041 100644 --- a/src/file.cc +++ b/src/file.cc @@ -31,6 +31,9 @@  /*   * $Log$ + * Revision 1.3  2005/06/14 12:29:40  deva + * Incorporated the use of the Info object everywhere... also using the log functionality. + *   * Revision 1.2  2005/06/13 20:38:19  deva   * Added some logfile code.   * Enhanced the file object... now ready to hook into mov_encoder @@ -120,7 +123,7 @@ int File::Open()    seqnum ++; -  info->log("Opened the file %s for output.\n", fname); +  info->log("Opened the file %s for output.", fname);    return 0;  } @@ -137,7 +140,7 @@ int File::Write(void* data, int size)      w = write(fd, data, size);      if(w != size) {        info->error("Out of diskspace!\n"); -      exit(1); +      return -1;      }    } @@ -155,13 +158,14 @@ int File::createPath(char* path)    subpath[strrchr(subpath, '/') - subpath] = '\0'; -  printf("%s\n", path); +  info->info("Checking and/or generating directory: %s", path);    if(strlen(subpath) > 0) createPath(subpath);    //  stat(path, &stats);    //if(!S_ISDIR(stats.st_mode) && S_ISREG(stats.st_mode))     mkdir(path, S_IRWXU | S_IRGRP | S_IXGRP | S_IXOTH | S_IROTH); +  // TODO: Check for creation errors!    free(subpath); diff --git a/src/img_file.cc b/src/img_file.cc deleted file mode 100644 index a91aca0..0000000 --- a/src/img_file.cc +++ /dev/null @@ -1,42 +0,0 @@ -/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/*************************************************************************** - *            img_file.cc - * - *  Thu Jun  9 15:30:30 CEST 2005 - *  Copyright  2005 Bent Bisballe - *  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. - */ - -/* - * $Id$ - */ - -/* - * $Log$ - * Revision 1.1  2005/06/09 17:54:00  deva - * New file object, that takes care of uniqueness and counts up number in - * filename, when grown too big. - * - */ - -#include <config.h> -#include "img_file.h" - diff --git a/src/img_file.h b/src/img_file.h deleted file mode 100644 index a1d9262..0000000 --- a/src/img_file.h +++ /dev/null @@ -1,43 +0,0 @@ -/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/*************************************************************************** - *            img_file.h - * - *  Thu Jun  9 15:30:30 CEST 2005 - *  Copyright  2005 Bent Bisballe - *  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. - */ - -/* - * $Id$ - */ - -/* - * $Log$ - * Revision 1.1  2005/06/09 17:54:00  deva - * New file object, that takes care of uniqueness and counts up number in - * filename, when grown too big. - * - */ - -#include <config.h> -#ifndef __MIAV_IMG_FILE_H__ -#define __MIAV_IMG_FILE_H__ -#endif/*__MIAV_IMG_FILE_H__*/ diff --git a/src/info.cc b/src/info.cc index 4278326..56d1dfd 100644 --- a/src/info.cc +++ b/src/info.cc @@ -31,6 +31,9 @@  /*   * $Log$ + * Revision 1.2  2005/06/14 12:29:40  deva + * Incorporated the use of the Info object everywhere... also using the log functionality. + *   * Revision 1.1  2005/06/13 20:38:19  deva   * Added some logfile code.   * Enhanced the file object... now ready to hook into mov_encoder @@ -40,6 +43,8 @@  #include <config.h>  #include "info.h" +#include <time.h> +  Info::Info() {    pthread_mutex_init (&mutex, NULL);  } @@ -65,7 +70,12 @@ void Info::log(char *fmt, ...)    va_end(argp);    time_t t = time(NULL); -  fprintf(fp, "%s miav[%d]", ctime(&t), buf, getpid()); +  char sdate[32]; +  memset(sdate, 0, sizeof(sdate)); +  strftime(sdate, sizeof(sdate), "%d %b %H:%M:%S", localtime(&t)); + +  fprintf(fp, "%s miav[%d] %s\n", sdate, getpid(), buf); +  fprintf(stderr, "%s miav[%d] %s\n", sdate, getpid(), buf);    fclose(fp); @@ -37,6 +37,10 @@  #ifndef __MIAV_INFO_H__  #define __MIAV_INFO_H__ +#include "miav_config.h" +// Cyclic include :( +class MiavConfig; +  #include <time.h>  #include <sys/types.h>  #include <unistd.h> @@ -49,7 +53,6 @@ using namespace std;  class Info {  public:    Info(); -    virtual ~Info() {}    virtual void error(char* fmt, ...) = 0; @@ -58,6 +61,8 @@ public:    void log(char* fmt, ...);  protected: +  MiavConfig *config; +    pthread_mutex_t mutex;    string log_filename;  }; diff --git a/src/info_console.cc b/src/info_console.cc index f703a3f..a860dd8 100644 --- a/src/info_console.cc +++ b/src/info_console.cc @@ -41,9 +41,10 @@  #include <stdio.h>  #include <stdarg.h> -InfoConsole::InfoConsole(): Info() +InfoConsole::InfoConsole(MiavConfig *c): Info()  { -  log_filename = *config->readString("server_log_file"); +  this->config = c; +  log_filename = *(this->config->readString("server_log_file"));  }  InfoConsole::~InfoConsole() @@ -60,12 +61,14 @@ void InfoConsole::error(char *fmt, ...)  	va_list argp;  	va_start(argp, fmt); -  fprintf(stderr, "Error: ["); vfprintf(stderr, fmt, argp); fprintf(stderr, "]\n"); fflush(stderr); +  //  fprintf(stderr, "Error: ["); vfprintf(stderr, fmt, argp); fprintf(stderr, "]\n"); fflush(stderr);  	vsprintf(buf, fmt, argp);  	va_end(argp);    // End of safezone    pthread_mutex_unlock(&mutex); + +  log("Error: %s", buf);  }  void InfoConsole::warn(char *fmt, ...) @@ -77,12 +80,14 @@ void InfoConsole::warn(char *fmt, ...)  	va_list argp;  	va_start(argp, fmt); -  fprintf(stderr, "Warning: ["); vfprintf(stderr, fmt, argp); fprintf(stderr, "]\n"); fflush(stderr); +  //  fprintf(stderr, "Warning: ["); vfprintf(stderr, fmt, argp); fprintf(stderr, "]\n"); fflush(stderr);  	vsprintf(buf, fmt, argp);  	va_end(argp);    // End of safezone    pthread_mutex_unlock(&mutex); + +  log("Warning: %s", buf);  }  void InfoConsole::info(char *fmt, ...) @@ -94,10 +99,12 @@ void InfoConsole::info(char *fmt, ...)  	va_list argp;  	va_start(argp, fmt); -  fprintf(stderr, "Info: ["); vfprintf(stderr, fmt, argp); fprintf(stderr, "]\n"); fflush(stderr); +  //  fprintf(stderr, "Info: ["); vfprintf(stderr, fmt, argp); fprintf(stderr, "]\n"); fflush(stderr);  	vsprintf(buf, fmt, argp);  	va_end(argp);    // End of safezone    pthread_mutex_unlock(&mutex); + +  log("Info: %s", buf);  } diff --git a/src/info_console.h b/src/info_console.h index 5422235..1447071 100644 --- a/src/info_console.h +++ b/src/info_console.h @@ -39,6 +39,8 @@  #include "info.h" +#include "miav_config.h" +  #include <pthread.h>  #include <semaphore.h> @@ -47,7 +49,7 @@ using namespace std;  class InfoConsole: public Info {  public: -  InfoConsole(); +  InfoConsole(MiavConfig *config);    ~InfoConsole();    void error(char* fmt, ...); diff --git a/src/info_gui.cc b/src/info_gui.cc index 2559402..0d7d701 100644 --- a/src/info_gui.cc +++ b/src/info_gui.cc @@ -38,8 +38,6 @@  #include "info_gui.h" -#include "miav_config.h" -  #include <stdio.h>  #include <stdarg.h> @@ -59,9 +57,10 @@ bool InfoEventHandler::eventFilter( QObject *o, QEvent *e )    }  } -InfoGui::InfoGui(QApplication *a, QWidget *p): Info() +InfoGui::InfoGui(QApplication *a, QWidget *p, MiavConfig *c): Info()  { -  log_filename = *config->readString("client_log_file"); +  this->config = c; +  log_filename = *(this->config->readString("client_log_file"));    qapp = a;    parent = p; @@ -118,6 +117,8 @@ void InfoGui::error(char *fmt, ...)  	va_end(argp);    showmsg(buf, TXT_ERROR_TITLE, ICON_ERROR); + +  log("Error: %s", buf);  }  void InfoGui::warn(char *fmt, ...) @@ -130,6 +131,8 @@ void InfoGui::warn(char *fmt, ...)  	va_end(argp);    showmsg(buf, TXT_WARNING_TITLE, ICON_WARNING); + +  log("Warning: %s", buf);  }  void InfoGui::info(char *fmt, ...) @@ -142,6 +145,8 @@ void InfoGui::info(char *fmt, ...)  	va_end(argp);    showmsg(buf, TXT_INFO_TITLE, ICON_INFO); + +  log("Info: %s", buf);  } diff --git a/src/info_gui.h b/src/info_gui.h index 44729c2..2ee3d63 100644 --- a/src/info_gui.h +++ b/src/info_gui.h @@ -45,6 +45,8 @@  #include "info.h" +#include "miav_config.h" +  #include <qwidget.h>  #include <qapplication.h> @@ -72,7 +74,7 @@ protected:  class InfoGui: public Info {  public: -  InfoGui(QApplication *a, QWidget *p); +  InfoGui(QApplication *a, QWidget *p, MiavConfig *config);    ~InfoGui();    void error(char* fmt, ...); diff --git a/src/mainwindow.cc b/src/mainwindow.cc index c127585..9e5353d 100644 --- a/src/mainwindow.cc +++ b/src/mainwindow.cc @@ -31,6 +31,9 @@  /*   * $Log$ + * Revision 1.29  2005/06/14 12:29:40  deva + * Incorporated the use of the Info object everywhere... also using the log functionality. + *   * Revision 1.28  2005/06/02 20:45:01  deva   *   * Added clear button @@ -109,7 +112,7 @@  MainWindow::MainWindow(QApplication *qApp, QWidget* parent, const char* name )  	: QWidget( parent, name, WStyle_Customize | WStyle_NoBorder )  { -  info = new InfoGui(qApp, this); +  info = new InfoGui(qApp, this, config);    video_width = config->readInt("video_width");    video_height = config->readInt("video_height"); diff --git a/src/miav.cc b/src/miav.cc index 188b1d7..0f2feb3 100644 --- a/src/miav.cc +++ b/src/miav.cc @@ -31,6 +31,9 @@  /*   * $Log$ + * Revision 1.14  2005/06/14 12:29:40  deva + * Incorporated the use of the Info object everywhere... also using the log functionality. + *   * Revision 1.13  2005/06/09 11:00:03  deva   * Added daemon code, and cleaned up using -Wall and -Werror   * @@ -94,7 +97,8 @@ int grab(int argc, char *argv[]) {    QApplication miav_grab( argc, argv ); -  InfoGui info(&miav_grab, NULL); +  MiavConfig cfg(ETC"/miav.conf", NULL); +  InfoGui info(&miav_grab, NULL, &cfg);    config = new MiavConfig(ETC"/miav.conf", &info);    InfoEventHandler *eventhandler = new InfoEventHandler( ); @@ -121,11 +125,9 @@ int grab(int argc, char *argv[]) {   */  int server(int argc, char *argv[])  { -  InfoConsole info; -    MiavDaemon daemon; -  MiavConfig cfg(ETC"/miav.conf", &info); +  MiavConfig cfg(ETC"/miav.conf", NULL);    int uid = cfg.readInt("server_uid");    int gid = cfg.readInt("server_gid"); diff --git a/src/miav_config.cc b/src/miav_config.cc index 2839c5c..f7d56ce 100644 --- a/src/miav_config.cc +++ b/src/miav_config.cc @@ -31,6 +31,9 @@  /*   * $Log$ + * Revision 1.10  2005/06/14 12:29:40  deva + * Incorporated the use of the Info object everywhere... also using the log functionality. + *   * Revision 1.9  2005/06/09 11:00:03  deva   * Added daemon code, and cleaned up using -Wall and -Werror   * @@ -46,9 +49,9 @@  MiavConfig *config; -MiavConfig::MiavConfig(char *file, Info *ginfo) +MiavConfig::MiavConfig(char *file, Info *i)  { -  info = ginfo; +  info = i;    configs = NULL;    filename = string(file); @@ -57,7 +60,8 @@ MiavConfig::MiavConfig(char *file, Info *ginfo)    FILE* fp = fopen(file, "r");    if(!fp) { -    info->error("Error reading configuration file %s\n", file); +    if(info) info->error("Error reading configuration file %s\n", file); +    else fprintf(stderr, "Error reading configuration file %s\n", file);      return;    }    fseek(fp, 0, SEEK_END); @@ -91,7 +95,8 @@ MiavConfig::~MiavConfig()   */  _cfg *MiavConfig::parseError(char* msg, char* line)  { -  info->error("Error parsing file %s at line:\n\t%s\n\t%s\n", filename.c_str(), line, msg); +  if(info) info->error("Error parsing file %s at line:\n\t%s\n\t%s\n", filename.c_str(), line, msg); +  else fprintf(stderr, "Error parsing file %s at line:\n\t%s\n\t%s\n", filename.c_str(), line, msg);    return NULL;  } @@ -265,6 +270,8 @@ _cfg *MiavConfig::findNode(char* node)      if(!strcmp(node, cfg->name->c_str())) return cfg;      cfg = cfg->next;    } -  info->error("Request for nonexisting node \"%s\"!\n", node); +  if(info) info->error("Request for nonexisting node \"%s\"!\n", node); +  else fprintf(stderr, "Request for nonexisting node \"%s\"!\n", node); +    return NULL;  } diff --git a/src/miav_config.h b/src/miav_config.h index 5d1fa29..4bbcc59 100644 --- a/src/miav_config.h +++ b/src/miav_config.h @@ -31,6 +31,9 @@  /*   * $Log$ + * Revision 1.7  2005/06/14 12:29:40  deva + * Incorporated the use of the Info object everywhere... also using the log functionality. + *   * Revision 1.6  2005/05/03 08:31:59  deva   * Removed the error object, and replaced it with a more generic info object.   * @@ -46,6 +49,8 @@  using namespace std;  #include "info.h" +// Cyclic include :( +class Info;  typedef struct __cfg {    string *name; @@ -58,7 +63,7 @@ typedef struct __cfg {  class MiavConfig {  public: -  MiavConfig(char *file, Info* ginfo); +  MiavConfig(char *file, Info *info);    ~MiavConfig();    int readInt(char *node); @@ -66,8 +71,6 @@ public:    string *readString(char *node);    float readFloat(char *node); -  Info* getInfoObj(); -  private:    Info *info; diff --git a/src/miav_daemon.cc b/src/miav_daemon.cc index 633ab7d..2d679c3 100644 --- a/src/miav_daemon.cc +++ b/src/miav_daemon.cc @@ -31,6 +31,9 @@  /*   * $Log$ + * Revision 1.2  2005/06/14 12:29:40  deva + * Incorporated the use of the Info object everywhere... also using the log functionality. + *   * Revision 1.1  2005/06/09 11:00:03  deva   * Added daemon code, and cleaned up using -Wall and -Werror   * @@ -45,6 +48,9 @@  #include "server.h"  #include "socket.h" +#include <signal.h> +#include <errno.h> +  MiavDaemon::MiavDaemon()  {} @@ -53,7 +59,8 @@ MiavDaemon::~MiavDaemon()  int MiavDaemon::daemon_main()  { -  InfoConsole info; +  MiavConfig cfg(ETC"/miav.conf", NULL); +  InfoConsole info(&cfg);    config = new MiavConfig(ETC"/miav.conf", &info);    int port = config->readInt("server_port"); @@ -62,7 +69,7 @@ int MiavDaemon::daemon_main()    signal(SIGCLD, SIG_IGN);  // Ved SIGCHILD til IGNORE maa wait/waitpid ikke kaldes                               //   (ellers kommer der kernel-brok) -  printf("Listening on port %d\n", port); +  info.log("Listening on port %d", port);    Socket *socket = new Socket(port, &info);    while(1) { @@ -72,11 +79,11 @@ int MiavDaemon::daemon_main()        switch(childpid) {        case -1: // fork() returns -1 on failure -        perror("fork"); +        info.log("Fork error: %s", strerror(errno));          exit(1);        case 0: // fork() returns 0 to the child process          delete socket; // Close listen socket. -        newConnection(csocket); +        newConnection(csocket, &info);          delete csocket; // Close communication socket.          exit(0); diff --git a/src/mov_encoder.cc b/src/mov_encoder.cc index fff5600..3945040 100644 --- a/src/mov_encoder.cc +++ b/src/mov_encoder.cc @@ -39,6 +39,9 @@  /*   * $Log$ + * Revision 1.28  2005/06/14 12:29:40  deva + * Incorporated the use of the Info object everywhere... also using the log functionality. + *   * Revision 1.27  2005/06/09 11:00:03  deva   * Added daemon code, and cleaned up using -Wall and -Werror   * @@ -112,8 +115,11 @@  MovEncoder::MovEncoder(sem_t *r_sem,                         FrameVectorQueue *in, sem_t *in_sem, pthread_mutex_t *in_mutex, -                       FramePriorityQueue *out, sem_t *out_sem, pthread_mutex_t *out_mutex) +                       FramePriorityQueue *out, sem_t *out_sem, pthread_mutex_t *out_mutex, +                       Info *i)  { +  info = i; +    // FIXME: Hmmm... should this be detected somewhere?!    int w = 720;    int h = 576; @@ -147,7 +153,7 @@ MovEncoder::MovEncoder(sem_t *r_sem,    // can then be used for subsequent library calls.)    fame_context = fame_open();    if(!fame_context) { -    fprintf(stderr, "Unable to open FAME context, due to the following error: %s", strerror(errno)); +    info->error("Unable to open FAME context, due to the following error: %s", strerror(errno));      return;    } @@ -217,7 +223,7 @@ MovEncoder::MovEncoder(sem_t *r_sem,    if(strcmp(config->readString("encoding_codec")->c_str(), "mpeg4") == 0) { -    fprintf(stderr, "Using mpeg4 compression\n"); fflush(stderr); +    info->info("Using mpeg4 compression.");      fame_object_t *object;      object = fame_get_object(fame_context, "profile/mpeg4/simple"); @@ -225,7 +231,7 @@ MovEncoder::MovEncoder(sem_t *r_sem,    } else if(strcmp(config->readString("encoding_codec")->c_str(), "mpeg1") == 0) { -    fprintf(stderr, "Using mpeg1 compression\n"); fflush(stderr); +    info->info("Using mpeg1 compression.");      fame_object_t *object;      object = fame_get_object(fame_context, "profile/mpeg1"); @@ -233,7 +239,7 @@ MovEncoder::MovEncoder(sem_t *r_sem,    } else if(strcmp(config->readString("encoding_codec")->c_str(), "mpeg1") == 0) {    } else { -    fprintf(stderr, "Using default (mpeg1) compression\n"); fflush(stderr); +    info->info("Using default (mpeg1) compression.");    }    fame_init(fame_context, &fame_par, fame_buffer, FAME_BUFFER_SIZE); @@ -380,7 +386,7 @@ void MovEncoder::run()      // Unlock input mutex      if(!item) { -      fprintf(stderr, "\t\t\t\tEmpty block detected.\n"); fflush(stderr); +      info->warn("Empty block detected.");        continue;      } diff --git a/src/mov_encoder.h b/src/mov_encoder.h index d7e0c17..f006daa 100644 --- a/src/mov_encoder.h +++ b/src/mov_encoder.h @@ -36,6 +36,9 @@  /*   * $Log$ + * Revision 1.11  2005/06/14 12:29:40  deva + * Incorporated the use of the Info object everywhere... also using the log functionality. + *   * Revision 1.10  2005/05/22 15:49:22  deva   * Added multithreaded encoding support.   * @@ -83,6 +86,8 @@ using namespace std;  #include "thread.h"  #include <pthread.h> +#include "info.h" +  // size specifies the length of the buffer.   #define FAME_BUFFER_SIZE	(2*720*576*4)	// FIXME: One size fits all... @@ -90,7 +95,8 @@ class MovEncoder : public Thread {  public:    MovEncoder(sem_t *r_sem,               FrameVectorQueue *in, sem_t *in_sem, pthread_mutex_t *in_mutex, -             FramePriorityQueue *out, sem_t *out_sem, pthread_mutex_t *out_mutex); +             FramePriorityQueue *out, sem_t *out_sem, pthread_mutex_t *out_mutex, +             Info *info);    ~MovEncoder();    Frame* encode(Frame *frame); @@ -99,6 +105,8 @@ public:    volatile bool running;  private: +  Info *info; +    // Input/Output queues    FrameVectorQueue *inputqueue;    FramePriorityQueue *outputqueue; diff --git a/src/mov_encoder_thread.cc b/src/mov_encoder_thread.cc index 2febb4f..c1d3e56 100644 --- a/src/mov_encoder_thread.cc +++ b/src/mov_encoder_thread.cc @@ -31,6 +31,9 @@  /*   * $Log$ + * Revision 1.10  2005/06/14 12:29:40  deva + * Incorporated the use of the Info object everywhere... also using the log functionality. + *   * Revision 1.9  2005/05/26 12:48:36  deva   * *** empty log message ***   * @@ -65,14 +68,16 @@  #include <errno.h>  #include "miav_config.h" -MovEncoderThread::MovEncoderThread(const char *filename) +MovEncoderThread::MovEncoderThread(const char *cpr, Info *i)  { +  info = i;    outputqueue = new FramePriorityQueue();    inputqueue = new FrameVectorQueue();    block = new FrameVector();    num_frames_in_block = config->readString("frame_sequence")->length(); -  fprintf(stderr, "Frame sequence length [%d]\n", num_frames_in_block); fflush(stderr); + +  info->log("Frame sequence length %d", num_frames_in_block);    threads = config->readInt("encoding_threads"); @@ -86,14 +91,15 @@ MovEncoderThread::MovEncoderThread(const char *filename)    pthread_mutex_init (&input_mutex, NULL);    pthread_mutex_init (&output_mutex, NULL); -  writer = new MovEncoderWriter(filename, outputqueue, &out_sem, &output_mutex); +  writer = new MovEncoderWriter(cpr, outputqueue, &out_sem, &output_mutex, info);    writer_tid = new pthread_t;    pthread_create (writer_tid, NULL, thread_run, writer);    for(int cnt = 0; cnt < threads; cnt++) {      encs.push_back(new MovEncoder(&read_sem,                                    inputqueue, &in_sem, &input_mutex, -                                  outputqueue, &out_sem, &output_mutex)); +                                  outputqueue, &out_sem, &output_mutex, +                                  info));      tids.push_back(new pthread_t);      pthread_create (tids[cnt], NULL, thread_run, encs[cnt]);    } @@ -148,7 +154,7 @@ MovEncoderThread::~MovEncoderThread()  void MovEncoderThread::encode(Frame* frame)  {    if(frame == NULL) { -    fprintf(stderr, "NULL frame detected.\n"); +    info->log("NULL frame detected, exiting.");      // Terminate      return;    } diff --git a/src/mov_encoder_thread.h b/src/mov_encoder_thread.h index 87a8f63..330e6e6 100644 --- a/src/mov_encoder_thread.h +++ b/src/mov_encoder_thread.h @@ -31,6 +31,9 @@  /*   * $Log$ + * Revision 1.7  2005/06/14 12:29:40  deva + * Incorporated the use of the Info object everywhere... also using the log functionality. + *   * Revision 1.6  2005/06/09 11:00:03  deva   * Added daemon code, and cleaned up using -Wall and -Werror   * @@ -70,14 +73,18 @@ using namespace std;  #include "mov_encoder.h"  #include "mov_encoder_writer.h" +#include "info.h" +  class MovEncoderThread {  public: -  MovEncoderThread(const char *filename); +  MovEncoderThread(const char *cpr, Info *info);    ~MovEncoderThread();    void encode(Frame* frame);  private: +  Info *info; +    FrameVectorQueue *inputqueue;    FramePriorityQueue *outputqueue;    FrameVector *block; diff --git a/src/mov_encoder_writer.cc b/src/mov_encoder_writer.cc index 2ed6879..c3e4207 100644 --- a/src/mov_encoder_writer.cc +++ b/src/mov_encoder_writer.cc @@ -31,6 +31,9 @@  /*   * $Log$ + * Revision 1.4  2005/06/14 12:29:40  deva + * Incorporated the use of the Info object everywhere... also using the log functionality. + *   * Revision 1.3  2005/05/26 21:32:39  deva   * *** empty log message ***   * @@ -54,21 +57,19 @@  #include <config.h>  #include "mov_encoder_writer.h" -MovEncoderWriter::MovEncoderWriter(const char* fname, FramePriorityQueue *q, sem_t *s, pthread_mutex_t *m) +MovEncoderWriter::MovEncoderWriter(const char* cpr,  +                                   FramePriorityQueue *q,  +                                   sem_t *s, +                                   pthread_mutex_t *m,  +                                   Info *i)  { -  // Append suffix -  char f[256]; -  sprintf(f, "%s.mpg", fname); - -  filename = string(fname); -   -  file = open(f,  -              O_CREAT | O_WRONLY | O_SYNC, //| O_LARGEFILE -              S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH); -  if(file == -1) { -    fprintf(stderr, "Could not open file for writing: %s\n", strerror(errno)); -    return; -  } +  info = i; + +  // TODO: build filename from cpr and date +  char fname[256]; +  sprintf(fname, "/tmp/somefile"); + +  file = new File(fname, "mpg", info);    sem = s;    queue = q; @@ -76,23 +77,17 @@ MovEncoderWriter::MovEncoderWriter(const char* fname, FramePriorityQueue *q, sem    mutex = m;    running = true; - -  sequence_number = 0;  }  MovEncoderWriter::~MovEncoderWriter()  { -  if(file != -1) close(file); +  delete file;  }  void MovEncoderWriter::run()  { -  //  fprintf(stderr, "\t\t\t\t\t\t\t\t\tFile Writer ready!\n"); fflush(stderr); -    Frame *frame; -  if(file == -1) return; -    while(running) {      sem_wait(sem); @@ -103,73 +98,13 @@ void MovEncoderWriter::run()      if(frame->number == frame_number) queue->pop();      pthread_mutex_unlock(mutex); -    /* -    if(!frame) { -      fprintf(stderr, "\t\t\t\t\t\t\t\t\tNULL frame detected"); -      continue; -    } -    */ - -    //    fprintf(stderr, "\t\t\t\t\t\t\t\t\tChecking frame [%d] against expected [%d]\n",  -    //        frame->number, frame_number); fflush(stderr);      while(frame->number == frame_number) { -      int ret; - -      ret = write(file, frame->data, frame->size); -      if(ret != frame->size) { -        fprintf(stderr, "Error in filewriter\n"); fflush(stderr); -        switch(errno) { -        case EAGAIN: // Non-blocking I/O has been selected using O_NONBLOCK and the write would block. -        case EBADF:  // fd is not a valid file descriptor or is not open for writing. -        case EFAULT: // buf is outside your accessible address space. -        case EINTR:  // The call was interrupted by a signal before any data was written. -        case EINVAL: // fd is attached to an object which is unsuitable for writing. -        case EIO:    // A low-level I/O error occurred while modifying the inode. -        case ENOSPC: // The device containing the file referred to by fd has no room for the data. -        case EPIPE:  // fd is connected to a pipe or socket whose reading end is closed.  When this hap- -                     // pens the writing process will also receive a SIGPIPE signal.  (Thus,  the  write -                     // return  value  is  seen only if the program catches, blocks or ignores this sig- -                     // nal.) -          fprintf(stderr, "Could not write to file: %s\n", strerror(errno)); fflush(stderr); -          return; - -        case EFBIG:  // An attempt was made to write a file that exceeds the implementation-defined max- -                     // imum file size or the process' file size limit, or to write at a  position  past -                     // than the maximum allowed offset. -          fprintf(stderr, "Attempting to write to a new file\n"); fflush(stderr); -          // Close current file -          if(file != -1) close(file); -          { -            sequence_number++; -            // Create new filename -            char f[256]; -            sprintf(f, "%s-%d.mpg", filename.c_str(), sequence_number); -             -            // Open new file -            file = open(f,  -                        O_CREAT | O_WRONLY | O_SYNC, //| O_LARGEFILE -                        S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH); -            if(file == -1) { -              fprintf(stderr, "Could not open file for writing: %s\n", strerror(errno)); fflush(stderr); -              return; -            } -          } -          // Do write again. -          ret = write(file, frame->data, frame->size); -          if(ret == -1) { -            fprintf(stderr, "Could not write to file: %s\n", strerror(errno)); fflush(stderr); -            return; -          } -          fprintf(stderr, "Success\n"); fflush(stderr); -          break; -        } -      } - +      int ret = file->Write(frame->data, frame->size);        delete frame; -       -      //      fprintf(stderr, "\t\t\t\t\t\t\t\t\tWrite frame [%d]\n", frame->number); fflush(stderr); +      if(ret == -1) return; +              frame_number++;        pthread_mutex_lock(mutex); diff --git a/src/mov_encoder_writer.h b/src/mov_encoder_writer.h index 816abac..4ed144f 100644 --- a/src/mov_encoder_writer.h +++ b/src/mov_encoder_writer.h @@ -31,6 +31,9 @@  /*   * $Log$ + * Revision 1.3  2005/06/14 12:29:40  deva + * Incorporated the use of the Info object everywhere... also using the log functionality. + *   * Revision 1.2  2005/05/26 12:48:36  deva   * *** empty log message ***   * @@ -45,13 +48,19 @@  #include "frame.h"  #include "thread.h" +#include "file.h" +#include "info.h"  #include <string>  using namespace std;  class MovEncoderWriter : public Thread {  public: -  MovEncoderWriter(const char* filename, FramePriorityQueue *q, sem_t *s, pthread_mutex_t *m); +  MovEncoderWriter(const char* cpr, +                   FramePriorityQueue *q, +                   sem_t *s, +                   pthread_mutex_t *m, +                   Info *info);    ~MovEncoderWriter();    void run(); @@ -59,11 +68,9 @@ public:    volatile bool running;  private: -  // for use when creating multiple files in one movie. -  int sequence_number; +  Info *info; -  string filename; -  int file; +  File *file;    FramePriorityQueue *queue;    pthread_mutex_t *mutex; diff --git a/src/mov_file.cc b/src/mov_file.cc deleted file mode 100644 index 5312966..0000000 --- a/src/mov_file.cc +++ /dev/null @@ -1,42 +0,0 @@ -/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/*************************************************************************** - *            mov_file.cc - * - *  Thu Jun  9 15:30:19 CEST 2005 - *  Copyright  2005 Bent Bisballe - *  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. - */ - -/* - * $Id$ - */ - -/* - * $Log$ - * Revision 1.1  2005/06/09 17:54:00  deva - * New file object, that takes care of uniqueness and counts up number in - * filename, when grown too big. - * - */ - -#include <config.h> -#include "mov_file.h" - diff --git a/src/mov_file.h b/src/mov_file.h deleted file mode 100644 index f562fee..0000000 --- a/src/mov_file.h +++ /dev/null @@ -1,43 +0,0 @@ -/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/*************************************************************************** - *            mov_file.h - * - *  Thu Jun  9 15:30:18 CEST 2005 - *  Copyright  2005 Bent Bisballe - *  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. - */ - -/* - * $Id$ - */ - -/* - * $Log$ - * Revision 1.1  2005/06/09 17:54:00  deva - * New file object, that takes care of uniqueness and counts up number in - * filename, when grown too big. - * - */ - -#include <config.h> -#ifndef __MIAV_MOV_FILE_H__ -#define __MIAV_MOV_FILE_H__ -#endif/*__MIAV_MOV_FILE_H__*/ diff --git a/src/server.cc b/src/server.cc index cdbe506..5e3126b 100644 --- a/src/server.cc +++ b/src/server.cc @@ -31,6 +31,9 @@  /*   * $Log$ + * Revision 1.22  2005/06/14 12:29:40  deva + * Incorporated the use of the Info object everywhere... also using the log functionality. + *   * Revision 1.21  2005/05/26 21:32:39  deva   * *** empty log message ***   * @@ -92,9 +95,12 @@  // For unlink  #include <unistd.h> +// For errno +#include <errno.h> + +  #include "miav_config.h" -//#include "mov_encoder.h"  #include "mov_encoder_thread.h"  #include "img_encoder.h" @@ -102,8 +108,6 @@  #include "dv.h" -#include "info_console.h" -  void saveFrameAsImage(char* cpr, Frame *f)  {    ImgEncoder imgenc; @@ -208,6 +212,7 @@ struct tm  MovEncoderThread *newMovEncoder(char* cpr)  { +  /*    MovEncoderThread *enc;    struct tm *ltime;    time_t t = time(NULL); @@ -293,14 +298,15 @@ MovEncoderThread *newMovEncoder(char* cpr)    fprintf(stderr, "Success - using filename: [%s.mpg]\n", fname); fflush(stderr);    enc = new MovEncoderThread(fname);    return enc; +*/ +  return NULL;  } -void newConnection(Socket *socket) +void newConnection(Socket *socket, Info *info)  {    char cpr[256];    bool hasCpr = false;    ServerStatus status; -  InfoConsole info;    n_savestate savestate = LATER;    n_header h; @@ -311,15 +317,13 @@ void newConnection(Socket *socket)    frame = new Frame(NULL, DVPACKAGE_SIZE); -  fprintf(stderr, "New connection[pid: %d]...\n", getpid()); -  fflush(stderr); +  info->log("New connection"); -  Network network = Network(socket, &info); +  Network network = Network(socket, info);    while(int ret = network.recvPackage(&h, frame->data, frame->size)) {      status.checkPoint();      if(ret == -1) { -      fprintf(stderr, "An error occurred...!\n"); -      fflush(stderr); +      info->error("A network error ocurred, terminating session");        break;      } @@ -358,7 +362,8 @@ void newConnection(Socket *socket)      // This one must be last!      if(h.header.h_data.record) { -      if(!enc) enc = newMovEncoder(cpr); +      //      if(!enc) enc = newMovEncoder(cpr); +      if(!enc) enc = new MovEncoderThread(cpr, info);        enc->encode(frame);      } @@ -367,10 +372,10 @@ void newConnection(Socket *socket)    // TODO: Use save state -  fprintf(stderr, "Closing connection...\n"); fflush(stderr); +  info->log("Closing connection...");    if(enc) delete enc; -  fprintf(stderr, "Connection closed [pid: %d]...\n", getpid()); fflush(stderr); +  info->log("Connection closed");  } diff --git a/src/server.h b/src/server.h index 200ce68..0f14adf 100644 --- a/src/server.h +++ b/src/server.h @@ -31,6 +31,9 @@  /*   * $Log$ + * Revision 1.5  2005/06/14 12:29:40  deva + * Incorporated the use of the Info object everywhere... also using the log functionality. + *   * Revision 1.4  2005/05/03 08:31:59  deva   * Removed the error object, and replaced it with a more generic info object.   * @@ -42,19 +45,11 @@  #ifndef __SERVER_H__  #define __SERVER_H__ -#include <unistd.h>     // Symbolic Constants -#include <sys/types.h>  // Primitive System Data Types -#include <errno.h>      // Errors -#include <stdio.h>      // Input/Output -#include <sys/wait.h>   // Wait for Process Termination -#include <stdlib.h>     // General Utilities - -#include <time.h> - -#include "frame.h"  #include "socket.h" -void newConnection(Socket *s); +#include "info.h" + +void newConnection(Socket *s, Info* info);  #endif/*__SERVER_H__*/ | 
