mediaplayer.h revision a7e0e8b4c429fc68eb1bd5b5a30f5b91352288f9
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_MEDIAPLAYER_H 1889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#define ANDROID_MEDIAPLAYER_H 1989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 207562408b2261d38415453378b6188f74fda99d88Mathias Agopian#include <binder/IMemory.h> 2189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#include <ui/Surface.h> 2289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#include <media/IMediaPlayerClient.h> 2389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#include <media/IMediaPlayer.h> 2489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#include <media/IMediaPlayerService.h> 2589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#include <utils/SortedVector.h> 2689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 2789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectnamespace android { 2889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 2989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectenum media_event_type { 3089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project MEDIA_NOP = 0, // interface test message 3189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project MEDIA_PREPARED = 1, 3289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project MEDIA_PLAYBACK_COMPLETE = 2, 3389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project MEDIA_BUFFERING_UPDATE = 3, 3489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project MEDIA_SEEK_COMPLETE = 4, 3589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project MEDIA_SET_VIDEO_SIZE = 5, 3689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project MEDIA_ERROR = 100, 3765e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project MEDIA_INFO = 200, 3889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}; 3989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 4065e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project// Generic error codes for the media player framework. Errors are fatal, the 4165e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project// playback must abort. 4265e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project// 4365e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project// Errors are communicated back to the client using the 4465e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project// MediaPlayerListener::notify method defined below. 4565e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project// In this situation, 'notify' is invoked with the following: 4665e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project// 'msg' is set to MEDIA_ERROR. 4765e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project// 'ext1' should be a value from the enum media_error_type. 4865e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project// 'ext2' contains an implementation dependant error code to provide 4965e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project// more details. Should default to 0 when not used. 5065e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project// 5165e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project// The codes are distributed as follow: 5265e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project// 0xx: Reserved 5365e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project// 1xx: Android Player errors. Something went wrong inside the MediaPlayer. 5465e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project// 2xx: Media errors (e.g Codec not supported). There is a problem with the 5565e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project// media itself. 5665e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project// 3xx: Runtime errors. Some extraordinary condition arose making the playback 5765e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project// impossible. 5865e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project// 5965e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Projectenum media_error_type { 6065e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project // 0xx 6165e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project MEDIA_ERROR_UNKNOWN = 1, 6265e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project // 1xx 6365e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project MEDIA_ERROR_SERVER_DIED = 100, 6465e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project // 2xx 6565e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project MEDIA_ERROR_NOT_VALID_FOR_PROGRESSIVE_PLAYBACK = 200, 6665e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project // 3xx 6765e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project}; 6865e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project 6965e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project 7065e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project// Info and warning codes for the media player framework. These are non fatal, 7165e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project// the playback is going on but there might be some user visible issues. 7265e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project// 7365e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project// Info and warning messages are communicated back to the client using the 7465e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project// MediaPlayerListener::notify method defined below. In this situation, 7565e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project// 'notify' is invoked with the following: 7665e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project// 'msg' is set to MEDIA_INFO. 7765e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project// 'ext1' should be a value from the enum media_info_type. 7865e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project// 'ext2' contains an implementation dependant error code to provide 7965e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project// more details. Should default to 0 when not used. 8065e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project// 8165e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project// The codes are distributed as follow: 8265e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project// 0xx: Reserved 8365e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project// 7xx: Android Player info/warning (e.g player lagging behind.) 8465e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project// 8xx: Media info/warning (e.g media badly interleaved.) 85660951867e959ebe98612742ef1f72d33ea7e9a3Nicolas Catania// 8665e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Projectenum media_info_type { 8765e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project // 0xx 8865e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project MEDIA_INFO_UNKNOWN = 1, 8965e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project // 7xx 9065e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project // The video is too complex for the decoder: it can't decode frames fast 9165e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project // enough. Possibly only the audio plays fine at this stage. 9265e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project MEDIA_INFO_VIDEO_TRACK_LAGGING = 700, 9365e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project // 8xx 9465e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project // Bad interleaving means that a media has been improperly interleaved or not 9565e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project // interleaved at all, e.g has all the video samples first then all the audio 9665e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project // ones. Video is playing but a lot of disk seek may be happening. 9765e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project MEDIA_INFO_BAD_INTERLEAVING = 800, 9865e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project // The media is not seekable (e.g live stream). 9965e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project MEDIA_INFO_NOT_SEEKABLE = 801, 100a7e0e8b4c429fc68eb1bd5b5a30f5b91352288f9Nicolas Catania // New media metadata is available. 101a7e0e8b4c429fc68eb1bd5b5a30f5b91352288f9Nicolas Catania MEDIA_INFO_METADATA_UPDATE = 802, 10265e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project}; 10365e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project 10465e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project 10589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 10689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectenum media_player_states { 10789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project MEDIA_PLAYER_STATE_ERROR = 0, 10889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project MEDIA_PLAYER_IDLE = 1 << 0, 10989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project MEDIA_PLAYER_INITIALIZED = 1 << 1, 11089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project MEDIA_PLAYER_PREPARING = 1 << 2, 11189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project MEDIA_PLAYER_PREPARED = 1 << 3, 11289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project MEDIA_PLAYER_STARTED = 1 << 4, 11389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project MEDIA_PLAYER_PAUSED = 1 << 5, 11489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project MEDIA_PLAYER_STOPPED = 1 << 6, 11589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project MEDIA_PLAYER_PLAYBACK_COMPLETE = 1 << 7 11689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}; 11789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 11889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project// ---------------------------------------------------------------------------- 11989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project// ref-counted object for callbacks 12089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectclass MediaPlayerListener: virtual public RefBase 12189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{ 12289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectpublic: 12389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual void notify(int msg, int ext1, int ext2) = 0; 12489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}; 12589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 12689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectclass MediaPlayer : public BnMediaPlayerClient 12789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{ 12889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectpublic: 12989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project MediaPlayer(); 13089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project ~MediaPlayer(); 13189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project void onFirstRef(); 13289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project void disconnect(); 13389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t setDataSource(const char *url); 13489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t setDataSource(int fd, int64_t offset, int64_t length); 13589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t setVideoSurface(const sp<Surface>& surface); 13689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t setListener(const sp<MediaPlayerListener>& listener); 13789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t prepare(); 13889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t prepareAsync(); 13989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t start(); 14089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t stop(); 14189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t pause(); 14289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project bool isPlaying(); 14389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t getVideoWidth(int *w); 14489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t getVideoHeight(int *h); 14589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t seekTo(int msec); 14689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t getCurrentPosition(int *msec); 14789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t getDuration(int *msec); 14889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t reset(); 14989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t setAudioStreamType(int type); 15089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t setLooping(int loop); 15189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project bool isLooping(); 15289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t setVolume(float leftVolume, float rightVolume); 15389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project void notify(int msg, int ext1, int ext2); 15489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project static sp<IMemory> decode(const char* url, uint32_t *pSampleRate, int* pNumChannels, int* pFormat); 15589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project static sp<IMemory> decode(int fd, int64_t offset, int64_t length, uint32_t *pSampleRate, int* pNumChannels, int* pFormat); 1561d187f1a86855f5f0694d7ec30efc9833bf7c589Nicolas Catania status_t invoke(const Parcel& request, Parcel *reply); 157a7e0e8b4c429fc68eb1bd5b5a30f5b91352288f9Nicolas Catania status_t setMetadataFilter(const Parcel& filter); 15889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectprivate: 15989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project void clear_l(); 16089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t seekTo_l(int msec); 16189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t prepareAsync_l(); 16289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t getDuration_l(int *msec); 16389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t setDataSource(const sp<IMediaPlayer>& player); 16489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 16589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project static const sp<IMediaPlayerService>& getMediaPlayerService(); 16689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project static void addObitRecipient(const wp<MediaPlayer>& recipient); 16789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project static void removeObitRecipient(const wp<MediaPlayer>& recipient); 16889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 16989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project class DeathNotifier: public IBinder::DeathRecipient 17089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project { 17189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project public: 17289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project DeathNotifier() {} 17389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual ~DeathNotifier(); 17489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 17589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual void binderDied(const wp<IBinder>& who); 17689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project }; 17789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 17889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project sp<IMediaPlayer> mPlayer; 1791af452f333664e8b0a61d96a9b3bb682d8b9a00fJason Sams thread_id_t mLockThreadId; 18089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Mutex mLock; 18189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Mutex mNotifyLock; 18289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Condition mSignal; 18389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project sp<MediaPlayerListener> mListener; 18489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project void* mCookie; 18589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project media_player_states mCurrentState; 18689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int mDuration; 18789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int mCurrentPosition; 18889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int mSeekPosition; 18989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project bool mPrepareSync; 19089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t mPrepareStatus; 19189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int mStreamType; 19289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project bool mLoop; 19389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project float mLeftVolume; 19489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project float mRightVolume; 19589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int mVideoWidth; 19689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int mVideoHeight; 19789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 19889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project friend class DeathNotifier; 19989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 20089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project static Mutex sServiceLock; 20189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project static sp<IMediaPlayerService> sMediaPlayerService; 20289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project static sp<DeathNotifier> sDeathNotifier; 20389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project static SortedVector< wp<MediaPlayer> > sObitRecipients; 20489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}; 20589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 20689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}; // namespace android 20789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 20889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#endif // ANDROID_MEDIAPLAYER_H 209