Пример #1
0
/* chain function
 * this function does the actual processing
 */
static GstFlowReturn
gst_opencv_text_overlay_chain (GstPad * pad, GstObject * parent,
    GstBuffer * buf)
{
  GstOpencvTextOverlay *filter;
  GstMapInfo map_info;
  guint8 *data;

  filter = GST_OPENCV_TEXT_OVERLAY (parent);

  gst_buffer_map (buf, &map_info, GST_MAP_READ);
  data = map_info.data;

  filter->cvImage->imageData = (char *) data;

  cvInitFont (&(filter->font), CV_FONT_VECTOR0, filter->width, filter->height,
      0, filter->thickness, 0);

  buf = gst_buffer_make_writable (buf);
  cvPutText (filter->cvImage, filter->textbuf, cvPoint (filter->xpos,
          filter->ypos), &(filter->font), cvScalar (filter->colorR,
          filter->colorG, filter->colorB, 0));

  gst_buffer_unmap (buf, &map_info);
  return gst_pad_push (filter->srcpad, buf);
}
Пример #2
0
static gboolean
gst_opencv_text_overlay_handle_sink_event (GstPad * pad, GstObject * parent,
    GstEvent * event)
{
  GstOpencvTextOverlay *filter;
  gint width, height;
  GstStructure *structure;
  gboolean res = TRUE;

  filter = GST_OPENCV_TEXT_OVERLAY (parent);

  switch (GST_EVENT_TYPE (event)) {
    case GST_EVENT_CAPS:
    {
      GstCaps *caps;
      gst_event_parse_caps (event, &caps);

      structure = gst_caps_get_structure (caps, 0);
      gst_structure_get_int (structure, "width", &width);
      gst_structure_get_int (structure, "height", &height);

      if (filter->cvImage) {
        cvReleaseImage (&filter->cvImage);
      }
      filter->cvImage = cvCreateImage (cvSize (width, height), IPL_DEPTH_8U, 3);

      break;
    }
    default:
      break;
  }

  res = gst_pad_event_default (pad, parent, event);
  return res;
}
Пример #3
0
/* Clean up */
static void
gst_opencv_text_overlay_finalize (GObject * obj)
{
  GstOpencvTextOverlay *filter = GST_OPENCV_TEXT_OVERLAY (obj);

  g_free (filter->textbuf);

  G_OBJECT_CLASS (gst_opencv_text_overlay_parent_class)->finalize (obj);
}
Пример #4
0
/* Clean up */
static void
gst_opencv_text_overlay_finalize (GObject * obj)
{
  GstOpencvTextOverlay *filter = GST_OPENCV_TEXT_OVERLAY (obj);

  if (filter->cvImage) {
    cvReleaseImage (&filter->cvImage);
  }

  G_OBJECT_CLASS (parent_class)->finalize (obj);
}
Пример #5
0
/* chain function
 * this function does the actual processing
 */
static GstFlowReturn
gst_opencv_text_overlay_transform_ip (GstOpencvVideoFilter * base,
    GstBuffer * buf, IplImage * img)
{
  GstOpencvTextOverlay *filter = GST_OPENCV_TEXT_OVERLAY (base);

  cvInitFont (&(filter->font), CV_FONT_VECTOR0, filter->width, filter->height,
      0, filter->thickness, 0);
  cvPutText (img, filter->textbuf, cvPoint (filter->xpos,
          filter->ypos), &(filter->font), cvScalar (filter->colorR,
          filter->colorG, filter->colorB, 0));

  return GST_FLOW_OK;
}
Пример #6
0
/* chain function
 * this function does the actual processing
 */
static GstFlowReturn
gst_opencv_text_overlay_chain (GstPad * pad, GstBuffer * buf)
{
  GstOpencvTextOverlay *filter;

  filter = GST_OPENCV_TEXT_OVERLAY (GST_OBJECT_PARENT (pad));

  filter->cvImage->imageData = (char *) GST_BUFFER_DATA (buf);

  cvInitFont (&(filter->font), CV_FONT_VECTOR0, filter->width, filter->height,
      0, filter->thickness, 0);

  buf = gst_buffer_make_writable (buf);
  cvPutText (filter->cvImage, filter->textbuf, cvPoint (filter->xpos,
          filter->ypos), &(filter->font), cvScalar (filter->colorR,
          filter->colorG, filter->colorB, 0));

  return gst_pad_push (filter->srcpad, buf);
}
Пример #7
0
static void
gst_opencv_text_overlay_set_property (GObject * object, guint prop_id,
    const GValue * value, GParamSpec * pspec)
{
  GstOpencvTextOverlay *filter = GST_OPENCV_TEXT_OVERLAY (object);

  switch (prop_id) {
    case PROP_TEXT:
      g_free (filter->textbuf);
      filter->textbuf = g_value_dup_string (value);
      break;
    case PROP_XPOS:
      filter->xpos = g_value_get_int (value);
      break;
    case PROP_YPOS:
      filter->ypos = g_value_get_int (value);
      break;
    case PROP_THICKNESS:
      filter->thickness = g_value_get_int (value);
      break;

    case PROP_COLOR_R:
      filter->colorR = g_value_get_int (value);
      break;
    case PROP_COLOR_G:
      filter->colorG = g_value_get_int (value);
      break;
    case PROP_COLOR_B:
      filter->colorB = g_value_get_int (value);
      break;

    case PROP_HEIGHT:
      filter->height = g_value_get_double (value);
      break;
    case PROP_WIDTH:
      filter->width = g_value_get_double (value);
      break;
    default:
      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
      break;
  }
}
Пример #8
0
/* this function handles the link with other elements */
static gboolean
gst_opencv_text_overlay_set_caps (GstPad * pad, GstCaps * caps)
{
  GstOpencvTextOverlay *filter;
  GstPad *otherpad;

  gint width, height;
  GstStructure *structure;

  filter = GST_OPENCV_TEXT_OVERLAY (gst_pad_get_parent (pad));

  structure = gst_caps_get_structure (caps, 0);
  gst_structure_get_int (structure, "width", &width);
  gst_structure_get_int (structure, "height", &height);

  filter->cvImage = cvCreateImage (cvSize (width, height), IPL_DEPTH_8U, 3);
  filter->cvStorage = cvCreateMemStorage (0);

  otherpad = (pad == filter->srcpad) ? filter->sinkpad : filter->srcpad;
  gst_object_unref (filter);

  return gst_pad_set_caps (otherpad, caps);
}