MediaPlayerInterface.h revision 9b80c2bdb205bc143104f54d0743b6eedd67b14e
189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project/* 289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * Copyright (C) 2007 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#ifndef ANDROID_MEDIAPLAYERINTERFACE_H 1889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#define ANDROID_MEDIAPLAYERINTERFACE_H 1989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 2089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#ifdef __cplusplus 2189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 2214d2747c7e54037e267bcff78b29e65b2181f0faNicolas Catania#include <sys/types.h> 2314d2747c7e54037e267bcff78b29e65b2181f0faNicolas Catania#include <utils/Errors.h> 242db8455d8f4468a637109d31f319ce02d9d743ecAndreas Huber#include <utils/KeyedVector.h> 252db8455d8f4468a637109d31f319ce02d9d743ecAndreas Huber#include <utils/String8.h> 262db8455d8f4468a637109d31f319ce02d9d743ecAndreas Huber#include <utils/RefBase.h> 2789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 2889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#include <media/mediaplayer.h> 2989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#include <media/AudioSystem.h> 30a64c8c79af1a15911c55306d83a797fa50969f77niko#include <media/Metadata.h> 3189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 3289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectnamespace android { 3389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 341d187f1a86855f5f0694d7ec30efc9833bf7c589Nicolas Cataniaclass Parcel; 355daeb129a2c2ba3d14ccd94af283b5f561c783eaAndreas Huberclass Surface; 361173118eace0e9e347cb007f0da817cee87579edGlenn Kastenclass ISurfaceTexture; 373cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian 38d608a813a9d2cbc6e2a5ea81d78d4a9044090c4cnikotemplate<typename T> class SortedVector; 391d187f1a86855f5f0694d7ec30efc9833bf7c589Nicolas Catania 4089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectenum player_type { 4189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project PV_PLAYER = 1, 4289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project SONIVOX_PLAYER = 2, 43f933441648ef6a71dee783d733aac17b9508b452Andreas Huber STAGEFRIGHT_PLAYER = 3, 44f933441648ef6a71dee783d733aac17b9508b452Andreas Huber NU_PLAYER = 4, 4514d2747c7e54037e267bcff78b29e65b2181f0faNicolas Catania // Test players are available only in the 'test' and 'eng' builds. 4614d2747c7e54037e267bcff78b29e65b2181f0faNicolas Catania // The shared library with the test player is passed passed as an 4714d2747c7e54037e267bcff78b29e65b2181f0faNicolas Catania // argument to the 'test:' url in the setDataSource call. 4814d2747c7e54037e267bcff78b29e65b2181f0faNicolas Catania TEST_PLAYER = 5, 4989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}; 5089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 511d187f1a86855f5f0694d7ec30efc9833bf7c589Nicolas Catania 5289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#define DEFAULT_AUDIOSINK_BUFFERCOUNT 4 5389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#define DEFAULT_AUDIOSINK_BUFFERSIZE 1200 5489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#define DEFAULT_AUDIOSINK_SAMPLERATE 44100 5589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 5689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 5789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project// callback mechanism for passing messages to MediaPlayer object 58b483c4724846c0b8d4e82afcbb7c17f671bae81cGloria Wangtypedef void (*notify_callback_f)(void* cookie, 59b483c4724846c0b8d4e82afcbb7c17f671bae81cGloria Wang int msg, int ext1, int ext2, const Parcel *obj); 6089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 6189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project// abstract base class - use MediaPlayerInterface 6289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectclass MediaPlayerBase : public RefBase 6389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{ 6489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectpublic: 6589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project // AudioSink: abstraction layer for audio output 6689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project class AudioSink : public RefBase { 6789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project public: 687d5b8a70c28c0d5746a600467b2887822dbff88eAndreas Huber // Callback returns the number of bytes actually written to the buffer. 697d5b8a70c28c0d5746a600467b2887822dbff88eAndreas Huber typedef size_t (*AudioCallback)( 7020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber AudioSink *audioSink, void *buffer, size_t size, void *cookie); 7120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 7289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual ~AudioSink() {} 7389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual bool ready() const = 0; // audio output is open and ready 7489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual bool realtime() const = 0; // audio output is real-time output 7589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual ssize_t bufferSize() const = 0; 7689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual ssize_t frameCount() const = 0; 7789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual ssize_t channelCount() const = 0; 7889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual ssize_t frameSize() const = 0; 7989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual uint32_t latency() const = 0; 8089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual float msecsPerFrame() const = 0; 81342e9cf388cceb807def720e40e8b0a217f4bcaaEric Laurent virtual status_t getPosition(uint32_t *position) = 0; 828c563ed9ca8a863a66965330b5d14bb4b4ab59d4Eric Laurent virtual int getSessionId() = 0; 8320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 8420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber // If no callback is specified, use the "write" API below to submit 857d5b8a70c28c0d5746a600467b2887822dbff88eAndreas Huber // audio data. 8620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber virtual status_t open( 8720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber uint32_t sampleRate, int channelCount, 88fce7a473248381cc83a01855f92581077d3c9ee2Dima Zavin int format=AUDIO_FORMAT_PCM_16_BIT, 8920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber int bufferCount=DEFAULT_AUDIOSINK_BUFFERCOUNT, 9020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber AudioCallback cb = NULL, 9120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber void *cookie = NULL) = 0; 9220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 9389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual void start() = 0; 9489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual ssize_t write(const void* buffer, size_t size) = 0; 9589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual void stop() = 0; 9689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual void flush() = 0; 9789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual void pause() = 0; 9889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual void close() = 0; 9989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project }; 10089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 10189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project MediaPlayerBase() : mCookie(0), mNotify(0) {} 10289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual ~MediaPlayerBase() {} 10389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual status_t initCheck() = 0; 10489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual bool hardwareOutput() = 0; 1052db8455d8f4468a637109d31f319ce02d9d743ecAndreas Huber 1069b80c2bdb205bc143104f54d0743b6eedd67b14eAndreas Huber virtual status_t setUID(uid_t uid) { 1079b80c2bdb205bc143104f54d0743b6eedd67b14eAndreas Huber return INVALID_OPERATION; 1089b80c2bdb205bc143104f54d0743b6eedd67b14eAndreas Huber } 1099b80c2bdb205bc143104f54d0743b6eedd67b14eAndreas Huber 1102db8455d8f4468a637109d31f319ce02d9d743ecAndreas Huber virtual status_t setDataSource( 1112db8455d8f4468a637109d31f319ce02d9d743ecAndreas Huber const char *url, 1122db8455d8f4468a637109d31f319ce02d9d743ecAndreas Huber const KeyedVector<String8, String8> *headers = NULL) = 0; 1132db8455d8f4468a637109d31f319ce02d9d743ecAndreas Huber 11489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual status_t setDataSource(int fd, int64_t offset, int64_t length) = 0; 115e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber 116e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber virtual status_t setDataSource(const sp<IStreamSource> &source) { 117e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber return INVALID_OPERATION; 118e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber } 119e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber 1201173118eace0e9e347cb007f0da817cee87579edGlenn Kasten // pass the buffered Surface to the media player service 1215daeb129a2c2ba3d14ccd94af283b5f561c783eaAndreas Huber virtual status_t setVideoSurface(const sp<Surface>& surface) = 0; 1221173118eace0e9e347cb007f0da817cee87579edGlenn Kasten 1231173118eace0e9e347cb007f0da817cee87579edGlenn Kasten // pass the buffered ISurfaceTexture to the media player service 1241173118eace0e9e347cb007f0da817cee87579edGlenn Kasten virtual status_t setVideoSurfaceTexture( 1251173118eace0e9e347cb007f0da817cee87579edGlenn Kasten const sp<ISurfaceTexture>& surfaceTexture) = 0; 1261173118eace0e9e347cb007f0da817cee87579edGlenn Kasten 12789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual status_t prepare() = 0; 12889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual status_t prepareAsync() = 0; 12989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual status_t start() = 0; 13089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual status_t stop() = 0; 13189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual status_t pause() = 0; 13289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual bool isPlaying() = 0; 13389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual status_t seekTo(int msec) = 0; 13489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual status_t getCurrentPosition(int *msec) = 0; 13589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual status_t getDuration(int *msec) = 0; 13689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual status_t reset() = 0; 13789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual status_t setLooping(int loop) = 0; 13889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual player_type playerType() = 0; 1394f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang virtual status_t setParameter(int key, const Parcel &request) = 0; 1404f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang virtual status_t getParameter(int key, Parcel *reply) = 0; 1414e92c7efc68b5d7635a32dbd283ab8558ad9bdd6Andreas Huber 1421d187f1a86855f5f0694d7ec30efc9833bf7c589Nicolas Catania // Invoke a generic method on the player by using opaque parcels 1431d187f1a86855f5f0694d7ec30efc9833bf7c589Nicolas Catania // for the request and reply. 144d608a813a9d2cbc6e2a5ea81d78d4a9044090c4cniko // 1451d187f1a86855f5f0694d7ec30efc9833bf7c589Nicolas Catania // @param request Parcel that is positioned at the start of the 1461d187f1a86855f5f0694d7ec30efc9833bf7c589Nicolas Catania // data sent by the java layer. 1471d187f1a86855f5f0694d7ec30efc9833bf7c589Nicolas Catania // @param[out] reply Parcel to hold the reply data. Cannot be null. 148d608a813a9d2cbc6e2a5ea81d78d4a9044090c4cniko // @return OK if the call was successful. 1491d187f1a86855f5f0694d7ec30efc9833bf7c589Nicolas Catania virtual status_t invoke(const Parcel& request, Parcel *reply) = 0; 150d608a813a9d2cbc6e2a5ea81d78d4a9044090c4cniko 151d608a813a9d2cbc6e2a5ea81d78d4a9044090c4cniko // The Client in the MetadataPlayerService calls this method on 152d608a813a9d2cbc6e2a5ea81d78d4a9044090c4cniko // the native player to retrieve all or a subset of metadata. 153d608a813a9d2cbc6e2a5ea81d78d4a9044090c4cniko // 154d608a813a9d2cbc6e2a5ea81d78d4a9044090c4cniko // @param ids SortedList of metadata ID to be fetch. If empty, all 155d608a813a9d2cbc6e2a5ea81d78d4a9044090c4cniko // the known metadata should be returned. 156d608a813a9d2cbc6e2a5ea81d78d4a9044090c4cniko // @param[inout] records Parcel where the player appends its metadata. 157d608a813a9d2cbc6e2a5ea81d78d4a9044090c4cniko // @return OK if the call was successful. 158a64c8c79af1a15911c55306d83a797fa50969f77niko virtual status_t getMetadata(const media::Metadata::Filter& ids, 159a64c8c79af1a15911c55306d83a797fa50969f77niko Parcel *records) { 160a64c8c79af1a15911c55306d83a797fa50969f77niko return INVALID_OPERATION; 161a64c8c79af1a15911c55306d83a797fa50969f77niko }; 162d608a813a9d2cbc6e2a5ea81d78d4a9044090c4cniko 16301f394247f3d5851f5bb12c2786b5fee265b6357Andreas Huber void setNotifyCallback( 16401f394247f3d5851f5bb12c2786b5fee265b6357Andreas Huber void* cookie, notify_callback_f notifyFunc) { 16501f394247f3d5851f5bb12c2786b5fee265b6357Andreas Huber Mutex::Autolock autoLock(mNotifyLock); 16601f394247f3d5851f5bb12c2786b5fee265b6357Andreas Huber mCookie = cookie; mNotify = notifyFunc; 16701f394247f3d5851f5bb12c2786b5fee265b6357Andreas Huber } 16889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 169b483c4724846c0b8d4e82afcbb7c17f671bae81cGloria Wang void sendEvent(int msg, int ext1=0, int ext2=0, 170b483c4724846c0b8d4e82afcbb7c17f671bae81cGloria Wang const Parcel *obj=NULL) { 17101f394247f3d5851f5bb12c2786b5fee265b6357Andreas Huber Mutex::Autolock autoLock(mNotifyLock); 172b483c4724846c0b8d4e82afcbb7c17f671bae81cGloria Wang if (mNotify) mNotify(mCookie, msg, ext1, ext2, obj); 17301f394247f3d5851f5bb12c2786b5fee265b6357Andreas Huber } 17401f394247f3d5851f5bb12c2786b5fee265b6357Andreas Huber 175a0b1d4b161599c2bb2a47119e50c51e75bbe980eAndreas Huber virtual status_t dump(int fd, const Vector<String16> &args) const { 176a0b1d4b161599c2bb2a47119e50c51e75bbe980eAndreas Huber return INVALID_OPERATION; 177a0b1d4b161599c2bb2a47119e50c51e75bbe980eAndreas Huber } 178a0b1d4b161599c2bb2a47119e50c51e75bbe980eAndreas Huber 17901f394247f3d5851f5bb12c2786b5fee265b6357Andreas Huberprivate: 18001f394247f3d5851f5bb12c2786b5fee265b6357Andreas Huber friend class MediaPlayerService; 18101f394247f3d5851f5bb12c2786b5fee265b6357Andreas Huber 18201f394247f3d5851f5bb12c2786b5fee265b6357Andreas Huber Mutex mNotifyLock; 18389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project void* mCookie; 18489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project notify_callback_f mNotify; 18589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}; 18689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 18789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project// Implement this class for media players that use the AudioFlinger software mixer 18889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectclass MediaPlayerInterface : public MediaPlayerBase 18989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{ 19089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectpublic: 19189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual ~MediaPlayerInterface() { } 19289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual bool hardwareOutput() { return false; } 19389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual void setAudioSink(const sp<AudioSink>& audioSink) { mAudioSink = audioSink; } 19489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectprotected: 19589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project sp<AudioSink> mAudioSink; 19689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}; 19789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 1981173118eace0e9e347cb007f0da817cee87579edGlenn Kasten// Implement this class for media players that output audio directly to hardware 19989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectclass MediaPlayerHWInterface : public MediaPlayerBase 20089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{ 20189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectpublic: 20289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual ~MediaPlayerHWInterface() {} 20389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual bool hardwareOutput() { return true; } 20489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual status_t setVolume(float leftVolume, float rightVolume) = 0; 20589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual status_t setAudioStreamType(int streamType) = 0; 20689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}; 20789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 20889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}; // namespace android 20989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 21089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#endif // __cplusplus 21189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 21289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 21389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#endif // ANDROID_MEDIAPLAYERINTERFACE_H 214