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