Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Sharybin <sergey.vfx@gmail.com>2014-04-09 16:54:13 +0400
committerSergey Sharybin <sergey.vfx@gmail.com>2014-04-10 15:49:49 +0400
commitf93bc7693a530632455d3ec7acc4bce54a1f85bc (patch)
treed0e067438cbc547875b3cb77e53904c5ea2a537d /source/blender/imbuf
parent19e627cab34a04a3d01b2e3a868b7bf91d56e8f9 (diff)
Backport revisions for the 2.70a releasev2.70a
d2660a0, 6e99fb0, 58c22d8, 83f2012 + ff21f6a, a7ed1db. cc6b106 7997e38, 9d4b54b, efb48fc, 3fc293c, 29f359c, 77c1d17, 92a539e, c626462, f48828b, 6452d9f, 765d077, 74518b2, af16d46, 8da4936, 6babbf5, f0106d2, f88776b, ee72cba, 467596d, e21a7b3, eed3974, 71a2ff1, ccf9afd, 44d6c68, 30fdfc3, b69809c, b0a8e4c, bd57ec6, 3b0832d, 2a25676, 3977b76, fb25a86, 9bbb30b, 51abc2b, 0ebade5, 2c0e32f, 3deaf7d, ea01b24, c61eb64, f3db038, a6fb670, eedde31, b66a954, 7ff123c, f5b79df, 7148c97, 54a8753, fcaa018, 4c73001, 7a21330, 07578be, e9a64e2, fd3de8b, ae792e9, b7712a7 + 3600622, d9557d0, 6d973b8, 688257d, 4acb57a, 95ac6bc, Also backported openmp changes to sculpt making it so number of real CPU cores is used as a number of threads here.
Diffstat (limited to 'source/blender/imbuf')
-rw-r--r--source/blender/imbuf/intern/IMB_allocimbuf.h3
-rw-r--r--source/blender/imbuf/intern/allocimbuf.c23
-rw-r--r--source/blender/imbuf/intern/module.c6
-rw-r--r--source/blender/imbuf/intern/moviecache.c12
-rw-r--r--source/blender/imbuf/intern/tiff.c2
-rw-r--r--source/blender/imbuf/intern/util.c1
6 files changed, 46 insertions, 1 deletions
diff --git a/source/blender/imbuf/intern/IMB_allocimbuf.h b/source/blender/imbuf/intern/IMB_allocimbuf.h
index 02b738cc2cd..f4d6d869f1b 100644
--- a/source/blender/imbuf/intern/IMB_allocimbuf.h
+++ b/source/blender/imbuf/intern/IMB_allocimbuf.h
@@ -35,6 +35,9 @@
struct ImBuf;
+void imb_refcounter_lock_init(void);
+void imb_refcounter_lock_exit(void);
+
bool imb_addencodedbufferImBuf(struct ImBuf *ibuf);
bool imb_enlargeencodedbufferImBuf(struct ImBuf *ibuf);
diff --git a/source/blender/imbuf/intern/allocimbuf.c b/source/blender/imbuf/intern/allocimbuf.c
index d7ca381bae6..d0e81f2f383 100644
--- a/source/blender/imbuf/intern/allocimbuf.c
+++ b/source/blender/imbuf/intern/allocimbuf.c
@@ -49,6 +49,19 @@
#include "MEM_CacheLimiterC-Api.h"
#include "BLI_utildefines.h"
+#include "BLI_threads.h"
+
+static SpinLock refcounter_spin;
+
+void imb_refcounter_lock_init(void)
+{
+ BLI_spin_init(&refcounter_spin);
+}
+
+void imb_refcounter_lock_exit(void)
+{
+ BLI_spin_end(&refcounter_spin);
+}
void imb_freemipmapImBuf(ImBuf *ibuf)
{
@@ -154,10 +167,18 @@ void IMB_freezbuffloatImBuf(ImBuf *ibuf)
void IMB_freeImBuf(ImBuf *ibuf)
{
if (ibuf) {
+ bool needs_free = false;
+
+ BLI_spin_lock(&refcounter_spin);
if (ibuf->refcounter > 0) {
ibuf->refcounter--;
}
else {
+ needs_free = true;
+ }
+ BLI_spin_unlock(&refcounter_spin);
+
+ if (needs_free) {
imb_freerectImBuf(ibuf);
imb_freerectfloatImBuf(ibuf);
imb_freetilesImBuf(ibuf);
@@ -177,7 +198,9 @@ void IMB_freeImBuf(ImBuf *ibuf)
void IMB_refImBuf(ImBuf *ibuf)
{
+ BLI_spin_lock(&refcounter_spin);
ibuf->refcounter++;
+ BLI_spin_unlock(&refcounter_spin);
}
ImBuf *IMB_makeSingleUser(ImBuf *ibuf)
diff --git a/source/blender/imbuf/intern/module.c b/source/blender/imbuf/intern/module.c
index 9141dad6f9c..4097deb00ed 100644
--- a/source/blender/imbuf/intern/module.c
+++ b/source/blender/imbuf/intern/module.c
@@ -26,12 +26,17 @@
#include <stddef.h>
+
+#include "BLI_utildefines.h"
+
+#include "IMB_allocimbuf.h"
#include "IMB_imbuf.h"
#include "IMB_filetype.h"
#include "IMB_colormanagement_intern.h"
void IMB_init(void)
{
+ imb_refcounter_lock_init();
imb_filetypes_init();
imb_tile_cache_init();
colormanagement_init();
@@ -42,5 +47,6 @@ void IMB_exit(void)
imb_tile_cache_exit();
imb_filetypes_exit();
colormanagement_exit();
+ imb_refcounter_lock_exit();
}
diff --git a/source/blender/imbuf/intern/moviecache.c b/source/blender/imbuf/intern/moviecache.c
index 07ce3c39d73..f699afd3475 100644
--- a/source/blender/imbuf/intern/moviecache.c
+++ b/source/blender/imbuf/intern/moviecache.c
@@ -200,6 +200,18 @@ static size_t IMB_get_size_in_memory(ImBuf *ibuf)
int a;
size_t size = 0, channel_size = 0;
+ /* Persistent images should have no affect on how "normal"
+ * images are cached.
+ *
+ * This is a bit arbitrary, but would make it so only movies
+ * and sequences are memory limited, keeping textures in the
+ * memory in order to avoid constant file reload on viewport
+ * update.
+ */
+ if (ibuf->userflags & IB_PERSISTENT) {
+ return 0;
+ }
+
size += sizeof(ImBuf);
if (ibuf->rect)
diff --git a/source/blender/imbuf/intern/tiff.c b/source/blender/imbuf/intern/tiff.c
index 05e9a4fa134..eb8f94cbc6e 100644
--- a/source/blender/imbuf/intern/tiff.c
+++ b/source/blender/imbuf/intern/tiff.c
@@ -859,7 +859,7 @@ int imb_savetiff(ImBuf *ibuf, const char *name, int flags)
TIFFSetField(image, TIFFTAG_RESOLUTIONUNIT, RESUNIT_INCH);
if (TIFFWriteEncodedStrip(image, 0,
(bitspersample == 16) ? (unsigned char *)pixels16 : pixels,
- ibuf->x * ibuf->y * samplesperpixel * bitspersample / 8) == -1)
+ (size_t)ibuf->x * ibuf->y * samplesperpixel * bitspersample / 8) == -1)
{
fprintf(stderr,
"imb_savetiff: Could not write encoded TIFF.\n");
diff --git a/source/blender/imbuf/intern/util.c b/source/blender/imbuf/intern/util.c
index 7efd0223368..087f26dda44 100644
--- a/source/blender/imbuf/intern/util.c
+++ b/source/blender/imbuf/intern/util.c
@@ -179,6 +179,7 @@ const char *imb_ext_audio[] = {
".aif",
".aiff",
".m4a",
+ ".mka",
NULL
};