summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/Makefile.am136
-rw-r--r--src/aa_socket.cc254
-rw-r--r--src/aa_socket.h42
-rw-r--r--src/aboutwindow.cc92
-rw-r--r--src/aboutwindow.h83
-rw-r--r--src/audio_encoder.cc218
-rw-r--r--src/audio_encoder.h60
-rw-r--r--src/camera.cc182
-rw-r--r--src/camera.h109
-rw-r--r--src/config.h33
-rw-r--r--src/cprlisten.cc106
-rw-r--r--src/cprlisten.h62
-rw-r--r--src/cprquerydialog.cc486
-rw-r--r--src/cprquerydialog.h170
-rw-r--r--src/daemon.cc118
-rw-r--r--src/daemon.h45
-rw-r--r--src/debug.h103
-rw-r--r--src/decoder.cc286
-rw-r--r--src/decoder.h99
-rw-r--r--src/dv.h33
-rw-r--r--src/dv1394.cc175
-rw-r--r--src/dv1394.h55
-rw-r--r--src/dvfile.cc60
-rw-r--r--src/dvfile.h51
-rw-r--r--src/encoder.cc273
-rw-r--r--src/encoder.h118
-rw-r--r--src/file.cc240
-rw-r--r--src/file.h84
-rw-r--r--src/font.h3152
-rw-r--r--src/frame.cc52
-rw-r--r--src/frame.h58
-rw-r--r--src/frame_stream.h41
-rw-r--r--src/historywidget.cc77
-rw-r--r--src/historywidget.h52
-rw-r--r--src/img_encoder.cc196
-rw-r--r--src/img_encoder.h69
-rw-r--r--src/info.cc68
-rw-r--r--src/info.h61
-rw-r--r--src/info_console.cc101
-rw-r--r--src/info_console.h53
-rw-r--r--src/info_gui.cc144
-rw-r--r--src/info_gui.h86
-rw-r--r--src/info_simple.cc94
-rw-r--r--src/info_simple.h45
-rw-r--r--src/iso11172-1.h161
-rw-r--r--src/iso11172-2.h73
-rw-r--r--src/iso11172-3.h85
-rw-r--r--src/jpeg_mem_dest.cc137
-rw-r--r--src/jpeg_mem_dest.h39
-rw-r--r--src/libfame_wrapper.cc273
-rw-r--r--src/libfame_wrapper.h70
-rw-r--r--src/liblame_wrapper.cc293
-rw-r--r--src/liblame_wrapper.h71
-rw-r--r--src/libmplex_wrapper.cc485
-rw-r--r--src/libmplex_wrapper.h55
-rw-r--r--src/mainwindow.cc575
-rw-r--r--src/mainwindow.h193
-rw-r--r--src/messagebox.cc245
-rw-r--r--src/messagebox.h112
-rw-r--r--src/miav.cc129
-rw-r--r--src/miav.h42
-rw-r--r--src/miav_config.cc492
-rw-r--r--src/miav_config.h98
-rw-r--r--src/miav_daemon.cc108
-rw-r--r--src/miav_daemon.h42
-rw-r--r--src/mov_encoder.cc293
-rw-r--r--src/mov_encoder.h83
-rw-r--r--src/mov_encoder_thread.cc158
-rw-r--r--src/mov_encoder_thread.h91
-rw-r--r--src/mov_encoder_writer.cc140
-rw-r--r--src/mov_encoder_writer.h73
-rw-r--r--src/multicast.cc178
-rw-r--r--src/multicast.h55
-rw-r--r--src/multicast_configuration.cc141
-rw-r--r--src/multicast_configuration.h56
-rw-r--r--src/multiplexer.cc495
-rw-r--r--src/multiplexer.h134
-rw-r--r--src/mutex.cc48
-rw-r--r--src/mutex.h45
-rw-r--r--src/network.cc151
-rw-r--r--src/network.h55
-rw-r--r--src/package.h63
-rw-r--r--src/player.cc322
-rw-r--r--src/player.h142
-rw-r--r--src/queue.h248
-rw-r--r--src/semaphore.cc48
-rw-r--r--src/semaphore.h45
-rw-r--r--src/server.cc136
-rw-r--r--src/server.h37
-rw-r--r--src/server_status.cc77
-rw-r--r--src/server_status.h56
-rw-r--r--src/socket.cc150
-rw-r--r--src/socket.h61
-rw-r--r--src/thread.cc56
-rw-r--r--src/thread.h49
-rw-r--r--src/threadsafe_queue.cc44
-rw-r--r--src/threadsafe_queue.h58
-rw-r--r--src/threadsafe_queue_fifo.cc70
-rw-r--r--src/threadsafe_queue_fifo.h50
-rw-r--r--src/threadsafe_queue_priority.cc101
-rw-r--r--src/threadsafe_queue_priority.h64
-rw-r--r--src/util.cc95
-rw-r--r--src/util.h54
-rw-r--r--src/videowidget.cc76
-rw-r--r--src/videowidget.h57
-rw-r--r--src/yuv_draw.cc242
-rw-r--r--src/yuv_draw.h70
107 files changed, 0 insertions, 16567 deletions
diff --git a/src/Makefile.am b/src/Makefile.am
deleted file mode 100644
index 69923f6..0000000
--- a/src/Makefile.am
+++ /dev/null
@@ -1,136 +0,0 @@
-AM_CXXFLAGS := $(CXXFLAGS) $(EXTRA_CXXFLAGS) -I../include $(QT_CXXFLAGS) \
- -DQT_THREAD_SUPPORT \
- -DPIXMAPS=\"$(datadir)/pixmaps\" \
- -DETC=\"$(prefix)/etc/miav\"
-
-bin_PROGRAMS = miav
-
-miav_SOURCES = $(shell if [ $QT_CXXFLAGS ] ; then ../tools/MocList cc; fi ) \
- aa_socket.cc \
- aboutwindow.cc \
- audio_encoder.cc \
- camera.cc \
- cprlisten.cc \
- cprquerydialog.cc \
- daemon.cc \
- decoder.cc \
- dv1394.cc \
- dvfile.cc \
- file.cc \
- frame.cc \
- historywidget.cc \
- img_encoder.cc \
- info.cc \
- info_console.cc \
- info_gui.cc \
- info_simple.cc \
- jpeg_mem_dest.cc \
- libfame_wrapper.cc \
- liblame_wrapper.cc \
- libmplex_wrapper.cc \
- mainwindow.cc \
- messagebox.cc \
- miav.cc \
- miav_daemon.cc \
- miav_config.cc \
- mov_encoder.cc \
- mov_encoder_thread.cc \
- mov_encoder_writer.cc \
- multicast.cc \
- multicast_configuration.cc \
- multiplexer.cc \
- mutex.cc \
- network.cc \
- player.cc \
- server.cc \
- server_status.cc \
- semaphore.cc \
- socket.cc \
- thread.cc \
- threadsafe_queue.cc \
- threadsafe_queue_fifo.cc \
- threadsafe_queue_priority.cc \
- encoder.cc \
- util.cc \
- videowidget.cc \
- yuv_draw.cc
-
-EXTRA_DIST = \
- aa_socket.h \
- aboutwindow.h \
- audio_encoder.h \
- camera.h \
- cprlisten.h \
- cprquerydialog.h \
- daemon.h \
- debug.h \
- decoder.h \
- dv.h \
- dv1394.h \
- dvfile.h \
- file.h \
- font.h \
- frame.h \
- frame_stream.h \
- historywidget.h \
- img_encoder.h \
- info.h \
- info_console.h \
- info_gui.h \
- info_simple.h \
- iso11172-1.h \
- iso11172-2.h \
- iso11172-3.h \
- jpeg_mem_dest.h \
- libfame_wrapper.h \
- liblame_wrapper.h \
- libmplex_wrapper.h \
- mainwindow.h \
- messagebox.h \
- miav.h \
- miav_daemon.h \
- miav_config.h \
- mov_encoder.h \
- mov_encoder_thread.h \
- mov_encoder_writer.h \
- multicast.h \
- multicast_configuration.h \
- multiplexer.h \
- mutex.h \
- network.h \
- package.h \
- player.h \
- queue.h \
- server.h \
- server_status.h \
- semaphore.h \
- socket.h \
- thread.h \
- threadsafe_queue.h \
- threadsafe_queue_fifo.h \
- threadsafe_queue_priority.h \
- encoder.h \
- util.h \
- videowidget.h \
- yuv_draw.h
-
-miav_LDADD := $(shell if [ $QT_CXXFLAGS ] ; then ../tools/MocList o; fi )
-
-miav_MOC = $(shell if [ $QT_CXXFLAGS ] ; then ../tools/MocList cc; fi )
-
-BUILT_SOURCES = $(miav_MOC)
-
-CLEANFILES = $(BUILT_SOURCES)
-
-%.moc.cc: %.h
- $(MOC) -o $@ $<
-
-%.h: %.ui
- $(UIC) -o $@ $<
-
-%.cc: %.ui
- $(UIC) -o $@ -impl $*.h $<
-
-# command for creating .res file from .rc on Win32
-%.res: %.rc
- rc $<
diff --git a/src/aa_socket.cc b/src/aa_socket.cc
deleted file mode 100644
index 28ecead..0000000
--- a/src/aa_socket.cc
+++ /dev/null
@@ -1,254 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-
-#include "aa_socket.h"
-
-//#include <string.h>
-
-#include <iostream>
-using namespace std;
-
-#include <unistd.h>
-//#include <netinet/in.h>
-#include <arpa/inet.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-
-#include <errno.h>
-
-#include <netinet/in.h>
-#if defined(linux)
-#include <endian.h>
-#else
-#include <sys/endian.h>
-#endif /*defined(linux)*/
-
-// for gethostbyname
-#include <netdb.h>
-
-// These functions are wrappers, to preserve my nice method naming!
-inline int _socket(int a,int b,int c){return socket(a,b,c);}
-inline int _connect(int a,const struct sockaddr *b,socklen_t c){return connect(a,b,c);}
-inline int _listen(int a,int b){return listen(a,b);}
-inline int _send(int a,char *b,unsigned int c, int d){return send(a,b,c,d);}
-
-
-AASocket::AASocket()
-{
-}
-
-AASocket::~AASocket()
-{
- int err = close(socket); // close server
- if(err == -1) throw Network_error("close", strerror(errno));
-}
-
-void AASocket::connect(char *host, unsigned short port)
-{
- // create socket
- socket = _socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
- // PF_INET: ipv4, PF_INET6: ipv6
- // tcp: IPPROTO_TCP
- // upd: IPPROTO_UDP
-
- if (socket == -1) throw Network_error("socket", strerror(errno));
-
- socketaddr.sin_family = AF_INET; // Use "internet protocol" IP
- socketaddr.sin_port = htons(port); // connect to that port
- socketaddr.sin_addr.s_addr = INADDR_ANY;
- // INADDR_ANY puts your IP address automatically
-
-
-
- struct hostent *hp = gethostbyname(host);
- // memcpy(&socketaddr.sin_addr.s_addr, *(hp->h_addr_list),sizeof(struct in_addr));
- memcpy(&(socketaddr.sin_addr),*(hp->h_addr_list),sizeof(struct in_addr));
-
- // FIXME: gethostbyname()
- // socketaddr.sin_addr.s_addr = inet_addr(host);
- //inet_aton (ip, &socketaddr.sin_addr);
-
- int err = _connect(socket, (struct sockaddr*)&socketaddr, sizeof(socketaddr));
- if(err == -1) throw Network_error("connect", strerror(errno));
-}
-
-void AASocket::listen(unsigned short port)
-{
- int err;
-
- bind_socket = _socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
- if(bind_socket == -1) throw Network_error("tmp socket", strerror(errno));
-
- int optval = 1;
- err = setsockopt(bind_socket, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof(optval));
- if(err == -1) throw Network_error("setsockopt", strerror(errno));
-
- socketaddr.sin_family = AF_INET; // Use "internet protocol" IP
- socketaddr.sin_port = htons(port); // connect to that port
- socketaddr.sin_addr.s_addr = INADDR_ANY;
- // INADDR_ANY puts your IP address automatically
-
- // bind socket to address specified by "sa" parameter
- err = bind(bind_socket, (struct sockaddr*)&socketaddr, sizeof(socketaddr));
- if(err == -1) throw Network_error("bind", strerror(errno));
-
- err = _listen(bind_socket, 5);
- if(err == -1) throw Network_error("listen", strerror(errno));
-
- int csalen = sizeof(socketaddr);
- socket = accept(bind_socket,
- (struct sockaddr*)&socketaddr,
- (socklen_t*)&csalen);
- if(socket == -1) throw Network_error("accept", strerror(errno));
-
- err = close(bind_socket); // We don't need this anymore
- bind_socket = -1;
- if(err == -1) throw Network_error("tmp close", strerror(errno));
-}
-
-
-void AASocket::force_close()
-{
- if(bind_socket != -1) close(bind_socket); // This should break the accept call
-}
-
-
-void AASocket::send(char* buf, unsigned int size)
-{
- //unsigned int newsize = size + sizeof(unsigned int);
- // char *newbuf = new char[newsize];
-
- unsigned int nsize = htonl(size);
- int n = _send(socket, (char*)&nsize, sizeof(unsigned int), MSG_WAITALL);
- if(n == -1) throw Network_error("send", strerror(errno));
-
- n = _send(socket, buf, size, MSG_WAITALL);
- if(n == -1) throw Network_error("send", strerror(errno));
-}
-
-
-int AASocket::receive(char* buf, unsigned int size)
-{
- unsigned int insize;
-
- int n = recv(socket, &insize, sizeof(unsigned int), MSG_WAITALL);
- if(n == -1) throw Network_error("recv", strerror(errno));
-
- insize = ntohl(insize);
- if(insize > size) {
- char err_buf[256];
- sprintf(err_buf, "Buffer is too small. Should be %d is %d." , insize, size);
- throw Network_error("receive", err_buf);
- }
-
- n = recv(socket, buf, insize, MSG_WAITALL);
- if(n == -1) throw Network_error("recv", strerror(errno));
-
- return n;
-}
-
-
-void AASocket::send_string(string str)
-{
- this->send((char*)str.c_str(), str.length());
-}
-
-
-string AASocket::receive_string()
-{
- char buf[1024];
- memset(buf, 0, sizeof(buf));
-
- receive(buf, sizeof(buf));
-
- return string(buf);
-}
-
-
-
-#ifdef TEST_SOCKET
-
-/**
- * Test application for AASocket
- * It should print the following to stdout:
- * A: Hello, how are you?
- * B: Fine thanks.
- * A: What about you?
- * B: I'm fine too.
- */
-
-#include <sys/types.h>
-#include <unistd.h>
-
-#include <string>
-#include <iostream>
-
-int main()
-{
- char buf[1024];
- memset(buf, 0, sizeof(buf));
- int f = fork();
- switch(f) {
- case -1: // Fork error
- perror("Fork failed!");
- return 1;
-
- case 0: // Forked child
- {
- try {
- AASocket out;
-
- sleep(1); // Make sure the other end is listening
-
- // Test connect
- out.connect("127.0.0.1", 6666);
-
- // Test raw communication send
- sprintf(buf, "Hello how are you?");
- out.send(buf, sizeof(buf));
-
- // Test raw communication receive
- out.receive(buf, sizeof(buf));
- std::cout << "B: " << buf << std::endl;
-
- // Test string receive
- std::string q = out.receive_string();
- std::cout << "B: " << q << std::endl;
-
- // Test string send
- out.send_string(std::string("I'm fine too."));
- return 0;
- } catch(Network_error e) {
- std::cerr << "Out: " << e.error << std::endl;
- }
- }
- default: // Parent
- {
- try {
- AASocket in;
-
- // Test listen
- in.listen(6666);
-
- // Test raw communication receive
- in.receive(buf, sizeof(buf));
- std::cout << "A: " << buf << std::endl;
-
- // Test raw communication send
- sprintf(buf, "Fine thanks.");
- in.send(buf, sizeof(buf));
-
- // Test string send
- in.send_string(std::string("What about you?"));
-
- // Test string receive
- std::string a = in.receive_string();
- std::cout << "A: " << a << std::endl;
- return 0;
- } catch(Network_error e) {
- std::cerr << "In: " << e.error << std::endl;
- }
- }
- }
- return 0;
-}
-#endif/*TEST_SOCKET*/
diff --git a/src/aa_socket.h b/src/aa_socket.h
deleted file mode 100644
index 0d02723..0000000
--- a/src/aa_socket.h
+++ /dev/null
@@ -1,42 +0,0 @@
-#ifndef __SOCKET_H__
-#define __SOCKET_H__
-
-#include <string>
-
-#include <netinet/in.h>
-//#include <sys/socket.h>
-
-
-/**
- * Exceptions
- */
-struct Network_error {
- Network_error(char *event, char *err) {
- error = std::string(err) + " - in " + std::string(event);
- }
- std::string error;
-};
-
-class AASocket {
-public:
- AASocket();
- ~AASocket();
-
- void listen(unsigned short port);
- void connect(char *ip, unsigned short port);
-
- void send(char* buf, unsigned int buf_size);
- int receive(char* buf, unsigned int buf_size);
-
- void send_string(std::string buf);
- std::string receive_string();
-
- void force_close();
-
-private:
- struct sockaddr_in socketaddr;
- int socket;
- int bind_socket; // Tmp socket for listen.
-};
-
-#endif/*__SOCKET_H__*/
diff --git a/src/aboutwindow.cc b/src/aboutwindow.cc
deleted file mode 100644
index 8743ed8..0000000
--- a/src/aboutwindow.cc
+++ /dev/null
@@ -1,92 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/***************************************************************************
- * aboutwindow.cc
- *
- * Sun Aug 22 21:57:49 2004
- * Copyright 2004 deva
- * 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>
-#ifdef USE_GUI
-
-#include "aboutwindow.h"
-
-#include <qpainter.h>
-#include <qfont.h>
-
-#include <config.h>
-
-#define MARGIN 12
-AboutWindow::AboutWindow( QWidget* parent, const char* name )
- : QDialog( parent, name )
-{
- setModal(true);
- pix_about = new QPixmap();
- pix_about->load( PIXMAP_ABOUT );
-
- resize(pix_about->width(), pix_about->height());
-
- setBackgroundColor(QColor(200,200,200));
-
- btn_ok = new QPushButton(this);
- btn_ok->setText("OK");
- btn_ok->resize( 140, 50 );
- btn_ok->move(pix_about->width() - btn_ok->width() - MARGIN, pix_about->height() - btn_ok->height() - MARGIN);
- btn_ok->setFont( QFont( "Arial", 12, QFont::Bold ) );
-
- QObject::connect( btn_ok, SIGNAL(clicked()), this, SLOT(close()) );
-
- show();
-}
-
-AboutWindow::~AboutWindow()
-{
-}
-
-void AboutWindow::mouseReleaseEvent(QMouseEvent *event)
-{
- close();
-}
-
-void AboutWindow::paintEvent( QPaintEvent *event )
-{
- int version_x = 58;
- int version_y = 90;
-
- if(!event) return; // Just to get rid og the compile warning!
- QPainter painter;
- painter.begin(this);
-
- // Draw background
- painter.drawPixmap(0,0, *pix_about);
-
- // Draw title and version
- painter.setBrush( SolidPattern );
- painter.setFont( QFont( "Arial", 18, QFont::Bold ) );
- painter.setPen( Qt::black );
- painter.drawText(version_x, version_y, "MIAV-Grab v" VERSION);
- painter.setPen( Qt::red );
- painter.drawText(version_x + 2, version_y + 2, "MIAV-Grab v" VERSION);
-
- painter.end();
-}
-
-#endif /*USE_GUI*/
diff --git a/src/aboutwindow.h b/src/aboutwindow.h
deleted file mode 100644
index f87a10e..0000000
--- a/src/aboutwindow.h
+++ /dev/null
@@ -1,83 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/***************************************************************************
- * aboutwindow.h
- *
- * Sun Aug 22 21:58:22 2004
- * Copyright 2004 deva
- * 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"
-#ifdef USE_GUI
-
-#ifndef __ABOUTWINDOW_H__
-#define __ABOUTWINDOW_H__
-
-#include <qdialog.h>
-//#include <qlabel.h>
-#include <qpixmap.h>
-//#include <qtextedit.h>
-#include <qpushbutton.h>
-
-#define PIXMAP_ABOUT PIXMAPS"/about.png"
-/*
-#define ABOUT_INFO "\
-Official homepage:\n\
- http://www.aasimon.org/miav\n\
-Author:\n\
- Bent Bisballe (deva@aasimon.org)\n\
-Copyright (c) 2004"
-
-#define GPL_LICENSE "\
-This program is free software; you can\n\
-redistribute it and/or modify it under the terms\n\
-of the GNU General Public License as published\n\
-by the Free Software Foundation; either version\n\
-2 of the License, or (at your option) any later\n\
-version.\n\
- This program is distributed in the hope that\n\
-it will be useful, but WITHOUT ANY WARRANTY;\n\
-without even the implied warranty of\n\
-MERCHANTABILITY or FITNESS FOR A PARTI-\n\
-CULAR PURPOSE. See the GNU Library General\n\
-Public License for more details.\n\
- You should have received a copy of the GNU\n\
-General Public License along with this program;\n\
-if not, write to the Free Software Foundation,\n\
-Inc., 59 Temple Place - Suite 330, Boston,\n\
-MA 02111-1307, USA."
-*/
-class AboutWindow : public QDialog
-{
- Q_OBJECT
-public:
- AboutWindow(QWidget* parent = 0, const char* name = 0);
- ~AboutWindow();
- virtual void paintEvent( QPaintEvent *event );
- void mouseReleaseEvent(QMouseEvent *event);
-
-private:
- QPushButton *btn_ok;
- QPixmap *pix_about;
-};
-
-#endif /* __ABOUTWINDOW_H__ */
-
-#endif /*USE_GUI*/
diff --git a/src/audio_encoder.cc b/src/audio_encoder.cc
deleted file mode 100644
index 6e412c3..0000000
--- a/src/audio_encoder.cc
+++ /dev/null
@@ -1,218 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/***************************************************************************
- * audio_encoder.cc
- *
- * Sat Sep 17 18:38:45 CEST 2005
- * Copyright 2005 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 "audio_encoder.h"
-#include "util.h"
-
-#include "liblame_wrapper.h"
-
-AudioEncoder::AudioEncoder(ThreadSafeQueuePriority *audio_input_queue,
- ThreadSafeQueuePriority *audio_output_queue,
- Info *i)
-{
- info = i;
- info->info("AudioEncoder");
-
- running = true;
-
- input_queue = audio_input_queue;
- output_queue = audio_output_queue;
-}
-
-AudioEncoder::~AudioEncoder()
-{
-}
-
-void AudioEncoder::thread_main()
-{
- info->info("AudioEncoder::run");
-
- // Run with slightly lower priority than MovEncoderWriter
- nice(1);
-
- Frame *in_frame = NULL;
- Frame *out_frame = NULL;
-
- LibLAMEWrapper lame(info);
-
- while(running) {
- in_frame = input_queue->pop();
-
- if(in_frame == NULL) info->error("AudioEncoder: in_frame == NULL!");
-
- // Check for end of stream
- if(in_frame->endOfFrameStream == true) {
- info->info("endOfFrameStream in AudioEncoder");
- running = false;
- out_frame = lame.close();
- } else {
- // Encode audio
- out_frame = lame.encode(in_frame);
- }
- out_frame->number = in_frame->number;
- out_frame->endOfFrameStream = in_frame->endOfFrameStream;
-
- delete in_frame;
- in_frame = NULL;
-
- output_queue->push(out_frame);
- }
-
- info->info("AudioEncoder::stop");
-}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-/*
-
-void AudioEncoder::thread_main()
-{
- info->info("AudioEncoder::run");
-
-#ifndef NEW_QUEUE
- unsigned int queuesize = 0;
- Frame *tmpframe;
-#endif
-
- // Run with slightly lower priority than MovEncoderWriter
- nice(2);
-
- Frame *in_frame = NULL;
- Frame *out_frame = NULL;
-
- LibLAMEWrapper lame(info);
-
- while(running) {
- info->info("fisk");
-#ifdef NEW_QUEUE
- in_frame = input_queue->pop();
-#else
- sem_wait(input_sem);
-
- // If no frame is in the buffer, get one from the queue
- while( in_frame == NULL ) {
-
- // sem_wait(input_sem);
-
- // Lock output mutex
- pthread_mutex_lock( input_mutex );
- tmpframe = inputqueue->top();
-
- if(tmpframe && tmpframe->number == frame_number) {
- inputqueue->pop();
- queuesize = inputqueue->size();
- in_frame = tmpframe;
- frame_number++;
- }
-
- pthread_mutex_unlock( input_mutex );
- // Unlock output mutex
-
- sleep_0_2_frame();
- }
-#endif
-
- // Check for end of stream
- if(in_frame->endOfFrameStream == true) {
- info->info("endOfFrameStream in AudioEncoder");
- running = false;
- out_frame = lame.close();
- } else {
- // Encode audio
- out_frame = lame.encode(in_frame);
- }
- out_frame->number = in_frame->number;
- out_frame->endOfFrameStream = in_frame->endOfFrameStream;
-
- delete in_frame;
- in_frame = NULL;
-
-#ifdef NEW_QUEUE
- output_queue->push(out_frame);
-#else
- // Lock output mutex
- pthread_mutex_lock(output_mutex);
- outputqueue->push(out_frame);
- pthread_mutex_unlock(output_mutex);
- // Unlock output mutex
-
- // Kick multiplexer (audio)
- sem_post(output_sem);
-#endif
- }
-
-#ifndef NEW_QUEUE
- // Kick multiplexer (audio)
- sem_post(output_sem);
-#endif
-
- info->info("AudioEncoder::stop");
-}
-*/
diff --git a/src/audio_encoder.h b/src/audio_encoder.h
deleted file mode 100644
index 9d86178..0000000
--- a/src/audio_encoder.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/***************************************************************************
- * audio_encoder.h
- *
- * Sat Sep 17 18:38:45 CEST 2005
- * Copyright 2005 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_AUDIO_ENCODER_H__
-#define __MIAV_AUDIO_ENCODER_H__
-
-#include "frame.h"
-#include "util.h"
-
-#include "thread.h"
-#include <pthread.h>
-
-#include "info.h"
-
-#include "threadsafe_queue_priority.h"
-
-class AudioEncoder : public Thread {
-public:
- AudioEncoder(ThreadSafeQueuePriority *audio_input_queue,
- ThreadSafeQueuePriority *audio_output_queue,
- Info *info);
- ~AudioEncoder();
-
- void thread_main();
-
- volatile bool running;
-
-private:
- Info *info;
-
- ThreadSafeQueuePriority *input_queue;
- ThreadSafeQueuePriority *output_queue;
-};
-
-
-#endif/*__MIAV_AUDIO_ENCODER_H__*/
diff --git a/src/camera.cc b/src/camera.cc
deleted file mode 100644
index 5dbec13..0000000
--- a/src/camera.cc
+++ /dev/null
@@ -1,182 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/***************************************************************************
- * camera.cc
- *
- * Fri Oct 29 12:46:38 CEST 2004
- * Copyright 2004 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.
- */
-#include <config.h>
-#ifdef USE_GUI
-
-#include "camera.h"
-
-Camera::Camera(Info *ginfo)
-{
- info = ginfo;
-}
-
-void Camera::connect(const char *ip, const int port, int width, int height)
-{
- initialized = false;
-
- pthread_mutex_init (&mutex, NULL);
- //mutex = PTHREAD_MUTEX_INITIALIZER;
-
- running = 1;
-
- encode_queue = new Queue<Frame>(); // infinite size
- player_queue = new Queue<Frame>(1); // fixed size of 1
-
- sem_init(&encode_sem, 0, 0);
- sem_init(&player_sem, 0, 0);
-
- decoder = new Decoder(info,
- &encode_sem,
- &player_sem,
- encode_queue,
- player_queue,
- &mutex,
- &running);
-
- encoder = new Encoder(info,
- ip, port,
- &encode_sem,
- encode_queue,
- &mutex,
- &running);
-
- player = new Player(info,
- width, height,
- &running,
- &player_sem,
- player_queue,
- &mutex);
-
- decoder->run();
- encoder->run();
- player->run();
-
- initialized = true;
-}
-
-Camera::~Camera()
-{
- // Signal to the threads to stop
- running = 0;
-
- // Wait for the threads to stop
- decoder->wait_stop();
- encoder->wait_stop();
- player->wait_stop();
-
- delete decoder;
- delete encoder;
- delete player;
-
- sem_destroy(&encode_sem);
- sem_destroy(&player_sem);
-
- delete player_queue;
- delete encode_queue;
-}
-
-void Camera::setCpr(char *newcpr, char* name)
-{
-
- if(initialized) {
- encoder->setCpr(newcpr);
- player->setCpr(newcpr, name); // For the text overlay
- } else {
- info->error("Camera not initialized.");
- }
-}
-
-
-void Camera::start()
-{
- if(initialized) {
- player->startrecord(); // For the text overlay
- encoder->start();
- decoder->start();
- } else {
- info->error("Camera not initialized.");
- }
-}
-
-void Camera::stop(n_savestate save)
-{
- if(initialized) {
- player->stoprecord(); // For the textoverlay
- encoder->stop(save);
- decoder->stop(save);
- } else {
- info->error("Camera not initialized.");
- }
-}
-
-void Camera::freeze()
-{
- if(initialized) {
- player->stop();
- decoder->freeze();
- } else {
- info->error("Camera not initialized.");
- }
-}
-
-void Camera::unfreeze()
-{
- if(initialized) {
- player->start();
- decoder->unfreeze();
- } else {
- info->error("Camera not initialized.");
- }
-}
-
-void Camera::snapshot(unsigned char *rgb)
-{
- if(initialized) {
- decoder->shoot(rgb);
- encoder->shoot();
- } else {
- info->error("Camera not initialized.");
- }
-}
-
-int Camera::getQueueLength()
-{
- return encode_queue->length();
-}
-
-void Camera::resize(int w, int h, bool s)
-{
- player->resize(w,h,s);
-}
-
-void Camera::setMute(bool mute)
-{
- decoder->setMute(mute);
- player->setMute(mute);
-}
-
-#endif/* USE_GUI */
diff --git a/src/camera.h b/src/camera.h
deleted file mode 100644
index a0b849a..0000000
--- a/src/camera.h
+++ /dev/null
@@ -1,109 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/***************************************************************************
- * camera.h
- *
- * Fri Oct 29 12:46:38 CEST 2004
- * Copyright 2004 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.
- */
-#include "config.h"
-#ifdef USE_GUI
-
-#ifndef __CAMERA_H__
-#define __CAMERA_H__
-
-#include <string>
-using namespace std;
-#include "info.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <getopt.h>
-//#include <avformat.h>
-
-#include "util.h"
-#include "queue.h"
-#include "decoder.h"
-#include "encoder.h"
-#include "player.h"
-#include "package.h"
-
-#include "thread.h"
-#include "frame.h"
-
-#include <qwidget.h>
-
-/**
- * This class represents the symbolic representation of the camera and
- * the network functionality.
- */
-class Camera {
-public:
- Camera(Info *ginfo);
- ~Camera();
- void connect(const char *ip,
- const int port,
- int width, int height);
-
- void setCpr(char *newcpr, char* name);
-
- // Camera actions
- void start();
- void stop(n_savestate save);
- void freeze();
- void unfreeze();
- void snapshot(unsigned char *rgb);
-
- int getQueueLength();
-
- // Indirect call to player->resize
- void resize(int width, int height, bool showtext);
-
- void setMute(bool mute);
-
-private:
- // Info object passed to all sub objects.
- Info *info;
- bool initialized;
-
- /* // No need for these anymore
- pthread_t playertid;
- pthread_t decodetid;
- pthread_t encodetid;
- */
- volatile int running;
-
- Encoder *encoder;
- Decoder *decoder;
- Player *player;
-
- Queue<Frame> *encode_queue;
- Queue<Frame> *player_queue;
- sem_t encode_sem;
- sem_t player_sem;
- pthread_mutex_t mutex;// = PTHREAD_MUTEX_INITIALIZER;
-};
-
-
-#endif/*__CAMERA_H__*/
-
-#endif/* USE_GUI */
diff --git a/src/config.h b/src/config.h
deleted file mode 100644
index e7101c9..0000000
--- a/src/config.h
+++ /dev/null
@@ -1,33 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/***************************************************************************
- * config.h
- *
- * Thu Jul 28 12:46:38 CEST 2005
- * Copyright 2004 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.
- */
-
-#ifndef __CONFIG_IS_LOADED__
-#define __CONFIG_IS_LOADED__
-
-#include "../config.h"
-
-#endif/*__CONFIG_IS_LOADED__*/
diff --git a/src/cprlisten.cc b/src/cprlisten.cc
deleted file mode 100644
index 0a4958e..0000000
--- a/src/cprlisten.cc
+++ /dev/null
@@ -1,106 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: tab; c-basic-offset: 2 -*- */
-/***************************************************************************
- * cprlisten.cc
- *
- * Tue Dec 27 17:05:42 CET 2005
- * Copyright 2005 Bent Bisballe Nyeng
- * deva@aasimon.org
- ****************************************************************************/
-
-/*
- * This file is part of the Aasimon c++ framework.
- *
- * This 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.
- *
- * It 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 it; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
- */
-
-#include "cprlisten.h"
-#include "aa_socket.h"
-
-#include <iostream>
-#include <string>
-using namespace std;
-
-#define MAGIC_STOP_STRING "SHUTTHEFUCKUP"
-
-CPRListen::CPRListen(Info *info, unsigned short port)
-{
- this->info = info;
- this->port = port;
- cpr = "N/A";
- cprchanged = false;
- running = true;
-}
-
-CPRListen::~CPRListen()
-{
-}
-
-void CPRListen::stop()
-{
- running = false;
- try {
- AASocket socket;
- socket.connect("localhost", port);
- socket.send_string(MAGIC_STOP_STRING);
- } catch(Network_error &e) {
- info->error("In stop(): %s.", e.error.c_str());
- }
-}
-
-void CPRListen::thread_main()
-{
- info->log("Listening for CPRs.");
- while(running) {
- try {
- string newcpr;
- AASocket socket;
- socket.listen(port);
- newcpr = socket.receive_string();
-
- if(newcpr == MAGIC_STOP_STRING) {
- running = false;
- } else {
- mutex.lock();
- cprchanged = true;
- cpr = newcpr;
- mutex.unlock();
- info->log("Got CPR: %s.", cpr.c_str());
- }
-
- } catch(Network_error &e) {
- info->error("In thread_main(): %s.", e.error.c_str());
- running = false;
- }
- }
- info->log("Stopped listening for CPRs.");
-}
-
-bool CPRListen::cprChanged()
-{
- return cprchanged;
-}
-
-string CPRListen::getCpr()
-{
- string cpr_copy;
-
- mutex.lock();
- cpr_copy = cpr;
- mutex.unlock();
-
- cprchanged = false;
-
- return cpr_copy;
-}
diff --git a/src/cprlisten.h b/src/cprlisten.h
deleted file mode 100644
index 012fe4c..0000000
--- a/src/cprlisten.h
+++ /dev/null
@@ -1,62 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: tab; c-basic-offset: 2 -*- */
-/***************************************************************************
- * cprlisten.h
- *
- * Tue Dec 27 17:05:42 CET 2005
- * Copyright 2005 Bent Bisballe Nyeng
- * deva@aasimon.org
- ****************************************************************************/
-
-/*
- * This file is part of the Aasimon c++ framework.
- *
- * This 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.
- *
- * It 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 it; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
- */
-
-#ifndef __AASIMON_FRAMEWORK_CPRLISTEN_H__
-#define __AASIMON_FRAMEWORK_CPRLISTEN_H__
-
-#include <string>
-
-#include "thread.h"
-#include "mutex.h"
-
-#include "aa_socket.h"
-#include "info.h"
-
-class CPRListen: public Thread {
-public:
- CPRListen(Info *info, unsigned short port);
- ~CPRListen();
-
- bool cprChanged();
- std::string getCpr();
- void thread_main();
-
- void stop(); // Stops the call to listen
-
-private:
- Info *info;
-
- volatile bool running;
- AASocket *socket;
-
- bool cprchanged;
- unsigned short port;
- std::string cpr;
- Mutex mutex;
-};
-
-#endif/*__AASIMON_FRAMEWORK_CPRLISTEN_H__*/
diff --git a/src/cprquerydialog.cc b/src/cprquerydialog.cc
deleted file mode 100644
index 19337a4..0000000
--- a/src/cprquerydialog.cc
+++ /dev/null
@@ -1,486 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/***************************************************************************
- * cprquerydialog.cc
- *
- * Sat Feb 19 17:05:43 CET 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.
- */
-#include <config.h>
-#ifdef USE_GUI
-
-#include <qframe.h>
-
-#include "messagebox.h"
-#include "cprquerydialog.h"
-#include "miav_config.h"
-
-CPRQueryDialog::CPRQueryDialog(Info *info,
- QLabel *lcpr,
- QLabel *lname,
- QWidget *parent,
- const char *name,
- QStatusBar *status)
- : QDialog(parent, name, TRUE)
-{
- this->info = info;
- setCaption(name);
-
- // Load image
- QPixmap pix_backspace;
- pix_backspace.load( PIXMAP_BACKSPACE );
-
- lbl_name = lname;
- lbl_cpr = lcpr;
- statusbar = status;
-
- //Read configuration
- CPR_HOST = config->readString("cpr_host");
- CPR_PORT = config->readInt("cpr_port");
- CPR_TIMEOUT = config->readInt("cpr_timeout");
-
- cpr[0] = '\0';
- internalCpr[0] = '\0';
-
- cprSocket = new QSocket(this);
- connect(cprSocket, SIGNAL(readyRead()), SLOT(cprSocket_readyRead()));
- connect(cprSocket, SIGNAL(connected()), SLOT(cprSocket_connected()));
- connect(cprSocket, SIGNAL(error(int)), SLOT(cprSocket_error(int)));
-
- lbl_cpr->setText("Indtast CPR");
-
- // Setup connection timer
- timer = new QTimer(this);
- connect(timer, SIGNAL(timeout()), SLOT(cprSocket_timeout()));
-
- // Generate input buttons
- QGridLayout *gl = new QGridLayout(this, 4, 3, 10, 2);
-
- QButton *b1 = createButton(this, "1", 1);
- QButton *b2 = createButton(this, "2", 2);
- QButton *b3 = createButton(this, "3", 3);
- QButton *b4 = createButton(this, "4", 4);
- QButton *b5 = createButton(this, "5", 5);
- QButton *b6 = createButton(this, "6", 6);
- QButton *b7 = createButton(this, "7", 7);
- QButton *b8 = createButton(this, "8", 8);
- QButton *b9 = createButton(this, "9", 9);
- QButton *b0 = createButton(this, "0", 0);
- QButton *bbs = createButton(this, "", 10);
- bbs->setPixmap(pix_backspace);
- QButton *bca = createButton(this, "CA", 11);
-
- gl->addWidget(b1, 0,0);
- gl->addWidget(b2, 0,1);
- gl->addWidget(b3, 0,2);
- gl->addWidget(b4, 1,0);
- gl->addWidget(b5, 1,1);
- gl->addWidget(b6, 1,2);
- gl->addWidget(b7, 2,0);
- gl->addWidget(b8, 2,1);
- gl->addWidget(b9, 2,2);
- gl->addWidget(b0, 3,1);
- gl->addWidget(bbs, 3,2);
- gl->addWidget(bca, 3,0);
-
- // Setup signals
- connect(b1, SIGNAL(clicked()), SLOT(b_1_clicked()));
- connect(b2, SIGNAL(clicked()), SLOT(b_2_clicked()));
- connect(b3, SIGNAL(clicked()), SLOT(b_3_clicked()));
- connect(b4, SIGNAL(clicked()), SLOT(b_4_clicked()));
- connect(b5, SIGNAL(clicked()), SLOT(b_5_clicked()));
- connect(b6, SIGNAL(clicked()), SLOT(b_6_clicked()));
- connect(b7, SIGNAL(clicked()), SLOT(b_7_clicked()));
- connect(b8, SIGNAL(clicked()), SLOT(b_8_clicked()));
- connect(b9, SIGNAL(clicked()), SLOT(b_9_clicked()));
- connect(b0, SIGNAL(clicked()), SLOT(b_0_clicked()));
- connect(bbs,SIGNAL(clicked()), SLOT(b_b_clicked()));
- connect(bca,SIGNAL(clicked()), SLOT(b_c_clicked()));
-
- this->move(175,150);
-
- listen = new CPRListen(info, config->readInt("cprlisten_port"));
- listen_timer = new QTimer(this);
- connect(listen_timer, SIGNAL(timeout()), SLOT(listen_timeout()));
- listen->run();
- listen_timer->start(500); // Check every 500 ms
-
- show();
-}
-
-CPRQueryDialog::~CPRQueryDialog()
-{
- // Cleanup
- // delete timer;
- // delete cprSocket
-
- // Cleanup after cpr listen
- listen->stop();
- // listen->wait_stop();
- delete listen;
- // delete listen_timer;
-}
-
-void CPRQueryDialog::listen_timeout()
-{
- string newcpr;
- if(listen->cprChanged()) {
- char newcpr_buf[32];
- newcpr = listen->getCpr();
- sprintf(newcpr_buf, "%s-%s", newcpr.substr(0,6).c_str(), newcpr.substr(6,4).c_str());
- // printf("cprbuf[%s]\n", newcpr_buf);
- lbl_cpr->setText(newcpr_buf);
- verifycpr(newcpr_buf);
- }
-}
-
-/**
- * createButton:
- * A genric button-creater
- */
-QPushButton *CPRQueryDialog::createButton(QWidget *parent, const char *text, int value)
-{
- char buf[32];
- sprintf(buf, "%d", value);
- QPushButton *q = new QPushButton(this, buf);
-
- QFont f("Lucida", 48);
- q->setFixedSize(150, 100);
- q->setText(text);
- q->setFont(f);
- return q;
-}
-
-/**
- * Event functions for handling buttonclicks.
- * For button 0-9 the values is sent back.
- * Backspace and clear are handled via special
- * signals.
- * When 10 digits has been input we close the form
- */
-void CPRQueryDialog::b_1_clicked() { insert_digit(1); }
-void CPRQueryDialog::b_2_clicked() { insert_digit(2); }
-void CPRQueryDialog::b_3_clicked() { insert_digit(3); }
-void CPRQueryDialog::b_4_clicked() { insert_digit(4); }
-void CPRQueryDialog::b_5_clicked() { insert_digit(5); }
-void CPRQueryDialog::b_6_clicked() { insert_digit(6); }
-void CPRQueryDialog::b_7_clicked() { insert_digit(7); }
-void CPRQueryDialog::b_8_clicked() { insert_digit(8); }
-void CPRQueryDialog::b_9_clicked() { insert_digit(9); }
-void CPRQueryDialog::b_0_clicked() { insert_digit(0);}
-void CPRQueryDialog::b_b_clicked() { remove_digit();}
-void CPRQueryDialog::b_c_clicked() { remove_all();}
-
-void CPRQueryDialog::b_clicked(int value)
-{
- printf("%d\n", value);
- switch(value) {
- case 10:
- if (digits>0) digits--;
- emit bbs_clicked();
- break;
- case 11:
- digits = 0;
- emit bca_clicked();
- break;
- default:
- digits++;
- emit number_clicked(value);
- }
- if (digits == 10){
- digits = 0;
- accept();
- }
-}
-
-/**
- * remove_digit:
- * Remove one digit from the selected cpr
- * Used when the user pushes backspace in
- * the inputwindow
- */
-void CPRQueryDialog::remove_digit()
-{
- int temp;
- temp = strlen(cpr);
- if (temp == 7) /* Remove two characters due to the hyphen */
- strcpy(cpr+temp-2, "\0");
- else if ((temp >0) && (temp <=11))
- strcpy(cpr+temp-1, "\0");
- lbl_cpr->setText(cpr);
-}
-
-/**
- * remove_all:
- * Clear the selected cpr
- */
-void CPRQueryDialog::remove_all()
-{
- strcpy(cpr, "");
- lbl_cpr->setText(cpr);
-}
-
-/**
- * insert_digit:
- * Respond to what the user types in the inputWindow
- */
-void CPRQueryDialog::insert_digit(int value)
-{
- char temp[2];
- switch(strlen(cpr)) {
- case 5: // Automaticaly add a hyphen after the sixth digit
- sprintf(temp, "%d-", value);
- strcat(cpr, temp);
- lbl_cpr->setText(cpr);
- break;
- case 10:
- sprintf(temp, "%d", value);
- strcat(cpr, temp);
- lbl_cpr->setText(cpr);
- verifycpr(cpr);
- break;
- default:
- sprintf(temp, "%d", value);
- strcat(cpr, temp);
- lbl_cpr->setText(cpr);
- break;
- }
-}
-
-/**
- * verifycpr:
- * Test a cpr via test_cpr().
- * If cpr is invalid, then ask user what
- * to do via MessageBox
- */
-void CPRQueryDialog::verifycpr(char *cpr)
-{
- strncpy(internalCpr, cpr, 6);
- strncpy(internalCpr+6, cpr+7, 4);
- internalCpr[10] = 0;
-
- if (!(test_cpr(internalCpr))) {
- MessageBox ccw(this, CONFIRM_INVALID_CPR_TITLE, CONFIRM_INVALID_CPR, TYPE_YES_NO_CANCEL);
- switch(ccw.exec()) {
- case MSG_CANCEL:
- bedit_clicked();
- break;
- case MSG_NO:
- bcancel_clicked();
- break;
- case MSG_YES:
- // Overwrite name from previous cpr.
- lbl_name->setText(NAME_NOT_AVAILABLE);
- accept();
- break;
- }
- } else {
- cprSocket->connectToHost(CPR_HOST->c_str(), CPR_PORT);
- timer->start(CPR_TIMEOUT);
- // accept();
- }
-}
-
-
-/* Clears all data - alerts user if measurements are not stored */
-void CPRQueryDialog::bcancel_clicked()
-{
- cpr[0]= '\0';
- lbl_cpr->setText("Indtast CPR");
- lbl_name->setText("");
-}
-
-/* This is used when the user enters a cpr that is not valid and wishes to edit
- * the cpr.
- */
-void CPRQueryDialog::bedit_clicked()
-{
- cpr[10]= '\0';
- lbl_cpr->setText(cpr);
- lbl_name->setText("");
-}
-
-
-/**
- * test_cpr:
- * Checks that a cpr i valid via a modulo 11 test
- */
-int CPRQueryDialog::test_cpr(const char *s)
-{
- int sum = 0;
- int ctl;
- const char *cptr;
-
- // Is the string to short to be a cpr?
- if(strlen(s) != 10) return 0;
-
- // Are all characters digits?
- for(cptr = s; *cptr; cptr++) if(!isdigit(*cptr)) return 0;
-
- // Calculate modulo 11 checksum
- sum += (s[0] - '0') * 4;
- sum += (s[1] - '0') * 3;
- sum += (s[2] - '0') * 2;
- sum += (s[3] - '0') * 7;
- sum += (s[4] - '0') * 6;
- sum += (s[5] - '0') * 5;
- sum += (s[6] - '0') * 4;
- sum += (s[7] - '0') * 3;
- sum += (s[8] - '0') * 2;
- ctl = 11 - (sum % 11);
-
- // Is the checksum correct?
- if(ctl == 11) ctl = 0;
- return s[9] - '0' == ctl;
-}
-
-/**
- * cprSocket_error
- * Called if an error occurres in the corsocket connection.
- * Writes out the appropriate error message.
- */
-void CPRQueryDialog::cprSocket_error(int errnum)
-{
- QString msg = QString("cprSocket encountered an error: ");
- timer->stop();
-
- lbl_name->setText(NAME_NOT_AVAILABLE);
-
- // Print error message
- switch(errnum) {
- case QSocket::ErrConnectionRefused: // if the connection was refused
- msg.append("ErrConnectionRefused");
- break;
- case QSocket::ErrHostNotFound: // if the host was not found
- msg.append("ErrHostNotFound");
- break;
- case QSocket::ErrSocketRead: // if a read from the socket failed
- msg.append("ErrSocketRead");
- break;
- }
-
- if(statusbar) statusbar->message(msg, 5000);
- MessageBox(this, "Fejl", msg, TYPE_OK, ICON_ERROR).exec();
- //info->error(msg.c_str());
- accept();
-}
-
-/**
- * cprSocket_readyRead:
- * Uses a patients cpr to look up his or hers name
- * via the departments cpr-server.
- * This is called by the cprSocket when the socket is ready
- */
-void CPRQueryDialog::cprSocket_readyRead()
-{
- QString name;
- QString firstname;
- QString lastname;
- int timeout = 0;
-
- if (!cprSocket->canReadLine()) return;
-
- QString msg = QString("Recieving name from cpr database...");
- if(statusbar) statusbar->message(msg, 5000);
- timer->stop();
-
- while(cprSocket->canReadLine()) {
- QString s = cprSocket->readLine();
- if (s.startsWith("0001")) {
- name.append(s.right(s.length()-4));
- lastname.append(s.right(s.length()-4));
- name.setLength(name.length()-1);
- if (name.length()) name += QString(", ");
- }
- if (s.startsWith("0002")) {
- name.append(s.right(s.length()-4));
- firstname.append(s.right(s.length()-4));
- name.setLength(name.length()-1);
- cprSocket->close();
- lbl_name->setText(name);
- accept();
- return;
- }
- if (timeout>1000) {
- lbl_name->setText(NAME_NOT_AVAILABLE);
- MessageBox(this, NAME_NOT_AVAILABLE_TITLE, NAME_NOT_AVAILABLE, TYPE_OK, ICON_ERROR).exec();
- accept();
- return;
- }
- timeout++;
- }
-
- accept();
-}
-
-
-/**
- * cprSocket_connected:
- * Writes the selected cpr to the cpr-server
- * when the cprSocket is connected.
- */
-void CPRQueryDialog::cprSocket_connected()
-{
- QString msg = QString("Connected to cpr database, sending cpr number...");
- if(statusbar) statusbar->message(msg, 5000);
- timer->stop();
-
- cprSocket->writeBlock(internalCpr, 10);
- cprSocket->writeBlock("\n", 1);
-}
-
-/**
- * cprSocket_timeout:
- * Called when the connection has not emitted a signal in CPR_TIMEOUT miliseconds.
- */
-void CPRQueryDialog::cprSocket_timeout()
-{
- QString msg = QString("cprSocket timed out doing: ");
- timer->stop();
-
- lbl_name->setText(NAME_NOT_AVAILABLE);
-
-
- // Print connection status
- switch(cprSocket->state()) {
- case QSocket::Idle: // if there is no connection
- msg.append("Idle");
- break;
- case QSocket::HostLookup: // during a DNS lookup
- msg.append("HostLookup");
- break;
- case QSocket::Connecting: // during TCP connection establishment
- msg.append("Connecting");
- break;
- case QSocket::Connected: // when there is an operational connection
- msg.append("Conected");
- break;
- case QSocket::Closing: // if the socket is closing down, but is not yet closed.
- msg.append("Closing");
- break;
- }
-
- if(statusbar) statusbar->message(msg, 5000);
- MessageBox(this, "Fejl", msg, TYPE_OK, ICON_ERROR).exec();
- accept();
-}
-
-#endif /* USE_GUI */
diff --git a/src/cprquerydialog.h b/src/cprquerydialog.h
deleted file mode 100644
index 85b2659..0000000
--- a/src/cprquerydialog.h
+++ /dev/null
@@ -1,170 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/***************************************************************************
- * cprquerydialog.h
- *
- * Sat Feb 19 17:05:42 CET 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.
- */
-#include "config.h"
-#ifdef USE_GUI
-
-#ifndef __MIAV_CPRQUERYDIALOG_H__
-#define __MIAV_CPRQUERYDIALOG_H__
-
-/**
- * Text
- */
-#define NAME_NOT_AVAILABLE_TITLE "Databasefejl"
-#define NAME_NOT_AVAILABLE "Kunne ikke slå navn op i cpr-database."
-
-#define CONFIRM_INVALID_CPR_TITLE "Bekræft"
-#define CONFIRM_INVALID_CPR "Ugyldigt CPR nummer, brug det alligevel?"
-
-
-/**
- * Images
- */
-#define PIXMAP_BACKSPACE PIXMAPS"/backspace.png"
-
-
-/**
- * Includes
- */
-#include <qdialog.h>
-#include <qpushbutton.h>
-#include <qlayout.h>
-#include <qlabel.h>
-#include <qfont.h>
-
-#include <qwidget.h>
-#include <qlayout.h>
-#include <qpushbutton.h>
-#include <qdialog.h>
-#include <qlabel.h>
-#include <qpixmap.h>
-
-#include <qsocket.h>
-#include <qtextedit.h>
-#include <qstring.h>
-#include <qwidget.h>
-
-#include <qevent.h>
-
-#include <qpushbutton.h>
-
-#include <qwidget.h>
-#include <qlayout.h>
-#include <qdialog.h>
-
-#include <string>
-using namespace std;
-
-#include <qdialog.h>
-#include <qlabel.h>
-#include <qsocket.h>
-#include <qtimer.h>
-#include <qstatusbar.h>
-
-#include "messagebox.h"
-
-#include "cprlisten.h"
-
-#include "info.h"
-
-class CPRQueryDialog : public QDialog {
- Q_OBJECT
-public:
- CPRQueryDialog(Info *info,
- QLabel *lcpr,
- QLabel *lname,
- QWidget * parent = 0,
- const char * name = 0,
- QStatusBar *status = NULL);
- ~CPRQueryDialog();
-
-public slots:
- void bcancel_clicked();
- void bedit_clicked();
- void remove_digit();
- void remove_all();
- void insert_digit(int value);
- void cprSocket_readyRead();
- void cprSocket_connected();
- void cprSocket_error(int errnum);
- void cprSocket_timeout();
- void listen_timeout();
-
-
-private:
- Info *info;
-
- CPRListen *listen;
- QTimer *listen_timer;
-
- QStatusBar *statusbar;
-
- QLabel *lbl_cpr;
- QLabel *lbl_name;
-
- QSocket *cprSocket;
- char cpr[12];
- char internalCpr[11];
-
- void verifycpr(char *cpr);
- // void run(int pos);
- int test_cpr(const char *s);
-
- /*Configuration*/
- string *CPR_HOST;
- int CPR_PORT;
- int CPR_TIMEOUT;
-
-signals:
- void bbs_clicked();
- void bca_clicked();
- void number_clicked(int);
-
-public slots:
- void b_1_clicked();
- void b_2_clicked();
- void b_3_clicked();
- void b_4_clicked();
- void b_5_clicked();
- void b_6_clicked();
- void b_7_clicked();
- void b_8_clicked();
- void b_9_clicked();
- void b_0_clicked();
- void b_b_clicked();
- void b_c_clicked();
-
-private:
- void b_clicked(int value);
- QPushButton *createButton(QWidget *parent, const char *text, int value);
- int digits;
-
- QTimer *timer;
-};
-
-#endif /* USE_GUI */
-
-#endif/*__MIAV_CPRQUERYDIALOG_H__*/
diff --git a/src/daemon.cc b/src/daemon.cc
deleted file mode 100644
index 6e46bd5..0000000
--- a/src/daemon.cc
+++ /dev/null
@@ -1,118 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/***************************************************************************
- * daemon.cc
- *
- * Thu Jun 9 10:27:59 CEST 2005
- * Copyright 2005 Bent Bisballe
- * deva@aasimon.org
- ****************************************************************************/
-
-/*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-#include "daemon.h"
-
-#include <sys/stat.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <signal.h>
-#include <stdio.h>
-
-// For getgrent and getgrent
-#include <sys/types.h>
-#include <grp.h>
-#include <pwd.h>
-
-// For strcmp
-#include <string.h>
-
-Daemon::Daemon()
-{}
-
-Daemon::~Daemon()
-{}
-
-int Daemon::run(const char *user, const char* group)
-{
- int f;
- int fd;
-
- // Fetch user id
- int uid = -1;
- struct passwd *p = getpwent();
- while(p) {
- if(strcmp(p->pw_name, user) == 0) uid = p->pw_uid;
- p = getpwent();
- }
- if(uid == -1) {
- fprintf(stderr, "Could not find user \"%s\" in /etc/passwd file.\n", user);
- }
-
- // Fetch group id
- int gid = -1;
- struct group *g = getgrent();
- while(g) {
- if(strcmp(g->gr_name, group) == 0) gid = g->gr_gid;
- g = getgrent();
- }
- if(gid == -1) {
- fprintf(stderr, "Could not find group \"%s\" in /etc/group file.\n", group);
- }
-
- chdir("/");
- umask(0);
-
- f = fork();
- switch(f) {
- case -1: // Fork error
- perror("Fork in daemon.cc");
- return 1;
-
- case 0: // Forked child
- // Switch to given group
- if(setgid(gid) != 0) {
- fprintf(stderr, "Failed to change to group \"%s\" (gid: %d), quitting.\n", group, gid);
- perror("");
- fprintf(stderr, "Runnning daemon as current group\n");
- }
-
- // Switch to given user
- if(setuid(uid) != 0) {
- fprintf(stderr, "Failed to change to user \"%s\" (uid: %d), quitting.\n", user, uid);
- perror("");
- fprintf(stderr, "Runnning daemon as current user\n");
- }
-
- // 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);
- signal (SIGINT, SIG_IGN);
- signal (SIGHUP, SIG_IGN);
-
- return daemon_main();
-
- default: // Parent
- // exit(0);
- return 0;
- }
-}
diff --git a/src/daemon.h b/src/daemon.h
deleted file mode 100644
index 1bd663e..0000000
--- a/src/daemon.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/***************************************************************************
- * daemon.h
- *
- * Thu Jun 9 10:27:59 CEST 2005
- * Copyright 2005 Bent Bisballe
- * deva@aasimon.org
- ****************************************************************************/
-
-/*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-#ifndef __DAEMON_H__
-#define __DAEMON_H__
-
-#include <sys/types.h>
-
-class Daemon {
-public:
- Daemon();
- virtual ~Daemon();
-
- /**
- * Use NOBODY_GROUP and NOBODY_USER if no privileges are needed to run.
- */
- int run(const char* user, const char* group);
-
-private:
- virtual int daemon_main() = 0;
-};
-
-#endif/*__DAEMON_H__*/
diff --git a/src/debug.h b/src/debug.h
deleted file mode 100644
index 48c0830..0000000
--- a/src/debug.h
+++ /dev/null
@@ -1,103 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/***************************************************************************
- * debug.h
- *
- * Tue Apr 12 14:34:20 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.
- */
-#include "config.h"
-#ifndef __MIAV_DEBUG_H__
-#define __MIAV_DEBUG_H__
-
-//#define DEBUG_ALLOC
-
-#ifdef DEBUG_ALLOC
-typedef struct _A_{
- struct _A_* prev;
- struct _A_* next;
- char name[32];
- void *addr;
-} __debug__;
-
-__debug__ *debug_first = NULL;
-
-inline void debugAlloc(void *p, char* name)
-{
- __debug__ *d = debug_first;
-
- fprintf(stderr, "Adding %d - %s\n", p, name);
-
- debug_first = (__debug__*)malloc(sizeof(__debug__));
- debug_first->prev = NULL;
- debug_first->next = d;
- if(d) d->prev = debug_first;
- debug_first->addr = p;
- strcpy(debug_first->name, name);
-}
-
-inline void debugFree(void *p)
-{
- __debug__ *d = debug_first;
-
- while(d && d->addr != p) {
- d = d->next;
- }
-
- if(!d) {
- fprintf(stderr, "ERROR: memory address not found %d - perhaps already freed!\n", p);
- exit(1);
- }
-
- fprintf(stderr, "Removing %d - %s\n", p, d->name);
- __debug__ *next = d->next;
- __debug__ *prev = d->prev;
- if(prev) prev->next = d->next;
- if(next) next->prev = d->prev;
- if(debug_first == d) debug_first = next;
- free(d);
-}
-
-inline void debugPrint()
-{
- __debug__ *d = debug_first;
-
- fprintf(stderr, "Alloc List:\n");
-
- while(d) {
- fprintf(stderr, "\t[%d] %s\n", d->addr, d->name);
- d = d->next;
- }
-}
-
-#define FREE(x) debugFree(x)
-#define ALLOC(x, y) debugAlloc(x, y)
-#define PRINT() debugPrint()
-
-#else/*DEBUG_ALLOC*/
-
-#define FREE(x) {}
-#define ALLOC(x, y) {}
-#define PRINT() {}
-
-#endif/*DEBUG_ALLOC*/
-
-#endif/*__MIAV_DEBUG_H__*/
diff --git a/src/decoder.cc b/src/decoder.cc
deleted file mode 100644
index 0d56aca..0000000
--- a/src/decoder.cc
+++ /dev/null
@@ -1,286 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/***************************************************************************
- * decoder.cc
- *
- * Sat Feb 19 17:05:43 CET 2005
- * Copyright 2005 Bent Bisballe
- * deva@aasimon.org
- ****************************************************************************/
-
-/*
- * Originally from:
- * RTVideoRec Realtime video recoder and encoder for Linux
- *
- * Copyright (C) 2004 B. Stultiens
- * Copyright (C) 2004 Koen Otter and Glenn van der Meyden
- */
-
-/*
- * 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>
-#ifdef USE_GUI
-
-#include "frame_stream.h"
-
-#include "miav_config.h"
-
-#include <time.h>
-
-// Use libdv
-#include <libdv/dv.h>
-#include <libdv/dv_types.h>
-
-#include <SDL/SDL.h>
-
-#include "dv.h"
-#include "dvfile.h"
-#include "dv1394.h"
-
-#include "decoder.h"
-#include "debug.h"
-
-Decoder::Decoder(Info *ginfo,
- sem_t *gencode_sem,
- sem_t *gplayer_sem,
- Queue<Frame> *gencode_queue,
- Queue<Frame> *gplayer_queue,
- pthread_mutex_t *gmutex,
- volatile int *grunning)
-{
- info = ginfo;
-
- encode_sem = gencode_sem;
- player_sem = gplayer_sem;
- encode_queue = gencode_queue;
- player_queue = gplayer_queue;
- mutex = gmutex;
- running = grunning;
-
- b_shoot = false;
- b_freeze = false;
- b_record = false; // Initially no recording is done.
-
- pthread_mutex_init (&shot_mutex, NULL);
- shot = NULL;
-
- mute = false;
-}
-
-Decoder::~Decoder()
-{
- pthread_mutex_destroy(&shot_mutex);
-}
-
-void Decoder::decode()
-{
- frame_stream *dvstream;
-
- bool local_shoot;
- int local_freeze;
- bool local_record = false;
- bool old_record;
-
- bool skip_frames = config->readInt("player_skip_frames");
-
- dv1394 dv1394_stream = dv1394(info); // Use default port and channel.
- dvfile dvfile_stream = dvfile(info);
- if(dv1394_stream.connect()) {
- // Use the dv1394 stream for input.
- dvstream = &dv1394_stream;
- } else {
- // Use the fallback dv filereader for input.
- dvstream = &dvfile_stream;
- }
-
- while(*running) {
- uint8_t *ptr;
- SDL_Event user_event;
-
- // Read a dvframe
- ptr = dvstream->readFrame();
- if(!ptr) return; // No frame read. (Due to dv read error)
-
- old_record = local_record;
- local_shoot = b_shoot;
- b_shoot = false;
- local_freeze = b_freeze;
- b_freeze = false;
- local_record = b_record;
-
- if(local_shoot) {
- pthread_mutex_lock(&shot_mutex);
- if(!shot) shot = new Frame(ptr, DVPACKAGE_SIZE);
- pthread_mutex_unlock(&shot_mutex);
- }
-
- if(local_freeze == 1) {
- pthread_mutex_lock(&shot_mutex);
- if(shot) delete shot;
- shot = new Frame(ptr, DVPACKAGE_SIZE);
- pthread_mutex_unlock(&shot_mutex);
- }
-
- static int showframe = 1;
- if(skip_frames != 0) showframe = 1 - showframe;
- if(showframe) {
- Frame *pframe = new Frame(ptr, DVPACKAGE_SIZE);
-
- pframe->shoot = local_shoot;
- pframe->freeze = local_freeze;
- pframe->record = local_record;
-
- player_queue->push(pframe);
-
- // Create and send SDL event.
- user_event.type = SDL_USEREVENT;
- user_event.user.code = 0;
- user_event.user.data1 = NULL;
- user_event.user.data2 = NULL;
- SDL_PushEvent(&user_event);
- }
-
- if(local_record | (local_record != old_record) | local_shoot | local_freeze) {
- Frame *eframe = new Frame(NULL, 0);
- eframe->data = ptr;
- eframe->size = DVPACKAGE_SIZE;
-
- eframe->shoot = local_shoot;
- eframe->freeze = local_freeze;
- eframe->record = local_record;
- eframe->mute = mute;
-
- encode_queue->push(eframe);
-
- sem_post(encode_sem);
- } else {
- free(ptr);
- }
- }
-
- // Kick the others so they wake up with empty queues
- sem_post(encode_sem);
-}
-
-void Decoder::thread_main() {
- decode();
- fprintf(stderr, "Decoder thread stopped.\n"); fflush(stderr);
-}
-
-/*
- * Set freeze bit on current frame.
- */
-void Decoder::freeze()
-{
- b_freeze = 1;
-}
-
-/*
- * Remove frozen frame.
- */
-void Decoder::unfreeze()
-{
- b_freeze = -1;
-
- pthread_mutex_lock(&shot_mutex);
- delete shot;
- shot = NULL;
- pthread_mutex_unlock(&shot_mutex);
-}
-
-/*
- * Set shoot bit on current frame.
- */
-void Decoder::shoot(unsigned char *rgb)
-{
- struct timespec ts;
-
- b_shoot = true;
-
- // Wait for shot to be taken
- while(1) {
- pthread_mutex_lock(&shot_mutex);
- if(shot) {
- getScreenshot(shot, rgb);
- delete shot;
- shot = NULL;
- pthread_mutex_unlock(&shot_mutex);
- return;
- }
- pthread_mutex_unlock(&shot_mutex);
-
- ts.tv_sec = 0;
- ts.tv_nsec = 100000000L; // 100ms
- nanosleep(&ts, NULL);
- }
-}
-
-/*
- * Set the record bit to true in all following frames.
- */
-void Decoder::start()
-{
- b_record = true;
-}
-
-/*
- * Set the record bit to false in all following frames.
- */
-void Decoder::stop(n_savestate save)
-{
- b_record = false;
-}
-
-void Decoder::getScreenshot(Frame *frame, unsigned char *rgb)
-{
- unsigned char *pixels[3];
- int pitches[3];
-
- pixels[ 0 ] = rgb;
- pixels[ 1 ] = NULL;
- pixels[ 2 ] = NULL;
-
- pitches[ 0 ] = 720 * 4;
- pitches[ 1 ] = 0;
- pitches[ 2 ] = 0;
-
- dv_decoder_t *decoder = dv_decoder_new(FALSE/*this value is unused*/, FALSE, FALSE);
- decoder->quality = DV_QUALITY_BEST;
-
- dv_parse_header(decoder, frame->data);
-
- decoder->system = e_dv_system_625_50; // PAL lines, PAL framerate
- decoder->sampling = e_dv_sample_422; // 4 bytes y, 2 bytes u, 2 bytes v
- decoder->std = e_dv_std_iec_61834;
- decoder->num_dif_seqs = 12;
-
- // libdv img decode to rgb
- dv_decode_full_frame(decoder,
- frame->data,
- e_dv_color_bgr0,
- pixels,
- pitches);
-
- dv_decoder_free(decoder);
-}
-
-void Decoder::setMute(bool m)
-{
- mute = m;
-}
-
-#endif /*USE_GUI*/
diff --git a/src/decoder.h b/src/decoder.h
deleted file mode 100644
index 20878c7..0000000
--- a/src/decoder.h
+++ /dev/null
@@ -1,99 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/***************************************************************************
- * decoder.h
- *
- * Sat Feb 19 17:05:42 CET 2005
- * Copyright 2005 Bent Bisballe
- * deva@aasimon.org
- ****************************************************************************/
-
-/*
- * Originally from:
- * RTVideoRec Realtime video recoder and encoder for Linux
- *
- * Copyright (C) 2004 B. Stultiens
- */
-
-/*
- * 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"
-#ifdef USE_GUI
-
-#ifndef __RTVIDEOREC_DECODER_H
-#define __RTVIDEOREC_DECODER_H
-
-#include "info.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "queue.h"
-#include "encoder.h"
-#include "player.h"
-
-#include "thread.h"
-#include "frame.h"
-
-class Decoder : public Thread {
-public:
- Decoder(Info *ginfo,
- sem_t *gencode_sem,
- sem_t *gplayer_sem,
- Queue<Frame> *gencode_queue,
- Queue<Frame> *gplayer_queue,
- pthread_mutex_t *gmutex,
- volatile int *grunning);
- ~Decoder();
- void thread_main();
-
- void freeze();
- void unfreeze();
- void shoot(unsigned char *rgb);
- void start();
- void stop(n_savestate save);
- void setMute(bool mute);
-
-private:
- volatile bool mute;
-
- void getScreenshot(Frame *frame, unsigned char *rgb);
-
- pthread_mutex_t shot_mutex;
- Frame* shot;
-
- volatile int b_freeze;
- volatile bool b_shoot;
- volatile bool b_record;
-
- Info *info;
- // AVCodecContext dvcodec;
-
- sem_t *encode_sem;
- sem_t *player_sem;
- Queue<Frame> *encode_queue;
- Queue<Frame> *player_queue;
- pthread_mutex_t *mutex;
- volatile int *running;
-
- void decode();
-};
-
-#endif/* __RTVIDEOREC_DECODER_H*/
-
-#endif/*USE_GUI*/
diff --git a/src/dv.h b/src/dv.h
deleted file mode 100644
index e346d03..0000000
--- a/src/dv.h
+++ /dev/null
@@ -1,33 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/***************************************************************************
- * dv.h
- *
- * Thu Apr 14 19:29:55 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.
- */
-#include "config.h"
-#ifndef __MIAV_DV_H__
-#define __MIAV_DV_H__
-
-#define DVPACKAGE_SIZE 144000
-
-#endif/*__MIAV_DV_H__*/
diff --git a/src/dv1394.cc b/src/dv1394.cc
deleted file mode 100644
index 270da2e..0000000
--- a/src/dv1394.cc
+++ /dev/null
@@ -1,175 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/***************************************************************************
- * dv1394.cc
- *
- * Tue Apr 19 12:10:34 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.
- */
-#include <config.h>
-#include "dv1394.h"
-
-#ifdef USE_GUI
-
-#include "dv.h"
-
-
-#include <stdlib.h>
-#include <memory.h>
-#include <stdio.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <errno.h>
-
-
-
-/**
- * Callback function for the firewire interface.
- */
-static int raw_reader( raw1394handle_t handle, int channel, size_t length, quadlet_t *data )
-{
- static char *framedata = NULL;
-
- // Only process packets with reasonable length.
- if ( length > 16 )
- {
- unsigned char * p = ( unsigned char* ) & data[ 3 ];
- int section_type = p[ 0 ] >> 5; // section type is in bits 5 - 7
- int dif_sequence = p[ 1 ] >> 4; // dif sequence number is in bits 4 - 7
- int dif_block = p[ 2 ];
-
- if ( section_type == 0 && dif_sequence == 0 )
- {
- if ( framedata != NULL )
- {
- raw1394_set_userdata(handle, (void *)framedata);
- framedata = NULL;
- }
- }
-
- if(!framedata)
- {
- framedata = (char *)malloc(DVPACKAGE_SIZE); // dvframe.h
- if(!framedata)
- {
- // We're fucked
- fprintf(stderr, "Framedata allocation error: %s.\n", strerror( errno ) ); fflush(stderr);
- exit(1);
- }
- }
-
- switch ( section_type )
- {
- case 0: // 1 Header block
- // p[3] |= 0x80; // hack to force PAL data
- memcpy( framedata + dif_sequence * 150 * 80, p, 480 );
- break;
-
- case 1: // 2 Subcode blocks
- memcpy( framedata + dif_sequence * 150 * 80 + ( 1 + dif_block ) * 80, p, 480 );
- break;
-
- case 2: // 3 VAUX blocks
- memcpy( framedata + dif_sequence * 150 * 80 + ( 3 + dif_block ) * 80, p, 480 );
- break;
-
- case 3: // 9 Audio blocks interleaved with video
- memcpy( framedata + dif_sequence * 150 * 80 + ( 6 + dif_block * 16 ) * 80, p, 480 );
- break;
-
- case 4: // 135 Video blocks interleaved with audio
- memcpy( framedata + dif_sequence * 150 * 80 + ( 7 + ( dif_block / 15 ) + dif_block ) * 80, p, 480 );
- break;
-
- default: // we can't handle any other data
- break;
- }
- }
- return 0;
-}
-
-dv1394::dv1394(Info *i, int p, int c)
-{
- info = i;
- port = p;
- channel = c;
-}
-
-dv1394::~dv1394()
-{
- // Close firewire connection.
- if(handle) raw1394_destroy_handle(handle);
-}
-
-bool dv1394::connect()
-{
- int n_ports;
- struct raw1394_portinfo pinf[ 16 ];
-
- // Get handle to firewire channels
- handle = raw1394_new_handle();
- if(!handle) {
- 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 ) {
- info->error("raw1394 - failed to get port info: %s.", strerror( errno ) );
- raw1394_destroy_handle(handle);
- handle = NULL;
- return false;
- }
-
- // Tell raw1394 which host adapter to use
- if(raw1394_set_port(handle, port) < 0 ) {
- info->error("raw1394 - failed to set port: %s.", strerror( errno ) );
- raw1394_destroy_handle(handle);
- handle = NULL;
- return false;
- }
-
- raw1394_set_iso_handler( handle, channel, raw_reader);
- raw1394_set_userdata( handle, ( void* ) NULL);
- raw1394_start_iso_rcv( handle, channel);
-
- return true;
-}
-
-unsigned char *dv1394::readFrame()
-{
- // Firewire port not correctly opened.
- if(!handle) return NULL;
-
- unsigned char *ptr;
- while(1) {
- raw1394_loop_iterate(handle);
- ptr = (unsigned char *)raw1394_get_userdata(handle);
- if(ptr) {
- raw1394_set_userdata(handle, NULL);
- break;
- }
- }
- return ptr;
-}
-
-#endif/*USE_GUI*/
diff --git a/src/dv1394.h b/src/dv1394.h
deleted file mode 100644
index 7cea9d0..0000000
--- a/src/dv1394.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/***************************************************************************
- * dv1394.h
- *
- * Tue Apr 19 12:10:34 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.
- */
-#include "config.h"
-#ifndef __MIAV_DV1394_H__
-#define __MIAV_DV1394_H__
-
-#ifdef USE_GUI
-
-#include "frame_stream.h"
-#include <libraw1394/raw1394.h>
-
-#include "info.h"
-
-class dv1394 : public frame_stream {
-public:
- dv1394(Info* info, int port = 0, int channel = 63); // 63 is default channel... sucks.
- ~dv1394();
-
- bool connect();
-
- unsigned char *readFrame();
-
-private:
- raw1394handle_t handle;
- Info *info;
- int port;
- int channel;
-};
-
-#endif/*__MIAV_DV1394_H__*/
-#endif/*USE_GUI*/
diff --git a/src/dvfile.cc b/src/dvfile.cc
deleted file mode 100644
index 7d83255..0000000
--- a/src/dvfile.cc
+++ /dev/null
@@ -1,60 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/***************************************************************************
- * dvfile.cc
- *
- * Thu Jul 28 17:30:48 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.
- */
-#include "config.h"
-#include "dvfile.h"
-
-#include "dv.h"
-#include "util.h"
-
-dvfile::dvfile(Info* i)
-{
- info = i;
- fp = fopen(TEST_MOVIE, "r");
- if(!fp) info->error("Couldn't open %s for reading.", TEST_MOVIE);
-}
-
-dvfile::~dvfile()
-{
- fclose(fp);
-}
-
-unsigned char *dvfile::readFrame()
-{
- unsigned char *frame = new unsigned char[DVPACKAGE_SIZE];
-
- sleep_1_frame();
-
- if(fp) {
- while(fread(frame, DVPACKAGE_SIZE, 1, fp) == 0) {
- fseek(fp, 0L, SEEK_SET);
- }
- } else {
- memset(frame, 0, sizeof(frame));
- }
-
- return frame;
-}
diff --git a/src/dvfile.h b/src/dvfile.h
deleted file mode 100644
index dc91a14..0000000
--- a/src/dvfile.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/***************************************************************************
- * dvfile.h
- *
- * Thu Jul 28 17:30:48 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.
- */
-#include "config.h"
-#ifndef __MIAV_DVFILE_H__
-#define __MIAV_DVFILE_H__
-
-#include "frame_stream.h"
-
-#include <stdio.h>
-
-#include "info.h"
-
-#define TEST_MOVIE PIXMAPS"/dummy.dv"
-
-class dvfile : public frame_stream {
-public:
- dvfile(Info* info);
- ~dvfile();
-
- unsigned char *readFrame();
-
-private:
- Info* info;
- FILE* fp;
-};
-
-#endif/*__MIAV_DVFILE_H__*/
diff --git a/src/encoder.cc b/src/encoder.cc
deleted file mode 100644
index e7b79bf..0000000
--- a/src/encoder.cc
+++ /dev/null
@@ -1,273 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/***************************************************************************
- * encoder.cc
- *
- * Tue Apr 19 12:10:34 CEST 2005
- * Copyright 2005 Bent Bisballe
- * deva@aasimon.org
- ****************************************************************************/
-
-/*
- * Originally from:
- * RTVideoRec Realtime video recoder and encoder for Linux
- *
- * Copyright (C) 2004 B. Stultiens
- * Copyright (C) 2004 Koen Otter and Glenn van der Meyden
- */
-
-/*
- * 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>
-#ifdef USE_GUI
-
-#include "util.h"
-#include "encoder.h"
-
-Encoder::Encoder(Info *ginfo,
- const char *gip,
- const int gport,
- sem_t *gsem,
- Queue<Frame> *gqueue,
- pthread_mutex_t *gmutex,
- volatile int *grunning)
-{
- info = ginfo;
-
- strcpy(ip, gip);
- port = gport;
- memset(cpr, 0, sizeof(cpr));
-
- sem = gsem;
- queue = gqueue;
- mutex = gmutex;
- running = grunning;
-
- // record = 0;
-
- sem_init(&record_sem, 0, 0);
-
- s = NULL;
- n = NULL;
-
- frozen = false;
-
- savestate_sent = false;
- savestate = NO_CHANGE;
-
- // shoot_request = 0;
- // shoot_value = 0;
- // freeze_request = 0;
- // freeze_value = 0;
-}
-
-
-Encoder::~Encoder()
-{
- // If a hanging connection exists, we better close it.
- /* // Already deleted in thread_main
- if(s) {
- if(n) delete n;
- delete s;
- s = NULL;
- n = NULL;
- }
- */
-}
-
-
-void Encoder::encode()
-{
- Frame *frame;
-
- while(*running) {
- sem_wait(sem);
-
- frame = queue->pop();
-
- if(frame) {
- if(frame->freeze == 1) frozen = true;
- if(frame->freeze == -1) frozen = false;
- if(frame->shoot) frozen = false;
-
- if(frame->record ||
- (frame->freeze == 1) ||
- frame->shoot) {
-
- // If no connection is present, make a new one
- if(!s) {
- s = new Socket(port, info);
- s->sconnect(ip);
- n = new Network(s, info);
- }
-
- n_header h;
-
- if(savestate != NO_CHANGE) savestate_sent = true;
-
- h.header_type = DATA_HEADER;
- sprintf(h.header.h_data.cpr, cpr);
- h.header.h_data.freeze = frame->freeze;
- h.header.h_data.snapshot = frame->shoot;
- h.header.h_data.record = frame->record;
- h.header.h_data.savestate = savestate;//NO_CHANGE;
- h.header.h_data.mute = frame->mute;
-
- savestate = NO_CHANGE; // only transmit once!
-
- // if(freeze_request != freeze_value) freeze_value = freeze_request;
- // if(shoot_request != shoot_value) shoot_value = shoot_request;
-
- n->sendPackage(&h, frame->data, frame->size);
- } else {
- // When frozen we need to preserve the connection in order to
- // remember the frozen frame on the server side.
- if(!frozen) {
- // No data is to be sent, if we have a connection, destroy it.
- if(s) {
- if(n) delete n;
- delete s;
- s = NULL;
- n = NULL;
- }
- }
- }
-
- if(frame->shoot && !frozen && !frame->record) {
- // FIXME: This is ugly!
- // Bugfix... connection not cleared, when an 'unfrozen' snapshot is taken,
- // and no recording is done.
- if(s) {
- if(n) delete n;
- delete s;
- s = NULL;
- n = NULL;
- }
- }
-
- if(frame) delete frame;
- }
- }
-}
-
-
-void Encoder::setCpr(char *newcpr)
-{
- strcpy(cpr, newcpr);
-}
-
-
-void Encoder::freeze()
-{
- /*
- if(!s) {
- s = new Socket(port, errobj);
- s->sconnect(ip);
- n = new Network(s, errobj);
- }
- */
- // if(!errobj->hasError()) freeze_request = 1 - freeze_request;
-}
-
-
-/*
- * shoot
- * Set the shoot bit in the network header on the current frame.
- * return the decodet (rgba) version af that frame, for thumbnail show.
- */
-void Encoder::shoot()
-{
- /*
- if(!s) {
- s = new Socket(port, errobj);
- s->sconnect(ip);
- n = new Network(s, errobj);
- }
- */
- // if(!errobj->hasError()) shoot_request = 1 - shoot_request;
- // getScreenshot(rgb);
-}
-
-
-void Encoder::thread_main()
-{
- encode();
- if(s) {
- if(n) delete n;
- delete s;
- s = NULL;
- n = NULL;
- }
- fprintf(stderr, "Encoder thread stopped.\n"); fflush(stderr);
-}
-
-
-void Encoder::start()
-{
- savestate = NO_CHANGE;
- savestate_sent = false;
- /*
- if(!s) {
- s = new Socket(port, errobj);
- s->sconnect(ip);
- n = new Network(s, errobj);
- }
- */
- // if(!errobj->hasError()) record = 1;
-}
-
-
-void Encoder::stop(n_savestate save)
-{
- savestate = save;
- // Don't return until we are sure the savestate has been sent.
- while(savestate_sent == false) {
- // Just wait a while (in a while!)
- sleep_0_2_frame();
- }
-/*
- struct timespec ts;
- // TODO: set save state in package header.
-
- // Lock the queue and wait until all elements are sent on the network.
- queue->lock();
- fprintf(stderr, "Emptying queue"); fflush(stderr);
- while(queue->peek()) {
- // Remove any late buffer
- // We don't care, the encoder finishes them all
- ts.tv_sec = 0;
- ts.tv_nsec = 500000000L; // 100ms
- fprintf(stderr, "."); fflush(stderr);
- nanosleep(&ts, NULL);
- }
- fprintf(stderr, "done!\n"); fflush(stderr);
-
- record = 0;
-
- queue->unlock();
-*/
-/*
- if(s) {
- if(n) delete n;
- delete s;
- s = NULL;
- n = NULL;
- }
-*/
-}
-
-#endif /*USE_GUI*/
diff --git a/src/encoder.h b/src/encoder.h
deleted file mode 100644
index 0fada07..0000000
--- a/src/encoder.h
+++ /dev/null
@@ -1,118 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/***************************************************************************
- * encoder.h
- *
- * Thu Apr 14 19:29:55 CEST 2005
- * Copyright 2005 Bent Bisballe
- * deva@aasimon.org
- ****************************************************************************/
-
-/*
- * Originally from:
- * RTVideoRec Realtime video recoder and encoder for Linux
- *
- * Copyright (C) 2004 B. Stultiens
- */
-
-/*
- * 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"
-#ifdef USE_GUI
-
-#ifndef __RTVIDEOREC_ENCODER_H
-#define __RTVIDEOREC_ENCODER_H
-
-#include "thread.h"
-
-#include "info.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-//#include <avformat.h>
-
-#include "miav.h"
-#include "util.h"
-#include "package.h"
-#include "frame.h"
-#include "queue.h"
-
-// FIXME: One size fits all...
-#define VIDEO_BUFFER_SIZE (1024*1024)
-
-
-/**
- * This class contains code for sending the video stream and the snapshots
- * over the network, to the MIaV server.
- */
-class Encoder : public Thread {
-public:
- Encoder(Info* ginfo,
- const char *gip,
- const int gport,
- sem_t *gsem,
- Queue<Frame> *gqueue,
- pthread_mutex_t *gmutex,
- volatile int *grunning);
- ~Encoder();
-
- void setCpr(char *newcpr);
-
- void start();
- void stop(n_savestate save);
-
- void freeze();
- void shoot();
-
- void thread_main();
-
- // AVFormatContext *fc;
- sem_t *sem;
- Queue<Frame> *queue;
- pthread_mutex_t *mutex;
- volatile int *running;
-
-private:
- Info *info;
-
- int port;
- char ip[32];
- char cpr[32];
-
- bool frozen;
-
- // volatile int record;
-
- // volatile int shoot_request;
- // int shoot_value;
- // volatile int freeze_request;
- // int freeze_value;
-
- volatile bool savestate_sent;
- volatile n_savestate savestate;
-
- sem_t record_sem;
- void encode();
-
- Socket *s;
- Network *n;
-};
-
-#endif
-
-#endif /*USE_GUI*/
diff --git a/src/file.cc b/src/file.cc
deleted file mode 100644
index 3a59334..0000000
--- a/src/file.cc
+++ /dev/null
@@ -1,240 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/***************************************************************************
- * file.cc
- *
- * Thu Jun 9 15:31:38 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.
- */
-#include <config.h>
-#include "file.h"
-
-#include "miav_config.h"
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <string.h>
-#include <unistd.h>
-
-#include <errno.h>
-
-// For ntoh*
-#include <netinet/in.h>
-
-#include <stdlib.h>
-
-File::File(char *fn, char* ext, Info *i)
-{
- char path[256];
-
- info = i;
-
- savestate = SAVE;
-
- filename = new char[strlen(fn) + 1];
- extension = new char[strlen(ext) + 1];
-
- strcpy(filename, fn);
- strcpy(extension, ext);
-
- num = 0;
- seqnum = 0;
- fd = -1;
-
- int pos = (int)strrchr(filename, '/');
- memset(path, 0, sizeof(path));
-
- if(pos) { // pos is NULL, a file will be created in the current dir (Which is bad)
- pos -= (int)filename; // Make pos relative to the beginning of the string
- strncpy(path, filename, pos);
- createPath(path);
- }
-
- Open();
-}
-
-File::~File()
-{
- close(fd);
-
- info->info("This session contains the following files...");
- for(unsigned int cnt = 0; cnt < filelist.size(); cnt ++) {
- info->info("[%s]", filelist[cnt].c_str());
- }
-
- std::string *trash = config->readString("server_trash");
- std::string *later = config->readString("server_later");
-
- switch(savestate) {
- case NO_CHANGE:
- info->warn("File had no savestate!");
- break;
-
- case SAVE:
- info->info("Files in this session is to be saved.");
- break;
-
- case DELETE:
- info->info("Files in this session is to be deleted (moved to trash).");
- Move((char*)trash->c_str());
- break;
-
- case LATER:
- info->info("Files in this session is stored for later decisson.");
- Move((char*)later->c_str());
- break;
- }
-
- delete filename;
- delete extension;
-}
-
-int File::Move(char *destination)
-{
- char newfile[256];
- char filename[256];
-
- createPath(destination);
- for(unsigned int cnt = 0; cnt < filelist.size(); cnt ++) {
- // TODO: Check is the file exists... if not make som noise!
-
-
- // TODO: Move file filelist[cnt] to the destination folder.
- strcpy(filename, (char*)filelist[cnt].c_str());
- sprintf(newfile, "%s%s", destination, strrchr(filename, '/'));
- if(rename((char*)filelist[cnt].c_str(), newfile) == -1)
- info->error("Error moving file %s to %s:",
- (char*)filelist[cnt].c_str(),
- newfile,
- strerror(errno));
- }
- return 0;
-}
-
-int File::Open()
-{
- char fname[256];
-
- if(fd != -1) {
- close(fd);
- fd = -1;
- }
-
- while(fd == -1) {
- if(seqnum) {
- // A sequence number > 0
- sprintf(fname, "%s%.3d-%d.%s", filename, num, seqnum, extension);
- } else {
- // A sequence number of 0
- sprintf(fname, "%s%.3d.%s", filename, num, extension);
- }
- fd = open(fname, O_CREAT | O_WRONLY | O_ASYNC | O_EXCL, //| O_LARGEFILE
- S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);
- if(fd == -1) num ++;
-
- // If more than 100 files are created in one day, something is terribly wrong!
- if(num > 100) {
- info->error("Something is wrong with the path [%s]!", fname);
- exit(1);
- }
-
- }
-
- std::string filename_string(fname);
- filelist.push_back(filename_string);
-
- seqnum ++;
-
- info->info("Output file: %s", fname);
-
- return 0;
-}
-
-int File::Write(void* data, int size)
-{
- int w;
-
- w = write(fd, data, size);
-
- if(w != size) {
- info->info("Wrapping file.");
- Open();
- w = write(fd, data, size);
- if(w != size) {
- info->error("Out of diskspace!");
- return -1;
- }
- }
-
- return w;
-}
-
-int File::createPath(char* path)
-{
- // struct stat stats;
- char *subpath;
-
- subpath = (char*)calloc(strlen(path) + 1, 1);
-
- strcpy(subpath, path);
-
- subpath[strrchr(subpath, '/') - subpath] = '\0';
-
- if(strlen(subpath) > 0) createPath(subpath);
-
- info->info("Checking and/or generating directory: %s", path);
-
- // 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);
-
- return 0;
-}
-
-void File::setSaveState(n_savestate s)
-{
- savestate = s;
- info->info("SETTING SAVESTATE TO: %d", savestate);
-}
-
-#ifdef __TEST_FILE
-#include "info_simple.h"
-
-int main(int argc, char *argv[]) {
- if(argc < 3) {
- fprintf(stderr, "usage:\n\ttest_file [filename] [extension]\n");
- return 1;
- }
-
-
- InfoSimple info;
- File file(argv[1], argv[2], &info);
-
- unsigned int val = 0x01234567;
- file.Write(val);
-
-}
-
-#endif/* __TEST_FILE*/
diff --git a/src/file.h b/src/file.h
deleted file mode 100644
index 04947df..0000000
--- a/src/file.h
+++ /dev/null
@@ -1,84 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/***************************************************************************
- * file.h
- *
- * Thu Jun 9 15:31:38 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.
- */
-#include "config.h"
-#ifndef __MIAV_FILE_H__
-#define __MIAV_FILE_H__
-
-#include "info.h"
-#include <stdio.h>
-
-#include <vector>
-#include <string>
-
-#include <string.h>
-
-// For savestate_n
-#include "package.h"
-
-class File {
-public:
- File(char *filename, char* ext, Info* info);
- ~File();
-
- int Write(void* data, int size);
- /*
- int Write(char* data, int size);
-
- int Write(unsigned long long int val);
- int Write(long long int val);
- int Write(long int val);
- int Write(unsigned long int val);
- int Write(int val);
- int Write(unsigned int val);
- int Write(short int val);
- int Write(unsigned short int val);
- */
-
- void setSaveState(n_savestate savestate);
-
-private:
- volatile n_savestate savestate;
- Info* info;
-
- std::vector<std::string> filelist;
-
- int Open();
-
- int Move(char *destination);
-
- int fd;
-
- int num;
- int seqnum;
-
- char* filename;
- char* extension;
-
- int createPath(char* path);
-};
-
-#endif/*__MIAV_FILE_H__*/
diff --git a/src/font.h b/src/font.h
deleted file mode 100644
index 64b5723..0000000
--- a/src/font.h
+++ /dev/null
@@ -1,3152 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/***************************************************************************
- * font.h
- *
- * Thu Sep 22 15:40:39 CEST 2005
- * Copyright 2005 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_FONT_H__
-#define __MIAV_FONT_H__
-
-#define FONT_HEIGHT 10
-#define FONT_WIDTH 8
-
-const char palette[] = {
- "\0\0\0\0\0\0\0\0\0\0" // 0 - 9
- "\0\0\0\0\0\0\0\0\0\0" // 10 - 19
- "\0\0\0\0\0\0\0\0\0\0" // 20 - 29
- "\0\0\0\0\0\0\0\0\0\0" // 30 - 39
- "\0\0\0\0\0\0\0\0\0\0" // 40 - 49
- "\0\0\0\0\0\0\0\0\0\0" // 50 - 59
- "\0\0\0\0\0\0\0\0\0\0" // 60 - 69
- "\0\0\0\0\0\0\0\0\0\0" // 70 - 79
- "\0\0\0\0\0\0\0\0\0\0" // 80 - 89
- "\0\0\0\0\0\0\0\0\0\0" // 90 - 99
- "\0\0\0\0\0\0\0\0\0\0" //100 -109
- "\0\0\0\0\0\0\0\0\0\0" //110 -119
- "\255\0\0\0\0\0\0\0\0\0" //120 -129
- "\0\0\0\0\0\0\0\0\0\0" //130 -139
- "\0\0\0\0\0\0\0\0\0\0" //140 -149
- "\0\0\0\0\0\0\0\0\0\0" //150 -159
- "\0\0\0\0\0\0\0\0\0\0" //160 -169
- "\0\0\0\0\0\0\0\0\0\0" //170 -179
- "\0\0\0\0\0\0\0\0\0\0" //180 -189
- "\0\0\0\0\0\0\0\0\0\0" //190 -199
- "\0\0\0\0\0\0\0\0\0\0" //200 -209
- "\0\0\0\0\0\0\0\0\0\0" //210 -219
- "\0\0\0\0\0\0\0\0\0\0" //220 -229
- "\0\0\0\0\0\0\0\0\0\0" //230 -239
- "\0\0\0\0\0\0\0\0\0\0" //240 -249
- "\0\0\0\0\0\0" //250 -255
-};
-
-const unsigned char letter[FONT_WIDTH + 1][FONT_HEIGHT][255] = {
- { // 0
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { // 1
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { // 2
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { // 3
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { // 4
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { // 5
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { // 6
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { // 7
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { // 8
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { // 9
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
-
- { // 10
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { // 11
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { // 12
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { // 13
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { // 14
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { // 15
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { // 16
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { // 17
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { // 18
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { // 19
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
-
- { // 20
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { // 21
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { // 22
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { // 23
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { // 24
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { // 25
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { // 26
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { // 27
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { // 28
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { // 29
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
-
- { // 30
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { // 31
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { // 32 space
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { // 33 !
- " x ",
- " x ",
- " x ",
- " x ",
- " x ",
- " x ",
- " x ",
- " ",
- " x ",
- " x ",
- },
- { // 34 "
- " ",
- " x x ",
- " x x ",
- " x x ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { // 35 #
- " x x ",
- " x x ",
- "xxxxxxx ",
- " x x ",
- " x x ",
- " x x ",
- " x x ",
- "xxxxxxx ",
- " x x ",
- " x x ",
- },
- { // 36 $
- " x ",
- " xxxxx ",
- " x x x ",
- "x x x ",
- " x x ",
- " xxxxx ",
- "x x x ",
- " x x x ",
- " xxxxx ",
- " x ",
- },
- { // 37 %
- " xx x ",
- "x x x ",
- " xx x ",
- " x ",
- " x ",
- " x ",
- " x ",
- " x xx ",
- "x x x ",
- "x xx ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
-
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
-
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
-
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
-
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
-
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
-
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
-
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
-
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
-
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
-
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
-
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
-
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
-
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
-
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
-
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
-
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
-
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
-
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
-
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
-
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
-
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
-
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- },
- { //
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- }
-};
-
-
-#endif/*__MIAV_FONT_H__*/
diff --git a/src/frame.cc b/src/frame.cc
deleted file mode 100644
index a274d89..0000000
--- a/src/frame.cc
+++ /dev/null
@@ -1,52 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/***************************************************************************
- * frame.cc
- *
- * Mon Nov 15 19:45:07 CET 2004
- * Copyright 2004 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.
- */
-#include <config.h>
-#include "frame.h"
-
-#include "debug.h"
-
-#include <memory.h>
-#include <stdlib.h>
-
-Frame::Frame(unsigned char *d, int sz)
-{
- if(sz) data = new unsigned char[sz];
- if(sz && d) memcpy(data, d, sz);
- size = sz;
- number = 0;
- memset(timecode, 0, sizeof(timecode));
-
- endOfFrameStream = false;
-}
-
-Frame::~Frame()
-{
- delete data;
- data = NULL;
- size = 0;
-}
-
diff --git a/src/frame.h b/src/frame.h
deleted file mode 100644
index 988f460..0000000
--- a/src/frame.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/***************************************************************************
- * frame.h
- *
- * Mon Nov 15 19:45:07 CET 2004
- * Copyright 2004 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.
- */
-#include "config.h"
-#ifndef __FRAME_H__
-#define __FRAME_H__
-
-// Definition of vector
-#include <vector>
-
-class Frame {
-public:
- Frame(unsigned char *d, int sz);
- ~Frame();
-
- unsigned char *data;
- unsigned int size;
-
- unsigned int number;
-
- unsigned int bitrate;
-
- bool mute;
-
- bool shoot;
- int freeze; // 1 is freeze, -1 is unfreeze
- bool record;
- char timecode[12];
-
- bool endOfFrameStream;
-};
-
-typedef std::vector< Frame* > FrameVector;
-
-#endif/*__FRAME_H__*/
diff --git a/src/frame_stream.h b/src/frame_stream.h
deleted file mode 100644
index bc0b9a2..0000000
--- a/src/frame_stream.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/***************************************************************************
- * frame_stream.h
- *
- * Thu Jul 28 17:15:27 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.
- */
-#include "config.h"
-#ifndef __MIAV_FRAME_STREAM_H__
-#define __MIAV_FRAME_STREAM_H__
-
-class frame_stream {
-public:
- frame_stream() {}
- virtual ~frame_stream() {}
-
- virtual unsigned char *readFrame() = 0;
-};
-
-
-#endif/*__MIAV_FRAME_STREAM_H__*/
-
diff --git a/src/historywidget.cc b/src/historywidget.cc
deleted file mode 100644
index bdeb880..0000000
--- a/src/historywidget.cc
+++ /dev/null
@@ -1,77 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/***************************************************************************
- * historywidget.cc
- *
- * Wed Jul 27 14:00:37 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.
- */
-#include <config.h>
-#ifdef USE_GUI
-#include "historywidget.h"
-
-#include "miav_config.h"
-
-HistoryWidget::HistoryWidget(QWidget *p) : QLabel(p)
-{
- parent = p;
- image = NULL;
-}
-
-HistoryWidget::~HistoryWidget()
-{
- if(image) delete image;
-}
-
-void HistoryWidget::set_image(QImage *i)
-{
- if(image) delete image;
-
- image = new QImage(*i);
-
- QImage resized = image->smoothScale(width(), height());
- setPixmap(resized);
-}
-
-QImage * HistoryWidget::get_image()
-{
- return image;
-}
-
-static HistoryWidget *fs = NULL;
-
-void HistoryWidget::mouseReleaseEvent(QMouseEvent *event)
-{
- if(!parent) { // We are a fullscreen window
- destroy();
- } else { // We are a nested window
- // Delete old instances before going fullscreen.
- if(fs) delete fs;
-
- fs = new HistoryWidget(NULL);
- fs->showFullScreen();
- fs->setFixedWidth(config->readInt("pixel_width"));
- fs->setFixedHeight(config->readInt("pixel_height"));
- fs->set_image(image);
- }
-}
-
-#endif/*USE_GUI*/
diff --git a/src/historywidget.h b/src/historywidget.h
deleted file mode 100644
index d464d59..0000000
--- a/src/historywidget.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/***************************************************************************
- * historywidget.h
- *
- * Wed Jul 27 14:00:37 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.
- */
-#include "config.h"
-#ifdef USE_GUI
-#ifndef __MIAV_HISTORYWIDGET_H__
-#define __MIAV_HISTORYWIDGET_H__
-
-#include <qlabel.h>
-#include <qimage.h>
-
-class HistoryWidget : public QLabel {
-Q_OBJECT
-public:
- HistoryWidget(QWidget *parent);
- ~HistoryWidget();
-
- void set_image(QImage *image);
- QImage *get_image();
-
- void mouseReleaseEvent(QMouseEvent *event);
-
-private:
- QImage *image;
- QWidget *parent;
-};
-
-#endif/*__MIAV_HISTORYWIDGET_H__*/
-#endif/*USE_GUI*/
diff --git a/src/img_encoder.cc b/src/img_encoder.cc
deleted file mode 100644
index 9282dc0..0000000
--- a/src/img_encoder.cc
+++ /dev/null
@@ -1,196 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/***************************************************************************
- * img_encoder.cc
- *
- * Mon Nov 15 19:45:07 CET 2004
- * Copyright 2004 Bent Bisballe
- * deva@aasimon.org
- ****************************************************************************/
-
-/*
- * Originally from:
- * RTVideoRec Realtime video recoder and encoder for Linux
- *
- * Copyright (C) 2004 B. Stultiens
- * Copyright (C) 2004 Koen Otter and Glenn van der Meyden
- */
-
-/*
- * 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 "img_encoder.h"
-#include <stdio.h>
-
-#include "debug.h"
-
-extern "C" {
-#include <jpeglib.h>
-}
-
-#include "jpeg_mem_dest.h"
-
-// Use libdv
-#include <libdv/dv.h>
-#include <libdv/dv_types.h>
-
-ImgEncoder::ImgEncoder(const char* cpr, Info *i)
-{
- info = i;
-
- // Create path and filename
- char fname[256];
- string *server_root;
- char birthmonth[3];
- char date[32];
- char encrypted_cpr[32];
-
- // Get server root
- server_root = config->readString("server_image_root");
-
- // Copy the bytes representing the birth month from the cpr
- // [dd][mm][yy]-[nn][nn]
- strncpy(birthmonth, &cpr[2], 2);
- birthmonth[2] = 0;
-
- // Create date (today) in [yyyy][mm][dd]
- struct tm *ltime;
- time_t t = time(NULL);
- ltime = localtime(&t);
- sprintf(date, "%.4d%.2d%.2d",
- ltime->tm_year + 1900,
- ltime->tm_mon,
- ltime->tm_mday);
-
- // Create 'encrypted' cpr, reverse numbers, skip month, and subtract from 9
- // [d1][d2][m1][m2][y1][y2]-[n1][n2][n3][n4]
- // =>
- // [9-n4][9-n3][9-n2][9-n1][9-y2][9-y1][9-d2][9-d1]
- memset(encrypted_cpr, 0, sizeof(encrypted_cpr));
- int p = strlen(cpr) - 1;
- int cnt = 0;
- while(p) {
- encrypted_cpr[cnt] = cpr[p];
- p--;
- if(p == 2) p--;
- if(cpr[p] == '-' || p == 3) p--;
- cnt++;
- }
-
- sprintf(fname, "%s/%s/%s/%s-%s-", server_root->c_str(), birthmonth, encrypted_cpr, cpr, date);
-
- file = new File(fname, "jpg", info);
-}
-
-
-ImgEncoder::~ImgEncoder()
-{
- delete file;
-}
-
-
-void ImgEncoder::encode(Frame *dvframe, int quality)
-{
- unsigned char rgb[720*576*4];
-
- getRGB(dvframe, rgb);
- writeJPEGFile(quality, rgb, 720, 576);
-}
-
-
-void ImgEncoder::writeJPEGFile(int quality, unsigned char *rgb, int image_width, int image_height)
-{
- JSAMPLE *image_buffer = (JSAMPLE*)rgb;
-
- size_t buffersize = (image_width * image_height * 3) + JPEG_HEADER_PAD;
- char *jpeg_output_buffer = new char [buffersize];
- struct jpeg_compress_struct cinfo;
- struct jpeg_error_mgr jerr;
-
- JSAMPROW row_pointer[1]; // pointer to JSAMPLE row[s]
- int row_stride; // physical row width in image buffer
-
- // Allocate and initialize JPEG compression object
- cinfo.err = jpeg_std_error(&jerr);
- jpeg_create_compress(&cinfo);
-
- // Specify data destination (see jpeg_mem_dest)
- jpeg_mem_dest(&cinfo, jpeg_output_buffer, &buffersize);
-
- // Set compression parameters
- cinfo.image_width = image_width; // image width and height, in pixels
- cinfo.image_height = image_height;
- cinfo.input_components = 3; // # of color components per pixel
- cinfo.in_color_space = JCS_RGB; // colorspace of input image
-
- jpeg_set_defaults(&cinfo);
-
- jpeg_set_quality(&cinfo, quality, TRUE); // limit to baseline-JPEG values
-
- // Start compressor
- jpeg_start_compress(&cinfo, TRUE);
-
- // While (scan lines remain to be written)
- row_stride = image_width * 3; // JSAMPLEs per row in image_buffer
-
- while (cinfo.next_scanline < cinfo.image_height) {
- row_pointer[0] = & image_buffer[cinfo.next_scanline * row_stride];
- (void) jpeg_write_scanlines(&cinfo, row_pointer, 1);
- }
-
- // Finish compression
- jpeg_finish_compress(&cinfo);
-
- // Release JPEG compression object
- jpeg_destroy_compress(&cinfo);
-
- info->info("JPEG buffersize: %d", buffersize);
- file->Write(jpeg_output_buffer, buffersize);
- delete jpeg_output_buffer;
-}
-
-void ImgEncoder::getRGB(Frame *frame, unsigned char *rgb)
-{
- unsigned char *pixels[3];
- int pitches[3];
-
- pixels[ 0 ] = rgb;
- pixels[ 1 ] = NULL;
- pixels[ 2 ] = NULL;
-
- pitches[ 0 ] = 720 * 3;
- pitches[ 1 ] = 0;
- pitches[ 2 ] = 0;
-
- dv_decoder_t *decoder = dv_decoder_new(FALSE/*this value is unused*/, FALSE, FALSE);
- decoder->quality = DV_QUALITY_BEST;
-
- dv_parse_header(decoder, frame->data);
-
- decoder->system = e_dv_system_625_50; // PAL lines, PAL framerate
- decoder->sampling = e_dv_sample_422; // 4 bytes y, 2 bytes u, 2 bytes v
- decoder->std = e_dv_std_iec_61834;
- decoder->num_dif_seqs = 12;
-
- // libdv img decode to rgb
- dv_decode_full_frame(decoder,
- frame->data,
- e_dv_color_rgb,
- pixels,
- pitches);
-
- dv_decoder_free(decoder);
-}
diff --git a/src/img_encoder.h b/src/img_encoder.h
deleted file mode 100644
index 9745a8f..0000000
--- a/src/img_encoder.h
+++ /dev/null
@@ -1,69 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/***************************************************************************
- * img_encoder.h
- *
- * Mon Nov 15 19:45:07 CET 2004
- * Copyright 2004 Bent Bisballe
- * deva@aasimon.org
- ****************************************************************************/
-
-/*
- * Originally from:
- * RTVideoRec Realtime video recoder and encoder for Linux
- *
- * Copyright (C) 2004 B. Stultiens
- */
-
-/*
- * 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 __RTVIDEOREC_IMGENCODER_H
-#define __RTVIDEOREC_IMGENCODER_H
-
-#include <stdio.h>
-
-#include "frame.h"
-#include "util.h"
-
-//#include <stdlib.h>
-//#include <string.h>
-
-#include "info.h"
-#include "file.h"
-
-#define VIDEO_BUFFER_SIZE (1024*1024) // FIXME: One size fits all...
-#define JPEG_HEADER_PAD 500
-
-class ImgEncoder {
-public:
- ImgEncoder(const char* cpr, Info *info);
- ~ImgEncoder();
- void encode(Frame *frame, int quality);
- void writeJPEGFile(int quality,
- unsigned char *image_buffer, // Points to large array of R,G,B-order data
- int image_width, // Number of columns in image
- int image_height); // Number of rows in image
-
-private:
- File *file;
- Info *info;
- void getRGB(Frame *frame, unsigned char *rgb);
-};
-
-#endif /*__RTVIDEOREC_IMGENCODER_H*/
-
diff --git a/src/info.cc b/src/info.cc
deleted file mode 100644
index 701a705..0000000
--- a/src/info.cc
+++ /dev/null
@@ -1,68 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/***************************************************************************
- * info.cc
- *
- * Mon Jun 13 22:16: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.
- */
-#include <config.h>
-#include "info.h"
-
-#include <time.h>
-
-Info::Info() {
- pthread_mutex_init (&mutex, NULL);
-}
-
-void Info::log(char *fmt, ...)
-{
- // const time_t t;
- FILE *fp;
- char buf[1024];
-
- pthread_mutex_lock(&mutex);
- // Beginning of safezone
-
- fp = fopen(log_filename.c_str(), "a");
- if(!fp) {
- fprintf(stderr, "Log file %s could not be opened in writemode.\n", log_filename.c_str());
- return;
- }
-
- va_list argp;
- va_start(argp, fmt);
- vsprintf(buf, fmt, argp);
- va_end(argp);
-
- time_t t = time(NULL);
- 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);
-
- // End of safezone
- pthread_mutex_unlock(&mutex);
-}
diff --git a/src/info.h b/src/info.h
deleted file mode 100644
index d533051..0000000
--- a/src/info.h
+++ /dev/null
@@ -1,61 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/***************************************************************************
- * info.h
- *
- * Tue May 3 09:04:04 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.
- */
-#include "config.h"
-#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>
-#include <stdarg.h>
-#include <pthread.h>
-#include <semaphore.h>
-#include <string>
-using namespace std;
-
-class Info {
-public:
- Info();
- virtual ~Info() {}
-
- virtual void error(char* fmt, ...) = 0;
- virtual void warn(char* fmt, ...) = 0;
- virtual void info(char* fmt, ...) = 0;
- void log(char* fmt, ...);
-
-protected:
- MiavConfig *config;
-
- pthread_mutex_t mutex;
- string log_filename;
-};
-
-#endif/*__MIAV_INFO_H__*/
diff --git a/src/info_console.cc b/src/info_console.cc
deleted file mode 100644
index ce406fb..0000000
--- a/src/info_console.cc
+++ /dev/null
@@ -1,101 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/***************************************************************************
- * info_console.cc
- *
- * Tue May 3 09:35:03 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.
- */
-#include <config.h>
-#include "info_console.h"
-
-#include "miav_config.h"
-
-#include <stdio.h>
-#include <stdarg.h>
-
-InfoConsole::InfoConsole(MiavConfig *c): Info()
-{
- this->config = c;
- log_filename = *(this->config->readString("server_log_file"));
-}
-
-InfoConsole::~InfoConsole()
-{
- pthread_mutex_destroy(&mutex);
-}
-
-void InfoConsole::error(char *fmt, ...)
-{
- char buf[1024];
-
- pthread_mutex_lock(&mutex);
- // Beginning of safezone
-
- va_list argp;
- va_start(argp, fmt);
- // 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, ...)
-{
- char buf[1024];
-
- pthread_mutex_lock(&mutex);
- // Beginning of safezone
-
- va_list argp;
- va_start(argp, fmt);
- // 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, ...)
-{
- char buf[1024];
-
- pthread_mutex_lock(&mutex);
- // Beginning of safezone
-
- va_list argp;
- va_start(argp, fmt);
- // 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
deleted file mode 100644
index 2adcad6..0000000
--- a/src/info_console.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/***************************************************************************
- * info_console.h
- *
- * Tue May 3 09:35:03 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.
- */
-#include "config.h"
-#ifndef __MIAV_INFO_CONSOLE_H__
-#define __MIAV_INFO_CONSOLE_H__
-
-#include "info.h"
-
-#include "miav_config.h"
-
-#include <pthread.h>
-#include <semaphore.h>
-
-#include <string>
-using namespace std;
-
-class InfoConsole: public Info {
-public:
- InfoConsole(MiavConfig *config);
- ~InfoConsole();
-
- void error(char* fmt, ...);
- void warn(char* fmt, ...);
- void info(char* fmt, ...);
-
-private:
-};
-
-#endif/*__MIAV_INFO_CONSOLE_H__*/
diff --git a/src/info_gui.cc b/src/info_gui.cc
deleted file mode 100644
index aa831b6..0000000
--- a/src/info_gui.cc
+++ /dev/null
@@ -1,144 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/***************************************************************************
- * info_gui.cc
- *
- * Tue May 3 09:34:59 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.
- */
-#include <config.h>
-#ifdef USE_GUI
-
-#include "info_gui.h"
-
-#include <stdio.h>
-#include <stdarg.h>
-
-#include <time.h>
-
-bool InfoEventHandler::eventFilter( QObject *o, QEvent *e )
-{
- if ( e->type() == TYPE_SHOW_MESSAGEBOX ) {
- // fprintf(stderr, "Custom event!\n"); fflush(stderr);
- MessageBox *msgbox = ((ShowMessageEvent*)e)->messagebox();
- msgbox->exec();
- delete msgbox;
- return TRUE; // eat event
- } else {
- // standard event processing
- return FALSE;
- }
-}
-
-InfoGui::InfoGui(QApplication *a, QWidget *p, MiavConfig *c): Info()
-{
- this->config = c;
- log_filename = *(this->config->readString("client_log_file"));
-
- qapp = a;
- parent = p;
-
- pthread_mutex_init (&mutex, NULL);
-}
-
-InfoGui::~InfoGui()
-{
- pthread_mutex_destroy(&mutex);
-}
-
-void InfoGui::setParent(QWidget *p)
-{
- parent = p;
-}
-
-void InfoGui::showmsg(char *msg, char *title, msg_icon icon)
-{
- pthread_mutex_lock(&mutex);
- // Beginning of safezone
-
- fprintf(stderr, "%s: %s\n", title, msg); fflush(stderr);
-
- while( !parent ) {
- struct timespec ts;
-
- ts.tv_sec = 0;
- ts.tv_nsec = 200000000L; // 200ms
- nanosleep(&ts, NULL);
- }
-
- MessageBox *msgbox = new MessageBox(parent,
- title,
- msg,
- TYPE_OK,
- icon);
-
- ShowMessageEvent *event = new ShowMessageEvent( msgbox );
-
- qapp->postEvent(parent, event);
-
- // End of safezone
- pthread_mutex_unlock(&mutex);
-}
-
-void InfoGui::error(char *fmt, ...)
-{
- char buf[1024];
-
- va_list argp;
- va_start(argp, fmt);
- vsprintf(buf, fmt, argp);
- va_end(argp);
-
- showmsg(buf, TXT_ERROR_TITLE, ICON_ERROR);
-
- log("Error: %s", buf);
-}
-
-void InfoGui::warn(char *fmt, ...)
-{
- char buf[1024];
-
- va_list argp;
- va_start(argp, fmt);
- vsprintf(buf, fmt, argp);
- va_end(argp);
-
- showmsg(buf, TXT_WARNING_TITLE, ICON_WARNING);
-
- log("Warning: %s", buf);
-}
-
-void InfoGui::info(char *fmt, ...)
-{
- char buf[1024];
-
- va_list argp;
- va_start(argp, fmt);
- vsprintf(buf, fmt, argp);
- va_end(argp);
-
- showmsg(buf, TXT_INFO_TITLE, ICON_INFO);
-
- log("Info: %s", buf);
-}
-
-
-#endif/*USE_GUI*/
diff --git a/src/info_gui.h b/src/info_gui.h
deleted file mode 100644
index a4f5135..0000000
--- a/src/info_gui.h
+++ /dev/null
@@ -1,86 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/***************************************************************************
- * info_gui.h
- *
- * Tue May 3 09:34:59 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.
- */
-#include "config.h"
-#ifndef __MIAV_INFO_GUI_H__
-#define __MIAV_INFO_GUI_H__
-
-#ifdef USE_GUI
-
-#define TXT_ERROR_TITLE "Der er opstået en fejl!"
-#define TXT_WARNING_TITLE "Advarsel"
-#define TXT_INFO_TITLE "Information"
-
-#include "info.h"
-
-#include "miav_config.h"
-
-#include <qwidget.h>
-#include <qapplication.h>
-
-#include <pthread.h>
-#include <semaphore.h>
-
-#include "messagebox.h"
-
-#define TYPE_SHOW_MESSAGEBOX 65432
-
-class ShowMessageEvent : public QCustomEvent {
-public:
- ShowMessageEvent( MessageBox* msgbox )
- : QCustomEvent( TYPE_SHOW_MESSAGEBOX ), m( msgbox ) {}
- MessageBox *messagebox() const { return m; }
-private:
- MessageBox *m;;
-};
-
-class InfoEventHandler : public QObject {
-protected:
- bool eventFilter( QObject *o, QEvent *e );
-};
-
-
-class InfoGui: public Info {
-public:
- InfoGui(QApplication *a, QWidget *p, MiavConfig *config);
- ~InfoGui();
-
- void error(char* fmt, ...);
- void warn(char* fmt, ...);
- void info(char* fmt, ...);
-
- void setParent(QWidget *p);
-
-private:
- void showmsg(char *msg, char *title, msg_icon icon);
-
- QApplication *qapp;
- QWidget *parent;
-};
-
-#endif/*__MIAV_INFO_GUI_H__*/
-
-#endif/*USE_GUI*/
diff --git a/src/info_simple.cc b/src/info_simple.cc
deleted file mode 100644
index a3db393..0000000
--- a/src/info_simple.cc
+++ /dev/null
@@ -1,94 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/***************************************************************************
- * info_simple.cc
- *
- * Tue Sep 20 17:00:25 CEST 2005
- * Copyright 2005 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 "info_simple.h"
-
-#include <stdio.h>
-#include <stdarg.h>
-
-InfoSimple::InfoSimple(): Info()
-{
-}
-
-InfoSimple::~InfoSimple()
-{
- pthread_mutex_destroy(&mutex);
-}
-
-void InfoSimple::error(char *fmt, ...)
-{
- char buf[1024];
-
- pthread_mutex_lock(&mutex);
- // Beginning of safezone
-
- va_list argp;
- va_start(argp, fmt);
- vsprintf(buf, fmt, argp);
- va_end(argp);
-
- // End of safezone
- pthread_mutex_unlock(&mutex);
-
- fprintf(stderr, "Error: %s\n", buf);
-}
-
-void InfoSimple::warn(char *fmt, ...)
-{
- char buf[1024];
-
- pthread_mutex_lock(&mutex);
- // Beginning of safezone
-
- va_list argp;
- va_start(argp, fmt);
- vsprintf(buf, fmt, argp);
- va_end(argp);
-
- // End of safezone
- pthread_mutex_unlock(&mutex);
-
- fprintf(stderr, "Warning: %s\n", buf);
-}
-
-void InfoSimple::info(char *fmt, ...)
-{
- char buf[1024];
-
- pthread_mutex_lock(&mutex);
- // Beginning of safezone
-
- va_list argp;
- va_start(argp, fmt);
- vsprintf(buf, fmt, argp);
- va_end(argp);
-
- // End of safezone
- pthread_mutex_unlock(&mutex);
-
- fprintf(stderr, "Info: %s\n", buf);
-}
diff --git a/src/info_simple.h b/src/info_simple.h
deleted file mode 100644
index 302a371..0000000
--- a/src/info_simple.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/***************************************************************************
- * info_simple.h
- *
- * Tue Sep 20 17:00:25 CEST 2005
- * Copyright 2005 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_INFO_SIMPLE_H__
-#define __MIAV_INFO_SIMPLE_H__
-
-#include "info.h"
-
-class InfoSimple: public Info {
-public:
- InfoSimple();
- ~InfoSimple();
-
- void error(char* fmt, ...);
- void warn(char* fmt, ...);
- void info(char* fmt, ...);
-
-private:
-};
-
-#endif/*__MIAV_INFO_SIMPLE_H__*/
diff --git a/src/iso11172-1.h b/src/iso11172-1.h
deleted file mode 100644
index ee8f408..0000000
--- a/src/iso11172-1.h
+++ /dev/null
@@ -1,161 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/***************************************************************************
- * iso11172-1.h
- *
- * Wed Aug 31 13:48:30 CEST 2005
- * Copyright 2005 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.
- */
-
-/*
- * This file contains symbols used to create an ISO11172-1 compatible multiplexed
- * MPEG stream.
- */
-
-#include "config.h"
-#ifndef __MIAV_ISO11172_1_H__
-#define __MIAV_ISO11172_1_H__
-
-#define CLOCK_90KHZ 90000
-
-namespace ISO11172_1 {
- ////////////////////////////////////////////////////
- // Types
- ////////////////////////////////////////////////////
- // 64 bits (8 bytes)
- typedef struct {
- unsigned long long int marker_bit3:1;
- unsigned long long int system_clock_reference3:15;
- unsigned long long int marker_bit2:1;
- unsigned long long int system_clock_reference2:15;
- unsigned long long int marker_bit1:1;
- unsigned long long int system_clock_reference1:3;
- unsigned long long int padding:4;
- unsigned long long int stuffing_byte:8;
- unsigned long long int packet_length:16;
- } packet_header;
-
- typedef struct {
- unsigned long long int marker_bit5:1;
- unsigned long long int mux_rate:22;
- unsigned long long int marker_bit4:1;
- unsigned long long int marker_bit3:1;
- unsigned long long int system_clock_reference3:15;
- unsigned long long int marker_bit2:1;
- unsigned long long int system_clock_reference2:15;
- unsigned long long int marker_bit1:1;
- unsigned long long int system_clock_reference1:3;
- unsigned long long int padding:4;
- } pack_header;
-
- typedef struct {
- unsigned long long int reserved_byte:8;
- unsigned long long int video_bound:5;
- unsigned long long int marker_bit3:1;
- unsigned long long int system_video_clock_flag:1;
- unsigned long long int system_audio_clock_flag:1;
- unsigned long long int CSPS_flag:1;
- unsigned long long int fixed_flag:1;
- unsigned long long int audio_bound:6;
- unsigned long long int marker_bit2:1;
- unsigned long long int rate_bound:22;
- unsigned long long int marker_bit1:1;
- unsigned long long int header_length:16;
- } system_header;
-
- typedef struct {
- unsigned long int STD_buffer_size_bound:13;
- unsigned long int STD_buffer_bound_scale:1;
- unsigned long int market_bits:2;
- unsigned long int stream_id:8;
- } stream_description;
-
- ////////////////////////////////////////////////////
- // Constants
- ////////////////////////////////////////////////////
- const char pack_start_code[] = "\x00\x00\x01\xBA";
- const char system_header_start_code[] = "\x00\x00\x01\xBB";
- const char packet_start_code_prefix[] = "\x00\x00\x01";
- const char stream_id_video1[] = "\xE3";
- const char stream_id_video2[] = "\xE4";
- const char stream_id_video3[] = "\xE5";
- const char stream_id_video4[] = "\xE6";
- const char stream_id_video5[] = "\xE7";
- const char stream_id_video6[] = "\xE8";
- const char stream_id_video7[] = "\xE9";
- const char stream_id_video8[] = "\xEA";
- const char stream_id_audio1[] = "\xC0";
- const char stream_id_audio2[] = "\xC1";
- const char stream_id_audio3[] = "\xC2";
- const char stream_id_audio4[] = "\xC3";
- const char stream_id_audio5[] = "\xC4";
- const char stream_id_audio6[] = "\xC5";
- const char stream_id_audio7[] = "\xC6";
- const char stream_id_audio8[] = "\xC7";
- const char stream_id_padding[] = "\xBE";
- const char end_code[] = "\x00\x00\x01\xB9";
-
- ////////////////////////////////////////////////////
- // Methods
- ////////////////////////////////////////////////////
- /**
- * SCR stands for System Clock Reference
- */
- inline unsigned int SCR(unsigned int previous_SCR,
- unsigned int pack_header_size,
- unsigned int packets_per_pack,
- unsigned int packet_data_size,
- unsigned int Rmux)
- {
- // To prevent a crash when doing division.
- if(Rmux == 0) Rmux = 1;
- return previous_SCR + (unsigned int)((double)(pack_header_size +
- (packets_per_pack * packet_data_size)) *
- (double)CLOCK_90KHZ / (double)Rmux);
- }
-
- /**
- * Calculates Rmux according to subclause A.5.4
- * mux stands for multiplexing and R for Rate,
- * so Rmux is the rate of the multiplexing.
- */
- inline unsigned int Rmux(unsigned int video_data_rate,
- unsigned int audio_data_rate,
- unsigned int packet_header_size,
- unsigned int pack_header_size,
- unsigned int packets_per_pack,
- unsigned int packet_data_size)
- {
- // To prevent a crash when doing division.
- if(packets_per_pack == 0) packets_per_pack = 1;
- if(packet_data_size == 0) packet_data_size = 1;
-
- return (unsigned int)(
- ((double)video_data_rate + (double)audio_data_rate) *
- (1.0 + ((double)packet_header_size + (double)pack_header_size / (double)packets_per_pack)
- / (double)packet_data_size)
- );
- }
-
-
-};
-
-#endif/*__MIAV_ISO11172_1_H__*/
diff --git a/src/iso11172-2.h b/src/iso11172-2.h
deleted file mode 100644
index f2e2fa3..0000000
--- a/src/iso11172-2.h
+++ /dev/null
@@ -1,73 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/***************************************************************************
- * iso11172-2.h
- *
- * Tue Sep 6 13:31:04 CEST 2005
- * Copyright 2005 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_ISO11172_2_H__
-#define __MIAV_ISO11172_2_H__
-
-namespace ISO11172_2 {
- ////////////////////////////////////////////////////
- // Types
- ////////////////////////////////////////////////////
- typedef struct {
- unsigned long int picture_rate:4;
- unsigned long int pel_aspect_ratio:4;
- unsigned long int vertical_size:12;
- unsigned long int horizontal_size:12;
- } sequence_header_1;
-
- typedef struct {
- unsigned long int load_non_intra_quantizer_flag:1;
- unsigned long int load_intra_quantizer_flag:1;
- unsigned long int constrained_parameter_flag:1;
- unsigned long int vbv_buffer_size:10;
- unsigned long int marker_bit:1;
- unsigned long int bitrate:18;
- } sequence_header_2;
-
- ////////////////////////////////////////////////////
- // Constants
- ////////////////////////////////////////////////////
- const char picture_start_code[] = "\x00\x00\x01\x00";
- const char slice_start_code_prefix[] ="\x00\x00\x01";
- // const char _code = "\x00\x00\x01\xB0"; //Reserved
- // const char _code = "\x00\x00\x01\xB1"; //Reserved
- const char user_data_start_code[] = "\x00\x00\x01\xB2";
- const char sequence_header_code[] = "\x00\x00\x01\xB3";
- const char sequence_error_code[] = "\x00\x00\x01\xB4";
- const char sequence_start_code[] = "\x00\x00\x01\xB5";
- // const char _code = "\x00\x00\x01\xB6"; //Reserved
- const char sequence_end_code[] = "\x00\x00\x01\xB7";
- const char group_start_code[] = "\x00\x00\x01\xB8";
- const char system_start_code_prefix[] = "\x00\x00\x01";
-
- ////////////////////////////////////////////////////
- // Methods
- ////////////////////////////////////////////////////
-
-};
-
-#endif/*__MIAV_ISO11172_2_H__*/
diff --git a/src/iso11172-3.h b/src/iso11172-3.h
deleted file mode 100644
index d3eda79..0000000
--- a/src/iso11172-3.h
+++ /dev/null
@@ -1,85 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/***************************************************************************
- * iso11172-3.h
- *
- * Tue Sep 6 13:10:48 CEST 2005
- * Copyright 2005 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_ISO11172_3_H__
-#define __MIAV_ISO11172_3_H__
-
-namespace ISO11172_3 {
- ////////////////////////////////////////////////////
- // Types
- ////////////////////////////////////////////////////
- typedef struct {
- unsigned long int emphasis:2;
- unsigned long int original_home:1;
- unsigned long int copyright:1;
- unsigned long int mode_extension:2;
- unsigned long int mode:2;
- unsigned long int private_bit:1;
- unsigned long int padding_bit:1;
- unsigned long int sampling_frequency:2;
- unsigned long int bitrate_index:4;
- unsigned long int protection_bit:1;
- unsigned long int layer:2;
- unsigned long int ID:1;
- unsigned long int syncword:12;
- } header;
-
- ////////////////////////////////////////////////////
- // Constants
- ////////////////////////////////////////////////////
-
- typedef enum {
- ID_RESERVED = 0,
- ID_MPEG = 1
- } IDs;
-
- typedef enum {
- LAYER_RESERVED = 0x00,
- LAYER_III = 0x01,
- LAYER_II = 0x10,
- LAYER_I = 0x11
- } layers;
-
- typedef enum {
- CRC_ON = 0,
- CRC_OFF = 1
- } crcs;
-
- typedef enum {
- MODE_STEREO = 0x00,
- MODE_JOINT_STEREO = 0x01,
- MODE_DUAL_CHANNEL = 0x10,
- MODE_SINGLE_CHANNEL = 0x11,
- } modes;
-
- ////////////////////////////////////////////////////
- // Methods
- ////////////////////////////////////////////////////
-
-};
-
-#endif/*__MIAV_ISO11172_3_H__*/
diff --git a/src/jpeg_mem_dest.cc b/src/jpeg_mem_dest.cc
deleted file mode 100644
index 439c9a8..0000000
--- a/src/jpeg_mem_dest.cc
+++ /dev/null
@@ -1,137 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/***************************************************************************
- * jpeg_mem_dest.cc
- *
- * Thu Jul 28 16:40:08 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.
- */
-#include <config.h>
-#include "jpeg_mem_dest.h"
-
-#define OUTPUT_BUF_SIZE 4096 /* choose an efficiently ?? size */
-
-/* Expanded data destination object for stdio output */
-typedef struct {
- struct jpeg_destination_mgr pub; /* public fields */
-
- JOCTET * outbuff; /* target buffer */
- size_t * size;
-} mem_destination_mgr;
-
-typedef mem_destination_mgr * mem_dest_ptr;
-
-/*
- * Initialize destination --- called by jpeg_start_compress
- * before any data is actually written.
- */
-void init_destination (j_compress_ptr cinfo)
-{
- mem_dest_ptr dest = (mem_dest_ptr) cinfo->dest;
-
- *dest->size = 0;
- dest->pub.next_output_byte = dest->outbuff;
- dest->pub.free_in_buffer = OUTPUT_BUF_SIZE;
-}
-
-/*
- * Terminate destination --- called by jpeg_finish_compress
- * after all data has been written. Usually needs to flush buffer.
- *
- * NB: *not* called by jpeg_abort or jpeg_destroy; surrounding
- * application must deal with any cleanup that should happen even
- * for error exit.
- */
-void term_destination (j_compress_ptr cinfo)
-{
- mem_dest_ptr dest = (mem_dest_ptr) cinfo->dest;
- size_t datacount = OUTPUT_BUF_SIZE - dest->pub.free_in_buffer;
-
- /* Write any data remaining in the buffer */
- if (datacount > 0) {
- dest->outbuff+=datacount;
- *dest->size+=datacount;
- }
-}
-
-/*
- * Empty the output buffer --- called whenever buffer fills up.
- *
- * In typical applications, this should write the entire output buffer
- * (ignoring the current state of next_output_byte & free_in_buffer),
- * reset the pointer & count to the start of the buffer, and return TRUE
- * indicating that the buffer has been dumped.
- *
- * In applications that need to be able to suspend compression due to output
- * overrun, a FALSE return indicates that the buffer cannot be emptied now.
- * In this situation, the compressor will return to its caller (possibly with
- * an indication that it has not accepted all the supplied scanlines). The
- * application should resume compression after it has made more room in the
- * output buffer. Note that there are substantial restrictions on the use of
- * suspension --- see the documentation.
- *
- * When suspending, the compressor will back up to a convenient restart point
- * (typically the start of the current MCU). next_output_byte & free_in_buffer
- * indicate where the restart point will be if the current call returns FALSE.
- * Data beyond this point will be regenerated after resumption, so do not
- * write it out when emptying the buffer externally.
- */
-boolean empty_output_buffer (j_compress_ptr cinfo)
-{
- mem_dest_ptr dest = (mem_dest_ptr) cinfo->dest;
-
- dest->outbuff+=OUTPUT_BUF_SIZE;
- *dest->size+=OUTPUT_BUF_SIZE;
-
- dest->pub.next_output_byte = dest->outbuff;
- dest->pub.free_in_buffer = OUTPUT_BUF_SIZE;
-
- return TRUE;
-}
-
-/*
- * Prepare for output to a memory buffer.
- . The caller must have already allocated the buffer, and is responsible
- * for closing it after finishing compression.
- */
-void jpeg_mem_dest (j_compress_ptr cinfo, char * outbuff, size_t * size)
-{
- mem_dest_ptr dest;
-
- /* The destination object is made permanent so that multiple JPEG images
- * can be written to the same file without re-executing jpeg_stdio_dest.
- * This makes it dangerous to use this manager and a different destination
- * manager serially with the same JPEG object, because their private object
- * sizes may be different. Caveat programmer.
- */
- if (cinfo->dest == NULL) { /* first time for this JPEG object? */
- cinfo->dest = (struct jpeg_destination_mgr *)
- (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_PERMANENT,
- sizeof(mem_destination_mgr));
- }
-
- dest = (mem_dest_ptr) cinfo->dest;
- dest->pub.init_destination = init_destination;
- dest->pub.empty_output_buffer = empty_output_buffer;
- dest->pub.term_destination = term_destination;
- dest->outbuff = (JOCTET *)outbuff;
- dest->size = (size_t *)size;
-}
diff --git a/src/jpeg_mem_dest.h b/src/jpeg_mem_dest.h
deleted file mode 100644
index b1ff103..0000000
--- a/src/jpeg_mem_dest.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/***************************************************************************
- * jpeg_mem_dest.h
- *
- * Thu Jul 28 16:40:08 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.
- */
-//#include "config.h"
-#ifndef __MIAV_JPEG_MEM_DEST_H__
-#define __MIAV_JPEG_MEM_DEST_H__
-
-#include <stdio.h>
-
-extern "C" {
-#include <jpeglib.h>
-}
-
-void jpeg_mem_dest (j_compress_ptr cinfo, char * outbuff, size_t * size);
-
-#endif/*__MIAV_JPEG_MEM_DEST_H__*/
diff --git a/src/libfame_wrapper.cc b/src/libfame_wrapper.cc
deleted file mode 100644
index a663df6..0000000
--- a/src/libfame_wrapper.cc
+++ /dev/null
@@ -1,273 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/***************************************************************************
- * libfame_wrapper.cc
- *
- * Sat Jul 2 11:11:31 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.
- */
-#include <config.h>
-#include "libfame_wrapper.h"
-
-#include <errno.h>
-
-#include "miav_config.h"
-#include "frame.h"
-
-LibFAMEWrapper::LibFAMEWrapper(Info *i)
-{
- info = i;
-
- // FIXME: Hmmm... should this be detected somewhere?!
- int w = 720;
- int h = 576;
-
- // Initialize yuv structure.
- yuv.w = w;
- yuv.h = h;
- yuv.p = w;
- yuv.y = new unsigned char [w*h * 2];
- yuv.u = new unsigned char [w*h];// [w*h/4]
- yuv.v = new unsigned char [w*h];// [w*h/4]
-
- calc_bitrate = 0;
- frame_number = 0;
-
- ////////////LIBDV STUFF///////////////
-
- dvdecoder = NULL; // Initialize in encode method
-
- /////////LIBFAME STUFF///////////
-
- // Allocate the output buffer.
-// fame_buffer = new unsigned char [FAME_BUFFER_SIZE];
-
- // Open a new session of the fame library.
- // (If initialization was successful, it returns a non-null context which
- // can then be used for subsequent library calls.)
- fame_context = fame_open();
- if(!fame_context) {
- info->error("Unable to open FAME context, due to the following error: %s", strerror(errno));
- return;
- }
-
- /*
- typedef struct _fame_parameters_ {
- int width; // width of the video sequence
- int height; // height of the video sequence
- char const *coding; // coding sequence
- int quality; // video quality
- int slices_per_frame; // number of slices per frame
- unsigned int frames_per_sequence; // number of frames per sequence
- int frame_rate_num; // numerator of frames per second
- int frame_rate_den; // denominator of frames per second
- unsigned int shape_quality; // binary shape quality
- unsigned int search_range; // motion estimation search range
- unsigned char verbose; // verbosity
- } fame_parameters_t;
- */
- // width and height specify the size of each frames of the video sequence.
- // Both must be multiple of 16. width and height must be less than 4096x4096
- fame_par.width = 720;
- fame_par.height = 576;
-
- // coding is a string of I, P or B characters representing the sequence of
- // frames the encoder must produce. I frames are intra-coded frames (similar
- // 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();
-
- // quality is a percentage, which controls compression versus quality.
- fame_par.quality = config->readInt("video_quality");
-
- // Bitrate
- fame_par.bitrate = 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
- // height / 16
- fame_par.slices_per_frame = 1;//fame_par.height / 16;
-
- // frames_per_sequence is the maximum number of frames contained in a video
- // sequence.
- fame_par.frames_per_sequence = 0xffffffff; // Unlimited length
-
- // frame_rate_num/frame_rate_den specify the number of frames per second for
- // playback.
- fame_par.frame_rate_num = 25; // 25 / 1 fps = 25 fps
- fame_par.frame_rate_den = 1;
-
- // shape_quality is percentage determing the average binary shape accuracy in
- // video with arbitrary shape.
- fame_par.shape_quality = 100; // Original shape
-
- // search_range specifies the motion estimation search range in pixel unit.
- // Small search ranges work best with slow motion videos, whereas larger search
- // ranges are rather for fast motion videos.
- fame_par.search_range = 0; // Adaptive search range
-
- // verbose when set to 1 outputs information on copyright, modules used and
- // current frame on standard error.
- fame_par.verbose = 0;
-
- static const char profilename[] = "MIaV\0";
- 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) {
-
- info->info("Using mpeg4 compression.");
- fame_object_t *object;
-
- 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) {
-
- info->info("Using mpeg1 compression.");
- fame_object_t *object;
-
- 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 {
- info->info("Using default (mpeg1) compression.");
- }
-
- fame_init(fame_context, &fame_par, fame_buffer, FAME_BUFFER_SIZE);
-}
-
-LibFAMEWrapper::~LibFAMEWrapper()
-{
- delete [] yuv.y;
- delete [] yuv.u;
- delete [] yuv.v;
-}
-
-Frame *LibFAMEWrapper::encode(Frame *dvframe)
-{
- // if(!f) return; // The file was not opened.
-
- // Decode DV Frame to YUV422
- int w = 720;
- int h = 576;
-
- unsigned char *pixels[3];
- int pitches[3];
-
- if(!dvdecoder) {
- dvdecoder = dv_decoder_new(FALSE/*this value is unused*/, FALSE, FALSE);
- dvdecoder->quality = DV_QUALITY_BEST;
-
- dv_parse_header(dvdecoder, dvframe->data);
- //dv_parse_packs(decoder, frame->data); // Not needed anyway!
-
- dvdecoder->system = e_dv_system_625_50; // PAL lines, PAL framerate
- dvdecoder->sampling = e_dv_sample_422; // 4 bytes y, 2 bytes u, 2 bytes v
- dvdecoder->std = e_dv_std_iec_61834;
- dvdecoder->num_dif_seqs = 12;
- }
-
- pixels[ 0 ] = picture; // We use this as the output buffer
- pitches[ 0 ] = w * 2;
-
- dv_decode_full_frame(dvdecoder,
- dvframe->data,
- e_dv_color_yuv,
- pixels,
- pitches);
-
- // Convert YUV422 to YUV420p
- int w2 = w / 2;
- uint8_t *y = yuv.y;
- uint8_t *cb = yuv.u;
- uint8_t *cr = yuv.v;
- uint8_t *p = picture;
-
- for ( int i = 0; i < h; i += 2 ) {
- // process two scanlines (one from each field, interleaved)
- for ( int j = 0; j < w2; j++ ) {
- // packed YUV 422 is: Y[i] U[i] Y[i+1] V[i]
- *( y++ ) = *( p++ );
- *( cb++ ) = *( p++ );
- *( y++ ) = *( p++ );
- *( cr++ ) = *( p++ );
- }
-
- // process next two scanlines (one from each field, interleaved)
- for ( int j = 0; j < w2; j++ ) {
- // skip every second line for U and V
- *( y++ ) = *( p++ );
- p++;
- *( y++ ) = *( p++ );
- p++;
- }
- }
-
- // Allocate a new frame for the output
- Frame *output = new Frame(NULL, FAME_BUFFER_SIZE);
-
- // Init frame params
- dv_get_timestamp(dvdecoder, output->timecode); // Set timecode
- output->size = 0; // Init size (incremented as we read)
- unsigned char* pt = output->data; // Set pointer to start of data buffer
-
- // Encode YUV frame and write it to disk.
- fame_start_frame(fame_context, &yuv, 0);
- int written;
-
- while((written = fame_encode_slice(fame_context))) {
- memcpy(pt, fame_buffer, written);
- pt += written;
- output->size += written;
- }
-
- // fame_frame_statistics_t stats;
-
- // fame_end_frame(fame_context, &stats);
- /*
- info->info("frame_number: %d, coding: %c, target_bits: %d, actual_bits: %d, spatial_activity: %d, quant_scale: %f",
- stats.frame_number,
- stats.coding,
- stats.target_bits,
- stats.actual_bits,
- stats.spatial_activity,
- stats.quant_scale);
- */
- /*
- fame_frame_statistics_t_ {
- unsigned int frame_number;
- char coding;
- signed int target_bits;
- unsigned int actual_bits;
- unsigned int spatial_activity;
- float quant_scale;
- }
- */
- frame_number++;
- calc_bitrate += output->size; //stats.actual_bits;
- output->bitrate = (unsigned int)((double)calc_bitrate / (double)frame_number) * 25;
-
- return output;
-}
-
diff --git a/src/libfame_wrapper.h b/src/libfame_wrapper.h
deleted file mode 100644
index bf9e7b9..0000000
--- a/src/libfame_wrapper.h
+++ /dev/null
@@ -1,70 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/***************************************************************************
- * libfame_wrapper.h
- *
- * Sat Jul 2 11:11:31 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.
- */
-#include "config.h"
-#ifndef __MIAV_LIBFAME_WRAPPER_H__
-#define __MIAV_LIBFAME_WRAPPER_H__
-
-// Use libfame
-#include <fame.h>
-
-// Use libdv
-#include <libdv/dv.h>
-#include <libdv/dv_types.h>
-
-#include "frame.h"
-#include "info.h"
-
-// size specifies the length of the buffer.
-#define FAME_BUFFER_SIZE (1024*1024) // FIXME: One size fits all...
-
-class LibFAMEWrapper {
-public:
- LibFAMEWrapper(Info *info);
- ~LibFAMEWrapper();
-
- Frame *encode(Frame *dvframe);
-
-private:
- unsigned long long calc_bitrate;
- unsigned int frame_number;
-
- Info* info;
-
- // libFAME encoder
- // unsigned char *fame_buffer;
- fame_parameters_t fame_par;
- fame_context_t *fame_context;
- fame_yuv_t yuv;
- unsigned char fame_buffer[FAME_BUFFER_SIZE];
-
- // libdv decoder
- dv_decoder_t *dvdecoder;
-
- unsigned char picture[FAME_BUFFER_SIZE];
-};
-
-#endif/*__MIAV_LIBFAME_WRAPPER_H__*/
diff --git a/src/liblame_wrapper.cc b/src/liblame_wrapper.cc
deleted file mode 100644
index 5603d6f..0000000
--- a/src/liblame_wrapper.cc
+++ /dev/null
@@ -1,293 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/***************************************************************************
- * liblame_wrapper.cc
- *
- * Sat Jul 2 11:11:34 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.
- */
-#include <config.h>
-#include "liblame_wrapper.h"
-#include "miav_config.h"
-
-LibLAMEWrapper::LibLAMEWrapper(Info *i)
-{
- info = i;
-
- // Init library.
- if( (gfp = lame_init()) == NULL) {
- info->error("LAME initialization failed (due to malloc failure!)");
- return;
- }
-
- lame_set_in_samplerate(gfp, INPUT_SAMPLE_RATE);
- lame_set_out_samplerate(gfp, OUTPUT_SAMPLE_RATE);
-
- lame_set_num_channels(gfp, CHANNELS);
- // lame_set_num_samples(gfp, 1152);
- // lame_set_num_samples(gfp, SAMPLES);
- // lame_set_num_samples(gfp, 0);
-
- lame_set_quality(gfp, config->readInt("mp3_quality"));
- lame_set_mode(gfp, STEREO);
- lame_set_brate(gfp, config->readInt("mp3_bitrate"));
-
- lame_set_strict_ISO(gfp, 1);
-
- // 1 = write a Xing VBR header frame.
- lame_set_bWriteVbrTag(gfp, 0);
-
- // Types of VBR. default = vbr_off = CBR
- // lame_set_VBR(gfp, vbr_rh);
-
- // VBR quality level. 0=highest 9=lowest
- // lame_set_VBR_q(gfp, 6);
-
- lame_set_copyright(gfp, 0); // is there a copyright on the encoded data?
- lame_set_original(gfp, 1); // is the encoded data on the original media?
- lame_set_error_protection(gfp, 0);// add 2 byte CRC protection to each frame?
- lame_set_padding_type(gfp, PAD_NO); // PAD_NO, PAD_ALL, PAD_ADJUST, PAD_MAX_INDICATOR
- // 0 = do not pad frames
- // 1 = always pad frames
- // 2 = adjust padding to satisfy bit rate
- lame_set_extension(gfp, 0); // private extension bit
-
-
- if (lame_init_params(gfp) < 0) {
- info->error("LAME parameter initialization failed.");
- return;
- }
-
- audio_buffer[0] = new int16_t[AUDIO_BUFFER_SIZE];
- audio_buffer[1] = new int16_t[AUDIO_BUFFER_SIZE];
-
- // And now for the dv decoder!
- decoder = NULL;
-
- calc_bitrate = 0;
- frame_number = 0;
-}
-
-LibLAMEWrapper::~LibLAMEWrapper()
-{
- delete audio_buffer[0];
- delete audio_buffer[1];
-}
-
-Frame *LibLAMEWrapper::close(Frame *oldframe)
-{
- Frame *frame;
- unsigned int offset = 0;
-
- frame = new Frame(NULL, (int)(1.25 * SAMPLES + 7200) * 2); // Big enough to hold two frames
-
- if(oldframe) {
- offset = oldframe->size;
- frame->number = oldframe->number;
- memcpy(frame->data, oldframe->data, oldframe->size);
- delete oldframe;
- }
-
- int flush;
-
- flush = lame_encode_finish(gfp, frame->data + offset, 7200);
-
- frame->size = offset + flush;
-
- calc_bitrate += flush;
- frame->bitrate = (unsigned int)((double)calc_bitrate / (double)(frame_number)) * 25;
-
- return frame;
-}
-
-#include <math.h>
-static unsigned int sin_cnt = 0;
-Frame *LibLAMEWrapper::encode(Frame *dvframe)
-{
- if(dvframe->mute) {
- // Overwrite audiobuffer with dummy data
- double volume = 1000; // Min:= 0 - Max := 32000
- double frequency = 440; // in Hz
-
- for(int cnt = 0; cnt < SAMPLES; cnt++) {
- sin_cnt++;
- double sin_val = (((double)sin_cnt / (double)OUTPUT_SAMPLE_RATE) * (double)M_PI) * frequency;
- audio_buffer[0][cnt] = audio_buffer[1][cnt] = (short int)(sin(sin_val) * volume);
- }
-
- // memset(audio_buffer[0], 0, sizeof(audio_buffer[0]));
- // memset(audio_buffer[1], 0, sizeof(audio_buffer[1]));
- } else {
- // Decode audio from dv frame
- if(!decoder) {
- decoder = dv_decoder_new(FALSE/*this value is unused*/, FALSE, FALSE);
- decoder->quality = DV_QUALITY_BEST;
-
- dv_parse_header(decoder, dvframe->data);
-
- decoder->system = e_dv_system_625_50; // PAL lines, PAL framerate
- decoder->sampling = e_dv_sample_422; // 4 bytes y, 2 bytes u, 2 bytes v
- decoder->std = e_dv_std_iec_61834;
- decoder->num_dif_seqs = 12;
- }
- // Decode audio using libdv
- dv_decode_full_audio( decoder, dvframe->data, audio_buffer );
- }
-
- /**
- * input pcm data, output (maybe) mp3 frames.
- * This routine handles all buffering, resampling and filtering for you.
- *
- * The required mp3buf_size can be computed from num_samples,
- * samplerate and encoding rate, but here is a worst case estimate:
- *
- * return code number of bytes output in mp3buffer. can be 0
- * if return code = -1: mp3buffer was too small
- *
- * mp3buf_size in bytes = 1.25*num_samples + 7200
- *
- * I think a tighter bound could be: (mt, March 2000)
- * MPEG1:
- * num_samples*(bitrate/8)/samplerate + 4*1152*(bitrate/8)/samplerate + 512
- * MPEG2:
- * num_samples*(bitrate/8)/samplerate + 4*576*(bitrate/8)/samplerate + 256
- *
- * but test first if you use that!
- *
- * set mp3buf_size = 0 and LAME will not check if mp3buf_size is
- * large enough.
- *
- * NOTE:
- * if gfp->num_channels=2, but gfp->mode = 3 (mono), the L & R channels
- * will be averaged into the L channel before encoding only the L channel
- * This will overwrite the data in buffer_l[] and buffer_r[].
- *
- */
- Frame* audio_frame = new Frame(NULL, (int)(1.25 * SAMPLES + 7200));
-
- const short int *buffer_l = audio_buffer[0]; // PCM data for left channel
- const short int *buffer_r = audio_buffer[1]; // PCM data for right channel
- const int nsamples = SAMPLES; // number of samples per channel
- unsigned char* mp3buf = audio_frame->data; // pointer to encoded MP3 stream
- const int mp3buf_size = audio_frame->size; // number of valid octets in this
-
- int val;
- val = lame_encode_buffer(gfp, buffer_l, buffer_r, nsamples, mp3buf, mp3buf_size);
- // val = lame_encode_mp3_frame(gfp, buffer_l, buffer_r, mp3buf, mp3buf_size);
-
- // info->info("Framenr: %d", lame_get_frameNum(gfp));
-
- if(val < 0) {
- switch(val) {
- case -1: // mp3buf was too small
- info->error("Lame encoding failed, mp3buf was too small.");
- break;
- case -2: // malloc() problem
- info->error("Lame encoding failed, due to malloc() problem.");
- break;
- case -3: // lame_init_params() not called
- info->error("Lame encoding failed, lame_init_params() not called.");
- break;
- case -4: // psycho acoustic problems
- info->error("Lame encoding failed, due to psycho acoustic problems.");
- break;
- default:
- info->error("Lame encoding failed, due to unknown error.");
- break;
- }
- }
-
- /**
- * OPTIONAL:
- * lame_encode_flush_nogap will flush the internal mp3 buffers and pad
- * the last frame with ancillary data so it is a complete mp3 frame.
- *
- * 'mp3buf' should be at least 7200 bytes long
- * to hold all possible emitted data.
- *
- * After a call to this routine, the outputed mp3 data is complete, but
- * you may continue to encode new PCM samples and write future mp3 data
- * to a different file. The two mp3 files will play back with no gaps
- * if they are concatenated together.
- *
- * This routine will NOT write id3v1 tags into the bitstream.
- *
- * return code = number of bytes output to mp3buf. Can be 0
- */
-
- int flush_sz = 0;
-
- /*
- flush_sz = lame_encode_flush_nogap(gfp, // global context handle
- mp3buf + val, // pointer to encoded MP3 stream
- mp3buf_size - val); // number of valid octets in this stream
- */
-
- // info->info("VAL: %d - FLUSH_SZ: %d - TOTAL: %d", val, flush_sz, (val + flush_sz));
-
- audio_frame->size = val + flush_sz;
-
- /*
-
- int bitrate_kbps[14];
- // lame_bitrate_kbps(gfp, bitrate_kbps);
- lame_bitrate_hist(gfp, bitrate_kbps);
- // 32 40 48 56 64 80 96 112 128 160 192 224 256 320
- info->info("%d %d %d %d %d %d %d %d %d %d %d %d %d %d",
- bitrate_kbps[0],
- bitrate_kbps[1],
- bitrate_kbps[2],
- bitrate_kbps[3],
- bitrate_kbps[4],
- bitrate_kbps[5],
- bitrate_kbps[6],
- bitrate_kbps[7],
- bitrate_kbps[8],
- bitrate_kbps[9],
- bitrate_kbps[10],
- bitrate_kbps[11],
- bitrate_kbps[12],
- bitrate_kbps[13]);
- */
- // while(frame_number != lame_get_frameNum(gfp)) {
-
- calc_bitrate += audio_frame->size;//lame_get_framesize(gfp);
- frame_number ++;//= 1;//lame_get_frameNum(gfp);
-
- // info->info("lame_get_frameNum(gfp) %d ?= frame_number %d", lame_get_frameNum(gfp), frame_number);
- // }
-
- // Bits pr. second
- // 25 * 7 frames pr.second (it seems!)
- audio_frame->bitrate = (unsigned int)((double)calc_bitrate / (double)(frame_number)) * 25;
- /*
- info->info("Audio size: %d, bitrate: %.4f",
- audio_frame->bitrate,
- (float)(config->readInt("mp3_bitrate") * 1000)/(float)(audio_frame->bitrate));
- */
-
- /*
- FILE* fp = fopen("/tmp/audiotest.mp3", "a");
- fwrite(audio_frame->data, audio_frame->size, 1, fp);
- fclose(fp);
- */
- return audio_frame;
-}
diff --git a/src/liblame_wrapper.h b/src/liblame_wrapper.h
deleted file mode 100644
index 43518c8..0000000
--- a/src/liblame_wrapper.h
+++ /dev/null
@@ -1,71 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/***************************************************************************
- * liblame_wrapper.h
- *
- * Sat Jul 2 11:11:34 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.
- */
-#include "config.h"
-#ifndef __MIAV_LIBLAME_WRAPPER_H__
-#define __MIAV_LIBLAME_WRAPPER_H__
-
-// Use libdv
-#include <libdv/dv.h>
-#include <libdv/dv_types.h>
-
-// Use liblame
-#include <lame/lame.h>
-
-#include "frame.h"
-#include "info.h"
-
-#define AUDIO_BUFFER_SIZE DV_AUDIO_MAX_SAMPLES
-
-#define CHANNELS 2
-#define INPUT_SAMPLE_RATE 48000
-#define OUTPUT_SAMPLE_RATE 48000
-#define SAMPLES OUTPUT_SAMPLE_RATE / 25
-
-class LibLAMEWrapper {
-public:
- LibLAMEWrapper(Info *info);
- ~LibLAMEWrapper();
-
- Frame *encode(Frame *dvframe);
-
- Frame *close(Frame *dvframe = NULL);
-
-private:
- unsigned long long calc_bitrate;
- int frame_number;
-
- Info *info;
-
- // LAME stuff
- lame_global_flags *gfp;
-
- // libdv stuff
- dv_decoder_t *decoder;
- int16_t *audio_buffer[2];
-};
-
-#endif/*__MIAV_LIBLAME_WRAPPER_H__*/
diff --git a/src/libmplex_wrapper.cc b/src/libmplex_wrapper.cc
deleted file mode 100644
index 4164ffe..0000000
--- a/src/libmplex_wrapper.cc
+++ /dev/null
@@ -1,485 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/***************************************************************************
- * libmplex_wrapper.cc
- *
- * Sun Oct 30 12:28:47 CET 2005
- * Copyright 2005 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 "libmplex_wrapper.h"
-#include "miav_config.h"
-
-#ifdef WITH_LIBMPLEX
-
-#include <mjpeg_types.h>
-#include <mjpeg_logging.h>
-#include <mpegconsts.h>
-
-#include <mplex/interact.hpp>
-#include <mplex/bits.hpp>
-#include <mplex/outputstrm.hpp>
-#include <mplex/multiplexor.hpp>
-
-/**
- * FrameOutputStream - Wraps the File object
- */
-class FrameOutputStream : public OutputStream
-{
-public:
- FrameOutputStream( Info *info, File *outputfile );
- int Open( );
- void Close();
- off_t SegmentSize( );
- void NextSegment();
- void Write(uint8_t *data, unsigned int len);
-
-private:
- Info *info;
- off_t written;
- File *file;
-};
-
-
-
-FrameOutputStream::FrameOutputStream( Info *info, File *outputfile )
-{
- this->info = info;
- file = outputfile;
- written = 0;
- info->info("FrameOutputStream - constructor");
-}
-
-int FrameOutputStream::Open()
-{
- // info->info("FrameOutputStream::Open");
- // Nothing to do here!
- return 0;
-}
-
-void FrameOutputStream::Close()
-{
- // info->info("FrameOutputStream::Close");
- // Nothing to do here!
-}
-
-
-off_t FrameOutputStream::SegmentSize()
-{
- // info->info("FrameOutputStream::SegmentSize - return: %d", written);
- return written;
-
- /*
- struct stat stb;
- fstat(fileno(strm), &stb);
- off_t written = stb.st_size;
- return written;
- */
-}
-
-void FrameOutputStream::NextSegment( )
-{
- // info->info("FrameOutputStream::NextSegment");
- // Nothing to do here!
- /*
- auto_ptr<char> prev_filename_buf( new char[strlen(cur_filename)+1] );
- char *prev_filename = prev_filename_buf.get();
- fclose(strm);
- ++segment_num;
- strcpy( prev_filename, cur_filename );
- snprintf( cur_filename, MAXPATHLEN, filename_pat, segment_num );
- if( strcmp( prev_filename, cur_filename ) == 0 ) {
- mjpeg_error_exit1("Need to split output but there appears to be no %%d in the filename pattern %s",
- filename_pat );
- }
- strm = fopen( cur_filename, "wb" );
- if( strm == NULL ) {
- mjpeg_error_exit1( "Could not open for writing: %s", cur_filename );
- }
- */
-}
-
-void FrameOutputStream::Write( uint8_t *buf, unsigned int len )
-{
- unsigned int write;
- write = file->Write(buf, len);
- written += write;
- // info->info("FrameOutputStream::Write - len: %d", len);
-}
-
-/**
- * FrameInputStream - Wraps the ThreadSafeQueuePriority objects, containing
- * the prosessed frames from libfame and liblame.
- */
-class FrameInputStream : public IBitStream
-{
-public:
- FrameInputStream( Info *info, ThreadSafeQueuePriority *queue );
- ~FrameInputStream();
-
-private:
- Frame *getFrame();
- size_t ReadStreamBytes( uint8_t *buf, size_t size );
- bool EndOfStream();
-
- Info *info;
- ThreadSafeQueuePriority *queue;
- bool seen_eof;
- Frame *frame;
- unsigned int read;
-};
-
-FrameInputStream::FrameInputStream( Info *info, ThreadSafeQueuePriority *queue ) :
- IBitStream()
-{
- this->info = info;
- this->queue = queue;
- seen_eof = false;
- frame = NULL;
- read = 0;
- streamname = "MIaV Stream\0";
-
- // info->info("FrameInputStream - constructor", seen_eof);
-
- /*
- if ((fileh = fopen(bs_filename, "rb")) == NULL)
- {
- mjpeg_error_exit1( "Unable to open file %s for reading.", bs_filename);
- }
- filename = strcpy( new char[strlen(bs_filename)+1], bs_filename );
- streamname = filename;
-
- SetBufSize(buf_size);
- eobs = false;
- byteidx = 0;
- if (!ReadIntoBuffer())
- {
- if (buffered==0)
- {
- mjpeg_error_exit1( "Unable to read from %s.", bs_filename);
- }
- }
- */
- SetBufSize(BUFFER_SIZE);
- // SetBufSize(buf_size);
- eobs = false;
- byteidx = 0;
- if (!ReadIntoBuffer()) {
- if (buffered==0) {
- info->error( "Unable to read from %s.", streamname);
- }
- }
-
- // info->info("FrameInputStream - leaving constructor", seen_eof);
-}
-
-
-/**
- Destructor: close the device containing the bit stream after a read
- process
-*/
-FrameInputStream::~FrameInputStream()
-{
- // info->info("FrameInputStream - destructor", seen_eof);
- // Nothing to do here!
- /*
- if (fileh)
- {
- fclose(fileh);
- delete filename;
- }
- fileh = 0;
- */
- Release(); // Hmmm.. wonder what this 'Release()' does!?
-}
-
-Frame *FrameInputStream::getFrame()
-{
- read = 0;
- return queue->pop();
-}
-
-bool FrameInputStream::EndOfStream()
-{
- // info->info("FrameInputStream::EndOfStream - return: %d", seen_eof);
- return seen_eof;
-}
-
-size_t FrameInputStream::ReadStreamBytes( uint8_t *buf, size_t size )
-{
- // info->info("FrameInputStream::ReadStreamBytes - size: %d", size);
- unsigned int copied = 0;
-
- while( copied < size ) {
-
- // If we read the entire frame, prepare to get a new one
- if(frame && read == frame->size) {
- delete frame;
- frame = NULL;
- }
-
- // If no frame is in the buffer, get one from the queue
- if(frame == NULL) frame = getFrame();
-
- // check for end of stream
- if( frame->endOfFrameStream == true) {
- seen_eof = true;
- return copied;
- }
-
- // If a frame exists in the buffer copy it to the output buffer
- // (No frame ocurres when *running is set to false)
- if( frame ) {
- unsigned int doread = (size - copied) < (frame->size - read) ?
- size - copied : (frame->size - read);
-
- //info->info("Requested: %d. Read: %d. Doread: %d. In buffer %d", size, (*read), doread, (*frame)->size);
-
- memcpy(buf + copied, frame->data + read, doread);
- read += doread;
- copied += doread;
- }
- }
-
- return copied;
-}
-
-/*******************************
- *
- * Command line job class - sets up a Multiplex Job based on command
- * line and File I/O...
- *
- ******************************/
-
-class MIaVMultiplexJob : public MultiplexJob
-{
-public:
- MIaVMultiplexJob(Info *info,
- ThreadSafeQueuePriority *video_queue,
- ThreadSafeQueuePriority *audio_queue);
-
-private:
- bool ParseVideoOpt( const char *optarg );
- bool ParseLpcmOpt( const char *optarg );
-};
-
-MIaVMultiplexJob::MIaVMultiplexJob(Info *info,
- ThreadSafeQueuePriority *video_queue,
- ThreadSafeQueuePriority *audio_queue) :
- MultiplexJob()
-{
- // this->info = info;
- // info->info("MIaVMultiplexJob - constructor");
- outfile_pattern = "/tmp/aaargh.mpg"; // Output file... or something
-
- verbose = 0; // Level of verbosity. 0 = quiet, 1 = normal 2 = verbose/debug
-
- VBR = config->readInt("video_bitrate") == 0; // Multiplex variable bit-rate video
-
- always_system_headers = true; // Create System header in every pack in generic formats
-
- // Specifies decoder buffers size in kB. [ 20...2000]
- if( ! ParseVideoOpt( "500" ) )
- info->error( "Illegal video decoder buffer size(s): %s", "500" );
-
- // --lpcm-params | -L samppersec:chan:bits [, samppersec:chan:bits]
- // if( ! ParseLpcmOpt( "48000:2:16" ) ) info->error( "Illegal LPCM option(s): %s", "48000:2:16" );
-
- data_rate = 0; //Specify data rate of output stream in kbit/sec (default 0=Compute from source streams)
- // Convert from kbit/sec (user spec) to 50B/sec units...
- data_rate = (( data_rate * 1000 / 8 + 49) / 50 ) * 50;
-
- audio_offset = 0; //Specify offset of timestamps (video-audio) in mSec
- video_offset = 0; //Specify offset of timestamps (video-audio) in mSec
-
- max_PTS = 0; // Multiplex only num seconds of material (default 0=multiplex all)
-
- packets_per_pack = 5; //Number of packets per pack generic formats [1..100]
-
- mux_format = 3; // Set defaults for particular MPEG profiles:
- // 0 = Generic MPEG1
- // 1 = VCD
- // 2 = user-rate VCD
- // 3 = Generic MPEG2
- // 4 = SVCD
- // 5 = user-rate SVCD
- // 6 = VCD Stills
- // 7 = SVCD Stills
- // 8 = DVD with NAV sectors
- // 9 = DVD
-
- sector_size = 2042; // Specify sector size in bytes for generic formats [256..16384]
-
- //max_segment_size = 0; // Maximum size of output file(s) in Mbyte (default: 0) (no limit)
-
- multifile_segment = true; // Don't switch to a new output file if a sequence end marker
- // is encountered ithe input video
-
- (void)mjpeg_default_handler_verbosity(verbose);
- info->info( "mplex version %s (%s %s)", VERSION,MPLEX_VER, MPLEX_DATE );
-
- // Connect streams
- vector<IBitStream *> inputs;
- if(video_queue) inputs.push_back( new FrameInputStream( info, video_queue ) );
- if(audio_queue) inputs.push_back( new FrameInputStream( info, audio_queue ) );
- SetupInputStreams( inputs );
-}
-
-/*************************************************************************
- Usage banner for the command line wrapper.
-*************************************************************************/
-/*
- mjpegtools mplex-2 version VERSION ( MPLEX_VER )
- Usage: %s [params] -o <output filename pattern> <input file>...
- %%d in the output file name is by segment count
- where possible params are:
- --verbose|-v num
- Level of verbosity. 0 = quiet, 1 = normal 2 = verbose/debug
- --format|-f fmt
- Set defaults for particular MPEG profiles
- [0 = Generic MPEG1, 1 = VCD, 2 = user-rate VCD, 3 = Generic MPEG2,
- 4 = SVCD, 5 = user-rate SVCD
- 6 = VCD Stills, 7 = SVCD Stills, 8 = DVD with NAV sectors, 9 = DVD]
- --mux-bitrate|-r num
- Specify data rate of output stream in kbit/sec
- (default 0=Compute from source streams)
- --video-buffer|-b num [, num...]
- Specifies decoder buffers size in kB. [ 20...2000]
- --lpcm-params | -L samppersec:chan:bits [, samppersec:chan:bits]
- --mux-limit|-l num
- Multiplex only num seconds of material (default 0=multiplex all)
- --sync-offset|-O num ms|s|mpt
- Specify offset of timestamps (video-audio) in mSec
- --sector-size|-s num
- Specify sector size in bytes for generic formats [256..16384]
- --vbr|-V
- Multiplex variable bit-rate video
- --packets-per-pack|-p num
- Number of packets per pack generic formats [1..100]
- --system-headers|-h
- Create System header in every pack in generic formats
- --max-segment-size|-S size
- Maximum size of output file(s) in Mbyte (default: 0) (no limit)
- --ignore-seqend-markers|-M
- Don't switch to a new output file if a sequence end marker
- is encountered ithe input video.
- --workaround|-W workaround [, workaround ]
- --help|-?
- Print this lot out!
-*/
-
-
-bool MIaVMultiplexJob::ParseLpcmOpt( const char *optarg )
-{
- char *endptr, *startptr;
- unsigned int samples_sec;
- unsigned int channels;
- unsigned int bits_sample;
- endptr = const_cast<char *>(optarg);
- do {
- startptr = endptr;
- samples_sec = static_cast<unsigned int>(strtol(startptr, &endptr, 10));
- if( startptr == endptr || *endptr != ':' )
- return false;
-
- startptr = endptr+1;
- channels = static_cast<unsigned int>(strtol(startptr, &endptr, 10));
- if(startptr == endptr || *endptr != ':' )
- return false;
-
- startptr = endptr+1;
- bits_sample = static_cast<unsigned int>(strtol(startptr, &endptr, 10));
- if( startptr == endptr )
- return false;
-
- LpcmParams *params = LpcmParams::Checked( samples_sec,
- channels,
- bits_sample );
- if( params == 0 )
- return false;
- lpcm_param.push_back(params);
- if( *endptr == ',' )
- ++endptr;
- } while( *endptr != '\0' );
- return true;
-}
-
-bool MIaVMultiplexJob::ParseVideoOpt( const char *optarg )
-{
- char *endptr, *startptr;
- unsigned int buffer_size;
- endptr = const_cast<char *>(optarg);
- do
- {
- startptr = endptr;
- buffer_size = static_cast<unsigned int>(strtol(startptr, &endptr, 10));
- if( startptr == endptr )
- return false;
-
- VideoParams *params = VideoParams::Checked( buffer_size );
- if( params == 0 )
- return false;
- video_param.push_back(params);
- if( *endptr == ',' )
- ++endptr;
- }
- while( *endptr != '\0' );
- return true;
-}
-
-LibMPlexWrapper::LibMPlexWrapper(Info *info,
- File *outputfile,
- ThreadSafeQueuePriority *video_queue,
- ThreadSafeQueuePriority *audio_queue)
-{
- this->info = info;
- this->outputfile = outputfile;
- this->video_queue = video_queue;
- this->audio_queue = audio_queue;
-}
-
-LibMPlexWrapper::~LibMPlexWrapper()
-{
-}
-
-
-void LibMPlexWrapper::multiplex()
-{
- // info->info("MPLEX!");
- // sleep(10);
- // info->info("The road goes ever on and on...");
- MIaVMultiplexJob job(info, video_queue, audio_queue);
- FrameOutputStream output( info, outputfile );
- Multiplexor mux(job, output);
- mux.Multiplex();
-}
-
-
-#ifdef LIBMPLEX_WRAPPER_TEST
-int main (int argc, char* argv[])
-{
- LibMPlexWrapper mplex;
- mplex.multiplex();
- return 0;
-}
-#endif/*LIBMPLEX_WRAPPER_TEST*/
-
-#endif/*WITH_LIBMPLEX*/
diff --git a/src/libmplex_wrapper.h b/src/libmplex_wrapper.h
deleted file mode 100644
index 1be71a1..0000000
--- a/src/libmplex_wrapper.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/***************************************************************************
- * libmplex_wrapper.h
- *
- * Sun Oct 30 12:28:47 CET 2005
- * Copyright 2005 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_LIBMPLEX_WRAPPER_H__
-#define __MIAV_LIBMPLEX_WRAPPER_H__
-
-#ifdef WITH_LIBMPLEX
-
-#include "info.h"
-#include "file.h"
-#include "threadsafe_queue_priority.h"
-
-class LibMPlexWrapper {
-public:
- LibMPlexWrapper(Info *info,
- File *outputfile,
- ThreadSafeQueuePriority *video_queue,
- ThreadSafeQueuePriority *audio_queue);
- ~LibMPlexWrapper();
-
- void multiplex();
-
-private:
- Info *info;
- File *outputfile;
- ThreadSafeQueuePriority *video_queue;
- ThreadSafeQueuePriority *audio_queue;
-};
-#endif/*WITH_LIBMPLEX*/
-
-#endif/*__MIAV_LIBMPLEX_WRAPPER_H__*/
diff --git a/src/mainwindow.cc b/src/mainwindow.cc
deleted file mode 100644
index ce3d9bb..0000000
--- a/src/mainwindow.cc
+++ /dev/null
@@ -1,575 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/***************************************************************************
- * mainwindow.cc
- *
- * Sat Aug 21 19:49:34 2004
- * Copyright 2004 deva
- * 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>
-#ifdef USE_GUI
-
-#include "mainwindow.h"
-
-#include <qpainter.h>
-#include <qpicture.h>
-
-#include <qpushbutton.h>
-#include <qfont.h>
-#include <qpixmap.h>
-#include <qbitmap.h>
-#include <qimage.h>
-#include <qlayout.h>
-#include <qgroupbox.h>
-
-#include <qstatusbar.h>
-
-#include <math.h>
-
-//#include "mgui_alert.h"
-//#include "mgui_datasocket.h"
-
-#include "miav_config.h"
-
-#include <config.h>
-//"miav-grab.h"
-
-//#define WITH_DV
-MainWindow::MainWindow(QApplication *qApp, QWidget* parent, const char* name )
- : QWidget( parent, name, WStyle_Customize | WStyle_NoBorder )
-{
- info = new InfoGui(qApp, this, config);
-
- info->log("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;
-
- info->log("MIaV is ready.");
-
- // Open the CPR Dialog
- cpr_clicked();
-
-}
-
-MainWindow::~MainWindow()
-{
- info->log("MIaV is shutting down.");
-
- delete img_history;
- delete camera;
- delete btn_cpr;
-
- info->log("MIaV is shut down.");
-}
-
-QImage *MainWindow::loadButtonIcon( char *name, int height )
-{
-
- QImage scaled;
- QImage *img;
-
- img = new QImage();
- img->load( name );
-
- int h = (int)(height * unit);
- int w = (int)((float)img->width() / (float)(img->height() / (float)h));
-
- scaled = img->smoothScale(w, h);
- delete img;
- img = new QImage(scaled);
-
- return img;
-}
-
-QImage *MainWindow::loadImage( char *name )
-{
- QImage *img;
-
- img = new QImage();
- img->load( name );
-
- return img;
-}
-
-void MainWindow::createGui()
-{
- // Layout widgets
-
- /* __________________________________________________
- *(0) ___________________________ | ______________ |
- * | | | | | | | | | |
- * |(1) | | | | |(2) | |
- * | | | | | | | | | |
- * | | | | | | | | | |
- * | | | | | | | |______________| |
- * | | | | | | | | | |
- * | | | | | | | | | |
- * | | | | | | | | | |
- * | |______|______|______|______| | | | |
- * | | | | | | | |______________| |
- * | |______|______|______|______| | | | |
- * | | | | | | | | | |
- * | |______|______|______|______| | | | |
- * | | | | | | | | | |
- * | |______|______|______|______| | |______________| |
- * |_______________________________|__________________|
- * |_______________________________|__________________|
- */
-
- QGridLayout *g0 = new QGridLayout(this, 2, 2, 0, -1);
- QGridLayout *g1 = new QGridLayout(4, 4, -1);
- g0->addLayout(g1, 0, 0);
-
- QGroupBox *gb = new QGroupBox(this);
- // gb->setRows(NUM_HISTORY);
- gb->setColumns(1);
- // gb->setTitle("fisk");
- // QGridLayout *g2 = new QGridLayout(1, NUM_HISTORY, -1);
- // QVBoxLayout *g2 = new QVBoxLayout(this);
- // g0->addLayout(g2, 0, 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(this);
- img_recedge->setBackgroundColor(QColor(160,160,160));
- img_recedge->setFixedSize(output_width, output_height);
-
- img_live = new VideoWidget(img_recedge, camera);
- img_live->setFixedSize(output_width - 20, output_height - 20);
- img_live->move(10,10);
- g1->addMultiCellWidget ( img_recedge, 0, 0, 0, 3, Qt::AlignHCenter);
- // QObject::connect( img_live, SIGNAL(clicked()), this, SLOT(live_clicked()) );
-
- // CPR/NAME LABEL + CPR button
- lbl_cpr = createLabel("", output_width - (int)(BUTTON_WIDTH * unit), BUTTON_HEIGHT);
- g1->addMultiCellWidget ( lbl_cpr, 1, 1, 0, 2);
-
- btn_cpr = createButton("");
- btn_cpr->setFocus();
- btn_cpr->setPixmap(*img_cpr);
- 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->addMultiCellWidget ( lbl_name, 2, 2, 0, 3);
-/*
- 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("");
- btn_rec->setPixmap(*img_record);
- QObject::connect( btn_rec, SIGNAL(clicked()), this, SLOT(rec_clicked()) );
- g1->addWidget(btn_rec, 3, 0);
-
- btn_shoot = createButton("");
- btn_shoot->setPixmap(*img_snapshot);
- QObject::connect( btn_shoot, SIGNAL(clicked()), this, SLOT(shoot_clicked()) );
- g1->addWidget(btn_shoot, 3, 1);
-
- btn_freeze = createButton("");
- btn_freeze->setPixmap(*img_freeze);
- QObject::connect( btn_freeze, SIGNAL(clicked()), this, SLOT(freeze_clicked()) );
- g1->addWidget(btn_freeze, 3, 2);
-
- btn_mute = createButton("");
- btn_mute->setPixmap(*img_unmute);
- 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);
- btn_clear->setPixmap(*img_clear);
- 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->addMultiCellWidget(status, 4, 4, 0, 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, TRUE);
-
- // About button
- btn_about = new QPushButton("", this);
- btn_about->setFixedHeight((int)unit);
- btn_about->setPixmap(*img_logo);
- QObject::connect( btn_about, SIGNAL(clicked()), this, SLOT(about_clicked()) );
- status->addWidget(btn_about, 0, TRUE);
-
- // 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, TRUE);
-
- status->message( TXT_READY );
-}
-
-
-QPushButton *MainWindow::createButton(char *caption, int width, int height)
-{
- return createButton(caption, this);//, width, height);
-}
-
-
-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;
-}
-
-
-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;
-}
-
-#include <sys/time.h>
-static struct timeval starttime;
-static int h = 0;
-static int m = 0;
-static int s = 0;
-static int watchdog = 0;
-
-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 = 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));
- img_recedge->setBackgroundColor(QColor((int) ((255 - GREY) * val + GREY),
- (int) (GREY - (GREY * val)),
- (int) (GREY - (GREY * val))));
-}
-
-void MainWindow::message(char *msg)
-{
- status->message(msg);
- info->log("Message: %s", msg);
-}
-
-void MainWindow::clear()
-{
- info->log("Clearing screen.");
-
-
- // History widgets
- for(unsigned int i = 0; i < num_history; i++) {
- img_history[i]->set_image(img_dummy);
- }
-
- lbl_name->setText("");
- lbl_cpr->setText("");
-}
-
-#include "aboutwindow.h"
-void MainWindow::about_clicked()
-{
- AboutWindow about;
- about.exec();
-}
-
-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;
- }
- info->log("Activated CPR chooser.");
-
- // Save CPR and name, from the labels.
- strcpy(oldname, lbl_name->text().ascii());
- strcpy(oldcpr, lbl_cpr->text().ascii());
-
- clear();
-
- // Create and call the CPRQueryDialog.
- CPRQueryDialog dlg(info, 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);
- info->log("Cancelled CPR chooser.");
- } else {
- // Change CPR camera.
- info->log("New CPR %s (old %s).", (char*)lbl_cpr->text().ascii(), oldcpr);
- strcpy(oldname, lbl_name->text().ascii());
- strcpy(oldcpr, lbl_cpr->text().ascii());
- clear();
- lbl_name->setText(oldname);
- lbl_cpr->setText(oldcpr);
- camera->setCpr((char*)lbl_cpr->text().ascii(), (char*)lbl_name->text().ascii());
- }
-}
-
-void MainWindow::rec_clicked()
-{
- if(!recording) {
- info->log("Start recording.");
- recording = 1;
- // Start flashing the edge
- rec_edge_counter = 0.0f;
- timer->start(100);
- btn_rec->setPixmap(*img_stop);
- camera->start();
- } else {
- switch(MessageBox(this,
- TXT_ASK_SAVE_TITLE,
- TXT_ASK_SAVE,
- TYPE_YES_NO_MAYBE_CANCEL,
- ICON_QUESTION).exec()) {
- case MSG_YES:
- info->log("Stop recording (Said yes to save).");
- recording = 0;
- camera->stop(SAVE);
- timer->stop();
- img_recedge->setBackgroundColor(QColor(160,160,160));
- btn_rec->setPixmap(*img_record);
- break;
-
- case MSG_NO:
- info->log("Stop recording (Said no to save).");
- recording = 0;
- camera->stop(DELETE);
- timer->stop();
- img_recedge->setBackgroundColor(QColor(160,160,160));
- btn_rec->setPixmap(*img_record);
- break;
-
- case MSG_MAYBE:
- info->log("Stop recording (Said maybe to save).");
- recording = 0;
- camera->stop(LATER);
- timer->stop();
- img_recedge->setBackgroundColor(QColor(160,160,160));
- btn_rec->setPixmap(*img_record);
- break;
-
- case MSG_CANCEL:
- info->log("Didn't stop recording (canceled).");
- break;
- }
- }
-}
-
-void MainWindow::shoot_clicked()
-{
- // unsigned char pixels[720*576*3];
- info->log("Snapshot (%s).", frozen?"frozen":"unfrozen");
-
- QImage screenshot(720, 576, 32);
-
- 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();
- btn_freeze->setPixmap(*img_freeze);
- btn_freeze->setOn(false);
- frozen = false;
- }
-}
-
-void MainWindow::freeze_clicked()
-{
- if(frozen) {
- info->log("Unfreeze.");
- camera->unfreeze();
- btn_freeze->setPixmap(*img_freeze);
- btn_freeze->setOn(false);
- frozen = false;
- } else {
- info->log("Freeze.");
- camera->freeze();
- btn_freeze->setPixmap(*img_unfreeze);
- btn_freeze->setOn(true);
- frozen = true;
- }
-}
-
-void MainWindow::mute_clicked()
-{
- muted = !muted;
- if(muted) btn_mute->setPixmap(*img_mute);
- else btn_mute->setPixmap(*img_unmute);
-
- camera->setMute(muted);
-}
-
-#endif /*USE_GUI*/
diff --git a/src/mainwindow.h b/src/mainwindow.h
deleted file mode 100644
index 2ac7d82..0000000
--- a/src/mainwindow.h
+++ /dev/null
@@ -1,193 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/***************************************************************************
- * mainwindow.h
- *
- * Sat Aug 21 19:50:13 2004
- * Copyright 2004 deva
- * 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"
-#ifdef USE_GUI
-
-#ifndef __MAINWINDOW_H__
-#define __MAINWINDOW_H__
-
-#include <string>
-using namespace std;
-
-#include <qwidget.h>
-#include <qlabel.h>
-#include <qpushbutton.h>
-#include <qstatusbar.h>
-#include <qtimer.h>
-#include <qpixmap.h>
-#include <qimage.h>
-
-#include "videowidget.h"
-#include "camera.h"
-#include "cprquerydialog.h"
-#include "historywidget.h"
-
-#include "info_gui.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"
-#define PIXMAP_UNMUTE PIXMAPS"/unmute.png"
-
-#define PIXMAP_RECORD PIXMAPS"/record.png"
-#define PIXMAP_STOP PIXMAPS"/stop.png"
-
-#define PIXMAP_FREEZE PIXMAPS"/freeze.png"
-#define PIXMAP_UNFREEZE PIXMAPS"/unfreeze.png"
-
-#define PIXMAP_CPR PIXMAPS"/cpr.png"
-#define PIXMAP_CLEAR PIXMAPS"/clear.png"
-
-#define PIXMAP_SNAPSHOT PIXMAPS"/snapshot.png"
-#define PIXMAP_DUMMY PIXMAPS"/dummy.png"
-#define PIXMAP_LOGO_SMALL PIXMAPS"/miav-logo.png"
-
-class MainWindow : public QWidget
-{
- Q_OBJECT
-public:
- MainWindow(QApplication *qApp, QWidget* parent = 0, const char* name = 0);
- ~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();
-
- Info *info;
-
- void createGui();
-
- Camera *camera;
- Info *cam_info;
-
- // 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*/
diff --git a/src/messagebox.cc b/src/messagebox.cc
deleted file mode 100644
index fd812eb..0000000
--- a/src/messagebox.cc
+++ /dev/null
@@ -1,245 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/***************************************************************************
- * messagebox.cc
- *
- * Fri Feb 25 20:23:19 CET 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.
- */
-#include <config.h>
-#ifdef USE_GUI
-#include "messagebox.h"
-#include "miav_config.h"
-
-// For button sizes!
-#include "mainwindow.h"
-
-////////////////////////////////////////////////////////////////////////////////////////
-/* 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,
- * or clear the number.
- */
-
-MessageBox::MessageBox(QWidget* parent,
- const char* name,
- const char* text,
- msg_type type,
- msg_icon icon)
- : QDialog(parent, name, TRUE)
-{
- int resolution_w = config->readInt("pixel_width");
- //int resolution_h = config->readInt("pixel_height");
- unit = ((float)resolution_w / config->readFloat("screensize")) / INCH_IN_CM;
-
-
- setCaption(name);
- QFrame *topf = new QFrame(this);
- topf->setFrameStyle(QFrame::Box | QFrame::Raised);
- topf->setLineWidth(3);
- QVBoxLayout *bl = new QVBoxLayout(this);
- bl->addWidget(topf);
-
- // Setup the icon
- pix_icon = new QPixmap();
- switch(icon) {
- case ICON_NONE: // No icon is used
- {
- break;
- }
- case ICON_DEFAULT: // An icon matching the buttons is used
- {
- switch(type) {
- case TYPE_OK:
- pix_icon->load( PIXMAP_INFO );
- break;
- case TYPE_OK_CANCEL:
- pix_icon->load( PIXMAP_WARNING );
- break;
- case TYPE_YES_NO:
- case TYPE_YES_NO_MAYBE:
- case TYPE_YES_NO_CANCEL:
- case TYPE_YES_NO_MAYBE_CANCEL:
- pix_icon->load( PIXMAP_QUESTION );
- break;
- }
- break;
- }
- case ICON_INFO: // An info icon (matching the ok button)
- {
- pix_icon->load( PIXMAP_INFO );
- break;
- }
- case ICON_WARNING: // An warning icon (matching the ok/cancel button)
- {
- pix_icon->load( PIXMAP_WARNING );
- break;
- }
- case ICON_ERROR: // An critical error icon
- {
- pix_icon->load( PIXMAP_ERROR );
- break;
- }
- case ICON_QUESTION:// An question icon (matching the yes/no and yes/no/cancel buttons)
- {
- pix_icon->load( PIXMAP_QUESTION );
- break;
- }
- }
- QLabel *lbl_icon = new QLabel(topf);
- lbl_icon->setPixmap(*pix_icon);
-
- QLabel *lbl_text = new QLabel(topf);
- lbl_text->setText(text);
- lbl_text->setFont( QFont( "Sans Serif",
- //(height>1)?(int)(unit * height / 2):(int)(unit * height / 2),
- (int)(unit * 0.7 * BUTTON_HEIGHT / 2),
- QFont::Normal ) );
- lbl_text->setFixedHeight((int)(unit * BUTTON_HEIGHT));
- // lbl_text->setFont(QFont("Arial", 18));
- QFrame *f = new QFrame(topf);
-
- QVBoxLayout *blayout = new QVBoxLayout(topf, 20, 20);
-
- blayout->addWidget(lbl_icon);
- blayout->addWidget(lbl_text);
- blayout->addWidget(f);
-
- // Setup the buttons
- switch(type) {
- case TYPE_OK:
- {
- QPushButton *bok = createButton(f, TXT_OK );
- QGridLayout *glayout = new QGridLayout(f, 1, 1, 20, 20);
- glayout->addWidget(bok, 0, 0);
- connect(bok, SIGNAL( clicked() ), SLOT(bok_clicked()));
- break;
- }
- case TYPE_OK_CANCEL:
- {
- QPushButton *bok = createButton(f, TXT_OK );
- QPushButton *bcancel = createButton(f, TXT_CANCEL );
- QGridLayout *glayout = new QGridLayout(f, 1, 2, 20, 20);
- glayout->addWidget(bcancel, 0, 1);
- glayout->addWidget(bok, 0, 2);
- connect(bcancel, SIGNAL( clicked() ), SLOT(bcancel_clicked()));
- connect(bok, SIGNAL( clicked() ), SLOT(bok_clicked()));
- break;
- }
- case TYPE_YES_NO:
- {
- QPushButton *bno = createButton(f, TXT_NO );
- QPushButton *byes = createButton(f, TXT_YES );
- QGridLayout *glayout = new QGridLayout(f, 1, 2, 20, 20);
- glayout->addWidget(bno, 0, 0);
- glayout->addWidget(byes, 0, 1);
- connect(byes, SIGNAL( clicked() ), SLOT(byes_clicked()));
- connect(bno, SIGNAL( clicked() ), SLOT(bno_clicked()));
- break;
- }
- case TYPE_YES_NO_MAYBE:
- {
- QPushButton *bmaybe = createButton(f, TXT_MAYBE );
- QPushButton *bno = createButton(f, TXT_NO );
- QPushButton *byes = createButton(f, TXT_YES );
- QGridLayout *glayout = new QGridLayout(f, 1, 3, 20, 20);
- glayout->addWidget(bno, 0, 0);
- glayout->addWidget(byes, 0, 1);
- glayout->addWidget(bmaybe, 0, 2);
- connect(byes, SIGNAL( clicked() ), SLOT(byes_clicked()));
- connect(bno, SIGNAL( clicked() ), SLOT(bno_clicked()));
- connect(bmaybe, SIGNAL( clicked() ), SLOT(bmaybe_clicked()));
- break;
- }
- case TYPE_YES_NO_CANCEL:
- {
- QPushButton *bcancel = createButton(f, TXT_CANCEL );
- QPushButton *bno = createButton(f, TXT_NO );
- QPushButton *byes = createButton(f, TXT_YES );
- QGridLayout *glayout = new QGridLayout(f, 1, 3, 20, 20);
- glayout->addWidget(bno, 0, 0);
- glayout->addWidget(bcancel, 0, 1);
- glayout->addWidget(byes, 0, 2);
- connect(byes, SIGNAL( clicked() ), SLOT(byes_clicked()));
- connect(bcancel, SIGNAL( clicked() ), SLOT(bcancel_clicked()));
- connect(bno, SIGNAL( clicked() ), SLOT(bno_clicked()));
- break;
- }
- case TYPE_YES_NO_MAYBE_CANCEL:
- {
- QPushButton *bmaybe = createButton(f, TXT_MAYBE );
- QPushButton *bcancel = createButton(f, TXT_CANCEL );
- QPushButton *bno = createButton(f, TXT_NO );
- QPushButton *byes = createButton(f, TXT_YES );
- QGridLayout *glayout = new QGridLayout(f, 1, 4, 20, 20);
- glayout->addWidget(bno, 0, 0);
- glayout->addWidget(bcancel, 0, 1);
- glayout->addWidget(byes, 0, 2);
- glayout->addWidget(bmaybe, 0, 3);
- connect(bmaybe, SIGNAL( clicked() ), SLOT(bmaybe_clicked()));
- connect(byes, SIGNAL( clicked() ), SLOT(byes_clicked()));
- connect(bcancel, SIGNAL( clicked() ), SLOT(bcancel_clicked()));
- connect(bno, SIGNAL( clicked() ), SLOT(bno_clicked()));
- break;
- }
- }
-
-}
-
-MessageBox::~MessageBox()
-{
- delete pix_icon;
-}
-
-QPushButton *MessageBox::createButton(QWidget *parent, const char *text)
-{
- QPushButton *q = new QPushButton(parent);
- q->setText(text);
- q->setFont( QFont( "Sans Serif", (int)(unit * 0.7 * BUTTON_HEIGHT / 2 ), QFont::Normal ) );
- q->setFixedSize((int)(BUTTON_WIDTH * unit), (int)(BUTTON_HEIGHT * unit));
- return q;
-}
-
-void MessageBox::bok_clicked()
-{
- done(MSG_OK);
-}
-
-void MessageBox::bcancel_clicked()
-{
- done(MSG_CANCEL);
-}
-
-void MessageBox::byes_clicked()
-{
- done(MSG_YES);
-}
-
-void MessageBox::bno_clicked()
-{
- done(MSG_NO);
-}
-
-void MessageBox::bmaybe_clicked()
-{
- done(MSG_MAYBE);
-}
-
-#endif/*USE_GUI*/
diff --git a/src/messagebox.h b/src/messagebox.h
deleted file mode 100644
index 30a8307..0000000
--- a/src/messagebox.h
+++ /dev/null
@@ -1,112 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/***************************************************************************
- * messagebox.h
- *
- * Fri Feb 25 20:23:19 CET 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.
- */
-#include "config.h"
-#ifdef USE_GUI
-
-#ifndef __MIAV_MESSAGEBOX_H__
-#define __MIAV_MESSAGEBOX_H__
-
-#include <qdialog.h>
-#include <qwidget.h>
-#include <qframe.h>
-#include <qlayout.h>
-#include <qpushbutton.h>
-#include <qlabel.h>
-#include <qpixmap.h>
-
-typedef enum {
- ICON_NONE, // No icon is used
- ICON_DEFAULT, // An icon matching the buttons is used
- ICON_INFO, // An info icon (matching the ok button)
- ICON_WARNING, // An warning icon (matching the ok/cancel button)
- ICON_ERROR, // An critical error icon
- ICON_QUESTION // An question icon (matching the yes/no and yes/no/cancel buttons)
-} msg_icon;
-
-typedef enum {
- MSG_YES,
- MSG_NO,
- MSG_CANCEL,
- MSG_OK,
- MSG_MAYBE
-} msg_val;
-
-typedef enum {
- TYPE_OK,
- TYPE_OK_CANCEL,
- TYPE_YES_NO,
- TYPE_YES_NO_MAYBE,
- TYPE_YES_NO_CANCEL,
- TYPE_YES_NO_MAYBE_CANCEL,
-} msg_type;
-
-
-/**
- * Textstrings
- */
-#define TXT_OK "Ok"
-#define TXT_CANCEL "Annullér"
-#define TXT_YES "Ja"
-#define TXT_NO "Nej"
-#define TXT_MAYBE "Måske"
-
-/**
- * Images
- */
-#define PIXMAP_INFO PIXMAPS"/info.png"
-#define PIXMAP_WARNING PIXMAPS"/warning.png"
-#define PIXMAP_QUESTION PIXMAPS"/question.png"
-#define PIXMAP_ERROR PIXMAPS"/error.png"
-
-
-class MessageBox : public QDialog
-{
- Q_OBJECT
-public:
- MessageBox(QWidget* parent = 0,
- const char* name = "",
- const char* text = "",
- msg_type type = TYPE_OK,
- msg_icon icon = ICON_DEFAULT);
- ~MessageBox();
-
-public slots:
- void bok_clicked();
- void bcancel_clicked();
- void byes_clicked();
- void bno_clicked();
- void bmaybe_clicked();
-
-private:
- float unit;
- QPixmap *pix_icon;
- QPushButton *createButton(QWidget *parent, const char *text);
-};
-
-#endif/*__MIAV_MESSAGEBOX_H__*/
-
-#endif /*USE_GUI*/
diff --git a/src/miav.cc b/src/miav.cc
deleted file mode 100644
index 2efd2bf..0000000
--- a/src/miav.cc
+++ /dev/null
@@ -1,129 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/***************************************************************************
- * miav.cc
- *
- * Sat Aug 21 17:32:24 2004
- * Copyright 2004 deva
- * 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>
-
-#ifdef USE_GUI
-#include <qapplication.h>
-#include "mainwindow.h"
-#include "miav.h"
-#endif /* USE_GUI */
-
-#include "miav_daemon.h"
-
-#include "miav_config.h"
-
-#include "info_gui.h"
-#include "info_console.h"
-
-#include <stdio.h>
-
-typedef enum {
- MODE_UNKNOWN,
- MODE_GRAB,
- MODE_SERVER
-} run_mode;
-
-#ifdef USE_GUI
-QApplication *miav_app;
-#endif/*USE_GUI*/
-
-/**
- * This function starts the MIaV gui.
- */
-int grab(int argc, char *argv[]) {
-#ifdef USE_GUI
-
- QApplication miav_grab( argc, argv );
- miav_app = &miav_grab;
-
- MiavConfig cfg(ETC"/miav.conf", NULL);
- InfoGui info(&miav_grab, NULL, &cfg);
- config = new MiavConfig(ETC"/miav.conf", &info);
-
- InfoEventHandler *eventhandler = new InfoEventHandler( );
- miav_grab.installEventFilter( eventhandler );
-
- MainWindow mainwindow( &miav_grab );
- miav_grab.setMainWidget( &mainwindow );
-
- info.setParent(&mainwindow);
- return miav_grab.exec();
-
-#else /* USE_GUI */
-
- fprintf(stderr, "Error: MIaV was not compiled with GUI support...\n");
- return 0;
-
-#endif /* USE_GUI */
-}
-
-
-
-/**
- * This function starts the MIaV server.
- */
-int server(int argc, char *argv[])
-{
- MiavDaemon daemon;
-
- MiavConfig cfg(ETC"/miav.conf", NULL);
-
- string *user = cfg.readString("server_user");
- string *group = cfg.readString("server_group");
-
- return daemon.run(user->c_str(), group->c_str());
-}
-
-#include "debug.h"
-
-int main(int argc, char *argv[])
-{
- run_mode mode = MODE_UNKNOWN;
-
- if(argc >= 2) {
- if(!strcmp(argv[1], "grab")) mode = MODE_GRAB;
- if(!strcmp(argv[1], "server")) mode = MODE_SERVER;
- }
-
- switch(mode) {
- case MODE_GRAB:
- {
- return grab(argc - 2, &argv[2]);
- }
- case MODE_SERVER:
- {
- return server(argc - 2, &argv[2]);
- }
- case MODE_UNKNOWN:
- {
- printf("Usage: %s [mode] [mode options]\n", argv[0]);
- printf("[mode] can be one of the following: grab or server.\n");
- return 1;
- }
- }
- return 0;
-}
diff --git a/src/miav.h b/src/miav.h
deleted file mode 100644
index ce7842a..0000000
--- a/src/miav.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/***************************************************************************
- * miav.h
- *
- * Mon Nov 8 09:59:24 CET 2004
- * Copyright 2004 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.
- */
-#include "config.h"
-#ifndef __LIBMIAV_H__
-#define __LIBMIAV_H__
-
-#include "util.h"
-
-#include "network.h"
-#include "socket.h"
-#include "queue.h"
-
-#ifdef USE_GUI
-#include <qapplication.h>
-extern QApplication *miav_app;
-#endif/*USE_GUI*/
-
-#endif/*__LIBMIAV_H__*/
diff --git a/src/miav_config.cc b/src/miav_config.cc
deleted file mode 100644
index adfa5c5..0000000
--- a/src/miav_config.cc
+++ /dev/null
@@ -1,492 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/***************************************************************************
- * miav_config.cc
- *
- * Sat Feb 19 14:13:19 CET 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.
- */
-#include <config.h>
-#include "miav_config.h"
-
-MiavConfig *config;
-
-MiavConfig::MiavConfig(char *file, Info *i)
-{
- info = i;
- configs = NULL;
-
- filename = string(file);
-
- // Read config file
- FILE* fp = fopen(file, "r");
-
- if(!fp) {
- 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);
- int fsz = ftell(fp) + 1;
- fseek(fp, 0, SEEK_SET);
-
- char *raw = (char*)calloc(fsz, 1);
- fread(raw, 1, fsz, fp);
-
- fclose(fp);
-
- configs = parse(raw);
-
- free(raw);
-}
-
-MiavConfig::~MiavConfig()
-{
- _cfg *die = NULL;
- _cfg *cfg = configs;
-
- while(cfg) {
- if(die) free(die);
- die = cfg;
- cfg = cfg->next;
- }
- if(die) free(die);
-}
-
-/**
- * Prints a reasonable error message when a parse error occurres.
- */
-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",
- filename.c_str(),
- cfg->line,
- cfg->orig,
- msg);
- else fprintf(stderr, "Error parsing file %s at line %d:\n\t%s\n\t%s\n",
- filename.c_str(),
- cfg->line,
- cfg->orig,
- msg);
-}
-
-_cfg* MiavConfig::readLines(char* raw)
-{
- int line = 1;
-
- _cfg *first = (_cfg*)calloc(1, sizeof(_cfg));
- _cfg *current = first;
- _cfg *next = NULL;
-
- char *nl = strchr(raw, '\n');
-
- while(nl != NULL) {
- int len = nl - raw;
-
- current->line = line;
-
- current->orig = (char*) calloc(len + 1, 1);
- strncpy(current->orig, raw, len);
-
- // Find next newline
- raw = nl+1;
- nl = strchr(raw, '\n');
-
- line++;
-
- // Add _cfg
- if(nl != NULL) {
- next = (_cfg*)calloc(1, sizeof(_cfg));
- current->next = next;
- current = next;
- } else {
- current->next = NULL;
- }
- }
-
- return first;
-}
-
-_cfg* MiavConfig::parseLines(_cfg *cfg)
-{
- if(cfg == NULL) return NULL;
-
- char *l = cfg->left = (char*)calloc(1, strlen(cfg->orig));
- char *r = cfg->right = (char*)calloc(1, strlen(cfg->orig));
-
- char *p = cfg->orig;
-
- // Skip leftmost whitespace
- while(p < cfg->orig + strlen(cfg->orig) && strchr("\t ", *p)) {
- p++;
- }
-
- // Empty line, with whitespaces
- if(p == cfg->orig + strlen(cfg->orig)) {
- _cfg* next = cfg->next;
- free(cfg->orig);
- free(cfg->left);
- free(cfg->right);
- free(cfg);
- return parseLines(next);
- }
-
- // Parse left side
- while(p < cfg->orig + strlen(cfg->orig) && !strchr("\t ", *p)) {
- if(strchr("#", *p)) {
- if(l != cfg->left) parseError("Incomplete line.", cfg);
- _cfg* next = cfg->next;
- free(cfg->orig);
- free(cfg->left);
- free(cfg->right);
- free(cfg);
- return parseLines(next);
- }
-
- if(strchr("=", *p)) break;
-
- if(strchr("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_", *p)) {
- *l = *p;
- l++;
- } else {
- char buf[256];
- sprintf(buf, "Invalid left hand side character at [%s].", p);
- parseError(buf, cfg);
- _cfg* next = cfg->next;
- free(cfg->orig);
- free(cfg->left);
- free(cfg->right);
- free(cfg);
- return parseLines(next);
- }
-
- p++;
- }
-
- // Skip whitespace
- while(p < cfg->orig + strlen(cfg->orig) && strchr("\t ", *p)) {
- p++;
- }
-
- if(*p != '=') {
- parseError("Expected '='.", cfg);
- _cfg* next = cfg->next;
- free(cfg->orig);
- free(cfg->left);
- free(cfg->right);
- free(cfg);
- return parseLines(next);
- }
- p++; // Get past the '='
-
- // Skip whitespace
- while(p < cfg->orig + strlen(cfg->orig) && strchr("\t ", *p)) {
- p++;
- }
-
- // Parse right hand side
- int instring = 0;
- while(p < cfg->orig + strlen(cfg->orig) && !(strchr("\t ", *p) && instring != 1)) {
- if(*p == '\"') instring++;
- if(instring > 2) {
- parseError("Too many '\"'.", cfg);
- _cfg* next = cfg->next;
- free(cfg->orig);
- free(cfg->left);
- free(cfg->right);
- free(cfg);
- return parseLines(next);
- }
-
- if(instring == 1) {
- // Accept all chars
- *r= *p;
- r++;
- } else {
- // Accept only those chars valid for the data types.
- if(strchr("truefalseyesnoTRUEFALSEYESNO1234567890\",.-", *p)) {
- if(*p == ',') *r= '.';
- *r = *p;
- r++;
- } else if(!strchr("\n", *p)) {
- char buf[256];
- sprintf(buf, "Invalid right hand side character at [%s].", p);
- parseError(buf, cfg);
- _cfg* next = cfg->next;
- free(cfg->orig);
- free(cfg->left);
- free(cfg->right);
- free(cfg);
- return parseLines(next);
- }
- if(*p == '#') break;
- }
-
- p++;
- }
-
- // Skip whitespace
- while(p < cfg->orig + strlen(cfg->orig) && strchr("\t ", *p)) {
- p++;
- }
-
- // Detect if whitespace ocurred inside righthand value.
- if(p != cfg->orig + strlen(cfg->orig)) {
- parseError("Invalid use of whitespace.", cfg);
- _cfg* next = cfg->next;
- free(cfg->orig);
- free(cfg->left);
- free(cfg->right);
- free(cfg);
- return parseLines(next);
- }
-
- // Check for instring (string not ended)
- if(instring == 1) {
- parseError("String not closed.", cfg);
- _cfg* next = cfg->next;
- free(cfg->orig);
- free(cfg->left);
- free(cfg->right);
- free(cfg);
- return parseLines(next);
- }
-
- // Check for empty line
- if(l == cfg->left && r == cfg->right) {
- _cfg* next = cfg->next;
- free(cfg->orig);
- free(cfg->left);
- free(cfg->right);
- free(cfg);
- return parseLines(next);
- }
-
- // Check for empty left side.
- if(l == cfg->left) {
- parseError("Empty left side.", cfg);
- _cfg* next = cfg->next;
- free(cfg->orig);
- free(cfg->left);
- free(cfg->right);
- free(cfg);
- return parseLines(next);
- }
-
- // Check for empty right side.
- if(r == cfg->right) {
- parseError("Empty right side.", cfg);
- _cfg* next = cfg->next;
- free(cfg->orig);
- free(cfg->left);
- free(cfg->right);
- free(cfg);
- return parseLines(next);
- }
-
- cfg->next = parseLines(cfg->next);
- return cfg;
-}
-
-
-_cfg *MiavConfig::createSemantics(_cfg *cfg) {
- if(cfg == NULL) return NULL;
-
- cfg->type = CONFIG_UNKNOWN;
-
- // Boolean - true
- if(strcasecmp(cfg->right, "yes") == 0 ||
- strcasecmp(cfg->right, "true") == 0) {
- cfg->type = CONFIG_BOOL;
- cfg->boolval = true;
- }
-
- // Boolean - false
- if(strcasecmp(cfg->right, "no") == 0 ||
- strcasecmp(cfg->right, "false") == 0) {
- cfg->type = CONFIG_BOOL;
- cfg->boolval = false;
- }
-
- // String
- if(cfg->right[0] == '\"') {
- cfg->type = CONFIG_STRING;
- cfg->right[strlen(cfg->right) - 1] = '\0';
- cfg->stringval = new string(cfg->right + 1);
-
- }
-
- // Number
- bool number = true;
- char *p = cfg->right;
- while(p < cfg->right + strlen(cfg->right)) {
- if(!strchr("01234567890.-", *p)) number = false;
- p++;
- }
-
- // Integer
- if(number && strstr(cfg->right, ".") == NULL ) {
- cfg->type = CONFIG_INT;
- cfg->intval = atoi(cfg->right);
- }
-
- // Float
- if(number && strstr(cfg->right, ".") != NULL) {
- cfg->type = CONFIG_FLOAT;
- cfg->floatval = atof(cfg->right);
- }
-
- if(cfg->type == CONFIG_UNKNOWN) {
- parseError("Unknown type (see 'man miav.conf' for valid right hand sides).", cfg);
- _cfg* next = cfg->next;
- free(cfg->orig);
- free(cfg->left);
- free(cfg->right);
- free(cfg);
- return createSemantics(next);
- }
-
- // Create name
- cfg->name = new string(cfg->left);
-
- cfg->next = createSemantics(cfg->next);
- return cfg;
-}
-
-
-_cfg* MiavConfig::parse(char* raw)
-{
- _cfg *first = readLines(raw);
- first = parseLines(first);
-
- first = createSemantics(first);
-
- /*
- _cfg* cfg = first;
- while(cfg) {
- printf("Node:\n");
- printf("\tLine: [%d]\n", cfg->line);
- printf("\tOrig: [%s]\n", cfg->orig);
- printf("\tLeft: [%s]\n", cfg->left);
- printf("\tRight: [%s]\n", cfg->right);
-
- switch(cfg->type) {
- case CONFIG_INT:
- printf("\tInt value: %d\n", cfg->intval);
- break;
- case CONFIG_BOOL:
- printf("\tBool value: %d\n", cfg->boolval);
- break;
- case CONFIG_FLOAT:
- printf("\tFloat value: %f\n", cfg->floatval);
- break;
- case CONFIG_STRING:
- printf("\tString value: %s\n", cfg->stringval->c_str());
- break;
- case CONFIG_UNKNOWN:
- printf("\tUnknown type: %s\n", cfg->right);
- break;
- }
-
- cfg= cfg->next;
- }
- */
- return first;
-}
-
-int MiavConfig::readInt(char *node)
-{
- _cfg* n = findNode(node);
- if(n) {
- if(n->type == CONFIG_INT) return n->intval;
- parseError("Expected integer.", n);
- }
- return 0;
-}
-
-bool MiavConfig::readBool(char *node)
-{
- _cfg* n = findNode(node);
- if(n) {
- if(n->type == CONFIG_BOOL) return n->boolval;
- if(n->type == CONFIG_INT) return (n->intval != 0);
- parseError("Expected boolean.", n);
- }
- return false;
-}
-
-string *MiavConfig::readString(char *node)
-{
- _cfg* n = findNode(node);
- if(n) {
- if(n->type == CONFIG_STRING) return n->stringval;
- parseError("Expected string.", n);
- }
- return &emptyString;
-}
-
-float MiavConfig::readFloat(char *node)
-{
- _cfg* n = findNode(node);
- if(n) {
- if(n->type == CONFIG_FLOAT) return n->floatval;
- if(n->type == CONFIG_INT) return (float)n->intval;
- parseError("Expected float.", n);
- }
- return 0.0f;
-}
-
-_cfg *MiavConfig::findNode(char* node)
-{
- _cfg *cfg = configs;
-
- while(cfg) {
- if(!strcmp(node, cfg->name->c_str())) return cfg;
- cfg = cfg->next;
- }
- if(info) info->error("Missing line in configuration file: \"%s\"!\n", node);
- else fprintf(stderr, "Missing line in configuration file: \"%s\"!\n", node);
-
- return NULL;
-}
-
-#ifdef __TEST_MIAV_CONFIG
-
-int main(int argc, char *argv[]) {
- if(argc < 2) {
- fprintf(stderr, "usage:\n\tmiav_config [filename]\n");
- return 1;
- }
-
- MiavConfig cfg(argv[1]);
- printf("Server user: [%s]\n", cfg.readString("server_user")->c_str());
- printf("Resolution: [%f]\n", cfg.readFloat("screensize"));
- printf("Resolution (as int): [%d]\n", cfg.readInt("screensize"));
- printf("Width: [%d]\n", cfg.readInt("pixel_width"));
- printf("Width (as float): [%f]\n", cfg.readFloat("pixel_width"));
- printf("Frame quality: [%d]\n", cfg.readInt("frame_quality"));
- printf("Skip frames: [%d]\n", cfg.readBool("player_skip_frames"));
- printf("Skip frames (as int): [%d]\n", cfg.readInt("player_skip_frames"));
- printf("Frame quality (as bool): [%d]\n", cfg.readBool("frame_quality"));
-
-}
-
-#endif/* __TEST_MIAV_CONFIG*/
diff --git a/src/miav_config.h b/src/miav_config.h
deleted file mode 100644
index a8658f1..0000000
--- a/src/miav_config.h
+++ /dev/null
@@ -1,98 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/***************************************************************************
- * miav_config.h
- *
- * Sat Feb 19 14:13:19 CET 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.
- */
-#include "config.h"
-#ifndef __MIAV_MIAV_CONFIG_H__
-#define __MIAV_MIAV_CONFIG_H__
-
-#include <string>
-using namespace std;
-
-#include "info.h"
-// Cyclic include :(
-class Info;
-
-typedef enum {
- CONFIG_UNKNOWN,
- CONFIG_INT,
- CONFIG_BOOL,
- CONFIG_FLOAT,
- CONFIG_STRING
-} ConfigType;
-
-
-typedef struct __cfg {
- // For parsing
- char* orig;
- int line;
- char* left;
- char* right;
-
- // For traversal
- string *name;
- ConfigType type;
- int intval;
- bool boolval;
- float floatval;
- string *stringval;
-
- struct __cfg* next;
-} _cfg;
-
-class MiavConfig {
-public:
- MiavConfig(char *file, Info *info = NULL);
- ~MiavConfig();
-
- int readInt(char *node);
- bool readBool(char *node);
- string *readString(char *node);
- float readFloat(char *node);
-
-protected:
- Info *info;
- string filename;
-
- _cfg *createSemantics(_cfg *cfg);
- _cfg* readLines(char* raw);
- _cfg* parseLines(_cfg *cfg);
- _cfg *parse(char* raw);
- string emptyString;
-
-
-#if 0
- _cfg *addConfig(_cfg *parent, char* conf);
- char *strip(char* conf);
-#endif
-
- void parseError(char* msg, _cfg *cfg);
- _cfg *findNode(char* node);
- _cfg *configs;
-};
-
-extern MiavConfig *config;
-
-#endif/*__MIAV_MIAV_CONFIG_H__*/
diff --git a/src/miav_daemon.cc b/src/miav_daemon.cc
deleted file mode 100644
index 500e92a..0000000
--- a/src/miav_daemon.cc
+++ /dev/null
@@ -1,108 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/***************************************************************************
- * miav_daemon.cc
- *
- * Thu Jun 9 11:14: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.
- */
-#include <config.h>
-#include "miav_daemon.h"
-
-#include "info_console.h"
-#include "miav_config.h"
-
-#include "server.h"
-#include "socket.h"
-
-#include <signal.h>
-#include <errno.h>
-
-MiavDaemon::MiavDaemon()
-{}
-
-MiavDaemon::~MiavDaemon()
-{}
-
-int MiavDaemon::daemon_main()
-{
- MiavConfig cfg(ETC"/miav.conf", NULL);
- InfoConsole info(&cfg);
- config = new MiavConfig(ETC"/miav.conf", &info);
-
- int port = 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
- // (ellers kommer der kernel-brok)
-
- info.info("Starting MIaV server v. %s", VERSION);
- info.info("Listening on port %d", port);
- Socket *socket = new Socket(port, &info);
-
- if(socket->hasError()) {
- info.error("Listening socket has errors, quitting.");
- delete socket;
- return 1;
- }
-
- while(1) {
- Socket *csocket = new Socket(socket->slisten());
-
- if(socket->hasError()) {
- info.error("Server socket has errors, quitting.");
- delete csocket;
- break;
- }
-
- if(csocket->hasError()) {
- info.error("Child socket has errors, quitting.");
- delete csocket;
- break;
- }
-
- if(!csocket->isConnected()) {
- info.error("Child socket is not connected, quitting.");
- delete csocket;
- break;
- }
-
- childpid = fork();
-
- switch(childpid) {
- case -1: // fork() returns -1 on failure
- 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, &info);
- delete csocket; // Close communication socket.
- exit(0);
-
- default: // fork() returns new pid to the parent process
- break;
- }
- }
-
- delete socket;
- return 0;
-}
-
diff --git a/src/miav_daemon.h b/src/miav_daemon.h
deleted file mode 100644
index 6ab469e..0000000
--- a/src/miav_daemon.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/***************************************************************************
- * miav_daemon.h
- *
- * Thu Jun 9 11:14: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.
- */
-#include "config.h"
-#ifndef __MIAV_MIAV_DAEMON_H__
-#define __MIAV_MIAV_DAEMON_H__
-
-#include "daemon.h"
-
-class MiavDaemon: public Daemon {
-public:
- MiavDaemon();
- ~MiavDaemon();
-
-private:
- int daemon_main();
-};
-
-#endif/*__MIAV_MIAV_DAEMON_H__*/
diff --git a/src/mov_encoder.cc b/src/mov_encoder.cc
deleted file mode 100644
index 6ac5876..0000000
--- a/src/mov_encoder.cc
+++ /dev/null
@@ -1,293 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/***************************************************************************
- * mov_encoder.cc
- *
- * Sat Feb 19 14:13:19 CET 2005
- * Copyright 2005 Bent Bisballe
- * deva@aasimon.org
- ****************************************************************************/
-
-/*
- * Originally from:
- * RTVideoRec Realtime video recoder and encoder for Linux
- *
- * Copyright (C) 2004 B. Stultiens
- * Copyright (C) 2004 Koen Otter and Glenn van der Meyden
- */
-
-/*
- * 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 "mov_encoder.h"
-
-#include <errno.h>
-
-// For nice
-#include <unistd.h>
-
-#include "miav_config.h"
-
-#include "debug.h"
-#include "libfame_wrapper.h"
-
-MovEncoder::MovEncoder(volatile bool *r, sem_t *r_sem,
- ThreadSafeQueueFIFO *in,
- ThreadSafeQueuePriority *video_out,
- ThreadSafeQueuePriority *audio_out,
- Info *i)
-{
- info = i;
- info->info("MovEncoder");
-
- running = r;
-
- // Queues
- inputqueue = in;
- video_output_queue = video_out;
- audio_output_queue = audio_out;
-
- read_sem = r_sem;
-}
-
-MovEncoder::~MovEncoder()
-{
- info->info("~MovEncoder");
-}
-
-
-// this runs in a thread
-void MovEncoder::thread_main()
-{
- info->info("MovEncoder::run");
-
- // Run with slightly lower priority than MovEncoderWriter AND AudioEncoder
- nice(2);
-
- FrameVector *item;
- Frame *in_frame;
- Frame *out_v_frame;
- Frame *out_a_frame;
-
- LibFAMEWrapper fame(info);
-
- // Process until running == false and the queue is empty
- while(*running) {
-
- item = inputqueue->pop();
-
- if(item) {
- for(unsigned int cnt = 0; cnt < item->size(); cnt++) {
- in_frame = item->at(cnt);
-
- // Check for end of stream
- if(in_frame->endOfFrameStream == true) {
- info->info("endOfFrameStream in MovEncoder");
-
- // Signal to stop running
- *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!
- for(int cnt = 0; cnt < threads; cnt++) {
- inputqueue->push(NULL);
- }
- }
-
- // Encode video
- out_v_frame = fame.encode(in_frame);
- out_v_frame->number = in_frame->number;
- out_v_frame->endOfFrameStream = in_frame->endOfFrameStream;
-
- // Create audio frame
- out_a_frame = in_frame;
-
- video_output_queue->push(out_v_frame);
- audio_output_queue->push(out_a_frame);
- }
-
- delete item;
-
- item = NULL;
-
- // Kick reader
- sem_post(read_sem);
- }
- }
-
- info->info("MovEncoder::stop");
-}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-/*
-
-// this runs in a thread
-void MovEncoder::thread_main()
-{
- info->info("MovEncoder::run");
- // static volatile int test = 0;
-#ifndef NEW_QUEUE
- int v_outsize = 0;
- int a_outsize = 0;
-#endif
- int insize = 0;
-
- // Run with slightly lower priority than MovEncoderWriter AND AudioEncoder
- nice(3);
-
- FrameVector *item;
- Frame *in_frame;
- Frame *out_v_frame;
- Frame *out_a_frame;
-
- LibFAMEWrapper fame(info);
-
- // Process until running == false and the queue is empty
- while(*running) {
- sem_wait(input_sem);
-
- // Lock inout mutex
- pthread_mutex_lock(input_mutex);
- item = inputqueue->front();
- inputqueue->pop();
- insize = inputqueue->size();
- pthread_mutex_unlock(input_mutex);
- // Unlock input mutex
-
- if(item) {
- for(unsigned int cnt = 0; cnt < item->size(); cnt++) {
- in_frame = item->at(cnt);
-
- // Check for end of stream
- if(in_frame->endOfFrameStream == true) {
- info->info("endOfFrameStream in MovEncoder");
-
- // Signal to stop running
- *running = false;
-
- // Kick them sleepy ones so they get the message.
- int threads = config->readInt("encoding_threads");
- for(int cnt = 0; cnt < threads; cnt++) sem_post(input_sem);
- }
- // Encode video
- out_v_frame = fame.encode(in_frame);
- out_v_frame->number = in_frame->number;
- out_v_frame->endOfFrameStream = in_frame->endOfFrameStream;
-
- // Create audio frame
- out_a_frame = in_frame;
-
-#ifdef NEW_QUEUE
- video_output_queue->push(out_v_frame);
- audio_output_queue->push(out_a_frame);
-#else
- // Lock output mutex
- pthread_mutex_lock(video_output_mutex);
- video_outputqueue->push(out_v_frame);
- v_outsize = video_outputqueue->size();
- pthread_mutex_unlock(video_output_mutex);
- // Unlock output mutex
-
- // Kick multiplexer (video)
- sem_post(video_output_sem);
-
- // Lock output mutex
- pthread_mutex_lock(audio_output_mutex);
- audio_outputqueue->push(out_a_frame);
- a_outsize = audio_outputqueue->size();
- pthread_mutex_unlock(audio_output_mutex);
- // Unlock output mutex
-
- // Kick audio encoder
- sem_post(audio_output_sem);
-#endif
- }
-
- delete item;
- item = NULL;
-
- // Kick reader
- sem_post(read_sem);
- }
- }
-
- //info->info("Input pool size: %d, video output pool size: %d, audio output pool size: %d",
- // insize, v_outsize, a_outsize);
-
-
-#ifndef NEW_QUEUE
- // Kick audio encoder
- sem_post(audio_output_sem);
-
- // Kick multiplexer (video)
- sem_post(video_output_sem);
-#endif
-
- info->info("MovEncoder::stop");
-}
-*/
diff --git a/src/mov_encoder.h b/src/mov_encoder.h
deleted file mode 100644
index 8910f4b..0000000
--- a/src/mov_encoder.h
+++ /dev/null
@@ -1,83 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/***************************************************************************
- * mov_encoder.h
- *
- * Sat Feb 19 14:13:19 CET 2005
- * Copyright 2005 Bent Bisballe
- * deva@aasimon.org
- ****************************************************************************/
-
-/*
- * Originally from:
- * RTVideoRec Realtime video recoder and encoder for Linux
- *
- * Copyright (C) 2004 B. Stultiens
- */
-
-/*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Library General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-#include "config.h"
-#ifndef __RTVIDEOREC_ENCODER_H
-#define __RTVIDEOREC_ENCODER_H
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <vector>
-using namespace std;
-
-#include "frame.h"
-#include "util.h"
-
-#include "thread.h"
-#include <pthread.h>
-
-#include "info.h"
-
-#include "threadsafe_queue_priority.h"
-#include "threadsafe_queue_fifo.h"
-
-class MovEncoder : public Thread {
-public:
- MovEncoder(volatile bool *r, sem_t *r_sem,
- ThreadSafeQueueFIFO *in,
- ThreadSafeQueuePriority *video_out,
- ThreadSafeQueuePriority *audio_out,
- Info *info);
- ~MovEncoder();
-
- void thread_main();
-
- volatile bool *running;
-
-private:
- Info *info;
-
- // Input queue
- ThreadSafeQueueFIFO *inputqueue;
-
- // Output queues
- ThreadSafeQueuePriority *video_output_queue;
- ThreadSafeQueuePriority *audio_output_queue;
-
- // Reader (mov_encoder_thread.cc) semaphore
- sem_t *read_sem;
-
-};
-
-#endif
-
diff --git a/src/mov_encoder_thread.cc b/src/mov_encoder_thread.cc
deleted file mode 100644
index 2ff013d..0000000
--- a/src/mov_encoder_thread.cc
+++ /dev/null
@@ -1,158 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/***************************************************************************
- * mov_encoder_thread.cc
- *
- * Tue May 17 16:00:01 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.
- */
-#include <config.h>
-#include "mov_encoder_thread.h"
-#include <errno.h>
-#include "miav_config.h"
-
-MovEncoderThread::MovEncoderThread(const char *clientip, const char *cpr, Info *i)
-{
- info = i;
- info->info("MovEncoderThread");
-
- // Queue
- inputqueue = new ThreadSafeQueueFIFO();
-
- // Initialize read semaphore
- sem_init(&read_sem, 0, 0);
-
- video_output_queue = new ThreadSafeQueuePriority(info);
- audio_input_queue = new ThreadSafeQueuePriority(info);
- audio_output_queue = new ThreadSafeQueuePriority(info);
-
- info->info("video_output_queue: 0x%x", video_output_queue);
- info->info("audio_input_queue: 0x%x", audio_input_queue);
- info->info("audio_output_queue: 0x%x", audio_output_queue);
-
- block = new FrameVector();
-
- num_frames_in_block = config->readString("frame_sequence")->length();
-
- info->info("Frame sequence length %d", num_frames_in_block);
-
- threads = config->readInt("encoding_threads");
-
- movencodersrunning = true;
-
- for(int cnt = 0; cnt < threads; cnt++) sem_post(&read_sem);
-
- // Create the video encoders
- for(int cnt = 0; cnt < threads; cnt++) {
- MovEncoder *movenc = new MovEncoder(&movencodersrunning, &read_sem,
- inputqueue,
- video_output_queue,
- audio_input_queue,
- info);
- movenc->run();
- encs.push_back(movenc);
- }
-
- // Create the audio encoder
- audioenc = new AudioEncoder(audio_input_queue,
- audio_output_queue,
- info);
- audioenc->run();
-
- // Create the multiplexer
- writer = new MovEncoderWriter(clientip, cpr,
- video_output_queue,
- audio_output_queue,
- info);
- writer->run();
-
- frame_number = 0;
-}
-
-//#include <unistd.h>
-MovEncoderThread::~MovEncoderThread()
-{
- info->info("~MovEncoderThread");
-
- // First we destroy the movie encoders
- for(int cnt = 0; cnt < threads; cnt++) {
- encs[cnt]->wait_stop(); // Wait for it to stop
- delete encs[cnt]; // Delete it
- }
- info->info("Deleted the movie encoders");
-
-
- // Then we destroy the audio encoder
- audioenc->wait_stop(); // Wait for it to stop.
- delete audioenc; // delete the audio encoder
- info->info("Deleted the audio encoder");
-
-
- // Finally we destroy the writer.
- writer->wait_stop(); // Wait for it to stop.
- delete writer; // delete the writer (end thereby close the file)
- info->info("Deleted the writer");
-
-
- // Destroy the semaphore.
- sem_destroy(&read_sem);
-
- info->info("~MovEncoderThread::done");
-}
-
-static int output = 0;
-void MovEncoderThread::encode(Frame* frame)
-{
- if(output % 250 == 0) // 25 * 24
- info->info("inputqueue: %d\tvideo_outputqueue: %d\taudio_inputqueue: %d\taudio_outputqueue: %d.",
- inputqueue->size(),
- video_output_queue->size(),
- audio_input_queue->size(),
- audio_output_queue->size());
- output++;
-
- if(frame == NULL) {
- info->info("MovEncoderThread::encode - NULL frame detected.");
- // Terminate
- return;
- }
-
- frame->number = frame_number;
- block->push_back(frame);
-
- // Switch frame
- if(block->size() == num_frames_in_block || frame->endOfFrameStream == true) {
- // Wait until a free encoder.
- sem_wait(&read_sem);
-
- inputqueue->push(block);
-
- // Start new block
- block = new FrameVector;
- }
-
- frame_number ++;
-}
-
-void MovEncoderThread::setSaveState(n_savestate savestate)
-{
- writer->setSaveState(savestate);
-}
diff --git a/src/mov_encoder_thread.h b/src/mov_encoder_thread.h
deleted file mode 100644
index feea8e2..0000000
--- a/src/mov_encoder_thread.h
+++ /dev/null
@@ -1,91 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/***************************************************************************
- * mov_encoder_thread.h
- *
- * Tue May 17 16:00:01 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.
- */
-#include "config.h"
-#ifndef __MIAV_MOV_ENCODER_THREAD_H__
-#define __MIAV_MOV_ENCODER_THREAD_H__
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <unistd.h>
-
-#include <vector>
-using namespace std;
-
-#include "frame.h"
-
-#include "threadsafe_queue_priority.h"
-#include "threadsafe_queue_fifo.h"
-
-#include "mov_encoder.h"
-#include "audio_encoder.h"
-#include "mov_encoder_writer.h"
-
-#include "info.h"
-
-// For savestate_n
-#include "package.h"
-
-class MovEncoderThread {
-public:
- MovEncoderThread(const char *clientip, const char *cpr, Info *info);
- ~MovEncoderThread();
-
- void encode(Frame* frame);
-
- void setSaveState(n_savestate savestate);
-
-private:
- Info *info;
-
- // FrameVectorQueue *inputqueue;
- ThreadSafeQueueFIFO *inputqueue;
- FrameVector *block;
-
- //thread stuff
- sem_t read_sem;
-
- ThreadSafeQueuePriority *video_output_queue;
- ThreadSafeQueuePriority *audio_input_queue;
- ThreadSafeQueuePriority *audio_output_queue;
-
- volatile bool movencodersrunning;
-
- // Used for encoder switching
- unsigned int frame_number;
-
- unsigned int num_frames_in_block;
-
- MovEncoderWriter *writer;
- AudioEncoder* audioenc;
-
- int threads;
- vector<MovEncoder*> encs;
- // vector<pthread_t*> tids;
-};
-
-#endif/*__MIAV_MOV_ENCODER_THREAD_H__*/
diff --git a/src/mov_encoder_writer.cc b/src/mov_encoder_writer.cc
deleted file mode 100644
index 1773527..0000000
--- a/src/mov_encoder_writer.cc
+++ /dev/null
@@ -1,140 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/***************************************************************************
- * mov_encoder_writer.cc
- *
- * Sun May 22 12:51:36 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.
- */
-#include <config.h>
-#include "mov_encoder_writer.h"
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <unistd.h>
-
-#include <pthread.h>
-#include <semaphore.h>
-
-#include <errno.h>
-
-#include <string>
-using namespace std;
-
-#include "miav_config.h"
-
-#include <time.h>
-
-#include "multiplexer.h"
-#include "libmplex_wrapper.h"
-
-#include "multicast_configuration.h"
-
-MovEncoderWriter::MovEncoderWriter(const char *clientip, const char* cpr,
- ThreadSafeQueuePriority *video_q,
- ThreadSafeQueuePriority *audio_q,
- Info *i)
-{
- info = i;
- info->info("MovEncoderWriter");
-
- // Create path and filename
- char fname[256];
- string *server_root;
- char birthmonth[3];
- char date[32];
-
- // Get server root
- server_root = config->readString("server_movie_root");
-
- // Copy the bytes representing the birth month from the cpr
- // [dd][mm][yy]-[nn][nn]
- strncpy(birthmonth, &cpr[2], 2);
- birthmonth[2] = 0;
-
- // Create date (today) in [yyyy][mm][dd]
- struct tm *ltime;
- time_t t = time(NULL);
- ltime = localtime(&t);
- sprintf(date, "%.4d%.2d%.2d",
- ltime->tm_year + 1900,
- ltime->tm_mon + 1, // Ranging from 0 to 11
- ltime->tm_mday);
-
- sprintf(fname, "%s/%s/%s/%s-%s-", server_root->c_str(), birthmonth, cpr, cpr, date);
-
- file = new File(fname, "mpg", info);
-
- MulticastConfiguration mcconfig(info, ETC"/multicast.conf");
-
- mcastconf_t mcclientconf = mcconfig.getConf((char*)clientip);
-
- info->info("Client: %s - Enabled: %s - Addr: %s - Port: %d - WithAudio: %s",
- mcclientconf.client.c_str(),
- mcclientconf.enabled?"Yes\0":"No\0",
- mcclientconf.addr.c_str(),
- mcclientconf.port,
- mcclientconf.with_audio?"Yes\0":"No\0");
-
-
- multicast = NULL;
- if(mcclientconf.enabled) multicast = new Multicast(info,
- mcclientconf);
-
- video_queue = video_q;
- audio_queue = audio_q;
-
- running = true;
-}
-
-MovEncoderWriter::~MovEncoderWriter()
-{
- info->info("~MovEncoderWriter");
- delete file;
- if(multicast) delete multicast;
-}
-
-void MovEncoderWriter::thread_main()
-{
- info->info("MovEncoderWriter::run");
-
-#ifdef WITH_LIBMPLEX
- LibMPlexWrapper mplex(info,
- file,
- video_queue,
- audio_queue);
- mplex.multiplex();
-#else/*WITH_LIBMPLEX*/
- Multiplexer multiplexer(file, multicast,
- info, &running,
- video_queue,
- audio_queue);
- multiplexer.multiplex();
-#endif/*WITH_LIBMPLEX*/
-
- info->info("MovEncoderWriter::stop");
-}
-
-void MovEncoderWriter::setSaveState(n_savestate savestate)
-{
- file->setSaveState(savestate);
-}
diff --git a/src/mov_encoder_writer.h b/src/mov_encoder_writer.h
deleted file mode 100644
index ba9ff16..0000000
--- a/src/mov_encoder_writer.h
+++ /dev/null
@@ -1,73 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/***************************************************************************
- * mov_encoder_writer.h
- *
- * Sun May 22 12:51:35 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.
- */
-#include "config.h"
-#ifndef __MIAV_MOV_ENCODER_WRITER_H__
-#define __MIAV_MOV_ENCODER_WRITER_H__
-
-#include "frame.h"
-#include "thread.h"
-#include "file.h"
-#include "multicast.h"
-#include "info.h"
-
-#include "threadsafe_queue_priority.h"
-
-#include <string>
-using namespace std;
-
-// For n_savestate
-#include "package.h"
-
-#define AUDIO_FRAME(x) x->number%2==1
-#define VIDEO_FRAME(x) x->number%2==0
-
-class MovEncoderWriter : public Thread {
-public:
- MovEncoderWriter(const char *clientip, const char* cpr,
- ThreadSafeQueuePriority *video_queue,
- ThreadSafeQueuePriority *audio_queue,
- Info *info);
- ~MovEncoderWriter();
-
- void thread_main();
-
- void setSaveState(n_savestate savestate);
-
- volatile bool running;
-
-private:
- Info *info;
-
- File *file;
- Multicast *multicast;
-
- ThreadSafeQueuePriority *video_queue;
- ThreadSafeQueuePriority *audio_queue;
-};
-
-
-#endif/*__MIAV_MOV_ENCODER_WRITER_H__*/
diff --git a/src/multicast.cc b/src/multicast.cc
deleted file mode 100644
index 0072c19..0000000
--- a/src/multicast.cc
+++ /dev/null
@@ -1,178 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/***************************************************************************
- * multicast.cc
- *
- * Mon Sep 26 12:25:22 CEST 2005
- * Copyright 2005 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 "multicast.h"
-
-#include "multicast_configuration.h"
-
-#include "miav_config.h"
-
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <netdb.h>
-#include <sys/param.h>
-#include <arpa/inet.h>
-#include <sys/types.h>
-
-// For IP_MTU
-//#include <linux/in.h>
-//#ifndef IP_MTU
-//#define IP_MTU 14
-//#endif
-
-#include <errno.h>
-
-Multicast::Multicast(Info *i, mcastconf_t &mcclientconf)
-{
- info = i;
- udp_buffer = NULL;
-
- multicast_audio = mcclientconf.with_audio;
-
- // Open connection socket
- if(!UDPOpen(mcclientconf.addr.c_str(), mcclientconf.port))
- info->error("Error creating socket %s:%d",
- mcclientconf.addr.c_str(),
- mcclientconf.port);
-
- int mtu = config->readInt("udp_packet_size");
-
- // Create buffer with the size of MTU
- // socklen_t mtu_sz;
- // if(getsockopt(sock, SOL_IP, IP_MTU, &mtu, &mtu_sz) != -1) {
-
- udp_buffer_size = mtu - 28;
- if(udp_buffer_size < 1) udp_buffer_size = 1;
- udp_buffer = new char[udp_buffer_size];
- udp_buffer_pointer = udp_buffer;
- info->info("UDP packet buffer size %db", udp_buffer_size);
-
- //} else {
- // info->error("Error getting MTU size from socket: %s", strerror(errno));
- // return;
- //}
-}
-
-Multicast::~Multicast()
-{
- if(udp_buffer) delete udp_buffer;
-}
-
-int Multicast::Write(void* buf, int size)
-{
- if(!udp_buffer) return 0; // no buffer to write in... better break out!
-
- // info->info("To send: %d", size);
-
- char *p = (char*)buf;
- int left = udp_buffer_size - (udp_buffer_pointer - udp_buffer);
-
- while(size) {
- int to_copy = size > left ? left : size;
-
- memcpy(udp_buffer_pointer, p, to_copy);
-
- left-=to_copy;
- udp_buffer_pointer += to_copy;
-
- p+=to_copy;
- size-=to_copy;
-
- // info->info("Copied %d - %d to go", to_copy, size);
-
- if(left == 0) {
- // info->info("Sending full packet");
- write(sock, udp_buffer, udp_buffer_size);
- left = udp_buffer_size;
- udp_buffer_pointer = udp_buffer;
- }
- }
- return size;
-}
-
-bool Multicast::is_address_multicast(unsigned long address)
-{
- if((address & 255) >= 224 && (address & 255) <= 239) {
- info->info("Address is multicast.");
- return true;
- }
- info->info("Address is NOT multicast.");
- return false;
-}
-
-/*
- * open UDP socket
- */
-bool Multicast::UDPOpen(const char *address, int port)
-{
- int enable = 1L;
- struct sockaddr_in stAddr;
- struct sockaddr_in stLclAddr;
- struct hostent * host;
- // int sock;
-
- stAddr.sin_family = AF_INET;
- stAddr.sin_port = htons(port);
- if((host = gethostbyname(address)) == NULL) return false;
- stAddr.sin_addr = *((struct in_addr *) host->h_addr_list[0]);
-
- // Create a UDP socket
- if((sock = socket(AF_INET, SOCK_DGRAM, 0)) < 0)
- return false;
-
- // Allow multiple instance of the client to share the same address and port
- if(setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (char *) &enable, sizeof(unsigned long int)) < 0)
- return false;
-
- // If the address is multicast, register to the multicast group
- if(is_address_multicast(stAddr.sin_addr.s_addr)) {
- struct ip_mreq stMreq;
-
- // Bind the socket to port
- stLclAddr.sin_family = AF_INET;
- stLclAddr.sin_addr.s_addr = htonl(INADDR_ANY);
- stLclAddr.sin_port = stAddr.sin_port;
- if(bind(sock, (struct sockaddr*) & stLclAddr, sizeof(stLclAddr)) < 0) return false;
-
- // Register to a multicast address
- stMreq.imr_multiaddr.s_addr = stAddr.sin_addr.s_addr;
- stMreq.imr_interface.s_addr = INADDR_ANY;
- if(setsockopt(sock, IPPROTO_IP, IP_ADD_MEMBERSHIP, (char *) & stMreq, sizeof(stMreq)) < 0)
- return false;
- } else {
- // Bind the socket to port
- stLclAddr.sin_family = AF_INET;
- stLclAddr.sin_addr.s_addr = htonl(INADDR_ANY);
- stLclAddr.sin_port = htons(0);
- if(bind(sock, (struct sockaddr*) & stLclAddr, sizeof(stLclAddr)) < 0)
- return false;
- }
-
- connect(sock, (struct sockaddr*) & stAddr, sizeof(stAddr));
-
- return true;
-}
diff --git a/src/multicast.h b/src/multicast.h
deleted file mode 100644
index 08df3e1..0000000
--- a/src/multicast.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/***************************************************************************
- * multicast.h
- *
- * Mon Sep 26 12:25:22 CEST 2005
- * Copyright 2005 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_MULTICAST_H__
-#define __MIAV_MULTICAST_H__
-
-#include "multicast_configuration.h"
-#include "info.h"
-
-class Multicast {
-public:
- Multicast(Info *i, mcastconf_t &mcclientconf);
- ~Multicast();
-
- int Write(void* buf, int size);
-
- bool multicast_audio;
-
-private:
- Info *info;
-
- bool is_address_multicast(unsigned long address);
- bool UDPOpen(const char *address, int port);
- int sock;
-
- int udp_buffer_size;
- char *udp_buffer;
- char *udp_buffer_pointer;
-};
-
-#endif/*__MIAV_MULTICAST_H__*/
diff --git a/src/multicast_configuration.cc b/src/multicast_configuration.cc
deleted file mode 100644
index 969faca..0000000
--- a/src/multicast_configuration.cc
+++ /dev/null
@@ -1,141 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/***************************************************************************
- * multicast_configuration.cc
- *
- * Wed Oct 12 10:12:11 CEST 2005
- * Copyright 2005 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 "multicast_configuration.h"
-
-MulticastConfiguration::MulticastConfiguration(Info *info, char *file)
- : MiavConfig(file, info)
-{
- mcastconf_t conf;
-
- // Create the default values.
- global_conf.addr = "224.0.0.1";
- global_conf.port = 1234;
- global_conf.enabled = false;
- global_conf.with_audio = false;
-
- bool global = true;
-
- _cfg *cfg = configs;
-
- // Build the client list
- while(cfg) {
- if(strcmp(cfg->name->c_str(), "client") == 0) {
- if(!global) confs.push_back(conf);
-
- // Reset the configuration to the defaults
- conf.client = *(cfg->stringval);
- conf.addr = global_conf.addr;
- conf.port = global_conf.port;
- conf.enabled = global_conf.enabled;
- conf.with_audio = global_conf.with_audio;
-
- global = false;
- }
- if(strcmp(cfg->name->c_str(), "address") == 0) {
- if(global) global_conf.addr = *(cfg->stringval);
- else conf.addr = *(cfg->stringval);
- }
- if(strcmp(cfg->name->c_str(), "port") == 0) {
- if(global) global_conf.port = cfg->intval;
- else conf.port = cfg->intval;
- }
- if(strcmp(cfg->name->c_str(), "enabled") == 0) {
- if(global) global_conf.enabled = cfg->boolval;
- else conf.enabled = cfg->boolval;
- }
- if(strcmp(cfg->name->c_str(), "with_audio") == 0) {
- if(global) global_conf.with_audio = cfg->boolval;
- else conf.with_audio = cfg->boolval;
- }
- cfg = cfg->next;
- }
- if(!global) confs.push_back(conf);
-
- // Show the configuration in the log file .
- info->info("Global - Enabled: %s - Addr: %s - Port: %d - WithAudio: %s",
- global_conf.enabled?"Yes\0":"No\0",
- global_conf.addr.c_str(),
- global_conf.port,
- global_conf.with_audio?"Yes\0":"No\0");
-
- for(unsigned int cnt = 0; cnt < confs.size(); cnt++) {
- info->info("Client: %s - Enabled: %s - Addr: %s - Port: %d - WithAudio: %s",
- confs[cnt].client.c_str(),
- confs[cnt].enabled?"Yes\0":"No\0",
- confs[cnt].addr.c_str(),
- confs[cnt].port,
- confs[cnt].with_audio?"Yes\0":"No\0");
- }
-
- info->info("Chosing:");
-}
-
-MulticastConfiguration::~MulticastConfiguration()
-{
-}
-
-mcastconf_t &MulticastConfiguration::getConf(char *client)
-{
- for(unsigned int cnt = 0; cnt < confs.size(); cnt++) {
- if(strcmp(confs[cnt].client.c_str(), client) == 0)
- return confs[cnt];
- }
-
- return global_conf;
-}
-
-#ifdef __TEST_MULTICAST_CONFIGURATION
-#include "info_simple.h"
-
-int main(int argc, char *argv[]) {
- if(argc < 2) {
- fprintf(stderr, "usage:\n\t%s [filename]\n", argv[0]);
- return 1;
- }
-
- InfoSimple info;
- MulticastConfiguration conf(&info, argv[1]);
-
- mcastconf_t mcconf = conf.getConf("192.168.0.11");
-
- info.warn("Client: %s - Enabled: %s - Addr: %s - Port: %d",
- mcconf.client.c_str(),
- mcconf.enabled?"Yes\0":"No\0",
- mcconf.addr.c_str(),
- mcconf.port);
-
- mcconf = conf.getConf("192.168.0.0");
-
- info.warn("Client: %s - Enabled: %s - Addr: %s - Port: %d",
- mcconf.client.c_str(),
- mcconf.enabled?"Yes\0":"No\0",
- mcconf.addr.c_str(),
- mcconf.port);
-}
-
-#endif/* __TEST_MULTICAST_CONFIGURATION*/
diff --git a/src/multicast_configuration.h b/src/multicast_configuration.h
deleted file mode 100644
index 3fa7ef1..0000000
--- a/src/multicast_configuration.h
+++ /dev/null
@@ -1,56 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/***************************************************************************
- * multicast_configuration.h
- *
- * Wed Oct 12 10:12:11 CEST 2005
- * Copyright 2005 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_MULTICAST_CONFIGURATION_H__
-#define __MIAV_MULTICAST_CONFIGURATION_H__
-
-#include "miav_config.h"
-
-#include <vector>
-#include <string>
-
-typedef struct {
- std::string client;
- std::string addr;
- bool enabled;
- int port;
- bool with_audio;
-} mcastconf_t;
-
-class MulticastConfiguration : private MiavConfig {
-public:
- MulticastConfiguration(Info *info, char *file);
- ~MulticastConfiguration();
-
- mcastconf_t &getConf(char *client);
-
-private:
- std::vector<mcastconf_t> confs;
- mcastconf_t global_conf;
-};
-
-#endif/*__MIAV_MULTICAST_CONFIGURATION_H__*/
diff --git a/src/multiplexer.cc b/src/multiplexer.cc
deleted file mode 100644
index 7a8b095..0000000
--- a/src/multiplexer.cc
+++ /dev/null
@@ -1,495 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/***************************************************************************
- * multiplexer.cc
- *
- * Wed Aug 31 13:05:18 CEST 2005
- * Copyright 2005 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 "multiplexer.h"
-
-#include <netinet/in.h>
-#include <math.h>
-
-#include "util.h"
-
-#define SIZEOF(x) (sizeof(x)-1)
-
-#define MASK3 0x7
-#define MASK15 0x7FFF
-#define TIMECODE32_30(x) ((x >> 30) & MASK3 )
-#define TIMECODE29_15(x) ((x >> 15) & MASK15)
-#define TIMECODE14_0(x) ((x >> 0) & MASK15)
-
-// Audio index lists
-/*
-static unsigned int frequency_index[4] = {44100, 48000, 32000, 0};
-//static unsigned int slots [4] = {12, 144, 0, 0};
-//static unsigned int slot_index [4] = {144, 144, 144, 0};
-//static unsigned int sample_index [4] = {384, 1152, 0, 0};
-static unsigned int bitrate_index [4][16] = {
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,0}, // Reserved
- {0,32,40,48, 56, 64, 80, 96,112,128,160,192,224,256,320,0}, // Layer III
- {0,32,48,56, 64, 80, 96,112,128,160,192,224,256,320,384,0}, // Layer II
- {0,32,64,96,128,160,192,224,256,288,320,352,384,416,448,0} // Layer I
-};
-static char layer_index[4][12] = { "Reserved", "Layer III", "Layer II", "Layer I" };
-static char mode_index[4][32] = { "Stereo", "Joint Stereo", "Dual Channel", "Single Channel"};
-static char protection_index[2][32] = { "CRC check enabled", "CRC check disabled" };
-*/
-//static unsigned short int syncword = 0xFFF;
-
-// Video index lists
-/*
-#define FORBIDDEN -1.0
-#define RESERVED -2.0
-static double picture_rate_index[16] = {
- FORBIDDEN, 23.976, 24.0, 25.0, 29.97, 30.0, 50.0, 59.94, 60,
- RESERVED, RESERVED, RESERVED, RESERVED, RESERVED, RESERVED, RESERVED
-};
-*/
-Multiplexer::Multiplexer(File *f, Multicast *m, Info *i, volatile bool *r,
- ThreadSafeQueuePriority *video_q,
- ThreadSafeQueuePriority *audio_q)
-{
- running = r;
- file = f;
- multicast = m;
- info = i;
-
- frame[TYPE_VIDEO] = NULL;
- written[TYPE_VIDEO] = 0.0;
-
- frame[TYPE_AUDIO] = NULL;
- written[TYPE_AUDIO] = 0.0;
-
- write_audio_packet = 0;
- write_system_header = 0;
-
- audio_header_read = false;
-
- queue[TYPE_VIDEO] = video_q;
- queue[TYPE_AUDIO] = audio_q;
-
- SCR = 3904;//0x40010003LL;//0x1E80;
-
-}
-
-Multiplexer::~Multiplexer()
-{
-}
-
-int Multiplexer::Write(void* data, int size)
-{
- int ret;
-
- if(multicast && multicast->multicast_audio == true) multicast->Write(data, size);
- ret = file->Write(data, size);
-
- return ret;
-}
-
-int Multiplexer::Write(char* data, int size)
-{
- return Write((void*)data, size);
-}
-
-int Multiplexer::Write(unsigned long long int val)
-{
- int res;
- int written = 0;
- unsigned long int *h_u = (unsigned long int *)&val;
- unsigned long int *h_l = (unsigned long int *)(((char*)&val) + sizeof(unsigned long int));
-
- *h_u = htonl(*h_u);
- *h_l = htonl(*h_l);
-
- if((res = Write((void*)h_l, sizeof(*h_l))) < 0) {
- return res;
- }
- written += res;
-
- if((res = Write((void*)h_u, sizeof(*h_u))) < 0) {
- return res;
- }
- written += res;
-
- return written;
-}
-
-int Multiplexer::Write(long long int val)
-{
- int res;
- int written = 0;
- unsigned long int *h_u = (unsigned long int *)&val;
- unsigned long int *h_l = (unsigned long int *)(((char*)&val) + sizeof(unsigned long int));
-
- *h_u = htonl(*h_u);
- *h_l = htonl(*h_l);
-
- if((res = Write((void*)h_l, sizeof(*h_l))) < 0) {
- return res;
- }
- written += res;
-
- if((res = Write((void*)h_u, sizeof(*h_u))) < 0) {
- return res;
- }
- written += res;
-
- return written;
-}
-
-int Multiplexer::Write(long int val)
-{
- val = htonl(val);
-
- return Write((char*)&val, sizeof(val));
-}
-
-int Multiplexer::Write(unsigned long int val)
-{
- val = htonl(val);
-
- return Write((char*)&val, sizeof(val));
-}
-
-int Multiplexer::Write(int val)
-{
- val = htonl(val);
-
- return Write((char*)&val, sizeof(val));
-}
-
-int Multiplexer::Write(unsigned int val)
-{
- val = htonl(val);
-
- return Write((char*)&val, sizeof(val));
-}
-
-int Multiplexer::Write(short int val)
-{
- val = htons(val);
-
- return Write((char*)&val, sizeof(val));
-}
-
-int Multiplexer::Write(unsigned short int val)
-{
- val = htons(val);
-
- return Write((char*)&val, sizeof(val));
-}
-
-Frame *Multiplexer::getFrame(StreamType type)
-{
- // info->info("Get %s Frame", type==TYPE_AUDIO?"Audio\0":"Video\0");
-
- read[type] = 0;
-
- Frame *frame = queue[type]->pop();
-
- // If we multicast without audio, we better write the raw video stream.
- if(type == TYPE_VIDEO && multicast && multicast->multicast_audio == false)
- multicast->Write(frame->data, frame->size);
-
- return frame;
-}
-
-int Multiplexer::read_stream(char *buf, unsigned int size, StreamType type)
-{
- unsigned int copied = 0;
-
- while( copied < size ) {
-
- // If we read the entire frame, prepare to get a new one
- if(frame[type] && read[type] == frame[type]->size) {
- delete frame[type];
- frame[type] = NULL;
- }
-
- // If no frame is in the buffer, get one from the queue
- if(frame[type] == NULL) frame[type] = getFrame(type);
-
- // check for end of stream
- if( frame[type]->endOfFrameStream == true) {
- info->info("endOfFrameStream in Multiplexer %s-stream.", type==TYPE_VIDEO?"video\0":"audio\0");
- return copied;
- }
-
- // If a frame exists in the buffer copy it to the output buffer
- // (No frame ocurres when *running is set to false)
- if( frame[type] ) {
- unsigned int doread = (size - copied) < (frame[type]->size - read[type]) ?
- size - copied : (frame[type]->size - read[type]);
-
- //info->info("Requested: %d. Read: %d. Doread: %d. In buffer %d", size, (*read), doread, (*frame)->size);
-
- memcpy(buf + copied, frame[type]->data + read[type], doread);
- read[type] += doread;
- copied += doread;
- }
- }
-
- return copied;
-}
-
-bool Multiplexer::packet(StreamType type)
-{
- char buf[PACKET_SIZE];
-
- // Write data
- // info->info("\t\t[%sPacket]", type==TYPE_AUDIO?"Audio\0":"Video\0");
-
- unsigned short int framesize = read_stream(buf, PACKET_SIZE, type);
-
- Write((void*)ISO11172_1::packet_start_code_prefix, SIZEOF(ISO11172_1::packet_start_code_prefix));
- switch(type) {
- case TYPE_VIDEO:
- Write((void*)ISO11172_1::stream_id_video1, SIZEOF(ISO11172_1::stream_id_video1));
- break;
- case TYPE_AUDIO:
- Write((void*)ISO11172_1::stream_id_audio1, SIZEOF(ISO11172_1::stream_id_audio1));
- break;
- }
-
- ISO11172_1::packet_header header;
- header.marker_bit1 = header.marker_bit2 = header.marker_bit3 = 1;
- header.padding = 0x2; // Must be 2
- header.stuffing_byte = 0xFF;
- header.packet_length = framesize + sizeof(ISO11172_1::packet_header) - sizeof(short);
- header.system_clock_reference1 = TIMECODE32_30(SCR);
- header.system_clock_reference2 = TIMECODE29_15(SCR);
- header.system_clock_reference3 = TIMECODE14_0(SCR);
- Write(*((unsigned long long int*)&header));
-
- Write(buf, framesize);
-
- if(framesize != PACKET_SIZE) return false;
-
- written[type] += (double)PACKET_SIZE / (double)frame[type]->size;//bitrate;
-
- return true;
-}
-
-/**
- * Create and write a packet
- */
-bool Multiplexer::packet()
-{
- //info->info("\t\tWritten[A]: %f, Written[V]: %f", written[TYPE_AUDIO], written[TYPE_VIDEO]);
-
- StreamType type;
- /*
- // New switching mechanism
- if(written[TYPE_AUDIO] < written[TYPE_VIDEO]) {
- type = TYPE_AUDIO;
- } else {
- type = TYPE_VIDEO;
- }
- */
-
- // Newer switching mechanism
- if(queue[TYPE_AUDIO]->size() > queue[TYPE_VIDEO]->size()) {
- type = TYPE_AUDIO;
- } else {
- type = TYPE_VIDEO;
- }
-
-
- if(!packet(type)) {
- // Flush the other stream too...
- if(type == TYPE_AUDIO) type = TYPE_VIDEO;
- else type = TYPE_AUDIO;
- while(packet(type));
- return false;
- }
- return true;
-
- /*
- // Count this up here, we want audio packets in packet 4, 9, ... NOT 0, 3, ...
-
- write_audio_packet++;
- if(write_audio_packet % AUDIO_PACKET_FREQUENCY == 0) {
- packet(TYPE_AUDIO);
- } else {
- packet(TYPE_VIDEO);
- }
- */
-}
-
-/**
- * Create and write the system header
- */
-void Multiplexer::system_header()
-{
- // info->info("\t\t[System Header]");
-
- // system_header_start_code (32 bits)
- Write((void*)ISO11172_1::system_header_start_code, SIZEOF(ISO11172_1::system_header_start_code));
-
- ISO11172_1::system_header header;
-
- header.marker_bit1 = header.marker_bit2 = header.marker_bit3 = 1;
-
- header.header_length = 8 - 2 + (NUM_TYPES * 3);
- // (sizeof(header) - sizeof(header.header_length)) +
- // NUM_TYPES * sizeof(ISO11172_1::stream_description);
- header.rate_bound = 3521; // FIXME: Taken from the example!
- header.audio_bound = 1; // Only 1 audio stream
- header.fixed_flag = 1; // Fixed bitrate (0 indicates vbr)
- header.CSPS_flag = 1; // Standarts compliant? (yes: see lame_set_strict_ISO in liblame_wrapper.cc)
- header.system_audio_clock_flag = 1; // FIXME: What excactly is this??
- header.system_video_clock_flag = 1; // FIXME: What excactly is this??
- header.video_bound = 1; // Only 1 video stream
- header.reserved_byte = 0xFF; // Must be 0xFF
- Write(*((unsigned long long int*)&header));
-
- ISO11172_1::stream_description audio_stream_description;
- audio_stream_description.stream_id = 0xC0;
- audio_stream_description.market_bits = 0x3;
- audio_stream_description.STD_buffer_bound_scale = 0; // Must be 0 for audio streams
- audio_stream_description.STD_buffer_size_bound = 32; // Buffer must be 32 * 128 bytes
- Write(*((unsigned long int*)&audio_stream_description));
-
- ISO11172_1::stream_description video_stream_description;
- video_stream_description.stream_id = 0xE3;
- video_stream_description.market_bits = 0x3;
- video_stream_description.STD_buffer_bound_scale = 1; // Must be 1 for video streams
- video_stream_description.STD_buffer_size_bound = 46; // Buffer must be 32 * 1024 bytes
- Write(*((unsigned long int*)&video_stream_description));
-}
-
-/**
- * Create and write a pack
- */
-bool Multiplexer::pack()
-{
- // info->info("\t[Pack");
-
- Write((void*)ISO11172_1::pack_start_code, SIZEOF(ISO11172_1::pack_start_code));
-
- ISO11172_1::pack_header header;
- // Set marker bits to 1
- header.marker_bit1 =
- header.marker_bit2 =
- header.marker_bit3 =
- header.marker_bit4 =
- header.marker_bit5 = 1;
-
- header.padding = 0x2;
-
- unsigned int video_data_rate;
- unsigned int audio_data_rate;
-
- if(frame[TYPE_AUDIO]) audio_data_rate = frame[TYPE_AUDIO]->bitrate;
- else audio_data_rate = 112000;
-
- if(frame[TYPE_VIDEO]) video_data_rate = frame[TYPE_VIDEO]->bitrate;
- else video_data_rate = 1100000;
-
- unsigned int Rmux = ISO11172_1::Rmux(video_data_rate,
- audio_data_rate,
- 20, // packet_header_size,
- 12, // pack_header_size,
- PACKETS_PER_PACK, // packets_per_pack,
- PACKET_SIZE);// packet_data_size)
-
- header.mux_rate = Rmux;
- //0x1B82;
-
- SCR = ISO11172_1::SCR(SCR,
- 12, //pack_header_size,
- PACKETS_PER_PACK, //packets_per_pack,
- PACKET_SIZE, //packet_data_size,
- Rmux);
-
- // SCR = 0x40010003LL;
-
- header.system_clock_reference1 = TIMECODE32_30(SCR);
- header.system_clock_reference2 = TIMECODE29_15(SCR);
- header.system_clock_reference3 = TIMECODE14_0(SCR);
- /*
- info->info("timecode All: %lld, 1: %lld, 2: %lld, 3: %lld",
- SCR,
- (unsigned long long int)header.system_clock_reference1,
- (unsigned long long int)header.system_clock_reference2,
- (unsigned long long int)header.system_clock_reference3
- );
- */
- Write(*((unsigned long long int*)&header));
-
- if(write_system_header % SYSTEM_HEADER_FREQUENCY == 0) system_header();
- // Count this up here, we want a system header in pack 0, 5, ... NOT 4, 9, ...
- write_system_header++;
-
- for(int cnt = 0; cnt < PACKETS_PER_PACK; cnt++)
- if(!packet()) return false;
-
- // info->info("\t]");
-
- return true;
-}
-
-/**
- *
- */
-void Multiplexer::iso11172_stream()
-{
- // info->info("[iso11172_stream");
-
- while(pack());
-
- // info->info("]");
- // info->info("[iso11172_end_code]");
- Write((void*)ISO11172_1::end_code, SIZEOF(ISO11172_1::end_code));
-
- /*
- info->info("false && false = %d", false && false);
- info->info("true && false = %d", true && false);
- info->info("true && true = %d", true && true);
- */
-}
-
-//#define BYPASS TYPE_VIDEO
-//#define BYPASS TYPE_AUDIO
-void Multiplexer::multiplex()
-{
-#ifdef BYPASS
-
- int frmsz;
- char buf[1024];
- do {
- frmsz = read_stream(buf, sizeof(buf), BYPASS);
- info->info("Wrote %d bytes", frmsz);
- Write(buf, frmsz);
- } while(frmsz == sizeof(buf));
- return;
-
-#else/*BYPASS*/
-
- iso11172_stream();
-
-#endif/*BYPASS*/
-}
diff --git a/src/multiplexer.h b/src/multiplexer.h
deleted file mode 100644
index 9959009..0000000
--- a/src/multiplexer.h
+++ /dev/null
@@ -1,134 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/***************************************************************************
- * multiplexer.h
- *
- * Wed Aug 31 13:05:18 CEST 2005
- * Copyright 2005 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_MULTIPLEXER_H__
-#define __MIAV_MULTIPLEXER_H__
-
-#include "iso11172-1.h"
-#include "iso11172-2.h"
-#include "iso11172-3.h"
-
-#include "file.h"
-#include "multicast.h"
-#include "info.h"
-#include "frame.h"
-
-#include "threadsafe_queue_priority.h"
-
-/**
- * Multiplexer configuration
- */
-// How many packets should we put in one pack
-#define PACKETS_PER_PACK 3
-
-// How many packets bewteen audio packs
-#define AUDIO_PACKET_FREQUENCY 10
-
-// How many packs bewteen system headers
-#define SYSTEM_HEADER_FREQUENCY 5
-
-// Size of video or audio data pr. packet
-#define PACKET_SIZE 2028
-
-/**
- * Other stuff
- */
-// The number of streamtypes.
-#define NUM_TYPES 2
-
-// Enum of the streamtypes.
-typedef enum {
- TYPE_VIDEO,
- TYPE_AUDIO
-} StreamType;
-
-
-class Multiplexer {
-public:
- Multiplexer(File *file, Multicast *m, Info *info, volatile bool *running,
- ThreadSafeQueuePriority *video_queue,
- ThreadSafeQueuePriority *audio_queue);
- ~Multiplexer();
-
- void multiplex();
-
-private:
- int Write(void* data, int size);
- int Write(char* data, int size);
- int Write(unsigned long long int val);
- int Write(long long int val);
- int Write(long int val);
- int Write(unsigned long int val);
- int Write(int val);
- int Write(unsigned int val);
- int Write(short int val);
- int Write(unsigned short int val);
-
- unsigned long long int SCR;
-
- double written[NUM_TYPES];
-
- void iso11172_stream();
- bool pack();
- void system_header();
- bool packet();
- bool packet(StreamType type);
- /*
- void audio_packet();
- void video_packet();
-
- void audio_data(ISO11172_3::header *header);
- void audio_data_layer_I(ISO11172_3::header *header);
- void audio_data_layer_II(ISO11172_3::header *header);
- void audio_data_layer_III(ISO11172_3::header *header);
-
- void video_data(ISO11172_2::sequence_header_1 *header1,
- ISO11172_2::sequence_header_2 *header2);
- */
- // Frequency variables
- unsigned int write_system_header;
- unsigned int write_audio_packet;
-
- Frame *getFrame(StreamType type);
- int read_stream(char *buf, unsigned int size, StreamType type);
-
- Frame *frame[NUM_TYPES];
- unsigned int frame_number[NUM_TYPES];
- unsigned int read[NUM_TYPES];
-
- File *file;
- Multicast *multicast;
- Info *info;
- volatile bool *running;
-
- // Audio Header
- bool audio_header_read;
-
- ThreadSafeQueuePriority *queue[NUM_TYPES];
-};
-
-#endif/*__MIAV_MULTIPLEXER_H__*/
diff --git a/src/mutex.cc b/src/mutex.cc
deleted file mode 100644
index 483d71a..0000000
--- a/src/mutex.cc
+++ /dev/null
@@ -1,48 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/***************************************************************************
- * mutex.cc
- *
- * Sat Oct 8 17:44:09 CEST 2005
- * Copyright 2005 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 "mutex.h"
-
-Mutex::Mutex()
-{
- pthread_mutex_init (&mutex, NULL);
-}
-
-Mutex::~Mutex()
-{
- pthread_mutex_destroy(&mutex);
-}
-
-void Mutex::lock()
-{
- pthread_mutex_lock( &mutex );
-}
-
-void Mutex::unlock()
-{
- pthread_mutex_unlock( &mutex );
-}
diff --git a/src/mutex.h b/src/mutex.h
deleted file mode 100644
index 0b1f4e7..0000000
--- a/src/mutex.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/***************************************************************************
- * mutex.h
- *
- * Sat Oct 8 17:44:09 CEST 2005
- * Copyright 2005 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_MUTEX_H__
-#define __MIAV_MUTEX_H__
-
-#include <pthread.h>
-
-class Mutex {
-public:
- Mutex();
- ~Mutex();
-
- void lock();
- void unlock();
-
-private:
- pthread_mutex_t mutex;
-};
-
-#endif/*__MIAV_MUTEX_H__*/
diff --git a/src/network.cc b/src/network.cc
deleted file mode 100644
index 799bc98..0000000
--- a/src/network.cc
+++ /dev/null
@@ -1,151 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/***************************************************************************
- * network.cc
- *
- * Wed Nov 3 21:23:14 CET 2004
- * Copyright 2004 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.
- */
-#include <config.h>
-#include "network.h"
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <sys/socket.h>
-
-Network::Network(Socket *gs, Info *ginfo)
-{
- info = ginfo;
- s = gs;
-}
-
-Network::~Network()
-{
-}
-
-int Network::write(void *buf, int size)
-{
- if(!s->isConnected()) {
- // info->error("Write attempted to a socket not connected!");
- return -1;
- }
- int n = send(s->ssocket, buf, size, MSG_WAITALL);
-
- if(n == -1) {
- info->error("An error occurred!");
- }
-
- return n;
-}
-
-int Network::read(void *buf, int size)
-{
- if(!s->isConnected()) {
- // info->error("Read attempted from a socket not connected!");
- return -1;
- }
- int n = recv(s->ssocket, buf, size, MSG_WAITALL);
-
- if(n == -1) {
- info->error("An error occurred!");
- }
-
- return n;
-}
-
-/*
-struct msghdr {
- void *msg_name // Optional address.
- socklen_t msg_namelen // Size of address.
- struct iovec *msg_iov // Scatter/gather array.
- int msg_iovlen // Members in msg_iov.
- void *msg_control // Ancillary data; see below.
- socklen_t msg_controllen // Ancillary data buffer len.
- int msg_flags // Flags on received message.
-};
-*/
-
-int Network::sendPackage(n_header *h, void* buf, int bufsz)
-{
- struct msghdr msg;
- struct iovec iovecs[2];
-
- if(!s->isConnected()) {
- // info->error("Write attempted to a socket not connected!");
- return -1;
- }
-
- memset(&msg, 0, sizeof(msg));
-
- msg.msg_iov = iovecs;
- msg.msg_iovlen = 2;
-
- msg.msg_iov[0].iov_base = h;
- msg.msg_iov[0].iov_len = sizeof(*h);
-
- msg.msg_iov[1].iov_base = buf;
- msg.msg_iov[1].iov_len = bufsz;
-
- int n = sendmsg(s->ssocket, &msg, 0);
- if(n < 0) {
- info->error("A network error ocurred during sendPackage!");
- return -1;
- }
-
- return n;
-}
-
-int Network::recvPackage(n_header *h, void* buf, int bufsz)
-{
- struct msghdr msg;
- struct iovec iovecs[2];
-
- if(!s->isConnected()) {
- // info->error("Read attempted to a socket not connected!");
- return -1;
- }
-
- memset(&msg, 0, sizeof(msg));
-
- iovecs[0].iov_base = h;
- iovecs[0].iov_len = sizeof(*h);
-
- iovecs[1].iov_base = buf;
- iovecs[1].iov_len = bufsz;
-
- msg.msg_iov = iovecs;
- msg.msg_iovlen = 2;
-
- int n = recvmsg(s->ssocket, &msg, MSG_WAITALL);
-
- if(n < 0) {
- info->error("A network error ocurred during recvPackage!");
- return -1;
- }
-
- if(msg.msg_iovlen != 2) {
- info->error("Wrong package format!");
- return -1;
- }
- return n;
-}
-
diff --git a/src/network.h b/src/network.h
deleted file mode 100644
index f64310e..0000000
--- a/src/network.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/***************************************************************************
- * network.h
- *
- * Wed Nov 3 21:23:14 CET 2004
- * Copyright 2004 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.
- */
-#include "config.h"
-#ifndef __MIAVLIB_NETWORK_H__
-#define __MIAVLIB_NETWORK_H__
-
-#include "socket.h"
-#include "package.h"
-#include "info.h"
-
-class Network {
-public:
- Network(Socket *gs, Info* ginfo);
- ~Network();
-
- // Raw communication
- int write(void *buf, int size);
- int read(void *buf, int size);
-
- // Package communication
- int sendPackage(n_header *h, void* buf, int bufsz);
- int recvPackage(n_header *h, void* buf, int bufsz);
-
-private:
- Info *info;
- Socket *s;
-};
-
-#endif/*__NETWORK_H__*/
-
-
diff --git a/src/package.h b/src/package.h
deleted file mode 100644
index a16557a..0000000
--- a/src/package.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/***************************************************************************
- * package.h
- *
- * Tue Nov 9 10:57:20 CET 2004
- * Copyright 2004 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.
- */
-#include "config.h"
-#ifndef __MIAVLIB_PACKAGE_H__
-#define __MIAVLIB_PACKAGE_H__
-
-typedef enum {
- NO_CHANGE = 0,
- SAVE,
- DELETE,
- LATER
-} n_savestate;
-
-typedef enum {
- DATA_HEADER = 0x0001,
- INFO_HEADER = 0x0002
-} n_header_type;
-
-typedef struct {
- n_header_type header_type;
- union {
- struct {
- char cpr[32]; // Can hold wierd cpr numbers as well (not only danish)
- bool record;
- bool freeze;
- bool snapshot;
- n_savestate savestate;
- bool mute;
- } h_data;
- struct {
- int fisk;
- } h_info;
- } header;
-} n_header;
-
-
-#endif/*__PACKAGE_H__*/
-
-
diff --git a/src/player.cc b/src/player.cc
deleted file mode 100644
index e57211d..0000000
--- a/src/player.cc
+++ /dev/null
@@ -1,322 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/***************************************************************************
- * plsyer.cc
- *
- * Wed Nov 3 21:23:14 CET 2004
- * Copyright 2004 Bent Bisballe
- * deva@aasimon.org
- ****************************************************************************/
-
-/*
- * Originally from:
- * RTVideoRec Realtime video recoder and encoder for Linux
- *
- * Copyright (C) 2004 B. Stultiens
- * Copyright (C) 2004 Koen Otter and Glenn van der Meyden
- */
-
-/*
- * 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>
-#ifdef USE_GUI
-
-#include "player.h"
-
-// Use libdv
-#include <libdv/dv.h>
-#include <libdv/dv_types.h>
-
-#include <time.h>
-
-// For sleep
-#include <unistd.h>
-
-Player::Player(Info *ginfo,
- int w, int h,
- volatile int *grunning,
- sem_t *gsem,
- Queue<Frame> *gqueue,
- pthread_mutex_t *gmutex)
-{
- // No errors has ocurred... yet!
- noErrors = true;
-
- yuv_draw = new YUVDraw();
-
- width = w;
- height = h;
-
- info = ginfo;
-
- running = grunning;
- sem = gsem;
- queue = gqueue;
- mutex = gmutex;
-
- sem_init(&play_sem, 0, 1);
-
- initSDL();
-
- bypass = false;
-
- // Do not show the text
- showtext = false;
- recording = false;
- recording_prev = !recording;
- cprchanged = false;
-
- muted = false;
- muted_prev = !muted;
-}
-
-Player::~Player()
-{
- deinitSDL();
- if(yuv_draw) delete yuv_draw;
-}
-
-void Player::reinitSDL()
-{
- deinitSDL();
- initSDL();
-}
-
-void Player::deinitSDL()
-{
- SDL_FreeYUVOverlay(overlay);
- SDL_Quit();
-}
-
-void Player::initSDL()
-{
- if(SDL_Init(SDL_INIT_VIDEO) < 0) {
- info->error("Unable to init SDL: %s.", SDL_GetError());
- noErrors = false;
- printf("failed!\n");
- return;
- }
-
- screen = SDL_SetVideoMode(width,
- height,
- 0, // 0 bpp means 'use current display depth'
- SDL_HWSURFACE |
- SDL_ANYFORMAT |
- SDL_HWACCEL );
-
- if(!screen) {
- info->error("Unable to set %dx%d video: %s.",
- 720, 576, SDL_GetError());
- noErrors = false;
- printf("failed!\n");
- return;
- }
-
- overlay = SDL_CreateYUVOverlay(720,
- 576,
- SDL_YUY2_OVERLAY, // Match for the libdv decoder output
- screen);
- if(!overlay) {
- info->error("Unable to create SDL overlay: %s.", SDL_GetError());
- noErrors = false;
- printf("failed!\n");
- return;
- }
-
- // Setup the displayarea.
- rect.x = 0;
- rect.y = 0;
- rect.w = width;
- rect.h = height;
-
- yuv_draw->setOverlay(overlay);
-}
-
-void Player::player()
-{
- SDL_Event event;
- Frame *frame;
-
- int pitches[3];
-
- if(!noErrors) return; // FIXME: Gracefully exit...
-
- bool first = true;
- dv_decoder_t *decoder = dv_decoder_new(FALSE/*this value is unused*/, FALSE, FALSE);
- decoder->quality = DV_QUALITY_BEST;
-
- while(*running) {
- // Wait for the semaphore to be free... then run
- sem_wait(&play_sem);
- sem_post(&play_sem);
-
- if(bypass) continue;
-
- if(!SDL_WaitEvent(&event)) break; // FIXME: Gracefully exit...
-
- switch(event.type) {
- case SDL_KEYDOWN:
- switch(event.key.keysym.sym) {
- case SDLK_q:
- case SDLK_ESCAPE:
- goto quitit;
- default:
- break;
- }
- break;
-
- case SDL_USEREVENT:
- frame = queue->pop();
- if(!frame) break;
-
- if(first) {
- pitches[0] = overlay->pitches[0];
- pitches[1] = overlay->pitches[1];
- pitches[2] = overlay->pitches[2];
-
- dv_parse_header(decoder, frame->data);
- //dv_parse_packs(decoder, frame->data); // Not needed anyway!
-
- decoder->system = e_dv_system_625_50; // PAL lines, PAL framerate
- decoder->sampling = e_dv_sample_422; // 4 bytes y, 2 bytes u, 2 bytes v
- decoder->std = e_dv_std_iec_61834;
- decoder->num_dif_seqs = 12;
- first = false;
- }
-
- if(SDL_LockYUVOverlay(overlay) == -1) info->error("SDL_LockYUVOverlay failed.");
-
- // libdv img decode to yuv
- dv_decode_full_frame(decoder,
- frame->data,
- e_dv_color_yuv,
- overlay->pixels,
- pitches);
-
- // Set status text
- // if(muted != muted_prev) {
- yuv_draw->mute(muted);
- // muted_prev = muted;
- // }
- if(recording != recording_prev) {
- if(recording) yuv_draw->setTopText(TEXT_RECORDING);
- else yuv_draw->setTopText(TEXT_STOPPED);
- recording_prev = recording;
- }
-
- // Draw overlaytext (if enabled)
- if(showtext) {
- if(cprchanged) {
- yuv_draw->setBottomText(cpr);
- cprchanged = false;
- }
- yuv_draw->draw();
- }
-
- SDL_UnlockYUVOverlay(overlay);
- SDL_DisplayYUVOverlay(overlay, &rect);
- delete frame;
- break;
-
- case SDL_QUIT:
- quitit:
- *running = 0;
- break;
-
- default:
- break;
- }
- }
- if(decoder) dv_decoder_free(decoder);
-
- struct timespec ts;
-
- /* Remove any late buffer */
- /* We don't care, the encoder finishes them all */
- ts.tv_sec = 0;
- ts.tv_nsec = 100000000L; // 100ms
- nanosleep(&ts, NULL);
-
- frame = queue->pop();
- if(frame) delete frame;
-}
-
-void Player::thread_main()
-{
- player();
- fprintf(stderr, "Player thread stopped.\n"); fflush(stderr);
-}
-
-void Player::start()
-{
- sem_post(&play_sem);
-}
-
-void Player::stop()
-{
- sem_wait(&play_sem);
-}
-
-// FIXME: Worst case genario: the loop takes more than 1 second
-// to stop displaying => crash, due to deinitialization
-// of SDL, while calling it.!
-void Player::resize(int w, int h, bool s)
-{
- // Tell loop to stop
- bypass = true;
-
- // Wait to ensure the current frame is done being displayed
- sleep(1);
-
- // Deinitialize SDL
- deinitSDL();
-
- // Set new size
- width = w;
- height = h;
-
- // Initialize SDL
- initSDL();
-
- // Tell loop to go on.
- bypass = false;
-
- showtext = s;
-}
-
-void Player::setCpr(char *newcpr, char* name)
-{
- sprintf(cpr, "ID: %s - %s", newcpr, name);
- cprchanged = true;
-}
-
-void Player::startrecord()
-{
- recording = true;
-}
-
-void Player::stoprecord()
-{
- recording = false;
-}
-
-void Player::setMute(bool m)
-{
- muted = m;
-}
-
-#endif /* USE_GUI */
diff --git a/src/player.h b/src/player.h
deleted file mode 100644
index 0f5ca51..0000000
--- a/src/player.h
+++ /dev/null
@@ -1,142 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/***************************************************************************
- * player.h
- *
- * Fri Feb 25 20:23:19 CET 2005
- * Copyright 2005 Bent Bisballe
- * deva@aasimon.org
- ****************************************************************************/
-
-/*
- * Originally from:
- * RTVideoRec Realtime video recoder and encoder for Linux
- *
- * Copyright (C) 2004 Bent Bisballe
- *
- */
-
-/*
- * 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"
-#ifdef USE_GUI
-
-#ifndef __RTVIDEOREC_PLAYER_H
-#define __RTVIDEOREC_PLAYER_H
-
-#include "info.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <SDL/SDL.h>
-//#include <avformat.h>
-
-#include "util.h"
-#include "queue.h"
-
-#include "thread.h"
-#include "frame.h"
-
-#include <qwidget.h>
-
-#include "yuv_draw.h"
-
-#define TEXT_RECORDING "Optager"
-#define TEXT_STOPPED "Stoppet"
-
-//#define DISPLAYWIDTH 720 // FIXME: These numbers suck!
-//#define DISPLAYHEIGHT 576
-
-/**
- * This class contains the SDL code, for displaying the movie frames
- * in the widget, using hardware overlay.
- */
-class Player : public Thread {
-public:
- Player(Info *ginfo,
- int width, int height,
- volatile int *grunning,
- sem_t *gsem,
- Queue<Frame> *gqueue,
- pthread_mutex_t *gmutex);
- ~Player();
-
- // These functions are used to set the overlay text.
- void setCpr(char *newcpr, char* name);
- void startrecord();
- void stoprecord();
-
- // Start and stop runnning video (freeze/unfreeze)
- void start();
- void stop();
-
- // Used to reinitialize the SDL output width a new size
- void resize(int width, int height, bool showtext);
-
- void thread_main();
-
- void setMute(bool mute);
-
-private:
-
- void initSDL();
- void deinitSDL();
- void reinitSDL();
-
- // Output dimensions (overlay)
- volatile int width;
- volatile int height;
-
- SDL_Rect rect;
-
- // Set to true, whenever a resize is requested.
- volatile bool bypass;
-
- // Vars for the text overlay
- volatile bool showtext;
- volatile bool recording;
- bool recording_prev;
-
- volatile bool muted;
- bool muted_prev;
-
- volatile bool cprchanged;
- char cpr[256];
-
- Info *info;
-
- void player();
-
- // Used to verify if errors ha ocurred previously.
- bool noErrors;
-
- volatile int *running;
- sem_t *sem;
- Queue<Frame> *queue;
- pthread_mutex_t *mutex;
-
- sem_t play_sem;
-
- SDL_Surface *screen;
- SDL_Overlay *overlay;
-
- YUVDraw *yuv_draw;
-};
-
-#endif/*__RTVIDEOREC_PLAYER_H*/
-
-#endif /* USE_GUI */
diff --git a/src/queue.h b/src/queue.h
deleted file mode 100644
index 3cb6fbc..0000000
--- a/src/queue.h
+++ /dev/null
@@ -1,248 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/***************************************************************************
- * queue.h
- *
- * Tue Nov 9 10:57:20 CET 2004
- * Copyright 2004 Bent Bisballe
- * deva@aasimon.org
- ****************************************************************************/
-
-/*
- * Originally from:
- * RTVideoRec Realtime video recoder and encoder for Linux
- *
- * Copyright (C) 2004 B. Stultiens
- */
-
-/*
- * 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 __RTVIDEOREC_QUEUE_H
-#define __RTVIDEOREC_QUEUE_H
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <assert.h>
-//#include <avformat.h>
-//#include <avcodec.h>
-
-#include "thread.h"
-#include "util.h"
-
-typedef struct __buf_t {
- struct __buf_t *next;
- struct __buf_t *prev;
- void *data;
-} buf_t;
-
-
-template<typename T>
-class Queue {
-public:
- Queue(int glimit = 0);
- ~Queue();
-
- void push(T *t);
- T *pop();
- T *peek();
-
- void lock();
- void unlock();
-
- int length();
-
-private:
- volatile bool locked;
- int limit;
- buf_t *head;
- buf_t *tail;
- int count;
- pthread_mutex_t mutex;
- T *_pop();
-};
-
-/**
- * Initialize queue
- */
-template<typename T>
-Queue<T>::Queue(int glimit)
-{
- locked = false;
- pthread_mutex_init (&mutex, NULL);
- limit = glimit;
- count = 0;
- head = NULL;
- tail = NULL;
-}
-
-/**
- * Clean up queue.
- */
-template<typename T>
-Queue<T>::~Queue()
-{
- if(count != 0) {
- fprintf(stderr, "Queue not empty (%d)\n", count);
- while(T *t = _pop()) delete t;
- }
- pthread_mutex_destroy(&mutex);
-}
-
-/**
- * Push element on queue.
- */
-template<typename T>
-void Queue<T>::push(T *t)
-{
- if(locked) {
- delete t;
- return;
- }
-
- pthread_mutex_lock(&mutex);
-
- buf_t *b = (buf_t*)xmalloc(sizeof(*b));
- b->data = (void*)t;
-
- assert(b != NULL);
-
- if(limit && count > 0) {
- T* tmp = (T*)_pop();
- delete tmp;
- }
-
- if(!head) {
- head = tail = b;
- b->next = b->prev = NULL;
- count = 1;
- pthread_mutex_unlock(&mutex);
- return;
- }
-
- b->next = tail;
- b->prev = NULL;
- if(tail)
- tail->prev = b;
- tail = b;
- count++;
-
- pthread_mutex_unlock(&mutex);
-}
-
-/**
- * Pop element from queue.
- * If queue is empty, NULL is returned.
- */
-template<typename T>
-T *Queue<T>::pop()
-{
- pthread_mutex_lock(&mutex);
- T *d = _pop();
- pthread_mutex_unlock(&mutex);
- return d;
-}
-
-/**
- * Pop helper method
- * If queue is empty, NULL is returned.
- */
-template<typename T>
-T *Queue<T>::_pop()
-{
- T *d;
- buf_t *b;
-
- assert(count >= 0);
-
- if(count == 0) {
- return NULL;
- }
-
- b = head;
- if(b->prev)
- b->prev->next = NULL;
- head = b->prev;
- if(b == tail)
- tail = NULL;
- count--;
-
- d = (T*)b->data;
- free(b);
-
- return d;
-}
-
-/**
- * Peek foremost element in queue
- * If queue is empty, NULL is returned.
- */
-template<typename T>
-T *Queue<T>::peek()
-{
- // pthread_mutex_lock(&mutex);
- T *d;
-
- // assert(count >= 0);
-
- if(count == 0) {
- return NULL;
- }
-
- d = (T*)head->data;
- // pthread_mutex_unlock(&mutex);
- return d;
-}
-
-/**
- * Print current length of queue
- */
-template<typename T>
-int Queue<T>::length()
-{
- int length;
- pthread_mutex_lock(&mutex);
- length = count;
- pthread_mutex_unlock(&mutex);
- return length;
-}
-
-/**
- * Lock the queue (all elements pushed from this point will be deleted.)
- */
-template<typename T>
-void Queue<T>::lock()
-{
- fprintf(stderr, "Lock this motherfucker..."); fflush(stderr);
- locked = true;
- fprintf(stderr, "done\n"); fflush(stderr);
-}
-
-/**
- * Unlock the queue.
- */
-template<typename T>
-void Queue<T>::unlock()
-{
- fprintf(stderr, "Unlock this motherfucker..."); fflush(stderr);
- locked = false;
- fprintf(stderr, "done\n"); fflush(stderr);
-}
-
-#endif
-
diff --git a/src/semaphore.cc b/src/semaphore.cc
deleted file mode 100644
index 147bd24..0000000
--- a/src/semaphore.cc
+++ /dev/null
@@ -1,48 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/***************************************************************************
- * semaphore.cc
- *
- * Sat Oct 8 17:44:13 CEST 2005
- * Copyright 2005 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 "semaphore.h"
-
-Semaphore::Semaphore()
-{
- sem_init(&semaphore, 0, 0);
-}
-
-Semaphore::~Semaphore()
-{
- sem_destroy(&semaphore);
-}
-
-void Semaphore::post()
-{
- sem_post(&semaphore);
-}
-
-void Semaphore::wait()
-{
- sem_wait(&semaphore);
-}
diff --git a/src/semaphore.h b/src/semaphore.h
deleted file mode 100644
index 85f4c09..0000000
--- a/src/semaphore.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/***************************************************************************
- * semaphore.h
- *
- * Sat Oct 8 17:44:13 CEST 2005
- * Copyright 2005 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_SEMAPHORE_H__
-#define __MIAV_SEMAPHORE_H__
-
-#include </usr/include/semaphore.h>
-
-class Semaphore {
-public:
- Semaphore();
- ~Semaphore();
-
- void post();
- void wait();
-
-private:
- sem_t semaphore;
-};
-
-#endif/*__MIAV_SEMAPHORE_H__*/
diff --git a/src/server.cc b/src/server.cc
deleted file mode 100644
index 34aac7b..0000000
--- a/src/server.cc
+++ /dev/null
@@ -1,136 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/***************************************************************************
- * server.cc
- *
- * Mon Nov 8 11:35:01 CET 2004
- * Copyright 2004 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.
- */
-#include "server.h"
-#include "miav.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-
-// For mkdir
-#include <sys/stat.h>
-#include <sys/types.h>
-
-// For unlink
-#include <unistd.h>
-
-// For errno
-#include <errno.h>
-
-// For inet_ntoa
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-
-#include "miav_config.h"
-
-#include "mov_encoder_thread.h"
-#include "img_encoder.h"
-
-#include "server_status.h"
-
-#include "dv.h"
-
-void newConnection(Socket *socket, Info *info)
-{
- char cpr[256];
- char clientip[64];
- bool hasCpr = false;
- ServerStatus status(info);
-
- n_savestate savestate = LATER;
- n_header h;
- Frame *frame;
- Frame *freeze_frame = NULL;
- MovEncoderThread *enc = NULL;
-
- frame = new Frame(NULL, DVPACKAGE_SIZE);
-
- info->info("CONNECTION OPENED");
- info->info("New connection (%s)", inet_ntoa(socket->socketaddr.sin_addr));
-
- sprintf(clientip, "%s", inet_ntoa(socket->socketaddr.sin_addr));
-
- Network network = Network(socket, info);
- while(int ret = network.recvPackage(&h, frame->data, frame->size)) {
- status.checkPoint();
-
- if(ret == -1) {
- info->error("A network error ocurred, terminating session");
- break;
- }
-
- frame->mute = h.header.h_data.mute;
-
- if(!hasCpr) {
- sprintf(cpr, h.header.h_data.cpr);
- hasCpr = true;
- }
-
- if(h.header.h_data.snapshot) {
- if(freeze_frame) {
- ImgEncoder(cpr, info).encode(freeze_frame, 100);
- delete freeze_frame;
- freeze_frame = NULL;
- } else {
- ImgEncoder(cpr, info).encode(frame, 100);
- }
- }
-
- if(h.header.h_data.savestate != NO_CHANGE) {
- savestate = h.header.h_data.savestate;
- info->info("GOT SAVESTATE FROM NETWORK: %d", savestate );
- }
-
- if(h.header.h_data.freeze) {
- if(freeze_frame) delete freeze_frame;
- // copy the frame into another temporary one.
- freeze_frame = new Frame(frame->data, frame->size);
- }
-
- // This one must be last!
- if(h.header.h_data.record) {
- // if(!enc) enc = newMovEncoder(cpr);
- if(!enc) enc = new MovEncoderThread(clientip, cpr, info);
- enc->encode(frame);
- }
-
- frame = new Frame(NULL, DVPACKAGE_SIZE);
- }
-
- info->info("Closing connection...");
-
- // No encoder exists, if this is a pure snapshot (image) connection.
- if(enc) {
- enc->setSaveState(savestate);
- // Send end of stream frame.
- frame->endOfFrameStream = true;
- enc->encode(frame);
- delete enc;
- }
-
- info->info("CONNECTION CLOSED");
-}
diff --git a/src/server.h b/src/server.h
deleted file mode 100644
index 7126a75..0000000
--- a/src/server.h
+++ /dev/null
@@ -1,37 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/***************************************************************************
- * server.h
- *
- * Mon Nov 8 11:35:01 CET 2004
- * Copyright 2004 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.
- */
-#ifndef __SERVER_H__
-#define __SERVER_H__
-
-#include "socket.h"
-
-#include "info.h"
-
-void newConnection(Socket *s, Info* info);
-
-
-#endif/*__SERVER_H__*/
diff --git a/src/server_status.cc b/src/server_status.cc
deleted file mode 100644
index 7f4714e..0000000
--- a/src/server_status.cc
+++ /dev/null
@@ -1,77 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/***************************************************************************
- * server_status.cc
- *
- * Fri Apr 29 13:58:26 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.
- */
-#include <config.h>
-#include "server_status.h"
-
-#include <stdio.h>
-
-ServerStatus::ServerStatus(Info *i)
-{
- info = i;
-
- gettimeofday(&oldtime, NULL);
-
- for(int cnt = 0; cnt < BUFFERSIZE; cnt++) {
- frametime[cnt] = 41660;
- }
-
- gettimeofday(&time, NULL);
-
- interval = 0;
-}
-
-ServerStatus::~ServerStatus()
-{
-}
-
-void ServerStatus::checkPoint()
-{
- for(int cnt = BUFFERSIZE - 1; cnt > 0; cnt--) {
- frametime[cnt] = frametime[cnt-1];
- }
- frametime[0] = (1000000 * time.tv_sec + time.tv_usec) - (1000000 * oldtime.tv_sec + oldtime.tv_usec);
-
- oldtime.tv_sec = time.tv_sec;
- oldtime.tv_usec = time.tv_usec;
-
- gettimeofday(&time, NULL);
-
- interval += frametime[0];
- if(interval > UPD) {
- interval = 0;
- double total = 0.0;
- for(int cnt = 0; cnt < BUFFERSIZE; cnt++) {
- total += (double)frametime[cnt];
- }
- info->info("Status - fps: %f", 1000000.0 / (total / (double)BUFFERSIZE));
- }
-
-}
-
-/*
-date(1), gettimeofday(2), ctime(3), ftime(3)
-*/
diff --git a/src/server_status.h b/src/server_status.h
deleted file mode 100644
index 5a7cb6c..0000000
--- a/src/server_status.h
+++ /dev/null
@@ -1,56 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/***************************************************************************
- * server_status.h
- *
- * Fri Apr 29 13:58:26 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.
- */
-#include "config.h"
-#ifndef __MIAV_SERVER_STATUS_H__
-#define __MIAV_SERVER_STATUS_H__
-
-#include "info.h"
-
-#include <sys/time.h>
-
-// How many steps to do avarage calculation over.
-#define BUFFERSIZE 100
-
-// Interval in us (microseconds)
-#define UPD 60 * 1000 * 1000 // 1 minute
-
-class ServerStatus {
-public:
- ServerStatus(Info *info);
- ~ServerStatus();
-
- void checkPoint();
-
-private:
- long long interval;
- Info *info;
- unsigned int frametime[BUFFERSIZE];
- struct timeval time;
- struct timeval oldtime;
-};
-
-#endif/*__MIAV_SERVER_STATUS_H__*/
diff --git a/src/socket.cc b/src/socket.cc
deleted file mode 100644
index 2ae88dc..0000000
--- a/src/socket.cc
+++ /dev/null
@@ -1,150 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/***************************************************************************
- * socket.cc
- *
- * Mon Nov 8 10:49:33 CET 2004
- * Copyright 2004 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.
- */
-#include <config.h>
-
-#include "socket.h"
-
-#include <errno.h>
-
-Socket::Socket(Info *ginfo)
-{
- info = ginfo;
- connected = false;
- err = 0;
-}
-
-Socket::Socket(u_short port, Info *ginfo)
-{
- info = ginfo;
- connected = false;
- err = 0;
-
- // create socket
- ssocket = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
- // PF_INET: ipv4, PF_INET6: ipv6
- // tcp: IPPROTO_TCP
- // upd: IPPROTO_UDP
-
- if (ssocket < 0) {
- err = 1;
- info->error("Socket: socket() failed!");
- }
-
- socketaddr.sin_family = AF_INET; // Use "internet protocol" IP
- socketaddr.sin_port = htons(port); // connect to that port
- socketaddr.sin_addr.s_addr = INADDR_ANY;
- // INADDR_ANY puts your IP address automatically
-}
-
-
-Socket::~Socket()
-{
- // if(err) perror("Socket: No socket to kill");
- // printf("Socket: I'm melting...[%d]\n", ssocket);
- if(ssocket >= 0) close(ssocket); // close server socket
-}
-
-
-Socket Socket::slisten()
-{
- Socket s = Socket(info);
-
- if(err) {
- //info->error("Socket: No socket present!");
- return s;
- }
- if(!connected) {
- // bind socket to address specified by "sa" parameter
- err = bind(ssocket, (struct sockaddr*)&socketaddr, sizeof(socketaddr));
-
- if (err) {
- info->error("Socket: bind() failed! %s", strerror(errno));
- return s;
- }
-
- // start listen for connection - kernel will accept connection
- // requests (max 5 in queue)
- err = listen(ssocket, 5);
- if(err) {
- info->error("Socket: listen() failed! %s", strerror(errno));
- return s;
- }
- }
-
- // accept new connection and get its connection descriptor
- int csalen = sizeof(s.socketaddr);
-
- s.ssocket = accept(ssocket,
- (struct sockaddr*)&s.socketaddr,
- (socklen_t*)&csalen);
-
- if (s.ssocket < 0) {
- s.connected = false;
- err = 1;
- info->error("Socket: accept() failed! %s", strerror(errno));
- return s;
- }
-
- connected = true;
- s.connected = true;
- return s;
-}
-
-
-int Socket::sconnect(char *ip)
-{
- if(err) {
- connected = false;
- info->error("Socket: No socket present!");
- return err;
- }
-
- // FIXME: gethostbyname()
- socketaddr.sin_addr.s_addr = inet_addr(ip);
- //inet_aton (ip, &socketaddr.sin_addr);
-
- err = connect(ssocket, (struct sockaddr*)&socketaddr, sizeof(socketaddr));
- if (err) {
- connected = false;
- info->error("Socket: connect() failed! %s", strerror(errno));
- return err;
- }
- // fprintf(stderr, "Socket connected\n");
- connected = true;
- return 0;
-}
-
-
-bool Socket::isConnected()
-{
- return connected;
-}
-
-bool Socket::hasError()
-{
- return err != 0;
-}
diff --git a/src/socket.h b/src/socket.h
deleted file mode 100644
index df2a133..0000000
--- a/src/socket.h
+++ /dev/null
@@ -1,61 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/***************************************************************************
- * socket.h
- *
- * Mon Nov 8 10:49:33 CET 2004
- * Copyright 2004 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.
- */
-#include "config.h"
-#ifndef __MIAVLIB_SOCKET_H__
-#define __MIAVLIB_SOCKET_H__
-
-#include <stdio.h>
-#include <string.h>
-
-#include <unistd.h>
-#include <netinet/in.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <arpa/inet.h>
-
-#include "info.h"
-
-class Socket {
-public:
- Socket(Info *ginfo);
- Socket(u_short port, Info *ginfo);
- ~Socket();
- Socket slisten();
- int sconnect(char *ip);
- bool isConnected();
- bool hasError();
-
- struct sockaddr_in socketaddr;
- int ssocket;
- bool connected;
-
-private:
- Info *info;
- int err;
-};
-
-#endif/*__SOCKET_H__*/
diff --git a/src/thread.cc b/src/thread.cc
deleted file mode 100644
index 147cf00..0000000
--- a/src/thread.cc
+++ /dev/null
@@ -1,56 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/***************************************************************************
- * thread.cc
- *
- * Sun Oct 31 12:12:20 CET 2004
- * Copyright 2004 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.
- */
-#include <config.h>
-
-#include "thread.h"
-#include <stdio.h>
-
-static void* thread_run(void *data) {
- Thread *t = (Thread*)data;
- t->thread_main();
- return NULL;
-}
-
-Thread::Thread()
-{
-}
-
-Thread::~Thread()
-{
-}
-
-void Thread::run()
-{
- pthread_attr_init(&attr);
-
- pthread_create(&tid, &attr, thread_run, this);
-}
-
-void Thread::wait_stop()
-{
- pthread_join(tid, NULL);
-}
diff --git a/src/thread.h b/src/thread.h
deleted file mode 100644
index 3d58d74..0000000
--- a/src/thread.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/***************************************************************************
- * thread.h
- *
- * Sun Oct 31 12:12:20 CET 2004
- * Copyright 2004 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.
- */
-#include "config.h"
-#ifndef __THREAD_H__
-#define __THREAD_H__
-
-#include <pthread.h>
-#include <semaphore.h>
-
-class Thread {
-public:
- Thread();
- virtual ~Thread();
-
- void run();
- void wait_stop();
-
- virtual void thread_main() = 0;
-
-private:
- pthread_attr_t attr;
- pthread_t tid;
-};
-
-#endif/*__THREAD_H__*/
diff --git a/src/threadsafe_queue.cc b/src/threadsafe_queue.cc
deleted file mode 100644
index 89f2d6a..0000000
--- a/src/threadsafe_queue.cc
+++ /dev/null
@@ -1,44 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/***************************************************************************
- * threadsafe_queue.cc
- *
- * Tue Sep 27 14:43:45 CEST 2005
- * Copyright 2005 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 "threadsafe_queue.h"
-/*
-template <typename T>
-ThreadSafeQueue<T>::ThreadSafeQueue()
-{
- pthread_mutex_init (&mutex, NULL);
- sem_init(&semaphore, 0, 0);
-}
-
-template <typename T>
-ThreadSafeQueue<T>::~ThreadSafeQueue()
-{
- pthread_mutex_destroy(&mutex);
- sem_destroy(&semaphore);
-}
-
-*/
diff --git a/src/threadsafe_queue.h b/src/threadsafe_queue.h
deleted file mode 100644
index b6d5725..0000000
--- a/src/threadsafe_queue.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/***************************************************************************
- * threadsafe_queue.h
- *
- * Tue Sep 27 14:01:01 CEST 2005
- * Copyright 2005 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_THREADSAFE_QUEUE_H__
-#define __MIAV_THREADSAFE_QUEUE_H__
-
-#include "mutex.h"
-#include "semaphore.h"
-
-template <typename T>
-class ThreadSafeQueue {
-public:
- ThreadSafeQueue() {
- // pthread_mutex_init (&mutex, NULL);
- // sem_init(&semaphore, 0, 0);
- }
-
- virtual ~ThreadSafeQueue() {
- // pthread_mutex_destroy(&mutex);
- //sem_destroy(&semaphore);
- }
-
- virtual void push(T t) = 0;
- virtual T pop() = 0;
- virtual int size() = 0;
-
-protected:
- // pthread_mutex_t mutex;
- Mutex mutex;
- //sem_t semaphore;
- Semaphore semaphore;
-};
-
-#endif/*__MIAV_THREADSAFE_QUEUE_H__*/
diff --git a/src/threadsafe_queue_fifo.cc b/src/threadsafe_queue_fifo.cc
deleted file mode 100644
index 6dbcb67..0000000
--- a/src/threadsafe_queue_fifo.cc
+++ /dev/null
@@ -1,70 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/***************************************************************************
- * threadsafe_queue_fifo.cc
- *
- * Tue Sep 27 14:01:10 CEST 2005
- * Copyright 2005 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 "threadsafe_queue_fifo.h"
-
-ThreadSafeQueueFIFO::ThreadSafeQueueFIFO()
-{
-}
-
-ThreadSafeQueueFIFO::~ThreadSafeQueueFIFO()
-{
-}
-
-void ThreadSafeQueueFIFO::push(FrameVector *framevector)
-{
- mutex.lock();
- queue.push(framevector);
- mutex.unlock();
-
- semaphore.post();
-}
-
-FrameVector *ThreadSafeQueueFIFO::pop()
-{
- semaphore.wait();
-
- FrameVector *framevector;
-
- mutex.lock();
- framevector = queue.front();
- queue.pop();
- mutex.unlock();
-
- return framevector;
-}
-
-int ThreadSafeQueueFIFO::size()
-{
- int sz;
-
- mutex.lock();
- sz = queue.size();
- mutex.unlock();
-
- return sz;
-}
diff --git a/src/threadsafe_queue_fifo.h b/src/threadsafe_queue_fifo.h
deleted file mode 100644
index ee3ac3b..0000000
--- a/src/threadsafe_queue_fifo.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/***************************************************************************
- * threadsafe_queue_fifo.h
- *
- * Tue Sep 27 14:01:10 CEST 2005
- * Copyright 2005 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_THREADSAFE_QUEUE_FIFO_H__
-#define __MIAV_THREADSAFE_QUEUE_FIFO_H__
-
-#include "threadsafe_queue.h"
-
-#include "frame.h"
-
-#include <queue>
-
-class ThreadSafeQueueFIFO: public ThreadSafeQueue<FrameVector*> {
-public:
- ThreadSafeQueueFIFO();
- ~ThreadSafeQueueFIFO();
-
- void push(FrameVector* framevector);
- FrameVector* pop();
- int size();
-
-private:
- std::queue<FrameVector*> queue;
-};
-
-#endif/*__MIAV_THREADSAFE_QUEUE_FIFO_H__*/
diff --git a/src/threadsafe_queue_priority.cc b/src/threadsafe_queue_priority.cc
deleted file mode 100644
index df7ae8c..0000000
--- a/src/threadsafe_queue_priority.cc
+++ /dev/null
@@ -1,101 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/***************************************************************************
- * threadsafe_queue_priority.cc
- *
- * Tue Sep 27 14:01:24 CEST 2005
- * Copyright 2005 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 "threadsafe_queue_priority.h"
-
-#include "util.h"
-
-ThreadSafeQueuePriority::ThreadSafeQueuePriority(Info* i, unsigned int number)
- // : ThreadSafeQueue< Frame* >()
-{
- info = i;
- framenumber = number;
-}
-
-ThreadSafeQueuePriority::~ThreadSafeQueuePriority()
-{
-}
-
-void ThreadSafeQueuePriority::push(Frame *frame)
-{
- // Lock mutex
- // pthread_mutex_lock( &mutex );
- mutex.lock();
- queue.push(frame);
- // pthread_mutex_unlock( &mutex );
- mutex.unlock();
- // Unlock mutex
-
- // sem_post(&semaphore);
- semaphore.post();
-}
-
-Frame *ThreadSafeQueuePriority::pop()
-{
- semaphore.wait();
- // sem_wait(&semaphore);
-
- Frame *tmpframe = NULL;
- Frame *frame = NULL;
-
- while( frame == NULL ) {
- // Lock mutex
- // pthread_mutex_lock( &mutex );
- mutex.lock();
-
- tmpframe = queue.top();
-
- if(tmpframe && tmpframe->number == framenumber ) {
- queue.pop();
- frame = tmpframe;
- framenumber++;
- }
-
- // pthread_mutex_unlock( &mutex );
- mutex.unlock();
- // Unlock mutex
-
- if(frame == NULL) sleep_0_2_frame();
- }
-
- return frame;
-}
-
-int ThreadSafeQueuePriority::size()
-{
- int sz;
-
- // Lock mutex
- // pthread_mutex_lock( &mutex );
- mutex.lock();
- sz = queue.size();
- // pthread_mutex_unlock( &mutex );
- mutex.unlock();
- // Unlock mutex
-
- return sz;
-}
diff --git a/src/threadsafe_queue_priority.h b/src/threadsafe_queue_priority.h
deleted file mode 100644
index 8d3cdf1..0000000
--- a/src/threadsafe_queue_priority.h
+++ /dev/null
@@ -1,64 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/***************************************************************************
- * threadsafe_queue_priority.h
- *
- * Tue Sep 27 14:01:24 CEST 2005
- * Copyright 2005 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_THREADSAFE_QUEUE_PRIORITY_H__
-#define __MIAV_THREADSAFE_QUEUE_PRIORITY_H__
-
-#include "threadsafe_queue.h"
-
-#include "frame.h"
-
-#include <queue>
-#include <functional>
-
-#include "info.h"
-
-// Method for use, when comparing Frames in priority queue.
-template <typename T>
-struct priority : std::binary_function<T, T, bool> {
- bool operator() (const T& a, const T& b) const {
- return ((Frame*)a)->number > ((Frame*)b)->number;
- }
-};
-
-class ThreadSafeQueuePriority: public ThreadSafeQueue< Frame* > {
-public:
- ThreadSafeQueuePriority(Info *info, unsigned int framenumber = 0);
- ~ThreadSafeQueuePriority();
-
- void push(Frame *frame);
- Frame *pop();
- int size();
-
-private:
- Info* info;
-
- unsigned int framenumber;
- std::priority_queue< Frame*, std::vector<Frame*>, priority<Frame*> > queue;
-};
-
-#endif/*__MIAV_THREADSAFE_QUEUE_PRIORITY_H__*/
diff --git a/src/util.cc b/src/util.cc
deleted file mode 100644
index 11f1402..0000000
--- a/src/util.cc
+++ /dev/null
@@ -1,95 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/***************************************************************************
- * util.cc
- *
- * Sun Oct 31 12:12:20 CET 2004
- * Copyright 2004 Bent Bisballe
- * deva@aasimon.org
- ****************************************************************************/
-
-/*
- * Originally from:
- * RTVideoRec Realtime video recoder and encoder for Linux
- *
- * Copyright (C) 2004 B. Stultiens
- */
-
-/*
- * 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 <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <assert.h>
-
-// For nanosleep
-#include <time.h>
-
-#include "util.h"
-
-void *xmalloc(size_t s)
-{
- void *p;
- assert(s > 0);
-
- p = malloc(s);
- if(!p) {
- fprintf(stderr, "Out of memory in xmalloc\n");
- exit(1);
- }
- memset(p, 0, s);
- return p;
-}
-
-void *xrealloc(void *b, size_t s)
-{
- void *p;
- assert(s > 0);
-
- if(!b) return xmalloc(s);
-
- p = realloc(b, s);
- if(!p) {
- fprintf(stderr, "Out of memory in xrealloc\n");
- exit(1);
- }
- return p;
-}
-
-void sleep_1_frame()
-{
- // Sleep 1/25th of a second
-
- struct timespec ts;
-
- ts.tv_sec = 0;
- ts.tv_nsec = 1000000000L / 25L; // 1000ms / 25
- nanosleep(&ts, NULL);
-}
-
-void sleep_0_2_frame()
-{
- // Sleep 1/25th of a second
-
- struct timespec ts;
-
- ts.tv_sec = 0;
- ts.tv_nsec = 8000000L;//1000000000L / 25L * 0.2; // 1000ms / 25
- nanosleep(&ts, NULL);
-}
diff --git a/src/util.h b/src/util.h
deleted file mode 100644
index ef21e06..0000000
--- a/src/util.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/***************************************************************************
- * util.h
- *
- * Mon Nov 8 10:49:33 CET 2004
- * Copyright 2004 Bent Bisballe
- * deva@aasimon.org
- ****************************************************************************/
-
-/*
- * Originally from:
- * RTVideoRec Realtime video recoder and encoder for Linux
- *
- * Copyright (C) 2004 B. Stultiens
- */
-
-/*
- * 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 __RTVIDEOREC_UTIL_H
-#define __RTVIDEOREC_UTIL_H
-
-#include <stdio.h>
-//#include <stdlib.h>
-
-//#ifdef __cplusplus
-//extern "C" {
-//#endif
-
-void *xmalloc(size_t s);
-void *xrealloc(void *b, size_t s);
-
-void sleep_1_frame();
-void sleep_0_2_frame();
-//#ifdef __cplusplus
-//}
-//#endif
-
-#endif
diff --git a/src/videowidget.cc b/src/videowidget.cc
deleted file mode 100644
index 61b5c8e..0000000
--- a/src/videowidget.cc
+++ /dev/null
@@ -1,76 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/***************************************************************************
- * videowidget.cc
- *
- * Fri Sep 3 14:36:37 2004
- * Copyright 2004 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.
- */
-#include <config.h>
-
-#ifdef USE_GUI
-
-#include "videowidget.h"
-
-#include "miav_config.h"
-
-VideoWidget::VideoWidget(QWidget *p, Camera *c, QWidget* old) : QWidget(p, "")
-{
- camera = c;
- parent = p;
-
- oldWindow = old;
-
- // A welltested hack to force SDL to draw in the QWidget
- QString ids;
- setenv("SDL_WINDOWID", ids.setNum(winId()), 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()), 1);
- camera->resize(oldWindow->width(), oldWindow->height(), false);
- destroy();
- } else { // We are a nested window
- // first delete old instance (if any)
- if(fs) delete fs;
- fs = new VideoWidget(NULL, camera, this);
- fs->showFullScreen();
- fs->setFixedWidth(config->readInt("pixel_width"));
- fs->setFixedHeight(config->readInt("pixel_height"));
- camera->resize(fs->width(), fs->height(), true);
- }
-}
-
-#endif /* USE_GUI */
diff --git a/src/videowidget.h b/src/videowidget.h
deleted file mode 100644
index b9ac9d6..0000000
--- a/src/videowidget.h
+++ /dev/null
@@ -1,57 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/***************************************************************************
- * videowidget.h
- *
- * Fri Sep 3 14:36:46 2004
- * Copyright 2004 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.
- */
-#include "config.h"
-#ifdef USE_GUI
-
-#ifndef __VIDEOWIDGET_H__
-#define __VIDEOWIDGET_H__
-
-#include <qwidget.h>
-#include <qpixmap.h>
-
-#include "camera.h"
-
-class VideoWidget : public QWidget {
-Q_OBJECT
-public:
- VideoWidget(QWidget *parent, Camera *camera, QWidget *old = NULL);
- ~VideoWidget();
- QPixmap getScreenshot();
- void mouseReleaseEvent(QMouseEvent *event);
-
-private:
- Camera *camera;
-
- QWidget *parent;
-
- // Reassign SDL to this when closing (if non-NULL)
- QWidget *oldWindow;
-};
-
-#endif /* __VIDEOWIDGET_H__ */
-
-#endif /* USE_GUI */
diff --git a/src/yuv_draw.cc b/src/yuv_draw.cc
deleted file mode 100644
index 06aff5c..0000000
--- a/src/yuv_draw.cc
+++ /dev/null
@@ -1,242 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/***************************************************************************
- * yuv_draw.cc
- *
- * Thu Sep 22 12:35:28 CEST 2005
- * Copyright 2005 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"
-#ifdef USE_GUI
-#include "yuv_draw.h"
-
-// for miav_app
-#include "miav.h"
-
-//#include "font.h"
-#include <string.h>
-
-#define TEXT_MARGIN 10
-
-#include "mainwindow.h"
-static QImage *loadIcon( char *name, int height )
-{
- QImage scaled;
- QImage *img;
-
- img = new QImage();
- img->load( name );
-
- int h = height;
- int w = (int)((float)img->width() / (float)(img->height() / (float)h));
-
- scaled = img->smoothScale(w, h);
- delete img;
- img = new QImage(scaled);
-
- return img;
-}
-
-
-YUVDraw::YUVDraw()
-{
- overlay = NULL;
-
- // One line of text!
- top_pixmap = new QPixmap(720 - TEXT_MARGIN, 20);
- bottom_pixmap = new QPixmap(720 - TEXT_MARGIN, 20);
-
- for(int x = 0; x < 720 - TEXT_MARGIN; x++) {
- for(int y = 0; y < 20; y++) {
- top_grey[x][y] = 255;
- }
- }
-
- for(int x = 0; x < 720 - TEXT_MARGIN; x++) {
- for(int y = 0; y < 20; y++) {
- bottom_grey[x][y] = 255;
- }
- }
-
- img_muted = loadIcon(PIXMAP_MUTE, ICON_HEIGHT);
- img_unmuted = loadIcon(PIXMAP_UNMUTE, ICON_HEIGHT);
-}
-
-YUVDraw::~YUVDraw()
-{
- delete top_pixmap;
- delete bottom_pixmap;
-}
-
-void YUVDraw::setOverlay(SDL_Overlay* o)
-{
- overlay = o;
-}
-
-void YUVDraw::addPixel(int x, int y, int val)
-{
- if(overlay->w < x) return; // Out of range
- if(overlay->h < y) return; // Out of range
-
- Uint8 **pixels = overlay->pixels;
- Uint16 *pitches = overlay->pitches;
-
- Uint8* pixel = &pixels[0][(2 * x) + (y * pitches[0])];
-
- if(val > 0) *pixel = (255<*pixel+val?255:*pixel+val);
- else *pixel = (0>*pixel+val?0:*pixel+val);
-}
-
-
-void YUVDraw::setTopText(char* text)
-{
- miav_app->lock();
- top_pixmap->fill();
-
- QPainter painter;
- painter.begin(top_pixmap);
- painter.setFont( QFont( "Arial", 12, QFont::Bold ) );
- painter.setPen( Qt::black );
- painter.drawText(64, 15, text);
- painter.end();
-
- QImage image = top_pixmap->convertToImage();
-
- for(int x = 64; x < 720 - TEXT_MARGIN; x++) {
- for(int y = 0; y < 20; y++) {
- top_grey[x][y] = qGray(image.pixel(x, y));
- }
- }
- miav_app->unlock();
-}
-
-void YUVDraw::setBottomText(char* text)
-{
- miav_app->lock();
- bottom_pixmap->fill();
-
- QPainter painter;
- painter.begin(bottom_pixmap);
- painter.setFont( QFont( "Arial", 12, QFont::Bold ) );
- painter.setPen( Qt::black );
- painter.drawText(0, 15, text);
- painter.end();
-
- QImage image = bottom_pixmap->convertToImage();
-
- for(int x = 0; x < 720 - TEXT_MARGIN; x++) {
- for(int y = 0; y < 20; y++) {
- bottom_grey[x][y] = qGray(image.pixel(x, y));
- }
- }
- miav_app->unlock();
-}
-
-void YUVDraw::draw()
-{
- for(int x = 0; x < 720 - TEXT_MARGIN; x++) {
- for(int y = 0; y < 20; y++) {
- if(top_grey[x][y] != 255) addPixel(x + TEXT_MARGIN, y + TEXT_MARGIN, 255 - top_grey[x][y]);
- }
- }
-
- for(int x = 0; x < 720 - TEXT_MARGIN; x++) {
- for(int y = 0; y < 20; y++) {
- if(bottom_grey[x][y] != 255) addPixel(x + TEXT_MARGIN, (556 - TEXT_MARGIN)+ y, 255 - bottom_grey[x][y]);
- }
- }
-}
-
-void YUVDraw::mute(bool muted)
-{
- int xoffset = 0;
- int yoffset = 0;
-
- QImage *img;
- if(muted) img = img_muted;
- else img = img_unmuted;
-
- // Swicth the bool and draw an mute/unmute symbol
- float alpha, color;
-
- for(int x = 0; x < ICON_WIDTH; x++) {
- for(int y = 0; y < ICON_HEIGHT; y++) {
- alpha = ((float)qAlpha(img->pixel(x, y)) / 255.0);
- color = (float)qGray(img->pixel(x, y)) * alpha;
- addPixel(x + xoffset, y + yoffset, (unsigned char)color);
- }
- }
-}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-/*
-void YUVDraw::setText(int xoffset, int yoffset, char* text, int val)
-{
- for(unsigned int i = 0; i < strlen(text); i++) {
- for(int x = 0; x < FONT_WIDTH; x++) {
- for(int y = 0; y < FONT_HEIGHT; y++) {
- unsigned char col = palette[letter[(int)text[i]][y][x]];
- if(col) col += val;
- addPixel(i * FONT_WIDTH + x + xoffset, y + yoffset, col);
- }
- }
- }
-}
-*/
-
-/*
-typedef struct{
- Uint32 format;
- int w, h;
- int planes;
- Uint16 *pitches;
- Uint8 **pixels;
- Uint32 hw_overlay:1;
-} SDL_Overlay;
-*/
-
-#endif/*USE_GUI*/
diff --git a/src/yuv_draw.h b/src/yuv_draw.h
deleted file mode 100644
index 62f7d02..0000000
--- a/src/yuv_draw.h
+++ /dev/null
@@ -1,70 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/***************************************************************************
- * yuv_draw.h
- *
- * Thu Sep 22 12:35:28 CEST 2005
- * Copyright 2005 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"
-#ifdef USE_GUI
-#ifndef __MIAV_YUV_DRAW_H__
-#define __MIAV_YUV_DRAW_H__
-
-#include <SDL/SDL.h>
-
-#include <qpixmap.h>
-#include <qimage.h>
-#include <qpainter.h>
-
-#define ICON_HEIGHT 48
-#define ICON_WIDTH 48
-
-class YUVDraw {
-public:
- YUVDraw();
- ~YUVDraw();
-
- void setOverlay(SDL_Overlay* overlay);
-
- void addPixel(int x, int y, int val);
-
- void setTopText(char* text);
- void setBottomText(char* text);
- void mute(bool muted);
-
- void draw();
-
-private:
- SDL_Overlay* overlay;
-
- QPixmap *top_pixmap;
- unsigned char top_grey[720][20];
-
- QPixmap *bottom_pixmap;
- unsigned char bottom_grey[720][20];
-
- QImage *img_muted;
- QImage *img_unmuted;
-};
-
-#endif/*__MIAV_YUV_DRAW_H__*/
-#endif/*USE_GUI*/