Skip to content
  • Rémi Denis-Courmont's avatar
    decoder: remove vout_FixLeaks() · e56293ea
    Rémi Denis-Courmont authored
    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.
    e56293ea