video: Add methods to return a list of all pending GstVideoCodecFrames
authorSebastian Dröge <sebastian.droege@collabora.co.uk>
Thu, 16 Aug 2012 10:12:06 +0000 (12:12 +0200)
committerSebastian Dröge <sebastian.droege@collabora.co.uk>
Thu, 16 Aug 2012 10:13:25 +0000 (12:13 +0200)
gst-libs/gst/video/gstvideodecoder.c
gst-libs/gst/video/gstvideodecoder.h
gst-libs/gst/video/gstvideoencoder.c
gst-libs/gst/video/gstvideoencoder.h

index 59449c4..0097241 100644 (file)
@@ -2646,6 +2646,27 @@ gst_video_decoder_get_frame (GstVideoDecoder * decoder, int frame_number)
   return frame;
 }
 
+/**
+ * gst_video_decoder_get_frames:
+ * @decoder: a #GstVideoDecoder
+ *
+ * Get all pending unfinished #GstVideoCodecFrame
+ * 
+ * Returns: (transfer full) (element-type GstVideoCodecFrame): pending unfinished #GstVideoCodecFrame.
+ */
+GList *
+gst_video_decoder_get_frames (GstVideoDecoder * decoder)
+{
+  GList *frames;
+
+  GST_VIDEO_DECODER_STREAM_LOCK (decoder);
+  frames = g_list_copy (decoder->priv->frames);
+  g_list_foreach (frames, (GFunc) gst_video_codec_frame_ref, NULL);
+  GST_VIDEO_DECODER_STREAM_UNLOCK (decoder);
+
+  return frames;
+}
+
 static gboolean
 gst_video_decoder_decide_allocation_default (GstVideoDecoder * decoder,
     GstQuery * query)
index 49e080f..54f4561 100644 (file)
@@ -316,11 +316,13 @@ GstBufferPool *gst_video_decoder_get_buffer_pool (GstVideoDecoder *decoder);
 
 /* Object methods */
 
-GstVideoCodecFrame *gst_video_decoder_get_frame       (GstVideoDecoder *decoder,
-                                                      int frame_number);
+GstVideoCodecFrame *gst_video_decoder_get_frame        (GstVideoDecoder *decoder,
+                                                       int frame_number);
 
 GstVideoCodecFrame *gst_video_decoder_get_oldest_frame (GstVideoDecoder *decoder);
 
+GList *             gst_video_decoder_get_frames       (GstVideoDecoder *decoder);
+
 /* Parsing related methods */
 void           gst_video_decoder_add_to_frame     (GstVideoDecoder *decoder,
                                                   int n_bytes);
index 605ebf5..9c41a7e 100644 (file)
@@ -2007,6 +2007,27 @@ gst_video_encoder_get_frame (GstVideoEncoder * encoder, int frame_number)
 }
 
 /**
+ * gst_video_encoder_get_frames:
+ * @encoder: a #GstVideoEncoder
+ *
+ * Get all pending unfinished #GstVideoCodecFrame
+ * 
+ * Returns: (transfer full) (element-type GstVideoCodecFrame): pending unfinished #GstVideoCodecFrame.
+ */
+GList *
+gst_video_encoder_get_frames (GstVideoEncoder * encoder)
+{
+  GList *frames;
+
+  GST_VIDEO_ENCODER_STREAM_LOCK (encoder);
+  frames = g_list_copy (encoder->priv->frames);
+  g_list_foreach (frames, (GFunc) gst_video_codec_frame_ref, NULL);
+  GST_VIDEO_ENCODER_STREAM_UNLOCK (encoder);
+
+  return frames;
+}
+
+/**
  * gst_video_encoder_merge_tags:
  * @encoder: a #GstVideoEncoder
  * @tags: a #GstTagList to merge
index ffc45db..a260c6c 100644 (file)
@@ -268,6 +268,8 @@ GstVideoCodecFrame*  gst_video_encoder_get_frame        (GstVideoEncoder *encode
                                                         int frame_number);
 GstVideoCodecFrame*  gst_video_encoder_get_oldest_frame (GstVideoEncoder *encoder);
 
+GList *              gst_video_encoder_get_frames       (GstVideoEncoder *encoder);
+
 GstBuffer *          gst_video_encoder_allocate_output_buffer (GstVideoEncoder * encoder,
                                                                gsize size);