SoftVideoDecoderOMXComponent.h revision a694dd0ce2caaf921f7bc894df87a5d52594b4eb
14b6829f0d28990dd645e16386eb226d0f10c8731shiqian/* 24b6829f0d28990dd645e16386eb226d0f10c8731shiqian * Copyright (C) 2013 The Android Open Source Project 34b6829f0d28990dd645e16386eb226d0f10c8731shiqian * 44b6829f0d28990dd645e16386eb226d0f10c8731shiqian * Licensed under the Apache License, Version 2.0 (the "License"); 54b6829f0d28990dd645e16386eb226d0f10c8731shiqian * you may not use this file except in compliance with the License. 64b6829f0d28990dd645e16386eb226d0f10c8731shiqian * You may obtain a copy of the License at 74b6829f0d28990dd645e16386eb226d0f10c8731shiqian * 84b6829f0d28990dd645e16386eb226d0f10c8731shiqian * http://www.apache.org/licenses/LICENSE-2.0 94b6829f0d28990dd645e16386eb226d0f10c8731shiqian * 104b6829f0d28990dd645e16386eb226d0f10c8731shiqian * Unless required by applicable law or agreed to in writing, software 114b6829f0d28990dd645e16386eb226d0f10c8731shiqian * distributed under the License is distributed on an "AS IS" BASIS, 124b6829f0d28990dd645e16386eb226d0f10c8731shiqian * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 134b6829f0d28990dd645e16386eb226d0f10c8731shiqian * See the License for the specific language governing permissions and 144b6829f0d28990dd645e16386eb226d0f10c8731shiqian * limitations under the License. 154b6829f0d28990dd645e16386eb226d0f10c8731shiqian */ 164b6829f0d28990dd645e16386eb226d0f10c8731shiqian 174b6829f0d28990dd645e16386eb226d0f10c8731shiqian#ifndef SOFT_VIDEO_DECODER_OMX_COMPONENT_H_ 184b6829f0d28990dd645e16386eb226d0f10c8731shiqian 194b6829f0d28990dd645e16386eb226d0f10c8731shiqian#define SOFT_VIDEO_DECODER_OMX_COMPONENT_H_ 204b6829f0d28990dd645e16386eb226d0f10c8731shiqian 214b6829f0d28990dd645e16386eb226d0f10c8731shiqian#include "SimpleSoftOMXComponent.h" 224b6829f0d28990dd645e16386eb226d0f10c8731shiqian 234b6829f0d28990dd645e16386eb226d0f10c8731shiqian#include <media/stagefright/foundation/AHandlerReflector.h> 244b6829f0d28990dd645e16386eb226d0f10c8731shiqian#include <media/IOMX.h> 254b6829f0d28990dd645e16386eb226d0f10c8731shiqian 264b6829f0d28990dd645e16386eb226d0f10c8731shiqian#include <utils/RefBase.h> 274b6829f0d28990dd645e16386eb226d0f10c8731shiqian#include <utils/threads.h> 284b6829f0d28990dd645e16386eb226d0f10c8731shiqian#include <utils/Vector.h> 294b6829f0d28990dd645e16386eb226d0f10c8731shiqian 304b6829f0d28990dd645e16386eb226d0f10c8731shiqiannamespace android { 314b6829f0d28990dd645e16386eb226d0f10c8731shiqian 322733a36231e9e59dfe0648562ac021ccea0e27d8zhanyong.wanstruct SoftVideoDecoderOMXComponent : public SimpleSoftOMXComponent { 332620c79810d4741922e9fa89050c0af564994f24zhanyong.wan SoftVideoDecoderOMXComponent( 342620c79810d4741922e9fa89050c0af564994f24zhanyong.wan const char *name, 354b6829f0d28990dd645e16386eb226d0f10c8731shiqian const char *componentRole, 36c3b4de35a18a1f011e8009d4d794f787f7e4e0c1shiqian OMX_VIDEO_CODINGTYPE codingType, 37c3b4de35a18a1f011e8009d4d794f787f7e4e0c1shiqian const CodecProfileLevel *profileLevels, 38fff033497b70e96a5dcadb6ba9570c12b5921d74zhanyong.wan size_t numProfileLevels, 39733a54a398766289b74cf3daebe083d7115cf388zhanyong.wan int32_t width, 404cd62602913a032a7aec091d4c8055ff9af95e37zhanyong.wan int32_t height, 41733a54a398766289b74cf3daebe083d7115cf388zhanyong.wan const OMX_CALLBACKTYPE *callbacks, 42733a54a398766289b74cf3daebe083d7115cf388zhanyong.wan OMX_PTR appData, 43a92a6f792395e1ad462472d474ab0c76949813favladlosev OMX_COMPONENTTYPE **component); 44a92a6f792395e1ad462472d474ab0c76949813favladlosev 45733a54a398766289b74cf3daebe083d7115cf388zhanyong.wanprotected: 46dd4a17bc20377d250ed116b1083d851adbe45f25shiqian virtual void onPortEnableCompleted(OMX_U32 portIndex, bool enabled); 47733a54a398766289b74cf3daebe083d7115cf388zhanyong.wan virtual void onReset(); 48733a54a398766289b74cf3daebe083d7115cf388zhanyong.wan 49fff033497b70e96a5dcadb6ba9570c12b5921d74zhanyong.wan virtual OMX_ERRORTYPE internalGetParameter( 50941b5ee8ebaad627df59eaa03509021b3cfa3bafshiqian OMX_INDEXTYPE index, OMX_PTR params); 514cd62602913a032a7aec091d4c8055ff9af95e37zhanyong.wan 52733a54a398766289b74cf3daebe083d7115cf388zhanyong.wan virtual OMX_ERRORTYPE internalSetParameter( 53941b5ee8ebaad627df59eaa03509021b3cfa3bafshiqian OMX_INDEXTYPE index, const OMX_PTR params); 54733a54a398766289b74cf3daebe083d7115cf388zhanyong.wan 55941b5ee8ebaad627df59eaa03509021b3cfa3bafshiqian virtual OMX_ERRORTYPE getConfig( 56733a54a398766289b74cf3daebe083d7115cf388zhanyong.wan OMX_INDEXTYPE index, OMX_PTR params); 57941b5ee8ebaad627df59eaa03509021b3cfa3bafshiqian 58733a54a398766289b74cf3daebe083d7115cf388zhanyong.wan virtual OMX_ERRORTYPE getExtensionIndex( 59941b5ee8ebaad627df59eaa03509021b3cfa3bafshiqian const char *name, OMX_INDEXTYPE *index); 604b6829f0d28990dd645e16386eb226d0f10c8731shiqian 612620c79810d4741922e9fa89050c0af564994f24zhanyong.wan void initPorts(OMX_U32 numInputBuffers, 624b6829f0d28990dd645e16386eb226d0f10c8731shiqian OMX_U32 inputBufferSize, 634b6829f0d28990dd645e16386eb226d0f10c8731shiqian OMX_U32 numOutputBuffers, 644b6829f0d28990dd645e16386eb226d0f10c8731shiqian const char *mimeType); 654b6829f0d28990dd645e16386eb226d0f10c8731shiqian 664cd62602913a032a7aec091d4c8055ff9af95e37zhanyong.wan virtual void updatePortDefinitions(bool updateCrop = true); 678236131e25705a809d496672a3819e1741166c4bzhanyong.wan 688236131e25705a809d496672a3819e1741166c4bzhanyong.wan void handlePortSettingsChange( 698236131e25705a809d496672a3819e1741166c4bzhanyong.wan bool *portWillReset, uint32_t width, uint32_t height, 708236131e25705a809d496672a3819e1741166c4bzhanyong.wan bool cropChanged = false, bool fakeStride = false); 714b6829f0d28990dd645e16386eb226d0f10c8731shiqian 728236131e25705a809d496672a3819e1741166c4bzhanyong.wan void copyYV12FrameToOutputBuffer( 738236131e25705a809d496672a3819e1741166c4bzhanyong.wan uint8_t *dst, const uint8_t *srcY, const uint8_t *srcU, const uint8_t *srcV, 74733a54a398766289b74cf3daebe083d7115cf388zhanyong.wan size_t srcYStride, size_t srcUStride, size_t srcVStride); 75dd4a17bc20377d250ed116b1083d851adbe45f25shiqian 76dd4a17bc20377d250ed116b1083d851adbe45f25shiqian enum { 77dd4a17bc20377d250ed116b1083d851adbe45f25shiqian kInputPortIndex = 0, 78dd4a17bc20377d250ed116b1083d851adbe45f25shiqian kOutputPortIndex = 1, 79dd4a17bc20377d250ed116b1083d851adbe45f25shiqian kMaxPortIndex = 1, 80dd4a17bc20377d250ed116b1083d851adbe45f25shiqian }; 81733a54a398766289b74cf3daebe083d7115cf388zhanyong.wan 824b6829f0d28990dd645e16386eb226d0f10c8731shiqian bool mIsAdaptive; 83733a54a398766289b74cf3daebe083d7115cf388zhanyong.wan uint32_t mAdaptiveMaxWidth, mAdaptiveMaxHeight; 844b6829f0d28990dd645e16386eb226d0f10c8731shiqian uint32_t mWidth, mHeight; 854b6829f0d28990dd645e16386eb226d0f10c8731shiqian uint32_t mCropLeft, mCropTop, mCropWidth, mCropHeight; 864b6829f0d28990dd645e16386eb226d0f10c8731shiqian 874b6829f0d28990dd645e16386eb226d0f10c8731shiqian enum { 884b6829f0d28990dd645e16386eb226d0f10c8731shiqian NONE, 898236131e25705a809d496672a3819e1741166c4bzhanyong.wan AWAITING_DISABLED, 908236131e25705a809d496672a3819e1741166c4bzhanyong.wan AWAITING_ENABLED 918236131e25705a809d496672a3819e1741166c4bzhanyong.wan } mOutputPortSettingsChange; 928236131e25705a809d496672a3819e1741166c4bzhanyong.wan 938236131e25705a809d496672a3819e1741166c4bzhanyong.wanprivate: 948236131e25705a809d496672a3819e1741166c4bzhanyong.wan const char *mComponentRole; 958236131e25705a809d496672a3819e1741166c4bzhanyong.wan OMX_VIDEO_CODINGTYPE mCodingType; 968236131e25705a809d496672a3819e1741166c4bzhanyong.wan const CodecProfileLevel *mProfileLevels; 978236131e25705a809d496672a3819e1741166c4bzhanyong.wan size_t mNumProfileLevels; 98c3b4de35a18a1f011e8009d4d794f787f7e4e0c1shiqian 99c3b4de35a18a1f011e8009d4d794f787f7e4e0c1shiqian DISALLOW_EVIL_CONSTRUCTORS(SoftVideoDecoderOMXComponent); 100f0d7f455d0ba1b1da1891c3ee54961a162e8fbc4billydonahue@google.com}; 101fff033497b70e96a5dcadb6ba9570c12b5921d74zhanyong.wan 102fff033497b70e96a5dcadb6ba9570c12b5921d74zhanyong.wan} // namespace android 103c3b4de35a18a1f011e8009d4d794f787f7e4e0c1shiqian 1044cd62602913a032a7aec091d4c8055ff9af95e37zhanyong.wan#endif // SOFT_VIDEO_DECODER_OMX_COMPONENT_H_ 10598efcc49448a78cae3af3ed793a3ad6927620fc4zhanyong.wan