• Hans Verkuil's avatar
    [media] vb2: fix bytesused == 0 handling · 8a75ffb8
    Hans Verkuil authored
    The original report from Nikhil was that if data_offset > 0 and bytesused == 0,
    then the check in __verify_length() would fail, even though the spec says that
    if bytes_used == 0, then it will be replaced by the actual length of the
    buffer.
    
    After digging into it a bit more I realized that there were several other
    things wrong:
    
    - in __verify_length() it would use the application-provided length value
      for USERPTR and the vb2 core length for other memory models, but it
      should have used the application-provided length as well for DMABUF.
    
    - in __fill_vb2_buffer() on the other hand it would replace bytesused == 0
      by the application-provided length, even for MMAP buffers where the
      length is determined by the vb2 core.
    
    - in __fill_vb2_buffer() it tries to figure out if all the planes have
      bytesused == 0 before it will decide to replace bytesused by length.
      However, the spec makes no such provision, and it makes for convoluted
      code. So just replace any bytesused == 0 by the proper length.
      The idea behind this was that you could use bytesused to signal empty
      planes, something that is currently not supported. But that is better
      done in the future by using one of the reserved fields in strucy v4l2_plane.
    
    This patch fixes all these issues.
    
    Regards,
    
    	Hans
    Signed-off-by: default avatarHans Verkuil <hans.verkuil@cisco.com>
    Reported-by: default avatarNikhil Devshatwar <nikhil.nd@ti.com>
    Cc: Nikhil Devshatwar <nikhil.nd@ti.com>
    Acked-by: default avatarMarek Szyprowski <m.szyprowski@samsung.com>
    Signed-off-by: default avatarMauro Carvalho Chehab <m.chehab@samsung.com>
    8a75ffb8
videobuf2-core.c 95 KB