ITADirectConvolution.h 2.08 KB
Newer Older
1
2
3
4
5
/*
 * ----------------------------------------------------------------
 *
 *		ITA core libs
 *		(c) Copyright Institute of Technical Acoustics (ITA)
Dipl.-Ing. Jonas Stienen's avatar
Dipl.-Ing. Jonas Stienen committed
6
 *		RWTH Aachen University, Germany, 2015-2020
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
 *
 * ----------------------------------------------------------------
 *				    ____  __________  _______
 *				   //  / //__   ___/ //  _   |
 *				  //  /    //  /    //  /_|  |
 *				 //  /    //  /    //  ___   |
 *				//__/    //__/    //__/   |__|
 *
 * ----------------------------------------------------------------
 *
 */

#ifndef INCLUDE_WATCHER_ITA_CONVOLUTION
#define INCLUDE_WATCHER_ITA_CONVOLUTION

#include <ITAConvolutionDefinitions.h>

#include <ITASampleBuffer.h>
#include <ITASampleFrame.h>
#include <ITAUncopyable.h>

// Vorwärtsdeklarationen
class ITADirectConvolutionImpl;

/**
 * Diese Klasse definiert die Schnittstelle für schnelle (offline) Faltungen.
 * Die Funktionalität besteht darin zwei Signale möglichst schnell und effizient
 * miteinander zu falten. Die Eingaben und Ausgaben werden im Zeitbereich übergeben.
 * Instanzen der Klasse repräsentieren Faltungen eines bestimmten Typs
 * (bestimmte Eingabeparameter). Damit die maximale Leistung erreicht werden kann,
 * müssen vorher die Faltungsoperationen geplant werden.
 */

class ITA_CONVOLUTION_API ITADirectConvolution : public ITAUncopyable
{
public:
	// TODO: Flags static const int 
	static const int DEFAULT_FLAGS = 0;

	//! Standardkonstruktor
	ITADirectConvolution();

	//! Initialisierungskonstruktor (Arrays)
	ITADirectConvolution( const int src1length, const int src2length, const int flags = DEFAULT_FLAGS );

	//! Destruktor
	virtual ~ITADirectConvolution();

	//! Planungsmethode (Arrays)
	void Plan( const int src1length, const int src2length, const int flags = DEFAULT_FLAGS );


	//! Gibt zurück ob die Faltung schon geplant ist
	bool IsPlanned() const;

	//! Faltungsmethode (Arrays)
	virtual void Convolve( const float* src1, const int src1length, const float* src2, const int src2length, float* dest, const int destlength );

private:
	ITADirectConvolutionImpl* m_pImpl;
};

#endif // INCLUDE_WATCHER_ITA_CONVOLUTION