CodecBase.h revision 5b05e49e6550cb2abf1a88272d6cd460b8957176
105ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar/*
205ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar * Copyright (C) 2014 The Android Open Source Project
305ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar *
405ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar * Licensed under the Apache License, Version 2.0 (the "License");
505ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar * you may not use this file except in compliance with the License.
605ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar * You may obtain a copy of the License at
705ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar *
805ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar *      http://www.apache.org/licenses/LICENSE-2.0
905ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar *
1005ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar * Unless required by applicable law or agreed to in writing, software
1105ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar * distributed under the License is distributed on an "AS IS" BASIS,
1205ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1305ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar * See the License for the specific language governing permissions and
1405ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar * limitations under the License.
1505ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar */
1605ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar
1705ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar#ifndef CODEC_BASE_H_
1805ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar
1905ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar#define CODEC_BASE_H_
2005ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar
2105ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar#include <stdint.h>
2205ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar#include <media/IOMX.h>
2305ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar
245b05e49e6550cb2abf1a88272d6cd460b8957176Lajos Molnar#include <media/MediaCodecInfo.h>
2505ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar#include <media/stagefright/foundation/AHandler.h>
2605ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar
2705ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnarnamespace android {
2805ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar
2905ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnarstruct ABuffer;
30d291c222357303b9611cab89d0c3b047584ef377Chong Zhangstruct PersistentSurface;
3105ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar
3205ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnarstruct CodecBase : public AHandler {
3305ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar    enum {
3405ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar        kWhatFillThisBuffer      = 'fill',
3505ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar        kWhatDrainThisBuffer     = 'drai',
3605ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar        kWhatEOS                 = 'eos ',
3705ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar        kWhatShutdownCompleted   = 'scom',
3805ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar        kWhatFlushCompleted      = 'fcom',
3905ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar        kWhatOutputFormatChanged = 'outC',
4005ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar        kWhatError               = 'erro',
4105ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar        kWhatComponentAllocated  = 'cAll',
4205ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar        kWhatComponentConfigured = 'cCon',
4305ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar        kWhatInputSurfaceCreated = 'isfc',
44d291c222357303b9611cab89d0c3b047584ef377Chong Zhang        kWhatInputSurfaceAccepted = 'isfa',
4505ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar        kWhatSignaledInputEOS    = 'seos',
4605ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar        kWhatBuffersAllocated    = 'allc',
4790fcf68fd29f3cb695bd53a830ad984cb7d430c0Lajos Molnar        kWhatOutputFramesRendered = 'outR',
4805ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar    };
4905ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar
5005ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar    virtual void setNotificationMessage(const sp<AMessage> &msg) = 0;
5105ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar
5205ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar    virtual void initiateAllocateComponent(const sp<AMessage> &msg) = 0;
5305ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar    virtual void initiateConfigureComponent(const sp<AMessage> &msg) = 0;
5405ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar    virtual void initiateCreateInputSurface() = 0;
558f469e18c307cb9dc0d16ed9225972aa8be4516fChong Zhang    virtual void initiateSetInputSurface(
56d291c222357303b9611cab89d0c3b047584ef377Chong Zhang            const sp<PersistentSurface> &surface) = 0;
5705ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar    virtual void initiateStart() = 0;
5805ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar    virtual void initiateShutdown(bool keepComponentAllocated = false) = 0;
5905ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar
6005ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar    // require an explicit message handler
6105ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar    virtual void onMessageReceived(const sp<AMessage> &msg) = 0;
6205ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar
635b05e49e6550cb2abf1a88272d6cd460b8957176Lajos Molnar    virtual status_t queryCapabilities(
645b05e49e6550cb2abf1a88272d6cd460b8957176Lajos Molnar            const AString &name, const AString &mime, bool isEncoder,
655b05e49e6550cb2abf1a88272d6cd460b8957176Lajos Molnar            sp<MediaCodecInfo::Capabilities> *caps /* nonnull */) { return INVALID_OPERATION; }
665b05e49e6550cb2abf1a88272d6cd460b8957176Lajos Molnar
671dcdfead2971c1fa7c02f24ba86f706890c9f99eLajos Molnar    virtual status_t setSurface(const sp<Surface> &surface) { return INVALID_OPERATION; }
681dcdfead2971c1fa7c02f24ba86f706890c9f99eLajos Molnar
6905ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar    virtual void signalFlush() = 0;
7005ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar    virtual void signalResume() = 0;
7105ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar
7205ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar    virtual void signalRequestIDRFrame() = 0;
7305ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar    virtual void signalSetParameters(const sp<AMessage> &msg) = 0;
7405ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar    virtual void signalEndOfInputStream() = 0;
7505ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar
7605ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar    struct PortDescription : public RefBase {
7705ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar        virtual size_t countBuffers() = 0;
7805ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar        virtual IOMX::buffer_id bufferIDAt(size_t index) const = 0;
7905ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar        virtual sp<ABuffer> bufferAt(size_t index) const = 0;
8086b997dcf1101cdd259460fb4f82204200a9a993Ronghua Wu        virtual sp<RefBase> memRefAt(size_t index) const { return NULL; }
8105ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar
8205ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar    protected:
8305ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar        PortDescription();
8405ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar        virtual ~PortDescription();
8505ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar
8605ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar    private:
8705ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar        DISALLOW_EVIL_CONSTRUCTORS(PortDescription);
8805ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar    };
8905ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar
9005ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnarprotected:
9105ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar    CodecBase();
9205ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar    virtual ~CodecBase();
9305ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar
9405ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnarprivate:
9505ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar    DISALLOW_EVIL_CONSTRUCTORS(CodecBase);
9605ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar};
9705ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar
9805ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar}  // namespace android
9905ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar
10005ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar#endif  // CODEC_BASE_H_
10105ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar
102