142ef0c715da879a9878b7bf4eb9c90b21e4ab8aeJames Dong/*
242ef0c715da879a9878b7bf4eb9c90b21e4ab8aeJames Dong * Copyright (C) 2010 The Android Open Source Project
342ef0c715da879a9878b7bf4eb9c90b21e4ab8aeJames Dong *
442ef0c715da879a9878b7bf4eb9c90b21e4ab8aeJames Dong * Licensed under the Apache License, Version 2.0 (the "License");
542ef0c715da879a9878b7bf4eb9c90b21e4ab8aeJames Dong * you may not use this file except in compliance with the License.
642ef0c715da879a9878b7bf4eb9c90b21e4ab8aeJames Dong * You may obtain a copy of the License at
742ef0c715da879a9878b7bf4eb9c90b21e4ab8aeJames Dong *
842ef0c715da879a9878b7bf4eb9c90b21e4ab8aeJames Dong *      http://www.apache.org/licenses/LICENSE-2.0
942ef0c715da879a9878b7bf4eb9c90b21e4ab8aeJames Dong *
1042ef0c715da879a9878b7bf4eb9c90b21e4ab8aeJames Dong * Unless required by applicable law or agreed to in writing, software
1142ef0c715da879a9878b7bf4eb9c90b21e4ab8aeJames Dong * distributed under the License is distributed on an "AS IS" BASIS,
1242ef0c715da879a9878b7bf4eb9c90b21e4ab8aeJames Dong * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1342ef0c715da879a9878b7bf4eb9c90b21e4ab8aeJames Dong * See the License for the specific language governing permissions and
1442ef0c715da879a9878b7bf4eb9c90b21e4ab8aeJames Dong * limitations under the License.
1542ef0c715da879a9878b7bf4eb9c90b21e4ab8aeJames Dong */
1642ef0c715da879a9878b7bf4eb9c90b21e4ab8aeJames Dong
1742ef0c715da879a9878b7bf4eb9c90b21e4ab8aeJames Dong#ifndef M4V_H263_ENCODER_H_
1842ef0c715da879a9878b7bf4eb9c90b21e4ab8aeJames Dong
1942ef0c715da879a9878b7bf4eb9c90b21e4ab8aeJames Dong#define M4V_H263_ENCODER_H_
2042ef0c715da879a9878b7bf4eb9c90b21e4ab8aeJames Dong
2142ef0c715da879a9878b7bf4eb9c90b21e4ab8aeJames Dong#include <media/stagefright/MediaBuffer.h>
2242ef0c715da879a9878b7bf4eb9c90b21e4ab8aeJames Dong#include <media/stagefright/MediaSource.h>
2342ef0c715da879a9878b7bf4eb9c90b21e4ab8aeJames Dong
2442ef0c715da879a9878b7bf4eb9c90b21e4ab8aeJames Dongstruct tagvideoEncControls;
2542ef0c715da879a9878b7bf4eb9c90b21e4ab8aeJames Dongstruct tagvideoEncOptions;
2642ef0c715da879a9878b7bf4eb9c90b21e4ab8aeJames Dong
2742ef0c715da879a9878b7bf4eb9c90b21e4ab8aeJames Dongnamespace android {
2842ef0c715da879a9878b7bf4eb9c90b21e4ab8aeJames Dong
2942ef0c715da879a9878b7bf4eb9c90b21e4ab8aeJames Dongstruct MediaBuffer;
3042ef0c715da879a9878b7bf4eb9c90b21e4ab8aeJames Dongstruct MediaBufferGroup;
3142ef0c715da879a9878b7bf4eb9c90b21e4ab8aeJames Dong
3242ef0c715da879a9878b7bf4eb9c90b21e4ab8aeJames Dongstruct M4vH263Encoder : public MediaSource,
3342ef0c715da879a9878b7bf4eb9c90b21e4ab8aeJames Dong                    public MediaBufferObserver {
3442ef0c715da879a9878b7bf4eb9c90b21e4ab8aeJames Dong    M4vH263Encoder(const sp<MediaSource> &source,
3542ef0c715da879a9878b7bf4eb9c90b21e4ab8aeJames Dong            const sp<MetaData>& meta);
3642ef0c715da879a9878b7bf4eb9c90b21e4ab8aeJames Dong
3742ef0c715da879a9878b7bf4eb9c90b21e4ab8aeJames Dong    virtual status_t start(MetaData *params);
3842ef0c715da879a9878b7bf4eb9c90b21e4ab8aeJames Dong    virtual status_t stop();
3942ef0c715da879a9878b7bf4eb9c90b21e4ab8aeJames Dong
4042ef0c715da879a9878b7bf4eb9c90b21e4ab8aeJames Dong    virtual sp<MetaData> getFormat();
4142ef0c715da879a9878b7bf4eb9c90b21e4ab8aeJames Dong
4242ef0c715da879a9878b7bf4eb9c90b21e4ab8aeJames Dong    virtual status_t read(
4342ef0c715da879a9878b7bf4eb9c90b21e4ab8aeJames Dong            MediaBuffer **buffer, const ReadOptions *options);
4442ef0c715da879a9878b7bf4eb9c90b21e4ab8aeJames Dong
4542ef0c715da879a9878b7bf4eb9c90b21e4ab8aeJames Dong    virtual void signalBufferReturned(MediaBuffer *buffer);
4642ef0c715da879a9878b7bf4eb9c90b21e4ab8aeJames Dong
4742ef0c715da879a9878b7bf4eb9c90b21e4ab8aeJames Dongprotected:
4842ef0c715da879a9878b7bf4eb9c90b21e4ab8aeJames Dong    virtual ~M4vH263Encoder();
4942ef0c715da879a9878b7bf4eb9c90b21e4ab8aeJames Dong
5042ef0c715da879a9878b7bf4eb9c90b21e4ab8aeJames Dongprivate:
5142ef0c715da879a9878b7bf4eb9c90b21e4ab8aeJames Dong    sp<MediaSource> mSource;
5242ef0c715da879a9878b7bf4eb9c90b21e4ab8aeJames Dong    sp<MetaData>    mFormat;
5342ef0c715da879a9878b7bf4eb9c90b21e4ab8aeJames Dong    sp<MetaData>    mMeta;
5442ef0c715da879a9878b7bf4eb9c90b21e4ab8aeJames Dong
5542ef0c715da879a9878b7bf4eb9c90b21e4ab8aeJames Dong    int32_t  mVideoWidth;
5642ef0c715da879a9878b7bf4eb9c90b21e4ab8aeJames Dong    int32_t  mVideoHeight;
5742ef0c715da879a9878b7bf4eb9c90b21e4ab8aeJames Dong    int32_t  mVideoFrameRate;
5842ef0c715da879a9878b7bf4eb9c90b21e4ab8aeJames Dong    int32_t  mVideoBitRate;
5942ef0c715da879a9878b7bf4eb9c90b21e4ab8aeJames Dong    int32_t  mVideoColorFormat;
6042ef0c715da879a9878b7bf4eb9c90b21e4ab8aeJames Dong    int64_t  mNumInputFrames;
6142ef0c715da879a9878b7bf4eb9c90b21e4ab8aeJames Dong    int64_t  mNextModTimeUs;
62708ec39c21568e0c2aa3d20c681f0e14ee6134adJames Dong    int64_t  mPrevTimestampUs;
6342ef0c715da879a9878b7bf4eb9c90b21e4ab8aeJames Dong    status_t mInitCheck;
6442ef0c715da879a9878b7bf4eb9c90b21e4ab8aeJames Dong    bool     mStarted;
6542ef0c715da879a9878b7bf4eb9c90b21e4ab8aeJames Dong
6642ef0c715da879a9878b7bf4eb9c90b21e4ab8aeJames Dong    tagvideoEncControls   *mHandle;
6742ef0c715da879a9878b7bf4eb9c90b21e4ab8aeJames Dong    tagvideoEncOptions    *mEncParams;
6842ef0c715da879a9878b7bf4eb9c90b21e4ab8aeJames Dong    MediaBuffer           *mInputBuffer;
6942ef0c715da879a9878b7bf4eb9c90b21e4ab8aeJames Dong    uint8_t               *mInputFrameData;
7042ef0c715da879a9878b7bf4eb9c90b21e4ab8aeJames Dong    MediaBufferGroup      *mGroup;
7142ef0c715da879a9878b7bf4eb9c90b21e4ab8aeJames Dong
7242ef0c715da879a9878b7bf4eb9c90b21e4ab8aeJames Dong    status_t initCheck(const sp<MetaData>& meta);
7342ef0c715da879a9878b7bf4eb9c90b21e4ab8aeJames Dong    void releaseOutputBuffers();
7442ef0c715da879a9878b7bf4eb9c90b21e4ab8aeJames Dong
7542ef0c715da879a9878b7bf4eb9c90b21e4ab8aeJames Dong    M4vH263Encoder(const M4vH263Encoder &);
7642ef0c715da879a9878b7bf4eb9c90b21e4ab8aeJames Dong    M4vH263Encoder &operator=(const M4vH263Encoder &);
7742ef0c715da879a9878b7bf4eb9c90b21e4ab8aeJames Dong};
7842ef0c715da879a9878b7bf4eb9c90b21e4ab8aeJames Dong
7942ef0c715da879a9878b7bf4eb9c90b21e4ab8aeJames Dong}  // namespace android
8042ef0c715da879a9878b7bf4eb9c90b21e4ab8aeJames Dong
8142ef0c715da879a9878b7bf4eb9c90b21e4ab8aeJames Dong#endif  // M4V_H263_ENCODER_H_
82