summaryrefslogtreecommitdiffstats
path: root/gst/mpeg1sys/buffer.h
diff options
context:
space:
mode:
Diffstat (limited to 'gst/mpeg1sys/buffer.h')
-rw-r--r--gst/mpeg1sys/buffer.h141
1 files changed, 141 insertions, 0 deletions
diff --git a/gst/mpeg1sys/buffer.h b/gst/mpeg1sys/buffer.h
new file mode 100644
index 00000000..f3eba4f7
--- /dev/null
+++ b/gst/mpeg1sys/buffer.h
@@ -0,0 +1,141 @@
+/* Gnome-Streamer
+ * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+
+#ifndef __BUFFER_H__
+#define __BUFFER_H__
+
+#include <gst/gst.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#define MPEG1MUX_BUFFER_QUEUED(mb) (g_list_length((mb)->timecode_list))
+#define MPEG1MUX_BUFFER_SPACE(mb) ((mb)->length)
+#define MPEG1MUX_BUFFER_DATA(mb) ((mb)->buffer)
+#define MPEG1MUX_BUFFER_TYPE(mb) ((mb)->buffer)
+#define MPEG1MUX_BUFFER_FIRST_TIMECODE(mb) (g_list_first((mb)->timecode_list)->data)
+
+#define BUFFER_TYPE_VIDEO 1
+#define BUFFER_TYPE_AUDIO 2
+
+#define FRAME_TYPE_IFRAME 1
+#define FRAME_TYPE_BFRAME 2
+#define FRAME_TYPE_PFRAME 3
+#define FRAME_TYPE_AUDIO 4
+
+typedef struct _Mpeg1MuxBuffer Mpeg1MuxBuffer;
+typedef struct _Mpeg1MuxTimecode Mpeg1MuxTimecode;
+
+typedef struct video_struc /* Informationen ueber Video Stream */
+{
+ unsigned int stream_length ;
+ unsigned int num_sequence ;
+ unsigned int num_seq_end ;
+ unsigned int num_pictures ;
+ unsigned int num_groups ;
+ unsigned int num_frames[4] ;
+ unsigned int avg_frames[4] ;
+
+ unsigned int horizontal_size;
+ unsigned int vertical_size ;
+ unsigned int aspect_ratio ;
+ unsigned int picture_rate ;
+ unsigned int bit_rate ;
+ unsigned int comp_bit_rate ;
+ unsigned int vbv_buffer_size;
+ unsigned int CSPF ;
+
+ guint64 PTS;
+ guint64 DTS;
+
+ guint64 current_PTS;
+ guint64 current_DTS;
+ guchar current_type;
+
+ double secs_per_frame;
+ gulong group_order, decoding_order;
+} Video_struc;
+
+typedef struct audio_struc /* Informationen ueber Audio Stream */
+{
+ unsigned int stream_length ;
+ unsigned int num_syncword ;
+ unsigned int num_frames [2] ;
+ unsigned int framesize ;
+ unsigned int layer ;
+ unsigned int protection ;
+ unsigned int bit_rate ;
+ unsigned int frequency ;
+ unsigned int mode ;
+ unsigned int mode_extension ;
+ unsigned int copyright ;
+ unsigned int original_copy ;
+ unsigned int emphasis ;
+
+ guint64 PTS;
+
+ guint64 current_PTS;
+
+ double samples_per_second;
+ gulong decoding_order;
+} Audio_struc;
+
+struct _Mpeg1MuxTimecode {
+ gulong length;
+ gulong original_length;
+ guchar frame_type;
+ guint64 PTS;
+ guint64 DTS;
+};
+
+struct _Mpeg1MuxBuffer {
+ unsigned char *buffer;
+ gulong length;
+ gulong base;
+ gulong scan_pos;
+ gulong last_pos;
+ gulong current_start;
+ guchar buffer_type;
+ guchar stream_id;
+ gboolean new_frame;
+ guint64 next_frame_time;
+
+ union {
+ Video_struc video;
+ Audio_struc audio;
+ } info;
+
+ GList *timecode_list;
+ GList *queued_list;
+};
+
+Mpeg1MuxBuffer *mpeg1mux_buffer_new(guchar type, guchar id);
+
+void mpeg1mux_buffer_queue(Mpeg1MuxBuffer *mb, GstBuffer *buf);
+void mpeg1mux_buffer_shrink(Mpeg1MuxBuffer *mb, gulong size);
+gulong mpeg1mux_buffer_update_queued(Mpeg1MuxBuffer *mb, guint64 scr);
+
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* __BUFFER_H__ */