aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorD G Turner2012-04-17 22:12:20 +0100
committerD G Turner2012-04-17 22:12:20 +0100
commit0f66d2c701958dc70ed57b570a7f59965a90bf66 (patch)
treec1adcd1753206e57a7284fe096a2ae144f1675cc
parentaa61c9abd3d1f89b6e689a25a81040011a25a069 (diff)
downloadscummvm-rg350-0f66d2c701958dc70ed57b570a7f59965a90bf66.tar.gz
scummvm-rg350-0f66d2c701958dc70ed57b570a7f59965a90bf66.tar.bz2
scummvm-rg350-0f66d2c701958dc70ed57b570a7f59965a90bf66.zip
COMMON: Update DCT & RDFT to avoid dynamic allocation of Sine/Cos Tables.
-rw-r--r--common/dct.cpp7
-rw-r--r--common/dct.h6
-rw-r--r--common/rdft.cpp12
-rw-r--r--common/rdft.h10
4 files changed, 13 insertions, 22 deletions
diff --git a/common/dct.cpp b/common/dct.cpp
index a353a9ad88..38b4fbcff2 100644
--- a/common/dct.cpp
+++ b/common/dct.cpp
@@ -26,16 +26,14 @@
// Copyright (c) 2010 Alex Converse <alex.converse@gmail.com>
// Copyright (c) 2010 Vitor Sessak
-#include "common/cosinetables.h"
#include "common/dct.h"
namespace Common {
-DCT::DCT(int bits, TransformType trans) : _bits(bits), _trans(trans), _rdft(0) {
+DCT::DCT(int bits, TransformType trans) : _bits(bits), _cos(_bits + 2), _trans(trans), _rdft(0) {
int n = 1 << _bits;
- _cos = new Common::CosineTable(_bits + 2);
- _tCos = _cos->getTable();
+ _tCos = _cos.getTable();
_csc2 = new float[n / 2];
@@ -48,7 +46,6 @@ DCT::DCT(int bits, TransformType trans) : _bits(bits), _trans(trans), _rdft(0) {
DCT::~DCT() {
delete _rdft;
delete[] _csc2;
- delete _cos;
}
void DCT::calc(float *data) {
diff --git a/common/dct.h b/common/dct.h
index 7e69899fdc..085423ddff 100644
--- a/common/dct.h
+++ b/common/dct.h
@@ -33,9 +33,9 @@
#include "common/math.h"
#include "common/rdft.h"
-namespace Common {
+#include "common/cosinetables.h"
-class CosineTable;
+namespace Common {
/**
* (Inverse) Discrete Cosine Transforms.
@@ -61,7 +61,7 @@ private:
int _bits;
TransformType _trans;
- CosineTable *_cos;
+ CosineTable _cos;
const float *_tCos;
float *_csc2;
diff --git a/common/rdft.cpp b/common/rdft.cpp
index 3ebbf2e058..bfd6818fbd 100644
--- a/common/rdft.cpp
+++ b/common/rdft.cpp
@@ -25,12 +25,10 @@
// Copyright (c) 2009 Alex Converse <alex dot converse at gmail dot com>
#include "common/rdft.h"
-#include "common/cosinetables.h"
-#include "common/sinetables.h"
namespace Common {
-RDFT::RDFT(int bits, TransformType trans) : _bits(bits), _fft(0) {
+RDFT::RDFT(int bits, TransformType trans) : _bits(bits), _sin(bits), _cos(bits), _fft(0) {
assert ((_bits >= 4) && (_bits <= 16));
_inverse = trans == IDFT_C2R || trans == DFT_C2R;
@@ -40,16 +38,12 @@ RDFT::RDFT(int bits, TransformType trans) : _bits(bits), _fft(0) {
int n = 1 << bits;
- _sin = new SineTable(bits);
- _tSin = _sin->getTable() + (trans == DFT_R2C || trans == DFT_C2R) * (n >> 2);
- _cos = new CosineTable(bits);
- _tCos = _cos->getTable();
+ _tSin = _sin.getTable() + (trans == DFT_R2C || trans == DFT_C2R) * (n >> 2);
+ _tCos = _cos.getTable();
}
RDFT::~RDFT() {
delete _fft;
- delete _sin;
- delete _cos;
}
void RDFT::calc(float *data) {
diff --git a/common/rdft.h b/common/rdft.h
index 04582b1fec..4bbde45d35 100644
--- a/common/rdft.h
+++ b/common/rdft.h
@@ -31,10 +31,10 @@
#include "common/math.h"
#include "common/fft.h"
-namespace Common {
+#include "common/cosinetables.h"
+#include "common/sinetables.h"
-class SineTable;
-class CosineTable;
+namespace Common {
/**
* (Inverse) Real Discrete Fourier Transform.
@@ -62,8 +62,8 @@ private:
int _inverse;
int _signConvention;
- SineTable *_sin;
- CosineTable *_cos;
+ SineTable _sin;
+ CosineTable _cos;
const float *_tSin;
const float *_tCos;