SoftVideoDecoderOMXComponent.h revision bf220f3e6e799f28d1599c3c5106e9e15631a91d
17f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar/* 27f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar * Copyright (C) 2013 The Android Open Source Project 37f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar * 47f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar * Licensed under the Apache License, Version 2.0 (the "License"); 57f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar * you may not use this file except in compliance with the License. 67f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar * You may obtain a copy of the License at 77f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar * 87f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar * http://www.apache.org/licenses/LICENSE-2.0 97f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar * 107f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar * Unless required by applicable law or agreed to in writing, software 117f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar * distributed under the License is distributed on an "AS IS" BASIS, 127f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 137f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar * See the License for the specific language governing permissions and 147f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar * limitations under the License. 157f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar */ 167f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar 177f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar#ifndef SOFT_VIDEO_DECODER_OMX_COMPONENT_H_ 187f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar 197f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar#define SOFT_VIDEO_DECODER_OMX_COMPONENT_H_ 207f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar 217f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar#include "SimpleSoftOMXComponent.h" 227f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar 237f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar#include <media/stagefright/foundation/AHandlerReflector.h> 247f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar#include <media/IOMX.h> 257f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar 267f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar#include <utils/RefBase.h> 277f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar#include <utils/threads.h> 287f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar#include <utils/Vector.h> 297f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar 307f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnarnamespace android { 317f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar 327f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnarstruct SoftVideoDecoderOMXComponent : public SimpleSoftOMXComponent { 337f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar SoftVideoDecoderOMXComponent( 347f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar const char *name, 357f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar const char *componentRole, 367f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar OMX_VIDEO_CODINGTYPE codingType, 377f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar const CodecProfileLevel *profileLevels, 387f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar size_t numProfileLevels, 397f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar int32_t width, 407f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar int32_t height, 417f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar const OMX_CALLBACKTYPE *callbacks, 427f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar OMX_PTR appData, 437f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar OMX_COMPONENTTYPE **component); 447f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar 457f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnarprotected: 467f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar virtual void onPortEnableCompleted(OMX_U32 portIndex, bool enabled); 477f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar virtual void onReset(); 487f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar 497f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar virtual OMX_ERRORTYPE internalGetParameter( 507f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar OMX_INDEXTYPE index, OMX_PTR params); 517f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar 527f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar virtual OMX_ERRORTYPE internalSetParameter( 537f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar OMX_INDEXTYPE index, const OMX_PTR params); 547f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar 557f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar virtual OMX_ERRORTYPE getConfig( 567f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar OMX_INDEXTYPE index, OMX_PTR params); 577f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar 58031be0f358b07732092a4d1bf02fc99f109a63c4Ronghua Wu virtual OMX_ERRORTYPE getExtensionIndex( 59031be0f358b07732092a4d1bf02fc99f109a63c4Ronghua Wu const char *name, OMX_INDEXTYPE *index); 60031be0f358b07732092a4d1bf02fc99f109a63c4Ronghua Wu 617f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar void initPorts(OMX_U32 numInputBuffers, 627f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar OMX_U32 inputBufferSize, 637f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar OMX_U32 numOutputBuffers, 647f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar const char *mimeType); 657f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar 66bf220f3e6e799f28d1599c3c5106e9e15631a91dRonghua Wu virtual void updatePortDefinitions(bool updateCrop = true); 67bf220f3e6e799f28d1599c3c5106e9e15631a91dRonghua Wu 68bf220f3e6e799f28d1599c3c5106e9e15631a91dRonghua Wu void handlePortSettingsChange( 69bf220f3e6e799f28d1599c3c5106e9e15631a91dRonghua Wu bool *portWillReset, uint32_t width, uint32_t height, bool cropChanged = false); 70bf220f3e6e799f28d1599c3c5106e9e15631a91dRonghua Wu 71bf220f3e6e799f28d1599c3c5106e9e15631a91dRonghua Wu void copyYV12FrameToOutputBuffer( 72bf220f3e6e799f28d1599c3c5106e9e15631a91dRonghua Wu uint8_t *dst, const uint8_t *srcY, const uint8_t *srcU, const uint8_t *srcV, 73bf220f3e6e799f28d1599c3c5106e9e15631a91dRonghua Wu size_t srcYStride, size_t srcUStride, size_t srcVStride); 747f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar 757f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar enum { 767f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar kInputPortIndex = 0, 777f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar kOutputPortIndex = 1, 787f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar kMaxPortIndex = 1, 797f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar }; 807f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar 81031be0f358b07732092a4d1bf02fc99f109a63c4Ronghua Wu bool mIsAdaptive; 82031be0f358b07732092a4d1bf02fc99f109a63c4Ronghua Wu uint32_t mAdaptiveMaxWidth, mAdaptiveMaxHeight; 837f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar uint32_t mWidth, mHeight; 847f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar uint32_t mCropLeft, mCropTop, mCropWidth, mCropHeight; 857f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar 867f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar enum { 877f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar NONE, 887f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar AWAITING_DISABLED, 897f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar AWAITING_ENABLED 907f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar } mOutputPortSettingsChange; 917f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar 927f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnarprivate: 937f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar const char *mComponentRole; 947f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar OMX_VIDEO_CODINGTYPE mCodingType; 957f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar const CodecProfileLevel *mProfileLevels; 967f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar size_t mNumProfileLevels; 977f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar 987f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar DISALLOW_EVIL_CONSTRUCTORS(SoftVideoDecoderOMXComponent); 997f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar}; 1007f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar 1017f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar} // namespace android 1027f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar 1037f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar#endif // SOFT_VIDEO_DECODER_OMX_COMPONENT_H_ 104