102f5b5447de349216a40086ca6061efefb5a3025James Dong/*
202f5b5447de349216a40086ca6061efefb5a3025James Dong * Copyright (C) 2009 The Android Open Source Project
302f5b5447de349216a40086ca6061efefb5a3025James Dong *
402f5b5447de349216a40086ca6061efefb5a3025James Dong * Licensed under the Apache License, Version 2.0 (the "License");
502f5b5447de349216a40086ca6061efefb5a3025James Dong * you may not use this file except in compliance with the License.
602f5b5447de349216a40086ca6061efefb5a3025James Dong * You may obtain a copy of the License at
702f5b5447de349216a40086ca6061efefb5a3025James Dong *
802f5b5447de349216a40086ca6061efefb5a3025James Dong *      http://www.apache.org/licenses/LICENSE-2.0
902f5b5447de349216a40086ca6061efefb5a3025James Dong *
1002f5b5447de349216a40086ca6061efefb5a3025James Dong * Unless required by applicable law or agreed to in writing, software
1102f5b5447de349216a40086ca6061efefb5a3025James Dong * distributed under the License is distributed on an "AS IS" BASIS,
1202f5b5447de349216a40086ca6061efefb5a3025James Dong * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1302f5b5447de349216a40086ca6061efefb5a3025James Dong * See the License for the specific language governing permissions and
1402f5b5447de349216a40086ca6061efefb5a3025James Dong * limitations under the License.
1502f5b5447de349216a40086ca6061efefb5a3025James Dong */
1602f5b5447de349216a40086ca6061efefb5a3025James Dong
1702f5b5447de349216a40086ca6061efefb5a3025James Dong#ifndef M4V_H263_DECODER_H_
1802f5b5447de349216a40086ca6061efefb5a3025James Dong
1902f5b5447de349216a40086ca6061efefb5a3025James Dong#define M4V_H263_DECODER_H_
2002f5b5447de349216a40086ca6061efefb5a3025James Dong
2102f5b5447de349216a40086ca6061efefb5a3025James Dong#include <media/stagefright/MediaBuffer.h>
2202f5b5447de349216a40086ca6061efefb5a3025James Dong#include <media/stagefright/MediaSource.h>
2302f5b5447de349216a40086ca6061efefb5a3025James Dong
2402f5b5447de349216a40086ca6061efefb5a3025James Dongstruct tagvideoDecControls;
2502f5b5447de349216a40086ca6061efefb5a3025James Dong
2602f5b5447de349216a40086ca6061efefb5a3025James Dongnamespace android {
2702f5b5447de349216a40086ca6061efefb5a3025James Dong
2802f5b5447de349216a40086ca6061efefb5a3025James Dongstruct M4vH263Decoder : public MediaSource,
2902f5b5447de349216a40086ca6061efefb5a3025James Dong                        public MediaBufferObserver {
3002f5b5447de349216a40086ca6061efefb5a3025James Dong    M4vH263Decoder(const sp<MediaSource> &source);
3102f5b5447de349216a40086ca6061efefb5a3025James Dong
3202f5b5447de349216a40086ca6061efefb5a3025James Dong    virtual status_t start(MetaData *params);
3302f5b5447de349216a40086ca6061efefb5a3025James Dong    virtual status_t stop();
3402f5b5447de349216a40086ca6061efefb5a3025James Dong
3502f5b5447de349216a40086ca6061efefb5a3025James Dong    virtual sp<MetaData> getFormat();
3602f5b5447de349216a40086ca6061efefb5a3025James Dong
3702f5b5447de349216a40086ca6061efefb5a3025James Dong    virtual status_t read(
3802f5b5447de349216a40086ca6061efefb5a3025James Dong            MediaBuffer **buffer, const ReadOptions *options);
3902f5b5447de349216a40086ca6061efefb5a3025James Dong
4002f5b5447de349216a40086ca6061efefb5a3025James Dong    virtual void signalBufferReturned(MediaBuffer *buffer);
4102f5b5447de349216a40086ca6061efefb5a3025James Dong
4202f5b5447de349216a40086ca6061efefb5a3025James Dongprotected:
4302f5b5447de349216a40086ca6061efefb5a3025James Dong    virtual ~M4vH263Decoder();
4402f5b5447de349216a40086ca6061efefb5a3025James Dong
4502f5b5447de349216a40086ca6061efefb5a3025James Dongprivate:
4602f5b5447de349216a40086ca6061efefb5a3025James Dong    sp<MediaSource> mSource;
4702f5b5447de349216a40086ca6061efefb5a3025James Dong    bool mStarted;
4802f5b5447de349216a40086ca6061efefb5a3025James Dong    int32_t mWidth, mHeight;
4902f5b5447de349216a40086ca6061efefb5a3025James Dong
5002f5b5447de349216a40086ca6061efefb5a3025James Dong    sp<MetaData> mFormat;
5102f5b5447de349216a40086ca6061efefb5a3025James Dong
5202f5b5447de349216a40086ca6061efefb5a3025James Dong    tagvideoDecControls *mHandle;
5302f5b5447de349216a40086ca6061efefb5a3025James Dong    MediaBuffer *mFrames[2];
5402f5b5447de349216a40086ca6061efefb5a3025James Dong    MediaBuffer *mInputBuffer;
5502f5b5447de349216a40086ca6061efefb5a3025James Dong
5602f5b5447de349216a40086ca6061efefb5a3025James Dong    int64_t mNumSamplesOutput;
576624c9fd0bc5e3858a22a04c05b5059445c1c367Andreas Huber    int64_t mTargetTimeUs;
5802f5b5447de349216a40086ca6061efefb5a3025James Dong
592039bd93ed9801927bffce43698b29645482b188Andreas Huber    void allocateFrames(int32_t width, int32_t height);
6002f5b5447de349216a40086ca6061efefb5a3025James Dong    void releaseFrames();
6102f5b5447de349216a40086ca6061efefb5a3025James Dong
6202f5b5447de349216a40086ca6061efefb5a3025James Dong    M4vH263Decoder(const M4vH263Decoder &);
6302f5b5447de349216a40086ca6061efefb5a3025James Dong    M4vH263Decoder &operator=(const M4vH263Decoder &);
6402f5b5447de349216a40086ca6061efefb5a3025James Dong};
6502f5b5447de349216a40086ca6061efefb5a3025James Dong
6602f5b5447de349216a40086ca6061efefb5a3025James Dong}  // namespace android
6702f5b5447de349216a40086ca6061efefb5a3025James Dong
6802f5b5447de349216a40086ca6061efefb5a3025James Dong#endif  // M4V_H263_DECODER_H_
69