mediatek: Allocate a buffer expected by encoder if BO_USE_HW_VIDEO_ENCODER
MediaTek driver expects 16 aligned width and 32 aligned height for an input buffer on encoding [1]. Besides, there is an extra data between planes. This changes the minigbm allocation to match the expectation though width is aligned by 64 for the AMD cache-width optimization. [1] https://chromium.googlesource.com/chromiumos/third_party/kernel/+/3c551224d8600b956ed53097520501d58f31cf59/drivers/media/platform/mtk-vcodec/mtk_vcodec_enc.c#278 BUG=b:144135251 TEST=ARC++ encoder on kukui Change-Id: Id330a8a6b0a40040098920427e6e29f05fcb64d4 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/minigbm/+/1855520 Reviewed-by: Tomasz Figa <tfiga@chromium.org> Tested-by: Hirokazu Honda <hiroh@chromium.org> Auto-Submit: Hirokazu Honda <hiroh@chromium.org> Commit-Queue: Hsu Wei-Cheng <mojahsu@chromium.org>
This commit is contained in:
parent
6e6dc49707
commit
2a2bfc25bb
3 changed files with 38 additions and 4 deletions
18
helpers.c
18
helpers.c
|
|
@ -186,6 +186,15 @@ uint32_t drv_height_from_format(uint32_t format, uint32_t height, size_t plane)
|
|||
return DIV_ROUND_UP(height, layout->vertical_subsampling[plane]);
|
||||
}
|
||||
|
||||
uint32_t drv_vertical_subsampling_from_format(uint32_t format, size_t plane)
|
||||
{
|
||||
const struct planar_layout *layout = layout_from_format(format);
|
||||
|
||||
assert(plane < layout->num_planes);
|
||||
|
||||
return layout->vertical_subsampling[plane];
|
||||
}
|
||||
|
||||
uint32_t drv_bytes_per_pixel_from_format(uint32_t format, size_t plane)
|
||||
{
|
||||
const struct planar_layout *layout = layout_from_format(format);
|
||||
|
|
@ -242,7 +251,13 @@ static uint32_t subsample_stride(uint32_t stride, uint32_t format, size_t plane)
|
|||
*/
|
||||
int drv_bo_from_format(struct bo *bo, uint32_t stride, uint32_t aligned_height, uint32_t format)
|
||||
{
|
||||
uint32_t padding[DRV_MAX_PLANES] = { 0 };
|
||||
return drv_bo_from_format_and_padding(bo, stride, aligned_height, format, padding);
|
||||
}
|
||||
|
||||
int drv_bo_from_format_and_padding(struct bo *bo, uint32_t stride, uint32_t aligned_height,
|
||||
uint32_t format, uint32_t padding[DRV_MAX_PLANES])
|
||||
{
|
||||
size_t p, num_planes;
|
||||
uint32_t offset = 0;
|
||||
|
||||
|
|
@ -263,7 +278,8 @@ int drv_bo_from_format(struct bo *bo, uint32_t stride, uint32_t aligned_height,
|
|||
for (p = 0; p < num_planes; p++) {
|
||||
bo->meta.strides[p] = subsample_stride(stride, format, p);
|
||||
bo->meta.sizes[p] =
|
||||
drv_size_from_format(format, bo->meta.strides[p], aligned_height, p);
|
||||
drv_size_from_format(format, bo->meta.strides[p], aligned_height, p) +
|
||||
padding[p];
|
||||
bo->meta.offsets[p] = offset;
|
||||
offset += bo->meta.sizes[p];
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue