static GdkPixbuf * capture_interesting_frame (BaconVideoWidget *bvw, const char *input, const char *output) { GdkPixbuf* pixbuf; guint current; GError *err = NULL; const double frame_locations[] = { 1.0 / 3.0, 2.0 / 3.0, 0.1, 0.9, 0.5 }; /* Test at multiple points in the file to see if we can get an * interesting frame */ for (current = 0; current < G_N_ELEMENTS(frame_locations); current++) { PROGRESS_DEBUG("About to seek to %f", frame_locations[current]); if (bacon_video_widget_seek (bvw, frame_locations[current], NULL) == FALSE) { PROGRESS_DEBUG("Couldn't seek to %f", frame_locations[current]); bacon_video_widget_play (bvw, NULL); } if (bacon_video_widget_can_get_frames (bvw, &err) == FALSE) { g_print ("totem-video-thumbnailer: '%s' isn't thumbnailable\n" "Reason: %s\n", input, err ? err->message : "programming error"); bacon_video_widget_close (bvw); gtk_widget_destroy (GTK_WIDGET (bvw)); g_error_free (err); exit (1); } /* Pull the frame, if it's interesting we bail early */ PROGRESS_DEBUG("About to get frame for iter %d", current); pixbuf = bacon_video_widget_get_current_frame (bvw); if (pixbuf != NULL && is_image_interesting (pixbuf) != FALSE) { PROGRESS_DEBUG("Frame for iter %d is interesting", current); break; } /* If we get to the end of this loop, we'll end up using * the last image we pulled */ if (current + 1 < G_N_ELEMENTS(frame_locations)) { if (pixbuf != NULL) { g_object_unref (pixbuf); pixbuf = NULL; } } PROGRESS_DEBUG("Frame for iter %d was not interesting", current); } return pixbuf; }
static GdkPixbuf * capture_interesting_frame (ThumbApp *app) { GdkPixbuf* pixbuf; guint current; const double frame_locations[] = { 1.0 / 3.0, 2.0 / 3.0, 0.1, 0.9, 0.5 }; if (app->duration == -1) { PROGRESS_DEBUG("Video has no duration, so capture 1st frame"); return capture_frame_at_time (app, 0); } /* Test at multiple points in the file to see if we can get an * interesting frame */ for (current = 0; current < G_N_ELEMENTS(frame_locations); current++) { PROGRESS_DEBUG("About to seek to %f", frame_locations[current]); thumb_app_seek (app, frame_locations[current] * app->duration); /* Pull the frame, if it's interesting we bail early */ PROGRESS_DEBUG("About to get frame for iter %d", current); pixbuf = xplayer_gst_playbin_get_frame (app->play); if (pixbuf != NULL && is_image_interesting (pixbuf) != FALSE) { PROGRESS_DEBUG("Frame for iter %d is interesting", current); break; } /* If we get to the end of this loop, we'll end up using * the last image we pulled */ if (current + 1 < G_N_ELEMENTS(frame_locations)) { if (pixbuf != NULL) { g_object_unref (pixbuf); pixbuf = NULL; } } PROGRESS_DEBUG("Frame for iter %d was not interesting", current); } return pixbuf; }