xref: /haiku/src/apps/codycam/VideoConsumer.h (revision d9cebac2b77547b7064f22497514eecd2d047160)
1 //	Copyright (c) 1998-99, Be Incorporated, All Rights Reserved.
2 //	SMS
3 /*	VideoConsumer.h	*/
4 #ifndef VIDEO_CONSUMER_H
5 #define VIDEO_CONSUMER_H
6 
7 
8 #include <Bitmap.h>
9 #include <BufferConsumer.h>
10 #include <MediaEventLooper.h>
11 #include <MediaNode.h>
12 #include <TimedEventQueue.h>
13 #include <TranslationKit.h>
14 #include <View.h>
15 #include <Window.h>
16 
17 
18 typedef struct {
19 	port_id		port;
20 	bigtime_t	rate;
21 	uint32		imageFormat;
22 	int32		translator;
23 	bool		passiveFtp;
24 	char		fileNameText[64];
25 	char		serverText[64];
26 	char		loginText[64];
27 	char		passwordText[64];
28 	char		directoryText[64];
29 } ftp_msg_info;
30 
31 #define FTP_INFO 0x60000001
32 
33 class BStringView;
34 
35 
36 
37 class VideoConsumer : public BMediaEventLooper, public BBufferConsumer {
38 	public:
39 		VideoConsumer(const char* name, BView* view, BStringView* statusLine,
40 			BMediaAddOn *addon, const uint32 internalId);
41 		~VideoConsumer();
42 
43 	/*	BMediaNode */
44 	public:
45 		virtual	BMediaAddOn* AddOn(long* cookie) const;
46 
47 	protected:
48 		virtual void Start(bigtime_t performanceTime);
49 		virtual void Stop(bigtime_t performanceTime, bool immediate);
50 		virtual void Seek(bigtime_t mediaTime, bigtime_t performanceTime);
51 		virtual void TimeWarp(bigtime_t atRealTime,
52 			bigtime_t toPerformanceTime);
53 
54 		virtual void NodeRegistered();
55 		virtual	status_t RequestCompleted(const media_request_info& info);
56 
57 		virtual	status_t HandleMessage(int32 message, const void* data,
58 			size_t size);
59 
60 		virtual status_t DeleteHook(BMediaNode* node);
61 
62 	/*  BMediaEventLooper */
63 	protected:
64 		virtual void HandleEvent(const media_timed_event* event,
65 			bigtime_t lateness, bool realTimeEvent);
66 
67 	/*	BBufferConsumer */
68 	public:
69 		virtual	status_t AcceptFormat(const media_destination& dest,
70 			media_format* format);
71 
72 		virtual	status_t GetNextInput(int32* cookie, media_input* outInput);
73 
74 		virtual	void DisposeInputCookie(int32 cookie);
75 
76 	protected:
77 		virtual	void BufferReceived(BBuffer* buffer);
78 
79 	private:
80 		virtual	void ProducerDataStatus(const media_destination &forWhom,
81 			int32 status, bigtime_t atMediaTime);
82 
83 		virtual	status_t GetLatencyFor(const media_destination& forWhom,
84 			bigtime_t* outLatency, media_node_id* outId);
85 
86 		virtual	status_t Connected(const media_source& producer,
87 			const media_destination& where, const media_format& withFormat,
88 			media_input* outInput);
89 
90 		virtual	void Disconnected(const media_source& producer,
91 			const media_destination& where);
92 
93 		virtual	status_t FormatChanged(const media_source& producer,
94 			const media_destination& consumer, int32 fromChangeCount,
95 			const media_format& format);
96 
97 	/*	implementation */
98 
99 	public:
100 		status_t CreateBuffers(const media_format& withFormat);
101 
102 		void DeleteBuffers();
103 
104 		static status_t FtpRun(void* data);
105 
106 		void FtpThread();
107 
108 		void UpdateFtpStatus(char* status);
109 
110 		status_t LocalSave(char* filename, BBitmap* bitmap);
111 
112 		status_t FtpSave(char* filename);
113 
114 	private:
115 		BStringView*		fStatusLine;
116 		uint32				fInternalID;
117 		BMediaAddOn*		fAddOn;
118 
119 		thread_id			fFtpThread;
120 
121 		bool				fConnectionActive;
122 		media_input			fIn;
123 		media_destination	fDestination;
124 		bigtime_t			fMyLatency;
125 
126 		BWindow*			fWindow;
127 		BView*				fView;
128 		BBitmap*			fBitmap[3];
129 		bool				fOurBuffers;
130 		BBufferGroup*		fBuffers;
131 		uint32				fBufferMap[3];
132 
133 		BBitmap*			fFtpBitmap;
134 		volatile bool		fTimeToFtp;
135 		volatile bool		fFtpComplete;
136 
137 		bigtime_t			fRate;
138 		uint32				fImageFormat;
139 		int32				fTranslator;
140 		bool				fPassiveFtp;
141 		char				fFileNameText[64];
142 		char				fServerText[64];
143 		char				fLoginText[64];
144 		char				fPasswordText[64];
145 		char				fDirectoryText[64];
146 };
147 
148 #endif	// VIDEO_CONSUMER_H
149