diff options
Diffstat (limited to 'media_resource_manager/include/media_resource_manager/OMX_adaptor.h')
-rw-r--r-- | media_resource_manager/include/media_resource_manager/OMX_adaptor.h | 117 |
1 files changed, 117 insertions, 0 deletions
diff --git a/media_resource_manager/include/media_resource_manager/OMX_adaptor.h b/media_resource_manager/include/media_resource_manager/OMX_adaptor.h new file mode 100644 index 0000000..145233d --- /dev/null +++ b/media_resource_manager/include/media_resource_manager/OMX_adaptor.h @@ -0,0 +1,117 @@ +/* +* Copyright (c) 2015 Intel Corporation. All rights reserved. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + + +#ifndef OMX_WRAPPER_H_ +#define OMX_WRAPPER_H_ + +#include <unistd.h> +#include <OMX_Core.h> +#include <OMX_Component.h> +#include <utils/threads.h> +#include <utils/KeyedVector.h> +#include <utils/String8.h> +#include "MediaResourceArbitrator.h" + +using namespace android; + +typedef KeyedVector <OMX_HANDLETYPE, String8> ComponentNameMap; +typedef KeyedVector <OMX_HANDLETYPE, uint> ComponentFramerateMap; + +typedef struct _AdaptorCodecInfo { + CodecType codecType; + bool isEncoder; + bool isSecured; + ResolutionType resolution; + uint frameRate; +} AdaptorCodecInfo; + +typedef KeyedVector <OMX_HANDLETYPE, AdaptorCodecInfo> ComponentInfoMap; + +class MRM_OMX_Adaptor { +public: + // Returns the singleton instance + static MRM_OMX_Adaptor* getInstance(); + + ~MRM_OMX_Adaptor() { + if (sInstance) { + delete sInstance; + sInstance = NULL; + } + }; + + // create and configure the MRM arbitrator + OMX_ERRORTYPE MRM_OMX_Init(void); + + + // check with MRM arbitrator if codec resource + // is under full load status. + // this should be called before OMX_GetHandle + // return OMX_ErrorInsufficientResources if true. + OMX_ERRORTYPE MRM_OMX_CheckIfFullLoad(OMX_STRING cComponentName); + + + // Set component name and component handle + // keeps this mapping but not adds resource yet. + // this intends to be called after OMX_GetHandle + void MRM_OMX_SetComponent( + OMX_HANDLETYPE pComponentHandle, + OMX_STRING cComponentName); + + + // handle the index 'OMX_IndexParamPortDefinition' + // when codec is configured, with resolution and + // frame rate. this actually adds resource + // to the MRM arbitrator. + // return OMX_ErrorInsufficientResources if failed. + OMX_ERRORTYPE MRM_OMX_SetParameter( + OMX_HANDLETYPE hComponent, + OMX_INDEXTYPE nIndex, + OMX_PTR pComponentParameterStructure); + + + // check grahpic buffer resource + // return OMX_ErrorInsufficientResources if under full load status. + OMX_ERRORTYPE MRM_OMX_UseBuffer( + OMX_HANDLETYPE hComponent, + OMX_BUFFERHEADERTYPE **ppBufferHdr, + OMX_U32 nPortIndex, + OMX_PTR pAppPrivate, + OMX_U32 nSizeBytes, + OMX_U8 *pBuffer); + + + // Remove the component + OMX_ERRORTYPE MRM_OMX_RemoveComponent(OMX_HANDLETYPE pComponentHandle); + +private: + MRM_OMX_Adaptor() { mArbitrator = new MediaResourceArbitrator(); } + MRM_OMX_Adaptor& operator=(const MRM_OMX_Adaptor&); // Don't call me + MRM_OMX_Adaptor(const MRM_OMX_Adaptor&); // Don't call me + + + void ParseCodecInfoFromComponentName(const char* componentName, + AdaptorCodecInfo* codecInfo); + + MediaResourceArbitrator* mArbitrator; + static Mutex sLock; + static MRM_OMX_Adaptor* sInstance; + + ComponentNameMap mComponentNameMap; + ComponentFramerateMap mComponentFramerateMap; + ComponentInfoMap mComponentInfoMap; +}; +#endif /* OMX_WRAPPER_H_ */ |