Archived
1
0
This repository has been archived on 2024-10-17. You can view files and clone it, but cannot push or open issues or pull requests.
winamp/Src/h264dec/lcommon/src/memcache.c
2024-09-24 14:54:57 +02:00

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;
}