projects
/
projects
/
chimara
/
chimara.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Support for GStreamer 1.0
[projects/chimara/chimara.git]
/
libchimara
/
schannel.c
diff --git
a/libchimara/schannel.c
b/libchimara/schannel.c
index c92e7fc1e7e252b6a1fbd9f57b205096ee912bd1..3c75599691d9c70304cc5bb776805f5a6041b700 100644
(file)
--- a/
libchimara/schannel.c
+++ b/
libchimara/schannel.c
@@
-2,9
+2,9
@@
#include <glib.h>
#include <glib/gi18n-lib.h>
#include <libchimara/glk.h>
#include <glib.h>
#include <glib/gi18n-lib.h>
#include <libchimara/glk.h>
-#if
def GSTREAMER_SOUND
+#if
defined(GSTREAMER_0_10_SOUND) || defined(GSTREAMER_1_0_SOUND)
#include <gst/gst.h>
#include <gst/gst.h>
-#endif
+#endif
/* GSTREAMER_0_10_SOUND || GSTREAMER_1_0_SOUND */
#include "magic.h"
#include "schannel.h"
#include "chimara-glk-private.h"
#include "magic.h"
#include "schannel.h"
#include "chimara-glk-private.h"
@@
-15,9
+15,16
@@
#define VOLUME_TIMER_RESOLUTION 1.0 /* In milliseconds */
#define VOLUME_TIMER_RESOLUTION 1.0 /* In milliseconds */
-extern GPrivate *glk_data_key;
+#ifdef GSTREAMER_0_10_SOUND
+#define OGG_MIMETYPE "application/ogg"
+#endif
+#ifdef GSTREAMER_1_0_SOUND
+#define OGG_MIMETYPE "audio/ogg"
+#endif
+
+extern GPrivate glk_data_key;
-#if
def GSTREAMER_SOUND
+#if
defined(GSTREAMER_0_10_SOUND) || defined(GSTREAMER_1_0_SOUND)
/* Stop any currently playing sound on this channel, and remove any
format-specific GStreamer elements from the channel. */
static void
/* Stop any currently playing sound on this channel, and remove any
format-specific GStreamer elements from the channel. */
static void
@@
-121,7
+128,7
@@
static void
on_type_found(GstElement *typefind, guint probability, GstCaps *caps, schanid_t s)
{
gchar *type = gst_caps_to_string(caps);
on_type_found(GstElement *typefind, guint probability, GstCaps *caps, schanid_t s)
{
gchar *type = gst_caps_to_string(caps);
- if(strcmp(type,
"application/ogg"
) == 0) {
+ if(strcmp(type,
OGG_MIMETYPE
) == 0) {
s->demux = gst_element_factory_make("oggdemux", NULL);
s->decode = gst_element_factory_make("vorbisdec", NULL);
if(!s->demux || !s->decode) {
s->demux = gst_element_factory_make("oggdemux", NULL);
s->decode = gst_element_factory_make("vorbisdec", NULL);
if(!s->demux || !s->decode) {
@@
-166,7
+173,7
@@
on_type_found(GstElement *typefind, guint probability, GstCaps *caps, schanid_t
finally:
g_free(type);
}
finally:
g_free(type);
}
-#endif /* GSTREAMER_SOUND */
+#endif /* GSTREAMER_
0_10_SOUND || GSTREAMER_1_0_
SOUND */
/**
* glk_schannel_create:
/**
* glk_schannel_create:
@@
-220,8
+227,8
@@
glk_schannel_create(glui32 rock)
schanid_t
glk_schannel_create_ext(glui32 rock, glui32 volume)
{
schanid_t
glk_schannel_create_ext(glui32 rock, glui32 volume)
{
-#if
def GSTREAMER_SOUND
- ChimaraGlkPrivate *glk_data = g_private_get(glk_data_key);
+#if
defined(GSTREAMER_0_10_SOUND) || defined(GSTREAMER_1_0_SOUND)
+ ChimaraGlkPrivate *glk_data = g_private_get(
&
glk_data_key);
schanid_t s = g_new0(struct glk_schannel_struct, 1);
s->magic = MAGIC_SCHANNEL;
schanid_t s = g_new0(struct glk_schannel_struct, 1);
s->magic = MAGIC_SCHANNEL;
@@
-278,7
+285,7
@@
fail:
return NULL;
#else
return NULL;
return NULL;
#else
return NULL;
-#endif /* GSTREAMER_SOUND */
+#endif /* GSTREAMER_
0_10_SOUND || GSTREAMER_1_0_
SOUND */
}
/**
}
/**
@@
-293,8
+300,8
@@
glk_schannel_destroy(schanid_t chan)
{
VALID_SCHANNEL(chan, return);
{
VALID_SCHANNEL(chan, return);
-#if
def GSTREAMER_SOUND
- ChimaraGlkPrivate *glk_data = g_private_get(glk_data_key);
+#if
defined(GSTREAMER_0_10_SOUND) || defined(GSTREAMER_1_0_SOUND)
+ ChimaraGlkPrivate *glk_data = g_private_get(
&
glk_data_key);
if(!gst_element_set_state(chan->pipeline, GST_STATE_NULL))
WARNING_S(_("Could not set GstElement state to"), "NULL");
if(!gst_element_set_state(chan->pipeline, GST_STATE_NULL))
WARNING_S(_("Could not set GstElement state to"), "NULL");
@@
-313,7
+320,7
@@
glk_schannel_destroy(schanid_t chan)
chan->magic = MAGIC_FREE;
g_free(chan);
chan->magic = MAGIC_FREE;
g_free(chan);
-#endif
+#endif
/* GSTREAMER_0_10_SOUND || GSTREAMER_1_0_SOUND */
}
/**
}
/**
@@
-335,8
+342,8
@@
glk_schannel_iterate(schanid_t chan, glui32 *rockptr)
{
VALID_SCHANNEL_OR_NULL(chan, return NULL);
{
VALID_SCHANNEL_OR_NULL(chan, return NULL);
-#if
def GSTREAMER_SOUND
- ChimaraGlkPrivate *glk_data = g_private_get(glk_data_key);
+#if
defined(GSTREAMER_0_10_SOUND) || defined(GSTREAMER_1_0_SOUND)
+ ChimaraGlkPrivate *glk_data = g_private_get(
&
glk_data_key);
GList *retnode;
if(chan == NULL)
GList *retnode;
if(chan == NULL)
@@
-352,7
+359,7
@@
glk_schannel_iterate(schanid_t chan, glui32 *rockptr)
return retval;
#else
return NULL;
return retval;
#else
return NULL;
-#endif /* GSTREAMER_SOUND */
+#endif /* GSTREAMER_
0_10_SOUND || GSTREAMER_1_0_
SOUND */
}
/**
}
/**
@@
-442,8
+449,8
@@
glui32
glk_schannel_play_ext(schanid_t chan, glui32 snd, glui32 repeats, glui32 notify)
{
VALID_SCHANNEL(chan, return 0);
glk_schannel_play_ext(schanid_t chan, glui32 snd, glui32 repeats, glui32 notify)
{
VALID_SCHANNEL(chan, return 0);
-#if
def GSTREAMER_SOUND
- ChimaraGlkPrivate *glk_data = g_private_get(glk_data_key);
+#if
defined(GSTREAMER_0_10_SOUND) || defined(GSTREAMER_1_0_SOUND)
+ ChimaraGlkPrivate *glk_data = g_private_get(
&
glk_data_key);
GInputStream *stream;
/* Stop the previous sound */
GInputStream *stream;
/* Stop the previous sound */
@@
-511,7
+518,7
@@
glk_schannel_play_ext(schanid_t chan, glui32 snd, glui32 repeats, glui32 notify)
return 1;
#else
return 0;
return 1;
#else
return 0;
-#endif
+#endif
/* GSTREAMER_0_10_SOUND || GSTREAMER_1_0_SOUND */
}
/**
}
/**
@@
-556,8
+563,8
@@
glk_schannel_play_multi(schanid_t *chanarray, glui32 chancount, glui32 *sndarray
for(count = 0; count < chancount; count++)
VALID_SCHANNEL(chanarray[count], return 0);
for(count = 0; count < chancount; count++)
VALID_SCHANNEL(chanarray[count], return 0);
-#if
def GSTREAMER_SOUND
- ChimaraGlkPrivate *glk_data = g_private_get(glk_data_key);
+#if
defined(GSTREAMER_0_10_SOUND) || defined(GSTREAMER_1_0_SOUND)
+ ChimaraGlkPrivate *glk_data = g_private_get(
&
glk_data_key);
GInputStream *stream;
if(!glk_data->resource_map && !glk_data->resource_load_callback) {
GInputStream *stream;
if(!glk_data->resource_map && !glk_data->resource_load_callback) {
@@
-638,7
+645,7
@@
glk_schannel_play_multi(schanid_t *chanarray, glui32 chancount, glui32 *sndarray
return successes;
#else
return 0;
return successes;
#else
return 0;
-#endif
+#endif
/* GSTREAMER_0_10_SOUND || GSTREAMER_1_0_SOUND */
}
/**
}
/**
@@
-652,7
+659,7
@@
void
glk_schannel_stop(schanid_t chan)
{
VALID_SCHANNEL(chan, return);
glk_schannel_stop(schanid_t chan)
{
VALID_SCHANNEL(chan, return);
-#if
def GSTREAMER_SOUND
+#if
defined(GSTREAMER_0_10_SOUND) || defined(GSTREAMER_1_0_SOUND)
clean_up_after_playing_sound(chan);
#endif
}
clean_up_after_playing_sound(chan);
#endif
}
@@
-680,6
+687,7
@@
glk_schannel_pause(schanid_t chan)
/* Mark the channel as paused even if there is no sound playing yet */
chan->paused = TRUE;
/* Mark the channel as paused even if there is no sound playing yet */
chan->paused = TRUE;
+#if defined(GSTREAMER_0_10_SOUND) || defined(GSTREAMER_1_0_SOUND)
GstState state;
if(gst_element_get_state(chan->pipeline, &state, NULL, GST_CLOCK_TIME_NONE) != GST_STATE_CHANGE_SUCCESS) {
WARNING(_("Could not get GstElement state"));
GstState state;
if(gst_element_get_state(chan->pipeline, &state, NULL, GST_CLOCK_TIME_NONE) != GST_STATE_CHANGE_SUCCESS) {
WARNING(_("Could not get GstElement state"));
@@
-692,6
+700,7
@@
glk_schannel_pause(schanid_t chan)
WARNING_S(_("Could not set GstElement state to"), "PAUSED");
return;
}
WARNING_S(_("Could not set GstElement state to"), "PAUSED");
return;
}
+#endif /* GSTREAMER_0_10_SOUND || GSTREAMER_1_0_SOUND */
}
/**
}
/**
@@
-719,6
+728,7
@@
glk_schannel_unpause(schanid_t chan)
/* Mark the channel as not paused in any case */
chan->paused = FALSE;
/* Mark the channel as not paused in any case */
chan->paused = FALSE;
+#if defined(GSTREAMER_0_10_SOUND) || defined(GSTREAMER_1_0_SOUND)
GstState state;
if(gst_element_get_state(chan->pipeline, &state, NULL, GST_CLOCK_TIME_NONE) != GST_STATE_CHANGE_SUCCESS) {
WARNING(_("Could not get GstElement state"));
GstState state;
if(gst_element_get_state(chan->pipeline, &state, NULL, GST_CLOCK_TIME_NONE) != GST_STATE_CHANGE_SUCCESS) {
WARNING(_("Could not get GstElement state"));
@@
-731,6
+741,7
@@
glk_schannel_unpause(schanid_t chan)
WARNING_S(_("Could not set GstElement state to"), "PLAYING");
return;
}
WARNING_S(_("Could not set GstElement state to"), "PLAYING");
return;
}
+#endif /* GSTREAMER_0_10_SOUND || GSTREAMER_1_0_SOUND */
}
/**
}
/**
@@
-775,7
+786,7
@@
volume_glk_to_gstreamer(glui32 volume_glk)
return CLAMP(((double)volume_glk / 0x10000), 0.0, 10.0);
}
return CLAMP(((double)volume_glk / 0x10000), 0.0, 10.0);
}
-#if
def GSTREAMER_SOUND
+#if
defined(GSTREAMER_0_10_SOUND) || defined(GSTREAMER_1_0_SOUND)
static gboolean
volume_change_timeout(schanid_t chan)
{
static gboolean
volume_change_timeout(schanid_t chan)
{
@@
-806,7
+817,7
@@
volume_change_timeout(schanid_t chan)
return TRUE;
}
return TRUE;
}
-#endif /* GSTREAMER_SOUND */
+#endif /* GSTREAMER_
0_10_SOUND || GSTREAMER_1_0_
SOUND */
/**
* glk_schannel_set_volume_ext:
/**
* glk_schannel_set_volume_ext:
@@
-847,7
+858,7
@@
glk_schannel_set_volume_ext(schanid_t chan, glui32 vol, glui32 duration, glui32
VALID_SCHANNEL(chan, return);
/* Silently ignore out-of-range volume values */
VALID_SCHANNEL(chan, return);
/* Silently ignore out-of-range volume values */
-#if
def GSTREAMER_SOUND
+#if
defined(GSTREAMER_0_10_SOUND) || defined(GSTREAMER_1_0_SOUND)
/* Interrupt a previous volume change */
if(chan->volume_timer_id > 0)
g_source_remove(chan->volume_timer_id);
/* Interrupt a previous volume change */
if(chan->volume_timer_id > 0)
g_source_remove(chan->volume_timer_id);
@@
-874,7
+885,7
@@
glk_schannel_set_volume_ext(schanid_t chan, glui32 vol, glui32 duration, glui32
/* Set up a timer for the volume */
chan->volume_timer_id = g_timeout_add(VOLUME_TIMER_RESOLUTION, (GSourceFunc)volume_change_timeout, chan);
/* Set up a timer for the volume */
chan->volume_timer_id = g_timeout_add(VOLUME_TIMER_RESOLUTION, (GSourceFunc)volume_change_timeout, chan);
-#endif
+#endif
/* GSTREAMER_0_10_SOUND || GSTREAMER_1_0_SOUND */
}
/**
}
/**
@@
-893,8
+904,8
@@
glk_schannel_set_volume_ext(schanid_t chan, glui32 vol, glui32 duration, glui32
void
glk_sound_load_hint(glui32 snd, glui32 flag)
{
void
glk_sound_load_hint(glui32 snd, glui32 flag)
{
-#if
def GSTREAMER_SOUND
- ChimaraGlkPrivate *glk_data = g_private_get(glk_data_key);
+#if
defined(GSTREAMER_0_10_SOUND) || defined(GSTREAMER_1_0_SOUND)
+ ChimaraGlkPrivate *glk_data = g_private_get(
&
glk_data_key);
giblorb_result_t resource;
giblorb_err_t result;
giblorb_result_t resource;
giblorb_err_t result;
@@
-925,5
+936,5
@@
glk_sound_load_hint(glui32 snd, glui32 flag)
return;
}
}
return;
}
}
-#endif /* GSTREAMER_SOUND */
+#endif /* GSTREAMER_
0_10_SOUND || GSTREAMER_1_0_
SOUND */
}
}