rpicamsrc: Add intra-refresh-type property, and set default keyframe spacing to -1 (auto)
This plus other recent commits mostly fix bug https://github.com/thaytan/gst-rpicamsrc/issues/16
This commit is contained in:
parent
ed22d5cc4e
commit
2087b1e44e
@ -91,3 +91,11 @@ typedef enum /*< flags >*/ {
|
|||||||
GST_RPI_CAM_SRC_ANNOTATION_MODE_FRAME_NUMBER = ANNOTATE_FRAME_NUMBER,
|
GST_RPI_CAM_SRC_ANNOTATION_MODE_FRAME_NUMBER = ANNOTATE_FRAME_NUMBER,
|
||||||
GST_RPI_CAM_SRC_ANNOTATION_MODE_BLACK_BACKGROUND = ANNOTATE_BLACK_BACKGROUND
|
GST_RPI_CAM_SRC_ANNOTATION_MODE_BLACK_BACKGROUND = ANNOTATE_BLACK_BACKGROUND
|
||||||
} GstRpiCamSrcAnnotationMode;
|
} GstRpiCamSrcAnnotationMode;
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
GST_RPI_CAM_SRC_INTRA_REFRESH_TYPE_NONE = -1,
|
||||||
|
GST_RPI_CAM_SRC_INTRA_REFRESH_TYPE_CYCLIC,
|
||||||
|
GST_RPI_CAM_SRC_INTRA_REFRESH_TYPE_ADAPTIVE,
|
||||||
|
GST_RPI_CAM_SRC_INTRA_REFRESH_TYPE_BOTH,
|
||||||
|
GST_RPI_CAM_SRC_INTRA_REFRESH_TYPE_CYCLIC_ROWS
|
||||||
|
} GstRpiCamSrcIntraRefreshType;
|
||||||
|
@ -125,7 +125,8 @@ enum
|
|||||||
PROP_SENSOR_MODE,
|
PROP_SENSOR_MODE,
|
||||||
PROP_DRC,
|
PROP_DRC,
|
||||||
PROP_ANNOTATION_MODE,
|
PROP_ANNOTATION_MODE,
|
||||||
PROP_ANNOTATION_TEXT
|
PROP_ANNOTATION_TEXT,
|
||||||
|
PROP_INTRA_REFRESH_TYPE
|
||||||
};
|
};
|
||||||
|
|
||||||
#define CAMERA_DEFAULT 0
|
#define CAMERA_DEFAULT 0
|
||||||
@ -142,7 +143,7 @@ enum
|
|||||||
#define ISO_DEFAULT 0
|
#define ISO_DEFAULT 0
|
||||||
#define VIDEO_STABILISATION_DEFAULT FALSE
|
#define VIDEO_STABILISATION_DEFAULT FALSE
|
||||||
#define EXPOSURE_COMPENSATION_DEFAULT 0
|
#define EXPOSURE_COMPENSATION_DEFAULT 0
|
||||||
#define KEYFRAME_INTERVAL_DEFAULT 25
|
#define KEYFRAME_INTERVAL_DEFAULT -1
|
||||||
|
|
||||||
#define EXPOSURE_MODE_DEFAULT GST_RPI_CAM_SRC_EXPOSURE_MODE_AUTO
|
#define EXPOSURE_MODE_DEFAULT GST_RPI_CAM_SRC_EXPOSURE_MODE_AUTO
|
||||||
#define EXPOSURE_METERING_MODE_DEFAULT GST_RPI_CAM_SRC_EXPOSURE_METERING_MODE_AVERAGE
|
#define EXPOSURE_METERING_MODE_DEFAULT GST_RPI_CAM_SRC_EXPOSURE_METERING_MODE_AVERAGE
|
||||||
@ -261,8 +262,8 @@ gst_rpi_cam_src_class_init (GstRpiCamSrcClass * klass)
|
|||||||
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
|
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
|
||||||
g_object_class_install_property (gobject_class, PROP_KEYFRAME_INTERVAL,
|
g_object_class_install_property (gobject_class, PROP_KEYFRAME_INTERVAL,
|
||||||
g_param_spec_int ("keyframe-interval", "Keyframe Interface",
|
g_param_spec_int ("keyframe-interval", "Keyframe Interface",
|
||||||
"Interval (in frames) between I frames. 0 = single-keyframe", 0,
|
"Interval (in frames) between I frames. -1 = automatic, 0 = single-keyframe",
|
||||||
G_MAXINT, KEYFRAME_INTERVAL_DEFAULT,
|
-1, G_MAXINT, KEYFRAME_INTERVAL_DEFAULT,
|
||||||
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
|
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
|
||||||
g_object_class_install_property (gobject_class, PROP_PREVIEW,
|
g_object_class_install_property (gobject_class, PROP_PREVIEW,
|
||||||
g_param_spec_boolean ("preview", "Preview Window",
|
g_param_spec_boolean ("preview", "Preview Window",
|
||||||
@ -276,52 +277,50 @@ gst_rpi_cam_src_class_init (GstRpiCamSrcClass * klass)
|
|||||||
g_param_spec_boolean ("preview-encoded", "Preview Encoded",
|
g_param_spec_boolean ("preview-encoded", "Preview Encoded",
|
||||||
"Display encoder output in the preview", TRUE,
|
"Display encoder output in the preview", TRUE,
|
||||||
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
|
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
|
||||||
g_object_class_install_property (G_OBJECT_CLASS (klass),
|
g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_PREVIEW_OPACITY,
|
||||||
PROP_PREVIEW_OPACITY, g_param_spec_int ("preview-opacity",
|
g_param_spec_int ("preview-opacity", "Preview Opacity",
|
||||||
"Preview Opacity", "Opacity to use for the preview window", 0,
|
"Opacity to use for the preview window", 0, 255, 255,
|
||||||
255, 255, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
|
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
|
||||||
g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_SHARPNESS,
|
g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_SHARPNESS,
|
||||||
g_param_spec_int ("sharpness", "Sharpness", "Image capture sharpness",
|
g_param_spec_int ("sharpness", "Sharpness", "Image capture sharpness",
|
||||||
-100, 100, SHARPNESS_DEFAULT,
|
-100, 100, SHARPNESS_DEFAULT,
|
||||||
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
|
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
|
||||||
g_object_class_install_property (gobject_class, PROP_CONTRAST,
|
g_object_class_install_property (gobject_class, PROP_CONTRAST,
|
||||||
g_param_spec_int ("contrast", "Contrast", "Image capture contrast",
|
g_param_spec_int ("contrast", "Contrast", "Image capture contrast", -100,
|
||||||
-100, 100, CONTRAST_DEFAULT,
|
100, CONTRAST_DEFAULT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
|
||||||
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
|
|
||||||
g_object_class_install_property (gobject_class, PROP_BRIGHTNESS,
|
g_object_class_install_property (gobject_class, PROP_BRIGHTNESS,
|
||||||
g_param_spec_int ("brightness", "Brightness",
|
g_param_spec_int ("brightness", "Brightness", "Image capture brightness",
|
||||||
"Image capture brightness", 0, 100, BRIGHTNESS_DEFAULT,
|
0, 100, BRIGHTNESS_DEFAULT,
|
||||||
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
|
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
|
||||||
g_object_class_install_property (gobject_class, PROP_SATURATION,
|
g_object_class_install_property (gobject_class, PROP_SATURATION,
|
||||||
g_param_spec_int ("saturation", "Saturation",
|
g_param_spec_int ("saturation", "Saturation", "Image capture saturation",
|
||||||
"Image capture saturation", -100, 100, SATURATION_DEFAULT,
|
-100, 100, SATURATION_DEFAULT,
|
||||||
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
|
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
|
||||||
g_object_class_install_property (gobject_class, PROP_ISO,
|
g_object_class_install_property (gobject_class, PROP_ISO,
|
||||||
g_param_spec_int ("iso", "ISO", "ISO value to use (0 = Auto)", 0,
|
g_param_spec_int ("iso", "ISO", "ISO value to use (0 = Auto)", 0, 3200, 0,
|
||||||
3200, 0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
|
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
|
||||||
g_object_class_install_property (gobject_class, PROP_VIDEO_STABILISATION,
|
g_object_class_install_property (gobject_class, PROP_VIDEO_STABILISATION,
|
||||||
g_param_spec_boolean ("video-stabilisation", "Video Stabilisation",
|
g_param_spec_boolean ("video-stabilisation", "Video Stabilisation",
|
||||||
"Enable or disable video stabilisation", FALSE,
|
"Enable or disable video stabilisation", FALSE,
|
||||||
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
|
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
|
||||||
g_object_class_install_property (gobject_class,
|
g_object_class_install_property (gobject_class, PROP_EXPOSURE_COMPENSATION,
|
||||||
PROP_EXPOSURE_COMPENSATION, g_param_spec_int ("exposure-compensation",
|
g_param_spec_int ("exposure-compensation", "EV compensation",
|
||||||
"EV compensation", "Exposure Value compensation", -10, 10, 0,
|
"Exposure Value compensation", -10, 10, 0,
|
||||||
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
|
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
|
||||||
g_object_class_install_property (gobject_class, PROP_EXPOSURE_MODE,
|
g_object_class_install_property (gobject_class, PROP_EXPOSURE_MODE,
|
||||||
g_param_spec_enum ("exposure-mode", "Exposure Mode",
|
g_param_spec_enum ("exposure-mode", "Exposure Mode",
|
||||||
"Camera exposure mode to use",
|
"Camera exposure mode to use",
|
||||||
GST_RPI_CAM_TYPE_RPI_CAM_SRC_EXPOSURE_MODE, EXPOSURE_MODE_DEFAULT,
|
GST_RPI_CAM_TYPE_RPI_CAM_SRC_EXPOSURE_MODE, EXPOSURE_MODE_DEFAULT,
|
||||||
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
|
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
|
||||||
g_object_class_install_property (gobject_class,
|
g_object_class_install_property (gobject_class, PROP_EXPOSURE_METERING_MODE,
|
||||||
PROP_EXPOSURE_METERING_MODE, g_param_spec_enum ("metering-mode",
|
g_param_spec_enum ("metering-mode", "Exposure Metering Mode",
|
||||||
"Exposure Metering Mode", "Camera exposure metering mode to use",
|
"Camera exposure metering mode to use",
|
||||||
GST_RPI_CAM_TYPE_RPI_CAM_SRC_EXPOSURE_METERING_MODE,
|
GST_RPI_CAM_TYPE_RPI_CAM_SRC_EXPOSURE_METERING_MODE,
|
||||||
EXPOSURE_METERING_MODE_DEFAULT,
|
EXPOSURE_METERING_MODE_DEFAULT,
|
||||||
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
|
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
|
||||||
g_object_class_install_property (gobject_class, PROP_DRC,
|
g_object_class_install_property (gobject_class, PROP_DRC,
|
||||||
g_param_spec_enum ("drc", "DRC level", "Dynamic Range Control level",
|
g_param_spec_enum ("drc", "DRC level", "Dynamic Range Control level",
|
||||||
GST_RPI_CAM_TYPE_RPI_CAM_SRC_DRC_LEVEL,
|
GST_RPI_CAM_TYPE_RPI_CAM_SRC_DRC_LEVEL, GST_RPI_CAM_SRC_DRC_LEVEL_OFF,
|
||||||
GST_RPI_CAM_SRC_DRC_LEVEL_OFF,
|
|
||||||
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
|
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
|
||||||
g_object_class_install_property (gobject_class, PROP_AWB_MODE,
|
g_object_class_install_property (gobject_class, PROP_AWB_MODE,
|
||||||
g_param_spec_enum ("awb-mode", "Automatic White Balance Mode",
|
g_param_spec_enum ("awb-mode", "Automatic White Balance Mode",
|
||||||
@ -403,6 +402,12 @@ gst_rpi_cam_src_class_init (GstRpiCamSrcClass * klass)
|
|||||||
g_param_spec_string ("annotation-text", "Annotation Text",
|
g_param_spec_string ("annotation-text", "Annotation Text",
|
||||||
"Text string to annotate onto video when annotation-mode flags include 'custom-text'",
|
"Text string to annotate onto video when annotation-mode flags include 'custom-text'",
|
||||||
NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
|
NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
|
||||||
|
g_object_class_install_property (gobject_class, PROP_INTRA_REFRESH_TYPE,
|
||||||
|
g_param_spec_enum ("intra-refresh-type", "Intra Refresh Type",
|
||||||
|
"Type of Intra Refresh to use, -1 to disable intra refresh",
|
||||||
|
GST_RPI_CAM_TYPE_RPI_CAM_SRC_INTRA_REFRESH_TYPE,
|
||||||
|
GST_RPI_CAM_SRC_INTRA_REFRESH_TYPE_NONE,
|
||||||
|
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
|
||||||
|
|
||||||
gst_element_class_set_static_metadata (gstelement_class,
|
gst_element_class_set_static_metadata (gstelement_class,
|
||||||
"Raspberry Pi Camera Source", "Source/Video",
|
"Raspberry Pi Camera Source", "Source/Video",
|
||||||
@ -550,12 +555,19 @@ gst_rpi_cam_src_set_property (GObject * object, guint prop_id,
|
|||||||
src->capture_config.sensor_mode = g_value_get_enum (value);
|
src->capture_config.sensor_mode = g_value_get_enum (value);
|
||||||
break;
|
break;
|
||||||
case PROP_ANNOTATION_MODE:
|
case PROP_ANNOTATION_MODE:
|
||||||
src->capture_config.camera_parameters.enable_annotate = g_value_get_flags (value);
|
src->capture_config.camera_parameters.enable_annotate =
|
||||||
|
g_value_get_flags (value);
|
||||||
break;
|
break;
|
||||||
case PROP_ANNOTATION_TEXT:
|
case PROP_ANNOTATION_TEXT:
|
||||||
strncpy (src->capture_config.camera_parameters.annotate_string,
|
strncpy (src->capture_config.camera_parameters.annotate_string,
|
||||||
g_value_get_string (value), MMAL_CAMERA_ANNOTATE_MAX_TEXT_LEN_V2);
|
g_value_get_string (value), MMAL_CAMERA_ANNOTATE_MAX_TEXT_LEN_V2);
|
||||||
src->capture_config.camera_parameters.annotate_string[MMAL_CAMERA_ANNOTATE_MAX_TEXT_LEN_V2 - 1] = '\0';
|
src->capture_config.
|
||||||
|
camera_parameters.annotate_string[MMAL_CAMERA_ANNOTATE_MAX_TEXT_LEN_V2
|
||||||
|
- 1] = '\0';
|
||||||
|
break;
|
||||||
|
case PROP_INTRA_REFRESH_TYPE:
|
||||||
|
src->capture_config.intra_refresh_type =
|
||||||
|
g_value_get_enum (value);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||||
@ -678,10 +690,16 @@ gst_rpi_cam_src_get_property (GObject * object, guint prop_id,
|
|||||||
g_value_set_enum (value, src->capture_config.sensor_mode);
|
g_value_set_enum (value, src->capture_config.sensor_mode);
|
||||||
break;
|
break;
|
||||||
case PROP_ANNOTATION_MODE:
|
case PROP_ANNOTATION_MODE:
|
||||||
g_value_set_flags (value, src->capture_config.camera_parameters.enable_annotate);
|
g_value_set_flags (value,
|
||||||
|
src->capture_config.camera_parameters.enable_annotate);
|
||||||
break;
|
break;
|
||||||
case PROP_ANNOTATION_TEXT:
|
case PROP_ANNOTATION_TEXT:
|
||||||
g_value_set_string (value, src->capture_config.camera_parameters.annotate_string);
|
g_value_set_string (value,
|
||||||
|
src->capture_config.camera_parameters.annotate_string);
|
||||||
|
break;
|
||||||
|
case PROP_INTRA_REFRESH_TYPE:
|
||||||
|
g_value_set_enum (value,
|
||||||
|
src->capture_config.intra_refresh_type);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user