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