summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog2
-rw-r--r--configure.in96
-rw-r--r--src/encoder.cc2
-rw-r--r--src/libmplex_wrapper.cc3
-rw-r--r--src/libmplex_wrapper.h3
-rw-r--r--src/mainwindow.cc19
-rw-r--r--src/mainwindow.h3
-rw-r--r--src/mov_encoder_writer.cc16
-rw-r--r--src/multiplexer.cc13
-rw-r--r--src/server.cc2
10 files changed, 95 insertions, 64 deletions
diff --git a/ChangeLog b/ChangeLog
index 78cb714..153086a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -15,8 +15,10 @@ New Features:
- When muted, the audio signal is overwritten with a lowvolume 440Hz signal.
- The number of thumbnails shown are now calculated (no longer fixed to 3)
- Added the mplex2 library as a dependency to the server.
+ - Removed mplex2 library as a dependency to the server!!! (It didn't work as expected)
Bug Fixes:
+ - New audio/video interleave algorithm... should fix sync (blip) problems
- Font size of name label adjusted in mainwindow.
=======================================
diff --git a/configure.in b/configure.in
index 9ba1c64..2d5721a 100644
--- a/configure.in
+++ b/configure.in
@@ -70,54 +70,54 @@ dnl ======================
AC_CHECK_HEADER(lame/lame.h, , AC_MSG_ERROR([*** libLAME (libmp3lame) include files not found!]))
AC_CHECK_LIB(mp3lame, lame_init, , AC_MSG_ERROR([*** libLAME (libmp3lame) not found!]))
-dnl ======================
-dnl Check for mplex library
-dnl ======================
-PKG_CHECK_MODULES(MPLEX, mjpegtools >= 1.6.1.93, [
- dnl switch over to c++ to test things
- AC_LANG_CPLUSPLUS
- OLD_CPPFLAGS="$CPPFLAGS"
- CPPFLAGS="$CPPFLAGS $MPLEX_CFLAGS"
- AC_CHECK_HEADER(interact.hpp, [
- MPLEX_LIBS="$MPLEX_LIBS -lmplex2 -lm"
- OLD_LIBS="$LIBS"
- LIBS="$LIBS $MPLEX_LIBS"
- AC_MSG_CHECKING([for valid mplex objects])
- AC_TRY_RUN([
-#include <interact.hpp>
-#include <outputstrm.hpp>
-#include <multiplexor.hpp>
-
-int main (int argc, char *argv[])
-{
- class TestOutputStream : public OutputStream {
- public:
- TestOutputStream () : OutputStream () { }
- void Write (uint8_t *a, unsigned int b) { }
- void NextSegment () { }
- off_t SegmentSize () { }
- void Close () { }
- int Open () { }
- };
- MultiplexJob *job = new MultiplexJob ();
- vector<IBitStream *> inputs;
- job->SetupInputStreams (inputs);
- TestOutputStream *out = new TestOutputStream ();
- Multiplexor *mux = new Multiplexor(*job, *out);
- return 0;
-}
- ],[
- HAVE_MPLEX="yes"
- AC_SUBST(MPLEX_CFLAGS)
- AC_SUBST(MPLEX_LIBS)
- AC_MSG_RESULT(yes)
- ], AC_MSG_RESULT(no))
- #LIBS="$OLD_LIBS"
- ])
- #CPPFLAGS="$OLD_CPPFLAGS"
- AC_LANG_C
- ], HAVE_MPLEX="no")
-AC_CHECK_LIB(mplex2, main, , AC_MSG_ERROR([*** libmplex2 not found (part of the mjpegtools package)!]))
+#dnl ======================
+#dnl Check for mplex library
+#dnl ======================
+#PKG_CHECK_MODULES(MPLEX, mjpegtools >= 1.6.1.93, [
+# dnl switch over to c++ to test things
+# AC_LANG_CPLUSPLUS
+# OLD_CPPFLAGS="$CPPFLAGS"
+# CPPFLAGS="$CPPFLAGS $MPLEX_CFLAGS"
+# AC_CHECK_HEADER(interact.hpp, [
+# MPLEX_LIBS="$MPLEX_LIBS -lmplex2 -lm"
+# OLD_LIBS="$LIBS"
+# LIBS="$LIBS $MPLEX_LIBS"
+# AC_MSG_CHECKING([for valid mplex objects])
+# AC_TRY_RUN([
+##include <interact.hpp>
+##include <outputstrm.hpp>
+##include <multiplexor.hpp>
+#
+#int main (int argc, char *argv[])
+#{
+# class TestOutputStream : public OutputStream {
+# public:
+# TestOutputStream () : OutputStream () { }
+# void Write (uint8_t *a, unsigned int b) { }
+# void NextSegment () { }
+# off_t SegmentSize () { }
+# void Close () { }
+# int Open () { }
+# };
+# MultiplexJob *job = new MultiplexJob ();
+# vector<IBitStream *> inputs;
+# job->SetupInputStreams (inputs);
+# TestOutputStream *out = new TestOutputStream ();
+# Multiplexor *mux = new Multiplexor(*job, *out);
+# return 0;
+#}
+# ],[
+# HAVE_MPLEX="yes"
+# AC_SUBST(MPLEX_CFLAGS)
+# AC_SUBST(MPLEX_LIBS)
+# AC_MSG_RESULT(yes)
+# ], AC_MSG_RESULT(no))
+# #LIBS="$OLD_LIBS"
+# ])
+# #CPPFLAGS="$OLD_CPPFLAGS"
+# AC_LANG_C
+# ], HAVE_MPLEX="no")
+#AC_CHECK_LIB(mplex2, main, , AC_MSG_ERROR([*** libmplex2 not found (part of the mjpegtools package)!]))
AC_SUBST(CFLAGS)
AC_SUBST(CPPFLAGS)
diff --git a/src/encoder.cc b/src/encoder.cc
index eb8c444..e7b79bf 100644
--- a/src/encoder.cc
+++ b/src/encoder.cc
@@ -126,6 +126,8 @@ void Encoder::encode()
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;
diff --git a/src/libmplex_wrapper.cc b/src/libmplex_wrapper.cc
index a93b4a9..4164ffe 100644
--- a/src/libmplex_wrapper.cc
+++ b/src/libmplex_wrapper.cc
@@ -28,6 +28,8 @@
#include "libmplex_wrapper.h"
#include "miav_config.h"
+#ifdef WITH_LIBMPLEX
+
#include <mjpeg_types.h>
#include <mjpeg_logging.h>
#include <mpegconsts.h>
@@ -480,3 +482,4 @@ int main (int argc, char* argv[])
}
#endif/*LIBMPLEX_WRAPPER_TEST*/
+#endif/*WITH_LIBMPLEX*/
diff --git a/src/libmplex_wrapper.h b/src/libmplex_wrapper.h
index 8591563..1be71a1 100644
--- a/src/libmplex_wrapper.h
+++ b/src/libmplex_wrapper.h
@@ -28,6 +28,8 @@
#ifndef __MIAV_LIBMPLEX_WRAPPER_H__
#define __MIAV_LIBMPLEX_WRAPPER_H__
+#ifdef WITH_LIBMPLEX
+
#include "info.h"
#include "file.h"
#include "threadsafe_queue_priority.h"
@@ -48,5 +50,6 @@ private:
ThreadSafeQueuePriority *video_queue;
ThreadSafeQueuePriority *audio_queue;
};
+#endif/*WITH_LIBMPLEX*/
#endif/*__MIAV_LIBMPLEX_WRAPPER_H__*/
diff --git a/src/mainwindow.cc b/src/mainwindow.cc
index 279fab6..1454b2e 100644
--- a/src/mainwindow.cc
+++ b/src/mainwindow.cc
@@ -193,17 +193,22 @@ void MainWindow::createGui()
// QGridLayout *g2 = new QGridLayout(1, NUM_HISTORY, -1);
// QVBoxLayout *g2 = new QVBoxLayout(this);
// g0->addLayout(g2, 0, 1);
- gb->setInsideMargin(25);
+
+ gb->setInsideMargin(HISTORY_LIST_MARGIN);
+ gb->setInsideSpacing(HISTORY_LIST_SPACING);
gb->setFlat(true);
g0->addWidget(gb, 0, 1);
- int output_width = this->width() -
+ 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 = this->height() -
+ int output_height = resolution_h - // this->height() -
(int)(3 * BUTTON_HEIGHT * unit) -
g1->margin() * 5 -
g0->margin() * 3;
@@ -264,7 +269,9 @@ void MainWindow::createGui()
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)) / h;
+ 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++) {
@@ -288,7 +295,7 @@ void MainWindow::createGui()
lbl_recordtime->setFixedWidth((int)(BUTTON_WIDTH * unit) +
(gb->insideMargin() * 2) +
g1->margin() * 2 +
- g0->margin() * 2);
+ g0->margin() * 2 + 100);
status->addWidget(lbl_recordtime, 0, TRUE);
// About button
@@ -321,6 +328,7 @@ QPushButton *MainWindow::createButton(char *caption, QWidget *parent, int width,
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;
}
@@ -333,6 +341,7 @@ QLabel *MainWindow::createLabel(char *caption, int width, int height)
(int)(unit * height / 2),
(height>1)?QFont::Bold:QFont::Normal ) );
lbl->setFixedHeight((int)(unit * height));
+ // lbl->setFixedWidth((int)(unit * width));
return lbl;
}
diff --git a/src/mainwindow.h b/src/mainwindow.h
index 56a5312..e95933d 100644
--- a/src/mainwindow.h
+++ b/src/mainwindow.h
@@ -58,6 +58,9 @@ using namespace std;
#define BUTTON_WIDTH 8
#define BUTTON_HEIGHT 2
+#define HISTORY_LIST_MARGIN 25
+#define HISTORY_LIST_SPACING 5
+
/**
* Textstrings
*/
diff --git a/src/mov_encoder_writer.cc b/src/mov_encoder_writer.cc
index e831b9e..1773527 100644
--- a/src/mov_encoder_writer.cc
+++ b/src/mov_encoder_writer.cc
@@ -117,19 +117,19 @@ void MovEncoderWriter::thread_main()
{
info->info("MovEncoderWriter::run");
- Multiplexer multiplexer(file, multicast,
- info, &running,
- video_queue,
- audio_queue);
- multiplexer.multiplex();
-
- /*
+#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");
}
diff --git a/src/multiplexer.cc b/src/multiplexer.cc
index 0021c03..7a8b095 100644
--- a/src/multiplexer.cc
+++ b/src/multiplexer.cc
@@ -301,13 +301,22 @@ 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] + 10) {
+ 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...
diff --git a/src/server.cc b/src/server.cc
index fc06a1d..34aac7b 100644
--- a/src/server.cc
+++ b/src/server.cc
@@ -100,7 +100,7 @@ void newConnection(Socket *socket, Info *info)
}
}
- if(h.header.h_data.savestate) {
+ if(h.header.h_data.savestate != NO_CHANGE) {
savestate = h.header.h_data.savestate;
info->info("GOT SAVESTATE FROM NETWORK: %d", savestate );
}