#define __GST_RTP_MUX_H__
#include <gst/gst.h>
+#include <gst/rtp/gstrtpbuffer.h>
G_BEGIN_DECLS
-
#define GST_TYPE_RTP_MUX (gst_rtp_mux_get_type())
#define GST_RTP_MUX(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_RTP_MUX, GstRTPMux))
-#define GST_RTP_MUX_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_RTP_MUX, GstRTPMux))
+#define GST_RTP_MUX_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_RTP_MUX, GstRTPMuxClass))
#define GST_RTP_MUX_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_RTP_MUX, GstRTPMuxClass))
#define GST_IS_RTP_MUX(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_RTP_MUX))
#define GST_IS_RTP_MUX_CLASS(obj) (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_RTP_MUX))
-
typedef struct _GstRTPMux GstRTPMux;
typedef struct _GstRTPMuxClass GstRTPMuxClass;
+
+typedef struct
+{
+ gboolean have_clock_base;
+ guint clock_base;
+
+ GstCaps *out_caps;
+
+ GstSegment segment;
+
+ gboolean priority;
+} GstRTPMuxPadPrivate;
+
+
/**
* GstRTPMux:
*
/* pad */
GstPad *srcpad;
- /* sinkpads */
- gint numpads;
+ guint32 ts_base;
+ guint16 seqnum_base;
- guint32 ts_base;
- guint32 sink_ts_base;
- guint16 seqnum_base;
+ gint32 ts_offset;
+ gint16 seqnum_offset;
+ guint16 seqnum; /* protected by object lock */
+ guint ssrc;
+ guint current_ssrc;
- gint32 ts_offset;
- gint16 seqnum_offset;
- guint16 seqnum;
- guint ssrc;
- guint current_ssrc;
+ gboolean segment_pending;
- guint32 clock_rate;
+ GstClockTime last_stop;
};
struct _GstRTPMuxClass
{
GstElementClass parent_class;
- GstFlowReturn (* chain_func) (GstPad * pad, GstBuffer * buffer);
- gboolean (* sink_event_func) (GstPad * pad, GstEvent * event);
+ gboolean (*accept_buffer_locked) (GstRTPMux *rtp_mux,
+ GstRTPMuxPadPrivate * padpriv, GstRTPBuffer * buffer);
+
+ gboolean (*src_event) (GstRTPMux *rtp_mux, GstEvent *event);
};
+
GType gst_rtp_mux_get_type (void);
gboolean gst_rtp_mux_plugin_init (GstPlugin * plugin);
G_END_DECLS
-
#endif /* __GST_RTP_MUX_H__ */