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> 3006ad1528e6dd4c866c085d3cad9235d2752eb3edLajos Molnar#include <media/AudioTimestamp.h> 31a64c8c79af1a15911c55306d83a797fa50969f77niko#include <media/Metadata.h> 3289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 33c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman// Fwd decl to make sure everyone agrees that the scope of struct sockaddr_in is 34c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman// global, and not in android:: 35c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossmanstruct sockaddr_in; 36c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman 3789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectnamespace android { 3889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 391d187f1a86855f5f0694d7ec30efc9833bf7c589Nicolas Cataniaclass Parcel; 405daeb129a2c2ba3d14ccd94af283b5f561c783eaAndreas Huberclass Surface; 41484566c410afdfbc4b6bc5aa1732aef37428a5b8Andy McFaddenclass IGraphicBufferProducer; 423cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian 43d608a813a9d2cbc6e2a5ea81d78d4a9044090c4cnikotemplate<typename T> class SortedVector; 441d187f1a86855f5f0694d7ec30efc9833bf7c589Nicolas Catania 4589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectenum player_type { 4689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project PV_PLAYER = 1, 4789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project SONIVOX_PLAYER = 2, 48f933441648ef6a71dee783d733aac17b9508b452Andreas Huber STAGEFRIGHT_PLAYER = 3, 49f933441648ef6a71dee783d733aac17b9508b452Andreas Huber NU_PLAYER = 4, 5014d2747c7e54037e267bcff78b29e65b2181f0faNicolas Catania // Test players are available only in the 'test' and 'eng' builds. 5114d2747c7e54037e267bcff78b29e65b2181f0faNicolas Catania // The shared library with the test player is passed passed as an 5214d2747c7e54037e267bcff78b29e65b2181f0faNicolas Catania // argument to the 'test:' url in the setDataSource call. 5314d2747c7e54037e267bcff78b29e65b2181f0faNicolas Catania TEST_PLAYER = 5, 5489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}; 5589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 561d187f1a86855f5f0694d7ec30efc9833bf7c589Nicolas Catania 5789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#define DEFAULT_AUDIOSINK_BUFFERCOUNT 4 5889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#define DEFAULT_AUDIOSINK_BUFFERSIZE 1200 5989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#define DEFAULT_AUDIOSINK_SAMPLERATE 44100 6089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 61786618ffe881aceb64d65a6a2e2d76ede6e01ec0Jean-Michel Trivi// when the channel mask isn't known, use the channel count to derive a mask in AudioSink::open() 62786618ffe881aceb64d65a6a2e2d76ede6e01ec0Jean-Michel Trivi#define CHANNEL_MASK_USE_CHANNEL_ORDER 0 6389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 641948eb3ea6eee336e8cdab9b0c693f93f5f19993Eric Laurent// duration below which we do not allow deep audio buffering 651948eb3ea6eee336e8cdab9b0c693f93f5f19993Eric Laurent#define AUDIO_SINK_MIN_DEEP_BUFFER_DURATION_US 5000000 661948eb3ea6eee336e8cdab9b0c693f93f5f19993Eric Laurent 6789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project// callback mechanism for passing messages to MediaPlayer object 68b483c4724846c0b8d4e82afcbb7c17f671bae81cGloria Wangtypedef void (*notify_callback_f)(void* cookie, 69b483c4724846c0b8d4e82afcbb7c17f671bae81cGloria Wang int msg, int ext1, int ext2, const Parcel *obj); 7089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 7189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project// abstract base class - use MediaPlayerInterface 7289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectclass MediaPlayerBase : public RefBase 7389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{ 7489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectpublic: 7589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project // AudioSink: abstraction layer for audio output 7689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project class AudioSink : public RefBase { 7789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project public: 78ad3af3305f024bcbbd55c894a4995e449498e1baRichard Fitzgerald enum cb_event_t { 79ad3af3305f024bcbbd55c894a4995e449498e1baRichard Fitzgerald CB_EVENT_FILL_BUFFER, // Request to write more data to buffer. 80ad3af3305f024bcbbd55c894a4995e449498e1baRichard Fitzgerald CB_EVENT_STREAM_END, // Sent after all the buffers queued in AF and HW are played 81ad3af3305f024bcbbd55c894a4995e449498e1baRichard Fitzgerald // back (after stop is called) 82ad3af3305f024bcbbd55c894a4995e449498e1baRichard Fitzgerald CB_EVENT_TEAR_DOWN // The AudioTrack was invalidated due to use case change: 83ad3af3305f024bcbbd55c894a4995e449498e1baRichard Fitzgerald // Need to re-evaluate offloading options 84ad3af3305f024bcbbd55c894a4995e449498e1baRichard Fitzgerald }; 85ad3af3305f024bcbbd55c894a4995e449498e1baRichard Fitzgerald 867d5b8a70c28c0d5746a600467b2887822dbff88eAndreas Huber // Callback returns the number of bytes actually written to the buffer. 877d5b8a70c28c0d5746a600467b2887822dbff88eAndreas Huber typedef size_t (*AudioCallback)( 88ad3af3305f024bcbbd55c894a4995e449498e1baRichard Fitzgerald AudioSink *audioSink, void *buffer, size_t size, void *cookie, 89ad3af3305f024bcbbd55c894a4995e449498e1baRichard Fitzgerald cb_event_t event); 9020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 9189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual ~AudioSink() {} 9289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual bool ready() const = 0; // audio output is open and ready 9389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual bool realtime() const = 0; // audio output is real-time output 9489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual ssize_t bufferSize() const = 0; 9589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual ssize_t frameCount() const = 0; 9689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual ssize_t channelCount() const = 0; 9789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual ssize_t frameSize() const = 0; 9889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual uint32_t latency() const = 0; 9989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual float msecsPerFrame() const = 0; 1004110c101c3d0dd8dbc44c8d2d0edd3e2e7d6652fMarco Nelissen virtual status_t getPosition(uint32_t *position) const = 0; 10106ad1528e6dd4c866c085d3cad9235d2752eb3edLajos Molnar virtual status_t getTimestamp(AudioTimestamp &ts) const = 0; 1024110c101c3d0dd8dbc44c8d2d0edd3e2e7d6652fMarco Nelissen virtual status_t getFramesWritten(uint32_t *frameswritten) const = 0; 1034110c101c3d0dd8dbc44c8d2d0edd3e2e7d6652fMarco Nelissen virtual int getSessionId() const = 0; 10422612345ae97648d5b6db43cc1aa30aad77f7bbaEric Laurent virtual audio_stream_type_t getAudioStreamType() const = 0; 1056f59db12a64f4496866952a251122ccb77a36c6bEric Laurent virtual uint32_t getSampleRate() const = 0; 10620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 10720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber // If no callback is specified, use the "write" API below to submit 1087d5b8a70c28c0d5746a600467b2887822dbff88eAndreas Huber // audio data. 10920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber virtual status_t open( 110786618ffe881aceb64d65a6a2e2d76ede6e01ec0Jean-Michel Trivi uint32_t sampleRate, int channelCount, audio_channel_mask_t channelMask, 111e1c3962e268ffc12bfd1bd9ea84da1f135f36960Glenn Kasten audio_format_t format=AUDIO_FORMAT_PCM_16_BIT, 11220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber int bufferCount=DEFAULT_AUDIOSINK_BUFFERCOUNT, 11320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber AudioCallback cb = NULL, 1141948eb3ea6eee336e8cdab9b0c693f93f5f19993Eric Laurent void *cookie = NULL, 115ad3af3305f024bcbbd55c894a4995e449498e1baRichard Fitzgerald audio_output_flags_t flags = AUDIO_OUTPUT_FLAG_NONE, 116ad3af3305f024bcbbd55c894a4995e449498e1baRichard Fitzgerald const audio_offload_info_t *offloadInfo = NULL) = 0; 11720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 118d89532e133b881c7e0dac089333ad7642fc510f1Richard Fitzgerald virtual status_t start() = 0; 11989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual ssize_t write(const void* buffer, size_t size) = 0; 12089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual void stop() = 0; 12189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual void flush() = 0; 12289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual void pause() = 0; 12389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual void close() = 0; 1247a8b0ed6419e57dd8b41d3806893d63d3df91aabJean-Michel Trivi 1257a8b0ed6419e57dd8b41d3806893d63d3df91aabJean-Michel Trivi virtual status_t setPlaybackRatePermille(int32_t rate) { return INVALID_OPERATION; } 1266b74d671a1321a6ecc4a40b6c87beedfecc1ec44Marco Nelissen virtual bool needsTrailingPadding() { return true; } 127ad3af3305f024bcbbd55c894a4995e449498e1baRichard Fitzgerald 128ad3af3305f024bcbbd55c894a4995e449498e1baRichard Fitzgerald virtual status_t setParameters(const String8& keyValuePairs) { return NO_ERROR; }; 129ad3af3305f024bcbbd55c894a4995e449498e1baRichard Fitzgerald virtual String8 getParameters(const String8& keys) { return String8::empty(); }; 13089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project }; 13189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 13289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project MediaPlayerBase() : mCookie(0), mNotify(0) {} 13389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual ~MediaPlayerBase() {} 13489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual status_t initCheck() = 0; 13589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual bool hardwareOutput() = 0; 1362db8455d8f4468a637109d31f319ce02d9d743ecAndreas Huber 1379b80c2bdb205bc143104f54d0743b6eedd67b14eAndreas Huber virtual status_t setUID(uid_t uid) { 1389b80c2bdb205bc143104f54d0743b6eedd67b14eAndreas Huber return INVALID_OPERATION; 1399b80c2bdb205bc143104f54d0743b6eedd67b14eAndreas Huber } 1409b80c2bdb205bc143104f54d0743b6eedd67b14eAndreas Huber 1412db8455d8f4468a637109d31f319ce02d9d743ecAndreas Huber virtual status_t setDataSource( 1421b86fe063badb5f28c467ade39be0f4008688947Andreas Huber const sp<IMediaHTTPService> &httpService, 1432db8455d8f4468a637109d31f319ce02d9d743ecAndreas Huber const char *url, 1442db8455d8f4468a637109d31f319ce02d9d743ecAndreas Huber const KeyedVector<String8, String8> *headers = NULL) = 0; 1452db8455d8f4468a637109d31f319ce02d9d743ecAndreas Huber 14689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual status_t setDataSource(int fd, int64_t offset, int64_t length) = 0; 147e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber 148e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber virtual status_t setDataSource(const sp<IStreamSource> &source) { 149e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber return INVALID_OPERATION; 150e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber } 151e2b1028852120bcfded33b8f06f66b780437fe92Andreas Huber 152484566c410afdfbc4b6bc5aa1732aef37428a5b8Andy McFadden // pass the buffered IGraphicBufferProducer to the media player service 1531173118eace0e9e347cb007f0da817cee87579edGlenn Kasten virtual status_t setVideoSurfaceTexture( 154484566c410afdfbc4b6bc5aa1732aef37428a5b8Andy McFadden const sp<IGraphicBufferProducer>& bufferProducer) = 0; 1551173118eace0e9e347cb007f0da817cee87579edGlenn Kasten 15689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual status_t prepare() = 0; 15789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual status_t prepareAsync() = 0; 15889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual status_t start() = 0; 15989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual status_t stop() = 0; 16089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual status_t pause() = 0; 16189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual bool isPlaying() = 0; 16289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual status_t seekTo(int msec) = 0; 16389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual status_t getCurrentPosition(int *msec) = 0; 16489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual status_t getDuration(int *msec) = 0; 16589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual status_t reset() = 0; 16689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual status_t setLooping(int loop) = 0; 16789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual player_type playerType() = 0; 1684f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang virtual status_t setParameter(int key, const Parcel &request) = 0; 1694f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang virtual status_t getParameter(int key, Parcel *reply) = 0; 1704e92c7efc68b5d7635a32dbd283ab8558ad9bdd6Andreas Huber 1715f7e55ea443c80ef8b6173efd1c2551e07309b0aJohn Grossman // default no-op implementation of optional extensions 172c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman virtual status_t setRetransmitEndpoint(const struct sockaddr_in* endpoint) { 173c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman return INVALID_OPERATION; 174c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman } 17544a7e42f0310831e6a846d1b6bb40bf3a399bf6dJohn Grossman virtual status_t getRetransmitEndpoint(struct sockaddr_in* endpoint) { 17644a7e42f0310831e6a846d1b6bb40bf3a399bf6dJohn Grossman return INVALID_OPERATION; 17744a7e42f0310831e6a846d1b6bb40bf3a399bf6dJohn Grossman } 1785f7e55ea443c80ef8b6173efd1c2551e07309b0aJohn Grossman virtual status_t setNextPlayer(const sp<MediaPlayerBase>& next) { 1795f7e55ea443c80ef8b6173efd1c2551e07309b0aJohn Grossman return OK; 1805f7e55ea443c80ef8b6173efd1c2551e07309b0aJohn Grossman } 181c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman 1821d187f1a86855f5f0694d7ec30efc9833bf7c589Nicolas Catania // Invoke a generic method on the player by using opaque parcels 1831d187f1a86855f5f0694d7ec30efc9833bf7c589Nicolas Catania // for the request and reply. 184d608a813a9d2cbc6e2a5ea81d78d4a9044090c4cniko // 1851d187f1a86855f5f0694d7ec30efc9833bf7c589Nicolas Catania // @param request Parcel that is positioned at the start of the 1861d187f1a86855f5f0694d7ec30efc9833bf7c589Nicolas Catania // data sent by the java layer. 1871d187f1a86855f5f0694d7ec30efc9833bf7c589Nicolas Catania // @param[out] reply Parcel to hold the reply data. Cannot be null. 188d608a813a9d2cbc6e2a5ea81d78d4a9044090c4cniko // @return OK if the call was successful. 1891d187f1a86855f5f0694d7ec30efc9833bf7c589Nicolas Catania virtual status_t invoke(const Parcel& request, Parcel *reply) = 0; 190d608a813a9d2cbc6e2a5ea81d78d4a9044090c4cniko 191d608a813a9d2cbc6e2a5ea81d78d4a9044090c4cniko // The Client in the MetadataPlayerService calls this method on 192d608a813a9d2cbc6e2a5ea81d78d4a9044090c4cniko // the native player to retrieve all or a subset of metadata. 193d608a813a9d2cbc6e2a5ea81d78d4a9044090c4cniko // 194d608a813a9d2cbc6e2a5ea81d78d4a9044090c4cniko // @param ids SortedList of metadata ID to be fetch. If empty, all 195d608a813a9d2cbc6e2a5ea81d78d4a9044090c4cniko // the known metadata should be returned. 196d608a813a9d2cbc6e2a5ea81d78d4a9044090c4cniko // @param[inout] records Parcel where the player appends its metadata. 197d608a813a9d2cbc6e2a5ea81d78d4a9044090c4cniko // @return OK if the call was successful. 198a64c8c79af1a15911c55306d83a797fa50969f77niko virtual status_t getMetadata(const media::Metadata::Filter& ids, 199a64c8c79af1a15911c55306d83a797fa50969f77niko Parcel *records) { 200a64c8c79af1a15911c55306d83a797fa50969f77niko return INVALID_OPERATION; 201a64c8c79af1a15911c55306d83a797fa50969f77niko }; 202d608a813a9d2cbc6e2a5ea81d78d4a9044090c4cniko 20301f394247f3d5851f5bb12c2786b5fee265b6357Andreas Huber void setNotifyCallback( 20401f394247f3d5851f5bb12c2786b5fee265b6357Andreas Huber void* cookie, notify_callback_f notifyFunc) { 20501f394247f3d5851f5bb12c2786b5fee265b6357Andreas Huber Mutex::Autolock autoLock(mNotifyLock); 20601f394247f3d5851f5bb12c2786b5fee265b6357Andreas Huber mCookie = cookie; mNotify = notifyFunc; 20701f394247f3d5851f5bb12c2786b5fee265b6357Andreas Huber } 20889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 209b483c4724846c0b8d4e82afcbb7c17f671bae81cGloria Wang void sendEvent(int msg, int ext1=0, int ext2=0, 210b483c4724846c0b8d4e82afcbb7c17f671bae81cGloria Wang const Parcel *obj=NULL) { 211df2592beab557663a471da2ac33ca463f7eee722Chong Zhang notify_callback_f notifyCB; 212df2592beab557663a471da2ac33ca463f7eee722Chong Zhang void* cookie; 213df2592beab557663a471da2ac33ca463f7eee722Chong Zhang { 214df2592beab557663a471da2ac33ca463f7eee722Chong Zhang Mutex::Autolock autoLock(mNotifyLock); 215df2592beab557663a471da2ac33ca463f7eee722Chong Zhang notifyCB = mNotify; 216df2592beab557663a471da2ac33ca463f7eee722Chong Zhang cookie = mCookie; 217df2592beab557663a471da2ac33ca463f7eee722Chong Zhang } 218df2592beab557663a471da2ac33ca463f7eee722Chong Zhang 219df2592beab557663a471da2ac33ca463f7eee722Chong Zhang if (notifyCB) notifyCB(cookie, msg, ext1, ext2, obj); 22001f394247f3d5851f5bb12c2786b5fee265b6357Andreas Huber } 22101f394247f3d5851f5bb12c2786b5fee265b6357Andreas Huber 222a0b1d4b161599c2bb2a47119e50c51e75bbe980eAndreas Huber virtual status_t dump(int fd, const Vector<String16> &args) const { 223a0b1d4b161599c2bb2a47119e50c51e75bbe980eAndreas Huber return INVALID_OPERATION; 224a0b1d4b161599c2bb2a47119e50c51e75bbe980eAndreas Huber } 225a0b1d4b161599c2bb2a47119e50c51e75bbe980eAndreas Huber 22601f394247f3d5851f5bb12c2786b5fee265b6357Andreas Huberprivate: 22701f394247f3d5851f5bb12c2786b5fee265b6357Andreas Huber friend class MediaPlayerService; 22801f394247f3d5851f5bb12c2786b5fee265b6357Andreas Huber 22901f394247f3d5851f5bb12c2786b5fee265b6357Andreas Huber Mutex mNotifyLock; 23089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project void* mCookie; 23189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project notify_callback_f mNotify; 23289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}; 23389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 23489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project// Implement this class for media players that use the AudioFlinger software mixer 23589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectclass MediaPlayerInterface : public MediaPlayerBase 23689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{ 23789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectpublic: 23889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual ~MediaPlayerInterface() { } 23989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual bool hardwareOutput() { return false; } 24089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual void setAudioSink(const sp<AudioSink>& audioSink) { mAudioSink = audioSink; } 24189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectprotected: 24289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project sp<AudioSink> mAudioSink; 24389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}; 24489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 2451173118eace0e9e347cb007f0da817cee87579edGlenn Kasten// Implement this class for media players that output audio directly to hardware 24689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectclass MediaPlayerHWInterface : public MediaPlayerBase 24789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{ 24889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectpublic: 24989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual ~MediaPlayerHWInterface() {} 25089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual bool hardwareOutput() { return true; } 25189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual status_t setVolume(float leftVolume, float rightVolume) = 0; 252fff6d715a8db0daf08a50634f242c40268de3d49Glenn Kasten virtual status_t setAudioStreamType(audio_stream_type_t streamType) = 0; 25389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}; 25489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 25589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}; // namespace android 25689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 25789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#endif // __cplusplus 25889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 25989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 26089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#endif // ANDROID_MEDIAPLAYERINTERFACE_H 261