Skip to content
  • Jonas Karlman's avatar
    media: hantro: Fix H264 motion vector buffer offset · cafde70b
    Jonas Karlman authored and Ezequiel Garcia's avatar Ezequiel Garcia committed
    A decoded 8-bit 4:2:0 frame need memory for up to 448 bytes per
    macroblock and is laid out in memory as follow:
    
    +---------------------------+
    | Y-plane   256 bytes x MBs |
    +---------------------------+
    | UV-plane  128 bytes x MBs |
    +---------------------------+
    | MV buffer  64 bytes x MBs |
    +---------------------------+
    
    The motion vector buffer offset is currently correct for 4:2:0 because
    the extra space for motion vectors is overallocated with an extra
    64 bytes x MBs.
    
    Wrong offset for both destination and motion vector buffer are used
    for the bottom field of field encoded content, wrong offset is
    also used for 4:0:0 (monochrome) content.
    
    Fix this by setting the motion vector address to the expected 384 bytes
    x MBs offset for 4:2:0 and 256 bytes x MBs offset for 4:0:0 content.
    
    Also use correct destination and motion vector buffer offset
    for the bottom field of field encoded content.
    
    While at it also extend the check for 4:0:0 (monochrome) to include an
    additional check for High Profile (100).
    
    Fixes: dea0a82f
    
     ("media: hantro: Add support for H264 decoding on G1")
    Signed-off-by: default avatarJonas Karlman <jonas@kwiboo.se>
    Reviewed-by: default avatarBoris Brezillon <boris.brezillon@collabora.com>
    Signed-off-by: default avatarHans Verkuil <hverkuil-cisco@xs4all.nl>
    Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@kernel.org>
    cafde70b