summaryrefslogtreecommitdiff
path: root/tools/rle.c
diff options
context:
space:
mode:
Diffstat (limited to 'tools/rle.c')
-rw-r--r--tools/rle.c134
1 files changed, 67 insertions, 67 deletions
diff --git a/tools/rle.c b/tools/rle.c
index 2e60afd1..0cee6603 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.1 2008-12-05 16:34:21 phintuka Exp $
+ * $Id: rle.c,v 1.2 2009-02-16 16:11:51 phintuka Exp $
*
*/
@@ -32,25 +32,25 @@ int rle_compress(xine_rle_elem_t **rle_data, const uint8_t *data, int w, int h)
rle_p = (xine_rle_elem_t*)malloc(4*rle_size);
rle_base = rle_p;
- for( y = 0; y < h; y++ ) {
+ for (y = 0; y < h; y++) {
rle.len = 0;
rle.color = 0;
c = data + y * w;
- for( x = 0; x < w; x++, c++ ) {
- if( rle.color != *c ) {
- if( rle.len ) {
- if( (num_rle + h-y+1) > rle_size ) {
- rle_size *= 2;
- rle_base = (xine_rle_elem_t*)realloc( rle_base, 4*rle_size );
- rle_p = rle_base + num_rle;
- }
- *rle_p++ = rle;
- num_rle++;
- }
- rle.color = *c;
- rle.len = 1;
+ for (x = 0; x < w; x++, c++) {
+ if (rle.color != *c) {
+ if (rle.len) {
+ if ( (num_rle + h-y+1) > rle_size ) {
+ rle_size *= 2;
+ rle_base = (xine_rle_elem_t*)realloc( rle_base, 4*rle_size );
+ rle_p = rle_base + num_rle;
+ }
+ *rle_p++ = rle;
+ num_rle++;
+ }
+ rle.color = *c;
+ rle.len = 1;
} else {
- rle.len++;
+ rle.len++;
}
}
*rle_p++ = rle;
@@ -68,7 +68,7 @@ int rle_compress(xine_rle_elem_t **rle_data, const uint8_t *data, int w, int h)
* - fast scaling in compressed form without decompression
*/
xine_rle_elem_t *rle_scale_nearest(const xine_rle_elem_t *old_rle, int *rle_elems,
- int w, int h, int new_w, int new_h)
+ int w, int h, int new_w, int new_h)
{
#define FACTORBASE 0x100
#define FACTOR2PIXEL(f) ((f)>>8)
@@ -85,15 +85,15 @@ xine_rle_elem_t *rle_scale_nearest(const xine_rle_elem_t *old_rle, int *rle_elem
xine_rle_elem_t *new_rle_start = new_rle;
/* we assume rle elements are breaked at end of line */
- while(old_y < old_h) {
+ while (old_y < old_h) {
int elems_current_line = 0;
int old_x = 0, new_x = 0;
- while(old_x < old_w) {
+ while (old_x < old_w) {
int new_x_end = SCALEX(old_x + old_rle->len);
- if(new_x_end > new_w) {
- new_x_end = new_w;
+ if (new_x_end > new_w) {
+ new_x_end = new_w;
}
new_rle->len = new_x_end - new_x;
@@ -102,66 +102,66 @@ xine_rle_elem_t *rle_scale_nearest(const xine_rle_elem_t *old_rle, int *rle_elem
old_x += old_rle->len;
old_rle++; /* may be incremented to last element + 1 (element is not accessed anymore) */
- if(new_rle->len > 0) {
- new_x += new_rle->len;
- new_rle++;
-
- num_rle++;
- elems_current_line++;
-
- if( (num_rle + 1) >= rle_size ) {
- rle_size *= 2;
- new_rle_start = (xine_rle_elem_t*)realloc( new_rle_start, 4*rle_size);
- new_rle = new_rle_start + num_rle;
- }
+ if (new_rle->len > 0) {
+ new_x += new_rle->len;
+ new_rle++;
+
+ num_rle++;
+ elems_current_line++;
+
+ if( (num_rle + 1) >= rle_size ) {
+ rle_size *= 2;
+ new_rle_start = (xine_rle_elem_t*)realloc( new_rle_start, 4*rle_size);
+ new_rle = new_rle_start + num_rle;
+ }
}
}
- if(new_x < new_w)
+ if (new_x < new_w)
(new_rle-1)->len += new_w - new_x;
- old_y++;
+ old_y++;
new_y++;
- if(factor_y > FACTORBASE) {
+ if (factor_y > FACTORBASE) {
/* scale up -- duplicate current line ? */
int dup = SCALEY(old_y) - new_y;
/* if no lines left in (old) rle, copy all lines still missing from new */
- if(old_y == old_h)
- dup = new_h - new_y - 1;
-
- while(dup-- && (new_y+1<new_h)) {
- xine_rle_elem_t *prevline;
- int n;
- if( (num_rle + elems_current_line + 1) >= rle_size ) {
- rle_size *= 2;
- new_rle_start = (xine_rle_elem_t*)realloc( new_rle_start, 4*rle_size);
- new_rle = new_rle_start + num_rle;
- }
-
- /* duplicate previous line */
- prevline = new_rle - elems_current_line;
- for(n = 0; n < elems_current_line; n++) {
- *new_rle++ = *prevline++;
- num_rle++;
- }
- new_y++;
+ if (old_y == old_h)
+ dup = new_h - new_y - 1;
+
+ while (dup-- && (new_y+1<new_h)) {
+ xine_rle_elem_t *prevline;
+ int n;
+ if ( (num_rle + elems_current_line + 1) >= rle_size ) {
+ rle_size *= 2;
+ new_rle_start = (xine_rle_elem_t*)realloc( new_rle_start, 4*rle_size);
+ new_rle = new_rle_start + num_rle;
+ }
+
+ /* duplicate previous line */
+ prevline = new_rle - elems_current_line;
+ for (n = 0; n < elems_current_line; n++) {
+ *new_rle++ = *prevline++;
+ num_rle++;
+ }
+ new_y++;
}
- } else if(factor_y < FACTORBASE) {
+ } else if (factor_y < FACTORBASE) {
/* scale down -- drop next line ? */
int skip = new_y - SCALEY(old_y);
- if(old_y == old_h-1) {
- /* one (old) line left ; don't skip it if new rle is not complete */
- if(new_y < new_h)
- skip = 0;
+ if (old_y == old_h-1) {
+ /* one (old) line left ; don't skip it if new rle is not complete */
+ if (new_y < new_h)
+ skip = 0;
}
- while(skip-- &&
- old_y<old_h /* rounding error may add one line, filter it out */) {
- for(old_x = 0; old_x < old_w;) {
- old_x += old_rle->len;
- old_rle++;
- }
- old_y++;
+ while (skip-- &&
+ old_y<old_h /* rounding error may add one line, filter it out */) {
+ for (old_x = 0; old_x < old_w;) {
+ old_x += old_rle->len;
+ old_rle++;
+ }
+ old_y++;
}
}
}