NuPlayerDriver.h revision 9575c96b6e418914e2ffc6741ecc8d71e3968dbe
13b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy/* 23b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy * Copyright (C) 2010 The Android Open Source Project 33b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy * 43b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy * Licensed under the Apache License, Version 2.0 (the "License"); 53b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy * you may not use this file except in compliance with the License. 63b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy * You may obtain a copy of the License at 73b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy * 83b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy * http://www.apache.org/licenses/LICENSE-2.0 93b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy * 103b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy * Unless required by applicable law or agreed to in writing, software 113b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy * distributed under the License is distributed on an "AS IS" BASIS, 123b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 133b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy * See the License for the specific language governing permissions and 143b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy * limitations under the License. 153b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy */ 163b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy 173b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy#include <media/MediaPlayerInterface.h> 183b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy 193b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy#include <media/stagefright/foundation/ABase.h> 203b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy 213b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guynamespace android { 223b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy 233b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guystruct ALooper; 243b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guystruct NuPlayer; 253b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy 263b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guystruct NuPlayerDriver : public MediaPlayerInterface { 273b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy NuPlayerDriver(); 283b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy 293b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy virtual status_t initCheck(); 303b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy 313b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy virtual status_t setUID(uid_t uid); 323b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy 333b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy virtual status_t setDataSource( 343b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy const char *url, const KeyedVector<String8, String8> *headers); 353b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy 363b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy virtual status_t setDataSource(int fd, int64_t offset, int64_t length); 373b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy 383b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy virtual status_t setDataSource(const sp<IStreamSource> &source); 393b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy 403b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy virtual status_t setVideoSurfaceTexture( 413b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy const sp<IGraphicBufferProducer> &bufferProducer); 423b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy virtual status_t prepare(); 433b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy virtual status_t prepareAsync(); 443b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy virtual status_t start(); 453b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy virtual status_t stop(); 463b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy virtual status_t pause(); 473b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy virtual bool isPlaying(); 483b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy virtual status_t seekTo(int msec); 493b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy virtual status_t getCurrentPosition(int *msec); 503b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy virtual status_t getDuration(int *msec); 513b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy virtual status_t reset(); 523b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy virtual status_t setLooping(int loop); 533b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy virtual player_type playerType(); 543b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy virtual status_t invoke(const Parcel &request, Parcel *reply); 553b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy virtual void setAudioSink(const sp<AudioSink> &audioSink); 563b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy virtual status_t setParameter(int key, const Parcel &request); 573b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy virtual status_t getParameter(int key, Parcel *reply); 583b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy 5936bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhat virtual status_t getMetadata( 603b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy const media::Metadata::Filter& ids, Parcel *records); 613b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy 623b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy virtual status_t dump(int fd, const Vector<String16> &args) const; 633b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy 643b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy void notifySetDataSourceCompleted(status_t err); 65b2ed04a68913f4d84d7cb7e979b6f0ae96f43058Romain Guy void notifyPrepareCompleted(status_t err); 66b2ed04a68913f4d84d7cb7e979b6f0ae96f43058Romain Guy void notifyResetComplete(); 67b2ed04a68913f4d84d7cb7e979b6f0ae96f43058Romain Guy void notifySetSurfaceComplete(); 683b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy void notifyDuration(int64_t durationUs); 693b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy void notifyPosition(int64_t positionUs); 703b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy void notifySeekComplete(); 713b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy void notifyFrameStats(int64_t numFramesTotal, int64_t numFramesDropped); 723b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy void notifyListener(int msg, int ext1 = 0, int ext2 = 0); 733b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy void notifyFlagsChanged(uint32_t flags); 743b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy 753b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guyprotected: 763b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy virtual ~NuPlayerDriver(); 773b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy 783b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guyprivate: 793b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy enum State { 8036bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhat STATE_IDLE, 813b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy STATE_SET_DATASOURCE_PENDING, 823b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy STATE_UNPREPARED, 833b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy STATE_PREPARING, 843b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy STATE_PREPARED, 853b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy STATE_RUNNING, 863b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy STATE_PAUSED, 873b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy STATE_RESET_IN_PROGRESS, 883b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy }; 893b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy 9036bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhat mutable Mutex mLock; 913b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy Condition mCondition; 923b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy 933b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy State mState; 943b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy 953b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy status_t mAsyncResult; 963b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy 973b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy // The following are protected through "mLock" 983b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy // >>> 993b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy bool mSetSurfaceInProgress; 1003b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy int64_t mDurationUs; 1013b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy int64_t mPositionUs; 1023b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy int64_t mNumFramesTotal; 1033b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy int64_t mNumFramesDropped; 1043b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy // <<< 1053b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy 1063b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy sp<ALooper> mLooper; 1073b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy sp<NuPlayer> mPlayer; 1083b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy uint32_t mPlayerFlags; 1093b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy 1103b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy bool mAtEOS; 1113b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy 1123b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy int64_t mStartupSeekTimeUs; 1133b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy 1143b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy status_t prepare_l(); 1153b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy 1163b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy DISALLOW_EVIL_CONSTRUCTORS(NuPlayerDriver); 1173b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy}; 1183b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy 1193b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy} // namespace android 1203b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy 1213b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy 1223b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy