コード例 #1
0
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);
}
コード例 #2
0
ファイル: swfdec_video_movie_as.c プロジェクト: fengye/swfdec
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);
}
コード例 #3
0
ファイル: swfdec_source.c プロジェクト: fengye/swfdec
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;
}
コード例 #4
0
ファイル: swfdec_source.c プロジェクト: fengye/swfdec
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;
}
コード例 #5
0
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;
}
コード例 #6
0
ファイル: swfdec_playback_pulse.c プロジェクト: fengye/swfdec
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;
}