I've filed bugs about this before, part of the problem is that every node in the chain needs to handle video ranges correctly. Once you introduce hardware decoders you can be in bad shape here because the range becomes a guess. Depending on which GPU vendor you have and what OS you're on, there may be a system-wide default output range (and a separate default for videos without range information), and the range assumptions may depend on application. If you use nerdy video compositors like madVR you can get them to tell you how much info they have on video ranges, and in many cases the answer is 'none' so they guess. At least on Windows, it is a fact that some of the range issues are not under Firefox's control, because some of this stuff is delegated to the decoder and to the video driver. (You can configure it in NVIDIA's Control Panel application, fwiw.)
In practice people seem to solve this by just using limited range all the time because it's much better to have limited range content displayed without expansion than to have full range content erroneously limited->full expanded and have a bunch of the range destroyed. If you try to stream to Twitch, for example, they tell you to use limited range, and it will look VERY bad in most players (not just Firefox!) if you disregard the advice. I've also had problems with full range uploads to YouTube that can't be attributed to Firefox.
EDIT: Checked my bug history. For the NVIDIA + Windows + Firefox combo, here is the workaround for range issues along with an explanation of why Mozilla has no way to fix it in this scenario. https://bugzilla.mozilla.org/show_bug.cgi?id=1229304#c8
Firefox's video support in general is pretty poor compared to Chrome. It doesn't support RGB or 4:4:4/4:2:2 YUV video either.
>here is the workaround
I knew that bug too, but that's a different story. That is about Firefox having problem to playback limited range video properly with nV graphic card (and it's partially nVidia's fault than Firefox).
Chrome used to have that bug too, but they have fixed it.
In practice people seem to solve this by just using limited range all the time because it's much better to have limited range content displayed without expansion than to have full range content erroneously limited->full expanded and have a bunch of the range destroyed. If you try to stream to Twitch, for example, they tell you to use limited range, and it will look VERY bad in most players (not just Firefox!) if you disregard the advice. I've also had problems with full range uploads to YouTube that can't be attributed to Firefox.
EDIT: Checked my bug history. For the NVIDIA + Windows + Firefox combo, here is the workaround for range issues along with an explanation of why Mozilla has no way to fix it in this scenario. https://bugzilla.mozilla.org/show_bug.cgi?id=1229304#c8