for (int i = 0; i < planes; i++) {
int h = src->height;
int p_height = i > 0 ? AV_CEIL_RSHIFT(h, log2_chroma) : h;
- size_t p_size = FFABS(src->linesize[i]) * p_height;
+ size_t p_size = FFALIGN(FFABS(src->linesize[i]) * p_height,
+ p->hprops.minImportedHostPointerAlignment);
VkImportMemoryHostPointerInfoEXT import_desc = {
.sType = VK_STRUCTURE_TYPE_IMPORT_MEMORY_HOST_POINTER_INFO_EXT,
/* We can only map images with positive stride and alignment appropriate
* for the device. */
host_mapped[i] = map_host && src->linesize[i] > 0 &&
- !(p_size % p->hprops.minImportedHostPointerAlignment) &&
!(((uintptr_t)import_desc.pHostPointer) %
p->hprops.minImportedHostPointerAlignment);
p_size = host_mapped[i] ? p_size : 0;
av_image_copy_plane(tmp.data[i], tmp.linesize[i],
(const uint8_t *)src->data[i], src->linesize[i],
- FFMIN(tmp.linesize[i], src->linesize[i]), p_height);
+ FFMIN(tmp.linesize[i], FFABS(src->linesize[i])),
+ p_height);
}
if ((err = unmap_buffers(dev_ctx, bufs, planes, 1)))
for (int i = 0; i < planes; i++) {
int h = dst->height;
int p_height = i > 0 ? AV_CEIL_RSHIFT(h, log2_chroma) : h;
- size_t p_size = FFABS(dst->linesize[i]) * p_height;
+ size_t p_size = FFALIGN(FFABS(dst->linesize[i]) * p_height,
+ p->hprops.minImportedHostPointerAlignment);
VkImportMemoryHostPointerInfoEXT import_desc = {
.sType = VK_STRUCTURE_TYPE_IMPORT_MEMORY_HOST_POINTER_INFO_EXT,
/* We can only map images with positive stride and alignment appropriate
* for the device. */
host_mapped[i] = map_host && dst->linesize[i] > 0 &&
- !(p_size % p->hprops.minImportedHostPointerAlignment) &&
!(((uintptr_t)import_desc.pHostPointer) %
p->hprops.minImportedHostPointerAlignment);
p_size = host_mapped[i] ? p_size : 0;
av_image_copy_plane(dst->data[i], dst->linesize[i],
(const uint8_t *)tmp.data[i], tmp.linesize[i],
- FFMIN(tmp.linesize[i], dst->linesize[i]), p_height);
+ FFMIN(tmp.linesize[i], FFABS(dst->linesize[i])),
+ p_height);
}
err = unmap_buffers(dev_ctx, bufs, planes, 0);