Issue Description
During a real-time video session on Windows, remote video rendering may occasionally freeze or display a blank screen immediately after the sending participant dynamically changes their video output resolution. The initial decoding pipeline transitions from software decoding to hardware decoding rapidly, but the hardware decoder fails to output frames while the software decoding session has already been closed.
Platform and SDK Context
Operating System: Microsoft Windows
SDK Component: Agora Video SDK for Windows
Hardware Acceleration: Intel Quick Sync Video (QSV) H.264 Hardware Decoder
Root Cause Analysis
When the sending client rapidly changes video resolution, multiple consecutive Instantaneous Decoder Refresh (IDR) keyframes are delivered to the receiver's hardware decoder within milliseconds.
During this burst initialization, the Intel QSV H.264 hardware decoder driver incorrectly returns alternating success and failure response codes. The SDK's media engine wrapper layer interprets these transient responses as a successful hardware decoding initialization and terminates the software decoding session.
However, the QSV hardware decoder subsequently fails to produce decoded frames, continuously returning a need more data (EAGAIN) status. Because the system does not immediately recognize this non-responsive decoder state, video rendering remains frozen until a new valid keyframe is received.
Solution and Workaround
SDK Upgrade (Recommended)
Upgrade the application to a newer SDK release that includes automated decoder health monitoring. The updated media engine automatically detects prolonged decoder inactivity (absence of output frames) and seamlessly falls back to software decoding to sustain continuous video rendering.
Software Decoding Fallback Configuration
If an immediate SDK upgrade cannot be deployed in production, configure the application to utilize software decoding for video streams on environments equipped with legacy or problematic GPU hardware drivers.
End-User Workaround
If an end-user encounters a frozen screen during an ongoing call, toggling the video feed (disabling and re-enabling video) or restarting the session forces the media engine to re-initialize the decoding pipeline and restore normal display.