mirror of
https://github.com/rustdesk/rustdesk.git
synced 2026-10-27 09:07:51 +00:00
* fix(ffmpeg): bound QSV encoder retries Limit QSV frame submission to 100 retries and synchronization to 10 retries so persistent SDK warnings return an error to the caller. Retain queued buffers when synchronization reaches its retry limit, and allow later calls to retry without latching an error. Wait 1 ms between retryable submission warnings on Windows: the original av_usleep(500) becomes Sleep(0), exhausting the retry budget before even a brief device-busy interval can end. Preserve non-Windows wait behavior and the existing negative SDK result handling. Validated against FFmpeg 7.1.1 on Intel UHD 730 with 42 fault/control cases, synchronization-timeout recovery and close cleanup, real H.264 and HEVC encoding, and separate QSV hardware decoding. Four concurrent 1080p encoders completed 2400 frames without errors. * fix(ffmpeg): handle undersized QSV HEVC buffers Reserve at least three bytes per aligned pixel for HEVC output, following Intel's documented workaround for underestimated bitstream capacity. Check the size before assigning it to AVPacket's integer capacity. Report negative synchronization results before reading output metadata or draining the FIFO, keeping failed tasks owned until encoder close. On Intel UHD 730, the existing code fails at input 242 with real desktop captures; the patched code encodes and decodes all 1,200 inputs. Inputs and PTS match, and the first 241 encoded frames are byte-identical. H.264 also passes 300 frames, and restoring the small buffer verifies error handling. * fix(ffmpeg): refresh QSV HEVC capacity after reset and shorten sync waits * fix(ffmpeg): apply QSV buffer sizing to H.264 * fix: backport FFmpeg hybrid MP4 finalization fix Backport FFmpeg commit 36896af64a9ecf6835758186e7161a2e954c364d so hybrid MP4 finalization writes the final moov before hiding the original fragmented index. Preserve recoverable fragments when the final index cannot be written.