113 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			113 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
|  *  lines.c
 | |
|  *  iTunesXPlugIn
 | |
|  *
 | |
|  *  Created by guillaum on Tue Aug 14 2001.
 | |
|  *  Copyright (c) 2001 __CompanyName__. All rights reserved.
 | |
|  *
 | |
|  */
 | |
| 
 | |
| #ifdef HAVE_CONFIG_H
 | |
| #include "config.h"
 | |
| #endif
 | |
| 
 | |
| #include "lines.h"
 | |
| #include <math.h>
 | |
| 
 | |
| static inline unsigned char
 | |
| lighten (unsigned char value, unsigned char power)
 | |
| {
 | |
|   unsigned char i;
 | |
| 
 | |
|   for (i = 0; i < power; i++)
 | |
|     value += (255 - value) / 5;
 | |
|   return value;
 | |
| }
 | |
| 
 | |
| void
 | |
| goom_lines (GoomData * goomdata, gint16 data[2][512], unsigned int ID,
 | |
|     unsigned int *p, guint32 power)
 | |
| {
 | |
|   guint32 color1;
 | |
|   guint32 color2;
 | |
|   guint32 resolx = goomdata->resolx;
 | |
|   guint32 resoly = goomdata->resoly;
 | |
|   unsigned char *color = 1 + (unsigned char *) &color1;
 | |
| 
 | |
|   switch (ID) {
 | |
|     case 0:                    /* Horizontal stereo lines */
 | |
|     {
 | |
|       color1 = 0x0000AA00;
 | |
|       color2 = 0x00AA0000;
 | |
|       break;
 | |
|     }
 | |
| 
 | |
|     case 1:                    /* Stereo circles */
 | |
|     {
 | |
|       color1 = 0x00AA33DD;
 | |
|       color2 = 0x00AA33DD;
 | |
|       break;
 | |
|     }
 | |
|     default:{
 | |
|       color1 = color2 = 0;
 | |
|       g_assert_not_reached ();
 | |
|       break;
 | |
|     }
 | |
|   }
 | |
|   *color = lighten (*color, power);
 | |
|   color++;
 | |
|   *color = lighten (*color, power);
 | |
|   color++;
 | |
|   *color = lighten (*color, power);
 | |
|   color = 1 + (unsigned char *) &color2;
 | |
|   *color = lighten (*color, power);
 | |
|   color++;
 | |
|   *color = lighten (*color, power);
 | |
|   color++;
 | |
|   *color = lighten (*color, power);
 | |
| 
 | |
|   switch (ID) {
 | |
|     case 0:                    /* Horizontal stereo lines */
 | |
|     {
 | |
|       unsigned int i;
 | |
| 
 | |
|       for (i = 0; i < 512; i++) {
 | |
|         guint32 plot;
 | |
| 
 | |
|         plot = i * resolx / 512 + (resoly / 4 + data[0][i] / 1600) * resolx;
 | |
|         p[plot] = color1;
 | |
|         p[plot + 1] = color1;
 | |
|         plot = i * resolx / 512 + (resoly * 3 / 4 - data[1][i] / 1600) * resolx;
 | |
|         p[plot] = color2;
 | |
|         p[plot + 1] = color2;
 | |
|       }
 | |
|       break;
 | |
|     }
 | |
| 
 | |
|     case 1:                    /* Stereo circles */
 | |
|     {
 | |
|       float z;
 | |
|       unsigned int monX = resolx / 2;
 | |
|       float monY = (float) resoly / 4;
 | |
|       float monY2 = (float) resoly / 2;
 | |
| 
 | |
|       for (z = 0; z < 6.2832f; z += 1.0f / monY) {
 | |
|         /* float offset1 = 128+data[1][(unsigned int)(z*81.33f)])/200000; */
 | |
|         p[monX + (unsigned int) ((monY + ((float) resoly) * (128 +
 | |
|                         data[1][(unsigned int) (z * 81.33f)]) / 200000) *
 | |
|                 cos (z) + resolx * (unsigned int) (monY2 + (monY +
 | |
|                         ((float) resoly) * (128 +
 | |
|                             data[1][(unsigned int) (z * 81.33f)]) / 400000) *
 | |
|                     sin (z)))] = color1;
 | |
|         p[monX + (unsigned int) ((monY - ((float) resoly) * (128 +
 | |
|                         data[0][(unsigned int) (z * 81.33f)]) / 200000) *
 | |
|                 cos (z) + resolx * (unsigned int) (monY2 + (monY -
 | |
|                         ((float) resoly) * (128 +
 | |
|                             data[0][(unsigned int) (z * 81.33f)]) / 400000) *
 | |
|                     sin (z)))] = color2;
 | |
|       }
 | |
|       break;
 | |
|     }
 | |
|   }
 | |
| }
 |