I’m not a developer, but I was directed here from the Geforce forums. The next time this happens, I will attempt to run the nvidia-bug-report.sh to attach for debugging:
I’ve been using mythtv on an Arch 64-bit linux OS for a number of years and I initially had a Geforce 210 running the 304.xx drivers and never had this problem. However, if I tried to use the 340.xx drivers, when playing back video with hardware video acceleration enabled, I would randomly have the video freeze and mythfrontend would log the following error:
E Decoder mythplayer.cpp:3503 (DecoderGetFrame) Player(1): Decoder timed out waiting for free video buffers.
Looking at the code for mythplayer.cpp, it appears that it checks for free buffers and if they are not available, it waits 1s and tries again. This repeats for 10 tries before it gives up and generates this error message. When this happens, mythfrontend appears to lockup and even if I close it and restart it or use some other video playback program, I get artifacting on the screen until I reboot. So I downgraded to the 304.xx drivers and the problem went away.
Since the 210 is such an old card, I decided to replace it with a GT 710 and upgrade to the current 390.67 drivers. Unfortunately I am experiencing the same issue with the GT 710 with 390.67 drivers as the 210 with 340.xx drivers. I have not tried the GT 710 with the 340.xx drivers yet, but I am not optimistic that it will resolve the issue since those drivers were a problem with the 210.
I know of a couple other users using the same OS with the same issues and google returns a couple other instances where this has occurred, but the only resolution I found was in one case where the card was overheating. I don’t think that is the case for me since the first card was repeatably a driver issue and the current card, while passively cooled, doesn’t exceed 65C.
Is there any better way to log what is happening to the gpu to cause this issue? It appears to be a change in the driver between 304 and 340, but there must be something that could be handled differently in the mythplayer.cpp code to recover from it.