NuPlayerDriver.h revision 3fe62150fa3dd6d25cb84aad80bc9e27ddd16c45
189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project/*
289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * Copyright (C) 2010 The Android Open Source Project
389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project *
489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * you may not use this file except in compliance with the License.
689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * You may obtain a copy of the License at
789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project *
889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project *
1089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
1189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
1289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * See the License for the specific language governing permissions and
1489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * limitations under the License.
1589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project */
1689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
1789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#include <media/MediaPlayerInterface.h>
1889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
1989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#include <media/stagefright/foundation/ABase.h>
2089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
2189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectnamespace android {
2289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
2389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectstruct ALooper;
2489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectstruct NuPlayer;
2589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
2689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectstruct NuPlayerDriver : public MediaPlayerInterface {
2789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    NuPlayerDriver();
2889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
2989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    virtual status_t initCheck();
3089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
31c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent    virtual status_t setUID(uid_t uid);
3289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
337562408b2261d38415453378b6188f74fda99d88Mathias Agopian    virtual status_t setDataSource(
3489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project            const char *url, const KeyedVector<String8, String8> *headers);
357562408b2261d38415453378b6188f74fda99d88Mathias Agopian
367562408b2261d38415453378b6188f74fda99d88Mathias Agopian    virtual status_t setDataSource(int fd, int64_t offset, int64_t length);
3789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
3838ccae2c0324daa305f3fe77d25fdf5edec0b0e1Eric Laurent    virtual status_t setDataSource(const sp<IStreamSource> &source);
3989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
4064760240f931714858a59c1579f07264d7182ba2Dima Zavin    virtual status_t setVideoSurface(const sp<Surface> &surface);
41fce7a473248381cc83a01855f92581077d3c9ee2Dima Zavin    virtual status_t setVideoSurfaceTexture(
42f6b1678f8f508b447155a81b44e214475ab634a8Glenn Kasten            const sp<ISurfaceTexture> &surfaceTexture);
4389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    virtual status_t prepare();
4489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    virtual status_t prepareAsync();
4515304d601cbf83be6519ca53e1a26b97d50d0192Chia-chi Yeh    virtual status_t start();
4615304d601cbf83be6519ca53e1a26b97d50d0192Chia-chi Yeh    virtual status_t stop();
4715304d601cbf83be6519ca53e1a26b97d50d0192Chia-chi Yeh    virtual status_t pause();
4815304d601cbf83be6519ca53e1a26b97d50d0192Chia-chi Yeh    virtual bool isPlaying();
4915304d601cbf83be6519ca53e1a26b97d50d0192Chia-chi Yeh    virtual status_t seekTo(int msec);
5015304d601cbf83be6519ca53e1a26b97d50d0192Chia-chi Yeh    virtual status_t getCurrentPosition(int *msec);
5115304d601cbf83be6519ca53e1a26b97d50d0192Chia-chi Yeh    virtual status_t getDuration(int *msec);
5215304d601cbf83be6519ca53e1a26b97d50d0192Chia-chi Yeh    virtual status_t reset();
5315304d601cbf83be6519ca53e1a26b97d50d0192Chia-chi Yeh    virtual status_t setLooping(int loop);
5415304d601cbf83be6519ca53e1a26b97d50d0192Chia-chi Yeh    virtual player_type playerType();
5515304d601cbf83be6519ca53e1a26b97d50d0192Chia-chi Yeh    virtual status_t invoke(const Parcel &request, Parcel *reply);
5615304d601cbf83be6519ca53e1a26b97d50d0192Chia-chi Yeh    virtual void setAudioSink(const sp<AudioSink> &audioSink);
5715304d601cbf83be6519ca53e1a26b97d50d0192Chia-chi Yeh    virtual status_t setParameter(int key, const Parcel &request);
5815304d601cbf83be6519ca53e1a26b97d50d0192Chia-chi Yeh    virtual status_t getParameter(int key, Parcel *reply);
5915304d601cbf83be6519ca53e1a26b97d50d0192Chia-chi Yeh
6015304d601cbf83be6519ca53e1a26b97d50d0192Chia-chi Yeh    virtual status_t getMetadata(
6115304d601cbf83be6519ca53e1a26b97d50d0192Chia-chi Yeh            const media::Metadata::Filter& ids, Parcel *records);
6215304d601cbf83be6519ca53e1a26b97d50d0192Chia-chi Yeh
6315304d601cbf83be6519ca53e1a26b97d50d0192Chia-chi Yeh    virtual status_t dump(int fd, const Vector<String16> &args) const;
6415304d601cbf83be6519ca53e1a26b97d50d0192Chia-chi Yeh
6515304d601cbf83be6519ca53e1a26b97d50d0192Chia-chi Yeh    void notifyResetComplete();
6615304d601cbf83be6519ca53e1a26b97d50d0192Chia-chi Yeh    void notifyDuration(int64_t durationUs);
6715304d601cbf83be6519ca53e1a26b97d50d0192Chia-chi Yeh    void notifyPosition(int64_t positionUs);
6815304d601cbf83be6519ca53e1a26b97d50d0192Chia-chi Yeh    void notifySeekComplete();
6915304d601cbf83be6519ca53e1a26b97d50d0192Chia-chi Yeh    void notifyFrameStats(int64_t numFramesTotal, int64_t numFramesDropped);
70fce7a473248381cc83a01855f92581077d3c9ee2Dima Zavin
71671a636931295d9c33ffca74551a804479d01241Eric Laurentprotected:
7215304d601cbf83be6519ca53e1a26b97d50d0192Chia-chi Yeh    virtual ~NuPlayerDriver();
7315304d601cbf83be6519ca53e1a26b97d50d0192Chia-chi Yeh
7415304d601cbf83be6519ca53e1a26b97d50d0192Chia-chi Yehprivate:
7515304d601cbf83be6519ca53e1a26b97d50d0192Chia-chi Yeh    mutable Mutex mLock;
7615304d601cbf83be6519ca53e1a26b97d50d0192Chia-chi Yeh    Condition mCondition;
7789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
7889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    // The following are protected through "mLock"
7989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    // >>>
8089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    bool mResetInProgress;
81879135196fd1c97deefc538c888037c56c2879a7Glenn Kasten    int64_t mDurationUs;
82879135196fd1c97deefc538c888037c56c2879a7Glenn Kasten    int64_t mPositionUs;
8389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    int64_t mNumFramesTotal;
8489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    int64_t mNumFramesDropped;
8589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    // <<<
8689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
87f5879c1448cc6aebc51b26d3ec2399d66144f8f4Eric Laurent    sp<ALooper> mLooper;
8889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    sp<NuPlayer> mPlayer;
8989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
900d255b2d9061ba31f13ada3fc0f7e51916407176Jean-Michel Trivi    enum State {
9189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        UNINITIALIZED,
9289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        STOPPED,
9389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        PLAYING,
9489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        PAUSED
95be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent    };
96be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent
97879135196fd1c97deefc538c888037c56c2879a7Glenn Kasten    State mState;
98879135196fd1c97deefc538c888037c56c2879a7Glenn Kasten
9989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    int64_t mStartupSeekTimeUs;
1000d255b2d9061ba31f13ada3fc0f7e51916407176Jean-Michel Trivi
101be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent    DISALLOW_EVIL_CONSTRUCTORS(NuPlayerDriver);
10289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project};
10389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
10489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}  // namespace android
10589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
10689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
10789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project