diff options
author | Lionel Landwerlin <llandwerlin@gmail.com> | 2013-02-12 18:07:27 +0000 |
---|---|---|
committer | Lionel Landwerlin <llandwerlin@gmail.com> | 2013-03-18 16:24:19 +0000 |
commit | 43c904845e0e804b48f1dc5d800ad097c5d938f0 (patch) | |
tree | 9f5f324f680a892d1064c46084a8952ac40f8067 /examples | |
parent | 9e4ca9594d72592ce370fef7c4365d7a52f32e1b (diff) | |
download | clutter-gst-43c904845e0e804b48f1dc5d800ad097c5d938f0.tar.gz |
Break API and concepts around VideoTexture
Diffstat (limited to 'examples')
-rw-r--r-- | examples/camera-player.c | 94 | ||||
-rw-r--r-- | examples/video-player.c | 66 | ||||
-rw-r--r-- | examples/video-sink.c | 47 |
3 files changed, 93 insertions, 114 deletions
diff --git a/examples/camera-player.c b/examples/camera-player.c index 1b816a7..e02ed5e 100644 --- a/examples/camera-player.c +++ b/examples/camera-player.c @@ -33,6 +33,7 @@ typedef struct _CameraApp { ClutterActor *stage; ClutterActor *camera_actor; + ClutterGstCamera *camera_player; const GPtrArray *camera_devices; guint selected_camera_device; gboolean decrease_selected; @@ -57,24 +58,20 @@ update_gamma (CameraApp *app) { gdouble min, max, cur; - if (!clutter_gst_camera_actor_supports_gamma_correction ( - CLUTTER_GST_CAMERA_ACTOR (app->camera_actor))) + if (!clutter_gst_camera_supports_gamma_correction (app->camera_player)) { g_print ("Cannot update gamma, not supported\n"); return; } - if (!clutter_gst_camera_actor_get_gamma_range ( - CLUTTER_GST_CAMERA_ACTOR (app->camera_actor), - &min, &max, NULL)) + if (!clutter_gst_camera_get_gamma_range (app->camera_player, + &min, &max, NULL)) { g_print ("Cannot update gamma, unable to get allowed range\n"); return; } - if (!clutter_gst_camera_actor_get_gamma ( - CLUTTER_GST_CAMERA_ACTOR (app->camera_actor), - &cur)) + if (!clutter_gst_camera_get_gamma (app->camera_player, &cur)) { g_print ("Cannot update gamma, unable to get current value\n"); return; @@ -98,9 +95,7 @@ update_gamma (CameraApp *app) } g_print ("\tnew value: %0.2f\n", cur); - clutter_gst_camera_actor_set_gamma ( - CLUTTER_GST_CAMERA_ACTOR (app->camera_actor), - cur); + clutter_gst_camera_set_gamma (app->camera_player, cur); } static void @@ -109,8 +104,7 @@ update_color_balance (CameraApp *app, { gdouble min, max, cur; - if (!clutter_gst_camera_actor_supports_color_balance ( - CLUTTER_GST_CAMERA_ACTOR (app->camera_actor))) + if (!clutter_gst_camera_supports_color_balance (app->camera_player)) { g_print ("Cannot update color balance property %s, " "not supported\n", @@ -118,9 +112,8 @@ update_color_balance (CameraApp *app, return; } - if (!clutter_gst_camera_actor_get_color_balance_property_range ( - CLUTTER_GST_CAMERA_ACTOR (app->camera_actor), - property, &min, &max, NULL)) + if (!clutter_gst_camera_get_color_balance_property_range (app->camera_player, + property, &min, &max, NULL)) { g_print ("Cannot update color balance property %s, " "unable to get allowed range\n", @@ -128,9 +121,8 @@ update_color_balance (CameraApp *app, return; } - if (!clutter_gst_camera_actor_get_color_balance_property ( - CLUTTER_GST_CAMERA_ACTOR (app->camera_actor), - property, &cur)) + if (!clutter_gst_camera_get_color_balance_property (app->camera_player, + property, &cur)) { g_print ("Cannot update color balance property %s, " "unable to get current value\n", @@ -156,9 +148,8 @@ update_color_balance (CameraApp *app, } g_print ("\tnew value: %0.2f\n", cur); - clutter_gst_camera_actor_set_color_balance_property ( - CLUTTER_GST_CAMERA_ACTOR (app->camera_actor), - property, cur); + clutter_gst_camera_set_color_balance_property (app->camera_player, + property, cur); } static gboolean @@ -214,8 +205,7 @@ input_cb (ClutterStage *stage, g_print ("Selecting device %s (node=%s)\n", clutter_gst_camera_device_get_name (device), clutter_gst_camera_device_get_node (device)); - clutter_gst_camera_actor_set_camera_device ( - CLUTTER_GST_CAMERA_ACTOR (app->camera_actor), device); + clutter_gst_camera_set_camera_device (app->camera_player, device); break; } @@ -229,16 +219,13 @@ input_cb (ClutterStage *stage, gchar *filename; static guint photos_cnt = 0; - if (clutter_gst_camera_actor_is_recording_video ( - CLUTTER_GST_CAMERA_ACTOR (app->camera_actor))) + if (clutter_gst_camera_is_recording_video (app->camera_player)) { g_print ("Stopping video recording\n"); - clutter_gst_camera_actor_stop_video_recording ( - CLUTTER_GST_CAMERA_ACTOR (app->camera_actor)); + clutter_gst_camera_stop_video_recording (app->camera_player); } - else if (!clutter_gst_camera_actor_is_ready_for_capture ( - CLUTTER_GST_CAMERA_ACTOR (app->camera_actor))) + else if (!clutter_gst_camera_is_ready_for_capture (app->camera_player)) g_print ("Unable to record video as the camera is not ready for capture\n"); else { @@ -246,9 +233,8 @@ input_cb (ClutterStage *stage, filename = g_strdup_printf ("camera-video-%d.ogv", photos_cnt++); - clutter_gst_camera_actor_start_video_recording ( - CLUTTER_GST_CAMERA_ACTOR (app->camera_actor), - filename); + clutter_gst_camera_start_video_recording (app->camera_player, + filename); g_free (filename); } break; @@ -259,11 +245,9 @@ input_cb (ClutterStage *stage, gchar *filename; static guint photos_cnt = 0; - if (clutter_gst_camera_actor_is_recording_video ( - CLUTTER_GST_CAMERA_ACTOR (app->camera_actor))) + if (clutter_gst_camera_is_recording_video (app->camera_player)) g_print ("Unable to take photo as the camera is recording video\n"); - else if (!clutter_gst_camera_actor_is_ready_for_capture ( - CLUTTER_GST_CAMERA_ACTOR (app->camera_actor))) + else if (!clutter_gst_camera_is_ready_for_capture (app->camera_player)) g_print ("Unable to take photo as the camera is not ready for capture\n"); else { @@ -271,9 +255,8 @@ input_cb (ClutterStage *stage, filename = g_strdup_printf ("camera-photo-%d.jpg", photos_cnt++); - clutter_gst_camera_actor_take_photo ( - CLUTTER_GST_CAMERA_ACTOR (app->camera_actor), - filename); + clutter_gst_camera_take_photo (app->camera_player, + filename); g_free (filename); } break; @@ -289,8 +272,7 @@ input_cb (ClutterStage *stage, { g_print ("ERROR: Unable to create 'dicetv' element, cannot set filter\n"); } - ret = clutter_gst_camera_actor_set_filter ( - CLUTTER_GST_CAMERA_ACTOR (app->camera_actor), filter); + ret = clutter_gst_camera_set_filter (app->camera_player, filter); if (ret) g_print ("Filter set successfully\n"); else @@ -300,8 +282,7 @@ input_cb (ClutterStage *stage, } case CLUTTER_r: - clutter_gst_camera_actor_remove_filter ( - CLUTTER_GST_CAMERA_ACTOR (app->camera_actor)); + clutter_gst_camera_remove_filter (app->camera_player); break; default: @@ -316,7 +297,7 @@ input_cb (ClutterStage *stage, } static void -ready_for_capture (ClutterGstCameraActor *camera_actor, +ready_for_capture (ClutterGstCamera *camera_player, gboolean ready) { if (ready) @@ -324,13 +305,13 @@ ready_for_capture (ClutterGstCameraActor *camera_actor, } static void -photo_saved (ClutterGstCameraActor *camera_actor) +photo_saved (ClutterGstCamera *camera_player) { g_print ("Photo saved!\n"); } static void -video_saved (ClutterGstCameraActor *camera_actor) +video_saved (ClutterGstCamera *camera_player) { g_print ("Video saved!\n"); } @@ -406,16 +387,16 @@ main (int argc, char *argv[]) app = g_new0(CameraApp, 1); app->stage = stage; - app->camera_actor = clutter_gst_camera_actor_new (); + app->camera_actor = g_object_new (CLUTTER_GST_TYPE_ACTOR, NULL); - if (app->camera_actor == NULL) + app->camera_player = clutter_gst_camera_new (); + if (app->camera_player == NULL) { - g_error ("failed to create camera_actor"); + g_error ("failed to create camera player"); return EXIT_FAILURE; } - app->camera_devices = clutter_gst_camera_actor_get_camera_devices ( - CLUTTER_GST_CAMERA_ACTOR (app->camera_actor)); + app->camera_devices = clutter_gst_camera_get_camera_devices (app->camera_player); if (!app->camera_devices) { g_error ("no suitable camera device available"); @@ -435,13 +416,13 @@ main (int argc, char *argv[]) } app->selected_camera_device = 0; - g_signal_connect (app->camera_actor, "ready-for-capture", + g_signal_connect (app->camera_player, "ready-for-capture", G_CALLBACK (ready_for_capture), app); - g_signal_connect (app->camera_actor, "photo-saved", + g_signal_connect (app->camera_player, "photo-saved", G_CALLBACK (photo_saved), app); - g_signal_connect (app->camera_actor, "video-saved", + g_signal_connect (app->camera_player, "video-saved", G_CALLBACK (video_saved), app); /* Handle it ourselves so can scale up for fullscreen better */ @@ -457,8 +438,7 @@ main (int argc, char *argv[]) /* Hook up other events */ g_signal_connect (stage, "event", G_CALLBACK (input_cb), app); - clutter_gst_camera_actor_set_playing ( - CLUTTER_GST_CAMERA_ACTOR (app->camera_actor), TRUE); + clutter_gst_player_set_playing (CLUTTER_GST_PLAYER (app->camera_player), TRUE); clutter_actor_show (stage); diff --git a/examples/video-player.c b/examples/video-player.c index 1d1ebbf..69c9364 100644 --- a/examples/video-player.c +++ b/examples/video-player.c @@ -41,6 +41,7 @@ typedef struct _VideoApp ClutterActor *stage; ClutterActor *vactor; + ClutterGstPlayback *player; ClutterActor *control; ClutterActor *control_bg; @@ -163,16 +164,16 @@ toggle_pause_state (VideoApp *app) if (app->paused) { - clutter_gst_player_set_playing (CLUTTER_GST_PLAYER(app->vactor), - TRUE); + clutter_gst_player_set_playing (CLUTTER_GST_PLAYER (app->player), + TRUE); app->paused = FALSE; clutter_actor_hide (app->control_play); clutter_actor_show (app->control_pause); } else { - clutter_gst_player_set_playing (CLUTTER_GST_PLAYER(app->vactor), - FALSE); + clutter_gst_player_set_playing (CLUTTER_GST_PLAYER (app->player), + FALSE); app->paused = TRUE; clutter_actor_hide (app->control_pause); clutter_actor_show (app->control_play); @@ -232,8 +233,7 @@ input_cb (ClutterStage *stage, progress = (gdouble) dist / SEEK_W; - clutter_gst_player_set_progress (CLUTTER_GST_PLAYER (app->vactor), - progress); + clutter_gst_playback_set_progress (app->player, progress); } } handled = TRUE; @@ -302,10 +302,10 @@ input_cb (ClutterStage *stage, } static void -size_change (ClutterActor *actor, - gint base_width, - gint base_height, - VideoApp *app) +size_change (ClutterGstPlayer *player, + gint base_width, + gint base_height, + VideoApp *app) { ClutterActor *stage = app->stage; gfloat new_x, new_y, new_width, new_height; @@ -317,7 +317,9 @@ size_change (ClutterActor *actor, /* base_width and base_height are the actual dimensions of the buffers before * taking the pixel aspect ratio into account. We need to get the actual * size of the actor to display */ - clutter_actor_get_size (actor, &frame_width, &frame_height); + /* clutter_actor_get_size (app->vactor, &frame_width, &frame_height); */ + frame_width = base_width; + frame_height = base_height; new_height = (frame_height * stage_width) / frame_width; if (new_height <= stage_height) @@ -336,8 +338,8 @@ size_change (ClutterActor *actor, new_y = 0; } - clutter_actor_set_position (actor, new_x, new_y); - clutter_actor_set_size (actor, new_width, new_height); + clutter_actor_set_position (app->vactor, new_x, new_y); + clutter_actor_set_size (app->vactor, new_width, new_height); } static void @@ -370,8 +372,7 @@ tick (GObject *object, GParamSpec *pspec, VideoApp *app) { - ClutterGstPlayer *vactor = CLUTTER_GST_PLAYER (object); - gdouble progress = clutter_gst_player_get_progress (vactor); + gdouble progress = clutter_gst_playback_get_progress (app->player); clutter_actor_set_size (app->control_seekbar, progress * SEEK_W, @@ -384,7 +385,7 @@ on_video_actor_eos (ClutterGstPlayer *player, { if (opt_loop) { - clutter_gst_player_set_progress (player, 0.0); + clutter_gst_playback_set_progress (CLUTTER_GST_PLAYBACK (player), 0.0); clutter_gst_player_set_playing (player, TRUE); } } @@ -509,7 +510,10 @@ main (int argc, char *argv[]) app = g_new0(VideoApp, 1); app->stage = stage; - app->vactor = clutter_gst_video_actor_new (); + app->vactor = g_object_new (CLUTTER_GST_TYPE_ACTOR, NULL); + app->player = clutter_gst_playback_new (); + + clutter_gst_actor_set_player (CLUTTER_GST_ACTOR (app->vactor), CLUTTER_GST_PLAYER (app->player)); if (app->vactor == NULL) g_error("failed to create vactor"); @@ -519,10 +523,10 @@ main (int argc, char *argv[]) * goes to the key frame position that can be quite far from where you * clicked. Using the ACCURATE flag tells playbin2 to seek to the actual * frame */ - clutter_gst_player_set_seek_flags (CLUTTER_GST_PLAYER (app->vactor), - CLUTTER_GST_SEEK_FLAG_ACCURATE); + clutter_gst_playback_set_seek_flags (app->player, + CLUTTER_GST_SEEK_FLAG_ACCURATE); - g_signal_connect (app->vactor, + g_signal_connect (app->player, "eos", G_CALLBACK (on_video_actor_eos), app); @@ -532,13 +536,9 @@ main (int argc, char *argv[]) g_print ("Remote media detected, setting up buffering\n"); /* configure to 10 seconds of buffer duration */ - clutter_gst_player_set_buffer_duration ( - CLUTTER_GST_PLAYER (app->vactor), - 10 * GST_SECOND); - clutter_gst_player_set_buffering_mode ( - CLUTTER_GST_PLAYER (app->vactor), - CLUTTER_GST_BUFFERING_MODE_STREAM); - g_signal_connect (app->vactor, + clutter_gst_playback_set_buffer_duration (app->player, 10 * GST_SECOND); + clutter_gst_playback_set_buffering_mode (app->player, CLUTTER_GST_BUFFERING_MODE_STREAM); + g_signal_connect (app->player, "notify::buffer-fill", G_CALLBACK (on_video_actor_notify_buffer_fill), app); @@ -557,20 +557,20 @@ main (int argc, char *argv[]) NULL); /* Handle it ourselves so can scale up for fullscreen better */ - g_signal_connect_after (app->vactor, + g_signal_connect_after (app->player, "size-change", G_CALLBACK (size_change), app); /* Load up out video actor */ - clutter_gst_player_set_uri (CLUTTER_GST_PLAYER (app->vactor), uri); + clutter_gst_playback_set_filename (app->player, uri); - if (clutter_gst_player_is_live_media (CLUTTER_GST_PLAYER (app->vactor))) + if (clutter_gst_playback_is_live_media (app->player)) g_print ("Playing live media\n"); else g_print ("Playing non-live media\n"); /* Set up things so that a visualisation is played if there's no video */ - pipe = clutter_gst_player_get_pipeline (CLUTTER_GST_PLAYER (app->vactor)); + pipe = clutter_gst_player_get_pipeline (CLUTTER_GST_PLAYER (app->player)); if (!pipe) g_error ("Unable to get gstreamer pipeline!\n"); @@ -659,11 +659,11 @@ main (int argc, char *argv[]) /* Hook up other events */ g_signal_connect (stage, "event", G_CALLBACK (input_cb), app); - g_signal_connect (app->vactor, + g_signal_connect (app->player, "notify::progress", G_CALLBACK (tick), app); - clutter_gst_player_set_playing (CLUTTER_GST_PLAYER (app->vactor), TRUE); + clutter_gst_player_set_playing (CLUTTER_GST_PLAYER (app->player), TRUE); clutter_actor_show (stage); diff --git a/examples/video-sink.c b/examples/video-sink.c index 82030d7..9fc7ab6 100644 --- a/examples/video-sink.c +++ b/examples/video-sink.c @@ -29,10 +29,10 @@ #include <clutter-gst/clutter-gst.h> void -size_change (ClutterActor *actor, - gint width, - gint height, - gpointer user_data) +size_change (ClutterGstPlayer *player, + gint width, + gint height, + ClutterActor *actor) { ClutterActor *stage; gfloat new_x, new_y, new_width, new_height; @@ -68,14 +68,14 @@ size_change (ClutterActor *actor, int main (int argc, char *argv[]) { - ClutterTimeline *timeline; - ClutterActor *stage; - ClutterActor *actor; - GstPipeline *pipeline; - GstElement *src; - GstElement *warp; - GstElement *colorspace; - GstElement *sink; + ClutterTimeline *timeline; + ClutterActor *stage; + ClutterActor *actor; + GstElement *src; + GstElement *warp; + GstElement *bin; + GstElement *pipeline; + ClutterGstPlayback *player; if (argc < 1) { @@ -98,24 +98,23 @@ main (int argc, char *argv[]) actor = g_object_new (CLUTTER_GST_TYPE_ACTOR, NULL); - g_signal_connect (actor, - "size-change", - G_CALLBACK (size_change), NULL); - /* Set up pipeline */ - pipeline = GST_PIPELINE (gst_pipeline_new (NULL)); + player = clutter_gst_playback_new (); + pipeline = clutter_gst_player_get_pipeline (CLUTTER_GST_PLAYER (player)); + + g_signal_connect (player, "size-change", + G_CALLBACK (size_change), actor); src = gst_element_factory_make ("videotestsrc", NULL); warp = gst_element_factory_make ("warptv", NULL); - colorspace = gst_element_factory_make ("videoconvert", NULL); - sink = gst_element_factory_make ("cluttersink", NULL); - g_object_set (sink, "actor", actor, NULL); + bin = gst_bin_new ("video-test-source"); + + gst_bin_add_many (GST_BIN (bin), src, warp, NULL); + gst_element_link_many (src, warp, NULL); - // g_object_set (src , "pattern", 10, NULL); + g_object_set (pipeline, "source", bin); - gst_bin_add_many (GST_BIN (pipeline), src, warp, colorspace, sink, NULL); - gst_element_link_many (src, warp, colorspace, sink, NULL); - gst_element_set_state (GST_ELEMENT(pipeline), GST_STATE_PLAYING); + clutter_gst_player_set_playing (CLUTTER_GST_PLAYER (player), TRUE); /* start the timeline */ clutter_timeline_start (timeline); |