1bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber/*
2bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber * Copyright (C) 2011 The Android Open Source Project
3bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber *
4bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber * Licensed under the Apache License, Version 2.0 (the "License");
5bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber * you may not use this file except in compliance with the License.
6bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber * You may obtain a copy of the License at
7bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber *
8bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber *      http://www.apache.org/licenses/LICENSE-2.0
9bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber *
10bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber * Unless required by applicable law or agreed to in writing, software
11bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber * distributed under the License is distributed on an "AS IS" BASIS,
12bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber * See the License for the specific language governing permissions and
14bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber * limitations under the License.
15bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber */
16bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
17bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber#ifndef SOFT_MPEG4_H_
18bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
19bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber#define SOFT_MPEG4_H_
20bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
217f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar#include "SoftVideoDecoderOMXComponent.h"
22bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
23bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huberstruct tagvideoDecControls;
24bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
25bbba88cb1bdc34705d1477208990a06904c022e7Andreas Hubernamespace android {
26bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
277f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnarstruct SoftMPEG4 : public SoftVideoDecoderOMXComponent {
28bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    SoftMPEG4(const char *name,
297f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar            const char *componentRole,
307f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar            OMX_VIDEO_CODINGTYPE codingType,
317f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar            const CodecProfileLevel *profileLevels,
327f616d3cc5366a4b8af20d3d0c768e3de1df0666Lajos Molnar            size_t numProfileLevels,
33bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            const OMX_CALLBACKTYPE *callbacks,
34bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_PTR appData,
35bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber            OMX_COMPONENTTYPE **component);
36bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
37bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huberprotected:
38bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    virtual ~SoftMPEG4();
39bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
40bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    virtual void onQueueFilled(OMX_U32 portIndex);
41bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    virtual void onPortFlushCompleted(OMX_U32 portIndex);
42d94e716af0e49d775f0c0c4f36dd2c136ba5f2b2Andreas Huber    virtual void onReset();
43bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
44bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huberprivate:
45bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    enum {
46bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber        kNumInputBuffers  = 4,
47bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber        kNumOutputBuffers = 2,
48bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    };
49bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
50bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    enum {
51bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber        MODE_MPEG4,
52bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber        MODE_H263,
53bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    } mMode;
54bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
55bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    tagvideoDecControls *mHandle;
56bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
57bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    size_t mInputBufferCount;
58bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
59bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    bool mSignalledError;
60bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    bool mInitialized;
61bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    bool mFramesConfigured;
62bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
63bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    int32_t mNumSamplesOutput;
64269a355679fce6a71523faeefc2ff575abbd1a8eLajos Molnar    int32_t mPvTime;
65269a355679fce6a71523faeefc2ff575abbd1a8eLajos Molnar    KeyedVector<int32_t, OMX_TICKS> mPvToOmxTimeMap;
66bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
67bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    status_t initDecoder();
68bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
69a0940a569f2bc24b00dc10ce0fa7658b1dc3a3a5Lajos Molnar    virtual void updatePortDefinitions(bool updateCrop = true, bool updateInputSize = false);
70a694dd0ce2caaf921f7bc894df87a5d52594b4ebRonghua Wu    bool handlePortSettingsChange();
71bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
72bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber    DISALLOW_EVIL_CONSTRUCTORS(SoftMPEG4);
73bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber};
74bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
75bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber}  // namespace android
76bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
77bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber#endif  // SOFT_MPEG4_H_
78bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
79bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber
80