core/audio: Load initial track through an idle task
Let's save this disk access for when we're idle. Implements #11: Load initial track through an idle task Signed-off-by: Anna Schumaker <Anna@OcarinaProject.net>
This commit is contained in:
parent
cb6d451fb1
commit
279d6e0228
22
core/audio.c
22
core/audio.c
|
@ -4,9 +4,10 @@
|
||||||
#include <core/audio.h>
|
#include <core/audio.h>
|
||||||
#include <core/collection.h>
|
#include <core/collection.h>
|
||||||
#include <core/history.h>
|
#include <core/history.h>
|
||||||
|
#include <core/idle.h>
|
||||||
#include <core/tempq.h>
|
#include <core/tempq.h>
|
||||||
|
|
||||||
static struct file audio_file;
|
static struct file audio_file = FILE_INIT("cur_track", 0);
|
||||||
static struct track *audio_track = NULL;
|
static struct track *audio_track = NULL;
|
||||||
static GstElement *audio_player = NULL;
|
static GstElement *audio_player = NULL;
|
||||||
static struct audio_ops *audio_ops = NULL;
|
static struct audio_ops *audio_ops = NULL;
|
||||||
|
@ -92,10 +93,20 @@ static gboolean __audio_message(GstBus *bus, GstMessage *message, gpointer data)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void __audio_init_idle(void *data)
|
||||||
|
{
|
||||||
|
unsigned int track;
|
||||||
|
|
||||||
|
if (file_open(&audio_file, OPEN_READ)) {
|
||||||
|
file_readf(&audio_file, "%u", &track);
|
||||||
|
file_close(&audio_file);
|
||||||
|
__audio_load(track_get(track), GST_STATE_PAUSED);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void audio_init(int *argc, char ***argv, struct audio_ops *ops)
|
void audio_init(int *argc, char ***argv, struct audio_ops *ops)
|
||||||
{
|
{
|
||||||
unsigned int track;
|
|
||||||
GstBus *bus;
|
GstBus *bus;
|
||||||
|
|
||||||
gst_init(argc, argv);
|
gst_init(argc, argv);
|
||||||
|
@ -106,12 +117,7 @@ void audio_init(int *argc, char ***argv, struct audio_ops *ops)
|
||||||
audio_bus = gst_bus_add_watch(bus, __audio_message, NULL);
|
audio_bus = gst_bus_add_watch(bus, __audio_message, NULL);
|
||||||
gst_object_unref(bus);
|
gst_object_unref(bus);
|
||||||
|
|
||||||
file_init(&audio_file, "cur_track", 0);
|
idle_schedule(__audio_init_idle, NULL);
|
||||||
if (file_open(&audio_file, OPEN_READ)) {
|
|
||||||
file_readf(&audio_file, "%u", &track);
|
|
||||||
file_close(&audio_file);
|
|
||||||
__audio_load(track_get(track), GST_STATE_PAUSED);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void audio_deinit()
|
void audio_deinit()
|
||||||
|
|
|
@ -39,6 +39,7 @@ static void test_collection_sidebar()
|
||||||
core_init(&argc, NULL, &init_data);
|
core_init(&argc, NULL, &init_data);
|
||||||
gui_view_init();
|
gui_view_init();
|
||||||
gui_collection_init();
|
gui_collection_init();
|
||||||
|
while (idle_run_task()) {}
|
||||||
|
|
||||||
main_loop = g_main_loop_new(NULL, FALSE);
|
main_loop = g_main_loop_new(NULL, FALSE);
|
||||||
window = GTK_WINDOW(gui_builder_widget("o_window"));
|
window = GTK_WINDOW(gui_builder_widget("o_window"));
|
||||||
|
|
|
@ -42,6 +42,7 @@ static void test_idle()
|
||||||
gtk_init(&argc, NULL);
|
gtk_init(&argc, NULL);
|
||||||
gui_builder_init("share/ocarina/ocarina6.glade");
|
gui_builder_init("share/ocarina/ocarina6.glade");
|
||||||
core_init(&argc, NULL, &init_data);
|
core_init(&argc, NULL, &init_data);
|
||||||
|
while (idle_run_task()) {}
|
||||||
|
|
||||||
main_loop = g_main_loop_new(NULL, FALSE);
|
main_loop = g_main_loop_new(NULL, FALSE);
|
||||||
window = GTK_WINDOW(gui_builder_widget("o_window"));
|
window = GTK_WINDOW(gui_builder_widget("o_window"));
|
||||||
|
|
Loading…
Reference in New Issue