mirror of
https://github.com/moonlight-stream/moonlight-qt.git
synced 2026-04-16 21:30:06 +00:00
Support YUV 4:4:4 formats
This commit is contained in:
@@ -537,6 +537,26 @@ bool FFmpegVideoDecoder::completeInitialization(const AVCodec* decoder, enum AVP
|
||||
m_Pkt->data = (uint8_t*)k_AV1Main10TestFrame;
|
||||
m_Pkt->size = sizeof(k_AV1Main10TestFrame);
|
||||
break;
|
||||
case VIDEO_FORMAT_H264_HIGH8_444:
|
||||
m_Pkt->data = (uint8_t*)k_h264High_444TestFrame;
|
||||
m_Pkt->size = sizeof(k_h264High_444TestFrame);
|
||||
break;
|
||||
case VIDEO_FORMAT_H265_REXT8_444:
|
||||
m_Pkt->data = (uint8_t*)k_HEVCRExt8_444TestFrame;
|
||||
m_Pkt->size = sizeof(k_HEVCRExt8_444TestFrame);
|
||||
break;
|
||||
case VIDEO_FORMAT_H265_REXT10_444:
|
||||
m_Pkt->data = (uint8_t*)k_HEVCRExt10_444TestFrame;
|
||||
m_Pkt->size = sizeof(k_HEVCRExt10_444TestFrame);
|
||||
break;
|
||||
case VIDEO_FORMAT_AV1_HIGH8_444:
|
||||
m_Pkt->data = (uint8_t*)k_AV1High8_444TestFrame;
|
||||
m_Pkt->size = sizeof(k_AV1High8_444TestFrame);
|
||||
break;
|
||||
case VIDEO_FORMAT_AV1_HIGH10_444:
|
||||
m_Pkt->data = (uint8_t*)k_AV1High10_444TestFrame;
|
||||
m_Pkt->size = sizeof(k_AV1High10_444TestFrame);
|
||||
break;
|
||||
default:
|
||||
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION,
|
||||
"No test frame for format: %x",
|
||||
@@ -692,16 +712,33 @@ void FFmpegVideoDecoder::stringifyVideoStats(VIDEO_STATS& stats, char* output, i
|
||||
codecString = "H.264";
|
||||
break;
|
||||
|
||||
case VIDEO_FORMAT_H264_HIGH8_444:
|
||||
codecString = "H.264 4:4:4";
|
||||
break;
|
||||
|
||||
case VIDEO_FORMAT_H265:
|
||||
codecString = "HEVC";
|
||||
break;
|
||||
|
||||
case VIDEO_FORMAT_H265_REXT8_444:
|
||||
codecString = "HEVC 4:4:4";
|
||||
break;
|
||||
|
||||
case VIDEO_FORMAT_H265_MAIN10:
|
||||
if (LiGetCurrentHostDisplayHdrMode()) {
|
||||
codecString = "HEVC Main 10 HDR";
|
||||
codecString = "HEVC 10-bit HDR";
|
||||
}
|
||||
else {
|
||||
codecString = "HEVC Main 10 SDR";
|
||||
codecString = "HEVC 10-bit SDR";
|
||||
}
|
||||
break;
|
||||
|
||||
case VIDEO_FORMAT_H265_REXT10_444:
|
||||
if (LiGetCurrentHostDisplayHdrMode()) {
|
||||
codecString = "HEVC 10-bit HDR 4:4:4";
|
||||
}
|
||||
else {
|
||||
codecString = "HEVC 10-bit SDR 4:4:4";
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -709,6 +746,10 @@ void FFmpegVideoDecoder::stringifyVideoStats(VIDEO_STATS& stats, char* output, i
|
||||
codecString = "AV1";
|
||||
break;
|
||||
|
||||
case VIDEO_FORMAT_AV1_HIGH8_444:
|
||||
codecString = "AV1 4:4:4";
|
||||
break;
|
||||
|
||||
case VIDEO_FORMAT_AV1_MAIN10:
|
||||
if (LiGetCurrentHostDisplayHdrMode()) {
|
||||
codecString = "AV1 10-bit HDR";
|
||||
@@ -718,6 +759,15 @@ void FFmpegVideoDecoder::stringifyVideoStats(VIDEO_STATS& stats, char* output, i
|
||||
}
|
||||
break;
|
||||
|
||||
case VIDEO_FORMAT_AV1_HIGH10_444:
|
||||
if (LiGetCurrentHostDisplayHdrMode()) {
|
||||
codecString = "AV1 10-bit HDR 4:4:4";
|
||||
}
|
||||
else {
|
||||
codecString = "AV1 10-bit SDR 4:4:4";
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
SDL_assert(false);
|
||||
codecString = "UNKNOWN";
|
||||
@@ -1254,6 +1304,12 @@ bool FFmpegVideoDecoder::tryInitializeHwAccelDecoder(PDECODER_PARAMETERS params,
|
||||
break;
|
||||
}
|
||||
|
||||
// TODO: reexamine this
|
||||
if ((params->videoFormat & VIDEO_FORMAT_MASK_YUV444) && config->device_type != AV_HWDEVICE_TYPE_VULKAN) {
|
||||
// We only support YUV 4:4:4 decoding on Vulkan through libplacebo
|
||||
continue;
|
||||
}
|
||||
|
||||
// Initialize the hardware codec and submit a test frame if the renderer needs it
|
||||
IFFmpegRenderer::InitFailureReason failureReason;
|
||||
if (tryInitializeRenderer(decoder, AV_PIX_FMT_NONE, params, config, &failureReason,
|
||||
|
||||
Reference in New Issue
Block a user