summaryrefslogtreecommitdiff
path: root/tools/rle.c
diff options
context:
space:
mode:
Diffstat (limited to 'tools/rle.c')
-rw-r--r--tools/rle.c55
1 files changed, 44 insertions, 11 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);
+}