noatun-plugins: change to use SDL feature to handle data for SDL

With own imcompleted endianness checkes, systems might be mis-detected
as big endian.

Change to use SDL macros to determine endianness.
Change to use SDL function to byte swap
Change to use SDL tyepdef for appropriate size integer type

Signed-off-by: OBATA Akio <obache@wizdas.com>
pull/10/head
OBATA Akio 3 years ago
parent 762bfec2c8
commit ecd978360d

@ -231,15 +231,15 @@ void SDLView::checkInput()
}
}
#define output2 ((unsigned char*)outputBmp.data)
#define output2 ((Uint8*)outputBmp.data)
void SDLView::repaint()
{
SDL_LockSurface(surface);
TEST();
unsigned long *ptr2 = (unsigned long*)output2;
unsigned long *ptr1 = (unsigned long*)( surface->pixels );
Uint32 *ptr2 = (Uint32*)output2;
Uint32 *ptr1 = (Uint32*)( surface->pixels );
int i = width*height/4;
TEST();
@ -250,7 +250,7 @@ void SDLView::repaint()
unsigned int const r2 = *(ptr2++);
//if (r1 || r2) {
#ifdef LITTLEENDIAN
#if SDL_BYTEORDER == SDL_LIT_ENDIAN
unsigned int const v =
((r1 & 0x000000f0ul) >> 4)
| ((r1 & 0x0000f000ul) >> 8)

@ -24,6 +24,7 @@
#include "syna.h"
#include <unistd.h>
#include <noatun/conversion.h>
#include <SDL_endian.h>
using namespace std;
@ -305,9 +306,6 @@ bool Core::calculate()
double a[NumSamples], b[NumSamples];
int clarity[NumSamples]; //Surround sound
int i,j,k;
#ifndef LITTLEENDIAN
sampleType temp;
#endif
int brightFactor = int(Brightness * brightnessTwiddler /(starSize+0.01));
@ -322,18 +320,8 @@ bool Core::calculate()
for(i=0;i<NumSamples;i++)
{
# ifdef LITTLEENDIAN
x[i] = data[i*2];
y[i] = data[i*2+1];
# else
// Need to convert to big-endian
temp = data[i*2];
temp = (temp >> 8) | (temp << 8);
x[i] = temp;
temp = data[i*2+1];
temp = (temp << 8) | (temp >> 8);
y[i] = temp;
# endif
x[i] = SDL_SwapLE16(data[i*2]);
y[i] = SDL_SwapLE16(data[i*2+1]);
}
fft(x,y);

@ -150,8 +150,8 @@ void SdlScreen::show()
{
SDL_LockSurface(surface);
unsigned long *ptr2 = (unsigned long*)core->output();
unsigned long *ptr1 = (unsigned long*)( surface->pixels );
Uint32 *ptr2 = (Uint32*)core->output();
Uint32 *ptr1 = (Uint32*)( surface->pixels );
int i = core->outWidth*core->outHeight/4;
do {
@ -161,7 +161,7 @@ void SdlScreen::show()
unsigned int const r2 = *(ptr2++);
//if (r1 || r2) {
#ifdef LITTLEENDIAN
#if SDL_BYTEORDER == SDL_LIT_ENDIAN
unsigned int const v =
((r1 & 0x000000f0ul) >> 4)
| ((r1 & 0x0000f000ul) >> 8)

@ -48,31 +48,7 @@
#define NumSamples (1<<LogSize)
#define RecSize (1<<LogSize-Overlap)
#ifndef __linux__
#warning This target has not been tested!
#endif
#ifdef __FreeBSD__
#include <machine/endian.h>
typedef unsigned short sampleType;
#else
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
#endif
#ifdef HAVE_ENDIAN_H
#include <endian.h>
#elif defined(_BIG_ENDIAN)
#define BIG_ENDIAN 1
#define BYTE_ORDER BIG_ENDIAN
#endif
typedef short sampleType;
#endif
#if BYTE_ORDER == BIG_ENDIAN
#define BIGENDIAN
#else
#define LITTLEENDIAN
#endif
void error(const char *str, bool syscall=false);
void warning(const char *str, bool syscall=false);

@ -23,6 +23,7 @@
#include <string.h>
#include "syna.h"
#include <unistd.h>
#include <SDL_endian.h>
Core *core;
#define outputs unsigned char *Dlo=(unsigned char*)lastOutputBmp.data; \
@ -302,9 +303,6 @@ bool Core::calculate()
double a[NumSamples], b[NumSamples];
int clarity[NumSamples]; //Surround sound
int i,j,k;
#ifndef LITTLEENDIAN
sampleType temp;
#endif
int brightFactor = int(Brightness * brightnessTwiddler /(starSize+0.01));
@ -314,18 +312,8 @@ bool Core::calculate()
for(i=0;i<NumSamples;i++)
{
# ifdef LITTLEENDIAN
x[i] = data[i*2];
y[i] = data[i*2+1];
# else
// Need to convert to big-endian
temp = data[i*2];
temp = (temp >> 8) | (temp << 8);
x[i] = temp;
temp = data[i*2+1];
temp = (temp << 8) | (temp >> 8);
y[i] = temp;
# endif
x[i] = SDL_SwapLE16(data[i*2]);
y[i] = SDL_SwapLE16(data[i*2+1]);
}
fft(x,y);

@ -142,8 +142,8 @@ int SdlScreen::sizeUpdate(void) { return 0; }
void SdlScreen::show(void) {
SDL_LockSurface(surface);
unsigned long *ptr2 = (unsigned long*)core->output();
unsigned long *ptr1 = (unsigned long*)( surface->pixels );
Uint32 *ptr2 = (Uint32*)core->output();
Uint32 *ptr1 = (Uint32*)( surface->pixels );
int i = core->outWidth*core->outHeight/4;
do {
@ -153,7 +153,7 @@ void SdlScreen::show(void) {
unsigned int const r2 = *(ptr2++);
//if (r1 || r2) {
#ifdef LITTLEENDIAN
#if SDL_BYTEORDER == SDL_LIT_ENDIAN
unsigned int const v =
((r1 & 0x000000f0ul) >> 4)
| ((r1 & 0x0000f000ul) >> 8)

@ -47,31 +47,7 @@
#define NumSamples (1<<LogSize)
#define RecSize (1<<LogSize-Overlap)
#ifndef __linux__
#warning This target has not been tested!
#endif
#ifdef __FreeBSD__
#include <machine/endian.h>
typedef unsigned short sampleType;
#else
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
#endif
#ifdef HAVE_ENDIAN_H
#include <endian.h>
#elif defined(_BIG_ENDIAN)
#define BIG_ENDIAN 1
#define BYTE_ORDER BIG_ENDIAN
#endif
typedef short sampleType;
#endif
#if BYTE_ORDER == BIG_ENDIAN
#define BIGENDIAN
#else
#define LITTLEENDIAN
#endif
void error(const char *str, bool syscall=false);
void warning(const char *str, bool syscall=false);

Loading…
Cancel
Save