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:
Anna Schumaker 2016-02-24 08:18:04 -05:00
parent cb6d451fb1
commit 279d6e0228
3 changed files with 16 additions and 8 deletions

View File

@ -4,9 +4,10 @@
#include <core/audio.h>
#include <core/collection.h>
#include <core/history.h>
#include <core/idle.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 GstElement *audio_player = NULL;
static struct audio_ops *audio_ops = NULL;
@ -92,10 +93,20 @@ static gboolean __audio_message(GstBus *bus, GstMessage *message, gpointer data)
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)
{
unsigned int track;
GstBus *bus;
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);
gst_object_unref(bus);
file_init(&audio_file, "cur_track", 0);
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);
}
idle_schedule(__audio_init_idle, NULL);
}
void audio_deinit()

View File

@ -39,6 +39,7 @@ static void test_collection_sidebar()
core_init(&argc, NULL, &init_data);
gui_view_init();
gui_collection_init();
while (idle_run_task()) {}
main_loop = g_main_loop_new(NULL, FALSE);
window = GTK_WINDOW(gui_builder_widget("o_window"));

View File

@ -42,6 +42,7 @@ static void test_idle()
gtk_init(&argc, NULL);
gui_builder_init("share/ocarina/ocarina6.glade");
core_init(&argc, NULL, &init_data);
while (idle_run_task()) {}
main_loop = g_main_loop_new(NULL, FALSE);
window = GTK_WINDOW(gui_builder_widget("o_window"));