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