SwfdecAudio * swfdec_audio_swf_stream_new (SwfdecPlayer *player, SwfdecSprite *sprite, guint id) { SwfdecAudioSwfStream *stream; guint i, tag; SwfdecBuffer *buffer; g_return_val_if_fail (SWFDEC_IS_PLAYER (player), NULL); g_return_val_if_fail (SWFDEC_IS_SPRITE (sprite), NULL); stream = g_object_new (SWFDEC_TYPE_AUDIO_SWF_STREAM, NULL); stream->sprite = g_object_ref (sprite); stream->id = id; i = id; do { i--; if (!swfdec_sprite_get_action (sprite, i, &tag, &buffer)) { g_assert_not_reached (); } if (tag == SWFDEC_TAG_SOUNDSTREAMHEAD || tag == SWFDEC_TAG_SOUNDSTREAMHEAD2) { swfdec_audio_swf_stream_head (stream, buffer); goto found; } } while (i > 0); SWFDEC_ERROR ("No SoundStreamHead tag found in sprite %u", SWFDEC_CHARACTER (sprite)->id); swfdec_audio_stream_done (SWFDEC_AUDIO_STREAM (stream)); found: swfdec_audio_add (SWFDEC_AUDIO (stream), player); return SWFDEC_AUDIO (stream); }
void swfdec_video_movie_init_context (SwfdecPlayer *player) { SwfdecAsContext *context; SwfdecAsObject *video, *proto; SwfdecAsValue val; g_return_if_fail (SWFDEC_IS_PLAYER (player)); context = SWFDEC_AS_CONTEXT (player); video = SWFDEC_AS_OBJECT (swfdec_as_object_add_function (context->global, SWFDEC_AS_STR_Video, NULL)); SWFDEC_SANDBOX (context->global)->Video = video; proto = swfdec_as_object_new_empty (context); /* set the right properties on the Video object */ SWFDEC_AS_VALUE_SET_OBJECT (&val, proto); swfdec_as_object_set_variable_and_flags (video, SWFDEC_AS_STR_prototype, &val, SWFDEC_AS_VARIABLE_HIDDEN | SWFDEC_AS_VARIABLE_PERMANENT); /* set the right properties on the Video.prototype object */ SWFDEC_AS_VALUE_SET_OBJECT (&val, video); swfdec_as_object_set_variable_and_flags (proto, SWFDEC_AS_STR_constructor, &val, SWFDEC_AS_VARIABLE_HIDDEN | SWFDEC_AS_VARIABLE_PERMANENT); SWFDEC_AS_VALUE_SET_OBJECT (&val, context->Object_prototype); swfdec_as_object_set_variable_and_flags (proto, SWFDEC_AS_STR___proto__, &val, SWFDEC_AS_VARIABLE_HIDDEN | SWFDEC_AS_VARIABLE_PERMANENT); }
guint swfdec_iterate_add (SwfdecPlayer *player) { GSource *source; guint id; g_return_val_if_fail (SWFDEC_IS_PLAYER (player), 0); source = swfdec_iterate_source_new (player, 1.0); id = g_source_attach (source, NULL); g_source_unref (source); return id; }
GSource * swfdec_iterate_source_new (SwfdecPlayer *player, double speed) { SwfdecIterateSource *source; g_return_val_if_fail (SWFDEC_IS_PLAYER (player), NULL); g_return_val_if_fail (speed > 0.0, NULL); source = (SwfdecIterateSource *) g_source_new (&swfdec_iterate_funcs, sizeof (SwfdecIterateSource)); source->player = player; g_object_add_weak_pointer (G_OBJECT (source->player), (gpointer) &source->player); source->speed = 1.0 / speed; source->notify = g_signal_connect (player, "advance", G_CALLBACK (swfdec_iterate_source_advance_cb), source); g_get_current_time (&source->last); return (GSource *) source; }
SwfdecPlayback * swfdec_playback_open (SwfdecPlayer *player, GMainContext *context) { SwfdecPlayback *sound; const GList *walk; g_return_val_if_fail (SWFDEC_IS_PLAYER (player), NULL); g_return_val_if_fail (context != NULL, NULL); sound = g_new0 (SwfdecPlayback, 1); sound->player = player; g_signal_connect (player, "advance", G_CALLBACK (advance_before), sound); g_signal_connect (player, "audio-added", G_CALLBACK (audio_added), sound); g_signal_connect (player, "audio-removed", G_CALLBACK (audio_removed), sound); for (walk = swfdec_player_get_audio (player); walk; walk = walk->next) { swfdec_playback_stream_open (sound, walk->data); } g_main_context_ref (context); sound->context = context; return sound; }
SwfdecPlayback * swfdec_playback_open (SwfdecPlayer *player, GMainContext *context) { SwfdecPlayback *sound; const GList *walk; pa_mainloop_api *pa_api; g_return_val_if_fail (SWFDEC_IS_PLAYER (player), NULL); g_return_val_if_fail (context != NULL, NULL); sound = g_new0 (SwfdecPlayback, 1); sound->player = player; g_signal_connect (player, "advance", G_CALLBACK (advance_before), sound); g_signal_connect (player, "audio-added", G_CALLBACK (audio_added), sound); g_signal_connect (player, "audio-removed", G_CALLBACK (audio_removed), sound); /* Create our mainloop attachment to glib. XXX: I hope this means we don't * have to run the main loop using pa functions. */ sound->pa_mainloop = pa_glib_mainloop_new (context); pa_api = pa_glib_mainloop_get_api (sound->pa_mainloop); sound->pa = pa_context_new (pa_api, "swfdec"); pa_context_set_state_callback (sound->pa, context_state_callback, sound); pa_context_connect (sound->pa, NULL, /* default server */ 0, /* default flags */ NULL /* spawning api */ ); for (walk = swfdec_player_get_audio (player); walk; walk = walk->next) { swfdec_playback_stream_open (sound, walk->data); } g_main_context_ref (context); sound->context = context; return sound; }