int
main (int argc, char *argv[])
{
  ClutterActor *vtexture;
  int i;

  clutter_gst_init (&argc, &argv);

  for (i = 0; ; i++)
  {
    g_debug("VideoTexure #%d", i);
    vtexture = clutter_gst_video_texture_new();
    g_object_ref_sink (vtexture);
    g_object_unref (vtexture);
  }

  return EXIT_SUCCESS;
}
static void
mex_music_player_init (MexMusicPlayer *self)
{
  GError *error = NULL;
  ClutterActor *box;
  MexMusicPlayerPrivate *priv;
  ClutterActor *button;

  priv = self->priv = MUSIC_PLAYER_PRIVATE (self);

  priv->script = clutter_script_new ();
  clutter_script_load_from_resource (priv->script,
                                     "/org/media-explorer/MediaExplorer/json/"
                                     "music-player.json",
                                     &error);

  if (error)
    {
      g_error (G_STRLOC " %s", error->message);
      g_clear_error (&error);
    }

  box = mex_script_get_actor (priv->script, "box");
  g_assert (box);

  clutter_actor_add_child (CLUTTER_ACTOR (self), box);


  /* labels */
  priv->title_label = mex_script_get_actor (priv->script, "title-label");
  priv->subtitle_label = mex_script_get_actor (priv->script, "subtitle-label");

  /* play */
  priv->play_button = mex_script_get_actor (priv->script, "play-button");
  g_signal_connect_swapped (priv->play_button, "clicked",
                            G_CALLBACK (mex_music_player_play_toggle), self);

  /* next */
  button = mex_script_get_actor (priv->script, "next-button");
  g_signal_connect_swapped (button, "clicked",
                            G_CALLBACK (mex_music_player_next), self);

  /* previous */
  button = mex_script_get_actor (priv->script, "previous-button");
  g_signal_connect_swapped (button, "clicked",
                            G_CALLBACK (mex_music_player_previous), self);

  /* stop */
  button = mex_script_get_actor (priv->script, "stop-button");
  g_signal_connect_swapped (button, "clicked",
                            G_CALLBACK (mex_music_player_quit), self);

  /* repeat */
  button = mex_script_get_actor (priv->script, "repeat-button");
  g_signal_connect_swapped (button, "notify::toggled",
                            G_CALLBACK (mex_music_player_repeat_toggled), self);

  button = mex_script_get_actor (priv->script, "shuffle-button");
  g_signal_connect_swapped (button, "notify::toggled",
                            G_CALLBACK (mex_music_player_shuffle_toggled), self);


  /* player */
  priv->player = (ClutterMedia *) clutter_gst_video_texture_new ();
  g_signal_connect (priv->player, "notify",
                    G_CALLBACK (mex_music_player_notify_cb), self);
  g_signal_connect (priv->player, "eos",
                    G_CALLBACK (mex_music_player_eos_cb), self);

  /* slider */
  priv->slider = mex_script_get_actor (priv->script, "progress-slider");
  priv->slider_notify_id = g_signal_connect (priv->slider, "notify::value",
                                             G_CALLBACK (mex_music_player_slider_notify),
                                             self);


  g_signal_connect (self, "captured-event",
                    G_CALLBACK (mex_music_player_captured_event), NULL);
}
Exemple #3
0
static void
mex_player_init (MexPlayer *self)
{
  MexPlayerPrivate *priv;

  self->priv = priv = PLAYER_PRIVATE (self);

#ifdef USE_PLAYER_CLUTTER_GST
  priv->media = (ClutterMedia *) clutter_gst_video_texture_new ();

  /* We want to keep a reference to the media here to ensure consistency with
   * the D-BUS client interface behaviour
   */
  g_object_ref_sink (priv->media);

  clutter_container_add_actor (CLUTTER_CONTAINER (self),
                               CLUTTER_ACTOR (priv->media));
  clutter_texture_set_keep_aspect_ratio (CLUTTER_TEXTURE (priv->media), TRUE);
  clutter_container_child_set (CLUTTER_CONTAINER (self),
                               CLUTTER_ACTOR (priv->media),
                               "fit", TRUE, NULL);

  /* Use progressive download when possible. Don't enable that yet, the
   * behaviour of seeking in the non already downloaded part of the stream
   * is not great. Either disable seeking in that case or find out why.*/
#if 0
  video_texture = CLUTTER_GST_VIDEO_TEXTURE (priv->media);
  clutter_gst_video_texture_set_buffering_mode (video_texture,
						CLUTTER_GST_BUFFERING_MODE_DOWNLOAD);
#endif
#else
#ifdef USE_PLAYER_DBUS
  priv->media = (ClutterMedia *) mex_player_client_new ();
#else
#ifdef USE_PLAYER_SURFACE
  priv->media = (ClutterMedia *) mex_surface_player_new ();
#else
#error Unexpected player setup
#endif
#endif
#endif

  g_signal_connect (priv->media, "eos", G_CALLBACK (media_eos_cb), self);
  g_signal_connect (priv->media, "notify::playing",
                    G_CALLBACK (media_playing_cb), self);
  g_signal_connect (priv->media, "notify::progress",
                    G_CALLBACK (media_update_progress), self);


#if defined(USE_PLAYER_SURFACE) || defined (USE_PLAYER_CLUTTER_GST)
  {
    GError *error = NULL;
    priv->bridge = mex_media_dbus_bridge_new (priv->media);
    if (!mex_media_dbus_bridge_register (priv->bridge, &error))
      {
        g_warning (G_STRLOC ": Error registering player on D-BUS");
        g_clear_error (&error);
      }
  }
#endif

  /* add info panel */
  priv->info_panel = mex_info_panel_new (MEX_INFO_PANEL_MODE_FULL);
  mx_widget_set_disabled (MX_WIDGET (priv->info_panel), TRUE);
  clutter_container_add_actor (CLUTTER_CONTAINER (self), priv->info_panel);
  clutter_container_child_set (CLUTTER_CONTAINER (self), priv->info_panel,
                               "y-fill", FALSE, "y-align", MX_ALIGN_END,
                               NULL);
  clutter_actor_set_opacity (priv->info_panel, 0);

  /* add media controls */
  priv->controls = mex_media_controls_new ();
  g_signal_connect (priv->controls, "stopped", G_CALLBACK (controls_stopped_cb),
                    self);
  mex_media_controls_set_media (MEX_MEDIA_CONTROLS (priv->controls),
                                priv->media);
  clutter_container_add_actor (CLUTTER_CONTAINER (self), priv->controls);
  clutter_container_child_set (CLUTTER_CONTAINER (self), priv->controls,
                               "y-fill", FALSE, "y-align", MX_ALIGN_END,
                               NULL);

  priv->screensaver = mex_screensaver_new ();

  /* start in idle mode */
  mex_player_set_idle_mode (MEX_PLAYER (self), TRUE);
}
Exemple #4
0
int
main (int argc, char *argv[])
{
  ClutterActor *video;

  /* So we can fade out at the end. */
  clutter_x11_set_use_argb_visual (TRUE);

  if (clutter_gst_init (&argc, &argv) != CLUTTER_INIT_SUCCESS)
    return EXIT_FAILURE;

  if (argc < 2)
    {
      g_print ("Usage: %s [OPTIONS] <video file>\n", argv[0]);
      return EXIT_FAILURE;
    }

  if (!clutter_color_from_string (&bg_color, BG_COLOR))
    {
      g_warning ("Invalid BG_COLOR");
      exit (1);
    }

  stage = clutter_stage_new ();

  /* Clutter's full-screening code does not allow us to
   * set both that and _NET_WM_STATE_ABOVE, so do the state
   * management ourselves for now. */
#if 0
  clutter_stage_set_fullscreen (CLUTTER_STAGE (stage), TRUE);
#endif

  /* Clutter will set maximum size restrictions (meaning not
   * full screen) unless I set this. */
  clutter_stage_set_user_resizable (CLUTTER_STAGE (stage), TRUE);

  clutter_stage_set_use_alpha (CLUTTER_STAGE (stage), TRUE);

  clutter_actor_set_background_color (stage, &bg_color);
  clutter_actor_set_layout_manager (stage,
                                    clutter_bin_layout_new (CLUTTER_BIN_ALIGNMENT_FIXED,
                                                            CLUTTER_BIN_ALIGNMENT_FIXED));

  clutter_actor_realize (stage);
  set_above_and_fullscreen ();

  video = clutter_gst_video_texture_new ();
  clutter_actor_set_x_expand (video, TRUE);
  clutter_actor_set_y_expand (video, TRUE);
  clutter_actor_set_x_align (video, CLUTTER_ACTOR_ALIGN_CENTER);
  clutter_actor_set_y_align (video, CLUTTER_ACTOR_ALIGN_CENTER);
  set_idle_material (CLUTTER_GST_VIDEO_TEXTURE (video));

  g_signal_connect (video,
                    "eos",
                    G_CALLBACK (on_video_texture_eos),
                    NULL);

  g_signal_connect (stage,
                    "destroy",
                    G_CALLBACK (clutter_main_quit),
                    NULL);

  clutter_media_set_filename (CLUTTER_MEDIA (video), argv[1]);
  clutter_stage_hide_cursor (CLUTTER_STAGE (stage));

  clutter_actor_add_child (stage, video);

  g_signal_connect (stage, "key-press-event", G_CALLBACK (key_press_cb), NULL);

  clutter_media_set_playing (CLUTTER_MEDIA (video), TRUE);
  clutter_actor_show (stage);
  clutter_main ();

  return EXIT_SUCCESS;
}
Exemple #5
0
static int mp_constructor(TPMediaPlayer * mp)
{
    static int init=0;

    if (!init)
    {
        init=1;
        gst_init(NULL,NULL);
    }

    ClutterActor * video_texture=clutter_gst_video_texture_new();

    if (!video_texture)
    {
        g_warning("FAILED TO CREATE CLUTTER GST VIDEO TEXTURE");
        return TP_MEDIAPLAYER_ERROR_NO_MEDIAPLAYER;
    }

    // We own it

    g_object_ref_sink(G_OBJECT(video_texture));

    // Get the stage, size the video texture and add it to the stage

    clutter_actor_hide(video_texture);

    ClutterActor * stage=clutter_stage_get_default();

    gfloat width,height;

    clutter_actor_get_size(stage,&width,&height);
    clutter_actor_set_size(video_texture,width,height);
    clutter_actor_set_position(video_texture,0,0);

    clutter_container_add_actor(CLUTTER_CONTAINER(stage),video_texture);

    clutter_actor_lower_bottom(video_texture);

    g_signal_connect( stage , "notify::allocation" , ( GCallback ) stage_allocation_notify , video_texture );

    // Connect signals

    g_signal_connect(video_texture,"eos",G_CALLBACK(mp_end_of_stream),mp);
    g_signal_connect(video_texture,"error",G_CALLBACK(mp_error),mp);

    // We use gmalloc0 to zero out the whole structure

    UserData * user_data=(UserData*) g_malloc0(sizeof(UserData));

    user_data->vt=video_texture;

    mp->user_data=user_data;

    mp->destroy=mp_destroy;
    mp->load=mp_load;
    mp->reset=mp_reset;
    mp->play=mp_play;
    mp->seek=mp_seek;
    mp->pause=mp_pause;
    mp->set_playback_rate=mp_set_playback_rate;
    mp->get_position=mp_get_position;
    mp->get_duration=mp_get_duration;
    mp->get_buffered_duration=mp_get_buffered_duration;
    mp->get_video_size=mp_get_video_size;
    mp->get_viewport_geometry=mp_get_viewport_geometry;
    mp->set_viewport_geometry=mp_set_viewport_geometry;
    mp->get_media_type=mp_get_media_type;
    mp->get_audio_volume=mp_get_audio_volume;
    mp->set_audio_volume=mp_set_audio_volume;
    mp->get_audio_mute=mp_get_audio_mute;
    mp->set_audio_mute=mp_set_audio_mute;
    mp->play_sound=mp_play_sound;
    mp->get_viewport_texture=mp_get_viewport_texture;

    return 0;
}
Exemple #6
0
static void
_gb_player_setup_widgets (GbPlayer *self)
{
	GbPlayerPrivate *p = GB_PLAYER_GET_PRIVATE(self);
	ClutterColor cc_white = {0xff, 0xff, 0xff, 0x8f};
	ClutterColor cc_black = {0x00, 0x00, 0x00, 0xff};

	/* title group */
	p->title_group = clutter_group_new ();
	p->title_rect = gb_player_rounded_rect (self, 400, 36, &cc_white, 35);
	p->title_label = clutter_label_new_full ("DejaVu Sans",
											 "<span size='11500'><b>Here comes the media's title</b></span>",
											 &cc_black);
	clutter_label_set_use_markup (CLUTTER_LABEL(p->title_label), TRUE);
	clutter_actor_set_position (p->title_group, -20, 20);
	clutter_actor_set_position (p->title_label, 50, 10);
	CLUTTER_GROUP_AND_SHOW(p->title_group, p->title_rect);
	CLUTTER_GROUP_AND_SHOW(p->title_group, p->title_label);

	/* window buttons group */
	p->window_buttons_group = clutter_group_new ();
	p->window_buttons_rect = gb_player_rounded_rect (self, 230, 90, &cc_white, 35);
	p->window_aspect_button = clutter_texture_new_from_pixbuf (p->fullscreen);
	p->window_open_file_button = clutter_texture_new_from_pixbuf (p->open_file);
	clutter_label_set_use_markup (CLUTTER_LABEL(p->title_label), TRUE);
	CLUTTER_GROUP_AND_SHOW(p->window_buttons_group, p->window_buttons_rect);
	CLUTTER_GROUP_AND_SHOW(p->window_buttons_group, p->window_aspect_button);
	CLUTTER_GROUP_AND_SHOW(p->window_buttons_group, p->window_open_file_button);
	clutter_actor_set_position (p->window_buttons_group, 640 - 200, 20);
	clutter_actor_set_position (p->window_open_file_button, 40, 20);
	clutter_actor_set_position (p->window_aspect_button, 130, 20);

	/* background group*/
	p->bg_group = clutter_group_new ();
	p->bg_video = clutter_gst_video_texture_new ();
	p->bg_image = clutter_texture_new_from_pixbuf (p->bgpixbuf);
	p->bg_logo = clutter_texture_new_from_pixbuf (p->bglogo);

	CLUTTER_GROUP_AND_SHOW(p->bg_group, p->bg_image);
	CLUTTER_GROUP_AND_SHOW(p->bg_group, p->bg_logo);
	CLUTTER_GROUP_AND_SHOW(p->bg_group, p->bg_video);
	clutter_actor_set_position (p->bg_logo, (640 / 2) - (467 / 2), (480 / 2) - (210 / 2));
	clutter_actor_set_size (p->bg_video, 640, 480);

	/* controls group */
	p->controls_group = clutter_group_new ();
	p->controls_rect = gb_player_rounded_rect (self, 400, 70, &cc_white, 45);
	p->controls_backward = clutter_texture_new_from_pixbuf (p->backward);
	p->controls_forward = clutter_texture_new_from_pixbuf (p->forward);
	p->controls_play_pause = clutter_texture_new_from_pixbuf (p->play);
	p->controls_stop = clutter_texture_new_from_pixbuf (p->stop);

	CLUTTER_GROUP_AND_SHOW(p->controls_group, p->controls_rect);
	CLUTTER_GROUP_AND_SHOW(p->controls_group, p->controls_backward);
	CLUTTER_GROUP_AND_SHOW(p->controls_group, p->controls_forward);
	CLUTTER_GROUP_AND_SHOW(p->controls_group, p->controls_play_pause);
	clutter_actor_set_position (p->controls_group, (640 / 2) - (400 / 2), 480 - 70 - 30);
	clutter_actor_set_position (p->controls_backward, 30, 15);
	clutter_actor_set_position (p->controls_play_pause, 170, 5);
	clutter_actor_set_position (p->controls_forward, 300, 15);

	CLUTTER_GROUP_AND_SHOW(p->stage, p->bg_group);
	CLUTTER_GROUP_AND_SHOW(p->stage, p->title_group);
	CLUTTER_GROUP_AND_SHOW(p->stage, p->controls_group);
	CLUTTER_GROUP_AND_SHOW(p->stage, p->window_buttons_group);

	gtk_widget_show_all (p->window);
	
	clutter_actor_set_reactive (p->controls_backward, TRUE);
	clutter_actor_set_reactive (p->controls_forward, TRUE);
	clutter_actor_set_reactive (p->controls_play_pause, TRUE);
	clutter_actor_set_reactive (p->window_aspect_button, TRUE);
	clutter_actor_set_reactive (p->window_open_file_button, TRUE);
	clutter_actor_set_reactive (p->stage, TRUE);

	clutter_actor_hide (p->bg_video);
	p->videosink = clutter_gst_video_sink_new (CLUTTER_TEXTURE(p->bg_video));
	g_object_set (p->player, "video-sink", p->videosink, NULL);
	


}
static gboolean
_start_video_preview (MexContentTile *self)
{
  MexContentTilePrivate *priv = self->priv;
  GstElement *pipeline;
  gint gst_flags;

  const gchar *mimetype, *uri;

  /* Check we're still focused */
  if (!mex_actor_has_focus (CLUTTER_ACTOR (self)))
    return FALSE;

  /* Don't play if the main player is still playing..
   * too many videos spoil the broth.
   */
  if (clutter_media_get_playing (mex_player_get_clutter_media (mex_player_get_default ())))
    return FALSE;

  mimetype = mex_content_get_metadata (priv->content,
                                       MEX_CONTENT_METADATA_MIMETYPE);

  if ((mimetype) && strncmp (mimetype, "video/", 6) != 0)
    return FALSE;

  if (!(uri = mex_content_get_metadata (priv->content,
                                        MEX_CONTENT_METADATA_STREAM)))
    return FALSE;

  priv->video_preview = clutter_gst_video_texture_new ();

  pipeline = clutter_gst_video_texture_get_pipeline (CLUTTER_GST_VIDEO_TEXTURE (priv->video_preview));
  g_object_get (G_OBJECT (pipeline), "flags", &gst_flags, NULL);

  gst_flags = 1;//GST_PLAY_FLAG_VIDEO;

  g_object_set (G_OBJECT (pipeline), "flags", gst_flags, NULL);


  clutter_gst_video_texture_set_idle_material (CLUTTER_GST_VIDEO_TEXTURE (priv->video_preview),
                                               NULL);
  g_signal_connect (priv->video_preview, "eos",
                    G_CALLBACK (_stop_video_eos),
                    self);

  clutter_actor_set_opacity (priv->video_preview, 0);

  g_object_ref (priv->image);
  clutter_actor_remove_child (CLUTTER_ACTOR (self), priv->image);
  clutter_actor_add_child (CLUTTER_ACTOR (self), priv->video_preview);


  clutter_actor_animate (priv->video_preview, CLUTTER_LINEAR, 500,
                         "opacity", 0xff, NULL);

  clutter_actor_set_size (priv->video_preview,
                          (gfloat)priv->thumb_width,
                          (gfloat)priv->thumb_height);

  clutter_media_set_uri (CLUTTER_MEDIA (priv->video_preview), uri);
  clutter_media_set_playing (CLUTTER_MEDIA (priv->video_preview), TRUE);

  if (priv->stop_video_preview <= 0)
    priv->stop_video_preview =
      g_timeout_add_seconds (180, (GSourceFunc)_stop_video_preview, self);

  return FALSE;
}
Exemple #8
0
int
main (int argc, char *argv[])
{
  ClutterActor   *video;
  GdkPixbuf      *shot = NULL;
  gint            duration;
  CoglHandle      tex_id;
  CoglPixelFormat format;
  gint            size;
  gint            width;
  gint            height; 
  gint            rowstride;
  guchar         *data = NULL;

#ifdef USE_HELIX
  clutter_helix_init (&argc, &argv);
#else
  gst_init (&argc, &argv);
#endif
  clutter_init (&argc, &argv);

  if (argc < 3)
    {
      g_print ("Usage: %s <path to movie file> <output png>\n", argv[0]);
      exit(-1);
    }

  totem_resources_monitor_start (argv[1], 60 * G_USEC_PER_SEC);

#ifdef USE_HELIX
  video = clutter_helix_video_texture_new ();
#else
  video = clutter_gst_video_texture_new ();
#endif

  if (argv[1][0] == '/')
    clutter_media_set_filename(CLUTTER_MEDIA(video), argv[1]);
  else
    clutter_media_set_uri(CLUTTER_MEDIA(video), argv[1]);
  clutter_media_set_volume (CLUTTER_MEDIA(video), 0);
  clutter_media_set_playing (CLUTTER_MEDIA(video), TRUE);

  do {

    while (g_main_context_pending (NULL))
      g_main_context_iteration (NULL, FALSE);

    duration = clutter_media_get_duration (CLUTTER_MEDIA(video));

  } while (duration == 0);

  clutter_actor_realize (video);

  clutter_media_set_position (CLUTTER_MEDIA(video), duration/3);

  do {

    while (g_main_context_pending (NULL))
      g_main_context_iteration (NULL, FALSE);

  } while (clutter_media_get_position (CLUTTER_MEDIA(video)) <= duration/3);

  tex_id = clutter_texture_get_cogl_texture (CLUTTER_TEXTURE (video));
  if (tex_id)
    {
      format = cogl_texture_get_format (tex_id);
      size = cogl_texture_get_data (tex_id, format, 0, NULL);
      width = cogl_texture_get_width (tex_id);
      height = cogl_texture_get_height (tex_id);
      rowstride = cogl_texture_get_rowstride (tex_id);
      
      data = (guchar*) g_malloc (sizeof(guchar) * size);
      if (!data)
	g_error ("malloc");;

      cogl_texture_get_data (tex_id, format, rowstride, data);


      shot = gdk_pixbuf_new_from_data (data, 
				       GDK_COLORSPACE_RGB, 
				       FALSE, 
				       8,
				       width, 
				       height, 
				       rowstride, 
				       NULL, 
				       NULL);
      
    }

  totem_resources_monitor_stop ();

  if (shot)
    {
      GdkPixbuf *thumb, *pic;
      gint       x, y, nw, nh, w, h, size;
      
      size = 128;

      /* FIXME swap RGB pixels */

      w = clutter_actor_get_width (video);
      h = clutter_actor_get_height (video);
      
      nh = ( h * size) / w;

      if (nh <= size)
	{
	  nw = size;
	  x = 0;
	  y = (size - nh) / 2;
	}
      else
	{
	  nw  = ( w * size ) / h;
	  nh = size;
	  x = (size - nw) / 2;
	  y = 0;
	}

      thumb = gdk_pixbuf_new (GDK_COLORSPACE_RGB, TRUE, 8, size, size);
      gdk_pixbuf_fill (thumb, 0x000000FF);

      pic = gdk_pixbuf_scale_simple (shot, nw, nh, GDK_INTERP_BILINEAR);
      gdk_pixbuf_copy_area  (pic, 0, 0, nw, nh, thumb, x, y);
      
      if (!gdk_pixbuf_save (thumb, argv[2], "png", NULL, NULL))
	{
	  g_error ("%s: Pixbuf save failed\n", argv[0]);
	  exit(-1);
	}

      g_object_unref (shot);
      g_object_unref (thumb);
      g_object_unref (pic);

      exit(0);
    }

  exit (-1);
}
Exemple #9
0
HandCar *
handcar_new()
{
  HandCar *all = g_new0(HandCar, 1);
  ClutterColor rect_color = { 0xdd, 0xdd, 0xdd, 0xee };
  ClutterColor rect_border_color = { 0xee, 0xee, 0xee, 0xdd };
  ClutterColor rect_entry_color = { 0xef, 0xef, 0xef, 0xee };
  ClutterColor rect_entry_border_color = { 0x96, 0x96, 0x96, 0xaa };

  ClutterColor label_color = { 0x55, 0x00, 0x00, 0xff };
  ClutterColor time_color = { 0x00, 0x33, 0x55, 0xbb };

  GError *error = NULL;

  all->play = gdk_pixbuf_new_from_file("imgs/start.svg", NULL);
  all->previous = gdk_pixbuf_new_from_file("imgs/backward.svg", NULL);
  all->next = gdk_pixbuf_new_from_file("imgs/forward.svg", NULL);
  all->stop = gdk_pixbuf_new_from_file("imgs/stop.svg", NULL);

  all->time = 0;
  all->playing = FALSE;

  all->player = gst_element_factory_make ("playbin", "player");

  if (error)
      g_error ("FUDEU: %s", error->message);

  all->label_actor = clutter_label_new_full("DejaVu Sans",
                                       "Blind Guardian - <b>Mirror Mirror</b>",
                                       &label_color);
  clutter_label_set_use_markup (CLUTTER_LABEL(all->label_actor), TRUE);
  all->label_time = clutter_label_new_full("DejaVu Sans",
                                       "00:00",
                                       &time_color);
  clutter_label_set_use_markup (CLUTTER_LABEL(all->label_time), TRUE);

  clutter_actor_set_position (all->label_actor, 10, 15);
  clutter_actor_set_position (all->label_time, STAGE_WIDTH - 80, STAGE_HEIGHT - 20);

  all->btn_actor_play = clutter_texture_new_from_pixbuf (all->play);
  all->btn_actor_next = clutter_texture_new_from_pixbuf (all->next);
  all->btn_actor_previous = clutter_texture_new_from_pixbuf (all->previous);

  clutter_actor_set_position (all->btn_actor_previous, 60, 50);
  clutter_actor_set_position (all->btn_actor_play, 140, 50);
  clutter_actor_set_position (all->btn_actor_next, 200, 50);
  all->rect1 = clutter_rectangle_new_with_color (&rect_color);
  clutter_actor_set_size (all->rect1, 320, 30);
  clutter_actor_set_position (all->rect1, -5, 10);
  clutter_rectangle_set_border_width (CLUTTER_RECTANGLE(all->rect1), 4);
  clutter_rectangle_set_border_color (CLUTTER_RECTANGLE(all->rect1), &rect_border_color);

  all->rect2 = clutter_rectangle_new_with_color (&rect_entry_color);
  clutter_actor_set_size (all->rect2, 270, 20);
  clutter_actor_set_position (all->rect2, 20, STAGE_HEIGHT - 50);
  clutter_rectangle_set_border_width (CLUTTER_RECTANGLE(all->rect2), 1);
  clutter_rectangle_set_border_color (CLUTTER_RECTANGLE(all->rect2), &rect_entry_border_color);

  all->rect3 = clutter_rectangle_new_with_color (&rect_entry_color);
  clutter_actor_set_size (all->rect3, 270, 203);
  clutter_actor_set_position (all->rect3, 20, 120);
  clutter_rectangle_set_border_width (CLUTTER_RECTANGLE(all->rect3), 1);
  clutter_rectangle_set_border_color (CLUTTER_RECTANGLE(all->rect3), &rect_entry_border_color);


  all->entry_actor = clutter_entry_new_full ("Monospace",
                                             "Teste",
                                             &label_color);
  clutter_actor_set_size (all->entry_actor, 270, 20);
  clutter_actor_set_position (all->entry_actor, 20, STAGE_HEIGHT - 50);

  all->video = clutter_gst_video_texture_new ();
  clutter_actor_set_size (all->video, 270, 203);
  clutter_actor_set_position (all->video, 20, 120);
  clutter_actor_set_opacity (all->video, 0xff);

  //  all->clutter_group_add_many (all->container1, all->rect1);
  all->videosink = clutter_gst_video_sink_new (CLUTTER_TEXTURE(all->video));
  g_object_set (all->player, "video-sink", all->videosink, NULL);

  all->format = GST_FORMAT_TIME;
  clutter_actor_show(all->btn_actor_play);
  clutter_actor_show(all->btn_actor_next);
  clutter_actor_show(all->btn_actor_previous);
  clutter_actor_show(all->label_actor);
  clutter_actor_show(all->label_time);
  clutter_actor_show(all->rect1);
  clutter_actor_show(all->rect2);
  clutter_actor_show(all->rect3);
  clutter_actor_show(all->video);
  clutter_actor_show(all->entry_actor);
  return all;
}