yuweiw:
create_camera_source_bin
This command works for me.
$ gst-launch-1.0 v4l2src device=/dev/video0 ! 'image/jpeg, width=1280, height=720, framerate=10/1' ! nvv4l2decoder ! nvvideoconvert ! 'video/x-raw(memory:NVMM),format=NV12' ! mux.sink_0 nvstreammux name=mux width=1280 height=720 batch-size=1 ! fakesink
In my config is
[source0]
enable=1
#Type - 1=CameraV4L2 2=URI 3=MultiURI
type=1
camera-width=1280
camera-height=720
camera-fps-n=10
camera-fps-d=1
camera-v4l2-dev-node=0
What do I need to change in the create_camera_source_bin
?
Whole code is
static gboolean
create_camera_source_bin (NvDsSourceConfig * config, NvDsSrcBin * bin)
{
GstCaps *caps = NULL, *caps1 = NULL, *convertCaps = NULL;
gboolean ret = FALSE;
switch (config->type) {
case NV_DS_SOURCE_CAMERA_CSI:
bin->src_elem =
gst_element_factory_make (NVDS_ELEM_SRC_CAMERA_CSI, "src_elem");
break;
case NV_DS_SOURCE_CAMERA_V4L2:
bin->src_elem =
gst_element_factory_make (NVDS_ELEM_SRC_CAMERA_V4L2, "src_elem");
bin->cap_filter1 =
gst_element_factory_make (NVDS_ELEM_CAPS_FILTER, "src_cap_filter1");
if (!bin->cap_filter1) {
NVGSTDS_ERR_MSG_V ("Could not create 'src_cap_filter1'");
goto done;
}
caps1 = gst_caps_new_simple ("video/x-raw",
"width", G_TYPE_INT, config->source_width, "height", G_TYPE_INT,
config->source_height, "framerate", GST_TYPE_FRACTION,
config->source_fps_n, config->source_fps_d, NULL);
break;
default:
NVGSTDS_ERR_MSG_V ("Unsupported source type");
goto done;
}
if (!bin->src_elem) {
NVGSTDS_ERR_MSG_V ("Could not create 'src_elem'");
goto done;
}
bin->cap_filter =
gst_element_factory_make (NVDS_ELEM_CAPS_FILTER, "src_cap_filter");
if (!bin->cap_filter) {
NVGSTDS_ERR_MSG_V ("Could not create 'src_cap_filter'");
goto done;
}
if (config->video_format) {
caps = gst_caps_new_simple ("video/x-raw", "format", G_TYPE_STRING,
config->video_format, "width", G_TYPE_INT, config->source_width,
"height", G_TYPE_INT, config->source_height, "framerate",
GST_TYPE_FRACTION, config->source_fps_n, config->source_fps_d,
NULL);
} else {
caps = gst_caps_new_simple ("video/x-raw", "format", G_TYPE_STRING, "NV12",
"width", G_TYPE_INT, config->source_width, "height", G_TYPE_INT,
config->source_height, "framerate", GST_TYPE_FRACTION,
config->source_fps_n, config->source_fps_d, NULL);
}
if (config->type == NV_DS_SOURCE_CAMERA_CSI) {
GstCapsFeatures *feature = NULL;
feature = gst_caps_features_new ("memory:NVMM", NULL);
gst_caps_set_features (caps, 0, feature);
}
struct cudaDeviceProp prop;
cudaGetDeviceProperties (&prop, config->gpu_id);
if (config->type == NV_DS_SOURCE_CAMERA_V4L2) {
GstElement *nvvidconv2;
GstCapsFeatures *feature = NULL;
//Check based on igpu/dgpu instead of x86/aarch64
GstElement *nvvidconv1 = NULL;
if (!prop.integrated) {
nvvidconv1 = gst_element_factory_make ("videoconvert", "nvvidconv1");
if (!nvvidconv1) {
NVGSTDS_ERR_MSG_V ("Failed to create 'nvvidconv1'");
goto done;
}
}
feature = gst_caps_features_new ("memory:NVMM", NULL);
gst_caps_set_features (caps, 0, feature);
g_object_set (G_OBJECT (bin->cap_filter), "caps", caps, NULL);
g_object_set (G_OBJECT (bin->cap_filter1), "caps", caps1, NULL);
nvvidconv2 = gst_element_factory_make (NVDS_ELEM_VIDEO_CONV, "nvvidconv2");
if (!nvvidconv2) {
NVGSTDS_ERR_MSG_V ("Failed to create 'nvvidconv2'");
goto done;
}
g_object_set (G_OBJECT (nvvidconv2), "gpu-id", config->gpu_id,
"nvbuf-memory-type", config->nvbuf_memory_type, NULL);
if (!prop.integrated) {
gst_bin_add_many (GST_BIN (bin->bin), bin->src_elem, bin->cap_filter1,
nvvidconv1, nvvidconv2, bin->cap_filter, NULL);
} else {
gst_bin_add_many (GST_BIN (bin->bin), bin->src_elem, bin->cap_filter1,
nvvidconv2, bin->cap_filter, NULL);
}
NVGSTDS_LINK_ELEMENT (bin->src_elem, bin->cap_filter1);
if (!prop.integrated) {
NVGSTDS_LINK_ELEMENT (bin->cap_filter1, nvvidconv1);
NVGSTDS_LINK_ELEMENT (nvvidconv1, nvvidconv2);
} else {
NVGSTDS_LINK_ELEMENT (bin->cap_filter1, nvvidconv2);
}
NVGSTDS_LINK_ELEMENT (nvvidconv2, bin->cap_filter);
NVGSTDS_BIN_ADD_GHOST_PAD (bin->bin, bin->cap_filter, "src");
} else {
g_object_set (G_OBJECT (bin->cap_filter), "caps", caps, NULL);
gst_bin_add_many (GST_BIN (bin->bin), bin->src_elem, bin->cap_filter, NULL);
NVGSTDS_LINK_ELEMENT (bin->src_elem, bin->cap_filter);
NVGSTDS_BIN_ADD_GHOST_PAD (bin->bin, bin->cap_filter, "src");
}
switch (config->type) {
case NV_DS_SOURCE_CAMERA_CSI:
if (!set_camera_csi_params (config, bin)) {
NVGSTDS_ERR_MSG_V ("Could not set CSI camera properties");
goto done;
}
break;
case NV_DS_SOURCE_CAMERA_V4L2:
if (!set_camera_v4l2_params (config, bin)) {
NVGSTDS_ERR_MSG_V ("Could not set V4L2 camera properties");
goto done;
}
break;
default:
NVGSTDS_ERR_MSG_V ("Unsupported source type");
goto done;
}
ret = TRUE;
GST_CAT_DEBUG (NVDS_APP, "Created camera source bin successfully");
done:
if (caps)
gst_caps_unref (caps);
if (convertCaps)
gst_caps_unref (convertCaps);
if (!ret) {
NVGSTDS_ERR_MSG_V ("%s failed", __func__);
}
return ret;
}