diff options
author | wm4 <wm4@nowhere> | 2012-12-12 23:55:34 +0100 |
---|---|---|
committer | wm4 <wm4@nowhere> | 2013-01-13 17:39:32 +0100 |
commit | 1568161aadf24ee3a6d982612b7380f8b1dc4a58 (patch) | |
tree | 8f101603359615835d0994bf244c97496f615003 /video/mp_image_pool.h | |
parent | 881f82dd33fe8d13e731bfe04077d3abcd149fa3 (diff) | |
download | mpv-1568161aadf24ee3a6d982612b7380f8b1dc4a58.tar.bz2 mpv-1568161aadf24ee3a6d982612b7380f8b1dc4a58.tar.xz |
mp_image_pool: add pool to avoid frequent image reallocations
Refcounting will conceptually allocate and free images all the time
when using the filter chain. Add a pool that makes these reallocations
cheap.
This only affects the image data, not mp_image structs and similar small
allocations. Small allocations are always fast with reasonable memory
managers, while large image data will trigger mmap/munmap calls each
time.
Diffstat (limited to 'video/mp_image_pool.h')
-rw-r--r-- | video/mp_image_pool.h | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/video/mp_image_pool.h b/video/mp_image_pool.h new file mode 100644 index 0000000000..fdb0e76c39 --- /dev/null +++ b/video/mp_image_pool.h @@ -0,0 +1,22 @@ +#ifndef MPV_MP_IMAGE_POOL_H +#define MPV_MP_IMAGE_POOL_H + +struct mp_image_pool { + int max_count; + + struct mp_image **images; + int num_images; + struct pool_trampoline *trampoline; +}; + +struct mp_image_pool *mp_image_pool_new(int max_count); +struct mp_image *mp_image_pool_get(struct mp_image_pool *pool, unsigned int fmt, + int w, int h); +void mp_image_pool_clear(struct mp_image_pool *pool); + +struct mp_image *mp_image_pool_new_copy(struct mp_image_pool *pool, + struct mp_image *img); +void mp_image_pool_make_writeable(struct mp_image_pool *pool, + struct mp_image *img); + +#endif |