diff options
Diffstat (limited to 'ext/mikmod')
-rw-r--r-- | ext/mikmod/drv_gst.c | 118 | ||||
-rw-r--r-- | ext/mikmod/gstmikmod.c | 382 | ||||
-rw-r--r-- | ext/mikmod/gstmikmod.h | 115 | ||||
-rw-r--r-- | ext/mikmod/mikmod_reader.c | 99 | ||||
-rw-r--r-- | ext/mikmod/mikmod_types.c | 318 | ||||
-rw-r--r-- | ext/mikmod/mikmod_types.h | 35 |
6 files changed, 546 insertions, 521 deletions
diff --git a/ext/mikmod/drv_gst.c b/ext/mikmod/drv_gst.c index 83d475ba..2d7b8e6e 100644 --- a/ext/mikmod/drv_gst.c +++ b/ext/mikmod/drv_gst.c @@ -10,94 +10,96 @@ static int buffer_size; static SBYTE *audiobuffer = NULL; extern int need_sync; -static BOOL mikmod_IsThere( void ) +static BOOL +mikmod_IsThere (void) { return 1; } -static BOOL mikmod_Init( void ) +static BOOL +mikmod_Init (void) { buffer_size = 32768; - if (!( audiobuffer = ( SBYTE * ) g_malloc( buffer_size ) )) + if (!(audiobuffer = (SBYTE *) g_malloc (buffer_size))) return 1; - - return VC_Init(); + + return VC_Init (); } -static void mikmod_Exit( void ) +static void +mikmod_Exit (void) { - VC_Exit(); + VC_Exit (); - if ( audiobuffer ) - { - g_free(audiobuffer); + if (audiobuffer) { + g_free (audiobuffer); audiobuffer = NULL; - } + } } -static void mikmod_Update( void ) +static void +mikmod_Update (void) { gint length; GstBuffer *outdata; - length = VC_WriteBytes((SBYTE *) audiobuffer, buffer_size); - - outdata = gst_buffer_new(); + length = VC_WriteBytes ((SBYTE *) audiobuffer, buffer_size); + + outdata = gst_buffer_new (); - GST_BUFFER_DATA( outdata ) = g_memdup( audiobuffer, length ); - GST_BUFFER_SIZE( outdata ) = length; + GST_BUFFER_DATA (outdata) = g_memdup (audiobuffer, length); + GST_BUFFER_SIZE (outdata) = length; - GST_BUFFER_TIMESTAMP( outdata ) = timestamp; + GST_BUFFER_TIMESTAMP (outdata) = timestamp; - if ( need_sync == 1 ) - { + if (need_sync == 1) { /* FIXME, send a flush event or something */ - need_sync = 0 ; + need_sync = 0; } - gst_pad_push( srcpad, GST_DATA (outdata )); - + gst_pad_push (srcpad, GST_DATA (outdata)); + } -static BOOL mikmod_Reset( void ) +static BOOL +mikmod_Reset (void) { - VC_Exit(); - return VC_Init(); + VC_Exit (); + return VC_Init (); } -MDRIVER drv_gst = -{ - NULL, - "mikmod", - "mikmod output driver v1.0", - 0, 255, +MDRIVER drv_gst = { + NULL, + "mikmod", + "mikmod output driver v1.0", + 0, 255, #if (LIBMIKMOD_VERSION > 0x030106) - "mikmod", - NULL, + "mikmod", + NULL, #endif - mikmod_IsThere, - VC_SampleLoad, - VC_SampleUnload, - VC_SampleSpace, - VC_SampleLength, - mikmod_Init, - mikmod_Exit, - mikmod_Reset, - VC_SetNumVoices, - VC_PlayStart, - VC_PlayStop, - mikmod_Update, - NULL, - VC_VoiceSetVolume, - VC_VoiceGetVolume, - VC_VoiceSetFrequency, - VC_VoiceGetFrequency, - VC_VoiceSetPanning, - VC_VoiceGetPanning, - VC_VoicePlay, - VC_VoiceStop, - VC_VoiceStopped, - VC_VoiceGetPosition, - VC_VoiceRealVolume + mikmod_IsThere, + VC_SampleLoad, + VC_SampleUnload, + VC_SampleSpace, + VC_SampleLength, + mikmod_Init, + mikmod_Exit, + mikmod_Reset, + VC_SetNumVoices, + VC_PlayStart, + VC_PlayStop, + mikmod_Update, + NULL, + VC_VoiceSetVolume, + VC_VoiceGetVolume, + VC_VoiceSetFrequency, + VC_VoiceGetFrequency, + VC_VoiceSetPanning, + VC_VoiceGetPanning, + VC_VoicePlay, + VC_VoiceStop, + VC_VoiceStopped, + VC_VoiceGetPosition, + VC_VoiceRealVolume }; diff --git a/ext/mikmod/gstmikmod.c b/ext/mikmod/gstmikmod.c index f8a6a4e8..89e057c1 100644 --- a/ext/mikmod/gstmikmod.c +++ b/ext/mikmod/gstmikmod.c @@ -34,12 +34,14 @@ GstElementDetails mikmod_details = { /* Filter signals and args */ -enum { +enum +{ /* FILL ME */ LAST_SIGNAL }; -enum { +enum +{ ARG_0, ARG_SONGNAME, ARG_MODTYPE, @@ -62,68 +64,67 @@ GstPad *srcpad; GstClockTime timestamp; int need_sync; -static GstStaticPadTemplate mikmod_src_factory = -GST_STATIC_PAD_TEMPLATE ( - "src", +static GstStaticPadTemplate mikmod_src_factory = GST_STATIC_PAD_TEMPLATE ("src", GST_PAD_SRC, GST_PAD_ALWAYS, - GST_STATIC_CAPS ( - "audio/x-raw-int, " + GST_STATIC_CAPS ("audio/x-raw-int, " "endianness = (int) BYTE_ORDER, " "signed = (boolean) TRUE, " "width = (int) 16, " "depth = (int) 16, " "rate = (int) { 8000, 11025, 22050, 44100 }, " "channels = (int) [ 1, 2 ]; " - "audio/x-raw-int, " + "audio/x-raw-int, " "signed = (boolean) FALSE, " "width = (int) 8, " "depth = (int) 8, " "rate = (int) { 8000, 11025, 22050, 44100 }, " - "channels = (int) [ 1, 2 ]" - ) -); + "channels = (int) [ 1, 2 ]") + ); static GstStaticPadTemplate mikmod_sink_factory = -GST_STATIC_PAD_TEMPLATE ( - "sink", +GST_STATIC_PAD_TEMPLATE ("sink", GST_PAD_SINK, GST_PAD_ALWAYS, GST_STATIC_CAPS ("audio/x-mod") -); + ); -static void gst_mikmod_base_init (gpointer g_class); -static void gst_mikmod_class_init (GstMikModClass *klass); -static void gst_mikmod_init (GstMikMod *filter); -static void gst_mikmod_set_property (GObject *object, guint id, const GValue *value, GParamSpec *pspec ); -static void gst_mikmod_get_property (GObject *object, guint id, GValue *value, GParamSpec *pspec ); -static GstPadLinkReturn gst_mikmod_srclink (GstPad *pad, const GstCaps *caps); -static GstCaps * gst_mikmod_srcfixate (GstPad *pad, const GstCaps *caps); -static void gst_mikmod_loop (GstElement *element); -static gboolean gst_mikmod_setup (GstMikMod *mikmod); -static GstElementStateReturn gst_mikmod_change_state (GstElement *element); +static void gst_mikmod_base_init (gpointer g_class); +static void gst_mikmod_class_init (GstMikModClass * klass); +static void gst_mikmod_init (GstMikMod * filter); +static void gst_mikmod_set_property (GObject * object, guint id, + const GValue * value, GParamSpec * pspec); +static void gst_mikmod_get_property (GObject * object, guint id, GValue * value, + GParamSpec * pspec); +static GstPadLinkReturn gst_mikmod_srclink (GstPad * pad, const GstCaps * caps); +static GstCaps *gst_mikmod_srcfixate (GstPad * pad, const GstCaps * caps); +static void gst_mikmod_loop (GstElement * element); +static gboolean gst_mikmod_setup (GstMikMod * mikmod); +static GstElementStateReturn gst_mikmod_change_state (GstElement * element); static GstElementClass *parent_class = NULL; GType -gst_mikmod_get_type(void) { +gst_mikmod_get_type (void) +{ static GType mikmod_type = 0; if (!mikmod_type) { static const GTypeInfo mikmod_info = { - sizeof(GstMikModClass), + sizeof (GstMikModClass), gst_mikmod_base_init, NULL, - (GClassInitFunc)gst_mikmod_class_init, + (GClassInitFunc) gst_mikmod_class_init, NULL, NULL, - sizeof(GstMikMod), + sizeof (GstMikMod), 0, - (GInstanceInitFunc)gst_mikmod_init, + (GInstanceInitFunc) gst_mikmod_init, }; - mikmod_type = g_type_register_static(GST_TYPE_ELEMENT, "GstMikmod", &mikmod_info, 0); + mikmod_type = + g_type_register_static (GST_TYPE_ELEMENT, "GstMikmod", &mikmod_info, 0); } return mikmod_type; } @@ -141,58 +142,58 @@ gst_mikmod_base_init (gpointer g_class) } static void -gst_mikmod_class_init (GstMikModClass *klass) +gst_mikmod_class_init (GstMikModClass * klass) { GObjectClass *gobject_class; GstElementClass *gstelement_class; - gobject_class = (GObjectClass*)klass; - gstelement_class = (GstElementClass*)klass; - - parent_class = g_type_class_ref(GST_TYPE_ELEMENT); - - g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_SONGNAME, - g_param_spec_string("songname","songname","songname", - NULL, G_PARAM_READABLE)); - g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_MODTYPE, - g_param_spec_string("modtype", "modtype", "modtype", - NULL, G_PARAM_READABLE )); - g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_MUSICVOLUME, - g_param_spec_int("musicvolume", "musivolume", "musicvolume", - 0, 128, 128, G_PARAM_READWRITE )); - g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_PANSEP, - g_param_spec_int("pansep", "pansep", "pansep", - 0, 128, 128, G_PARAM_READWRITE )); - g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_REVERB, - g_param_spec_int("reverb", "reverb", "reverb", - 0, 15, 0, G_PARAM_READWRITE )); - g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_SNDFXVOLUME, - g_param_spec_int("sndfxvolume", "sndfxvolume", "sndfxvolume", - 0, 128, 128, G_PARAM_READWRITE )); - g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_VOLUME, - g_param_spec_int("volume", "volume", "volume", - 0, 128, 96, G_PARAM_READWRITE )); - - g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_INTERP, - g_param_spec_boolean("interp", "interp", "interp", - FALSE, G_PARAM_READWRITE )); - g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_REVERSE, - g_param_spec_boolean("reverse", "reverse", "reverse", - FALSE, G_PARAM_READWRITE )); - g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_SURROUND, - g_param_spec_boolean("surround", "surround", "surround", - TRUE, G_PARAM_READWRITE )); - g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_HQMIXER, - g_param_spec_boolean("hqmixer", "hqmixer", "hqmixer", - FALSE, G_PARAM_READWRITE )); - g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_SOFT_MUSIC, - g_param_spec_boolean("soft_music", "soft_music", "soft_music", - TRUE, G_PARAM_READWRITE )); - g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_SOFT_SNDFX, - g_param_spec_boolean("soft_sndfx", "soft_sndfx", "soft_sndfx", - TRUE, G_PARAM_READWRITE )); - - + gobject_class = (GObjectClass *) klass; + gstelement_class = (GstElementClass *) klass; + + parent_class = g_type_class_ref (GST_TYPE_ELEMENT); + + g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_SONGNAME, + g_param_spec_string ("songname", "songname", "songname", + NULL, G_PARAM_READABLE)); + g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_MODTYPE, + g_param_spec_string ("modtype", "modtype", "modtype", + NULL, G_PARAM_READABLE)); + g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_MUSICVOLUME, + g_param_spec_int ("musicvolume", "musivolume", "musicvolume", + 0, 128, 128, G_PARAM_READWRITE)); + g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_PANSEP, + g_param_spec_int ("pansep", "pansep", "pansep", + 0, 128, 128, G_PARAM_READWRITE)); + g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_REVERB, + g_param_spec_int ("reverb", "reverb", "reverb", + 0, 15, 0, G_PARAM_READWRITE)); + g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_SNDFXVOLUME, + g_param_spec_int ("sndfxvolume", "sndfxvolume", "sndfxvolume", + 0, 128, 128, G_PARAM_READWRITE)); + g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_VOLUME, + g_param_spec_int ("volume", "volume", "volume", + 0, 128, 96, G_PARAM_READWRITE)); + + g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_INTERP, + g_param_spec_boolean ("interp", "interp", "interp", + FALSE, G_PARAM_READWRITE)); + g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_REVERSE, + g_param_spec_boolean ("reverse", "reverse", "reverse", + FALSE, G_PARAM_READWRITE)); + g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_SURROUND, + g_param_spec_boolean ("surround", "surround", "surround", + TRUE, G_PARAM_READWRITE)); + g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_HQMIXER, + g_param_spec_boolean ("hqmixer", "hqmixer", "hqmixer", + FALSE, G_PARAM_READWRITE)); + g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_SOFT_MUSIC, + g_param_spec_boolean ("soft_music", "soft_music", "soft_music", + TRUE, G_PARAM_READWRITE)); + g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_SOFT_SNDFX, + g_param_spec_boolean ("soft_sndfx", "soft_sndfx", "soft_sndfx", + TRUE, G_PARAM_READWRITE)); + + gobject_class->set_property = gst_mikmod_set_property; gobject_class->get_property = gst_mikmod_get_property; @@ -201,52 +202,54 @@ gst_mikmod_class_init (GstMikModClass *klass) static void -gst_mikmod_init (GstMikMod *filter) -{ - filter->sinkpad = gst_pad_new_from_template( - gst_static_pad_template_get (&mikmod_sink_factory),"sink"); - filter->srcpad = gst_pad_new_from_template( - gst_static_pad_template_get (&mikmod_src_factory),"src"); - - gst_element_add_pad(GST_ELEMENT(filter),filter->sinkpad); - gst_element_add_pad(GST_ELEMENT(filter),filter->srcpad); +gst_mikmod_init (GstMikMod * filter) +{ + filter->sinkpad = + gst_pad_new_from_template (gst_static_pad_template_get + (&mikmod_sink_factory), "sink"); + filter->srcpad = + gst_pad_new_from_template (gst_static_pad_template_get + (&mikmod_src_factory), "src"); + + gst_element_add_pad (GST_ELEMENT (filter), filter->sinkpad); + gst_element_add_pad (GST_ELEMENT (filter), filter->srcpad); gst_pad_set_link_function (filter->srcpad, gst_mikmod_srclink); gst_pad_set_fixate_function (filter->srcpad, gst_mikmod_srcfixate); - + gst_element_set_loop_function (GST_ELEMENT (filter), gst_mikmod_loop); - + filter->Buffer = NULL; - filter->stereo = TRUE; - filter->surround = TRUE; - filter->_16bit = TRUE; - filter->soft_music = TRUE; - filter->soft_sndfx = TRUE; - filter->mixfreq = 44100; - filter->reverb = 0; - filter->pansep = 128; + filter->stereo = TRUE; + filter->surround = TRUE; + filter->_16bit = TRUE; + filter->soft_music = TRUE; + filter->soft_sndfx = TRUE; + filter->mixfreq = 44100; + filter->reverb = 0; + filter->pansep = 128; filter->musicvolume = 128; - filter->volume = 96; + filter->volume = 96; filter->sndfxvolume = 128; - filter->songname = NULL; - filter->modtype = NULL; - + filter->songname = NULL; + filter->modtype = NULL; + filter->initialized = FALSE; } static GstCaps * -gst_mikmod_srcfixate (GstPad *pad, const GstCaps *caps) +gst_mikmod_srcfixate (GstPad * pad, const GstCaps * caps) { GstCaps *ret; GstStructure *structure; - + /* FIXME: select est caps here */ if (gst_caps_get_size (caps) > 1) return NULL; ret = gst_caps_copy (caps); structure = gst_caps_get_structure (ret, 0); - + if (gst_caps_structure_fixate_field_nearest_int (structure, "channels", 2)) return ret; if (gst_caps_structure_fixate_field_nearest_int (structure, "rate", 44100)) @@ -257,9 +260,9 @@ gst_mikmod_srcfixate (GstPad *pad, const GstCaps *caps) } static GstPadLinkReturn -gst_mikmod_srclink (GstPad *pad, const GstCaps *caps) +gst_mikmod_srclink (GstPad * pad, const GstCaps * caps) { - GstMikMod *filter; + GstMikMod *filter; GstStructure *structure; gint depth; gint channels; @@ -273,68 +276,69 @@ gst_mikmod_srclink (GstPad *pad, const GstCaps *caps) gst_structure_get_int (structure, "channels", &channels); filter->stereo = (channels == 2); gst_structure_get_int (structure, "rate", &filter->mixfreq); - + return gst_mikmod_setup (filter) ? GST_PAD_LINK_OK : GST_PAD_LINK_REFUSED; } static void -gst_mikmod_loop (GstElement *element) +gst_mikmod_loop (GstElement * element) { GstMikMod *mikmod; GstBuffer *buffer_in; g_return_if_fail (element != NULL); g_return_if_fail (GST_IS_MIKMOD (element)); - + mikmod = GST_MIKMOD (element); srcpad = mikmod->srcpad; mikmod->Buffer = NULL; - + if (!mikmod->initialized) { - while ((buffer_in = GST_BUFFER (gst_pad_pull( mikmod->sinkpad )))) { - if ( GST_IS_EVENT (buffer_in) ) { + while ((buffer_in = GST_BUFFER (gst_pad_pull (mikmod->sinkpad)))) { + if (GST_IS_EVENT (buffer_in)) { GstEvent *event = GST_EVENT (buffer_in); - - if (GST_EVENT_TYPE (event) == GST_EVENT_EOS) - break; + + if (GST_EVENT_TYPE (event) == GST_EVENT_EOS) + break; } else { - if ( mikmod->Buffer ) { - GstBuffer *merge; - merge = gst_buffer_merge( mikmod->Buffer, buffer_in ); - gst_buffer_unref( buffer_in ); - gst_buffer_unref( mikmod->Buffer ); + if (mikmod->Buffer) { + GstBuffer *merge; + + merge = gst_buffer_merge (mikmod->Buffer, buffer_in); + gst_buffer_unref (buffer_in); + gst_buffer_unref (mikmod->Buffer); mikmod->Buffer = merge; } else { mikmod->Buffer = buffer_in; } } - } - + } + if (!GST_PAD_CAPS (mikmod->srcpad)) { if (GST_PAD_LINK_SUCCESSFUL (gst_pad_renegotiate (mikmod->srcpad))) { GST_ELEMENT_ERROR (mikmod, CORE, NEGOTIATION, (NULL), (NULL)); return; } } - - MikMod_RegisterDriver(&drv_gst); - MikMod_RegisterAllLoaders(); - - MikMod_Init(""); - reader = GST_READER_new( mikmod ); - module = Player_LoadGeneric ( reader, 64, 0 ); - + + MikMod_RegisterDriver (&drv_gst); + MikMod_RegisterAllLoaders (); + + MikMod_Init (""); + reader = GST_READER_new (mikmod); + module = Player_LoadGeneric (reader, 64, 0); + gst_buffer_unref (mikmod->Buffer); - - if ( ! Player_Active() ) - Player_Start(module); - + + if (!Player_Active ()) + Player_Start (module); + mikmod->initialized = TRUE; } - if ( Player_Active() ) { - timestamp = ( module->sngtime / 1024.0 ) * GST_SECOND; - drv_gst.Update(); + if (Player_Active ()) { + timestamp = (module->sngtime / 1024.0) * GST_SECOND; + drv_gst.Update (); } else { gst_element_set_eos (GST_ELEMENT (mikmod)); gst_pad_push (mikmod->srcpad, GST_DATA (gst_event_new (GST_EVENT_EOS))); @@ -343,7 +347,7 @@ gst_mikmod_loop (GstElement *element) static gboolean -gst_mikmod_setup (GstMikMod *mikmod) +gst_mikmod_setup (GstMikMod * mikmod) { md_musicvolume = mikmod->musicvolume; md_pansep = mikmod->pansep; @@ -354,28 +358,28 @@ gst_mikmod_setup (GstMikMod *mikmod) md_mode = 0; - if ( mikmod->interp ) + if (mikmod->interp) md_mode = md_mode | DMODE_INTERP; - if ( mikmod->reverse ) + if (mikmod->reverse) md_mode = md_mode | DMODE_REVERSE; - if ( mikmod->surround ) + if (mikmod->surround) md_mode = md_mode | DMODE_SURROUND; - if ( mikmod->_16bit ) + if (mikmod->_16bit) md_mode = md_mode | DMODE_16BITS; - if ( mikmod->hqmixer ) + if (mikmod->hqmixer) md_mode = md_mode | DMODE_HQMIXER; - if ( mikmod->soft_music ) + if (mikmod->soft_music) md_mode = md_mode | DMODE_SOFT_MUSIC; - if ( mikmod->soft_sndfx ) + if (mikmod->soft_sndfx) md_mode = md_mode | DMODE_SOFT_SNDFX; - if ( mikmod->stereo ) + if (mikmod->stereo) md_mode = md_mode | DMODE_STEREO; return TRUE; @@ -383,9 +387,9 @@ gst_mikmod_setup (GstMikMod *mikmod) static GstElementStateReturn -gst_mikmod_change_state (GstElement *element) +gst_mikmod_change_state (GstElement * element) { -GstMikMod *mikmod; + GstMikMod *mikmod; g_return_val_if_fail (GST_IS_MIKMOD (element), GST_STATE_FAILURE); @@ -393,35 +397,31 @@ GstMikMod *mikmod; GST_DEBUG ("state pending %d", GST_STATE_PENDING (element)); - if (GST_STATE_PENDING (element) == GST_STATE_READY) - { - gst_mikmod_setup(mikmod); - - if ( Player_Active() ) - { - Player_TogglePause(); - Player_SetPosition( 0 ); - } - mikmod->initialized = FALSE; + if (GST_STATE_PENDING (element) == GST_STATE_READY) { + gst_mikmod_setup (mikmod); + + if (Player_Active ()) { + Player_TogglePause (); + Player_SetPosition (0); + } + mikmod->initialized = FALSE; } - - if (GST_STATE_PENDING (element) == GST_STATE_PLAYING) - { - if ( Player_Active() && Player_Paused() ) - Player_TogglePause(); - else - if ( ! Player_Active() ) - Player_Start(module); - + + if (GST_STATE_PENDING (element) == GST_STATE_PLAYING) { + if (Player_Active () && Player_Paused ()) + Player_TogglePause (); + else if (!Player_Active ()) + Player_Start (module); + } - - if (GST_STATE_PENDING (element) == GST_STATE_PAUSED) - if ( Player_Active() && ! Player_Paused() ) - Player_TogglePause(); - if (GST_STATE_PENDING (element) == GST_STATE_NULL) - MikMod_Exit(); - + if (GST_STATE_PENDING (element) == GST_STATE_PAUSED) + if (Player_Active () && !Player_Paused ()) + Player_TogglePause (); + + if (GST_STATE_PENDING (element) == GST_STATE_NULL) + MikMod_Exit (); + if (GST_ELEMENT_CLASS (parent_class)->change_state) return GST_ELEMENT_CLASS (parent_class)->change_state (element); @@ -432,13 +432,14 @@ GstMikMod *mikmod; static void -gst_mikmod_set_property (GObject *object, guint id, const GValue *value, GParamSpec *pspec ) +gst_mikmod_set_property (GObject * object, guint id, const GValue * value, + GParamSpec * pspec) { GstMikMod *filter; /* it's not null if we got it, but it might not be ours */ - g_return_if_fail(GST_IS_MIKMOD(object)); - filter = GST_MIKMOD(object); + g_return_if_fail (GST_IS_MIKMOD (object)); + filter = GST_MIKMOD (object); switch (id) { case ARG_SONGNAME: @@ -488,13 +489,14 @@ gst_mikmod_set_property (GObject *object, guint id, const GValue *value, GParamS } static void -gst_mikmod_get_property (GObject *object, guint id, GValue *value, GParamSpec *pspec ) +gst_mikmod_get_property (GObject * object, guint id, GValue * value, + GParamSpec * pspec) { GstMikMod *filter; /* it's not null if we got it, but it might not be ours */ - g_return_if_fail(GST_IS_MIKMOD(object)); - filter = GST_MIKMOD(object); + g_return_if_fail (GST_IS_MIKMOD (object)); + filter = GST_MIKMOD (object); switch (id) { case ARG_MUSICVOLUME: @@ -536,21 +538,17 @@ gst_mikmod_get_property (GObject *object, guint id, GValue *value, GParamSpec *p } static gboolean -plugin_init (GstPlugin *plugin) +plugin_init (GstPlugin * plugin) { - if (!gst_element_register (plugin, "mikmod", GST_RANK_SECONDARY, GST_TYPE_MIKMOD)) + if (!gst_element_register (plugin, "mikmod", GST_RANK_SECONDARY, + GST_TYPE_MIKMOD)) return FALSE; return TRUE; } -GST_PLUGIN_DEFINE ( - GST_VERSION_MAJOR, - GST_VERSION_MINOR, - "mikmod", - "Mikmod plugin library", - plugin_init, - VERSION, - "GPL", - GST_PACKAGE, - GST_ORIGIN) +GST_PLUGIN_DEFINE (GST_VERSION_MAJOR, + GST_VERSION_MINOR, + "mikmod", + "Mikmod plugin library", + plugin_init, VERSION, "GPL", GST_PACKAGE, GST_ORIGIN) diff --git a/ext/mikmod/gstmikmod.h b/ext/mikmod/gstmikmod.h index 208fc5b9..ce65f8e8 100644 --- a/ext/mikmod/gstmikmod.h +++ b/ext/mikmod/gstmikmod.h @@ -25,13 +25,14 @@ #include <gst/gst.h> #ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ +extern "C" +{ +#endif /* __cplusplus */ #define GST_TYPE_MIKMOD \ (gst_mikmod_get_type()) - + #define GST_MIKMOD(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_MIKMOD,GstMikMod)) #define GST_MIKMOD_CLASS(klass) \ @@ -40,68 +41,70 @@ extern "C" { (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_MIKMOD)) #define GST_IS_MIKMOD_CLASS(obj) \ (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_MIKMOD)) - -struct _GstMikMod { - GstElement element; - GstPad *sinkpad, *srcpad; - GstBuffer *Buffer; - - gchar *songname; - gchar *modtype; - gint musicvolume; - gint pansep; - gint reverb; - gint sndfxvolume; - gint volume; - gint mixfreq; - gint mode; - gboolean interp; - gboolean reverse; - gboolean surround; - gboolean _16bit; - gboolean hqmixer; - gboolean soft_music; - gboolean soft_sndfx; - gboolean stereo; - - gboolean initialized; -}; - -struct _GstMikModClass { - GstElementClass parent_class; -}; - -typedef struct _GstMikMod GstMikMod; -typedef struct _GstMikModClass GstMikModClass; - -extern MODULE *module; -extern MREADER *reader; -extern GstPad *srcpad; -extern GstClockTime timestamp; -extern int need_sync; - -GType gst_mikmod_get_type(void); + + struct _GstMikMod + { + GstElement element; + GstPad *sinkpad, *srcpad; + GstBuffer *Buffer; + + gchar *songname; + gchar *modtype; + gint musicvolume; + gint pansep; + gint reverb; + gint sndfxvolume; + gint volume; + gint mixfreq; + gint mode; + gboolean interp; + gboolean reverse; + gboolean surround; + gboolean _16bit; + gboolean hqmixer; + gboolean soft_music; + gboolean soft_sndfx; + gboolean stereo; + + gboolean initialized; + }; + + struct _GstMikModClass + { + GstElementClass parent_class; + }; + + typedef struct _GstMikMod GstMikMod; + typedef struct _GstMikModClass GstMikModClass; + + extern MODULE *module; + extern MREADER *reader; + extern GstPad *srcpad; + extern GstClockTime timestamp; + extern int need_sync; + + GType gst_mikmod_get_type (void); /* symbols for mikmod_reader.h */ -struct _GST_READER -{ - MREADER core; - GstMikMod *mik; - guint64 offset; - gshort eof; -}; + struct _GST_READER + { + MREADER core; + GstMikMod *mik; + guint64 offset; + gshort eof; + }; -typedef struct _GST_READER GST_READER; + typedef struct _GST_READER GST_READER; -MREADER *GST_READER_new( GstMikMod *mik ); + MREADER *GST_READER_new (GstMikMod * mik); /* symbols for drv_gst.c */ -extern MDRIVER drv_gst; + extern MDRIVER drv_gst; #ifdef __cplusplus } -#endif /* __cplusplus */ +#endif /* __cplusplus */ -#endif /* __GST_MIKMOD_H__ */ +#endif /* __GST_MIKMOD_H__ */ diff --git a/ext/mikmod/mikmod_reader.c b/ext/mikmod/mikmod_reader.c index 38b8402c..f8e83de1 100644 --- a/ext/mikmod/mikmod_reader.c +++ b/ext/mikmod/mikmod_reader.c @@ -9,57 +9,62 @@ extern int need_sync; -static BOOL GST_READER_Eof ( MREADER *reader ); -static BOOL GST_READER_Read( MREADER *reader, void *ptr, size_t size ); -static int GST_READER_Get ( MREADER *reader ); -static BOOL GST_READER_Seek( MREADER* reader,long offset,int whence ); -static long GST_READER_Tell( MREADER* reader ); +static BOOL GST_READER_Eof (MREADER * reader); +static BOOL GST_READER_Read (MREADER * reader, void *ptr, size_t size); +static int GST_READER_Get (MREADER * reader); +static BOOL GST_READER_Seek (MREADER * reader, long offset, int whence); +static long GST_READER_Tell (MREADER * reader); -static BOOL GST_READER_Eof( MREADER *reader ) +static BOOL +GST_READER_Eof (MREADER * reader) { -GST_READER *gst_reader; + GST_READER *gst_reader; - gst_reader = ( GST_READER * ) reader; + gst_reader = (GST_READER *) reader; return gst_reader->eof; } -static BOOL GST_READER_Read( MREADER *reader, void *ptr, size_t size ) +static BOOL +GST_READER_Read (MREADER * reader, void *ptr, size_t size) { -GST_READER *gst_reader; + GST_READER *gst_reader; - gst_reader = ( GST_READER * ) reader; - - memcpy( ptr, GST_BUFFER_DATA( gst_reader->mik->Buffer ) + gst_reader->offset, size); - gst_reader->offset = gst_reader->offset + size; + gst_reader = (GST_READER *) reader; + + memcpy (ptr, GST_BUFFER_DATA (gst_reader->mik->Buffer) + gst_reader->offset, + size); + gst_reader->offset = gst_reader->offset + size; return 1; } -static int GST_READER_Get ( MREADER *reader ) +static int +GST_READER_Get (MREADER * reader) { -GST_READER *gst_reader; -int res; + GST_READER *gst_reader; + int res; + + gst_reader = (GST_READER *) reader; - gst_reader = ( GST_READER * ) reader; - - res = *( GST_BUFFER_DATA( gst_reader->mik->Buffer ) + gst_reader->offset ); + res = *(GST_BUFFER_DATA (gst_reader->mik->Buffer) + gst_reader->offset); gst_reader->offset += 1; - + return res; } -static BOOL GST_READER_Seek( MREADER *reader, long offset, int whence ) +static BOOL +GST_READER_Seek (MREADER * reader, long offset, int whence) { -GST_READER *gst_reader; - - gst_reader = ( GST_READER * ) reader; + GST_READER *gst_reader; - if ( whence == SEEK_SET ) + gst_reader = (GST_READER *) reader; + + if (whence == SEEK_SET) gst_reader->offset = offset; else gst_reader->offset += offset; @@ -68,39 +73,41 @@ GST_READER *gst_reader; } -static long GST_READER_Tell( MREADER *reader ) +static long +GST_READER_Tell (MREADER * reader) { -GST_READER *gst_reader; + GST_READER *gst_reader; - gst_reader = ( GST_READER * ) reader; + gst_reader = (GST_READER *) reader; return gst_reader->offset; } -MREADER *GST_READER_new( GstMikMod *mik ) +MREADER * +GST_READER_new (GstMikMod * mik) { -GST_READER *gst_reader; - - gst_reader = ( GST_READER * ) g_malloc( sizeof( GST_READER )); + GST_READER *gst_reader; + + gst_reader = (GST_READER *) g_malloc (sizeof (GST_READER)); gst_reader->offset = 0; - gst_reader->eof = 0; - gst_reader->mik = mik; - if ( gst_reader ) - { - gst_reader->core.Eof = &GST_READER_Eof; - gst_reader->core.Read = &GST_READER_Read; - gst_reader->core.Get = &GST_READER_Get; - gst_reader->core.Seek = &GST_READER_Seek; - gst_reader->core.Tell = &GST_READER_Tell; + gst_reader->eof = 0; + gst_reader->mik = mik; + if (gst_reader) { + gst_reader->core.Eof = &GST_READER_Eof; + gst_reader->core.Read = &GST_READER_Read; + gst_reader->core.Get = &GST_READER_Get; + gst_reader->core.Seek = &GST_READER_Seek; + gst_reader->core.Tell = &GST_READER_Tell; } - return ( MREADER *)gst_reader; + return (MREADER *) gst_reader; } -void GST_READER_free ( MREADER *reader ) +void +GST_READER_free (MREADER * reader) { - if ( reader ) - g_free( reader ); + if (reader) + g_free (reader); } diff --git a/ext/mikmod/mikmod_types.c b/ext/mikmod/mikmod_types.c index f583d082..370f59cb 100644 --- a/ext/mikmod/mikmod_types.c +++ b/ext/mikmod/mikmod_types.c @@ -28,197 +28,211 @@ #define MODULEHEADERSIZE 0x438 - -gboolean MOD_CheckType( GstBuffer *buf ) + +gboolean +MOD_CheckType (GstBuffer * buf) { -gchar *data; - - data = GST_BUFFER_DATA( buf ) + MODULEHEADERSIZE; - - /* Protracker and variants */ - if (( ! memcmp( data, "M.K.", 4 )) || ( ! memcmp( data, "M!K!", 4 ))) - return TRUE; - - /* Star Tracker */ - if ((( ! memcmp( data, "FLT", 3 )) || ( ! memcmp( data, "EXO", 3 ))) && ( isdigit( data[3] ))) - return TRUE; - - /* Oktalyzer (Amiga) */ - if (! memcmp( data, "OKTA", 4 )) - return TRUE; - - /* Oktalyser (Atari) */ - if ( ! memcmp( data, "CD81", 4 )) - return TRUE; - - /* Fasttracker */ - if (( ! memcmp( data + 1, "CHN", 3 )) && ( isdigit( data[0] ))) - return TRUE; - - /* Fasttracker or Taketracker */ - if ((( ! memcmp( data + 2, "CH", 2 )) || ( ! memcmp( data + 2, "CN", 2 ))) && ( isdigit( data[0] )) && ( isdigit( data[1] ))) - return TRUE; - - return FALSE; + gchar *data; + + data = GST_BUFFER_DATA (buf) + MODULEHEADERSIZE; + + /* Protracker and variants */ + if ((!memcmp (data, "M.K.", 4)) || (!memcmp (data, "M!K!", 4))) + return TRUE; + + /* Star Tracker */ + if (((!memcmp (data, "FLT", 3)) || (!memcmp (data, "EXO", 3))) + && (isdigit (data[3]))) + return TRUE; + + /* Oktalyzer (Amiga) */ + if (!memcmp (data, "OKTA", 4)) + return TRUE; + + /* Oktalyser (Atari) */ + if (!memcmp (data, "CD81", 4)) + return TRUE; + + /* Fasttracker */ + if ((!memcmp (data + 1, "CHN", 3)) && (isdigit (data[0]))) + return TRUE; + + /* Fasttracker or Taketracker */ + if (((!memcmp (data + 2, "CH", 2)) || (!memcmp (data + 2, "CN", 2))) + && (isdigit (data[0])) && (isdigit (data[1]))) + return TRUE; + + return FALSE; } -gboolean Mod_669_CheckType( GstBuffer *buf ) +gboolean +Mod_669_CheckType (GstBuffer * buf) { -gchar *data; - - data = GST_BUFFER_DATA( buf ); - - if( ! memcmp( data, "if", 2 ) || ! memcmp( data, "JN", 2 )) - return TRUE; - - return FALSE; + gchar *data; + + data = GST_BUFFER_DATA (buf); + + if (!memcmp (data, "if", 2) || !memcmp (data, "JN", 2)) + return TRUE; + + return FALSE; } -gboolean Amf_CheckType( GstBuffer *buf ) +gboolean +Amf_CheckType (GstBuffer * buf) { -gchar *data; - - data = GST_BUFFER_DATA( buf ); - - if( memcmp( data, "AMF", 3) ) - return FALSE; - - data = GST_BUFFER_DATA( buf ) + 3; - - if (( (gint)*data >= 10 ) && ( (gint)*data <= 14 )) - return TRUE; - - return FALSE; + gchar *data; + + data = GST_BUFFER_DATA (buf); + + if (memcmp (data, "AMF", 3)) + return FALSE; + + data = GST_BUFFER_DATA (buf) + 3; + + if (((gint) * data >= 10) && ((gint) * data <= 14)) + return TRUE; + + return FALSE; } -gboolean Dsm_CheckType( GstBuffer *buf ) +gboolean +Dsm_CheckType (GstBuffer * buf) { -gchar *data; - - data = GST_BUFFER_DATA( buf ); - - if( ! memcmp( data, "RIFF", 4 ) && ! memcmp( data + 8, "DSMF", 4 )) - return TRUE; - - return FALSE; + gchar *data; + + data = GST_BUFFER_DATA (buf); + + if (!memcmp (data, "RIFF", 4) && !memcmp (data + 8, "DSMF", 4)) + return TRUE; + + return FALSE; } -gboolean Fam_CheckType( GstBuffer *buf ) +gboolean +Fam_CheckType (GstBuffer * buf) { -gchar *data; -static unsigned char FARSIG[4+3]={'F','A','R',0xfe,13,10,26}; - - data = GST_BUFFER_DATA( buf ); - - if(( memcmp( data, FARSIG, 4 )) || ( memcmp( data + 44, FARSIG + 4, 3 ))) - return FALSE; - - return 1; + gchar *data; + static unsigned char FARSIG[4 + 3] = { 'F', 'A', 'R', 0xfe, 13, 10, 26 }; + + data = GST_BUFFER_DATA (buf); + + if ((memcmp (data, FARSIG, 4)) || (memcmp (data + 44, FARSIG + 4, 3))) + return FALSE; + + return 1; } -gboolean Gdm_CheckType( GstBuffer *buf ) +gboolean +Gdm_CheckType (GstBuffer * buf) { -gchar *data; - - data = GST_BUFFER_DATA( buf ); - - if ( ! memcmp( data, "GDM\xfe", 4 ) && ! memcmp( data + 71, "GMFS", 4 )) - return TRUE; - - return FALSE; + gchar *data; + + data = GST_BUFFER_DATA (buf); + + if (!memcmp (data, "GDM\xfe", 4) && !memcmp (data + 71, "GMFS", 4)) + return TRUE; + + return FALSE; } -gboolean Imf_CheckType( GstBuffer *buf ) +gboolean +Imf_CheckType (GstBuffer * buf) { -gchar *data; - - data = GST_BUFFER_DATA( buf ) + 0x3c; - - if( ! memcmp( data, "IM10", 4)) - return TRUE; - - return FALSE; + gchar *data; + + data = GST_BUFFER_DATA (buf) + 0x3c; + + if (!memcmp (data, "IM10", 4)) + return TRUE; + + return FALSE; } -gboolean It_CheckType( GstBuffer *buf ) +gboolean +It_CheckType (GstBuffer * buf) { -gchar *data; - - data = GST_BUFFER_DATA( buf ); - - if( ! memcmp( data, "IMPM", 4 )) - return TRUE; - - return FALSE; + gchar *data; + + data = GST_BUFFER_DATA (buf); + + if (!memcmp (data, "IMPM", 4)) + return TRUE; + + return FALSE; } -gboolean M15_CheckType( GstBuffer *buf ) +gboolean +M15_CheckType (GstBuffer * buf) { - /* FIXME: M15 CheckType to do */ - return FALSE; + /* FIXME: M15 CheckType to do */ + return FALSE; } -gboolean Med_CheckType( GstBuffer *buf ) +gboolean +Med_CheckType (GstBuffer * buf) { -gchar *data; - - data = GST_BUFFER_DATA( buf ); - - if(( ! memcmp(data, "MMD0", 4 )) || ( memcmp( data, "MMD1", 4 ))) - return TRUE; - - return FALSE; + gchar *data; + + data = GST_BUFFER_DATA (buf); + + if ((!memcmp (data, "MMD0", 4)) || (memcmp (data, "MMD1", 4))) + return TRUE; + + return FALSE; } -gboolean Mtm_CheckType( GstBuffer *buf ) +gboolean +Mtm_CheckType (GstBuffer * buf) { -gchar *data; - - data = GST_BUFFER_DATA( buf ); - - if( ! memcmp( data, "MTM", 3 )) - return TRUE; - - return FALSE; + gchar *data; + + data = GST_BUFFER_DATA (buf); + + if (!memcmp (data, "MTM", 3)) + return TRUE; + + return FALSE; } -gboolean Okt_CheckType( GstBuffer *buf ) +gboolean +Okt_CheckType (GstBuffer * buf) { -gchar *data; - - data = GST_BUFFER_DATA( buf ); - - if( ! memcmp( data, "OKTSONG", 8 )) - return TRUE; - - return FALSE; + gchar *data; + + data = GST_BUFFER_DATA (buf); + + if (!memcmp (data, "OKTSONG", 8)) + return TRUE; + + return FALSE; } -gboolean S3m_CheckType( GstBuffer *buf ) +gboolean +S3m_CheckType (GstBuffer * buf) { -gchar *data; - - data = GST_BUFFER_DATA( buf ) + 0x2c; - - if( ! memcmp( data, "SCRM", 4 )) - return TRUE; - - return FALSE; + gchar *data; + + data = GST_BUFFER_DATA (buf) + 0x2c; + + if (!memcmp (data, "SCRM", 4)) + return TRUE; + + return FALSE; } -gboolean Xm_CheckType( GstBuffer *buf ) +gboolean +Xm_CheckType (GstBuffer * buf) { -gchar *data; - - data = GST_BUFFER_DATA( buf ); - - if( memcmp( data, "Extended Module: ", 17 )) - return FALSE; - - if( data[ 37 ] == 0x1a ) - return TRUE; - - return FALSE; -} + gchar *data; + data = GST_BUFFER_DATA (buf); + if (memcmp (data, "Extended Module: ", 17)) + return FALSE; + + if (data[37] == 0x1a) + return TRUE; + + return FALSE; +} diff --git a/ext/mikmod/mikmod_types.h b/ext/mikmod/mikmod_types.h index c431faf9..8559455c 100644 --- a/ext/mikmod/mikmod_types.h +++ b/ext/mikmod/mikmod_types.h @@ -20,25 +20,26 @@ #define __MIKMOD_TYPES_H__ #ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ +extern "C" +{ +#endif /* __cplusplus */ -gboolean MOD_CheckType (GstBuffer *buf); -gboolean Mod_669_CheckType (GstBuffer *buf); -gboolean Amf_CheckType (GstBuffer *buf); -gboolean Dsm_CheckType (GstBuffer *buf); -gboolean Fam_CheckType (GstBuffer *buf); -gboolean Gdm_CheckType (GstBuffer *buf); -gboolean Imf_CheckType (GstBuffer *buf); -gboolean It_CheckType (GstBuffer *buf); -gboolean M15_CheckType (GstBuffer *buf); -gboolean Mtm_CheckType (GstBuffer *buf); -gboolean Okt_CheckType (GstBuffer *buf); -gboolean S3m_CheckType (GstBuffer *buf); -gboolean Xm_CheckType (GstBuffer *buf); + gboolean MOD_CheckType (GstBuffer * buf); + gboolean Mod_669_CheckType (GstBuffer * buf); + gboolean Amf_CheckType (GstBuffer * buf); + gboolean Dsm_CheckType (GstBuffer * buf); + gboolean Fam_CheckType (GstBuffer * buf); + gboolean Gdm_CheckType (GstBuffer * buf); + gboolean Imf_CheckType (GstBuffer * buf); + gboolean It_CheckType (GstBuffer * buf); + gboolean M15_CheckType (GstBuffer * buf); + gboolean Mtm_CheckType (GstBuffer * buf); + gboolean Okt_CheckType (GstBuffer * buf); + gboolean S3m_CheckType (GstBuffer * buf); + gboolean Xm_CheckType (GstBuffer * buf); #ifdef __cplusplus } -#endif /* __cplusplus */ +#endif /* __cplusplus */ -#endif /* __MIKMOD_TYPES_H__ */ +#endif /* __MIKMOD_TYPES_H__ */ |