/* * Farstream - Farstream Stream * * Copyright 2007 Collabora Ltd. * @author: Philippe Kalaf * Copyright 2007 Nokia Corp. * * fs-stream.h - A Farstream Stream (base implementation) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef __FS_STREAM_H__ #define __FS_STREAM_H__ #include #include #include #include G_BEGIN_DECLS /** * FsStreamDirection: * @FS_DIRECTION_NONE: No direction specified * @FS_DIRECTION_SEND: Send only * @FS_DIRECTION_RECV: Receive only * @FS_DIRECTION_BOTH: Send and receive * * An enum for specifying the direction of a stream * */ typedef enum { FS_DIRECTION_NONE = 0, FS_DIRECTION_SEND = 1<<0, FS_DIRECTION_RECV = 1<<1, FS_DIRECTION_BOTH = FS_DIRECTION_SEND | FS_DIRECTION_RECV } FsStreamDirection; /** * FsStreamState: * @FS_STREAM_STATE_FAILED: connectivity checks have been completed, * but connectivity was not established * @FS_STREAM_STATE_DISCONNECTED: no activity scheduled * @FS_STREAM_STATE_GATHERING: gathering local candidates * @FS_STREAM_STATE_CONNECTING: establishing connectivity * @FS_STREAM_STATE_CONNECTED: at least one working candidate pair * @FS_STREAM_STATE_READY: ICE concluded, candidate pair selection is now final * * These are the possible states of a stream, a simple multicast stream * could only be in "disconnected" or "ready" state. * An stream using an ICE transmitter would use all of these. */ typedef enum { FS_STREAM_STATE_FAILED, FS_STREAM_STATE_DISCONNECTED, FS_STREAM_STATE_GATHERING, FS_STREAM_STATE_CONNECTING, FS_STREAM_STATE_CONNECTED, FS_STREAM_STATE_READY } FsStreamState; /* TYPE MACROS */ #define FS_TYPE_STREAM \ (fs_stream_get_type ()) #define FS_STREAM(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), FS_TYPE_STREAM, FsStream)) #define FS_STREAM_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), FS_TYPE_STREAM, FsStreamClass)) #define FS_IS_STREAM(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), FS_TYPE_STREAM)) #define FS_IS_STREAM_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), FS_TYPE_STREAM)) #define FS_STREAM_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS ((obj), FS_TYPE_STREAM, FsStreamClass)) #define FS_STREAM_CAST(obj) ((FsStream *) (obj)) typedef struct _FsStream FsStream; typedef struct _FsStreamClass FsStreamClass; typedef struct _FsStreamPrivate FsStreamPrivate; /** * FsStreamClass: * @parent_class: Our parent * @add_remote_candidates: Set sthe remote candidates * @force_remote_candidates: Forces certain remote candidates * @set_remote_codecs: Sets the list of remote codecs * @add_id: Add a known id to be associated with this stream * @set_transmitter: Set the transmitter to use for this stream * @set_decryption_parameters: Set decryption parameters * * You must override add_remote_candidate in a subclass. * If you have to negotiate codecs, then you must override set_remote_codecs too */ struct _FsStreamClass { GObjectClass parent_class; /*virtual functions */ gboolean (*add_remote_candidates) (FsStream *stream, GList *candidates, GError **error); gboolean (*force_remote_candidates) (FsStream *stream, GList *remote_candidates, GError **error); gboolean (*set_remote_codecs) (FsStream *stream, GList *remote_codecs, GError **error); void (*add_id) (FsStream *stream, guint id); gboolean (*set_transmitter) (FsStream *stream, const gchar *transmitter, GParameter *stream_transmitter_parameters, guint stream_transmitter_n_parameters, GError **error); gboolean (* set_decryption_parameters) (FsStream *stream, GstStructure *parameters, GError **error); /*< private >*/ gpointer _padding[7]; }; /** * FsStream: * * All members are private, access them using methods and properties */ struct _FsStream { GObject parent; /*< private >*/ FsStreamPrivate *priv; gpointer _padding[8]; }; GType fs_stream_get_type (void); gboolean fs_stream_add_remote_candidates (FsStream *stream, GList *candidates, GError **error); gboolean fs_stream_force_remote_candidates (FsStream *stream, GList *remote_candidates, GError **error); gboolean fs_stream_set_remote_codecs (FsStream *stream, GList *remote_codecs, GError **error); void fs_stream_add_id (FsStream *stream, guint id); void fs_stream_emit_error (FsStream *stream, gint error_no, const gchar *error_msg); void fs_stream_emit_src_pad_added (FsStream *stream, GstPad *pad, FsCodec *codec); GstIterator *fs_stream_iterate_src_pads (FsStream *stream); gboolean fs_stream_set_transmitter (FsStream *stream, const gchar *transmitter, GParameter *stream_transmitter_parameters, guint stream_transmitter_n_parameters, GError **error); gboolean fs_stream_set_transmitter_ht (FsStream *stream, const gchar *transmitter, GHashTable *stream_transmitter_parameters, GError **error); gboolean fs_stream_set_decryption_parameters (FsStream *stream, GstStructure *parameters, GError **error); void fs_stream_destroy (FsStream *stream); gboolean fs_stream_parse_new_local_candidate (FsStream *stream, GstMessage *message, FsCandidate **candidate); gboolean fs_stream_parse_local_candidates_prepared (FsStream *stream, GstMessage *message); gboolean fs_stream_parse_new_active_candidate_pair (FsStream *stream, GstMessage *message, FsCandidate **local_candidate, FsCandidate **remote_candidate); gboolean fs_stream_parse_recv_codecs_changed (FsStream *stream, GstMessage *message, GList **codecs); gboolean fs_stream_parse_component_state_changed (FsStream *stream, GstMessage *message, guint *component, FsStreamState *state); G_END_DECLS #endif /* __FS_STREAM_H__ */