mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-23 18:21:04 +00:00
videomixer: fix warnings when using transparent background
gst_video_frame_map() increases the refcount, which makes the buffer not writable any more technically, so calling gst_buffer_memset() on it will cause nasty warnings. Unit test disabled because it very rarely (for me) fails, possibly negotiation-related. https://bugzilla.gnome.org/show_bug.cgi?id=684398
This commit is contained in:
parent
03e5376827
commit
626e0258e3
2 changed files with 32 additions and 3 deletions
|
@ -836,11 +836,18 @@ gst_videomixer2_blend_buffers (GstVideoMixer2 * mix,
|
||||||
mix->fill_color (&outframe, 240, 128, 128);
|
mix->fill_color (&outframe, 240, 128, 128);
|
||||||
break;
|
break;
|
||||||
case VIDEO_MIXER2_BACKGROUND_TRANSPARENT:
|
case VIDEO_MIXER2_BACKGROUND_TRANSPARENT:
|
||||||
gst_buffer_memset (*outbuf, 0, 0, outsize);
|
{
|
||||||
|
guint i, num_maps;
|
||||||
|
|
||||||
|
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);
|
||||||
|
|
||||||
/* use overlay to keep background transparent */
|
/* use overlay to keep background transparent */
|
||||||
composite = mix->overlay;
|
composite = mix->overlay;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
for (l = mix->sinkpads; l; l = l->next) {
|
for (l = mix->sinkpads; l; l = l->next) {
|
||||||
GstVideoMixer2Pad *pad = l->data;
|
GstVideoMixer2Pad *pad = l->data;
|
||||||
|
|
|
@ -220,7 +220,8 @@ GST_START_TEST (test_rtp_payloaders)
|
||||||
/*s = FAKESRC " ! ! rtpsv3vdepay ! " FAKESINK; */
|
/*s = FAKESRC " ! ! rtpsv3vdepay ! " FAKESINK; */
|
||||||
}
|
}
|
||||||
|
|
||||||
GST_END_TEST
|
GST_END_TEST;
|
||||||
|
|
||||||
GST_START_TEST (test_video_encoders_decoders)
|
GST_START_TEST (test_video_encoders_decoders)
|
||||||
{
|
{
|
||||||
const gchar *s;
|
const gchar *s;
|
||||||
|
@ -253,7 +254,26 @@ GST_START_TEST (test_video_encoders_decoders)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
GST_END_TEST
|
GST_END_TEST;
|
||||||
|
|
||||||
|
#define VIDEOMIXER_PIPELINE \
|
||||||
|
"videomixer name=mix background=transparent ! fakesink " \
|
||||||
|
"videotestsrc num-buffers=50 ! " \
|
||||||
|
" video/x-raw,format=RGBA, width=200,height=200,framerate=10/1 ! " \
|
||||||
|
" videoconvert ! mix.sink_1 " \
|
||||||
|
"videotestsrc num-buffers=50 pattern=smpte ! " \
|
||||||
|
" video/x-raw,format=RGBA, width=720,height=480,framerate=10/1 ! " \
|
||||||
|
" videoconvert ! mix.sink_0 "
|
||||||
|
|
||||||
|
GST_START_TEST (test_videomixer)
|
||||||
|
{
|
||||||
|
run_pipeline (setup_pipeline (VIDEOMIXER_PIPELINE), VIDEOMIXER_PIPELINE,
|
||||||
|
GST_MESSAGE_ANY & ~(GST_MESSAGE_ERROR | GST_MESSAGE_WARNING),
|
||||||
|
GST_MESSAGE_UNKNOWN, GST_STATE_PLAYING);
|
||||||
|
}
|
||||||
|
|
||||||
|
GST_END_TEST;
|
||||||
|
|
||||||
#endif /* #ifndef GST_DISABLE_PARSE */
|
#endif /* #ifndef GST_DISABLE_PARSE */
|
||||||
static Suite *
|
static Suite *
|
||||||
simple_launch_lines_suite (void)
|
simple_launch_lines_suite (void)
|
||||||
|
@ -268,6 +288,8 @@ simple_launch_lines_suite (void)
|
||||||
#ifndef GST_DISABLE_PARSE
|
#ifndef GST_DISABLE_PARSE
|
||||||
tcase_add_test (tc_chain, test_rtp_payloaders);
|
tcase_add_test (tc_chain, test_rtp_payloaders);
|
||||||
tcase_add_test (tc_chain, test_video_encoders_decoders);
|
tcase_add_test (tc_chain, test_video_encoders_decoders);
|
||||||
|
/* FIXME: very rarely fails, maybe because of negotiation issues? */
|
||||||
|
tcase_skip_broken_test (tc_chain, test_videomixer);
|
||||||
#endif
|
#endif
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue