MediaPlayerService.h revision dac6a31a33ba53fb93850670cdddd1e6515dadce
19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** Copyright 2008, The Android Open Source Project 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** Licensed under the Apache License, Version 2.0 (the "License"); 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** you may not use this file except in compliance with the License. 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** You may obtain a copy of the License at 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** http://www.apache.org/licenses/LICENSE-2.0 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** Unless required by applicable law or agreed to in writing, software 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** distributed under the License is distributed on an "AS IS" BASIS, 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** See the License for the specific language governing permissions and 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** limitations under the License. 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project*/ 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#ifndef ANDROID_MEDIAPLAYERSERVICE_H 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define ANDROID_MEDIAPLAYERSERVICE_H 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 212269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn#include <utils/Log.h> 222269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn#include <utils/threads.h> 232269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn#include <utils/List.h> 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <utils/Errors.h> 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <utils/KeyedVector.h> 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <utils/Vector.h> 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <ui/SurfaceComposerClient.h> 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <media/IMediaPlayerService.h> 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <media/MediaPlayerInterface.h> 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <media/Metadata.h> 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectnamespace android { 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass IMediaRecorder; 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass IMediaMetadataRetriever; 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass IOMX; 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass MediaRecorderClient; 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define CALLBACK_ANTAGONIZER 0 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#if CALLBACK_ANTAGONIZER 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass Antagonizer { 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic: 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Antagonizer(notify_callback_f cb, void* client); 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void start() { mActive = true; } 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void stop() { mActive = false; } 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void kill(); 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectprivate: 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static const int interval; 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Antagonizer(); 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static int callbackThread(void* cookie); 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Mutex mLock; 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Condition mCondition; 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool mExit; 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool mActive; 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void* mClient; 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project notify_callback_f mCb; 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#endif 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass MediaPlayerService : public BnMediaPlayerService 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project class Client; 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project class AudioOutput : public MediaPlayerBase::AudioSink 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public: 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AudioOutput(); 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual ~AudioOutput(); 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual bool ready() const { return mTrack != NULL; } 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual bool realtime() const { return true; } 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual ssize_t bufferSize() const; 74a565e5e3d084c4e5a21a094b1409e3b23f9dce48Amith Yamasani virtual ssize_t frameCount() const; 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual ssize_t channelCount() const; 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual ssize_t frameSize() const; 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual uint32_t latency() const; 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual float msecsPerFrame() const; 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual status_t open( 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint32_t sampleRate, int channelCount, 82a565e5e3d084c4e5a21a094b1409e3b23f9dce48Amith Yamasani int format, int bufferCount, 83a565e5e3d084c4e5a21a094b1409e3b23f9dce48Amith Yamasani AudioCallback cb, void *cookie); 84a565e5e3d084c4e5a21a094b1409e3b23f9dce48Amith Yamasani 85a565e5e3d084c4e5a21a094b1409e3b23f9dce48Amith Yamasani virtual void start(); 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual ssize_t write(const void* buffer, size_t size); 87a565e5e3d084c4e5a21a094b1409e3b23f9dce48Amith Yamasani virtual void stop(); 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual void flush(); 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual void pause(); 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual void close(); 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void setAudioStreamType(int streamType) { mStreamType = streamType; } 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void setVolume(float left, float right); 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual status_t dump(int fd, const Vector<String16>& args) const; 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static bool isOnEmulator(); 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static int getMinBufferCount(); 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private: 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static void setMinBufferCount(); 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static void CallbackWrapper( 100a565e5e3d084c4e5a21a094b1409e3b23f9dce48Amith Yamasani int event, void *me, void *info); 101a565e5e3d084c4e5a21a094b1409e3b23f9dce48Amith Yamasani 102a565e5e3d084c4e5a21a094b1409e3b23f9dce48Amith Yamasani AudioTrack* mTrack; 103a565e5e3d084c4e5a21a094b1409e3b23f9dce48Amith Yamasani AudioCallback mCallback; 104a565e5e3d084c4e5a21a094b1409e3b23f9dce48Amith Yamasani void * mCallbackCookie; 105a565e5e3d084c4e5a21a094b1409e3b23f9dce48Amith Yamasani int mStreamType; 106a565e5e3d084c4e5a21a094b1409e3b23f9dce48Amith Yamasani float mLeftVolume; 107a565e5e3d084c4e5a21a094b1409e3b23f9dce48Amith Yamasani float mRightVolume; 108a565e5e3d084c4e5a21a094b1409e3b23f9dce48Amith Yamasani float mMsecsPerFrame; 109a565e5e3d084c4e5a21a094b1409e3b23f9dce48Amith Yamasani uint32_t mLatency; 110a565e5e3d084c4e5a21a094b1409e3b23f9dce48Amith Yamasani 111a565e5e3d084c4e5a21a094b1409e3b23f9dce48Amith Yamasani // TODO: Find real cause of Audio/Video delay in PV framework and remove this workaround 112a565e5e3d084c4e5a21a094b1409e3b23f9dce48Amith Yamasani static const uint32_t kAudioVideoDelayMs; 113a565e5e3d084c4e5a21a094b1409e3b23f9dce48Amith Yamasani static bool mIsOnEmulator; 114a565e5e3d084c4e5a21a094b1409e3b23f9dce48Amith Yamasani static int mMinBufferCount; // 12 for emulator; otherwise 4 115a565e5e3d084c4e5a21a094b1409e3b23f9dce48Amith Yamasani 116a565e5e3d084c4e5a21a094b1409e3b23f9dce48Amith Yamasani public: // visualization hack support 117a565e5e3d084c4e5a21a094b1409e3b23f9dce48Amith Yamasani uint32_t mNumFramesWritten; 118a565e5e3d084c4e5a21a094b1409e3b23f9dce48Amith Yamasani }; 119a565e5e3d084c4e5a21a094b1409e3b23f9dce48Amith Yamasani 120a565e5e3d084c4e5a21a094b1409e3b23f9dce48Amith Yamasani class AudioCache : public MediaPlayerBase::AudioSink 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 122a565e5e3d084c4e5a21a094b1409e3b23f9dce48Amith Yamasani public: 123a565e5e3d084c4e5a21a094b1409e3b23f9dce48Amith Yamasani AudioCache(const char* name); 124a565e5e3d084c4e5a21a094b1409e3b23f9dce48Amith Yamasani virtual ~AudioCache() {} 125a565e5e3d084c4e5a21a094b1409e3b23f9dce48Amith Yamasani 126a565e5e3d084c4e5a21a094b1409e3b23f9dce48Amith Yamasani virtual bool ready() const { return (mChannelCount > 0) && (mHeap->getHeapID() > 0); } 127a565e5e3d084c4e5a21a094b1409e3b23f9dce48Amith Yamasani virtual bool realtime() const { return false; } 128a565e5e3d084c4e5a21a094b1409e3b23f9dce48Amith Yamasani virtual ssize_t bufferSize() const { return frameSize() * mFrameCount; } 129a565e5e3d084c4e5a21a094b1409e3b23f9dce48Amith Yamasani virtual ssize_t frameCount() const { return mFrameCount; } 1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual ssize_t channelCount() const { return (ssize_t)mChannelCount; } 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual ssize_t frameSize() const { return ssize_t(mChannelCount * ((mFormat == AudioSystem::PCM_16_BIT)?sizeof(int16_t):sizeof(u_int8_t))); } 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual uint32_t latency() const; 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual float msecsPerFrame() const; 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual status_t open( 1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint32_t sampleRate, int channelCount, int format, 1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int bufferCount = 1, 1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AudioCallback cb = NULL, void *cookie = NULL); 1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual void start() {} 1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual ssize_t write(const void* buffer, size_t size); 1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual void stop() {} 1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual void flush() {} 1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual void pause() {} 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual void close() {} 1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void setAudioStreamType(int streamType) {} 1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void setVolume(float left, float right) {} 1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint32_t sampleRate() const { return mSampleRate; } 1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint32_t format() const { return (uint32_t)mFormat; } 1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project size_t size() const { return mSize; } 1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project status_t wait(); 1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sp<IMemoryHeap> getHeap() const { return mHeap; } 1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static void notify(void* cookie, int msg, int ext1, int ext2); 1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual status_t dump(int fd, const Vector<String16>& args) const; 1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private: 1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AudioCache(); 1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Mutex mLock; 1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Condition mSignal; 1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sp<MemoryHeapBase> mHeap; 1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project float mMsecsPerFrame; 1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint16_t mChannelCount; 1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint16_t mFormat; 1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ssize_t mFrameCount; 1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint32_t mSampleRate; 1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint32_t mSize; 1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int mError; 1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool mCommandComplete; 1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic: 1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static void instantiate(); 1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // IMediaPlayerService interface 1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual sp<IMediaRecorder> createMediaRecorder(pid_t pid); 1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void removeMediaRecorderClient(wp<MediaRecorderClient> client); 1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual sp<IMediaMetadataRetriever> createMetadataRetriever(pid_t pid); 1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // House keeping for media player clients 1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual sp<IMediaPlayer> create(pid_t pid, const sp<IMediaPlayerClient>& client, const char* url); 1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual sp<IMediaPlayer> create(pid_t pid, const sp<IMediaPlayerClient>& client, int fd, int64_t offset, int64_t length); 1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual sp<IMemory> decode(const char* url, uint32_t *pSampleRate, int* pNumChannels, int* pFormat); 1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual sp<IMemory> decode(int fd, int64_t offset, int64_t length, uint32_t *pSampleRate, int* pNumChannels, int* pFormat); 1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual sp<IMemory> snoop(); 1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual sp<IOMX> createOMX(); 1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual status_t dump(int fd, const Vector<String16>& args); 1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void removeClient(wp<Client> client); 1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectprivate: 1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project class Client : public BnMediaPlayer { 1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // IMediaPlayer interface 2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual void disconnect(); 2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual status_t setVideoSurface(const sp<ISurface>& surface); 2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual status_t prepareAsync(); 2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual status_t start(); 2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual status_t stop(); 2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual status_t pause(); 2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual status_t isPlaying(bool* state); 2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual status_t seekTo(int msec); 2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual status_t getCurrentPosition(int* msec); 2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual status_t getDuration(int* msec); 2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual status_t reset(); 2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual status_t setAudioStreamType(int type); 2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual status_t setLooping(int loop); 2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual status_t setVolume(float leftVolume, float rightVolume); 2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual status_t invoke(const Parcel& request, Parcel *reply); 215a565e5e3d084c4e5a21a094b1409e3b23f9dce48Amith Yamasani virtual status_t setMetadataFilter(const Parcel& filter); 216a565e5e3d084c4e5a21a094b1409e3b23f9dce48Amith Yamasani virtual status_t getMetadata(bool update_only, 217a565e5e3d084c4e5a21a094b1409e3b23f9dce48Amith Yamasani bool apply_filter, 2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Parcel *reply); 2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sp<MediaPlayerBase> createPlayer(player_type playerType); 2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project status_t setDataSource(const char *url); 2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project status_t setDataSource(int fd, int64_t offset, int64_t length); 2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static void notify(void* cookie, int msg, int ext1, int ext2); 2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project pid_t pid() const { return mPid; } 2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual status_t dump(int fd, const Vector<String16>& args) const; 2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private: 2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project friend class MediaPlayerService; 2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Client( const sp<MediaPlayerService>& service, 2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project pid_t pid, 2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int32_t connId, 2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const sp<IMediaPlayerClient>& client); 2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Client(); 2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual ~Client(); 2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void deletePlayer(); 2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sp<MediaPlayerBase> getPlayer() const { Mutex::Autolock lock(mLock); return mPlayer; } 2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // @param type Of the metadata to be tested. 2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // @return true if the metadata should be dropped according to 2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // the filters. 2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool shouldDropMetadata(media::Metadata::Type type) const; 2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Add a new element to the set of metadata updated. Noop if 2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // the element exists already. 2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // @param type Of the metadata to be recorded. 2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void addNewMetadataUpdate(media::Metadata::Type type); 2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mutable Mutex mLock; 2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sp<MediaPlayerBase> mPlayer; 2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sp<MediaPlayerService> mService; 2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sp<IMediaPlayerClient> mClient; 2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sp<AudioOutput> mAudioOutput; 2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project pid_t mPid; 2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project status_t mStatus; 2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool mLoop; 2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int32_t mConnId; 2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Metadata filters. 2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project media::Metadata::Filter mMetadataAllow; // protected by mLock 2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project media::Metadata::Filter mMetadataDrop; // protected by mLock 2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Metadata updated. For each MEDIA_INFO_METADATA_UPDATE 2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // notification we try to update mMetadataUpdated which is a 2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // set: no duplicate. 2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // getMetadata clears this set. 2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project media::Metadata::Filter mMetadataUpdated; // protected by mLock 2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#if CALLBACK_ANTAGONIZER 2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Antagonizer* mAntagonizer; 2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#endif 2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ---------------------------------------------------------------------------- 2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 280 MediaPlayerService(); 281 virtual ~MediaPlayerService(); 282 283 mutable Mutex mLock; 284 SortedVector< wp<Client> > mClients; 285 SortedVector< wp<MediaRecorderClient> > mMediaRecorderClients; 286 int32_t mNextConnId; 287}; 288 289// ---------------------------------------------------------------------------- 290 291}; // namespace android 292 293#endif // ANDROID_MEDIAPLAYERSERVICE_H 294