1 /****************************************************************************** 2 / 3 / File: RadeonAddOn.h 4 / 5 / Description: ATI Radeon Video Capture Media AddOn for BeOS. 6 / 7 / Copyright 2001, Carlos Hasan 8 / 9 *******************************************************************************/ 10 11 #ifndef __RADEON_ADDON_H__ 12 #define __RADEON_ADDON_H__ 13 14 #include <media/MediaAddOn.h> 15 #include <Path.h> 16 #include "benaphore.h" 17 18 #define TOUCH(x) ((void)(x)) 19 20 extern "C" _EXPORT BMediaAddOn *make_media_addon(image_id you); 21 22 class CRadeonAddOn; 23 24 // descriptor of a possible Radeon node 25 class CRadeonPlug { 26 public: 27 CRadeonPlug( CRadeonAddOn *addon, const BPath &dev_path, int id ); ~CRadeonPlug()28 ~CRadeonPlug() {} 29 getName()30 const char *getName() { return fFlavorInfo.name; } getDeviceName()31 const char *getDeviceName() { return dev_path.Path(); } getDeviceShortName()32 const char *getDeviceShortName() { return dev_path.Leaf(); } getFlavorInfo()33 flavor_info *getFlavorInfo() { return &fFlavorInfo; } getNode()34 BMediaNode *getNode() { return node; } setNode(BMediaNode * anode)35 void setNode( BMediaNode *anode ) { node = anode; } getSettings()36 BMessage *getSettings() { return &settings; } 37 38 void writeSettings( BMessage *new_settings ); 39 40 private: 41 CRadeonAddOn *addon; // (global) addon (only needed for GetConfiguration()) 42 BPath dev_path; // path of device driver 43 int id; // id of plug 44 flavor_info fFlavorInfo; // flavor of plug (contains unique id) 45 BMediaNode *node; // active node (or NULL) 46 BMessage settings; // settings for this node 47 media_format fMediaFormat[4]; 48 49 void readSettings(); 50 BPath getSettingsPath(); 51 }; 52 53 class CRadeonAddOn : public BMediaAddOn 54 { 55 public: 56 CRadeonAddOn(image_id imid); 57 virtual ~CRadeonAddOn(); 58 59 virtual status_t InitCheck(const char **out_failure_text); 60 61 virtual int32 CountFlavors(); 62 virtual status_t GetFlavorAt(int32 n, const flavor_info ** out_info); 63 virtual BMediaNode *InstantiateNodeFor( 64 const flavor_info * info, 65 BMessage * config, 66 status_t * out_error); 67 SaveConfigInfo(BMediaNode * node,BMessage * message)68 virtual status_t SaveConfigInfo(BMediaNode *node, BMessage *message) 69 { TOUCH(node); TOUCH(message); return B_OK; } 70 WantsAutoStart()71 virtual bool WantsAutoStart() { return false; } AutoStart(int in_count,BMediaNode ** out_node,int32 * out_internal_id,bool * out_has_more)72 virtual status_t AutoStart(int in_count, BMediaNode **out_node, 73 int32 *out_internal_id, bool *out_has_more) 74 { TOUCH(in_count); TOUCH(out_node); 75 TOUCH(out_internal_id); TOUCH(out_has_more); 76 return B_ERROR; } 77 78 virtual status_t GetConfigurationFor( 79 BMediaNode *your_node, 80 BMessage *into_message ); 81 82 // private methods 83 void UnregisterNode( BMediaNode *node, BMessage *settings ); 84 85 private: 86 status_t fInitStatus; 87 BList fDevices; // list of BPath of found devices 88 thread_id settings_thread; 89 sem_id settings_thread_sem; 90 benaphore plug_lock; 91 BMessage settings; 92 93 status_t RecursiveScan( const char* rootPath, BEntry *rootEntry = NULL ); 94 static int32 settings_writer( void *param ); 95 void settingsWriter(); 96 void writeSettings(); 97 }; 98 99 #endif 100