diff options
| author | deva <deva> | 2006-03-04 14:53:17 +0000 | 
|---|---|---|
| committer | deva <deva> | 2006-03-04 14:53:17 +0000 | 
| commit | f02095ee5ceb78f1781a9e250693b8866ca42181 (patch) | |
| tree | 7953c6b5f004f31ee9b340d7cdff5e85890594fc /server/mov_encoder_writer.cc | |
| parent | 71c713dce2b5128862b293aa7fcc1d7ee89ffaf1 (diff) | |
*** empty log message ***
Diffstat (limited to 'server/mov_encoder_writer.cc')
| -rw-r--r-- | server/mov_encoder_writer.cc | 140 | 
1 files changed, 140 insertions, 0 deletions
| diff --git a/server/mov_encoder_writer.cc b/server/mov_encoder_writer.cc new file mode 100644 index 0000000..1773527 --- /dev/null +++ b/server/mov_encoder_writer.cc @@ -0,0 +1,140 @@ +/* -*- 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); +} | 
