1/*
2 * Copyright 2014-2016, Dario Casalinuovo
3 * Copyright 1999, Be Incorporated
4 * All Rights Reserved.
5 * This file may be used under the terms of the Be Sample Code License.
6 */
7#ifndef _MEDIA_RECORDER_NODE_H
8#define _MEDIA_RECORDER_NODE_H
9
10
11#include <BufferConsumer.h>
12#include <MediaEventLooper.h>
13#include <MediaRecorder.h>
14#include <String.h>
15
16
17namespace BPrivate { namespace media {
18
19
20class BMediaRecorderNode : public BMediaEventLooper,
21	public BBufferConsumer {
22public:
23								BMediaRecorderNode(const char* name,
24									BMediaRecorder* recorder,
25									media_type type
26										= B_MEDIA_UNKNOWN_TYPE);
27
28			//	TODO these are not thread safe; we should fix that...
29			void				SetAcceptedFormat(const media_format& format);
30			const media_format&	AcceptedFormat() const;
31
32			void				GetInput(media_input* input);
33
34			void				SetDataEnabled(bool enabled);
35			void				ActivateInternalConnect(bool connectMode);
36
37protected:
38
39	virtual	BMediaAddOn*		AddOn(int32* id) const;
40
41	virtual void				NodeRegistered();
42
43	virtual void				SetRunMode(run_mode mode);
44
45	virtual void				HandleEvent(const media_timed_event* event,
46									bigtime_t lateness,
47									bool realTimeEvent);
48
49	virtual	void				Start(bigtime_t performanceTime);
50
51	virtual	void				Stop(bigtime_t performanceTime,
52									bool immediate);
53
54	virtual	void				Seek(bigtime_t mediaTime,
55									bigtime_t performanceTime);
56
57	virtual	void				TimeWarp(bigtime_t realTime,
58									bigtime_t performanceTime);
59
60	virtual	status_t			HandleMessage(int32 message,
61									const void* data,
62									size_t size);
63
64			// Someone, probably the producer, is asking you about
65			// this format. Give your honest opinion, possibly
66			// modifying *format. Do not ask upstream producer about
67			//	the format, since he's synchronously waiting for your
68			// reply.
69
70	virtual	status_t			AcceptFormat(const media_destination& dest,
71									media_format* format);
72
73	virtual	status_t			GetNextInput(int32* cookie,
74									media_input* outInput);
75
76	virtual	void				DisposeInputCookie(int32 cookie);
77
78	virtual	void				BufferReceived(BBuffer* buffer);
79
80	virtual	void				ProducerDataStatus(
81									const media_destination& destination,
82									int32 status,
83									bigtime_t performanceTime);
84
85	virtual	status_t			GetLatencyFor(const media_destination& destination,
86									bigtime_t* outLatency,
87									media_node_id* outTimesource);
88
89	virtual	status_t			Connected(const media_source& producer,
90									const media_destination& where,
91									const media_format& format,
92									media_input* outInput);
93
94	virtual	void				Disconnected(const media_source& producer,
95									const media_destination& where);
96
97	virtual	status_t			FormatChanged(const media_source& producer,
98									const media_destination& consumer,
99									int32 tag,
100									const media_format& format);
101
102protected:
103
104	virtual						~BMediaRecorderNode();
105
106			BMediaRecorder*		fRecorder;
107			media_format		fOKFormat;
108			media_input			fInput;
109			BString				fName;
110			bool				fConnectMode;
111};
112
113}
114}
115
116using namespace BPrivate::media;
117
118#endif	//	_MEDIA_RECORDER_NODE_H
119