overlaycomposition

overlaycomposition

Signals

Types and Values

Object Hierarchy

    GObject
    ╰── GInitiallyUnowned
        ╰── GstObject
            ╰── GstElement
                ╰── GstOverlayComposition

Description

The overlaycomposition element renders an overlay using an application provided draw function.

A more interesting example can be found at https://cgit.freedesktop.org/gstreamer/gst-plugins-base/tree/tests/examples/overlaycomposition/overlaycomposition.c

Example code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#include <gst/gst.h>
#include <gst/video/video.h>

...

typedef struct {
  gboolean valid;
  GstVideoInfo info;
} OverlayState;

...

static void
prepare_overlay (GstElement * overlay, GstCaps * caps, gint window_width,
    gint window_height, gpointer user_data)
{
  OverlayState *s = (OverlayState *)user_data;

  if (gst_video_info_from_caps (&s->info, caps))
    s->valid = TRUE;
}

static GstVideoOverlayComposition *
draw_overlay (GstElement * overlay, GstSample * sample, gpointer user_data)
{
  OverlayState *s = (OverlayState *)user_data;
  GstBuffer *buffer;
  GstVideoOverlayRectangle *rect;
  GstVideoOverlayComposition *comp;
  GstVideoInfo info;
  GstVideoFrame frame;
  gint x, y;
  guint8 *data;

  if (!s->valid)
    return NULL;

  gst_video_info_set_format (&info, GST_VIDEO_FORMAT_BGRA, 16, 16);
  buffer = gst_buffer_new_and_alloc (info.size);
  gst_buffer_add_video_meta (buffer, GST_VIDEO_FRAME_FLAG_NONE,
      GST_VIDEO_INFO_FORMAT(&info),
      GST_VIDEO_INFO_WIDTH(&info),
      GST_VIDEO_INFO_HEIGHT(&info));

  gst_video_frame_map (&frame, &info, buffer, GST_MAP_WRITE);

  // Overlay a half-transparent blue 16x16 rectangle in the middle
  // of the frame
  data = GST_VIDEO_FRAME_PLANE_DATA(&frame, 0);
  for (y = 0; y < 16; y++) {
    guint8 *line = &data[y * GST_VIDEO_FRAME_PLANE_STRIDE (&frame, 0)];
    for (x = 0; x < 16; x++) {
      guint8 *pixel = &line[x * 4];

      pixel[0] = 255;
      pixel[1] = 0;
      pixel[2] = 0;
      pixel[3] = 127;
    }
  }

  gst_video_frame_unmap (&frame);
  rect = gst_video_overlay_rectangle_new_raw (buffer,
      s->info.width / 2 - 8,
      s->info.height / 2 - 8,
      16, 16,
      GST_VIDEO_OVERLAY_FORMAT_FLAG_NONE);
  comp = gst_video_overlay_composition_new (rect);
  gst_video_overlay_rectangle_unref (rect);
  gst_buffer_unref (buffer);

  return comp;
}

...

overlay = gst_element_factory_make ("overlaycomposition", "overlay");

g_signal_connect (overlay, "draw", G_CALLBACK (draw_overlay),
  overlay_state);
g_signal_connect (overlay, "caps-changed", 
  G_CALLBACK (prepare_overlay), overlay_state);
...

Synopsis

Element Information

plugin

overlaycomposition

author

Sebastian Dröge <sebastian@centricular.com>

class

Filter/Editor/Video

Element Pads

name

sink

direction

sink

presence

always

details

video/x-raw, format=(string){ BGRx, RGBx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, I420, YV12, AYUV, YUY2, UYVY, v308, Y41B, Y42B, Y444, NV12, NV21, A420, YUV9, YVU9, IYU1, GRAY8 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]

video/x-raw(ANY), format=(string){ I420, YV12, YUY2, UYVY, AYUV, VUYA, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, Y210, Y410, NV12, NV21, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10BE, I420_10LE, I422_10BE, I422_10LE, Y444_10BE, Y444_10LE, GBR, GBR_10BE, GBR_10LE, NV16, NV24, NV12_64Z32, A420_10BE, A420_10LE, A422_10BE, A422_10LE, A444_10BE, A444_10LE, NV61, P010_10BE, P010_10LE, IYU2, VYUY, GBRA, GBRA_10BE, GBRA_10LE, BGR10A2_LE, GBR_12BE, GBR_12LE, GBRA_12BE, GBRA_12LE, I420_12BE, I420_12LE, I422_12BE, I422_12LE, Y444_12BE, Y444_12LE, GRAY10_LE32, NV12_10LE32, NV16_10LE32, NV12_10LE40 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]

name

src

direction

source

presence

always

details

video/x-raw, format=(string){ BGRx, RGBx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, I420, YV12, AYUV, YUY2, UYVY, v308, Y41B, Y42B, Y444, NV12, NV21, A420, YUV9, YVU9, IYU1, GRAY8 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]

video/x-raw(ANY), format=(string){ I420, YV12, YUY2, UYVY, AYUV, VUYA, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, Y210, Y410, NV12, NV21, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10BE, I420_10LE, I422_10BE, I422_10LE, Y444_10BE, Y444_10LE, GBR, GBR_10BE, GBR_10LE, NV16, NV24, NV12_64Z32, A420_10BE, A420_10LE, A422_10BE, A422_10LE, A444_10BE, A444_10LE, NV61, P010_10BE, P010_10LE, IYU2, VYUY, GBRA, GBRA_10BE, GBRA_10LE, BGR10A2_LE, GBR_12BE, GBR_12LE, GBRA_12BE, GBRA_12LE, I420_12BE, I420_12LE, I422_12BE, I422_12LE, Y444_12BE, Y444_12LE, GRAY10_LE32, NV12_10LE32, NV16_10LE32, NV12_10LE40 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]

Functions

Types and Values

struct GstOverlayComposition

struct GstOverlayComposition;

Signal Details

The “caps-changed” signal

void
user_function (GstOverlayComposition *overlay,
               GstCaps               *caps,
               guint                  window_width,
               guint                  window_height,
               gpointer               user_data)

This signal is emitted when the caps of the element has changed.

The window width and height define the resolution at which the frame is going to be rendered in the end by e.g. a video sink (i.e. the window size).

Parameters

overlay

Overlay element emitting the signal.

 

caps

The GstCaps of the element.

 

window_width

The window render width of downstream, or 0.

 

window_height

The window render height of downstream, or 0.

 

user_data

user data set when the signal handler was connected.

 

The “draw” signal

GstVideoOverlayComposition*
user_function (GstOverlayComposition *overlay,
               GstSample             *sample,
               gpointer               user_data)

This signal is emitted when the overlay should be drawn.

Parameters

overlay

Overlay element emitting the signal.

 

sample

GstSample containing the current buffer, caps and segment.

 

user_data

user data set when the signal handler was connected.