static GstFlowReturn gst_opencv_video_filter_transform (GstBaseTransform * trans, GstBuffer * inbuf, GstBuffer * outbuf) { GstOpencvVideoFilter *transform; GstOpencvVideoFilterClass *fclass; GstFlowReturn ret; transform = GST_OPENCV_VIDEO_FILTER (trans); fclass = GST_OPENCV_VIDEO_FILTER_GET_CLASS (transform); g_return_val_if_fail (fclass->cv_trans_func != NULL, GST_FLOW_ERROR); g_return_val_if_fail (transform->cvImage != NULL, GST_FLOW_ERROR); g_return_val_if_fail (transform->out_cvImage != NULL, GST_FLOW_ERROR); transform->cvImage->imageData = (char *) gst_buffer_map (inbuf, NULL, NULL, GST_MAP_READ); transform->out_cvImage->imageData = (char *) gst_buffer_map (outbuf, NULL, NULL, GST_MAP_WRITE); ret = fclass->cv_trans_func (transform, inbuf, transform->cvImage, outbuf, transform->out_cvImage); gst_buffer_unmap (inbuf, transform->cvImage->imageData, -1); gst_buffer_unmap (outbuf, transform->out_cvImage->imageData, -1); return ret; }
static GstFlowReturn gst_opencv_video_filter_transform (GstBaseTransform * trans, GstBuffer * inbuf, GstBuffer * outbuf) { GstOpencvVideoFilter *transform; GstOpencvVideoFilterClass *fclass; GstMapInfo in_info; GstMapInfo out_info; GstFlowReturn ret; transform = GST_OPENCV_VIDEO_FILTER (trans); fclass = GST_OPENCV_VIDEO_FILTER_GET_CLASS (transform); g_return_val_if_fail (fclass->cv_trans_func != NULL, GST_FLOW_ERROR); g_return_val_if_fail (transform->cvImage != NULL, GST_FLOW_ERROR); g_return_val_if_fail (transform->out_cvImage != NULL, GST_FLOW_ERROR); if (!gst_buffer_map (inbuf, &in_info, GST_MAP_READ)) goto inbuf_map_failed; if (!gst_buffer_map (outbuf, &out_info, GST_MAP_WRITE)) goto outbuf_map_failed; transform->cvImage->imageData = (char *) in_info.data; transform->out_cvImage->imageData = (char *) out_info.data; ret = fclass->cv_trans_func (transform, inbuf, transform->cvImage, outbuf, transform->out_cvImage); gst_buffer_unmap (inbuf, &in_info); gst_buffer_unmap (outbuf, &out_info); return ret; inbuf_map_failed: GST_ELEMENT_ERROR (transform, RESOURCE, READ, ("Failed to map buffer for reading"), (NULL)); return GST_FLOW_ERROR; outbuf_map_failed: GST_ELEMENT_ERROR (transform, RESOURCE, WRITE, ("Failed to map buffer for writing"), (NULL)); gst_buffer_unmap (inbuf, &in_info); return GST_FLOW_ERROR; }