summaryrefslogtreecommitdiff
path: root/TAO/orbsvcs/tests/AVStreams/mpeg/source/mpeg_client/fs2fast.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/orbsvcs/tests/AVStreams/mpeg/source/mpeg_client/fs2fast.cpp')
-rw-r--r--TAO/orbsvcs/tests/AVStreams/mpeg/source/mpeg_client/fs2fast.cpp300
1 files changed, 0 insertions, 300 deletions
diff --git a/TAO/orbsvcs/tests/AVStreams/mpeg/source/mpeg_client/fs2fast.cpp b/TAO/orbsvcs/tests/AVStreams/mpeg/source/mpeg_client/fs2fast.cpp
deleted file mode 100644
index 616ffd7bcbe..00000000000
--- a/TAO/orbsvcs/tests/AVStreams/mpeg/source/mpeg_client/fs2fast.cpp
+++ /dev/null
@@ -1,300 +0,0 @@
-/* $Id$ */
-
-/*
- * Copyright (c) 1992 The Regents of the University of California.
- * All rights reserved.
- *
- * Permission to use, copy, modify, and distribute this software and its
- * documentation for any purpose, without fee, and without written agreement is
- * hereby granted, provided that the above copyright notice and the following
- * two paragraphs appear in all copies of this software.
- *
- * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR
- * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT
- * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
- * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
- * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO
- * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
- */
-
-#include <stdlib.h>
-#include <string.h>
-#include "video.h"
-#include "proto.h"
-#include "dither.h"
-#include "ace/OS.h"
-
-ACE_RCSID(mpeg_client, fs2fast, "$Id$")
-
-/* Arrays containing error values for floyd-steinberg dithering. */
-
-static int deltay[256];
-static int deltau[256];
-static int deltav[256];
-static int deltay2[256];
-static int deltau2[256];
-static int deltav2[256];
-
-/* Definitions governing number of bits used for luminance, cr, and cb. */
-
-#define L_BITS 3
-#define CR_BITS 2
-#define CB_BITS 2
-
-/* Masks for proper quantization of lum, cr, and cb values. */
-
-#define L_MASK 0xe0
-#define CR_MASK 0xc0
-#define CB_MASK 0xc0
-
-
-
-/*
- *--------------------------------------------------------------
- *
- * InitFS2FastDither --
- *
- * Initializes structures and arrays neeeded for fast implementation
- * of two error F-S dithering.
- *
- * Results:
- * None.
- *
- * Side effects:
- * None.
- *
- *--------------------------------------------------------------
- */
-
-void InitFS2FastDither()
-{
- int i;
- int lum_num, cr_num, cb_num;
-
- for (i=0; i<256; i++) {
- lum_num = (i >> (8-L_BITS));
- cr_num = (i >> (8-CR_BITS));
- cb_num = (i >> (8-CB_BITS));
-
- /* These arrays contain the error values propogated for each pixel value
- for each channel.
- */
-
- deltay[i] = (i - ((int) lum_values[lum_num])) / 2;
- deltau[i] = (i-((int) cr_values[cr_num])) / 2;
- deltav[i] = (i-((int) cb_values[cb_num])) / 2;
- deltay2[i] = (i - ((int) lum_values[lum_num])) - deltay[i];
- deltau2[i] = (i - ((int) cr_values[cr_num])) - deltau[i];
- deltav2[i] = (i - ((int) cb_values[cb_num])) - deltav[i];
-
- }
-
-}
-
-/*
- *--------------------------------------------------------------
- *
- * DitherImage --
- *
- * Dithers an image using floyd-steinberg.
- * Assumptions made:
- * 1) The color space is allocated y:cr:cb = 8:4:4
- * 2) The spatial resolution of y:cr:cb is 4:1:1
- *
- * Results:
- * None.
- *
- * Side effects:
- * None.
- *
- *--------------------------------------------------------------
- */
-void
-FS2FastDitherImage (
- unsigned char *lum,
- unsigned char *cr,
- unsigned char *cb,
- unsigned char *out,
- int w, int h)
-{
- int i, j, idx, idx2;
- int y, u, v;
- int dy, du, dv;
- int code;
- static int *yerr1;
- static int *yerr2;
- static int *uerr1;
- static int *uerr2;
- static int *verr1;
- static int *verr2;
- int *ye1, *ue1, *ve1;
- int *ye2, *ue2, *ve2;
- unsigned char *o, *l, *r, *b;
- static int first = 1;
-
- /* If first time called, allocate error arrays. */
-
- if (first) {
- first = 0;
- yerr1 = (int *) malloc((w+5)*sizeof(int));
- yerr2 = (int *) malloc((w+5)*sizeof(int));
- uerr1 = (int *) malloc((w+5)*sizeof(int));
- uerr2 = (int *) malloc((w+5)*sizeof(int));
- verr1 = (int *) malloc((w+5)*sizeof(int));
- verr2 = (int *) malloc((w+5)*sizeof(int));
- }
-
- /*
- * Init error arrays and variables.
- */
- memset ((char *)yerr1, 0, (w+5)*sizeof(int));
- memset ((char *)yerr2, 0, (w+5)*sizeof(int));
- memset ((char *)uerr1, 0, (w+5)*sizeof(int));
- memset ((char *)uerr2, 0, (w+5)*sizeof(int));
- memset ((char *)verr1, 0, (w+5)*sizeof(int));
- memset ((char *)verr2, 0, (w+5)*sizeof(int));
- du = dv = dy = 0;
-
- for (j=0; j<h; j+=2) {
- ye1 = yerr1;
- ue1 = uerr1;
- ve1 = verr1;
- ye2 = yerr2;
- ue2 = uerr2;
- ve2 = verr2;
- idx = j*w;
- idx2 = idx/4;
- o = out+idx;
- l = lum+idx;
- r = cr+idx2;
- b = cb+idx2;
- /* Do the top row in forward order. */
- for (i=0; i<w; i+=2) {
- /* Do left side of this pair... */
- y = *l++ + dy + *ye1++;
- u = *r + du + *ue1++;
- v = *b + dv + *ve1++;
-
- if (y < 0) y = 0;
- else if (y > 255) y = 255;
- if (u < 0) u = 0;
- else if (u > 255) u = 255;
- if (v < 0) v = 0;
- else if (v > 255) v = 255;
-
- /*
- * Construct a code using:
- * high order 3 bits of y,
- * high order 2 bits of u,
- * high order 2 bits of v
- */
- code = (((y & L_MASK) | ((u & CR_MASK) >> L_BITS) | (v >> (L_BITS+CR_BITS)))
- >> (8-(L_BITS+CR_BITS+CB_BITS)));
- *o++ = pixel[code];
- *ye2++ = deltay[y];
- *ue2++ = deltau[u];
- *ve2++ = deltav[v];
- dy = deltay2[y];
- du = deltau2[u];
- dv = deltav2[v];
-
- /* Do right side of this pair... */
- y = *l++ + dy + *ye1++;
- u = *r++ + du + *ue1++;
- v = *b++ + dv + *ve1++;
-
- if (y < 0) y = 0;
- else if (y > 255) y = 255;
- if (u < 0) u = 0;
- else if (u > 255) u = 255;
- if (v < 0) v = 0;
- else if (v > 255) v = 255;
-
- code = (((y & L_MASK) | ((u & CR_MASK) >> L_BITS) | (v >> (L_BITS+CR_BITS)))
- >> (8-(L_BITS+CR_BITS+CB_BITS)));
- *o++ = pixel[code];
- *ye2++ = deltay[y];
- *ue2++ = deltau[u];
- *ve2++ = deltav[v];
- dy = deltay2[y];
- du = deltau2[u];
- dv = deltav2[v];
-
- }
-
- ye1 = yerr1+w-1;
- ue1 = uerr1+w-1;
- ve1 = verr1+w-1;
- ye2 = yerr2+w-1;
- ue2 = uerr2+w-1;
- ve2 = verr2+w-1;
- l += w-1;
- o += w-1;
- r--;
- b--;
- dy = du = dv = 0;
-
- /* Do bottom part of row, in right to left order. */
- for (i=w-1; i>0; i-=2) {
- /* Do right side of this pair... */
- y = *l-- + dy + *ye2--;
- u = *r + du + *ue2--;
- v = *b + dv + *ve2--;
-
- if (y < 0) y = 0;
- else if (y > 255) y = 255;
- if (u < 0) u = 0;
- else if (u > 255) u = 255;
- if (v < 0) v = 0;
- else if (v > 255) v = 255;
-
- /*
- * Construct a code using:
- * high order 3 bits of y,
- * high order 2 bits of u,
- * high order 2 bits of v
- */
- code = (((y & L_MASK) | ((u & CR_MASK) >> L_BITS) | (v >> (L_BITS+CR_BITS)))
- >> (8-(L_BITS+CR_BITS+CB_BITS)));
- *o-- = pixel[code];
- *ye1-- = deltay[y];
- *ue1-- = deltau[u];
- *ve1-- = deltav[v];
- dy = deltay2[y];
- du = deltau2[u];
- dv = deltav2[v];
-
- /* Do left side of this pair... */
- y = *l-- + dy + *ye2--;
- u = *r-- + du + *ue2--;
- v = *b-- + dv + *ve2--;
-
- if (y < 0) y = 0;
- else if (y > 255) y = 255;
- if (u < 0) u = 0;
- else if (u > 255) u = 255;
- if (v < 0) v = 0;
- else if (v > 255) v = 255;
-
- code = (((y & L_MASK) | ((u & CR_MASK) >> L_BITS) | (v >> (L_BITS+CR_BITS)))
- >> (8-(L_BITS+CR_BITS+CB_BITS)));
- *o-- = pixel[code];
- *ye1-- = deltay[y];
- *ue1-- = deltau[u];
- *ve1-- = deltav[v];
- dy = deltay2[y];
- du = deltau2[u];
- dv = deltav2[v];
-
- }
- }
-}
-
-
-
-
-