MCPcopy Create free account
hub / github.com/FFmpeg/FFmpeg / ff_vk_get_pooled_buffer

Function ff_vk_get_pooled_buffer

libavutil/vulkan.c:1286–1335  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1284}
1285
1286int ff_vk_get_pooled_buffer(FFVulkanContext *ctx, AVBufferPool **buf_pool,
1287 AVBufferRef **buf, VkBufferUsageFlags usage,
1288 void *create_pNext, size_t size,
1289 VkMemoryPropertyFlagBits mem_props)
1290{
1291 int err;
1292 AVBufferRef *ref;
1293 FFVkBuffer *data;
1294
1295 *buf = NULL;
1296
1297 if (!(*buf_pool)) {
1298 *buf_pool = av_buffer_pool_init2(sizeof(FFVkBuffer), ctx,
1299 alloc_data_buf, NULL);
1300 if (!(*buf_pool))
1301 return AVERROR(ENOMEM);
1302 }
1303
1304 *buf = ref = av_buffer_pool_get(*buf_pool);
1305 if (!ref)
1306 return AVERROR(ENOMEM);
1307
1308 data = (FFVkBuffer *)ref->data;
1309
1310 if (data->size >= size)
1311 return 0;
1312
1313 ff_vk_free_buf(ctx, data);
1314 memset(data, 0, sizeof(*data));
1315
1316 err = ff_vk_create_buf(ctx, data, size,
1317 create_pNext, NULL, usage,
1318 mem_props);
1319 if (err < 0) {
1320 av_buffer_unref(&ref);
1321 *buf = NULL;
1322 return err;
1323 }
1324
1325 if (mem_props & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT) {
1326 err = ff_vk_map_buffer(ctx, data, &data->mapped_mem, 0);
1327 if (err < 0) {
1328 av_buffer_unref(&ref);
1329 *buf = NULL;
1330 return err;
1331 }
1332 }
1333
1334 return 0;
1335}
1336
1337static int create_mapped_buffer(FFVulkanContext *s,
1338 FFVkBuffer *vkb, VkBufferUsageFlags usage,

Callers 11

get_plane_bufFunction · 0.85
vk_prores_start_frameFunction · 0.85
vulkan_encode_issueFunction · 0.85
ff_vk_decode_add_sliceFunction · 0.85
vk_ffv1_start_frameFunction · 0.85

Calls 6

av_buffer_pool_init2Function · 0.85
av_buffer_pool_getFunction · 0.85
ff_vk_free_bufFunction · 0.85
ff_vk_create_bufFunction · 0.85
av_buffer_unrefFunction · 0.85
ff_vk_map_bufferFunction · 0.85

Tested by

no test coverage detected