diff options
-rw-r--r-- | source/blender/imbuf/CMakeLists.txt | 11 | ||||
-rw-r--r-- | source/blender/imbuf/intern/allocimbuf.c | 56 |
2 files changed, 59 insertions, 8 deletions
diff --git a/source/blender/imbuf/CMakeLists.txt b/source/blender/imbuf/CMakeLists.txt index a03d6ce280d..1b190ae96de 100644 --- a/source/blender/imbuf/CMakeLists.txt +++ b/source/blender/imbuf/CMakeLists.txt @@ -23,6 +23,11 @@ # # ***** END GPL LICENSE BLOCK ***** +if(WITH_CODEC_FFMPEG) + # FFMPEG gives warnigns which are hard to avoid across multiple versions. + remove_strict_flags() +endif() + set(INC . ../avi @@ -155,12 +160,6 @@ if(WITH_CODEC_FFMPEG) ${FFMPEG_INCLUDE_DIRS} ) add_definitions(-DWITH_FFMPEG) - - remove_strict_flags_file( - intern/indexer.c - intern/util.c - intern/anim_movie.c - ) endif() if(WITH_IMAGE_DDS) diff --git a/source/blender/imbuf/intern/allocimbuf.c b/source/blender/imbuf/intern/allocimbuf.c index 1d82c862dbd..da08671341a 100644 --- a/source/blender/imbuf/intern/allocimbuf.c +++ b/source/blender/imbuf/intern/allocimbuf.c @@ -164,9 +164,8 @@ void IMB_freeImBuf(ImBuf *ibuf) IMB_freezbufImBuf(ibuf); IMB_freezbuffloatImBuf(ibuf); freeencodedbufferImBuf(ibuf); + IMB_cache_limiter_unmanage(ibuf); IMB_metadata_free(ibuf); - if (ibuf->dds_data.data != NULL) - free(ibuf->dds_data.data); MEM_freeN(ibuf); } } @@ -472,3 +471,56 @@ static MEM_CacheLimiterC **get_imbuf_cache_limiter(void) return &c; } + +void IMB_free_cache_limiter(void) +{ + delete_MEM_CacheLimiter(*get_imbuf_cache_limiter()); + *get_imbuf_cache_limiter() = NULL; +} + +void IMB_cache_limiter_insert(ImBuf *i) +{ + if(!i->c_handle) { + i->c_handle = MEM_CacheLimiter_insert( + *get_imbuf_cache_limiter(), i); + MEM_CacheLimiter_ref(i->c_handle); + MEM_CacheLimiter_enforce_limits( + *get_imbuf_cache_limiter()); + MEM_CacheLimiter_unref(i->c_handle); + } +} + +void IMB_cache_limiter_unmanage(ImBuf *i) +{ + if(i->c_handle) { + MEM_CacheLimiter_unmanage(i->c_handle); + i->c_handle = NULL; + } +} + +void IMB_cache_limiter_touch(ImBuf *i) +{ + if(i->c_handle) + MEM_CacheLimiter_touch(i->c_handle); +} + +void IMB_cache_limiter_ref(ImBuf *i) +{ + if(i->c_handle) + MEM_CacheLimiter_ref(i->c_handle); +} + +void IMB_cache_limiter_unref(ImBuf *i) +{ + if(i->c_handle) + MEM_CacheLimiter_unref(i->c_handle); +} + +int IMB_cache_limiter_get_refcount(ImBuf *i) +{ + if(i->c_handle) + return MEM_CacheLimiter_get_refcount(i->c_handle); + + return 0; +} + |