| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709 |
- /******************************************************************************
- |* THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
- |* ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
- |* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
- |* PARTICULAR PURPOSE.
- |*
- |* Copyright 1995-2005 Nero AG. All Rights Reserved.
- |*-----------------------------------------------------------------------------
- |* NeroSDK / AudioPluginManager
- |*
- |* FILE: audiopluginenv.h
- |*
- |* PURPOSE: Definition of the audio plugin manager interfaces
- ******************************************************************************/
- #ifndef _AUDIO_PLUGIN_ENV_
- # define _AUDIO_PLUGIN_ENV_
- #include "AuxDefs.h"
- #include "WavFormat.h"
- #include "AudioTypes.h"
- #include "AudioPluginEnvIID.h"
- #include "AudioErrors.h"
- ///////////////////////////// GENERIC INTERFACES ///////////////////////////////
- interface IIdentifiable : public IUnknown
- {
- virtual void
- GetID(GUID *pGUID) PURE;
- };
- //////////////////////////////////////////////////////////////// IExAudioInfo //
- interface IExAudioInfo : public IUnknown
- {
- virtual int
- GetBitrate() PURE;
- };
- //////////////////////////////////////////////////////////////////// IControl //
- interface IControl : public IUnknown
- {
- virtual const char *
- GetClassName() PURE;
- virtual const char *
- GetTitle() PURE;
- virtual int
- GetID() PURE;
- };
- ///////////////////////////////////////////////////////////////// IURLSupport //
- interface IURLSupport : public IUnknown
- {
- virtual EURLType
- GetSupportedURLTypes() PURE;
- };
- ////////////////////////////////////////////////////////////////// IAbortable //
- interface IAbortable : public IUnknown
- {
- virtual bool
- Abort() PURE;
- };
- /////////////////////////////////////////////////////////////////// ISeekable //
- // Seeks in audio stream.
- interface ISeekable : public IUnknown
- {
- // Moves the current position in the stream. UiNewPos contains the new
- // position in blocks.
- virtual bool
- Seek(ULONGLONG uiNewPos, IStatus **ppStatus = NULL) PURE;
- };
- /////////////////////////////////////////////////////////////// IConfigurable //
- // Any object can expose this interface and become configurable
- interface IConfigurable : public IUnknown
- {
- virtual bool
- Configure() PURE;
- };
- /////////////////////////////////////////////////////////////// IAggregatable //
- // Allows the object to be aggregated by outer objects in order to override
- // some functionality. For example outer object will aggregate IAudioRawReader
- // interfaces in order to perform conversion from plugin format to the format
- // requested by the application.
- interface IAggregatable : public IUnknown
- {
- virtual bool
- SetAggregator(IUnknown *pAggregator) PURE;
- virtual bool
- GetAggregator(IUnknown **ppAggregator) PURE;
- virtual HRESULT STDMETHODCALLTYPE
- InnerQueryInterface( REFIID riid, void __RPC_FAR *__RPC_FAR *ppObj) PURE;
- virtual ULONG
- STDMETHODCALLTYPE InnerAddRef() PURE;
-
- virtual ULONG
- STDMETHODCALLTYPE InnerRelease() PURE;
- };
- ///////////////////////////////////////////////////////////////////// IStatus //
- // Pointers of this type are passed to some functions in audio items, factories
- // and others. If error occures those functions create objects exposing this
- // interface and the application can obtain the detailed information about the
- // error occured.
- interface IStatus : public IUnknown
- {
- virtual const char *
- GetDescription() PURE;
- virtual EAudioError
- GetAudioError() PURE;
- virtual DWORD
- GetSysError() PURE;
- };
- ///////////////////////////////////////////////////////////// IStatusCategory //
- interface IStatusCategory : public IUnknown
- {
- virtual EStatusCategory
- GetCategory() PURE;
- };
- ///////////////////////////////////////////////////////////////////// Process //
- // Exposes functionality of some object that can be started and ended.
- // Currently is used as a part of source and target items.
- interface IProcess : public IUnknown
- {
- virtual bool
- Start(IStatus **ppStatus = NULL) PURE;
- virtual bool
- End(IStatus **ppStatus = NULL) PURE;
- virtual bool
- IsInProcess() PURE;
- };
- ////////////////////////////////////////////////////////////////// IURLHolder //
- // Allows the owner object to store, change, retrieve and determine the type
- // of URL. Currently used as a part of IURLAudioSource and IURLAudioTarget.
- interface IURLHolder : public IUnknown
- {
- virtual bool
- SetURL(const char *szURL, IStatus **ppStatus = NULL) PURE;
- virtual const char *
- GetURL() PURE;
- virtual EURLType
- GetType() PURE;
- };
- /////////////////////////////////////////////////////////////////// ILanguage //
- // Changes the current language for all the windows shown by plugins.
- // Plugin manager stores the current language in it and since all the
- // components can reach the plugin manager, they can obtain and use it
- // whenever is necessary.
- interface ILanguage : public IUnknown
- {
- virtual bool
- SetLanguage(LANGID id, IStatus **ppStatus = NULL) PURE;
- virtual LANGID
- GetLanguage() PURE;
- };
- //////////////////////////////////////////////////////////////////// IProfile //
- // This information is very useful for plugins if they want to store some
- // settings in registry. For different products using this library all those
- // settings thus will be stored in different places. Of course the application
- // must not forget to specify these parameters to the plugin manager.
- interface IProfile : public IUnknown
- {
- virtual bool
- SetVendor(const char *szVendor, IStatus **ppStatus = NULL) PURE;
- virtual const char *
- GetVendor() PURE;
- virtual bool
- SetProduct(const char *szProduct, IStatus **ppStatus = NULL) PURE;
- virtual const char *
- GetProduct() PURE;
- };
- //////////////////////////////////////////////////////////////////// IExtEnum //
- // Enumerates the extensions supported by certain source/target audio factories.
- interface IExtEnum : public IUnknown
- {
- virtual int
- GetCount() PURE;
- // The returned value can't be stored for later use.
- // The application must copy it.
- virtual const char *
- GetExt(int iNum) PURE;
- };
- ///////////////////////////////////////////////////////// ISourceStreamLength //
- // This might be useful in some cases when the efficiency of encoding depends
- // on the prior knowledge about the source.
- interface ISourceStreamLength : public IUnknown
- {
- // dwLength is the source stream length in blocks
- virtual void
- SetLength(DWORD dwLength) PURE;
- };
- /////////////////////////// INTERRELATED INTERFACES ////////////////////////////
- ///////////////////////////////////////////////////////////// IAudioComponent //
- interface IAudioPluginMgr;
- // Exposed by all the audio plugins, i.e. source and target audio factories,
- // audio RAW convertor factories, etc.
- interface IAudioComponent : public IUnknown
- {
- virtual const char *
- GetName() PURE;
- // Application should first call this method to determine the type
- // of the component and after that query the appropriate interface.
- virtual EAudioComponentType
- GetType() PURE;
- // This method is called after all the components are enumerated.
- // It should perform the actual initialization and store pMgr for
- // later use to access functionality provided by other plugins.
- // If the component initialization fails, it should return false
- // and the plugin manager will remove it from components list so
- // it will not be available.
- virtual bool
- Init(IAudioPluginMgr *pMgr, IStatus **ppStatus = NULL) PURE;
- virtual bool
- Done() PURE;
- };
- ///////////////////////////////////////////////////////////////// IVendorInfo //
- interface IVendorInfo : public IUnknown
- {
- virtual const char *
- GetVendorName() PURE;
- virtual bool
- CanDisplayAboutBox() PURE;
- virtual void
- DisplayAboutBox() PURE;
- };
- ////////////////////////////////////////////////////////////////// IAudioItem //
- // Exported by audio items: sources, targets and others. Supplies the
- // general information about them.
- interface IAudioItem : public IUnknown
- {
- virtual bool
- GetCreator(IAudioComponent **pCreator) PURE;
- // Bitmask of auxiliary flags
- virtual EAuxFlags
- GetAuxFlags() PURE;
- virtual void
- SetAuxFlags(EAuxFlags flags) PURE;
- };
- ///////////////////////////////////////////////////////////// IAudioRawReader //
- // Audio items expose this interface when they can extract audio RAW data.
- // This interface corresponds to the EAF_Readable auxiliary audio item flag.
- interface IAudioRawReader : public IUnknown
- {
- virtual SWavFormat
- GetRawFormat() PURE;
- // iBufSize must contain the size in bytes of the buffer pointed by pBuf.
- virtual bool
- RawRead(BYTE *pBuf, int iBufSize, int *piRead, EAudioRawState &state,
- IStatus **ppStatus = NULL) PURE;
- // Returns RAW data length in bytes.
- virtual ULONGLONG
- GetRawLen() PURE;
- };
- //////////////////////////////////////////////////////////////// IAudioSource //
- interface IAudioSource : public IUnknown
- {
- // Returns free-form text string about the item.
- virtual const char *
- GetInfo() PURE;
- // Returns the file duration in milliseconds.
- virtual ULONGLONG
- GetDuration() PURE;
- };
- ///////////////////////////////////////////////////////// IAudioSourceFactory //
- interface IAudioSourceFactory
- {
- virtual EAuxFlags
- GetAuxFlags() PURE;
- };
- ////////////////////////////////////////////////////// IURLAudioSourceFactory //
- // Opens source audio items by URLs.
- interface IURLAudioSourceFactory : public IAudioSourceFactory, IURLSupport
- {
- // "format" specifies the raw data format which the application
- // wants to get.
- virtual bool
- Open( const char *szURL,
- IUnknown **ppSrc,
- EAuxFlags flagsInclude = EAF_None,
- EAuxFlags flagsExclude = EAF_None,
- IStatus **ppStatus = NULL) PURE;
- };
- ////////////////////////////////////////////////////////////////// IConvertor //
- interface IConvertor : public IUnknown
- {
- virtual bool
- Convert(BYTE *pData, int iNumberOfBytes, IStatus **ppStatus) PURE;
- virtual int
- GetOutputBufSize() PURE;
- virtual BYTE *
- GetOutputBuf() PURE;
- };
- ////////////////////////////////////////////////////////// IConvertorFactory2 //
- interface IConvertorFactory2 : public IUnknown
- {
- virtual void
- SetMode(EConvFactoryMode mode) PURE;
- };
- /////////////////////////////////////////////////////////// IConvertorFactory //
- // Produces instances of certain type raw convertor objects.
- interface IConvertorFactory : public IUnknown
- {
- virtual EMediaType
- GetSupportedMediaTypes() PURE;
- virtual bool
- CreateConvertor(const SWavFormat &src,
- const SWavFormat &tgt,
- IConvertor **ppConv,
- IStatus **ppStatus = NULL) PURE;
- };
- ////////////////////////////////////////////////////////////// IEventReceiver //
- interface IEventReceiver : public IUnknown
- {
- virtual void
- ReceiveEvent(EEvent event, IUnknown *pSource) PURE;
- };
- ////////////////////////////////////////////////////////////// IComponentEnum //
- // Enumerates audio plugin components. Exposed by the central plugin manager
- // and by all the audio plugin DLLs that need to incapsulate more than one
- // component.
- interface IComponentEnum : public IUnknown
- {
- virtual int
- GetCount() PURE;
- virtual bool
- GetComponent(int iNum, IAudioComponent **ppComp) PURE;
- };
- ////////////////////////////////////////////////////////// IAudioRawBlockInfo //
- // Provides information about an audio source in blocks (current position,
- // size of block, size of the source in blocks).
- interface IAudioRawBlockInfo : public IUnknown
- {
- virtual ULONGLONG
- GetPos() PURE;
- virtual ULONGLONG
- GetBlockSize() PURE;
- // If the audio source is infinite like in internet streams, return value
- // will be NO_LENGTH. Otherwise this method returns the length of RAW data
- // in blocks.
- virtual ULONGLONG
- GetDataLength() PURE;
- };
- ///////////////////////////////////////////////////////////// IAudioRawWriter //
- // Allows to write audio RAW data into an object.
- interface IAudioRawWriter : public IUnknown
- {
- virtual bool
- RawWrite(BYTE *pData, int iNumberOfBytesToWrite, EAudioRawState &state,
- IStatus **ppStatus = NULL) PURE;
- // Since the object is created, this function can return different values
- // depending on output target settings. This only cannot be changed during
- // the writing process so the application/aggregator call this function
- // immediately before the process starting.
- virtual SWavFormat
- GetRawFormat() PURE;
- };
- ///////////////////////////////////////////////////////// IAudioTargetFactory //
- interface IAudioTargetFactory
- {
- // Returns true if settings are changed, otherwise returns false.
- virtual bool
- EditSettings(IUnknown **ppTgt, int iCount) PURE;
- virtual bool
- CanEditSettings() PURE;
- };
- ////////////////////////////////////////////////////// IURLAudioTargetFactory //
- // Creates target audio items at URLs.
- interface IURLAudioTargetFactory : public IAudioTargetFactory, IURLSupport
- {
- // Caller must fill "formatSrc" accordingly to the format of source data
- // that is to be written in this target.
- virtual bool
- CreateURLAudioTarget( IUnknown **ppTgt,
- const SWavFormat &formatSrc,
- IStatus **ppStatus = NULL) PURE;
- };
- ///////////////////////////////////////////////////////////////// IInfoReader //
- // Allows to obtain the additional information from a source item.
- interface IInfoReader : public IUnknown
- {
- // All these functions can return NULL for no data indication.
- virtual const char *
- GetTitle() PURE;
- virtual const char *
- GetArtist() PURE;
- virtual const char *
- GetAlbum() PURE;
- virtual const char *
- GetYear() PURE;
- virtual const char *
- GetGenre() PURE;
- };
- ///////////////////////////////////////////////////////////////// IInfoWriter //
- interface IInfoWriter : public IUnknown
- {
- virtual void
- SetTitle(const char *szTitle) PURE;
- virtual void
- SetArtist(const char *szArtist) PURE;
- virtual void
- SetAlbum(const char *szAlbum) PURE;
- virtual void
- SetYear(const char *szYear) PURE;
- virtual void
- SetGenre(const char *szGenre) PURE;
- };
- //////////////////////////////////////////////////////////////// ITrackNumber //
- interface ITrackNumber : public IUnknown
- {
- // 0-based index or -1 if no track number is available
- virtual int
- Get() PURE;
- virtual bool
- Set(int iNum) PURE;
- };
- //////////////////////////////////////////////////////////// ISrcInfoCallback //
- interface ISrcInfoCallback : public IUnknown
- {
- virtual int
- GetCustomControlCount() PURE;
- virtual bool
- GetControl(int iNum, IControl **ppControl) PURE;
- virtual void
- OnModified(bool b) PURE;
- virtual void
- OnCustomButton(int iID) PURE;
- virtual bool
- OnSave() PURE;
- virtual bool
- OnClose() PURE;
- };
- //////////////////////////////////////////////////////// ISrcInfoViewerEditor //
- // Brings a dialog with additional information about an audio source and
- // sometimes allows to edit it and store back in the source (for example
- // in the mp3 URL audio source item).
- interface ISrcInfoViewerEditor : public IUnknown
- {
- virtual bool
- GetCallback(ISrcInfoCallback **ppNewCallback) PURE;
- virtual void
- SetCallback(ISrcInfoCallback *pNewCallback) PURE;
- virtual bool
- DoModal(IStatus **ppStatus = NULL) PURE;
- virtual bool
- CloseModal(IStatus **ppStatus = NULL) PURE;
- virtual bool
- SaveDialogToObject(IStatus **ppStatus = NULL) PURE;
- virtual bool
- SaveObjectToFile(IStatus **ppStatus = NULL) PURE;
- virtual bool
- CanSaveObjectToFile() PURE;
- };
- ////////////////////////////////////////////////////////////////////// ILimit //
- interface ILimit : public IUnknown
- {
- virtual bool
- IsUnlimited() PURE;
- virtual const char *
- GetDescription() PURE;
- };
- ///////////////////////////////////////////////////////////////// IIndexArray //
- interface IIndexArray : public IUnknown
- {
- virtual int
- GetIndexNumber() PURE;
- virtual int
- GetIndex(int iNum) PURE;
- };
- ///////////////////////////////////////////////////////////// IAudioPluginMgr //
- // The general interface of the central plugin manager. All the components
- // in the system receive it's pointer during the initialization and can refer
- // to it to obtain, for example the profile information, language settings and
- // so on. Also applications work with this interface to open and create
- // source/target audio items.
-
- interface IAudioPluginMgr : public IUnknown
- {
- virtual bool
- SetPluginDirectory(const char *szPluginDir) PURE;
- virtual bool
- LoadPlugins() PURE;
- virtual bool
- CanUnloadPlugins() PURE;
- virtual bool
- UnloadPlugins() PURE;
- virtual bool
- SetConvertor(IConvertorFactory *pCF, IStatus **ppStatus = NULL) PURE;
- virtual bool
- GetConvertor(IConvertorFactory **ppConvFactory) PURE;
- virtual bool
- GetUnsupportedComponents(IComponentEnum **ppEnum) PURE;
- // Event functions
- // Sends an event to all the subscribed event receivers, they can be either
- // application-side objects, plugins, plugin manager itself or other
- // objects.
- virtual bool
- SendEvent(EEvent event, IUnknown *pSource) PURE;
- virtual bool
- SubscribeToEvents(IEventReceiver *pReceiver) PURE;
- virtual bool
- UnsubscribeToEvents(IEventReceiver *pReceiver) PURE;
- // Other
- // Opens an audio file from URL and if the source quality is not the same
- // as "pFormat", it creates a wrapper object which aggregates the source.
- // pFormat can be NULL, in this case the original format will be received.
- virtual bool
- OpenURLAudioFile( const char *szURL,
- const SWavFormat *pFormat,
- IUnknown **ppSrc,
- int iTries,
- EAuxFlags flagsInclude,
- EAuxFlags flagsExclude,
- IStatus **ppStatus) PURE;
- // Application should never create targets directly by target factories
- // because, it will be necessary to perform attitional format conversion
- // which plugin manager does automatically.
- virtual bool
- CreateURLAudioTarget( IURLAudioTargetFactory *pFactory,
- IUnknown **pTgt,
- const SWavFormat &formatSrc,
- IStatus **ppStatus = NULL) PURE;
- // Some nonstandard objects can be attached to the plugin manager by
- // plugins and requested and handled by others. Only a single object of
- // a CLSID can be attached to the plugin manager at a time.
-
- // This method attaches an auxiliary object to the plugin manager.
- // Returns false if such object is already attached.
- virtual bool
- AttachAuxObject(REFCLSID clsID, IUnknown *pUnknown) PURE;
- virtual bool
- DetachAuxObject(REFCLSID clsID) PURE;
- // Reguests an auxiliary object from the plugin manager. Returns false if
- // no such object is attached. Second parameter can be NULL, this is useful
- // for determining if such object is attached to the manager.
- virtual bool
- GetAuxObject(REFCLSID clsID, IUnknown **ppUnknown) PURE;
- virtual bool
- TranslateError(IStatus *pInStatus, IStatus **ppOutStatus) PURE;
- };
- #endif // _AUDIO_PLUGIN_ENV_
|