summaryrefslogtreecommitdiffstats
path: root/video/mp_image_pool.h
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2012-12-12 23:55:34 +0100
committerwm4 <wm4@nowhere>2013-01-13 17:39:32 +0100
commit1568161aadf24ee3a6d982612b7380f8b1dc4a58 (patch)
tree8f101603359615835d0994bf244c97496f615003 /video/mp_image_pool.h
parent881f82dd33fe8d13e731bfe04077d3abcd149fa3 (diff)
downloadmpv-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.h22
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