ITAStreamingSourceRealization.h 3.98 KB
Newer Older
Jonas Stienen's avatar
Jonas Stienen committed
1
/*
2
3
4
5
 * ----------------------------------------------------------------
 *
 *		ITA core libs
 *		(c) Copyright Institute of Technical Acoustics (ITA)
Philipp Schäfer's avatar
Philipp Schäfer committed
6
 *		RWTH Aachen University, Germany, 2015-2021
7
8
9
10
11
12
13
14
15
16
17
 *
 * ----------------------------------------------------------------
 *				    ____  __________  _______
 *				   //  / //__   ___/ //  _   |
 *				  //  /    //  /    //  /_|  |
 *				 //  /    //  /    //  ___   |
 *				//__/    //__/    //__/   |__|
 *
 * ----------------------------------------------------------------
 *
 */
Jonas Stienen's avatar
Jonas Stienen committed
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111

#ifndef INCLUDE_WATCHER_ITA_STREAM_SOURCE_REALIZATION
#define INCLUDE_WATCHER_ITA_STREAM_SOURCE_REALIZATION

#include <ITAStreamingDefinitions.h>
#include <ITAStreamingSource.h>

// Vorwrtsdeklarationen
class ITAStreamDatasourceRealizationEventHandler;

//! Grndgerst fr die Implementierung von Datenquellen
/**
 * Die Klasse ITADatasourceRealization ist ein Grundgerst fr die Implementierung
 * von Datenquellen. Sie bietet dem Entwickler einen Einstiegspunkt eigene
 * Datenquellen zu konstruieren und fat einige grundlegende Funktionalitt
 * zusammen. ITADatasourceRealization realisiert die abstrakten Methoden
 * der Oberklasse ITADatasource und bietet darber hinaus konkrete Methoden
 * fr das Bereitstellen von Daten seitens der Datenquelle.
 *
 * Intern enthlt ein ITADatasourceRealization einen Puffer in dem die 
 * freizusetzenden Daten zwischengespeichert werden. Dieser Puffer
 * kann nach beliebig dimensioniert werden (fr die Thread-Sicherheit mu er
 * aber mindestens die Gre 2 haben). Die Klasse stellt Methoden bereit
 * um Zeiger auf diesen Puffer abzurufen und diese zu inkrementieren (analog
 * der publizierten Schnittstelle von ITADatasource). Dabei werden komplexe
 * Aspekte der Thread-Sicherheit bercksichtigt und mssen nicht vom Entwickler
 * selbst programmiert werden.
 *
 * \ingroup datasources
 */


// Module mssen immer Ausgabedaten schreiben
class ITA_STREAMING_API ITAStreamingSourceRealization : public ITAStreamingSource
{
public:
	ITAStreamingSourceRealization(const ITAStreamingProperties& oProperties);
	virtual ~ITAStreamingSourceRealization();

	//! Reset
	/**
	 * Clear internal state, reset stream.
	 * \important May only be called, when the streaming is not running!
	 */
	virtual void Reset();

	//! Handler fr Stream-Event setzen
	/**
	 * \important Darf nur aufgerufen werden, wenn das Streaming nicht luft!
	 */
	ITAStreamDatasourceRealizationEventHandler* GetStreamEventHandler() const;

	//! Handler fr Stream-Event setzen
	/**
	 * \important Darf nur aufgerufen werden, wenn das Streaming nicht luft!
	 */
	void SetStreamEventHandler(ITAStreamDatasourceRealizationEventHandler* pHandler);

	//! Returns the output buffer of a specific channel (used for writing)
	ITASampleFrame& GetStreamOutputBuffer();

	// --= Interace "ITAStreamDatasource" =--

	const ITAStreamingProperties& GetStreamProperties() const { return m_oStreamProps; }
    virtual const ITASampleFrame& GetStreamData(const ITAStreamingState& oState);
	
protected:
	const ITAStreamingProperties m_oStreamProps;

	//! Hook: Process the audio samples of the stream
	/**
	 * Diese Hook-Methode wird von der Klasse aufgerufen, wenn neue Stream-Daten
	 * produziert werden sollen. Unterklassen sollten diese Methode redefinieren, 
	 * um die Verarbeitung von Samples zu realisieren.
	 */
	virtual void ProcessStreamData(const ITAStreamingState& oStreamState) {};
	
private:
	ITAStreamDatasourceRealizationEventHandler* m_pEventHandler;
	ITASampleFrame m_oOutputBuffer;
	long m_iStreamPos;		// Last position of the stream (needed for update checks)
	
	friend class ITAStreamDatasourceRealizationEventHandler;
};

//! Schnittstelle fr Nachrichten-Verarbeitung der Klasse ITADatasourceRealization
class ITA_STREAMING_API ITAStreamDatasourceRealizationEventHandler
{
public:
	virtual ~ITAStreamDatasourceRealizationEventHandler() {};
	virtual void HandleProcessStreamData(ITAStreamingSourceRealization* pSender, const ITAStreamingState& oStreamState);
};

#endif // INCLUDE_WATCHER_ITA_STREAM_SOURCE_REALIZATION