diff options
| -rw-r--r-- | ChangeLog | 2 | ||||
| -rw-r--r-- | configure.in | 96 | ||||
| -rw-r--r-- | src/encoder.cc | 2 | ||||
| -rw-r--r-- | src/libmplex_wrapper.cc | 3 | ||||
| -rw-r--r-- | src/libmplex_wrapper.h | 3 | ||||
| -rw-r--r-- | src/mainwindow.cc | 19 | ||||
| -rw-r--r-- | src/mainwindow.h | 3 | ||||
| -rw-r--r-- | src/mov_encoder_writer.cc | 16 | ||||
| -rw-r--r-- | src/multiplexer.cc | 13 | ||||
| -rw-r--r-- | src/server.cc | 2 | 
10 files changed, 95 insertions, 64 deletions
| @@ -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 );      } | 
