107 lines
2.0 KiB
C
107 lines
2.0 KiB
C
#include "memcache.h"
|
|
#include "mbuffer.h"
|
|
#include "memalloc.h"
|
|
|
|
void image_cache_flush(ImageCache *cache)
|
|
{
|
|
while (cache->head)
|
|
{
|
|
VideoImage *next = cache->head->next;
|
|
free_memImage(cache->head);
|
|
cache->head = next;
|
|
}
|
|
cache->size_x = 0;
|
|
cache->size_y = 0;
|
|
}
|
|
|
|
void image_cache_set_dimensions(ImageCache *cache, int width, int height)
|
|
{
|
|
if (width != cache->size_x || height != cache->size_y)
|
|
{
|
|
image_cache_flush(cache);
|
|
cache->size_x = width;
|
|
cache->size_y = height;
|
|
}
|
|
}
|
|
|
|
int image_cache_dimensions_match(ImageCache *cache, int width, int height)
|
|
{
|
|
if (width != cache->size_x || height != cache->size_y)
|
|
return 0;
|
|
|
|
return 1;
|
|
}
|
|
|
|
void image_cache_add(ImageCache *cache, VideoImage *image)
|
|
{
|
|
image->next = cache->head;
|
|
cache->head = image;
|
|
}
|
|
|
|
struct video_image *image_cache_get(ImageCache *cache)
|
|
{
|
|
if (cache->head)
|
|
{
|
|
VideoImage *ret = cache->head;
|
|
cache->head = ret->next;
|
|
ret->next = 0;
|
|
return ret;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
/* -------------
|
|
|
|
PicMotion arrays are allowed with one extra slot in the first dimension
|
|
which we use as the next pointer
|
|
------------- */
|
|
|
|
|
|
void motion_cache_flush(MotionCache *cache)
|
|
{
|
|
while (cache->head)
|
|
{
|
|
PicMotion **next = (PicMotion **)cache->head[cache->size_y];
|
|
free_mem2DPicMotion(cache->head);
|
|
cache->head = next;
|
|
}
|
|
cache->size_x = 0;
|
|
cache->size_y = 0;
|
|
}
|
|
|
|
void motion_cache_set_dimensions(MotionCache *cache, int width, int height)
|
|
{
|
|
if (width != cache->size_x || height != cache->size_y)
|
|
{
|
|
motion_cache_flush(cache);
|
|
cache->size_x = width;
|
|
cache->size_y = height;
|
|
}
|
|
}
|
|
|
|
int motion_cache_dimensions_match(MotionCache *cache, int width, int height)
|
|
{
|
|
if (width != cache->size_x || height != cache->size_y)
|
|
return 0;
|
|
|
|
return 1;
|
|
}
|
|
|
|
void motion_cache_add(MotionCache *cache, PicMotion **image)
|
|
{
|
|
image[cache->size_y] = (PicMotion *)cache->head;
|
|
cache->head = image;
|
|
}
|
|
|
|
struct pic_motion **motion_cache_get(MotionCache *cache)
|
|
{
|
|
if (cache->head)
|
|
{
|
|
PicMotion **ret = cache->head;
|
|
cache->head = (PicMotion **)ret[cache->size_y];
|
|
ret[cache->size_y] = 0;
|
|
return ret;
|
|
}
|
|
return 0;
|
|
}
|