Skip to content

Commit cc38583

Browse files
committed
Add shuffle presets property
1 parent 9741260 commit cc38583

File tree

5 files changed

+24
-7
lines changed

5 files changed

+24
-7
lines changed

src/config.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ G_BEGIN_DECLS
3131
#define DEFAULT_ASPECT_CORRECTION TRUE
3232
#define DEFAULT_EASTER_EGG 0.0
3333
#define DEFAULT_PRESET_LOCKED FALSE
34+
#define DEFAULT_SHUFFLE_PRESETS TRUE
3435

3536
G_END_DECLS
3637

src/enums.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ enum
2424
PROP_ASPECT_CORRECTION,
2525
PROP_EASTER_EGG,
2626
PROP_PRESET_LOCKED,
27+
PROP_SHUFFLE_PRESETS,
2728
};
2829

2930
G_END_DECLS

src/plugin.c

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,9 @@ void gst_projectm_set_property(GObject *object, guint property_id,
9595
case PROP_PRESET_LOCKED:
9696
plugin->preset_locked = g_value_get_boolean(value);
9797
break;
98+
case PROP_SHUFFLE_PRESETS:
99+
plugin->shuffle_presets = g_value_get_boolean(value);
100+
break;
98101
default:
99102
G_OBJECT_WARN_INVALID_PROPERTY_ID(object, property_id, pspec);
100103
break;
@@ -151,6 +154,9 @@ void gst_projectm_get_property(GObject *object, guint property_id,
151154
case PROP_PRESET_LOCKED:
152155
g_value_set_boolean(value, plugin->preset_locked);
153156
break;
157+
case PROP_SHUFFLE_PRESETS:
158+
g_value_set_boolean(value, plugin->shuffle_presets);
159+
break;
154160
default:
155161
G_OBJECT_WARN_INVALID_PROPERTY_ID(object, property_id, pspec);
156162
break;
@@ -170,6 +176,7 @@ static void gst_projectm_init(GstProjectM *plugin)
170176
plugin->hard_cut_sensitivity = DEFAULT_HARD_CUT_SENSITIVITY;
171177
plugin->soft_cut_duration = DEFAULT_SOFT_CUT_DURATION;
172178
plugin->preset_duration = DEFAULT_PRESET_DURATION;
179+
plugin->shuffle_presets = DEFAULT_SHUFFLE_PRESETS;
173180

174181
const gchar *meshSizeStr = DEFAULT_MESH_SIZE;
175182
gint width, height;
@@ -250,7 +257,6 @@ static gboolean gst_projectm_setup(GstGLBaseAudioVisualizer *glav) {
250257
// Calculate required samples per frame
251258
bscope->req_spf = (bscope->ainfo.channels * bscope->ainfo.rate * 2) / bscope->vinfo.fps_n;
252259

253-
254260
// get GStreamer video format and map it to the corresponding OpenGL pixel format
255261
const GstVideoFormat video_format = GST_VIDEO_INFO_FORMAT(&bscope->vinfo);
256262

@@ -423,6 +429,12 @@ static void gst_projectm_class_init(GstProjectMClass *klass)
423429
DEFAULT_PRESET_LOCKED,
424430
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
425431

432+
g_object_class_install_property(gobject_class, PROP_SHUFFLE_PRESETS,
433+
g_param_spec_boolean("shuffle-presets", "Shuffle Presets",
434+
"Enables or disables preset shuffling. When enabled, the visualizer randomly selects presets from the playlist if presets are provided and not locked.",
435+
DEFAULT_SHUFFLE_PRESETS,
436+
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
437+
426438
gobject_class->finalize = gst_projectm_finalize;
427439

428440
scope_class->supported_gl_api = GST_GL_API_OPENGL3 | GST_GL_API_GLES2;

src/plugin.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ struct _GstProjectM
3030
gboolean aspect_correction;
3131
gfloat easter_egg;
3232
gboolean preset_locked;
33+
gboolean shuffle_presets;
3334

3435
GstProjectMPrivate *priv;
3536
};

src/projectm.c

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,7 @@
1313
GST_DEBUG_CATEGORY_STATIC(projectm_debug);
1414
#define GST_CAT_DEFAULT projectm_debug
1515

16-
projectm_handle projectm_init(GstProjectM *plugin)
17-
{
16+
projectm_handle projectm_init(GstProjectM *plugin) {
1817
projectm_handle handle = NULL;
1918
projectm_playlist_handle playlist = NULL;
2019
GST_DEBUG_CATEGORY_INIT(projectm_debug, "projectm",
@@ -54,7 +53,8 @@ projectm_handle projectm_init(GstProjectM *plugin)
5453
"mesh-size=(%lu, %lu)"
5554
"aspect-correction=%d, "
5655
"easter-egg=%f, "
57-
"preset-locked=%d, ",
56+
"preset-locked=%d, "
57+
"shuffle-presets=%d",
5858
plugin->preset_path,
5959
plugin->texture_dir_path,
6060
plugin->beat_sensitivity,
@@ -67,7 +67,8 @@ projectm_handle projectm_init(GstProjectM *plugin)
6767
plugin->mesh_height,
6868
plugin->aspect_correction,
6969
plugin->easter_egg,
70-
plugin->preset_locked);
70+
plugin->preset_locked,
71+
plugin->shuffle_presets);
7172

7273
// Load preset file if path is provided
7374
if (plugin->preset_path != NULL) {
@@ -95,8 +96,9 @@ projectm_handle projectm_init(GstProjectM *plugin)
9596
projectm_set_preset_duration(handle, plugin->preset_duration);
9697

9798
// kick off the first preset
98-
if (projectm_playlist_size(playlist) > 0 && ! plugin->preset_locked)
99-
projectm_playlist_play_next(playlist, true);
99+
if (projectm_playlist_size(playlist) > 1 && ! plugin->preset_locked && plugin->shuffle_presets) {
100+
projectm_playlist_play_next(playlist, true);
101+
}
100102
}
101103
else
102104
{

0 commit comments

Comments
 (0)