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;
}