From bdc056c12d283d0970284aec189a3f9456809799 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= Date: Thu, 16 Aug 2012 12:12:06 +0200 Subject: [PATCH] video: Add methods to return a list of all pending GstVideoCodecFrames --- gst-libs/gst/video/gstvideodecoder.c | 21 +++++++++++++++++++++ gst-libs/gst/video/gstvideodecoder.h | 6 ++++-- gst-libs/gst/video/gstvideoencoder.c | 21 +++++++++++++++++++++ gst-libs/gst/video/gstvideoencoder.h | 2 ++ 4 files changed, 48 insertions(+), 2 deletions(-) diff --git a/gst-libs/gst/video/gstvideodecoder.c b/gst-libs/gst/video/gstvideodecoder.c index 59449c476d..0097241716 100644 --- a/gst-libs/gst/video/gstvideodecoder.c +++ b/gst-libs/gst/video/gstvideodecoder.c @@ -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) diff --git a/gst-libs/gst/video/gstvideodecoder.h b/gst-libs/gst/video/gstvideodecoder.h index 49e080f9fd..54f4561bb1 100644 --- a/gst-libs/gst/video/gstvideodecoder.h +++ b/gst-libs/gst/video/gstvideodecoder.h @@ -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); diff --git a/gst-libs/gst/video/gstvideoencoder.c b/gst-libs/gst/video/gstvideoencoder.c index 605ebf5616..9c41a7e6f8 100644 --- a/gst-libs/gst/video/gstvideoencoder.c +++ b/gst-libs/gst/video/gstvideoencoder.c @@ -2006,6 +2006,27 @@ gst_video_encoder_get_frame (GstVideoEncoder * encoder, int frame_number) return frame; } +/** + * 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 diff --git a/gst-libs/gst/video/gstvideoencoder.h b/gst-libs/gst/video/gstvideoencoder.h index ffc45dbe32..a260c6c20b 100644 --- a/gst-libs/gst/video/gstvideoencoder.h +++ b/gst-libs/gst/video/gstvideoencoder.h @@ -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);