PureOmxPlatformLayer.h (4019B)
1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ 2 /* vim:set ts=2 sw=2 sts=2 et cindent: */ 3 /* This Source Code Form is subject to the terms of the Mozilla Public 4 * License, v. 2.0. If a copy of the MPL was not distributed with this 5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 6 7 #if !defined(PureOmxPlatformLayer_h_) 8 # define PureOmxPlatformLayer_h_ 9 10 # include "OmxPlatformLayer.h" 11 12 namespace mozilla { 13 14 class PureOmxPlatformLayer; 15 16 class PureOmxBufferData : public OmxPromiseLayer::BufferData { 17 protected: 18 virtual ~PureOmxBufferData(); 19 20 public: 21 PureOmxBufferData(const PureOmxPlatformLayer& aPlatformLayer, 22 const OMX_PARAM_PORTDEFINITIONTYPE& aPortDef); 23 24 void ReleaseBuffer(); 25 OMX_DIRTYPE GetPortDirection() const { return mPortDef.eDir; }; 26 27 protected: 28 bool ShouldUseEGLImage(); 29 30 const PureOmxPlatformLayer& mPlatformLayer; 31 const OMX_PARAM_PORTDEFINITIONTYPE mPortDef; 32 }; 33 34 class PureOmxPlatformLayer : public OmxPlatformLayer { 35 public: 36 static bool Init(void); 37 38 static bool SupportsMimeType(const nsACString& aMimeType); 39 40 PureOmxPlatformLayer(OmxDataDecoder* aDataDecoder, 41 OmxPromiseLayer* aPromiseLayer, TaskQueue* aTaskQueue, 42 layers::ImageContainer* aImageContainer); 43 44 virtual ~PureOmxPlatformLayer(); 45 46 OMX_ERRORTYPE InitOmxToStateLoaded(const TrackInfo* aInfo) override; 47 48 OMX_ERRORTYPE EmptyThisBuffer(BufferData* aData) override; 49 50 OMX_ERRORTYPE FillThisBuffer(BufferData* aData) override; 51 52 OMX_ERRORTYPE SendCommand(OMX_COMMANDTYPE aCmd, OMX_U32 aParam1, 53 OMX_PTR aCmdData) override; 54 55 nsresult AllocateOmxBuffer(OMX_DIRTYPE aType, 56 BUFFERLIST* aBufferList) override; 57 58 nsresult ReleaseOmxBuffer(OMX_DIRTYPE aType, 59 BUFFERLIST* aBufferList) override; 60 61 OMX_ERRORTYPE GetState(OMX_STATETYPE* aType) override; 62 63 OMX_ERRORTYPE GetParameter(OMX_INDEXTYPE aParamIndex, 64 OMX_PTR aComponentParameterStructure, 65 OMX_U32 aComponentParameterSize) override; 66 67 OMX_ERRORTYPE SetParameter(OMX_INDEXTYPE aParamIndex, 68 OMX_PTR aComponentParameterStructure, 69 OMX_U32 aComponentParameterSize) override; 70 71 nsresult Shutdown() override; 72 73 OMX_HANDLETYPE GetComponent() const { return mComponent; }; 74 75 static OMX_ERRORTYPE EventHandler(OMX_HANDLETYPE hComponent, OMX_PTR pAppData, 76 OMX_EVENTTYPE eEventType, OMX_U32 nData1, 77 OMX_U32 nData2, OMX_PTR pEventData); 78 static OMX_ERRORTYPE EmptyBufferDone(OMX_HANDLETYPE hComponent, 79 OMX_IN OMX_PTR pAppData, 80 OMX_IN OMX_BUFFERHEADERTYPE* pBuffer); 81 static OMX_ERRORTYPE FillBufferDone(OMX_OUT OMX_HANDLETYPE hComponent, 82 OMX_OUT OMX_PTR pAppData, 83 OMX_OUT OMX_BUFFERHEADERTYPE* pBuffer); 84 85 protected: 86 static bool FindStandardComponent(const nsACString& aMimeType, 87 nsACString* aComponentName); 88 89 OMX_ERRORTYPE CreateComponent(const nsACString* aComponentName = nullptr); 90 nsresult FindPortDefinition(OMX_DIRTYPE aType, 91 OMX_PARAM_PORTDEFINITIONTYPE& portDef); 92 93 OMX_ERRORTYPE EventHandler(OMX_EVENTTYPE eEventType, OMX_U32 nData1, 94 OMX_U32 nData2, OMX_PTR pEventData); 95 OMX_ERRORTYPE EmptyBufferDone(OMX_IN OMX_BUFFERHEADERTYPE* pBuffer); 96 OMX_ERRORTYPE FillBufferDone(OMX_OUT OMX_BUFFERHEADERTYPE* pBuffer); 97 98 protected: 99 static OMX_CALLBACKTYPE sCallbacks; 100 101 OMX_HANDLETYPE mComponent; 102 RefPtr<OmxDataDecoder> mDataDecoder; 103 RefPtr<OmxPromiseLayer> mPromiseLayer; 104 RefPtr<TaskQueue> mTaskQueue; 105 RefPtr<layers::ImageContainer> mImageContainer; 106 }; 107 108 } // namespace mozilla 109 110 #endif // PureOmxPlatformLayer_h_