msdkvpp: close the current VPP session if this session has been initialized
authorHaihao Xiang <haihao.xiang@intel.com>
Fri, 14 Dec 2018 02:18:25 +0000 (10:18 +0800)
committerHaihao Xiang <haihao.xiang@intel.com>
Tue, 8 Jan 2019 02:08:43 +0000 (10:08 +0800)
commit7681566f2948c5a3ddb9ddda41daa8af60bcbbdc
tree2d3518cff2c176bef79d1b244b48b1e8e23537f2
parente8d2f58e23f9b2908b2d7e66ba43cf6405fcc224
msdkvpp: close the current VPP session if this session has been initialized

Otherwise MFXVideoVPP_Init will fail because it is called twice without
a close.

Example pipeline:

gst-launch-1.0 videotestsrc ! msdkvpp ! glimagesink

Sometimes glimagesink emits GST_EVENT_RECONFIGURE event which results
in that MFXVideoVPP_Init is called twice, then get the negotiation
failure below:

0:00:00.093715518 21218 0x558ef56231e0 ERROR                msdkvpp
gstmsdkvpp.c:995:gst_msdkvpp_initialize:<msdkvpp0> Init failed
(undefined behavior)
WARNING: from element /GstPipeline:pipeline0/GstMsdkVPP:msdkvpp0: not
negotiated

After applying this commit, the pipeline above may run without
negotiation failure, however NV12 layout in dmabuf mode is selected in
renegotiation, the display image is corrupted due to the NV12 issue which
was mentioned in commit 3f2314a. Some other fixes are needed to avoid
renegotiation by default
sys/msdk/gstmsdkvpp.c