From cd4a7f5b3a11de80c8c0fd9f905f751595ffd55b Mon Sep 17 00:00:00 2001 From: hack Date: Thu, 22 May 2025 00:02:20 -0500 Subject: [PATCH 1/5] use f32 float audio format --- src/caps.c | 2 +- src/plugin.c | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) 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..0fb3c4e 100644 --- a/src/plugin.c +++ b/src/plugin.c @@ -336,8 +336,8 @@ 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 / 8, PROJECTM_STEREO); // GST_DEBUG_OBJECT(plugin, "Audio Data: %d %d %d %d", ((gint16 // *)audioMap.data)[100], ((gint16 *)audioMap.data)[101], ((gint16 From 2b8aa5f21c8368e1ae7c419853c7a7ad6c2065cc Mon Sep 17 00:00:00 2001 From: hack Date: Thu, 22 May 2025 13:03:56 -0500 Subject: [PATCH 2/5] replace hard-coded sample byte size --- src/plugin.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/plugin.c b/src/plugin.c index 0fb3c4e..2cd5c7f 100644 --- a/src/plugin.c +++ b/src/plugin.c @@ -319,6 +319,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 +337,9 @@ 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_float(plugin->priv->handle, (gfloat *)audioMap.data, - audioMap.size / 8, PROJECTM_STEREO); + projectm_pcm_add_float( + plugin->priv->handle, (gfloat *)audioMap.data, + audioMap.size / (sizeof(float) * gstav->ainfo.channels), PROJECTM_STEREO); // GST_DEBUG_OBJECT(plugin, "Audio Data: %d %d %d %d", ((gint16 // *)audioMap.data)[100], ((gint16 *)audioMap.data)[101], ((gint16 From d781c4586d21d8c56e2b439c3670b5a72c312d21 Mon Sep 17 00:00:00 2001 From: hack Date: Thu, 22 May 2025 13:52:07 -0500 Subject: [PATCH 3/5] allow mono --- src/plugin.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/plugin.c b/src/plugin.c index 2cd5c7f..b6d3dd8 100644 --- a/src/plugin.c +++ b/src/plugin.c @@ -339,7 +339,8 @@ static gboolean gst_projectm_render(GstGLBaseAudioVisualizer *glav, projectm_pcm_add_float( plugin->priv->handle, (gfloat *)audioMap.data, - audioMap.size / (sizeof(float) * gstav->ainfo.channels), PROJECTM_STEREO); + audioMap.size / (sizeof(float) * gstav->ainfo.channels), + gstav->ainfo.channels == 1 ? PROJECTM_MONO : PROJECTM_STEREO); // GST_DEBUG_OBJECT(plugin, "Audio Data: %d %d %d %d", ((gint16 // *)audioMap.data)[100], ((gint16 *)audioMap.data)[101], ((gint16 From 3bd6aeb74227245e385af78db8092a6b27f77ed6 Mon Sep 17 00:00:00 2001 From: hack Date: Thu, 22 May 2025 19:31:07 -0500 Subject: [PATCH 4/5] use gfloat --- src/plugin.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugin.c b/src/plugin.c index b6d3dd8..f7659e7 100644 --- a/src/plugin.c +++ b/src/plugin.c @@ -339,7 +339,7 @@ static gboolean gst_projectm_render(GstGLBaseAudioVisualizer *glav, projectm_pcm_add_float( plugin->priv->handle, (gfloat *)audioMap.data, - audioMap.size / (sizeof(float) * gstav->ainfo.channels), + audioMap.size / (sizeof(gfloat) * gstav->ainfo.channels), gstav->ainfo.channels == 1 ? PROJECTM_MONO : PROJECTM_STEREO); // GST_DEBUG_OBJECT(plugin, "Audio Data: %d %d %d %d", ((gint16 From ea504a096389f30cddcf5cfefb5fb475d1902deb Mon Sep 17 00:00:00 2001 From: hack Date: Fri, 23 May 2025 13:57:17 -0500 Subject: [PATCH 5/5] channel handling --- src/plugin.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/plugin.c b/src/plugin.c index f7659e7..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; } @@ -340,7 +344,7 @@ static gboolean gst_projectm_render(GstGLBaseAudioVisualizer *glav, projectm_pcm_add_float( plugin->priv->handle, (gfloat *)audioMap.data, audioMap.size / (sizeof(gfloat) * gstav->ainfo.channels), - gstav->ainfo.channels == 1 ? PROJECTM_MONO : PROJECTM_STEREO); + plugin->priv->channels); // GST_DEBUG_OBJECT(plugin, "Audio Data: %d %d %d %d", ((gint16 // *)audioMap.data)[100], ((gint16 *)audioMap.data)[101], ((gint16