109 lines
3.6 KiB
Diff
109 lines
3.6 KiB
Diff
|
From 27c5416b50ff2a62ca38c82bb45196e1e8ad1035 Mon Sep 17 00:00:00 2001
|
||
|
From: Jeffy Chen <jeffy.chen@rock-chips.com>
|
||
|
Date: Thu, 23 Jun 2022 16:04:18 +0800
|
||
|
Subject: [PATCH 11/12] v4l2: Support setting v4l2 min buffers
|
||
|
|
||
|
Tested with:
|
||
|
gst-launch-1.0 v4l2src min-buffers=32 ! waylandsink ts-offset=1000000000
|
||
|
|
||
|
Signed-off-by: Jeffy Chen <jeffy.chen@rock-chips.com>
|
||
|
---
|
||
|
sys/v4l2/gstv4l2object.c | 24 ++++++++++++++++++++++++
|
||
|
sys/v4l2/gstv4l2object.h | 3 ++-
|
||
|
2 files changed, 26 insertions(+), 1 deletion(-)
|
||
|
|
||
|
diff --git a/sys/v4l2/gstv4l2object.c b/sys/v4l2/gstv4l2object.c
|
||
|
index 09fabf0..4c8791a 100644
|
||
|
--- a/sys/v4l2/gstv4l2object.c
|
||
|
+++ b/sys/v4l2/gstv4l2object.c
|
||
|
@@ -58,6 +58,8 @@ GST_DEBUG_CATEGORY_EXTERN (v4l2_debug);
|
||
|
#define GST_V4L2_DEFAULT_WIDTH 320
|
||
|
#define GST_V4L2_DEFAULT_HEIGHT 240
|
||
|
|
||
|
+static guint DEFAULT_PROP_MIN_BUFFERS = 0;
|
||
|
+
|
||
|
enum
|
||
|
{
|
||
|
PROP_0,
|
||
|
@@ -312,6 +314,11 @@ void
|
||
|
gst_v4l2_object_install_properties_helper (GObjectClass * gobject_class,
|
||
|
const char *default_device)
|
||
|
{
|
||
|
+ const gchar *buf = g_getenv ("GST_V4L2_MIN_BUFS");
|
||
|
+
|
||
|
+ if (buf)
|
||
|
+ DEFAULT_PROP_MIN_BUFFERS = atoi (buf);
|
||
|
+
|
||
|
g_object_class_install_property (gobject_class, PROP_DEVICE,
|
||
|
g_param_spec_string ("device", "Device", "Device location",
|
||
|
default_device, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
|
||
|
@@ -431,6 +438,12 @@ gst_v4l2_object_install_properties_helper (GObjectClass * gobject_class,
|
||
|
"When enabled, the pixel aspect ratio will be enforced", TRUE,
|
||
|
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
|
||
|
|
||
|
+ g_object_class_install_property (gobject_class, PROP_MIN_BUFFERS,
|
||
|
+ g_param_spec_uint ("min-buffers", "Min buffers",
|
||
|
+ "Override the driver's min buffers (0 means auto)",
|
||
|
+ 0, VIDEO_MAX_FRAME, DEFAULT_PROP_MIN_BUFFERS,
|
||
|
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
|
||
|
+
|
||
|
gst_type_mark_as_plugin_api (GST_TYPE_V4L2_DEVICE_FLAGS, 0);
|
||
|
gst_type_mark_as_plugin_api (GST_TYPE_V4L2_TV_NORM, 0);
|
||
|
gst_type_mark_as_plugin_api (GST_TYPE_V4L2_IO_MODE, 0);
|
||
|
@@ -548,6 +561,8 @@ gst_v4l2_object_new (GstElement * element,
|
||
|
v4l2object->munmap = munmap;
|
||
|
}
|
||
|
|
||
|
+ v4l2object->min_buffers = DEFAULT_PROP_MIN_BUFFERS;
|
||
|
+
|
||
|
return v4l2object;
|
||
|
}
|
||
|
|
||
|
@@ -715,6 +730,9 @@ gst_v4l2_object_set_property_helper (GstV4l2Object * v4l2object,
|
||
|
case PROP_FORCE_ASPECT_RATIO:
|
||
|
v4l2object->keep_aspect = g_value_get_boolean (value);
|
||
|
break;
|
||
|
+ case PROP_MIN_BUFFERS:
|
||
|
+ v4l2object->min_buffers = g_value_get_uint (value);
|
||
|
+ break;
|
||
|
default:
|
||
|
return FALSE;
|
||
|
break;
|
||
|
@@ -812,6 +830,9 @@ gst_v4l2_object_get_property_helper (GstV4l2Object * v4l2object,
|
||
|
case PROP_FORCE_ASPECT_RATIO:
|
||
|
g_value_set_boolean (value, v4l2object->keep_aspect);
|
||
|
break;
|
||
|
+ case PROP_MIN_BUFFERS:
|
||
|
+ g_value_set_uint (value, v4l2object->min_buffers);
|
||
|
+ break;
|
||
|
default:
|
||
|
return FALSE;
|
||
|
break;
|
||
|
@@ -824,6 +845,9 @@ gst_v4l2_get_driver_min_buffers (GstV4l2Object * v4l2object)
|
||
|
{
|
||
|
struct v4l2_control control = { 0, };
|
||
|
|
||
|
+ if (v4l2object->min_buffers)
|
||
|
+ return;
|
||
|
+
|
||
|
g_return_if_fail (GST_V4L2_IS_OPEN (v4l2object));
|
||
|
|
||
|
if (V4L2_TYPE_IS_OUTPUT (v4l2object->type))
|
||
|
diff --git a/sys/v4l2/gstv4l2object.h b/sys/v4l2/gstv4l2object.h
|
||
|
index 3a5c961..276d58f 100644
|
||
|
--- a/sys/v4l2/gstv4l2object.h
|
||
|
+++ b/sys/v4l2/gstv4l2object.h
|
||
|
@@ -246,7 +246,8 @@ GType gst_v4l2_object_get_type (void);
|
||
|
PROP_CAPTURE_IO_MODE, \
|
||
|
PROP_EXTRA_CONTROLS, \
|
||
|
PROP_PIXEL_ASPECT_RATIO, \
|
||
|
- PROP_FORCE_ASPECT_RATIO
|
||
|
+ PROP_FORCE_ASPECT_RATIO, \
|
||
|
+ PROP_MIN_BUFFERS
|
||
|
|
||
|
/* create/destroy */
|
||
|
GstV4l2Object* gst_v4l2_object_new (GstElement * element,
|
||
|
--
|
||
|
2.20.1
|
||
|
|