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);