X-Git-Url: https://git.stderr.nl/gitweb?a=blobdiff_plain;f=libchimara%2Fschannel.c;h=e9f705245111d5418c939bee0949c7744f61c315;hb=2dfa6eb26fe1b7e34e9ecf16b02a6f3254aded81;hp=d2df4892a49d77a3b724d23e89cc116fd2c5914d;hpb=993f3a070baa8131ddd159a55d5cde43a91d2154;p=projects%2Fchimara%2Fchimara.git diff --git a/libchimara/schannel.c b/libchimara/schannel.c index d2df489..e9f7052 100644 --- a/libchimara/schannel.c +++ b/libchimara/schannel.c @@ -400,8 +400,23 @@ glk_schannel_play_ext(schanid_t chan, glui32 snd, glui32 repeats, glui32 notify) WARNING(_("No resource map has been loaded yet.")); return 0; } - WARNING(_("Loading sound resources from alternative location not yet supported.")); - return 0; + gchar *filename = glk_data->resource_load_callback(CHIMARA_RESOURCE_SOUND, snd, glk_data->resource_load_callback_data); + if(!filename) { + WARNING(_("Error loading resource from alternative location.")); + return 0; + } + + GError *err = NULL; + GFile *file = g_file_new_for_path(filename); + stream = G_INPUT_STREAM(g_file_read(file, NULL, &err)); + if(!stream) { + IO_WARNING(_("Error loading resource from file"), filename, err->message); + g_free(filename); + g_object_unref(file); + return 0; + } + g_free(filename); + g_object_unref(file); } else { giblorb_result_t resource; giblorb_err_t result = giblorb_load_resource(glk_data->resource_map, giblorb_method_Memory, &resource, giblorb_ID_Snd, snd); @@ -414,6 +429,7 @@ glk_schannel_play_ext(schanid_t chan, glui32 snd, glui32 repeats, glui32 notify) chan->repeats = repeats; g_object_set(chan->source, "stream", stream, NULL); + g_object_unref(stream); /* Now owned by GStreamer element */ if(!gst_element_set_state(chan->pipeline, GST_STATE_PLAYING)) { WARNING_S(_("Could not set GstElement state to"), "PLAYING");