diff --git a/src/caps.c b/src/caps.c index 09b5add..a24df06 100644 --- a/src/caps.c +++ b/src/caps.c @@ -20,7 +20,7 @@ const gchar *get_audio_sink_cap(unsigned int type) { format = GST_AUDIO_CAPS_MAKE("audio/x-raw, " "format = (string) " GST_AUDIO_NE( - S16) ", " + F32) ", " "layout = (string) interleaved, " "channels = (int) { 2 }, " "rate = (int) { 44100 }, " diff --git a/src/plugin.c b/src/plugin.c index 125b2ed..203bd97 100644 --- a/src/plugin.c +++ b/src/plugin.c @@ -29,6 +29,7 @@ struct _GstProjectMPrivate { GstClockTime first_frame_time; gboolean first_frame_received; + projectm_channels channels; }; G_DEFINE_TYPE_WITH_CODE(GstProjectM, gst_projectm, @@ -201,6 +202,7 @@ static void gst_projectm_init(GstProjectM *plugin) { plugin->easter_egg = DEFAULT_EASTER_EGG; plugin->preset_locked = DEFAULT_PRESET_LOCKED; plugin->priv->handle = NULL; + plugin->priv->channels = PROJECTM_STEREO; } static void gst_projectm_finalize(GObject *object) { @@ -293,6 +295,8 @@ static gboolean gst_projectm_setup(GstGLBaseAudioVisualizer *glav) { GST_VIDEO_INFO_HEIGHT(&bscope->vinfo), bscope->vinfo.fps_n, bscope->vinfo.fps_d, depth, bscope->req_spf); + plugin->priv->channels = bscope->ainfo.channels == 1 ? PROJECTM_MONO : PROJECTM_STEREO; + return TRUE; } @@ -319,6 +323,7 @@ static double get_seconds_since_first_frame(GstProjectM *plugin, static gboolean gst_projectm_render(GstGLBaseAudioVisualizer *glav, GstBuffer *audio, GstVideoFrame *video) { GstProjectM *plugin = GST_PROJECTM(glav); + GstAudioVisualizer *gstav = GST_AUDIO_VISUALIZER(glav); GstMapInfo audioMap; gboolean result = TRUE; @@ -336,8 +341,10 @@ static gboolean gst_projectm_render(GstGLBaseAudioVisualizer *glav, // audioMap.size / 8, audio->offset, audio->offset_end, // bscope->ainfo.rate, bscope->vinfo.fps_n, bscope->req_spf); - projectm_pcm_add_int16(plugin->priv->handle, (gint16 *)audioMap.data, - audioMap.size / 4, PROJECTM_STEREO); + projectm_pcm_add_float( + plugin->priv->handle, (gfloat *)audioMap.data, + audioMap.size / (sizeof(gfloat) * gstav->ainfo.channels), + plugin->priv->channels); // GST_DEBUG_OBJECT(plugin, "Audio Data: %d %d %d %d", ((gint16 // *)audioMap.data)[100], ((gint16 *)audioMap.data)[101], ((gint16