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 Molnar#define ARRAY_SIZE(a) (sizeof(a) / sizeof(*(a))) 317f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar 327f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnarnamespace android { 337f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar 347f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnarstruct SoftVideoDecoderOMXComponent : public SimpleSoftOMXComponent { 357f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar SoftVideoDecoderOMXComponent( 367f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar const char *name, 377f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar const char *componentRole, 387f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar OMX_VIDEO_CODINGTYPE codingType, 397f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar const CodecProfileLevel *profileLevels, 407f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar size_t numProfileLevels, 417f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar int32_t width, 427f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar int32_t height, 437f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar const OMX_CALLBACKTYPE *callbacks, 447f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar OMX_PTR appData, 457f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar OMX_COMPONENTTYPE **component); 467f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar 477f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnarprotected: 487f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar virtual void onPortEnableCompleted(OMX_U32 portIndex, bool enabled); 497f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar virtual void onReset(); 507f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar 517f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar virtual OMX_ERRORTYPE internalGetParameter( 527f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar OMX_INDEXTYPE index, OMX_PTR params); 537f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar 547f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar virtual OMX_ERRORTYPE internalSetParameter( 557f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar OMX_INDEXTYPE index, const OMX_PTR params); 567f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar 577f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar virtual OMX_ERRORTYPE getConfig( 587f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar OMX_INDEXTYPE index, OMX_PTR params); 597f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar 607f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar void initPorts(OMX_U32 numInputBuffers, 617f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar OMX_U32 inputBufferSize, 627f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar OMX_U32 numOutputBuffers, 637f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar const char *mimeType); 647f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar 657f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar virtual void updatePortDefinitions(); 667f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar 677f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar enum { 687f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar kInputPortIndex = 0, 697f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar kOutputPortIndex = 1, 707f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar kMaxPortIndex = 1, 717f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar }; 727f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar 737f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar uint32_t mWidth, mHeight; 747f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar uint32_t mCropLeft, mCropTop, mCropWidth, mCropHeight; 757f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar 767f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar enum { 777f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar NONE, 787f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar AWAITING_DISABLED, 797f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar AWAITING_ENABLED 807f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar } mOutputPortSettingsChange; 817f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar 827f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnarprivate: 837f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar const char *mComponentRole; 847f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar OMX_VIDEO_CODINGTYPE mCodingType; 857f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar const CodecProfileLevel *mProfileLevels; 867f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar size_t mNumProfileLevels; 877f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar 887f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar DISALLOW_EVIL_CONSTRUCTORS(SoftVideoDecoderOMXComponent); 897f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar}; 907f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar 917f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar} // namespace android 927f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar 937f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar#endif // SOFT_VIDEO_DECODER_OMX_COMPONENT_H_ 94