From 59e3f4e598ae381600ef54e1f6e6a8a5270ac245 Mon Sep 17 00:00:00 2001 From: Vittorio Giovara Date: Fri, 20 Nov 2015 02:17:33 +0100 Subject: sgienc: Use a local RLE encoding function SGI RLE encoding is slighlty different than the one provided by rle module (especially at high bit depth). The pixel count function however does not change, so it is simply made library-public. --- libavcodec/rle.c | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) (limited to 'libavcodec/rle.c') diff --git a/libavcodec/rle.c b/libavcodec/rle.c index cbbde93f56..8a2d922ab6 100644 --- a/libavcodec/rle.c +++ b/libavcodec/rle.c @@ -22,16 +22,7 @@ #include "rle.h" #include "libavutil/common.h" -/** - * Count up to 127 consecutive pixels which are either all the same or - * all differ from the previous and next pixels. - * @param start Pointer to the first pixel - * @param len Maximum number of pixels - * @param bpp Bytes per pixel - * @param same 1 if searching for identical pixel values. 0 for differing - * @return Number of matching consecutive pixels found - */ -static int count_pixels(const uint8_t *start, int len, int bpp, int same) +int ff_rle_count_pixels(const uint8_t *start, int len, int bpp, int same) { const uint8_t *pos; int count = 1; @@ -63,14 +54,14 @@ int ff_rle_encode(uint8_t *outbuf, int out_size, const uint8_t *ptr , int bpp, i for(x = 0; x < w; x += count) { /* see if we can encode the next set of pixels with RLE */ - if((count = count_pixels(ptr, w-x, bpp, 1)) > 1) { + if ((count = ff_rle_count_pixels(ptr, w - x, bpp, 1)) > 1) { if(out + bpp + 1 > outbuf + out_size) return -1; *out++ = (count ^ xor_rep) + add_rep; memcpy(out, ptr, bpp); out += bpp; } else { /* fall back on uncompressed */ - count = count_pixels(ptr, w-x, bpp, 0); + count = ff_rle_count_pixels(ptr, w - x, bpp, 0); if(out + bpp*count >= outbuf + out_size) return -1; *out++ = (count ^ xor_raw) + add_raw; -- cgit v1.2.3