diff options
Diffstat (limited to 'src')
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*/ |