CodecBase.h revision 1dcdfead2971c1fa7c02f24ba86f706890c9f99e
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
2405ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar#include <media/stagefright/foundation/AHandler.h>
2505ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar
2605ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnarnamespace android {
2705ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar
2805ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnarstruct ABuffer;
2905ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar
3005ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnarstruct CodecBase : public AHandler {
3105ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar    enum {
3205ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar        kWhatFillThisBuffer      = 'fill',
3305ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar        kWhatDrainThisBuffer     = 'drai',
3405ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar        kWhatEOS                 = 'eos ',
3505ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar        kWhatShutdownCompleted   = 'scom',
3605ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar        kWhatFlushCompleted      = 'fcom',
3705ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar        kWhatOutputFormatChanged = 'outC',
3805ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar        kWhatError               = 'erro',
3905ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar        kWhatComponentAllocated  = 'cAll',
4005ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar        kWhatComponentConfigured = 'cCon',
4105ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar        kWhatInputSurfaceCreated = 'isfc',
4205ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar        kWhatSignaledInputEOS    = 'seos',
4305ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar        kWhatBuffersAllocated    = 'allc',
4405ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar    };
4505ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar
4605ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar    virtual void setNotificationMessage(const sp<AMessage> &msg) = 0;
4705ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar
4805ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar    virtual void initiateAllocateComponent(const sp<AMessage> &msg) = 0;
4905ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar    virtual void initiateConfigureComponent(const sp<AMessage> &msg) = 0;
5005ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar    virtual void initiateCreateInputSurface() = 0;
5105ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar    virtual void initiateStart() = 0;
5205ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar    virtual void initiateShutdown(bool keepComponentAllocated = false) = 0;
5305ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar
5405ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar    // require an explicit message handler
5505ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar    virtual void onMessageReceived(const sp<AMessage> &msg) = 0;
5605ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar
571dcdfead2971c1fa7c02f24ba86f706890c9f99eLajos Molnar    virtual status_t setSurface(const sp<Surface> &surface) { return INVALID_OPERATION; }
581dcdfead2971c1fa7c02f24ba86f706890c9f99eLajos Molnar
5905ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar    virtual void signalFlush() = 0;
6005ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar    virtual void signalResume() = 0;
6105ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar
6205ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar    virtual void signalRequestIDRFrame() = 0;
6305ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar    virtual void signalSetParameters(const sp<AMessage> &msg) = 0;
6405ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar    virtual void signalEndOfInputStream() = 0;
6505ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar
6605ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar    struct PortDescription : public RefBase {
6705ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar        virtual size_t countBuffers() = 0;
6805ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar        virtual IOMX::buffer_id bufferIDAt(size_t index) const = 0;
6905ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar        virtual sp<ABuffer> bufferAt(size_t index) const = 0;
7005ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar
7105ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar    protected:
7205ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar        PortDescription();
7305ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar        virtual ~PortDescription();
7405ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar
7505ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar    private:
7605ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar        DISALLOW_EVIL_CONSTRUCTORS(PortDescription);
7705ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar    };
7805ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar
7905ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnarprotected:
8005ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar    CodecBase();
8105ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar    virtual ~CodecBase();
8205ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar
8305ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnarprivate:
8405ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar    DISALLOW_EVIL_CONSTRUCTORS(CodecBase);
8505ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar};
8605ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar
8705ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar}  // namespace android
8805ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar
8905ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar#endif  // CODEC_BASE_H_
9005ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar
91