summaryrefslogtreecommitdiff
path: root/src/multiplexer.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/multiplexer.h')
-rw-r--r--src/multiplexer.h118
1 files changed, 118 insertions, 0 deletions
diff --git a/src/multiplexer.h b/src/multiplexer.h
new file mode 100644
index 0000000..25c89e0
--- /dev/null
+++ b/src/multiplexer.h
@@ -0,0 +1,118 @@
+/* -*- 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 "info.h"
+#include "frame.h"
+
+/**
+ * Multiplexer configuration
+ */
+// How many packets should we put in one pack
+#define NUMBER_OF_PACKETS_IN_A_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 2048
+
+/**
+ * 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, Info *info, volatile bool *running,
+ FramePriorityQueue *v_q, pthread_mutex_t *v_m, sem_t *v_s,
+ FramePriorityQueue *a_q, pthread_mutex_t *a_m, sem_t *a_s);
+ ~Multiplexer();
+
+ void multiplex();
+
+private:
+ double written[NUM_TYPES];
+
+ void iso11172_stream();
+ void pack();
+ void system_header();
+ void packet();
+ void 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;
+
+ int read_stream(char *buf, unsigned int size, StreamType type);
+
+ FramePriorityQueue *queue[NUM_TYPES];
+ pthread_mutex_t *mutex[NUM_TYPES];
+ sem_t *sem[NUM_TYPES];
+
+ Frame *frame[NUM_TYPES];
+ unsigned int frame_number[NUM_TYPES];
+ unsigned int read[NUM_TYPES];
+
+ File *file;
+ Info *info;
+ volatile bool *running;
+
+ // Audio Header
+ bool audio_header_read;
+};
+
+#endif/*__MIAV_MULTIPLEXER_H__*/