decoder: remove vout_FixLeaks()
This function was intended to work around a certain class of bugs inside video decoders whereby the a reference picture was never dereferenced, i.e. missing decoder_UnlinkPicture() call. There are however some situations where this hack would release a still referenced picture: - If the video output or decoder has a high latency or if a video filter holds pictures (deinterlace), there may be zero free pictures even though the total number of pictures is sufficient overall. In that case, waiting for a picture buffer to be released normally is the right and safe approach. - If the byte stream is invalid or corrupt such that the number of required pictures (DPB size) is underestimated, dropping frames is acceptable. Frames would be corrupt anyway due to missing references. (This case could be better worked around by allocating extra pictures on-the-fly, though this would require memory copying in the video output.) - Even if the decoder indeed leaks pictures, the oldest referenced picture is not necessarily among those leaked. If the picture was not truly leaked, vout_FixLeaks() would cause an extraneous picture release. This should lead to an assertion failure in picture_Release(). Without assertions, it would lead to undefined behaviour, especially invalid pointer use in case of hardware surfaces. In any case, picture leaks are still recovered when resetting the video output with vout_Reset(), after the decoder is destroyed. That might turn out to be a problem too though.
Showing
Please register or sign in to comment