2002-10-27 18:43:29 +00:00
/* GStreamer
* Copyright ( C ) < 1999 > Erik Walthinsen < omega @ cse . ogi . edu >
*
* This library is free software ; you can redistribute it and / or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation ; either
* version 2 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
* Library General Public License for more details .
*
* You should have received a copy of the GNU Library General Public
* License along with this library ; if not , write to the
* Free Software Foundation , Inc . , 59 Temple Place - Suite 330 ,
* Boston , MA 02111 - 1307 , USA .
*/
2003-06-29 19:46:12 +00:00
# ifdef HAVE_CONFIG_H
# include "config.h"
# endif
2002-10-27 18:43:29 +00:00
# include "gstshout2.h"
# include <stdlib.h>
2003-02-23 21:01:24 +00:00
# include <string.h>
2002-10-27 18:43:29 +00:00
ext/lame/gstlame.c: send tag events downstream
Original commit message from CVS:
2004-07-28 Zaheer Abbas Merali <zaheerabbas at merali dot org>
* ext/lame/gstlame.c: (gst_lame_chain): send tag events downstream
* ext/shout2/gstshout2.c: (gst_shout2send_protocol_get_type),
(gst_shout2send_get_type), (gst_shout2send_set_clock),
(gst_shout2send_class_init), (gst_shout2send_init),
(set_shout_metadata), (gst_shout2send_set_metadata),
(gst_shout2send_chain), (gst_shout2send_set_property),
(gst_shout2send_get_property), (gst_shout2send_connect),
(gst_shout2send_change_state):
* ext/shout2/gstshout2.h:
- fix for sending mp3 audio to icecast2 server, if pad link function not
called before PAUSED state
- added option to use GStreamer clock sync (as opposed to libshout's own sync)
- added tagging support for mp3 audio broadcasted
* gst/monoscope/gstmonoscope.c: (gst_monoscope_class_init):
debug info
2004-07-28 20:26:31 +00:00
GST_DEBUG_CATEGORY ( shout2_debug ) ;
# define GST_CAT_DEFAULT shout2_debug
2002-10-27 18:43:29 +00:00
/* elementfactory information */
2006-03-30 15:37:05 +00:00
static GstElementDetails shout2send_details =
GST_ELEMENT_DETAILS ( " Icecast network sink " ,
" Sink/Network " ,
" Sends data to an icecast server " ,
" Wim Taymans <wim.taymans@chello.be> \n "
" Pedro Corte-Real <typo@netcabo.pt> \n "
" Zaheer Abbas Merali <zaheerabbas at merali dot org> " ) ;
2002-10-27 18:43:29 +00:00
/* Shout2send signals and args */
2004-03-14 22:34:33 +00:00
enum
{
2002-10-27 18:43:29 +00:00
/* FILL ME */
2004-05-24 12:08:34 +00:00
SIGNAL_CONNECTION_PROBLEM ,
2002-10-27 18:43:29 +00:00
LAST_SIGNAL
} ;
2004-03-14 22:34:33 +00:00
enum
{
2002-10-27 18:43:29 +00:00
ARG_0 ,
2004-03-15 19:32:27 +00:00
ARG_IP , /* the ip of the server */
ARG_PORT , /* the encoder port number on the server */
ARG_PASSWORD , /* the encoder password on the server */
ARG_PUBLIC , /* is this stream public? */
2005-05-09 20:09:44 +00:00
ARG_STREAMNAME , /* Name of the stream */
2004-03-15 19:32:27 +00:00
ARG_DESCRIPTION , /* Description of the stream */
ARG_GENRE , /* Genre of the stream */
ARG_PROTOCOL , /* Protocol to connect with */
ARG_MOUNT , /* mountpoint of stream (icecast only) */
ext/lame/gstlame.c: send tag events downstream
Original commit message from CVS:
2004-07-28 Zaheer Abbas Merali <zaheerabbas at merali dot org>
* ext/lame/gstlame.c: (gst_lame_chain): send tag events downstream
* ext/shout2/gstshout2.c: (gst_shout2send_protocol_get_type),
(gst_shout2send_get_type), (gst_shout2send_set_clock),
(gst_shout2send_class_init), (gst_shout2send_init),
(set_shout_metadata), (gst_shout2send_set_metadata),
(gst_shout2send_chain), (gst_shout2send_set_property),
(gst_shout2send_get_property), (gst_shout2send_connect),
(gst_shout2send_change_state):
* ext/shout2/gstshout2.h:
- fix for sending mp3 audio to icecast2 server, if pad link function not
called before PAUSED state
- added option to use GStreamer clock sync (as opposed to libshout's own sync)
- added tagging support for mp3 audio broadcasted
* gst/monoscope/gstmonoscope.c: (gst_monoscope_class_init):
debug info
2004-07-28 20:26:31 +00:00
ARG_URL , /* Url of stream (I'm guessing) */
ARG_SYNC /* Sync with clock */
2002-10-27 18:43:29 +00:00
} ;
2005-05-09 20:09:44 +00:00
static GstElementClass * parent_class = NULL ;
2004-05-12 02:35:56 +00:00
static GstStaticPadTemplate sink_template = GST_STATIC_PAD_TEMPLATE ( " sink " ,
GST_PAD_SINK ,
GST_PAD_ALWAYS ,
2004-05-17 17:31:48 +00:00
GST_STATIC_CAPS ( " application/ogg; "
2004-05-12 02:35:56 +00:00
" audio/mpeg, mpegversion = (int) 1, layer = (int) [ 1, 3 ] " )
) ;
2004-03-14 22:34:33 +00:00
static void gst_shout2send_class_init ( GstShout2sendClass * klass ) ;
static void gst_shout2send_base_init ( GstShout2sendClass * klass ) ;
static void gst_shout2send_init ( GstShout2send * shout2send ) ;
2002-10-27 18:43:29 +00:00
2005-05-09 20:09:44 +00:00
static gboolean gst_shout2send_event ( GstBaseSink * sink , GstEvent * event ) ;
static GstFlowReturn gst_shout2send_render ( GstBaseSink * sink ,
GstBuffer * buffer ) ;
2002-10-27 18:43:29 +00:00
2004-03-14 22:34:33 +00:00
static void gst_shout2send_set_property ( GObject * object , guint prop_id ,
const GValue * value , GParamSpec * pspec ) ;
static void gst_shout2send_get_property ( GObject * object , guint prop_id ,
GValue * value , GParamSpec * pspec ) ;
2002-10-27 18:43:29 +00:00
2005-09-02 15:44:50 +00:00
static GstStateChangeReturn gst_shout2send_change_state ( GstElement * element ,
GstStateChange transition ) ;
2005-05-09 20:09:44 +00:00
static gboolean gst_shout2send_setcaps ( GstPad * pad , GstCaps * caps ) ;
2004-03-14 22:34:33 +00:00
2004-05-24 12:52:37 +00:00
static guint gst_shout2send_signals [ LAST_SIGNAL ] = { 0 } ;
2002-10-27 18:43:29 +00:00
2003-01-05 17:05:39 +00:00
# define GST_TYPE_SHOUT_PROTOCOL (gst_shout2send_protocol_get_type())
static GType
2004-03-14 22:34:33 +00:00
gst_shout2send_protocol_get_type ( void )
2003-01-05 17:05:39 +00:00
{
static GType shout2send_protocol_type = 0 ;
static GEnumValue shout2send_protocol [ ] = {
2005-11-22 18:11:58 +00:00
{ SHOUT2SEND_PROTOCOL_XAUDIOCAST ,
" Xaudiocast Protocol (icecast 1.3.x) " , " xaudiocast " } ,
{ SHOUT2SEND_PROTOCOL_ICY , " Icy Protocol (ShoutCast) " , " icy " } ,
{ SHOUT2SEND_PROTOCOL_HTTP , " Http Protocol (icecast 2.x) " , " http " } ,
2003-01-05 17:05:39 +00:00
{ 0 , NULL , NULL } ,
} ;
2004-03-15 19:32:27 +00:00
2003-01-05 17:05:39 +00:00
if ( ! shout2send_protocol_type ) {
2004-03-14 22:34:33 +00:00
shout2send_protocol_type =
2004-03-15 19:32:27 +00:00
g_enum_register_static ( " GstShout2SendProtocol " , shout2send_protocol ) ;
2003-01-05 17:05:39 +00:00
}
ext/lame/gstlame.c: send tag events downstream
Original commit message from CVS:
2004-07-28 Zaheer Abbas Merali <zaheerabbas at merali dot org>
* ext/lame/gstlame.c: (gst_lame_chain): send tag events downstream
* ext/shout2/gstshout2.c: (gst_shout2send_protocol_get_type),
(gst_shout2send_get_type), (gst_shout2send_set_clock),
(gst_shout2send_class_init), (gst_shout2send_init),
(set_shout_metadata), (gst_shout2send_set_metadata),
(gst_shout2send_chain), (gst_shout2send_set_property),
(gst_shout2send_get_property), (gst_shout2send_connect),
(gst_shout2send_change_state):
* ext/shout2/gstshout2.h:
- fix for sending mp3 audio to icecast2 server, if pad link function not
called before PAUSED state
- added option to use GStreamer clock sync (as opposed to libshout's own sync)
- added tagging support for mp3 audio broadcasted
* gst/monoscope/gstmonoscope.c: (gst_monoscope_class_init):
debug info
2004-07-28 20:26:31 +00:00
2003-01-05 17:05:39 +00:00
return shout2send_protocol_type ;
}
2002-10-27 18:43:29 +00:00
GType
2004-03-14 22:34:33 +00:00
gst_shout2send_get_type ( void )
2002-10-27 18:43:29 +00:00
{
static GType shout2send_type = 0 ;
if ( ! shout2send_type ) {
static const GTypeInfo shout2send_info = {
2004-03-14 22:34:33 +00:00
sizeof ( GstShout2sendClass ) ,
( GBaseInitFunc ) gst_shout2send_base_init ,
2002-10-27 18:43:29 +00:00
NULL ,
2004-03-14 22:34:33 +00:00
( GClassInitFunc ) gst_shout2send_class_init ,
2002-10-27 18:43:29 +00:00
NULL ,
NULL ,
2004-03-14 22:34:33 +00:00
sizeof ( GstShout2send ) ,
2002-10-27 18:43:29 +00:00
0 ,
2004-03-14 22:34:33 +00:00
( GInstanceInitFunc ) gst_shout2send_init ,
2002-10-27 18:43:29 +00:00
} ;
2004-03-15 19:32:27 +00:00
ext/lame/gstlame.c: send tag events downstream
Original commit message from CVS:
2004-07-28 Zaheer Abbas Merali <zaheerabbas at merali dot org>
* ext/lame/gstlame.c: (gst_lame_chain): send tag events downstream
* ext/shout2/gstshout2.c: (gst_shout2send_protocol_get_type),
(gst_shout2send_get_type), (gst_shout2send_set_clock),
(gst_shout2send_class_init), (gst_shout2send_init),
(set_shout_metadata), (gst_shout2send_set_metadata),
(gst_shout2send_chain), (gst_shout2send_set_property),
(gst_shout2send_get_property), (gst_shout2send_connect),
(gst_shout2send_change_state):
* ext/shout2/gstshout2.h:
- fix for sending mp3 audio to icecast2 server, if pad link function not
called before PAUSED state
- added option to use GStreamer clock sync (as opposed to libshout's own sync)
- added tagging support for mp3 audio broadcasted
* gst/monoscope/gstmonoscope.c: (gst_monoscope_class_init):
debug info
2004-07-28 20:26:31 +00:00
static const GInterfaceInfo tag_setter_info = {
NULL ,
NULL ,
NULL
} ;
2005-05-09 20:09:44 +00:00
shout2send_type =
2005-07-10 12:52:20 +00:00
g_type_register_static ( GST_TYPE_BASE_SINK , " GstShout2send " ,
2005-05-09 20:09:44 +00:00
& shout2send_info , 0 ) ;
ext/lame/gstlame.c: send tag events downstream
Original commit message from CVS:
2004-07-28 Zaheer Abbas Merali <zaheerabbas at merali dot org>
* ext/lame/gstlame.c: (gst_lame_chain): send tag events downstream
* ext/shout2/gstshout2.c: (gst_shout2send_protocol_get_type),
(gst_shout2send_get_type), (gst_shout2send_set_clock),
(gst_shout2send_class_init), (gst_shout2send_init),
(set_shout_metadata), (gst_shout2send_set_metadata),
(gst_shout2send_chain), (gst_shout2send_set_property),
(gst_shout2send_get_property), (gst_shout2send_connect),
(gst_shout2send_change_state):
* ext/shout2/gstshout2.h:
- fix for sending mp3 audio to icecast2 server, if pad link function not
called before PAUSED state
- added option to use GStreamer clock sync (as opposed to libshout's own sync)
- added tagging support for mp3 audio broadcasted
* gst/monoscope/gstmonoscope.c: (gst_monoscope_class_init):
debug info
2004-07-28 20:26:31 +00:00
g_type_add_interface_static ( shout2send_type , GST_TYPE_TAG_SETTER ,
& tag_setter_info ) ;
2002-10-27 18:43:29 +00:00
}
return shout2send_type ;
}
2003-11-02 14:38:31 +00:00
static void
2004-03-14 22:34:33 +00:00
gst_shout2send_base_init ( GstShout2sendClass * klass )
2003-11-02 14:38:31 +00:00
{
GstElementClass * element_class = GST_ELEMENT_CLASS ( klass ) ;
2005-05-09 20:09:44 +00:00
element_class - > change_state = gst_shout2send_change_state ;
2004-05-12 02:35:56 +00:00
gst_element_class_add_pad_template ( element_class ,
gst_static_pad_template_get ( & sink_template ) ) ;
2003-11-02 14:38:31 +00:00
gst_element_class_set_details ( element_class , & shout2send_details ) ;
}
2002-10-27 18:43:29 +00:00
static void
2004-03-14 22:34:33 +00:00
gst_shout2send_class_init ( GstShout2sendClass * klass )
2002-10-27 18:43:29 +00:00
{
GObjectClass * gobject_class ;
2005-05-09 20:09:44 +00:00
GstBaseSinkClass * gstbasesink_class ;
2002-10-27 18:43:29 +00:00
2004-03-14 22:34:33 +00:00
gobject_class = ( GObjectClass * ) klass ;
2005-05-09 20:09:44 +00:00
gstbasesink_class = ( GstBaseSinkClass * ) klass ;
2005-07-10 12:52:20 +00:00
parent_class = g_type_class_ref ( GST_TYPE_BASE_SINK ) ;
2002-10-27 18:43:29 +00:00
2005-05-09 20:09:44 +00:00
gobject_class - > set_property = gst_shout2send_set_property ;
gobject_class - > get_property = gst_shout2send_get_property ;
2002-10-27 18:43:29 +00:00
2004-03-15 19:32:27 +00:00
g_object_class_install_property ( G_OBJECT_CLASS ( klass ) , ARG_IP , g_param_spec_string ( " ip " , " ip " , " ip " , NULL , G_PARAM_READWRITE ) ) ; /* CHECKME */
g_object_class_install_property ( G_OBJECT_CLASS ( klass ) , ARG_PORT , g_param_spec_int ( " port " , " port " , " port " , 1 , G_MAXUSHORT , 8000 , G_PARAM_READWRITE ) ) ; /* CHECKME */
2002-10-27 18:43:29 +00:00
2004-03-15 19:32:27 +00:00
g_object_class_install_property ( G_OBJECT_CLASS ( klass ) , ARG_PASSWORD , g_param_spec_string ( " password " , " password " , " password " , NULL , G_PARAM_READWRITE ) ) ; /* CHECKME */
2002-10-27 18:43:29 +00:00
/* metadata */
2005-05-09 20:09:44 +00:00
g_object_class_install_property ( G_OBJECT_CLASS ( klass ) , ARG_STREAMNAME , g_param_spec_string ( " streamname " , " streamname " , " name of the stream " , NULL , G_PARAM_READWRITE ) ) ; /* CHECKME */
2002-10-27 18:43:29 +00:00
2004-03-15 19:32:27 +00:00
g_object_class_install_property ( G_OBJECT_CLASS ( klass ) , ARG_DESCRIPTION , g_param_spec_string ( " description " , " description " , " description " , NULL , G_PARAM_READWRITE ) ) ; /* CHECKME */
2002-10-27 18:43:29 +00:00
2004-03-15 19:32:27 +00:00
g_object_class_install_property ( G_OBJECT_CLASS ( klass ) , ARG_GENRE , g_param_spec_string ( " genre " , " genre " , " genre " , NULL , G_PARAM_READWRITE ) ) ; /* CHECKME */
2002-10-27 18:43:29 +00:00
2003-01-05 17:05:39 +00:00
g_object_class_install_property ( G_OBJECT_CLASS ( klass ) , ARG_PROTOCOL ,
2004-03-14 22:34:33 +00:00
g_param_spec_enum ( " protocol " , " protocol " , " Connection Protocol to use " ,
2004-03-15 19:32:27 +00:00
GST_TYPE_SHOUT_PROTOCOL , SHOUT2SEND_PROTOCOL_HTTP ,
G_PARAM_READWRITE ) ) ;
2003-01-05 17:05:39 +00:00
2002-10-27 18:43:29 +00:00
/* icecast only */
2004-03-15 19:32:27 +00:00
g_object_class_install_property ( G_OBJECT_CLASS ( klass ) , ARG_MOUNT , g_param_spec_string ( " mount " , " mount " , " mount " , NULL , G_PARAM_READWRITE ) ) ; /* CHECKME */
2004-03-14 22:34:33 +00:00
2004-03-15 19:32:27 +00:00
g_object_class_install_property ( G_OBJECT_CLASS ( klass ) , ARG_URL , g_param_spec_string ( " url " , " url " , " url " , NULL , G_PARAM_READWRITE ) ) ; /* CHECKME */
2004-03-14 22:34:33 +00:00
ext/lame/gstlame.c: send tag events downstream
Original commit message from CVS:
2004-07-28 Zaheer Abbas Merali <zaheerabbas at merali dot org>
* ext/lame/gstlame.c: (gst_lame_chain): send tag events downstream
* ext/shout2/gstshout2.c: (gst_shout2send_protocol_get_type),
(gst_shout2send_get_type), (gst_shout2send_set_clock),
(gst_shout2send_class_init), (gst_shout2send_init),
(set_shout_metadata), (gst_shout2send_set_metadata),
(gst_shout2send_chain), (gst_shout2send_set_property),
(gst_shout2send_get_property), (gst_shout2send_connect),
(gst_shout2send_change_state):
* ext/shout2/gstshout2.h:
- fix for sending mp3 audio to icecast2 server, if pad link function not
called before PAUSED state
- added option to use GStreamer clock sync (as opposed to libshout's own sync)
- added tagging support for mp3 audio broadcasted
* gst/monoscope/gstmonoscope.c: (gst_monoscope_class_init):
debug info
2004-07-28 20:26:31 +00:00
/* sync to clock */
g_object_class_install_property ( G_OBJECT_CLASS ( klass ) , ARG_SYNC ,
g_param_spec_boolean ( " sync " , " Sync " , " Sync on the clock " , FALSE ,
G_PARAM_READWRITE ) ) ;
2002-10-27 18:43:29 +00:00
2004-05-24 12:08:34 +00:00
/* signals */
gst_shout2send_signals [ SIGNAL_CONNECTION_PROBLEM ] =
g_signal_new ( " connection-problem " , G_TYPE_FROM_CLASS ( klass ) ,
G_SIGNAL_RUN_CLEANUP , G_STRUCT_OFFSET ( GstShout2sendClass ,
connection_problem ) , NULL , NULL , g_cclosure_marshal_VOID__INT ,
G_TYPE_NONE , 1 , G_TYPE_INT ) ;
ext/lame/gstlame.c: send tag events downstream
Original commit message from CVS:
2004-07-28 Zaheer Abbas Merali <zaheerabbas at merali dot org>
* ext/lame/gstlame.c: (gst_lame_chain): send tag events downstream
* ext/shout2/gstshout2.c: (gst_shout2send_protocol_get_type),
(gst_shout2send_get_type), (gst_shout2send_set_clock),
(gst_shout2send_class_init), (gst_shout2send_init),
(set_shout_metadata), (gst_shout2send_set_metadata),
(gst_shout2send_chain), (gst_shout2send_set_property),
(gst_shout2send_get_property), (gst_shout2send_connect),
(gst_shout2send_change_state):
* ext/shout2/gstshout2.h:
- fix for sending mp3 audio to icecast2 server, if pad link function not
called before PAUSED state
- added option to use GStreamer clock sync (as opposed to libshout's own sync)
- added tagging support for mp3 audio broadcasted
* gst/monoscope/gstmonoscope.c: (gst_monoscope_class_init):
debug info
2004-07-28 20:26:31 +00:00
2005-05-09 20:09:44 +00:00
gstbasesink_class - > render = GST_DEBUG_FUNCPTR ( gst_shout2send_render ) ;
gstbasesink_class - > event = GST_DEBUG_FUNCPTR ( gst_shout2send_event ) ;
ext/lame/gstlame.c: send tag events downstream
Original commit message from CVS:
2004-07-28 Zaheer Abbas Merali <zaheerabbas at merali dot org>
* ext/lame/gstlame.c: (gst_lame_chain): send tag events downstream
* ext/shout2/gstshout2.c: (gst_shout2send_protocol_get_type),
(gst_shout2send_get_type), (gst_shout2send_set_clock),
(gst_shout2send_class_init), (gst_shout2send_init),
(set_shout_metadata), (gst_shout2send_set_metadata),
(gst_shout2send_chain), (gst_shout2send_set_property),
(gst_shout2send_get_property), (gst_shout2send_connect),
(gst_shout2send_change_state):
* ext/shout2/gstshout2.h:
- fix for sending mp3 audio to icecast2 server, if pad link function not
called before PAUSED state
- added option to use GStreamer clock sync (as opposed to libshout's own sync)
- added tagging support for mp3 audio broadcasted
* gst/monoscope/gstmonoscope.c: (gst_monoscope_class_init):
debug info
2004-07-28 20:26:31 +00:00
GST_DEBUG_CATEGORY_INIT ( shout2_debug , " shout2 " , 0 , " shout2send element " ) ;
2002-10-27 18:43:29 +00:00
}
static void
2004-03-14 22:34:33 +00:00
gst_shout2send_init ( GstShout2send * shout2send )
2002-10-27 18:43:29 +00:00
{
2005-05-09 20:09:44 +00:00
GstPad * pad ;
2002-10-27 18:43:29 +00:00
2005-07-10 12:52:20 +00:00
pad = GST_BASE_SINK_PAD ( shout2send ) ;
2005-05-09 20:09:44 +00:00
gst_pad_set_setcaps_function ( pad , gst_shout2send_setcaps ) ;
ext/lame/gstlame.c: send tag events downstream
Original commit message from CVS:
2004-07-28 Zaheer Abbas Merali <zaheerabbas at merali dot org>
* ext/lame/gstlame.c: (gst_lame_chain): send tag events downstream
* ext/shout2/gstshout2.c: (gst_shout2send_protocol_get_type),
(gst_shout2send_get_type), (gst_shout2send_set_clock),
(gst_shout2send_class_init), (gst_shout2send_init),
(set_shout_metadata), (gst_shout2send_set_metadata),
(gst_shout2send_chain), (gst_shout2send_set_property),
(gst_shout2send_get_property), (gst_shout2send_connect),
(gst_shout2send_change_state):
* ext/shout2/gstshout2.h:
- fix for sending mp3 audio to icecast2 server, if pad link function not
called before PAUSED state
- added option to use GStreamer clock sync (as opposed to libshout's own sync)
- added tagging support for mp3 audio broadcasted
* gst/monoscope/gstmonoscope.c: (gst_monoscope_class_init):
debug info
2004-07-28 20:26:31 +00:00
shout2send - > clock = NULL ;
2002-10-27 18:43:29 +00:00
shout2send - > ip = g_strdup ( " 127.0.0.1 " ) ;
shout2send - > port = 8000 ;
shout2send - > password = g_strdup ( " hackme " ) ;
2005-05-09 20:09:44 +00:00
shout2send - > streamname = g_strdup ( " " ) ;
2002-10-27 18:43:29 +00:00
shout2send - > description = g_strdup ( " " ) ;
shout2send - > genre = g_strdup ( " " ) ;
shout2send - > mount = g_strdup ( " " ) ;
shout2send - > url = g_strdup ( " " ) ;
ext/lame/gstlame.c: send tag events downstream
Original commit message from CVS:
2004-07-28 Zaheer Abbas Merali <zaheerabbas at merali dot org>
* ext/lame/gstlame.c: (gst_lame_chain): send tag events downstream
* ext/shout2/gstshout2.c: (gst_shout2send_protocol_get_type),
(gst_shout2send_get_type), (gst_shout2send_set_clock),
(gst_shout2send_class_init), (gst_shout2send_init),
(set_shout_metadata), (gst_shout2send_set_metadata),
(gst_shout2send_chain), (gst_shout2send_set_property),
(gst_shout2send_get_property), (gst_shout2send_connect),
(gst_shout2send_change_state):
* ext/shout2/gstshout2.h:
- fix for sending mp3 audio to icecast2 server, if pad link function not
called before PAUSED state
- added option to use GStreamer clock sync (as opposed to libshout's own sync)
- added tagging support for mp3 audio broadcasted
* gst/monoscope/gstmonoscope.c: (gst_monoscope_class_init):
debug info
2004-07-28 20:26:31 +00:00
shout2send - > tags = gst_tag_list_new ( ) ;
2003-01-05 17:05:39 +00:00
shout2send - > protocol = SHOUT2SEND_PROTOCOL_HTTP ;
ext/lame/gstlame.c: send tag events downstream
Original commit message from CVS:
2004-07-28 Zaheer Abbas Merali <zaheerabbas at merali dot org>
* ext/lame/gstlame.c: (gst_lame_chain): send tag events downstream
* ext/shout2/gstshout2.c: (gst_shout2send_protocol_get_type),
(gst_shout2send_get_type), (gst_shout2send_set_clock),
(gst_shout2send_class_init), (gst_shout2send_init),
(set_shout_metadata), (gst_shout2send_set_metadata),
(gst_shout2send_chain), (gst_shout2send_set_property),
(gst_shout2send_get_property), (gst_shout2send_connect),
(gst_shout2send_change_state):
* ext/shout2/gstshout2.h:
- fix for sending mp3 audio to icecast2 server, if pad link function not
called before PAUSED state
- added option to use GStreamer clock sync (as opposed to libshout's own sync)
- added tagging support for mp3 audio broadcasted
* gst/monoscope/gstmonoscope.c: (gst_monoscope_class_init):
debug info
2004-07-28 20:26:31 +00:00
shout2send - > conn = NULL ;
shout2send - > audio_format = SHOUT_FORMAT_VORBIS ;
shout2send - > sync = FALSE ;
shout2send - > started = FALSE ;
}
static void
set_shout_metadata ( const GstTagList * list , const gchar * tag ,
gpointer user_data )
{
char * * shout_metadata = ( char * * ) user_data ;
gchar * value , * temp ;
GST_DEBUG ( " tag: %s being added " , tag ) ;
if ( strcmp ( tag , GST_TAG_ARTIST ) = = 0 ) {
if ( gst_tag_get_type ( tag ) = = G_TYPE_STRING ) {
if ( ! gst_tag_list_get_string ( list , tag , & value ) ) {
GST_DEBUG ( " Error reading \" %s \" tag value \n " , tag ) ;
return ;
}
/* shout_metadata should be NULL if title is after artist in list */
if ( * shout_metadata = = NULL ) {
* shout_metadata = g_strdup ( value ) ;
} else {
temp = g_strdup_printf ( " %s - %s " , value , * shout_metadata ) ;
g_free ( * shout_metadata ) ;
* shout_metadata = temp ;
}
}
} else if ( strcmp ( tag , GST_TAG_TITLE ) = = 0 ) {
if ( gst_tag_get_type ( tag ) = = G_TYPE_STRING ) {
if ( ! gst_tag_list_get_string ( list , tag , & value ) ) {
GST_DEBUG ( " Error reading \" %s \" tag value \n " , tag ) ;
return ;
}
/* shout_metadata should be NULL if title is before artist in list */
if ( * shout_metadata = = NULL ) {
* shout_metadata = g_strdup ( value ) ;
} else {
temp = g_strdup_printf ( " %s - %s " , * shout_metadata , value ) ;
g_free ( * shout_metadata ) ;
* shout_metadata = temp ;
}
}
}
GST_DEBUG ( " shout metadata is now: %s " , * shout_metadata ) ;
}
static void
gst_shout2send_set_metadata ( GstShout2send * shout2send )
{
#if 0
const GstTagList * user_tags ;
GstTagList * copy ;
char * tempmetadata ;
shout_metadata_t * pmetadata ;
g_return_if_fail ( shout2send ! = NULL ) ;
2005-11-22 12:38:33 +00:00
user_tags = gst_tag_setter_get_tag_list ( GST_TAG_SETTER ( shout2send ) ) ;
ext/lame/gstlame.c: send tag events downstream
Original commit message from CVS:
2004-07-28 Zaheer Abbas Merali <zaheerabbas at merali dot org>
* ext/lame/gstlame.c: (gst_lame_chain): send tag events downstream
* ext/shout2/gstshout2.c: (gst_shout2send_protocol_get_type),
(gst_shout2send_get_type), (gst_shout2send_set_clock),
(gst_shout2send_class_init), (gst_shout2send_init),
(set_shout_metadata), (gst_shout2send_set_metadata),
(gst_shout2send_chain), (gst_shout2send_set_property),
(gst_shout2send_get_property), (gst_shout2send_connect),
(gst_shout2send_change_state):
* ext/shout2/gstshout2.h:
- fix for sending mp3 audio to icecast2 server, if pad link function not
called before PAUSED state
- added option to use GStreamer clock sync (as opposed to libshout's own sync)
- added tagging support for mp3 audio broadcasted
* gst/monoscope/gstmonoscope.c: (gst_monoscope_class_init):
debug info
2004-07-28 20:26:31 +00:00
if ( ( shout2send - > tags = = NULL ) & & ( user_tags = = NULL ) ) {
return ;
}
copy = gst_tag_list_merge ( user_tags , shout2send - > tags ,
2005-11-22 12:38:33 +00:00
gst_tag_setter_get_tag_merge_mode ( GST_TAG_SETTER ( shout2send ) ) ) ;
ext/lame/gstlame.c: send tag events downstream
Original commit message from CVS:
2004-07-28 Zaheer Abbas Merali <zaheerabbas at merali dot org>
* ext/lame/gstlame.c: (gst_lame_chain): send tag events downstream
* ext/shout2/gstshout2.c: (gst_shout2send_protocol_get_type),
(gst_shout2send_get_type), (gst_shout2send_set_clock),
(gst_shout2send_class_init), (gst_shout2send_init),
(set_shout_metadata), (gst_shout2send_set_metadata),
(gst_shout2send_chain), (gst_shout2send_set_property),
(gst_shout2send_get_property), (gst_shout2send_connect),
(gst_shout2send_change_state):
* ext/shout2/gstshout2.h:
- fix for sending mp3 audio to icecast2 server, if pad link function not
called before PAUSED state
- added option to use GStreamer clock sync (as opposed to libshout's own sync)
- added tagging support for mp3 audio broadcasted
* gst/monoscope/gstmonoscope.c: (gst_monoscope_class_init):
debug info
2004-07-28 20:26:31 +00:00
/* lets get the artist and song tags */
tempmetadata = NULL ;
gst_tag_list_foreach ( ( GstTagList * ) copy , set_shout_metadata ,
( gpointer ) & tempmetadata ) ;
if ( tempmetadata ) {
pmetadata = shout_metadata_new ( ) ;
shout_metadata_add ( pmetadata , " song " , tempmetadata ) ;
shout_set_metadata ( shout2send - > conn , pmetadata ) ;
shout_metadata_free ( pmetadata ) ;
}
gst_tag_list_free ( copy ) ;
# endif
2002-10-27 18:43:29 +00:00
}
2005-05-09 20:09:44 +00:00
static gboolean
gst_shout2send_event ( GstBaseSink * sink , GstEvent * event )
2002-10-27 18:43:29 +00:00
{
GstShout2send * shout2send ;
ext/lame/gstlame.c: send tag events downstream
Original commit message from CVS:
2004-07-28 Zaheer Abbas Merali <zaheerabbas at merali dot org>
* ext/lame/gstlame.c: (gst_lame_chain): send tag events downstream
* ext/shout2/gstshout2.c: (gst_shout2send_protocol_get_type),
(gst_shout2send_get_type), (gst_shout2send_set_clock),
(gst_shout2send_class_init), (gst_shout2send_init),
(set_shout_metadata), (gst_shout2send_set_metadata),
(gst_shout2send_chain), (gst_shout2send_set_property),
(gst_shout2send_get_property), (gst_shout2send_connect),
(gst_shout2send_change_state):
* ext/shout2/gstshout2.h:
- fix for sending mp3 audio to icecast2 server, if pad link function not
called before PAUSED state
- added option to use GStreamer clock sync (as opposed to libshout's own sync)
- added tagging support for mp3 audio broadcasted
* gst/monoscope/gstmonoscope.c: (gst_monoscope_class_init):
debug info
2004-07-28 20:26:31 +00:00
shout_metadata_t * pmetadata ;
char * tempmetadata ;
2005-05-09 20:09:44 +00:00
shout2send = GST_SHOUT2SEND ( sink ) ;
switch ( GST_EVENT_TYPE ( event ) ) {
case GST_EVENT_TAG :
GST_DEBUG ( " tag event received " ) ;
/* vorbis audio doesnt need metadata setting on the icecast level, only mp3 */
if ( shout2send - > tags & & shout2send - > audio_format = = SHOUT_FORMAT_MP3 ) {
Various event updates and cleanups.
Original commit message from CVS:
* ext/amrnb/amrnbparse.c: (gst_amrnbparse_event),
(gst_amrnbparse_loop):
* ext/dv/gstdvdec.c: (gst_dvdec_handle_sink_event),
(gst_dvdec_handle_src_event), (gst_dvdec_decode_frame):
* ext/mad/gstid3tag.c: (gst_id3_tag_src_event),
(gst_id3_tag_sink_event), (gst_id3_tag_chain):
* ext/mad/gstmad.c: (gst_mad_src_query), (index_seek),
(normal_seek), (gst_mad_sink_event), (gst_mad_chain):
* ext/mpeg2dec/gstmpeg2dec.c:
* ext/shout2/gstshout2.c: (gst_shout2send_event):
* ext/sidplay/gstsiddec.cc:
* gst/avi/gstavidemux.c: (gst_avi_demux_handle_src_event),
(gst_avi_demux_send_event), (gst_avi_demux_stream_header),
(gst_avi_demux_handle_seek), (gst_avi_demux_process_next_entry):
* gst/goom/gstgoom.c: (gst_goom_event):
* gst/realmedia/rmdemux.c: (gst_rmdemux_sink_event),
(gst_rmdemux_chain), (gst_rmdemux_send_event),
(gst_rmdemux_add_stream):
* gst/wavparse/gstwavparse.c: (gst_wavparse_handle_seek),
(gst_wavparse_stream_headers), (gst_wavparse_stream_data),
(gst_wavparse_loop), (gst_wavparse_srcpad_event):
Various event updates and cleanups.
2005-07-27 18:37:25 +00:00
GstTagList * list ;
gst_event_parse_tag ( event , & list ) ;
2005-05-09 20:09:44 +00:00
gst_tag_list_insert ( shout2send - > tags ,
2005-11-22 12:38:33 +00:00
list ,
gst_tag_setter_get_tag_merge_mode ( GST_TAG_SETTER ( shout2send ) ) ) ;
2005-05-09 20:09:44 +00:00
/* lets get the artist and song tags */
tempmetadata = NULL ;
gst_tag_list_foreach ( ( GstTagList * ) shout2send - > tags ,
set_shout_metadata , ( gpointer ) & tempmetadata ) ;
if ( tempmetadata ) {
GST_DEBUG ( " shout metadata now: %s " , tempmetadata ) ;
pmetadata = shout_metadata_new ( ) ;
shout_metadata_add ( pmetadata , " song " , tempmetadata ) ;
shout_set_metadata ( shout2send - > conn , pmetadata ) ;
shout_metadata_free ( pmetadata ) ;
}
}
break ;
default :
GST_DEBUG ( " some other event received " ) ;
break ;
}
2002-10-27 18:43:29 +00:00
2005-05-09 20:09:44 +00:00
return TRUE ;
}
2002-10-27 18:43:29 +00:00
2005-05-09 20:09:44 +00:00
static GstFlowReturn
gst_shout2send_render ( GstBaseSink * sink , GstBuffer * buf )
{
GstShout2send * shout2send ;
glong ret ;
2002-10-27 18:43:29 +00:00
ext/lame/gstlame.c: send tag events downstream
Original commit message from CVS:
2004-07-28 Zaheer Abbas Merali <zaheerabbas at merali dot org>
* ext/lame/gstlame.c: (gst_lame_chain): send tag events downstream
* ext/shout2/gstshout2.c: (gst_shout2send_protocol_get_type),
(gst_shout2send_get_type), (gst_shout2send_set_clock),
(gst_shout2send_class_init), (gst_shout2send_init),
(set_shout_metadata), (gst_shout2send_set_metadata),
(gst_shout2send_chain), (gst_shout2send_set_property),
(gst_shout2send_get_property), (gst_shout2send_connect),
(gst_shout2send_change_state):
* ext/shout2/gstshout2.h:
- fix for sending mp3 audio to icecast2 server, if pad link function not
called before PAUSED state
- added option to use GStreamer clock sync (as opposed to libshout's own sync)
- added tagging support for mp3 audio broadcasted
* gst/monoscope/gstmonoscope.c: (gst_monoscope_class_init):
debug info
2004-07-28 20:26:31 +00:00
2005-05-09 20:09:44 +00:00
shout2send = GST_SHOUT2SEND ( sink ) ;
ext/lame/gstlame.c: send tag events downstream
Original commit message from CVS:
2004-07-28 Zaheer Abbas Merali <zaheerabbas at merali dot org>
* ext/lame/gstlame.c: (gst_lame_chain): send tag events downstream
* ext/shout2/gstshout2.c: (gst_shout2send_protocol_get_type),
(gst_shout2send_get_type), (gst_shout2send_set_clock),
(gst_shout2send_class_init), (gst_shout2send_init),
(set_shout_metadata), (gst_shout2send_set_metadata),
(gst_shout2send_chain), (gst_shout2send_set_property),
(gst_shout2send_get_property), (gst_shout2send_connect),
(gst_shout2send_change_state):
* ext/shout2/gstshout2.h:
- fix for sending mp3 audio to icecast2 server, if pad link function not
called before PAUSED state
- added option to use GStreamer clock sync (as opposed to libshout's own sync)
- added tagging support for mp3 audio broadcasted
* gst/monoscope/gstmonoscope.c: (gst_monoscope_class_init):
debug info
2004-07-28 20:26:31 +00:00
2006-02-07 13:39:08 +00:00
if ( ! shout2send - > started ) {
/* connect */
GST_DEBUG ( " Connection format is: %s " ,
shout2send - > audio_format = = SHOUT_FORMAT_VORBIS ? " vorbis " :
( shout2send - > audio_format = = SHOUT_FORMAT_MP3 ? " mp3 " : " unknown " ) ) ;
if ( shout_set_format ( shout2send - > conn ,
shout2send - > audio_format ) ! = SHOUTERR_SUCCESS ) {
GST_ERROR ( " Error setting connection format: %s \n " ,
shout_get_error ( shout2send - > conn ) ) ;
}
if ( shout_open ( shout2send - > conn ) = = SHOUTERR_SUCCESS ) {
g_print ( " connected to server... \n " ) ;
/* lets set metadata */
gst_shout2send_set_metadata ( shout2send ) ;
shout2send - > started = TRUE ;
} else {
GST_ERROR ( " Couldn't connect to server: %s " ,
shout_get_error ( shout2send - > conn ) ) ;
shout2send - > conn = FALSE ;
}
}
2005-05-09 20:09:44 +00:00
if ( shout2send - > clock & & shout2send - > sync ) {
//GST_DEBUG("using GStreamer clock to sync");
2005-06-29 17:57:44 +00:00
//gst_element_wait (GST_ELEMENT (shout2send), GST_BUFFER_TIMESTAMP (buf));
ext/lame/gstlame.c: send tag events downstream
Original commit message from CVS:
2004-07-28 Zaheer Abbas Merali <zaheerabbas at merali dot org>
* ext/lame/gstlame.c: (gst_lame_chain): send tag events downstream
* ext/shout2/gstshout2.c: (gst_shout2send_protocol_get_type),
(gst_shout2send_get_type), (gst_shout2send_set_clock),
(gst_shout2send_class_init), (gst_shout2send_init),
(set_shout_metadata), (gst_shout2send_set_metadata),
(gst_shout2send_chain), (gst_shout2send_set_property),
(gst_shout2send_get_property), (gst_shout2send_connect),
(gst_shout2send_change_state):
* ext/shout2/gstshout2.h:
- fix for sending mp3 audio to icecast2 server, if pad link function not
called before PAUSED state
- added option to use GStreamer clock sync (as opposed to libshout's own sync)
- added tagging support for mp3 audio broadcasted
* gst/monoscope/gstmonoscope.c: (gst_monoscope_class_init):
debug info
2004-07-28 20:26:31 +00:00
} else {
2005-05-09 20:09:44 +00:00
//GST_DEBUG("using libshout to sync");
shout_sync ( shout2send - > conn ) ;
}
ret = shout_send ( shout2send - > conn , GST_BUFFER_DATA ( buf ) ,
GST_BUFFER_SIZE ( buf ) ) ;
if ( ret ! = SHOUTERR_SUCCESS ) {
GST_WARNING ( " send error: %s... \n " , shout_get_error ( shout2send - > conn ) ) ;
g_signal_emit ( G_OBJECT ( shout2send ) ,
gst_shout2send_signals [ SIGNAL_CONNECTION_PROBLEM ] , 0 ,
shout_get_errno ( shout2send - > conn ) ) ;
ext/lame/gstlame.c: send tag events downstream
Original commit message from CVS:
2004-07-28 Zaheer Abbas Merali <zaheerabbas at merali dot org>
* ext/lame/gstlame.c: (gst_lame_chain): send tag events downstream
* ext/shout2/gstshout2.c: (gst_shout2send_protocol_get_type),
(gst_shout2send_get_type), (gst_shout2send_set_clock),
(gst_shout2send_class_init), (gst_shout2send_init),
(set_shout_metadata), (gst_shout2send_set_metadata),
(gst_shout2send_chain), (gst_shout2send_set_property),
(gst_shout2send_get_property), (gst_shout2send_connect),
(gst_shout2send_change_state):
* ext/shout2/gstshout2.h:
- fix for sending mp3 audio to icecast2 server, if pad link function not
called before PAUSED state
- added option to use GStreamer clock sync (as opposed to libshout's own sync)
- added tagging support for mp3 audio broadcasted
* gst/monoscope/gstmonoscope.c: (gst_monoscope_class_init):
debug info
2004-07-28 20:26:31 +00:00
}
2005-05-09 20:09:44 +00:00
return GST_FLOW_OK ;
2002-10-27 18:43:29 +00:00
}
static void
2004-03-14 22:34:33 +00:00
gst_shout2send_set_property ( GObject * object , guint prop_id ,
const GValue * value , GParamSpec * pspec )
2002-10-27 18:43:29 +00:00
{
GstShout2send * shout2send ;
2004-03-14 22:34:33 +00:00
g_return_if_fail ( GST_IS_SHOUT2SEND ( object ) ) ;
shout2send = GST_SHOUT2SEND ( object ) ;
2002-10-27 18:43:29 +00:00
switch ( prop_id ) {
2004-03-14 22:34:33 +00:00
case ARG_IP :
if ( shout2send - > ip )
2004-03-15 19:32:27 +00:00
g_free ( shout2send - > ip ) ;
2004-03-14 22:34:33 +00:00
shout2send - > ip = g_strdup ( g_value_get_string ( value ) ) ;
break ;
case ARG_PORT :
shout2send - > port = g_value_get_int ( value ) ;
break ;
case ARG_PASSWORD :
if ( shout2send - > password )
2004-03-15 19:32:27 +00:00
g_free ( shout2send - > password ) ;
2004-03-14 22:34:33 +00:00
shout2send - > password = g_strdup ( g_value_get_string ( value ) ) ;
break ;
2005-05-09 20:09:44 +00:00
case ARG_STREAMNAME : /* Name of the stream */
if ( shout2send - > streamname )
g_free ( shout2send - > streamname ) ;
shout2send - > streamname = g_strdup ( g_value_get_string ( value ) ) ;
2004-03-14 22:34:33 +00:00
break ;
2004-03-15 19:32:27 +00:00
case ARG_DESCRIPTION : /* Description of the stream */
2004-03-14 22:34:33 +00:00
if ( shout2send - > description )
2004-03-15 19:32:27 +00:00
g_free ( shout2send - > description ) ;
2004-03-14 22:34:33 +00:00
shout2send - > description = g_strdup ( g_value_get_string ( value ) ) ;
break ;
2004-03-15 19:32:27 +00:00
case ARG_GENRE : /* Genre of the stream */
2004-03-14 22:34:33 +00:00
if ( shout2send - > genre )
2004-03-15 19:32:27 +00:00
g_free ( shout2send - > genre ) ;
2004-03-14 22:34:33 +00:00
shout2send - > genre = g_strdup ( g_value_get_string ( value ) ) ;
break ;
2004-03-15 19:32:27 +00:00
case ARG_PROTOCOL : /* protocol to connect with */
2004-03-14 22:34:33 +00:00
shout2send - > protocol = g_value_get_enum ( value ) ;
break ;
2004-03-15 19:32:27 +00:00
case ARG_MOUNT : /* mountpoint of stream (icecast only) */
2004-03-14 22:34:33 +00:00
if ( shout2send - > mount )
2004-03-15 19:32:27 +00:00
g_free ( shout2send - > mount ) ;
2004-03-14 22:34:33 +00:00
shout2send - > mount = g_strdup ( g_value_get_string ( value ) ) ;
break ;
2004-03-15 19:32:27 +00:00
case ARG_URL : /* Url of the stream (I'm guessing) */
2004-03-14 22:34:33 +00:00
if ( shout2send - > url )
2004-03-15 19:32:27 +00:00
g_free ( shout2send - > url ) ;
2004-03-14 22:34:33 +00:00
shout2send - > url = g_strdup ( g_value_get_string ( value ) ) ;
break ;
ext/lame/gstlame.c: send tag events downstream
Original commit message from CVS:
2004-07-28 Zaheer Abbas Merali <zaheerabbas at merali dot org>
* ext/lame/gstlame.c: (gst_lame_chain): send tag events downstream
* ext/shout2/gstshout2.c: (gst_shout2send_protocol_get_type),
(gst_shout2send_get_type), (gst_shout2send_set_clock),
(gst_shout2send_class_init), (gst_shout2send_init),
(set_shout_metadata), (gst_shout2send_set_metadata),
(gst_shout2send_chain), (gst_shout2send_set_property),
(gst_shout2send_get_property), (gst_shout2send_connect),
(gst_shout2send_change_state):
* ext/shout2/gstshout2.h:
- fix for sending mp3 audio to icecast2 server, if pad link function not
called before PAUSED state
- added option to use GStreamer clock sync (as opposed to libshout's own sync)
- added tagging support for mp3 audio broadcasted
* gst/monoscope/gstmonoscope.c: (gst_monoscope_class_init):
debug info
2004-07-28 20:26:31 +00:00
case ARG_SYNC :
shout2send - > sync = g_value_get_boolean ( value ) ;
break ;
2004-03-14 22:34:33 +00:00
default :
break ;
2002-10-27 18:43:29 +00:00
}
}
static void
2004-03-14 22:34:33 +00:00
gst_shout2send_get_property ( GObject * object , guint prop_id , GValue * value ,
GParamSpec * pspec )
2002-10-27 18:43:29 +00:00
{
GstShout2send * shout2send ;
2004-03-14 22:34:33 +00:00
g_return_if_fail ( GST_IS_SHOUT2SEND ( object ) ) ;
shout2send = GST_SHOUT2SEND ( object ) ;
2002-10-27 18:43:29 +00:00
switch ( prop_id ) {
2004-03-14 22:34:33 +00:00
case ARG_IP :
g_value_set_string ( value , shout2send - > ip ) ;
break ;
case ARG_PORT :
g_value_set_int ( value , shout2send - > port ) ;
break ;
case ARG_PASSWORD :
g_value_set_string ( value , shout2send - > password ) ;
break ;
2005-05-09 20:09:44 +00:00
case ARG_STREAMNAME : /* Name of the stream */
g_value_set_string ( value , shout2send - > streamname ) ;
2004-03-14 22:34:33 +00:00
break ;
2004-03-15 19:32:27 +00:00
case ARG_DESCRIPTION : /* Description of the stream */
2004-03-14 22:34:33 +00:00
g_value_set_string ( value , shout2send - > description ) ;
break ;
2004-03-15 19:32:27 +00:00
case ARG_GENRE : /* Genre of the stream */
2004-03-14 22:34:33 +00:00
g_value_set_string ( value , shout2send - > genre ) ;
break ;
2004-03-15 19:32:27 +00:00
case ARG_PROTOCOL : /* protocol to connect with */
2004-03-14 22:34:33 +00:00
g_value_set_enum ( value , shout2send - > protocol ) ;
break ;
2004-03-15 19:32:27 +00:00
case ARG_MOUNT : /* mountpoint of stream (icecast only) */
2004-03-14 22:34:33 +00:00
g_value_set_string ( value , shout2send - > mount ) ;
break ;
2004-03-15 19:32:27 +00:00
case ARG_URL : /* Url of stream (I'm guessing) */
2004-03-14 22:34:33 +00:00
g_value_set_string ( value , shout2send - > url ) ;
break ;
ext/lame/gstlame.c: send tag events downstream
Original commit message from CVS:
2004-07-28 Zaheer Abbas Merali <zaheerabbas at merali dot org>
* ext/lame/gstlame.c: (gst_lame_chain): send tag events downstream
* ext/shout2/gstshout2.c: (gst_shout2send_protocol_get_type),
(gst_shout2send_get_type), (gst_shout2send_set_clock),
(gst_shout2send_class_init), (gst_shout2send_init),
(set_shout_metadata), (gst_shout2send_set_metadata),
(gst_shout2send_chain), (gst_shout2send_set_property),
(gst_shout2send_get_property), (gst_shout2send_connect),
(gst_shout2send_change_state):
* ext/shout2/gstshout2.h:
- fix for sending mp3 audio to icecast2 server, if pad link function not
called before PAUSED state
- added option to use GStreamer clock sync (as opposed to libshout's own sync)
- added tagging support for mp3 audio broadcasted
* gst/monoscope/gstmonoscope.c: (gst_monoscope_class_init):
debug info
2004-07-28 20:26:31 +00:00
case ARG_SYNC : /* Sync to clock */
g_value_set_boolean ( value , shout2send - > sync ) ;
break ;
2004-03-14 22:34:33 +00:00
default :
G_OBJECT_WARN_INVALID_PROPERTY_ID ( object , prop_id , pspec ) ;
break ;
2002-10-27 18:43:29 +00:00
}
}
2005-05-09 20:09:44 +00:00
static gboolean
gst_shout2send_setcaps ( GstPad * pad , GstCaps * caps )
2002-10-27 18:43:29 +00:00
{
2004-05-12 02:35:56 +00:00
const gchar * mimetype ;
ext/lame/gstlame.c: send tag events downstream
Original commit message from CVS:
2004-07-28 Zaheer Abbas Merali <zaheerabbas at merali dot org>
* ext/lame/gstlame.c: (gst_lame_chain): send tag events downstream
* ext/shout2/gstshout2.c: (gst_shout2send_protocol_get_type),
(gst_shout2send_get_type), (gst_shout2send_set_clock),
(gst_shout2send_class_init), (gst_shout2send_init),
(set_shout_metadata), (gst_shout2send_set_metadata),
(gst_shout2send_chain), (gst_shout2send_set_property),
(gst_shout2send_get_property), (gst_shout2send_connect),
(gst_shout2send_change_state):
* ext/shout2/gstshout2.h:
- fix for sending mp3 audio to icecast2 server, if pad link function not
called before PAUSED state
- added option to use GStreamer clock sync (as opposed to libshout's own sync)
- added tagging support for mp3 audio broadcasted
* gst/monoscope/gstmonoscope.c: (gst_monoscope_class_init):
debug info
2004-07-28 20:26:31 +00:00
GstShout2send * shout2send ;
2005-05-09 20:09:44 +00:00
gboolean ret = TRUE ;
2004-03-14 22:34:33 +00:00
ext/lame/gstlame.c: send tag events downstream
Original commit message from CVS:
2004-07-28 Zaheer Abbas Merali <zaheerabbas at merali dot org>
* ext/lame/gstlame.c: (gst_lame_chain): send tag events downstream
* ext/shout2/gstshout2.c: (gst_shout2send_protocol_get_type),
(gst_shout2send_get_type), (gst_shout2send_set_clock),
(gst_shout2send_class_init), (gst_shout2send_init),
(set_shout_metadata), (gst_shout2send_set_metadata),
(gst_shout2send_chain), (gst_shout2send_set_property),
(gst_shout2send_get_property), (gst_shout2send_connect),
(gst_shout2send_change_state):
* ext/shout2/gstshout2.h:
- fix for sending mp3 audio to icecast2 server, if pad link function not
called before PAUSED state
- added option to use GStreamer clock sync (as opposed to libshout's own sync)
- added tagging support for mp3 audio broadcasted
* gst/monoscope/gstmonoscope.c: (gst_monoscope_class_init):
debug info
2004-07-28 20:26:31 +00:00
shout2send = GST_SHOUT2SEND ( GST_OBJECT_PARENT ( pad ) ) ;
2004-05-12 02:35:56 +00:00
mimetype = gst_structure_get_name ( gst_caps_get_structure ( caps , 0 ) ) ;
2005-05-09 20:09:44 +00:00
GST_DEBUG ( " in setcaps function, mimetype of caps given is: %s " , mimetype ) ;
2004-05-12 02:35:56 +00:00
if ( ! strcmp ( mimetype , " audio/mpeg " ) ) {
ext/lame/gstlame.c: send tag events downstream
Original commit message from CVS:
2004-07-28 Zaheer Abbas Merali <zaheerabbas at merali dot org>
* ext/lame/gstlame.c: (gst_lame_chain): send tag events downstream
* ext/shout2/gstshout2.c: (gst_shout2send_protocol_get_type),
(gst_shout2send_get_type), (gst_shout2send_set_clock),
(gst_shout2send_class_init), (gst_shout2send_init),
(set_shout_metadata), (gst_shout2send_set_metadata),
(gst_shout2send_chain), (gst_shout2send_set_property),
(gst_shout2send_get_property), (gst_shout2send_connect),
(gst_shout2send_change_state):
* ext/shout2/gstshout2.h:
- fix for sending mp3 audio to icecast2 server, if pad link function not
called before PAUSED state
- added option to use GStreamer clock sync (as opposed to libshout's own sync)
- added tagging support for mp3 audio broadcasted
* gst/monoscope/gstmonoscope.c: (gst_monoscope_class_init):
debug info
2004-07-28 20:26:31 +00:00
shout2send - > audio_format = SHOUT_FORMAT_MP3 ;
2004-03-14 22:34:33 +00:00
}
2006-02-07 13:39:08 +00:00
else if ( ! strcmp ( mimetype , " application/ogg " ) ) {
ext/lame/gstlame.c: send tag events downstream
Original commit message from CVS:
2004-07-28 Zaheer Abbas Merali <zaheerabbas at merali dot org>
* ext/lame/gstlame.c: (gst_lame_chain): send tag events downstream
* ext/shout2/gstshout2.c: (gst_shout2send_protocol_get_type),
(gst_shout2send_get_type), (gst_shout2send_set_clock),
(gst_shout2send_class_init), (gst_shout2send_init),
(set_shout_metadata), (gst_shout2send_set_metadata),
(gst_shout2send_chain), (gst_shout2send_set_property),
(gst_shout2send_get_property), (gst_shout2send_connect),
(gst_shout2send_change_state):
* ext/shout2/gstshout2.h:
- fix for sending mp3 audio to icecast2 server, if pad link function not
called before PAUSED state
- added option to use GStreamer clock sync (as opposed to libshout's own sync)
- added tagging support for mp3 audio broadcasted
* gst/monoscope/gstmonoscope.c: (gst_monoscope_class_init):
debug info
2004-07-28 20:26:31 +00:00
shout2send - > audio_format = SHOUT_FORMAT_VORBIS ;
2004-03-14 22:34:33 +00:00
} else {
2005-05-09 20:09:44 +00:00
ret = FALSE ;
2002-10-27 18:43:29 +00:00
}
2005-05-09 20:09:44 +00:00
gst_caps_unref ( caps ) ;
return ret ;
2004-03-14 22:34:33 +00:00
2002-10-27 18:43:29 +00:00
}
2005-09-02 15:44:50 +00:00
static GstStateChangeReturn
gst_shout2send_change_state ( GstElement * element , GstStateChange transition )
2002-10-27 18:43:29 +00:00
{
GstShout2send * shout2send ;
2005-09-02 15:44:50 +00:00
GstStateChangeReturn ret ;
2002-10-27 18:43:29 +00:00
2003-01-05 17:05:39 +00:00
gshort proto = 3 ;
2002-10-27 18:43:29 +00:00
gchar * version_string ;
2005-09-02 15:44:50 +00:00
g_return_val_if_fail ( GST_IS_SHOUT2SEND ( element ) , GST_STATE_CHANGE_FAILURE ) ;
2002-10-27 18:43:29 +00:00
2004-03-14 22:34:33 +00:00
shout2send = GST_SHOUT2SEND ( element ) ;
2002-10-27 18:43:29 +00:00
2003-06-29 19:46:12 +00:00
GST_DEBUG ( " state pending %d " , GST_STATE_PENDING ( element ) ) ;
2002-10-27 18:43:29 +00:00
/* if going down into NULL state, close the file if it's open */
2005-09-02 15:44:50 +00:00
switch ( transition ) {
case GST_STATE_CHANGE_NULL_TO_READY :
2004-03-14 22:34:33 +00:00
shout2send - > conn = shout_new ( ) ;
switch ( shout2send - > protocol ) {
2004-03-15 19:32:27 +00:00
case SHOUT2SEND_PROTOCOL_XAUDIOCAST :
proto = SHOUT_PROTOCOL_XAUDIOCAST ;
break ;
case SHOUT2SEND_PROTOCOL_ICY :
proto = SHOUT_PROTOCOL_ICY ;
break ;
case SHOUT2SEND_PROTOCOL_HTTP :
proto = SHOUT_PROTOCOL_HTTP ;
break ;
2004-03-14 22:34:33 +00:00
}
if ( shout_set_protocol ( shout2send - > conn , proto ) ! = SHOUTERR_SUCCESS ) {
ext/lame/gstlame.c: send tag events downstream
Original commit message from CVS:
2004-07-28 Zaheer Abbas Merali <zaheerabbas at merali dot org>
* ext/lame/gstlame.c: (gst_lame_chain): send tag events downstream
* ext/shout2/gstshout2.c: (gst_shout2send_protocol_get_type),
(gst_shout2send_get_type), (gst_shout2send_set_clock),
(gst_shout2send_class_init), (gst_shout2send_init),
(set_shout_metadata), (gst_shout2send_set_metadata),
(gst_shout2send_chain), (gst_shout2send_set_property),
(gst_shout2send_get_property), (gst_shout2send_connect),
(gst_shout2send_change_state):
* ext/shout2/gstshout2.h:
- fix for sending mp3 audio to icecast2 server, if pad link function not
called before PAUSED state
- added option to use GStreamer clock sync (as opposed to libshout's own sync)
- added tagging support for mp3 audio broadcasted
* gst/monoscope/gstmonoscope.c: (gst_monoscope_class_init):
debug info
2004-07-28 20:26:31 +00:00
GST_DEBUG ( " shout2send configured with protocol: %d " ,
shout2send - > protocol ) ;
2004-03-15 19:32:27 +00:00
g_error ( " Error setting protocol: %s \n " ,
shout_get_error ( shout2send - > conn ) ) ;
2004-03-14 22:34:33 +00:00
}
/* --- FIXME: shout requires an ip, and fails if it is given a host. */
/* may want to put convert_to_ip(shout2send->ip) here */
if ( shout_set_host ( shout2send - > conn , shout2send - > ip ) ! = SHOUTERR_SUCCESS ) {
2004-03-15 19:32:27 +00:00
g_error ( " Error setting host: %s \n " ,
shout_get_error ( shout2send - > conn ) ) ;
2004-03-14 22:34:33 +00:00
}
/* --- */
if ( shout_set_port ( shout2send - > conn ,
2004-03-15 19:32:27 +00:00
shout2send - > port ) ! = SHOUTERR_SUCCESS ) {
g_error ( " Error setting port: %s \n " ,
shout_get_error ( shout2send - > conn ) ) ;
2004-03-14 22:34:33 +00:00
}
if ( shout_set_password ( shout2send - > conn ,
2004-03-15 19:32:27 +00:00
shout2send - > password ) ! = SHOUTERR_SUCCESS ) {
g_error ( " Error setting password: %s \n " ,
shout_get_error ( shout2send - > conn ) ) ;
2004-03-14 22:34:33 +00:00
}
if ( shout_set_name ( shout2send - > conn ,
2005-05-09 20:09:44 +00:00
shout2send - > streamname ) ! = SHOUTERR_SUCCESS ) {
g_error ( " Error setting stream name: %s \n " ,
2004-03-15 19:32:27 +00:00
shout_get_error ( shout2send - > conn ) ) ;
2004-03-14 22:34:33 +00:00
}
if ( shout_set_description ( shout2send - > conn ,
2004-03-15 19:32:27 +00:00
shout2send - > description ) ! = SHOUTERR_SUCCESS ) {
g_error ( " Error setting name: %s \n " ,
shout_get_error ( shout2send - > conn ) ) ;
2004-03-14 22:34:33 +00:00
}
if ( shout_set_genre ( shout2send - > conn ,
2004-03-15 19:32:27 +00:00
shout2send - > genre ) ! = SHOUTERR_SUCCESS ) {
g_error ( " Error setting name: %s \n " ,
shout_get_error ( shout2send - > conn ) ) ;
2004-03-14 22:34:33 +00:00
}
if ( shout_set_mount ( shout2send - > conn ,
2004-03-15 19:32:27 +00:00
shout2send - > mount ) ! = SHOUTERR_SUCCESS ) {
g_error ( " Error setting mount point: %s \n " ,
shout_get_error ( shout2send - > conn ) ) ;
2004-03-14 22:34:33 +00:00
}
if ( shout_set_user ( shout2send - > conn , " source " ) ! = SHOUTERR_SUCCESS ) {
2004-03-15 19:32:27 +00:00
g_error ( " Error setting user: %s \n " ,
shout_get_error ( shout2send - > conn ) ) ;
2004-03-14 22:34:33 +00:00
}
2005-10-16 14:33:05 +00:00
version_string = gst_version_string ( ) ;
2004-03-14 22:34:33 +00:00
if ( shout_set_agent ( shout2send - > conn ,
2004-03-15 19:32:27 +00:00
version_string ) ! = SHOUTERR_SUCCESS ) {
g_error ( " Error setting agent: %s \n " ,
shout_get_error ( shout2send - > conn ) ) ;
2004-03-14 22:34:33 +00:00
}
g_free ( version_string ) ;
break ;
2005-09-02 15:44:50 +00:00
case GST_STATE_CHANGE_PAUSED_TO_PLAYING :
2004-03-14 22:34:33 +00:00
break ;
2005-09-02 15:44:50 +00:00
case GST_STATE_CHANGE_READY_TO_PAUSED :
2005-05-09 20:09:44 +00:00
break ;
default :
break ;
}
2005-09-02 15:44:50 +00:00
ret = GST_ELEMENT_CLASS ( parent_class ) - > change_state ( element , transition ) ;
2005-05-09 20:09:44 +00:00
2005-09-02 15:44:50 +00:00
switch ( transition ) {
case GST_STATE_CHANGE_PLAYING_TO_PAUSED :
2005-05-09 20:09:44 +00:00
break ;
2005-09-02 15:44:50 +00:00
case GST_STATE_CHANGE_PAUSED_TO_READY :
2006-02-07 13:39:08 +00:00
if ( shout2send - > started ) {
shout_close ( shout2send - > conn ) ;
shout_free ( shout2send - > conn ) ;
shout2send - > started = FALSE ;
}
2004-03-14 22:34:33 +00:00
break ;
2005-09-02 15:44:50 +00:00
case GST_STATE_CHANGE_READY_TO_NULL :
2005-05-09 20:09:44 +00:00
break ;
2004-03-14 22:34:33 +00:00
default :
break ;
2002-10-27 18:43:29 +00:00
}
2004-03-14 22:34:33 +00:00
2005-05-09 20:09:44 +00:00
return ret ;
2002-10-27 18:43:29 +00:00
}
static gboolean
2004-03-14 22:34:33 +00:00
plugin_init ( GstPlugin * plugin )
2002-10-27 18:43:29 +00:00
{
2003-11-02 14:38:31 +00:00
return gst_element_register ( plugin , " shout2send " , GST_RANK_NONE ,
2004-03-14 22:34:33 +00:00
GST_TYPE_SHOUT2SEND ) ;
2002-10-27 18:43:29 +00:00
}
2004-03-14 22:34:33 +00:00
GST_PLUGIN_DEFINE ( GST_VERSION_MAJOR ,
GST_VERSION_MINOR ,
" shout2send " ,
" Sends data to an icecast server using libshout2 " ,
plugin_init ,
VERSION , " LGPL " , " libshout2 " , " http://www.icecast.org/download.html " )