#include "ges-screenshot.h"
#include "ges-internal.h"
- * Returns: (transfer full): A #GstBuffer containing the last frame from
+ /**
+ * ges_play_sink_convert_frame:
+ * @playsink: The olaysink to get last frame from
+ * @caps: The caps defining the format the return value will have
+ *
+ * Get the last buffer @playsink showed
+ *
-GstBuffer *
++ * Returns: (transfer full): A #GstSample containing the last frame from
+ * @playsink in the format defined by the @caps
+ */
+GstSample *
ges_play_sink_convert_frame (GstElement * playsink, GstCaps * caps)
{
- GstBuffer *result;
+ GstSample *sample = NULL;
- g_object_get (G_OBJECT (playsink), "frame", (GstMiniObject *) & result, NULL);
+ g_signal_emit_by_name (playsink, "convert-sample", caps, &sample);
- GST_DEBUG ("got buffer %p from playsink", result);
-
- if (result != NULL && caps != NULL) {
- GstBuffer *temp;
- GError *err = NULL;
-
- temp = gst_video_convert_frame (result, caps, 25 * GST_SECOND, &err);
- gst_buffer_unref (result);
- if (temp == NULL && err) {
- /* I'm really uncertain whether we should make playsink post an error
- * on the bus or not. It's not like it's a critical issue regarding
- * playsink behaviour. */
- GST_ERROR ("Error converting frame: %s", err->message);
- }
- result = temp;
- }
- return result;
+ return sample;
}
G_DEFINE_TYPE (GESTimeline, ges_timeline, GST_TYPE_BIN);
+ GST_DEBUG_CATEGORY_STATIC (ges_timeline_debug);
+ #undef GST_CAT_DEFAULT
+ #define GST_CAT_DEFAULT ges_timeline_debug
+
#define GES_TIMELINE_PENDINGOBJS_GET_LOCK(timeline) \
- (GES_TIMELINE(timeline)->priv->pendingobjects_lock)
+ (&GES_TIMELINE(timeline)->priv->pendingobjects_lock)
#define GES_TIMELINE_PENDINGOBJS_LOCK(timeline) \
(g_mutex_lock(GES_TIMELINE_PENDINGOBJS_GET_LOCK (timeline)))
#define GES_TIMELINE_PENDINGOBJS_UNLOCK(timeline) \
ges_track_video_raw_new (void)
{
GESTrack *track;
- GstCaps *caps = gst_caps_from_string ("video/x-raw-yuv;video/x-raw-rgb");
+ GstCaps *caps = gst_caps_new_empty_simple ("video/x-raw");
track = ges_track_new (GES_TRACK_TYPE_VIDEO, caps);
+ ges_track_set_create_element_for_gap_func (track,
+ create_element_for_raw_video_gap);
+
+ GST_DEBUG_OBJECT (track, "New raw video track");
return track;
}
ges_track_audio_raw_new (void)
{
GESTrack *track;
- GstCaps *caps = gst_caps_from_string ("audio/x-raw-int;audio/x-raw-float");
+ GstCaps *caps = gst_caps_new_empty_simple ("audio/x-raw");
track = ges_track_new (GES_TRACK_TYPE_AUDIO, caps);
+ ges_track_set_create_element_for_gap_func (track,
+ create_element_for_raw_audio_gap);
+ GST_DEBUG_OBJECT (track, "New raw audio track %p",
+ track->priv->create_element_for_gaps);
return track;
}