1//============================================================================
2//
3// SSSS tt lll lll
4// SS SS tt ll ll
5// SS tttttt eeee ll ll aaaa
6// SSSS tt ee ee ll ll aa
7// SS tt eeeeee ll ll aaaaa -- "An Atari 2600 VCS Emulator"
8// SS SS tt ee ll ll aa aa
9// SSSS ttt eeeee llll llll aaaaa
10//
11// Copyright (c) 1995-2019 by Bradford W. Mott, Stephen Anthony
12// and the Stella Team
13//
14// See the file "License.txt" for information on usage and redistribution of
15// this file, and for a DISCLAIMER OF ALL WARRANTIES.
16//============================================================================
17
18#include "ConvolutionBuffer.hxx"
19
20// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
21ConvolutionBuffer::ConvolutionBuffer(uInt32 size)
22 : myFirstIndex(0),
23 mySize(size)
24{
25 myData = make_unique<float[]>(mySize);
26 std::fill_n(myData.get(), mySize, 0.f);
27}
28
29// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
30void ConvolutionBuffer::shift(float nextValue)
31{
32 myData[myFirstIndex] = nextValue;
33 myFirstIndex = (myFirstIndex + 1) % mySize;
34}
35
36// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
37float ConvolutionBuffer::convoluteWith(float* kernel) const
38{
39 float result = 0.;
40
41 for (uInt32 i = 0; i < mySize; ++i) {
42 result += kernel[i] * myData[(myFirstIndex + i) % mySize];
43 }
44
45 return result;
46}
47