How to use gst_memory_new_wrapped wrap opencv mat ?
Erickson.LU
ericksonlushan at gmail.com
Wed Oct 10 09:42:58 UTC 2018
Hi all,
I use try to use the procedure “v4l2(V4L2_PIX_FMT_YUYV)->opencv mat->(do
something)->gstreamer”.
v4l2->gstreamer
I think the pipeline is ok, cause i have used it to show v4l2 YUY2 format.
Like v4l2 (V4L2_PIX_FMT_YUYV)
-> cv::Mat mat = cv::Mat(480,640,CV_8UC2,(void*)fbuffer1);
-> wrapped_mem1 = gst_memory_new_wrapped( (GstMemoryFlags)0, (gpointer)
fbuffer1, *len* , 0, *len* , NULL, NULL);
->
g_object_set(G_OBJECT(gst_handle->src), "caps",
gst_caps_new_simple("video/x-raw",
"format", G_TYPE_STRING, "YUY2",
"width", G_TYPE_INT, cmdline.width,
"height", G_TYPE_INT, cmdline.s_height,
"framerate", GST_TYPE_FRACTION, 30, 1,
NULL), NULL);
v4l2->mat->do something -> appsrc
when i try to do some thing to mat and stream it out. There is the
problem...
len=640*480*2
----------------------------------------------------------------------------------------------------------------
memcpy(fbuffer1, (((unsigned char *) (cap_ptr[0])) ), *len*);
//fbuffer1 is the unsigned char * reference at v4l2_capture_buffer.ptr
cv::Mat mat = cv::Mat(480,640,CV_8UC2,(void*)fbuffer1);
cv::Mat rgb_mat;
cv::cvtColor(mat,rgb_mat,cv::COLOR_YUV2BGR_YUY2);
//***************do
something***********************************************//
cv::cvtColor(rgb_cv,rgb_cv,CV_BGR2YUV_I420);
wrapped_mem1 = gst_memory_new_wrapped( (GstMemoryFlags)0,
(gpointer) rgb_cv.data, *len* , 0, *len* , NULL, NULL);
gst_buffer_append_memory(buffer1, wrapped_mem1);
g_signal_emit_by_name(gst_handle1->src, "push-buffer", buffer1,
&ret1);
-------------------------------------------------------------------------------------------------------------
#define PIPELINE "appsrc name=mysource !" \
" video/x-raw,width=%d,height=%d ! "\
" videoconvert ! xvimagesink "
gst_handle->src = gst_bin_get_by_name (GST_BIN(gst_handle->pipeline),
"mysource");
gst_handle->width = cmdline.width;
gst_handle->height = cmdline.height;
g_object_set(G_OBJECT(gst_handle->src), "caps",
gst_caps_new_simple("video/x-raw",
"format", G_TYPE_STRING, "I420",
"width", G_TYPE_INT, cmdline.width,
"height", G_TYPE_INT, cmdline.s_height,
"framerate", GST_TYPE_FRACTION, 30, 1,
NULL), NULL);
-------------------------------------------------------------------------------------------------------------
The process crash at "gst_memory_new_wrapped" so many times but some time it
will be OK.
Some things beyond the topic
If i just use the mat has been converted to BGR and stream it out. I don't
know why the xvimagesink show all GREEN.
Thank for you focus.
--
Sent from: http://gstreamer-devel.966125.n4.nabble.com/
More information about the gstreamer-devel
mailing list