mirror of
https://github.com/moonlight-stream/moonlight-qt.git
synced 2025-07-02 07:46:07 +00:00
Don't attempt to use mismatched 8-bit formats with 10-bit codecs
In addition to silently truncating the samples, this also tickles some nasty bugs in the VF2's out-of-tree OMX decoder.
This commit is contained in:
parent
2e29ef8d74
commit
d085722911
@ -661,11 +661,22 @@ bool DrmRenderer::isPixelFormatSupported(int videoFormat, AVPixelFormat pixelFor
|
|||||||
else {
|
else {
|
||||||
// If we're going to need to map this as a software frame, check
|
// If we're going to need to map this as a software frame, check
|
||||||
// against the set of formats we support in mapSoftwareFrame().
|
// against the set of formats we support in mapSoftwareFrame().
|
||||||
|
if (pixelFormat == AV_PIX_FMT_DRM_PRIME) {
|
||||||
|
// AV_PIX_FMT_DRM_PRIME is always supported
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else if (videoFormat & VIDEO_FORMAT_MASK_10BIT) {
|
||||||
|
switch (pixelFormat) {
|
||||||
|
case AV_PIX_FMT_P010:
|
||||||
|
return true;
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
switch (pixelFormat) {
|
switch (pixelFormat) {
|
||||||
case AV_PIX_FMT_DRM_PRIME:
|
|
||||||
case AV_PIX_FMT_NV12:
|
case AV_PIX_FMT_NV12:
|
||||||
case AV_PIX_FMT_NV21:
|
case AV_PIX_FMT_NV21:
|
||||||
case AV_PIX_FMT_P010:
|
|
||||||
case AV_PIX_FMT_YUV420P:
|
case AV_PIX_FMT_YUV420P:
|
||||||
case AV_PIX_FMT_YUVJ420P:
|
case AV_PIX_FMT_YUVJ420P:
|
||||||
return true;
|
return true;
|
||||||
@ -673,6 +684,7 @@ bool DrmRenderer::isPixelFormatSupported(int videoFormat, AVPixelFormat pixelFor
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int DrmRenderer::getRendererAttributes()
|
int DrmRenderer::getRendererAttributes()
|
||||||
|
@ -80,11 +80,15 @@ bool SdlRenderer::isRenderThreadSupported()
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool SdlRenderer::isPixelFormatSupported(int, AVPixelFormat pixelFormat)
|
bool SdlRenderer::isPixelFormatSupported(int videoFormat, AVPixelFormat pixelFormat)
|
||||||
{
|
{
|
||||||
|
if (videoFormat & VIDEO_FORMAT_MASK_10BIT) {
|
||||||
|
// SDL2 doesn't support 10-bit pixel formats
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
else {
|
||||||
// Remember to keep this in sync with SdlRenderer::renderFrame()!
|
// Remember to keep this in sync with SdlRenderer::renderFrame()!
|
||||||
switch (pixelFormat)
|
switch (pixelFormat) {
|
||||||
{
|
|
||||||
case AV_PIX_FMT_YUV420P:
|
case AV_PIX_FMT_YUV420P:
|
||||||
case AV_PIX_FMT_YUVJ420P:
|
case AV_PIX_FMT_YUVJ420P:
|
||||||
case AV_PIX_FMT_NV12:
|
case AV_PIX_FMT_NV12:
|
||||||
@ -94,6 +98,7 @@ bool SdlRenderer::isPixelFormatSupported(int, AVPixelFormat pixelFormat)
|
|||||||
default:
|
default:
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool SdlRenderer::initialize(PDECODER_PARAMETERS params)
|
bool SdlRenderer::initialize(PDECODER_PARAMETERS params)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user