media-gst.h

Go to the documentation of this file.
00001 
00006 /* purple
00007  *
00008  * Purple is the legal property of its developers, whose names are too numerous
00009  * to list here.  Please refer to the COPYRIGHT file distributed with this
00010  * source distribution.
00011  *
00012  * This program is free software; you can redistribute it and/or modify
00013  * it under the terms of the GNU General Public License as published by
00014  * the Free Software Foundation; either version 2 of the License, or
00015  * (at your option) any later version.
00016  *
00017  * This program is distributed in the hope that it will be useful,
00018  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00019  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00020  * GNU General Public License for more details.
00021  *
00022  * You should have received a copy of the GNU General Public License
00023  * along with this program; if not, write to the Free Software
00024  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
00025  */
00026 
00027 #ifndef _PURPLE_MEDIA_GST_H_
00028 #define _PURPLE_MEDIA_GST_H_
00029 
00030 #include "media.h"
00031 #include "mediamanager.h"
00032 
00033 #include <gst/gst.h>
00034 
00035 G_BEGIN_DECLS
00036 
00037 #define PURPLE_TYPE_MEDIA_ELEMENT_TYPE           (purple_media_element_type_get_type())
00038 #define PURPLE_TYPE_MEDIA_ELEMENT_INFO           (purple_media_element_info_get_type())
00039 #define PURPLE_MEDIA_ELEMENT_INFO(obj)            (G_TYPE_CHECK_INSTANCE_CAST((obj), PURPLE_TYPE_MEDIA_ELEMENT_INFO, PurpleMediaElementInfo))
00040 #define PURPLE_MEDIA_ELEMENT_INFO_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST((klass), PURPLE_TYPE_MEDIA_ELEMENT_INFO, PurpleMediaElementInfo))
00041 #define PURPLE_IS_MEDIA_ELEMENT_INFO(obj)         (G_TYPE_CHECK_INSTANCE_TYPE((obj), PURPLE_TYPE_MEDIA_ELEMENT_INFO))
00042 #define PURPLE_IS_MEDIA_ELEMENT_INFO_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), PURPLE_TYPE_MEDIA_ELEMENT_INFO))
00043 #define PURPLE_MEDIA_ELEMENT_INFO_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS((obj), PURPLE_TYPE_MEDIA_ELEMENT_INFO, PurpleMediaElementInfo))
00044 
00046 typedef struct _PurpleMediaElementInfo PurpleMediaElementInfo;
00047 typedef struct _PurpleMediaElementInfoClass PurpleMediaElementInfoClass;
00048 typedef GstElement *(*PurpleMediaElementCreateCallback)(PurpleMedia *media,
00049             const gchar *session_id, const gchar *participant);
00050 
00051 typedef enum {
00052     PURPLE_MEDIA_ELEMENT_NONE = 0,          
00053     PURPLE_MEDIA_ELEMENT_AUDIO = 1,         
00054     PURPLE_MEDIA_ELEMENT_VIDEO = 1 << 1,        
00055     PURPLE_MEDIA_ELEMENT_AUDIO_VIDEO = PURPLE_MEDIA_ELEMENT_AUDIO
00056             | PURPLE_MEDIA_ELEMENT_VIDEO,   
00058     PURPLE_MEDIA_ELEMENT_NO_SRCS = 0,       
00059     PURPLE_MEDIA_ELEMENT_ONE_SRC = 1 << 2,      
00060     PURPLE_MEDIA_ELEMENT_MULTI_SRC = 1 << 3,    
00061     PURPLE_MEDIA_ELEMENT_REQUEST_SRC = 1 << 4,  
00063     PURPLE_MEDIA_ELEMENT_NO_SINKS = 0,      
00064     PURPLE_MEDIA_ELEMENT_ONE_SINK = 1 << 5,     
00065     PURPLE_MEDIA_ELEMENT_MULTI_SINK = 1 << 6,   
00066     PURPLE_MEDIA_ELEMENT_REQUEST_SINK = 1 << 7,     
00068     PURPLE_MEDIA_ELEMENT_UNIQUE = 1 << 8,       
00072     PURPLE_MEDIA_ELEMENT_SRC = 1 << 9,      
00073     PURPLE_MEDIA_ELEMENT_SINK = 1 << 10,        
00074 } PurpleMediaElementType;
00075 
00076 #ifdef __cplusplus
00077 extern "C" {
00078 #endif
00079 
00087 GType purple_media_element_type_get_type(void);
00088 
00096 GType purple_media_element_info_get_type(void);
00097 
00108 GstElement *purple_media_get_src(PurpleMedia *media, const gchar *sess_id);
00109 
00121 GstElement *purple_media_get_tee(PurpleMedia *media,
00122         const gchar *session_id, const gchar *participant);
00123 
00124 
00134 GstElement *purple_media_manager_get_pipeline(PurpleMediaManager *manager);
00135 
00147 GstElement *purple_media_manager_get_element(PurpleMediaManager *manager,
00148         PurpleMediaSessionType type, PurpleMedia *media,
00149         const gchar *session_id, const gchar *participant);
00150 
00151 PurpleMediaElementInfo *purple_media_manager_get_element_info(
00152         PurpleMediaManager *manager, const gchar *name);
00153 gboolean purple_media_manager_register_element(PurpleMediaManager *manager,
00154         PurpleMediaElementInfo *info);
00155 gboolean purple_media_manager_unregister_element(PurpleMediaManager *manager,
00156         const gchar *name);
00157 gboolean purple_media_manager_set_active_element(PurpleMediaManager *manager,
00158         PurpleMediaElementInfo *info);
00159 PurpleMediaElementInfo *purple_media_manager_get_active_element(
00160         PurpleMediaManager *manager, PurpleMediaElementType type);
00161 
00162 gchar *purple_media_element_info_get_id(PurpleMediaElementInfo *info);
00163 gchar *purple_media_element_info_get_name(PurpleMediaElementInfo *info);
00164 PurpleMediaElementType purple_media_element_info_get_element_type(
00165         PurpleMediaElementInfo *info);
00166 GstElement *purple_media_element_info_call_create(
00167         PurpleMediaElementInfo *info, PurpleMedia *media,
00168         const gchar *session_id, const gchar *participant);
00169 
00170 #ifdef __cplusplus
00171 }
00172 #endif
00173 
00174 G_END_DECLS
00175 
00176 #endif  /* _PURPLE_MEDIA_GST_H_ */