summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sys/v4l2codecs/gstv4l2codecvp8dec.c26
1 files changed, 25 insertions, 1 deletions
diff --git a/sys/v4l2codecs/gstv4l2codecvp8dec.c b/sys/v4l2codecs/gstv4l2codecvp8dec.c
index 4abcbfcae..dcda996d0 100644
--- a/sys/v4l2codecs/gstv4l2codecvp8dec.c
+++ b/sys/v4l2codecs/gstv4l2codecvp8dec.c
@@ -82,6 +82,24 @@ G_DEFINE_ABSTRACT_TYPE_WITH_CODE (GstV4l2CodecVp8Dec,
"V4L2 stateless VP8 decoder"));
#define parent_class gst_v4l2_codec_vp8_dec_parent_class
+static guint
+gst_v4l2_codec_vp8_dec_get_preferred_output_delay (GstVp8Decoder * decoder,
+ gboolean is_live)
+{
+
+ GstV4l2CodecVp8Dec *self = GST_V4L2_CODEC_VP8_DEC (decoder);
+ guint delay;
+
+ if (is_live)
+ delay = 0;
+ else
+ /* Just one for now, perhaps we can make this configurable in the future. */
+ delay = 1;
+
+ gst_v4l2_decoder_set_render_delay (self->decoder, delay);
+ return delay;
+}
+
static gboolean
gst_v4l2_codec_vp8_dec_open (GstVideoDecoder * decoder)
{
@@ -240,6 +258,7 @@ gst_v4l2_codec_vp8_dec_decide_allocation (GstVideoDecoder * decoder,
{
GstV4l2CodecVp8Dec *self = GST_V4L2_CODEC_VP8_DEC (decoder);
guint min = 0;
+ guint num_bitstream;
self->has_videometa = gst_query_find_allocation_meta (query,
GST_VIDEO_META_API_TYPE, NULL);
@@ -252,8 +271,11 @@ gst_v4l2_codec_vp8_dec_decide_allocation (GstVideoDecoder * decoder,
min = MAX (2, min);
+ num_bitstream = 1 +
+ MAX (1, gst_v4l2_decoder_get_render_delay (self->decoder));
+
self->sink_allocator = gst_v4l2_codec_allocator_new (self->decoder,
- GST_PAD_SINK, 2);
+ GST_PAD_SINK, num_bitstream);
self->src_allocator = gst_v4l2_codec_allocator_new (self->decoder,
GST_PAD_SRC, self->min_pool_size + min + 4);
self->src_pool = gst_v4l2_codec_pool_new (self->src_allocator, &self->vinfo);
@@ -850,6 +872,8 @@ gst_v4l2_codec_vp8_dec_subclass_init (GstV4l2CodecVp8DecClass * klass,
GST_DEBUG_FUNCPTR (gst_v4l2_codec_vp8_dec_end_picture);
vp8decoder_class->output_picture =
GST_DEBUG_FUNCPTR (gst_v4l2_codec_vp8_dec_output_picture);
+ vp8decoder_class->get_preferred_output_delay =
+ GST_DEBUG_FUNCPTR (gst_v4l2_codec_vp8_dec_get_preferred_output_delay);
klass->device = device;
gst_v4l2_decoder_install_properties (gobject_class, PROP_LAST, device);