summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--tools/rle.c55
-rw-r--r--tools/rle.h7
2 files changed, 50 insertions, 12 deletions
diff --git a/tools/rle.c b/tools/rle.c
index efcaf3b9..c3e22304 100644
--- a/tools/rle.c
+++ b/tools/rle.c
@@ -4,7 +4,7 @@
* See the main source file 'xineliboutput.c' for copyright information and
* how to reach the author.
*
- * $Id: rle.c,v 1.9 2011-11-08 09:38:54 phintuka Exp $
+ * $Id: rle.c,v 1.10 2012-01-24 11:23:10 phintuka Exp $
*
*/
@@ -406,21 +406,25 @@ void rle_palette_to_argb(uint32_t *argb, const struct xine_clut_s *palette, uint
}
}
+void rle_palette_to_rgba(uint32_t *rgba, const struct xine_clut_s *palette, uint entries)
+{
+ uint i;
+ for (i = 0; i < entries; i++) {
+ rgba[i] = (palette[i].r << 24) |
+ (palette[i].g << 16) |
+ (palette[i].b << 8 ) |
+ (palette[i].alpha );
+ }
+}
-void rle_uncompress_argb(uint32_t *dst,
- uint w, uint h, uint stride,
- const struct xine_rle_elem_s *rle_data, uint num_rle,
- const struct xine_clut_s *palette, uint palette_entries)
+static void rle_uncompress_u32(uint32_t *dst,
+ uint w, uint h, uint stride,
+ const struct xine_rle_elem_s *rle_data, uint num_rle,
+ uint32_t *lut)
{
- uint32_t lut[256];
uint i, pixelcounter = 0;
uint idx = 0, line = 0;
- if (palette_entries > 256)
- return;
-
- rle_palette_to_argb(lut, palette, palette_entries);
-
for(i = 0; i < num_rle; ++i) {
uint32_t color = lut[(rle_data + i)->color];
uint len = (rle_data + i)->len;
@@ -440,3 +444,32 @@ void rle_uncompress_argb(uint32_t *dst,
}
}
+void rle_uncompress_argb(uint32_t *dst,
+ uint w, uint h, uint stride,
+ const struct xine_rle_elem_s *rle_data, uint num_rle,
+ const struct xine_clut_s *palette, uint palette_entries)
+{
+ uint32_t lut[256] = {0};
+
+ if (palette_entries > 256)
+ return;
+
+ rle_palette_to_argb(lut, palette, palette_entries);
+
+ rle_uncompress_u32(dst, w, h, stride, rle_data, num_rle, lut);
+}
+
+void rle_uncompress_rgba(uint32_t *dst,
+ uint w, uint h, uint stride,
+ const struct xine_rle_elem_s *rle_data, uint num_rle,
+ const struct xine_clut_s *palette, uint palette_entries)
+{
+ uint32_t lut[256] = {0};
+
+ if (palette_entries > 256)
+ return;
+
+ rle_palette_to_rgba(lut, palette, palette_entries);
+
+ rle_uncompress_u32(dst, w, h, stride, rle_data, num_rle, lut);
+}
diff --git a/tools/rle.h b/tools/rle.h
index 5ff5c682..9f35a8c6 100644
--- a/tools/rle.h
+++ b/tools/rle.h
@@ -4,7 +4,7 @@
* See the main source file 'xineliboutput.c' for copyright information and
* how to reach the author.
*
- * $Id: rle.h,v 1.6 2011-03-08 08:55:14 phintuka Exp $
+ * $Id: rle.h,v 1.7 2012-01-24 11:23:10 phintuka Exp $
*
*/
@@ -30,6 +30,7 @@ uint rle_compress_net(uint8_t **rle_data, uint *elems, const uint8_t *data, uint
uint rle_recompress_net(uint8_t *raw, xine_rle_elem_t *data, uint elems);
void rle_palette_to_argb(uint32_t *argb, const struct xine_clut_s *palette, uint entries);
+void rle_palette_to_rgba(uint32_t *rgba, const struct xine_clut_s *palette, uint entries);
void rle_uncompress_lut8(uint8_t *dst,
uint w, uint h, uint stride,
@@ -38,6 +39,10 @@ void rle_uncompress_argb(uint32_t *dst,
uint w, uint h, uint stride,
const struct xine_rle_elem_s *rle_data, uint num_rle,
const struct xine_clut_s *palette, uint palette_entries);
+void rle_uncompress_rgba(uint32_t *dst,
+ uint w, uint h, uint stride,
+ const struct xine_rle_elem_s *rle_data, uint num_rle,
+ const struct xine_clut_s *palette, uint palette_entries);
/*
* rle_scale_nearest()