mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-28 03:00:35 +00:00
videomixer: clear video frame more correctly
Make sure not to touch memory that doesn't belong to our frame, we might be one part of a side-by-side 3D frame, or in a picture-in-picture scenario.
This commit is contained in:
parent
c203ce2dbe
commit
f5e0321dfc
1 changed files with 16 additions and 4 deletions
|
@ -837,11 +837,23 @@ gst_videomixer2_blend_buffers (GstVideoMixer2 * mix,
|
|||
break;
|
||||
case VIDEO_MIXER2_BACKGROUND_TRANSPARENT:
|
||||
{
|
||||
guint i, num_maps;
|
||||
guint i, plane, num_planes, height;
|
||||
|
||||
num_maps = (outframe.meta) ? GST_VIDEO_FRAME_N_PLANES (&outframe) : 1;
|
||||
for (i = 0; i < num_maps; ++i)
|
||||
memset (outframe.map[i].data, 0, outframe.map[i].size);
|
||||
num_planes = GST_VIDEO_FRAME_N_PLANES (&outframe);
|
||||
for (plane = 0; plane < num_planes; ++plane) {
|
||||
guint8 *pdata;
|
||||
gsize rowsize, plane_stride;
|
||||
|
||||
pdata = GST_VIDEO_FRAME_PLANE_DATA (&outframe, plane);
|
||||
plane_stride = GST_VIDEO_FRAME_PLANE_STRIDE (&outframe, plane);
|
||||
rowsize = GST_VIDEO_FRAME_COMP_WIDTH (&outframe, plane)
|
||||
* GST_VIDEO_FRAME_COMP_PSTRIDE (&outframe, plane);
|
||||
height = GST_VIDEO_FRAME_COMP_HEIGHT (&outframe, plane);
|
||||
for (i = 0; i < height; ++i) {
|
||||
memset (pdata, 0, rowsize);
|
||||
pdata += plane_stride;
|
||||
}
|
||||
}
|
||||
|
||||
/* use overlay to keep background transparent */
|
||||
composite = mix->overlay;
|
||||
|
|
Loading…
Reference in a new issue