Fix OCIO LUT async processor black screen and freeze
- Pass through input texture when the LUT processor is not ready yet, preventing black frames while the processor is being generated. - Serialize processor generation with a single in-flight task to avoid concurrent OCIO lock contention that could freeze the UI. - Invalidate cached frames after the async processor is set so the viewer refreshes automatically without requiring the playhead to be moved. - Add OAK_DISABLE_HWACCEL environment variable to force software decoding. - Add FFmpegDecoderHW regression test for H.264 4:2:2 10-bit decoding.
This commit is contained in:
@@ -425,13 +425,17 @@ TexturePtr FFmpegDecoder::RetrieveVideoInternal(const RetrieveVideoParams &p)
|
||||
AVFramePtr ptr = PreProcessFrame(f, p);
|
||||
f=std::move(ptr);
|
||||
if (!f) {
|
||||
// Error occurred while software scaling
|
||||
qWarning() << "PreProcessFrame failed";
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
// Finally, perform any GPU processing required
|
||||
TexturePtr texture = ProcessFrameIntoTexture(f, p, original);
|
||||
|
||||
if (!texture) {
|
||||
qWarning() << "ProcessFrameIntoTexture returned null";
|
||||
}
|
||||
|
||||
return texture;
|
||||
}
|
||||
|
||||
@@ -1476,6 +1480,10 @@ bool FFmpegDecoder::Instance::Open(const char *filename, int stream_index)
|
||||
|
||||
AVHWDeviceType FFmpegDecoder::Instance::ChooseHardwareDevice()
|
||||
{
|
||||
if (qEnvironmentVariableIsSet("OAK_DISABLE_HWACCEL")) {
|
||||
return AV_HWDEVICE_TYPE_NONE;
|
||||
}
|
||||
|
||||
#ifdef Q_OS_LINUX
|
||||
// Prefer NVIDIA's NVDEC where available, then VAAPI/VDPAU.
|
||||
for (AVHWDeviceType type : { AV_HWDEVICE_TYPE_CUDA, AV_HWDEVICE_TYPE_VAAPI,
|
||||
|
||||
Reference in New Issue
Block a user