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     PURPLE_MEDIA_ELEMENT_APPLICATION = 1 << 11, 
00075 } PurpleMediaElementType;
00076 
00077 #ifdef __cplusplus
00078 extern "C" {
00079 #endif
00080 
00088 GType purple_media_element_type_get_type(void);
00089 
00097 GType purple_media_element_info_get_type(void);
00098 
00109 GstElement *purple_media_get_src(PurpleMedia *media, const gchar *sess_id);
00110 
00122 GstElement *purple_media_get_tee(PurpleMedia *media,
00123         const gchar *session_id, const gchar *participant);
00124 
00125 
00135 GstElement *purple_media_manager_get_pipeline(PurpleMediaManager *manager);
00136 
00148 GstElement *purple_media_manager_get_element(PurpleMediaManager *manager,
00149         PurpleMediaSessionType type, PurpleMedia *media,
00150         const gchar *session_id, const gchar *participant);
00151 
00152 PurpleMediaElementInfo *purple_media_manager_get_element_info(
00153         PurpleMediaManager *manager, const gchar *name);
00154 gboolean purple_media_manager_register_element(PurpleMediaManager *manager,
00155         PurpleMediaElementInfo *info);
00156 gboolean purple_media_manager_unregister_element(PurpleMediaManager *manager,
00157         const gchar *name);
00158 gboolean purple_media_manager_set_active_element(PurpleMediaManager *manager,
00159         PurpleMediaElementInfo *info);
00160 PurpleMediaElementInfo *purple_media_manager_get_active_element(
00161         PurpleMediaManager *manager, PurpleMediaElementType type);
00162 
00174 void purple_media_manager_set_video_caps(PurpleMediaManager *manager,
00175         GstCaps *caps);
00176 
00186 GstCaps *purple_media_manager_get_video_caps(PurpleMediaManager *manager);
00187 
00188 gchar *purple_media_element_info_get_id(PurpleMediaElementInfo *info);
00189 gchar *purple_media_element_info_get_name(PurpleMediaElementInfo *info);
00190 PurpleMediaElementType purple_media_element_info_get_element_type(
00191         PurpleMediaElementInfo *info);
00192 GstElement *purple_media_element_info_call_create(
00193         PurpleMediaElementInfo *info, PurpleMedia *media,
00194         const gchar *session_id, const gchar *participant);
00195 
00196 #ifdef __cplusplus
00197 }
00198 #endif
00199 
00200 G_END_DECLS
00201 
00202 #endif  /* _PURPLE_MEDIA_GST_H_ */