/* * Copyright 2004-2009, Haiku. All rights reserved. * Distributed under the terms of the MIT license. * * Authors: * Marcus Overhagen * Axel Dörfler * Stephan Aßmus */ #ifndef _ADD_ON_MANAGER_H #define _ADD_ON_MANAGER_H /*! Manager for codec add-ons (reader, writer, encoder, decoder) BMediaAddOn are handled in the NodeManager */ #include "DataExchange.h" #include "TList.h" #include "DecoderPlugin.h" #include "EncoderPlugin.h" #include "ReaderPlugin.h" #include "StreamerPlugin.h" #include "WriterPlugin.h" namespace BPrivate { namespace media { class AddOnManager { public: AddOnManager(); ~AddOnManager(); static AddOnManager* GetInstance(); status_t GetDecoderForFormat(entry_ref* _ref, const media_format& format); status_t GetEncoderForFormat(entry_ref* _ref, const media_format& outputFormat); status_t GetReaders(entry_ref* _ref, int32* _count, int32 maxCount); status_t GetStreamers(entry_ref* _ref, int32* _count, int32 maxCount); status_t GetEncoder(entry_ref* _ref, int32 id); status_t GetWriter(entry_ref* _ref, uint32 internalID); status_t GetFileFormat(media_file_format* _fileFormat, int32 cookie); status_t GetCodecInfo(media_codec_info* _codecInfo, media_format_family* _formatFamily, media_format* _inputFormat, media_format* _outputFormat, int32 cookie); void RegisterAddOns(); private: status_t _RegisterAddOn(const entry_ref& ref); status_t _UnregisterAddOn(const entry_ref& ref); void _RegisterReader(ReaderPlugin* reader, const entry_ref& ref); void _RegisterDecoder(DecoderPlugin* decoder, const entry_ref& ref); void _RegisterWriter(WriterPlugin* writer, const entry_ref& ref); void _RegisterEncoder(EncoderPlugin* encoder, const entry_ref& ref); void _RegisterStreamer(StreamerPlugin* streamer, const entry_ref& ref); bool _FindDecoder(const media_format& format, const BPath& path, entry_ref* _decoderRef); bool _FindEncoder(const media_format& format, const BPath& path, entry_ref* _decoderRef); void _GetReaders(const BPath& path, entry_ref* outRefs, int32* outCount, int32 maxCount); private: struct reader_info { entry_ref ref; }; struct writer_info { entry_ref ref; uint32 internalID; }; struct decoder_info { entry_ref ref; List formats; }; struct encoder_info { entry_ref ref; uint32 internalID; media_codec_info codecInfo; media_format_family formatFamily; media_format intputFormat; media_format outputFormat; }; struct streamer_info { entry_ref ref; }; BLocker fLock; List fReaderList; List fWriterList; List fDecoderList; List fEncoderList; List fStreamerList; List fWriterFileFormats; uint32 fNextWriterFormatFamilyID; uint32 fNextEncoderCodecInfoID; static AddOnManager sInstance; }; } // namespace media } // namespace BPrivate #endif // _ADD_ON_MANAGER_H