00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef _XLV_MUX_H
00023 #define _XLV_MUX_H
00024
00025 #include <glib.h>
00026 #include "xlv_plugin_mgr.h"
00027 #include "xlv_session.h"
00028 #include "xlv_codec.h"
00029 #include "xlv_audio.h"
00030 #include "xlv_video.h"
00031
00032 #define XLV_MUXER_BASE_CMD 600
00033
00034 #define XLV_MUXER_NEW_STREAM (XLV_MUXER_BASE_CMD+0)
00035 # define XLV_MUXER_AUDIO_STREAM 0
00036 # define XLV_MUXER_VIDEO_STREAM 1
00037 # define XLV_MUXER_EXT_STREAM 2
00038 # define XLV_MUXER_SPU_STREAM 3
00039
00040 typedef struct _XLV_MuxerStream {
00041 XLV_Stream *m_stream;
00042 guint8 m_stream_type;
00043 const gchar *m_encoding;
00044 guint32 m_codec_data_len;
00045 union {
00046 XLV_PCMData *m_audio_data;
00047 XLV_VideoData *m_video_data;
00048 gpointer m_generic_data;
00049 } m_codec_data;
00050 } XLV_MuxerStream;
00051
00052 #define XLV_MUXER_SET_TIMESPEC (XLV_MUXER_BASE_CMD+1)
00053 #define XLV_MUXER_SET_MODE (XLV_MUXER_BASE_CMD+2)
00054 # define XLV_MUXER_SEEKING 0
00055 # define XLV_MUXER_STREAMING 1
00056 #define XLV_MUXER_WRITE_HEADERS (XLV_MUXER_BASE_CMD+3)
00057 #define XLV_MUXER_INTERLEAVE (XLV_MUXER_BASE_CMD+4)
00058 #define XLV_MUXER_NEED_FRAME (XLV_MUXER_BASE_CMD+5)
00059
00060 typedef struct _XLV_MuxerInterleave {
00061 guint8 m_interleave_mode;
00065 # define XLV_MUXER_INTER_SEQUENTIAL 0
00066
00069 # define XLV_MUXER_INTER_PARALLEL 1
00070
00072 # define XLV_MUXER_INTER_ASAP 2
00073
00076 # define XLV_MUXER_INTER_AUTO 3
00077
00079 guint32 m_interleave_time;
00080
00081 guint16 m_interleave_flags;
00082 # define XLV_MUXER_INTER_TIME_MASK 1
00083 # define XLV_MUXER_INTER_TIME_DELTA 0
00084 # define XLV_MUXER_INTER_TIME_ABSOLUTE 1
00085 } XLV_MuxerInterleave;
00086
00087
00088 #define XLV_MUXER_STREAM_BASE_CMD (XLV_MUXER_BASE_CMD+50)
00089 #define XLV_MUXER_STREAM_SET_TIMESPEC (XLV_MUXER_STREAM_BASE_CMD+2)
00090 #define XLV_MUXER_STREAM_NEW_FRAME (XLV_MUXER_STREAM_BASE_CMD+3)
00091
00092 typedef struct _XLV_MuxerTimeSpec {
00093 guint8 m_valid_entries;
00094 # define XLV_MUXER_TIME_FRAME_VALID 0x01
00095 # define XLV_MUXER_TIME_TIME_VALID 0x02
00096 # define XLV_MUXER_TIME_SIZE_VALID 0x04
00097
00098 guint32 m_frames;
00099 guint32 m_time_length;
00100 guint32 m_size;
00101 } XLV_MuxerTimeSpec;
00102
00103 typedef struct _XLV_Muxer {
00104 XLV_Session *m_session;
00105 XLV_Stream *m_output_stream;
00106 XLV_Stream *m_muxer;
00107 GSList *m_streams;
00108 XLV_MuxerInterleave m_interleave;
00109 } XLV_Muxer;
00110
00111 typedef struct _XLV_Mux_Stream {
00112 XLV_Muxer *m_muxer;
00113 XLV_Stream *m_stream;
00114 } XLV_Mux_Stream;
00115
00116 #ifdef __cplusplus
00117 extern "C" {
00118 #endif
00119
00120 XLV_Muxer *xlv_muxer_new (XLV_Session * session, XLV_Stream * out_stream,
00121 const gchar * idname);
00122 void xlv_muxer_release (XLV_Muxer * muxer);
00123 gboolean xlv_muxer_set_interleave (XLV_Muxer * muxer, guint8 mode,
00124 guint32 inter_time, guint16 flags);
00125 void xlv_muxer_set_time (XLV_Muxer * muxer, guint32 time);
00126
00127 XLV_Mux_Stream *xlv_muxer_new_stream (XLV_Muxer * muxer,
00128 guint8 m_stream_type,
00129 XLV_ICodec * codec);
00130 gboolean xlv_muxer_new_frame (XLV_Mux_Stream * s, XLV_CodecFrame * frame);
00131 gboolean xlv_muxer_stream_set_time (XLV_Mux_Stream * s,
00132 XLV_MuxerTimeSpec * spec);
00133
00134
00135
00136 gboolean xlv_muxer_stream_need_frame (XLV_Mux_Stream * s);
00137
00138 #ifdef __cplusplus
00139 }
00140 #endif
00141 #endif