ITADirectConvolution.h 2.08 KB
Newer Older
1 2 3 4 5
/*
 * ----------------------------------------------------------------
 *
 *		ITA core libs
 *		(c) Copyright Institute of Technical Acoustics (ITA)
6
 *		RWTH Aachen University, Germany, 2015-2019
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