MediaPlayerInterface.h revision 1948eb3ea6eee336e8cdab9b0c693f93f5f19993
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 32c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman// Fwd decl to make sure everyone agrees that the scope of struct sockaddr_in is 33c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman// global, and not in android:: 34c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossmanstruct sockaddr_in; 35c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman 3689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectnamespace android { 3789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 381d187f1a86855f5f0694d7ec30efc9833bf7c589Nicolas Cataniaclass Parcel; 395daeb129a2c2ba3d14ccd94af283b5f561c783eaAndreas Huberclass Surface; 401173118eace0e9e347cb007f0da817cee87579edGlenn Kastenclass ISurfaceTexture; 413cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian 42d608a813a9d2cbc6e2a5ea81d78d4a9044090c4cnikotemplate<typename T> class SortedVector; 431d187f1a86855f5f0694d7ec30efc9833bf7c589Nicolas Catania 4489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectenum player_type { 4589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project PV_PLAYER = 1, 4689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project SONIVOX_PLAYER = 2, 47f933441648ef6a71dee783d733aac17b9508b452Andreas Huber STAGEFRIGHT_PLAYER = 3, 48f933441648ef6a71dee783d733aac17b9508b452Andreas Huber NU_PLAYER = 4, 4914d2747c7e54037e267bcff78b29e65b2181f0faNicolas Catania // Test players are available only in the 'test' and 'eng' builds. 5014d2747c7e54037e267bcff78b29e65b2181f0faNicolas Catania // The shared library with the test player is passed passed as an 5114d2747c7e54037e267bcff78b29e65b2181f0faNicolas Catania // argument to the 'test:' url in the setDataSource call. 5214d2747c7e54037e267bcff78b29e65b2181f0faNicolas Catania TEST_PLAYER = 5, 53761defc341c5ce9019a42919c441f035f665ec0dJohn Grossman 54761defc341c5ce9019a42919c441f035f665ec0dJohn Grossman AAH_RX_PLAYER = 100, 55761defc341c5ce9019a42919c441f035f665ec0dJohn Grossman AAH_TX_PLAYER = 101, 5689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}; 5789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 581d187f1a86855f5f0694d7ec30efc9833bf7c589Nicolas Catania 5989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#define DEFAULT_AUDIOSINK_BUFFERCOUNT 4 6089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#define DEFAULT_AUDIOSINK_BUFFERSIZE 1200 6189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#define DEFAULT_AUDIOSINK_SAMPLERATE 44100 6289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 63786618ffe881aceb64d65a6a2e2d76ede6e01ec0Jean-Michel Trivi// when the channel mask isn't known, use the channel count to derive a mask in AudioSink::open() 64786618ffe881aceb64d65a6a2e2d76ede6e01ec0Jean-Michel Trivi#define CHANNEL_MASK_USE_CHANNEL_ORDER 0 6589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 661948eb3ea6eee336e8cdab9b0c693f93f5f19993Eric Laurent// duration below which we do not allow deep audio buffering 671948eb3ea6eee336e8cdab9b0c693f93f5f19993Eric Laurent#define AUDIO_SINK_MIN_DEEP_BUFFER_DURATION_US 5000000 681948eb3ea6eee336e8cdab9b0c693f93f5f19993Eric Laurent 6989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project// callback mechanism for passing messages to MediaPlayer object 70b483c4724846c0b8d4e82afcbb7c17f671bae81cGloria Wangtypedef void (*notify_callback_f)(void* cookie, 71b483c4724846c0b8d4e82afcbb7c17f671bae81cGloria Wang int msg, int ext1, int ext2, const Parcel *obj); 7289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 7389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project// abstract base class - use MediaPlayerInterface 7489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectclass MediaPlayerBase : public RefBase 7589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{ 7689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectpublic: 7789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project // AudioSink: abstraction layer for audio output 7889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project class AudioSink : public RefBase { 7989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project public: 807d5b8a70c28c0d5746a600467b2887822dbff88eAndreas Huber // Callback returns the number of bytes actually written to the buffer. 817d5b8a70c28c0d5746a600467b2887822dbff88eAndreas Huber typedef size_t (*AudioCallback)( 8220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber AudioSink *audioSink, void *buffer, size_t size, void *cookie); 8320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 8489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual ~AudioSink() {} 8589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual bool ready() const = 0; // audio output is open and ready 8689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual bool realtime() const = 0; // audio output is real-time output 8789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual ssize_t bufferSize() const = 0; 8889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual ssize_t frameCount() const = 0; 8989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual ssize_t channelCount() const = 0; 9089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual ssize_t frameSize() const = 0; 9189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual uint32_t latency() const = 0; 9289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual float msecsPerFrame() const = 0; 934110c101c3d0dd8dbc44c8d2d0edd3e2e7d6652fMarco Nelissen virtual status_t getPosition(uint32_t *position) const = 0; 944110c101c3d0dd8dbc44c8d2d0edd3e2e7d6652fMarco Nelissen virtual status_t getFramesWritten(uint32_t *frameswritten) const = 0; 954110c101c3d0dd8dbc44c8d2d0edd3e2e7d6652fMarco Nelissen virtual int getSessionId() const = 0; 9620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 9720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber // If no callback is specified, use the "write" API below to submit 987d5b8a70c28c0d5746a600467b2887822dbff88eAndreas Huber // audio data. 9920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber virtual status_t open( 100786618ffe881aceb64d65a6a2e2d76ede6e01ec0Jean-Michel Trivi uint32_t sampleRate, int channelCount, audio_channel_mask_t channelMask, 101e1c3962e268ffc12bfd1bd9ea84da1f135f36960Glenn Kasten audio_format_t format=AUDIO_FORMAT_PCM_16_BIT, 10220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber int bufferCount=DEFAULT_AUDIOSINK_BUFFERCOUNT, 10320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber AudioCallback cb = NULL, 1041948eb3ea6eee336e8cdab9b0c693f93f5f19993Eric Laurent void *cookie = NULL, 1051948eb3ea6eee336e8cdab9b0c693f93f5f19993Eric Laurent audio_output_flags_t flags = AUDIO_OUTPUT_FLAG_NONE) = 0; 10620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 10789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual void start() = 0; 10889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual ssize_t write(const void* buffer, size_t size) = 0; 10989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual void stop() = 0; 11089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual void flush() = 0; 11189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual void pause() = 0; 11289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual void close() = 0; 1137a8b0ed6419e57dd8b41d3806893d63d3df91aabJean-Michel Trivi 1147a8b0ed6419e57dd8b41d3806893d63d3df91aabJean-Michel Trivi virtual status_t setPlaybackRatePermille(int32_t rate) { return INVALID_OPERATION; } 1156b74d671a1321a6ecc4a40b6c87beedfecc1ec44Marco Nelissen virtual bool needsTrailingPadding() { return true; } 11689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project }; 11789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 11889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project MediaPlayerBase() : mCookie(0), mNotify(0) {} 11989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual ~MediaPlayerBase() {} 12089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual status_t initCheck() = 0; 12189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual bool hardwareOutput() = 0; 1222db8455d8f4468a637109d31f319ce02d9d743ecAndreas Huber 1239b80c2bdb205bc143104f54d0743b6eedd67b14eAndreas Huber virtual status_t setUID(uid_t uid) { 1249b80c2bdb205bc143104f54d0743b6eedd67b14eAndreas Huber return INVALID_OPERATION; 1259b80c2bdb205bc143104f54d0743b6eedd67b14eAndreas Huber } 1269b80c2bdb205bc143104f54d0743b6eedd67b14eAndreas Huber 1272db8455d8f4468a637109d31f319ce02d9d743ecAndreas Huber virtual status_t setDataSource( 1282db8455d8f4468a637109d31f319ce02d9d743ecAndreas Huber const char *url, 1292db8455d8f4468a637109d31f319ce02d9d743ecAndreas Huber const KeyedVector<String8, String8> *headers = NULL) = 0; 1302db8455d8f4468a637109d31f319ce02d9d743ecAndreas Huber 13189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual status_t setDataSource(int fd, int64_t offset, int64_t length) = 0; 132e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber 133e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber virtual status_t setDataSource(const sp<IStreamSource> &source) { 134e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber return INVALID_OPERATION; 135e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber } 136e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber 1371173118eace0e9e347cb007f0da817cee87579edGlenn Kasten // pass the buffered ISurfaceTexture to the media player service 1381173118eace0e9e347cb007f0da817cee87579edGlenn Kasten virtual status_t setVideoSurfaceTexture( 1391173118eace0e9e347cb007f0da817cee87579edGlenn Kasten const sp<ISurfaceTexture>& surfaceTexture) = 0; 1401173118eace0e9e347cb007f0da817cee87579edGlenn Kasten 14189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual status_t prepare() = 0; 14289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual status_t prepareAsync() = 0; 14389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual status_t start() = 0; 14489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual status_t stop() = 0; 14589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual status_t pause() = 0; 14689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual bool isPlaying() = 0; 14789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual status_t seekTo(int msec) = 0; 14889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual status_t getCurrentPosition(int *msec) = 0; 14989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual status_t getDuration(int *msec) = 0; 15089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual status_t reset() = 0; 15189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual status_t setLooping(int loop) = 0; 15289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual player_type playerType() = 0; 1534f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang virtual status_t setParameter(int key, const Parcel &request) = 0; 1544f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang virtual status_t getParameter(int key, Parcel *reply) = 0; 1554e92c7efc68b5d7635a32dbd283ab8558ad9bdd6Andreas Huber 156c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman // Right now, only the AAX TX player supports this functionality. For now, 157c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman // provide a default implementation which indicates a lack of support for 158c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman // this functionality to make life easier for all of the other media player 159c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman // maintainers out there. 160c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman virtual status_t setRetransmitEndpoint(const struct sockaddr_in* endpoint) { 161c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman return INVALID_OPERATION; 162c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman } 163c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman 1641d187f1a86855f5f0694d7ec30efc9833bf7c589Nicolas Catania // Invoke a generic method on the player by using opaque parcels 1651d187f1a86855f5f0694d7ec30efc9833bf7c589Nicolas Catania // for the request and reply. 166d608a813a9d2cbc6e2a5ea81d78d4a9044090c4cniko // 1671d187f1a86855f5f0694d7ec30efc9833bf7c589Nicolas Catania // @param request Parcel that is positioned at the start of the 1681d187f1a86855f5f0694d7ec30efc9833bf7c589Nicolas Catania // data sent by the java layer. 1691d187f1a86855f5f0694d7ec30efc9833bf7c589Nicolas Catania // @param[out] reply Parcel to hold the reply data. Cannot be null. 170d608a813a9d2cbc6e2a5ea81d78d4a9044090c4cniko // @return OK if the call was successful. 1711d187f1a86855f5f0694d7ec30efc9833bf7c589Nicolas Catania virtual status_t invoke(const Parcel& request, Parcel *reply) = 0; 172d608a813a9d2cbc6e2a5ea81d78d4a9044090c4cniko 173d608a813a9d2cbc6e2a5ea81d78d4a9044090c4cniko // The Client in the MetadataPlayerService calls this method on 174d608a813a9d2cbc6e2a5ea81d78d4a9044090c4cniko // the native player to retrieve all or a subset of metadata. 175d608a813a9d2cbc6e2a5ea81d78d4a9044090c4cniko // 176d608a813a9d2cbc6e2a5ea81d78d4a9044090c4cniko // @param ids SortedList of metadata ID to be fetch. If empty, all 177d608a813a9d2cbc6e2a5ea81d78d4a9044090c4cniko // the known metadata should be returned. 178d608a813a9d2cbc6e2a5ea81d78d4a9044090c4cniko // @param[inout] records Parcel where the player appends its metadata. 179d608a813a9d2cbc6e2a5ea81d78d4a9044090c4cniko // @return OK if the call was successful. 180a64c8c79af1a15911c55306d83a797fa50969f77niko virtual status_t getMetadata(const media::Metadata::Filter& ids, 181a64c8c79af1a15911c55306d83a797fa50969f77niko Parcel *records) { 182a64c8c79af1a15911c55306d83a797fa50969f77niko return INVALID_OPERATION; 183a64c8c79af1a15911c55306d83a797fa50969f77niko }; 184d608a813a9d2cbc6e2a5ea81d78d4a9044090c4cniko 18501f394247f3d5851f5bb12c2786b5fee265b6357Andreas Huber void setNotifyCallback( 18601f394247f3d5851f5bb12c2786b5fee265b6357Andreas Huber void* cookie, notify_callback_f notifyFunc) { 18701f394247f3d5851f5bb12c2786b5fee265b6357Andreas Huber Mutex::Autolock autoLock(mNotifyLock); 18801f394247f3d5851f5bb12c2786b5fee265b6357Andreas Huber mCookie = cookie; mNotify = notifyFunc; 18901f394247f3d5851f5bb12c2786b5fee265b6357Andreas Huber } 19089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 191b483c4724846c0b8d4e82afcbb7c17f671bae81cGloria Wang void sendEvent(int msg, int ext1=0, int ext2=0, 192b483c4724846c0b8d4e82afcbb7c17f671bae81cGloria Wang const Parcel *obj=NULL) { 19301f394247f3d5851f5bb12c2786b5fee265b6357Andreas Huber Mutex::Autolock autoLock(mNotifyLock); 194b483c4724846c0b8d4e82afcbb7c17f671bae81cGloria Wang if (mNotify) mNotify(mCookie, msg, ext1, ext2, obj); 19501f394247f3d5851f5bb12c2786b5fee265b6357Andreas Huber } 19601f394247f3d5851f5bb12c2786b5fee265b6357Andreas Huber 197a0b1d4b161599c2bb2a47119e50c51e75bbe980eAndreas Huber virtual status_t dump(int fd, const Vector<String16> &args) const { 198a0b1d4b161599c2bb2a47119e50c51e75bbe980eAndreas Huber return INVALID_OPERATION; 199a0b1d4b161599c2bb2a47119e50c51e75bbe980eAndreas Huber } 200a0b1d4b161599c2bb2a47119e50c51e75bbe980eAndreas Huber 20101f394247f3d5851f5bb12c2786b5fee265b6357Andreas Huberprivate: 20201f394247f3d5851f5bb12c2786b5fee265b6357Andreas Huber friend class MediaPlayerService; 20301f394247f3d5851f5bb12c2786b5fee265b6357Andreas Huber 20401f394247f3d5851f5bb12c2786b5fee265b6357Andreas Huber Mutex mNotifyLock; 20589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project void* mCookie; 20689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project notify_callback_f mNotify; 20789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}; 20889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 20989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project// Implement this class for media players that use the AudioFlinger software mixer 21089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectclass MediaPlayerInterface : public MediaPlayerBase 21189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{ 21289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectpublic: 21389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual ~MediaPlayerInterface() { } 21489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual bool hardwareOutput() { return false; } 21589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual void setAudioSink(const sp<AudioSink>& audioSink) { mAudioSink = audioSink; } 21689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectprotected: 21789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project sp<AudioSink> mAudioSink; 21889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}; 21989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 2201173118eace0e9e347cb007f0da817cee87579edGlenn Kasten// Implement this class for media players that output audio directly to hardware 22189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectclass MediaPlayerHWInterface : public MediaPlayerBase 22289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{ 22389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectpublic: 22489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual ~MediaPlayerHWInterface() {} 22589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual bool hardwareOutput() { return true; } 22689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual status_t setVolume(float leftVolume, float rightVolume) = 0; 227fff6d715a8db0daf08a50634f242c40268de3d49Glenn Kasten virtual status_t setAudioStreamType(audio_stream_type_t streamType) = 0; 22889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}; 22989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 23089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}; // namespace android 23189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 23289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#endif // __cplusplus 23389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 23489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 23589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#endif // ANDROID_MEDIAPLAYERINTERFACE_H 236