Main Page   Class Hierarchy   Data Structures   File List   Data Fields   Globals  

pv_plugin_interfaces.h

Go to the documentation of this file.
00001 /*
00002 * ==============================================================================
00003 *  Name        : pv_plugin_interfaces.h
00004 *  Part of     :
00005 *  Interface   :
00006 *  Description : Defines the general plugin interfaces for the PV engines
00007 *  Version     : (see RELEASE field in copyright header above)
00008 *
00009 * ==============================================================================
00010 */
00011 
00012 #ifndef PV_PLUGIN_INTERFACES_H_INCLUDED
00013 #define PV_PLUGIN_INTERFACES_H_INCLUDED
00014 
00015 
00016 //  INCLUDES
00017 #include "pv_common_symbian_types.h"
00018 
00019 // CONSTANTS
00026 const TInt KPVUidDataSrcPrime   = 0xFFFFFF08;
00027 const TInt KPVUidDataSrcPlay    = 0xFFFFFF09;
00028 const TInt KPVUidDataSrcPause   = 0xFFFFFF0A;
00029 const TInt KPVUidDataSrcStop    = 0xFFFFFF0B;
00030 
00044 const TInt KPVUidDataSinkPrime  = 0xFFFFFF0C;
00045 const TInt KPVUidDataSinkPlay   = 0xFFFFFF0D;
00046 const TInt KPVUidDataSinkPause  = 0xFFFFFF0E;
00047 const TInt KPVUidDataSinkStop   = 0xFFFFFF0F;
00048 
00049 
00060 const TUid KPVUidYUVFrameBuffer = {0xFFFFFF0d};
00061 
00062 
00063 // MACROS
00067 #define KPVUidAudioInputInterface             TPVUuid(0x194e8655,0x944c,0x402c,0xb0,0xc2,0xf7,0xbd,0xd5,0xe5,0x43,0x2f)
00068 
00071 #define KPVUidDevSoundAudioInputInterface     TPVUuid(0x9e2c416e,0x0299,0x4775,0x88,0xfa,0x42,0x53,0xbc,0xbc,0x58,0xbf)
00072 
00075 #define KPVUidAudioOutputInterface            TPVUuid(0xf5c5b825,0x90eb,0x4091,0xbe,0xea,0xa0,0xc3,0x9b,0xe2,0x00,0xaf)
00076 
00079 #define KPVUidDevSoundAudioOutputInterface    TPVUuid(0x48edb46a,0x60e4,0x4e83,0xb1,0xad,0x92,0xa8,0xd4,0x07,0x04,0x7a)
00080 
00083 #define KPVUidVideoInputInterface             TPVUuid(0xfb320151,0x6d06,0x4bd5,0xa2,0x68,0x61,0x01,0xdb,0x25,0x1c,0x0e)
00084 
00087 #define KPVUidVideoOutputInterface            TPVUuid(0x0bb9d8a8,0x9623,0x4dec,0x84,0x0b,0xb9,0xf2,0x66,0xf8,0x4e,0x3d)
00088 
00091 #define KPVUidProxiedInterface                TPVUuid(0xf7076653,0x6088,0x47c6,0x88,0xc1,0xb7,0xed,0x28,0xe7,0x2b,0xea)
00092 
00093 
00094 // DATA TYPES
00095 
00096 
00097 // FUNCTION PROTOTYPES
00098 
00099 
00100 // FORWARD DECLARATIONS
00101 
00102 
00103 
00104 // CLASS DECLARATION
00110 class MPVPluginBase
00111 {
00112     public:
00113         virtual ~MPVPluginBase() {}
00114 
00121         IMPORT_C virtual const RArray<TPVMIMEType *>& GetMultimediaTypesL() const = 0;
00122 
00136         IMPORT_C virtual void QueryUUID(const TPVMIMEType& aMimeType, RArray<TPVUuid>& aUuids, bool aExactUuidsOnly = false) = 0;
00137 
00148         IMPORT_C virtual void QueryInterface(const TPVUuid& aUuid, TPVInterfacePtr& aInterfacePtr) = 0;
00149 };
00150 
00151 //#define USE_MMF_DATA_PATH 1
00152 
00153 #if defined USE_MMF_DATA_PATH
00154 
00155 #define MPVDataSourceBase MDataSource
00156 #define MPVDataSinkBase MDataSink
00157 
00158 #else /* USE_MMF_DATA_PATH */
00159 
00160 // forward declaration
00161 class MPVDataSinkBase;
00162 
00168 class MPVDataSourceBase
00169 {
00170     public:
00171         MPVDataSourceBase(TUid aType): iDataSourceType(aType) {}
00172         virtual ~MPVDataSourceBase() {}
00173 
00194         virtual void FillBufferL(CMMFBuffer* aBuffer, MPVDataSinkBase* aConsumer, TMediaId /*aMediaId*/) = 0;
00195 
00207         virtual void BufferEmptiedL(CMMFBuffer* aBuffer) = 0;
00208 
00216         virtual TBool CanCreateSourceBuffer() = 0;
00217 
00236         virtual CMMFBuffer* CreateSourceBufferL(TMediaId /*aMediaId*/, TBool &/*aReference*/)
00237         {
00238             return NULL;
00239         }
00240 
00241 
00264         virtual CMMFBuffer* CreateSourceBufferL(TMediaId /*aMediaId*/, CMMFBuffer& /*aSinkBuffer*/, TBool &/*aReference*/)
00265         {
00266             return NULL;
00267         }
00268 
00269 
00290         virtual TInt SourceThreadLogon(MAsyncEventHandler& /*aEventHandler*/)
00291         {
00292             return KErrNone;
00293         }
00294 
00305         virtual void SourceThreadLogoff() {};
00306 
00313         virtual TInt SourcePrimeL()
00314         {
00315             return 0;
00316         }
00317 
00324         virtual TInt SourcePlayL()
00325         {
00326             return 0;
00327         };
00328 
00335         virtual TInt SourcePauseL()
00336         {
00337             return 0;
00338         };
00339 
00346         virtual TInt SourceStopL()
00347         {
00348             return 0;
00349         };
00350     private:
00351         TUid iDataSourceType;
00352 };
00353 
00354 
00360 class MPVDataSinkBase
00361 {
00362     public:
00363         MPVDataSinkBase(TUid aType): iDataSinkType(aType) {}
00364         virtual ~MPVDataSinkBase() {}
00365 
00386         virtual void EmptyBufferL(CMMFBuffer* aBuffer, MPVDataSourceBase* aSupplier, TMediaId /*aMediaId*/) = 0;
00387 
00399         virtual void BufferFilledL(CMMFBuffer* aBuffer) = 0;
00400 
00408         virtual TBool CanCreateSinkBuffer() = 0;
00409 
00428         virtual CMMFBuffer* CreateSinkBufferL(TMediaId /*aMediaId*/, TBool &/*aReference*/)
00429         {
00430             return NULL;
00431         }
00432 
00453         virtual TInt SinkThreadLogon(MAsyncEventHandler& /*aEventHandler*/)
00454         {
00455             return KErrNone;
00456         };
00457 
00468         virtual void SinkThreadLogoff() {};
00469 
00476         virtual TInt SinkPrimeL()
00477         {
00478             return 0;
00479         };
00480 
00487         virtual TInt SinkPlayL()
00488         {
00489             return 0;
00490         };
00491 
00498         virtual TInt SinkPauseL()
00499         {
00500             return 0;
00501         };
00502 
00509         virtual TInt SinkStopL()
00510         {
00511             return 0;
00512         };
00513     private:
00514         TUid iDataSinkType;
00515 };
00516 
00517 #endif
00518 
00519 
00520 
00527 class MPVDataSource : public MPVPluginBase, public MPVDataSourceBase
00528 {
00529     public:
00530         MPVDataSource(TUid aSourceType) : MPVDataSourceBase(aSourceType) {}
00531         virtual ~MPVDataSource() {}
00532 };
00533 
00534 
00541 class MPVDataSink : public MPVPluginBase, public MPVDataSinkBase
00542 {
00543     public:
00544         MPVDataSink(TUid aSinkType) : MPVDataSinkBase(aSinkType) {}
00545         virtual ~MPVDataSink() {}
00546 };
00547 
00548 
00553 class MPVDataSourceAndSink :
00554             public MPVPluginBase,
00555             public MPVDataSourceBase,
00556             public MPVDataSinkBase
00557 {
00558     public:
00559         MPVDataSourceAndSink(TUid aSourceType, TUid aSinkType) :
00560                 MPVDataSourceBase(aSourceType),
00561                 MPVDataSinkBase(aSinkType)
00562         {}
00563         virtual ~MPVDataSourceAndSink() {}
00564 };
00565 
00566 
00581 class MPVAudioInput
00582 {
00583     public:
00584         //To set data format using MIME string.
00585         IMPORT_C virtual void SetFormatL(const TDesC8& aFormat, const TDesC8& aFmtSpecific, TInt &aMaxRequestSize) = 0;
00586 
00587         //To set sample rate and number of channels using MIME string.
00588         IMPORT_C virtual void SetConfigL(const TDesC8& aSampleRate
00589                                          , const TDesC8& aChannels) = 0;
00590 
00591         //To cancel current command.
00592         IMPORT_C virtual void CancelCommand() = 0;
00593 
00594         //To reset hardware.
00595         IMPORT_C virtual TInt Reset() = 0;
00596 };
00597 
00598 
00599 //Additional methods for DevSound audio source.
00600 class MPVDevSoundAudioInput
00601 {
00602     public:
00603         IMPORT_C virtual void SetPrioritySettings(const TMMFPrioritySettings &aSettings) = 0;
00604         IMPORT_C virtual void SetInputFormatL(const TDesC8& aFormat, MPVDataSourceBase *) = 0;
00605         IMPORT_C virtual TPVAudioOutputSwitch OutputSwitch() = 0;
00606         IMPORT_C virtual TBool FillAmrBuffersToEnd() = 0;
00607 };
00608 
00609 
00616 class MPVAudioOutput
00617 {
00618     public:
00619         //To set data format using MIME string.
00620         IMPORT_C virtual void SetFormatL(const TDesC8& aFormat) = 0;
00621         //To set sample rate and number of channels using MIME string.
00622         IMPORT_C virtual void SetConfigL(const TDesC8& aSampleRate
00623                                          , const TDesC8& aChannels) = 0;
00624         //To cancel current command.
00625         IMPORT_C virtual void CancelCommand() = 0;
00626         //To reset hardware.
00627         IMPORT_C virtual TInt Reset() = 0;
00628 };
00629 
00630 
00631 //Additional methods for DevSound audio sink.
00632 class MPVDevSoundAudioOutput
00633 {
00634     public:
00635         IMPORT_C virtual void SetPrioritySettings(const TMMFPrioritySettings &aSettings) = 0;
00636         IMPORT_C virtual void ConcealErrorForNextBuffer() = 0;
00637         IMPORT_C virtual void SetOutputFormatL(const TDesC8& aFormat, const TDesC8& aFmtSpecific, MPVDataSinkBase* aConsumer, TInt &aMaxRequestSize) = 0;
00638         IMPORT_C virtual TPVAudioOutputSwitch OutputSwitch() = 0;
00639         IMPORT_C virtual TBool FillAmrBuffersToEnd() = 0;
00640 };
00641 
00642 
00649 class MPVVideoInput
00650 {
00651     public:
00652 
00658         IMPORT_C virtual void SetFormatL(const TDesC8& aFormat) = 0;
00659 
00666         IMPORT_C virtual void SetFrameRateL(TReal32 aFrameRate) = 0;
00667 
00673         IMPORT_C virtual void SetVideoFrameSizeL(const TSize& aSize) = 0;
00674 
00680         IMPORT_C virtual void GetVideoFrameSizeL(TSize& aSize) const = 0;
00681 };
00682 
00683 
00690 class MPVVideoOutput
00691 {
00692     public:
00698         IMPORT_C virtual void SetFormatL(const TDesC8& aFormat) = 0;
00699 
00705         IMPORT_C virtual void SetVideoFrameSizeL(const TSize& aSize) = 0;
00706 
00712         IMPORT_C virtual void GetVideoFrameSizeL(TSize& aSize) const = 0;
00713 };
00714 
00715 
00716 typedef TAny* RPvCommServer;
00717 
00725 typedef MPVPluginBase MPVCommServerBase;
00726 
00727 class MPVYuvFrameBuffer
00728 {
00729     public:
00730         virtual ~MPVYuvFrameBuffer() {}
00731         virtual TSize GetFrameSize()const = 0;
00732 };
00733 
00734 
00735 #define PV_YUV_BUFFER_DEF_WIDTH  176
00736 #define PV_YUV_BUFFER_DEF_HEIGHT 144
00737 class CPVMMFPointerBuffer : public CMMFDataBuffer, public MPVYuvFrameBuffer
00738 {
00739     public:
00740         static CPVMMFPointerBuffer* NewL()
00741         {
00742             CPVMMFPointerBuffer* buf = new(ELeave) CPVMMFPointerBuffer();
00743             return buf;
00744         }
00745         ~CPVMMFPointerBuffer()
00746         {
00747         }
00748         virtual TDes8& Data()
00749         {
00750             return iPtr;
00751         }
00752         virtual const TDesC8& Data() const
00753         {
00754             return iPtr;
00755         }
00756         virtual void SetRequestSizeL(TInt aSize)
00757         {
00758             (void)(aSize);
00759         }
00760         virtual TUint BufferSize() const
00761         {
00762             return iPtr.Size();
00763         }
00764         void SetData(TUint8* aData, TInt aLength)
00765         {
00766             iPtr.Set(aData, aLength, aLength);
00767         }
00768 
00769         void SetFrameSize(const TSize& size)
00770         {
00771             iFrameSize = size;
00772         }
00773 
00774         /* MPVYuvFrameBuffer virtuals */
00775         virtual TSize GetFrameSize()const
00776         {
00777             return iFrameSize;
00778         }
00779     private:
00780         CPVMMFPointerBuffer() : CMMFDataBuffer(KPVUidYUVFrameBuffer),
00781                 iPtr(0, 0, 0),
00782                 iFrameSize(TSize(PV_YUV_BUFFER_DEF_WIDTH, PV_YUV_BUFFER_DEF_HEIGHT)) {};
00783 
00784     private:
00785         TPtr8 iPtr;
00786         TSize iFrameSize;
00787 };
00788 #endif //
00789 
00790 

PV Author Engine
Posting Version: OPENCORE_20090310