summaryrefslogtreecommitdiff
path: root/server/mov_encoder_writer.cc
diff options
context:
space:
mode:
Diffstat (limited to 'server/mov_encoder_writer.cc')
-rw-r--r--server/mov_encoder_writer.cc140
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);
+}