The FPS video filter causes the 2nd played interlaced video to show only a static green image on Nvidia GPUs (d3d11)
I have a written and built an out-of-tree a dummy video filter plugin that doesn't alter anything. Without the plugin loaded, VLC plays all videos correctly, but with it loaded some of the videos display only the green picture with the sound present.
Here is the code for the dummy plugin:
#include <vlc_common.h>
#include <vlc_filter.h>
#include <vlc_plugin.h>
static int Create(vlc_object_t *);
static void Destroy(vlc_object_t *);
vlc_module_begin()
set_description("Noop video filter")
set_shortname("Noop video filter")
set_capability("video filter", 0)
set_category(CAT_VIDEO)
set_subcategory(SUBCAT_VIDEO_VFILTER)
set_callbacks(Create, Destroy)
vlc_module_end()
static picture_t *filter(filter_t *p_filter, picture_t *p_pic_in)
{
// don't alter picture
return p_pic_in;
}
static int Create(vlc_object_t *p_this)
{
filter_t *p_filter = (filter_t *)p_this;
p_filter->pf_video_filter = filter;
return VLC_SUCCESS;
}
static void Destroy(vlc_object_t *p_this)
{
}
You can find the exact build instructions I have used in here and pre-built .dlls here.
Some observations:
-
Only some video files seem to be affected by this.
-
This happens only when VLC switches to playing the next video. Meaning that if you have a video affected by this, it will play just fine on its own, but if you add a similar affected video or even the same video to the playlist, that next video will green screen.
-
This was reproduced on NVIDIA GeForce GTX 1050 Ti and NVIDIA GeForce GTX 1070.
-
This happens only when d3d11 acceleration is enabled, which is the default in VLC. If you manually disable the hardware acceleration, all videos, including the ones that exhibited this green screen issue, play just fine, there is no green screen.
-
This is not reproducible on Intel Sandy bridge iGPU. Incidentally, it doesn't support d3d11 acceleration.
-
No AMD GPUs were tested.
This green screen bug has initially happened with my vlc-pause-click-plugin, but when I started removing code from it to find a minimal reproducible example, I ended up with the dummy video filter plugin that still reproduces the issue.
I'm unable to reproduce the green screen issue on my own Intel Sandy Bridge iGPU machine, but I managed to reproduce it on a borrowed laptop with NVIDIA GeForce GTX 1070.
There is a bug report open discussing this issue in vlc-pause-click-plugin. It might be worth a read. In it, a user with NVIDIA GeForce GTX 1050 Ti that was able to reproduce the issue has shared their logs and sample video files triggering this issue.