19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/*
29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2007 The Android Open Source Project
39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License.
69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at
79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and
149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License.
159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#ifndef ANDROID_MEDIAPLAYER_H
189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define ANDROID_MEDIAPLAYER_H
199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
200795272aa226f4e965968a03daddc53ce30b7cdaMathias Agopian#include <binder/IMemory.h>
219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <media/IMediaPlayerClient.h>
229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <media/IMediaPlayer.h>
2334bbc22cbca0004475788f06be2300fef23c6a52James Dong#include <media/IMediaDeathNotifier.h>
24fc301b0bb5c635c6bb51b48c504a8db5f9010e5cDave Burke#include <media/IStreamSource.h>
259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
26256430093679e1d62b54fb0c852126e54d162f6fAndreas Huber#include <utils/KeyedVector.h>
27256430093679e1d62b54fb0c852126e54d162f6fAndreas Huber#include <utils/String8.h>
28256430093679e1d62b54fb0c852126e54d162f6fAndreas Huber
29c85ca5d6b573e1a663a10950578220b4580c285cJamie Gennisclass ANativeWindow;
30c85ca5d6b573e1a663a10950578220b4580c285cJamie Gennis
319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectnamespace android {
329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
33000479f9e325b4e426a67033abd92d47da412725Mathias Agopianclass Surface;
34cc562a3576a6a8096626387472e05e8bee03352aGlenn Kastenclass ISurfaceTexture;
35000479f9e325b4e426a67033abd92d47da412725Mathias Agopian
369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectenum media_event_type {
379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    MEDIA_NOP               = 0, // interface test message
389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    MEDIA_PREPARED          = 1,
399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    MEDIA_PLAYBACK_COMPLETE = 2,
409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    MEDIA_BUFFERING_UPDATE  = 3,
419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    MEDIA_SEEK_COMPLETE     = 4,
429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    MEDIA_SET_VIDEO_SIZE    = 5,
43162ee49e1ce8800de80697fdd0e0e42ad7e9374eGloria Wang    MEDIA_TIMED_TEXT        = 99,
449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    MEDIA_ERROR             = 100,
45c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project    MEDIA_INFO              = 200,
469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project};
479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
48c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project// Generic error codes for the media player framework.  Errors are fatal, the
49c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project// playback must abort.
50c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project//
51c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project// Errors are communicated back to the client using the
52c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project// MediaPlayerListener::notify method defined below.
53c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project// In this situation, 'notify' is invoked with the following:
54c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project//   'msg' is set to MEDIA_ERROR.
55c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project//   'ext1' should be a value from the enum media_error_type.
56c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project//   'ext2' contains an implementation dependant error code to provide
57c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project//          more details. Should default to 0 when not used.
58c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project//
59c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project// The codes are distributed as follow:
60c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project//   0xx: Reserved
61c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project//   1xx: Android Player errors. Something went wrong inside the MediaPlayer.
62c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project//   2xx: Media errors (e.g Codec not supported). There is a problem with the
63c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project//        media itself.
64c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project//   3xx: Runtime errors. Some extraordinary condition arose making the playback
65c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project//        impossible.
66c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project//
67c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Projectenum media_error_type {
68c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project    // 0xx
69c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project    MEDIA_ERROR_UNKNOWN = 1,
70c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project    // 1xx
71c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project    MEDIA_ERROR_SERVER_DIED = 100,
72c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project    // 2xx
73c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project    MEDIA_ERROR_NOT_VALID_FOR_PROGRESSIVE_PLAYBACK = 200,
74c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project    // 3xx
75c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project};
76c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project
77c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project
78c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project// Info and warning codes for the media player framework.  These are non fatal,
79c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project// the playback is going on but there might be some user visible issues.
80c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project//
81c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project// Info and warning messages are communicated back to the client using the
82c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project// MediaPlayerListener::notify method defined below.  In this situation,
83c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project// 'notify' is invoked with the following:
84c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project//   'msg' is set to MEDIA_INFO.
85c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project//   'ext1' should be a value from the enum media_info_type.
8662e73f466e52b98ecc2eef85010618a655b40924Ravi K Yenduri//   'ext2' contains an implementation dependant info code to provide
87c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project//          more details. Should default to 0 when not used.
88c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project//
89c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project// The codes are distributed as follow:
90c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project//   0xx: Reserved
91c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project//   7xx: Android Player info/warning (e.g player lagging behind.)
92c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project//   8xx: Media info/warning (e.g media badly interleaved.)
9332f82774884bdd709789ab9f3ccdf5b972ff7681Nicolas Catania//
94c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Projectenum media_info_type {
95c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project    // 0xx
96c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project    MEDIA_INFO_UNKNOWN = 1,
97c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project    // 7xx
98c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project    // The video is too complex for the decoder: it can't decode frames fast
99c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project    // enough. Possibly only the audio plays fine at this stage.
100c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project    MEDIA_INFO_VIDEO_TRACK_LAGGING = 700,
1014d61f602bf67fe61256c23f090d6119992ad5160Andreas Huber    // MediaPlayer is temporarily pausing playback internally in order to
1024d61f602bf67fe61256c23f090d6119992ad5160Andreas Huber    // buffer more data.
1034d61f602bf67fe61256c23f090d6119992ad5160Andreas Huber    MEDIA_INFO_BUFFERING_START = 701,
1044d61f602bf67fe61256c23f090d6119992ad5160Andreas Huber    // MediaPlayer is resuming playback after filling buffers.
1054d61f602bf67fe61256c23f090d6119992ad5160Andreas Huber    MEDIA_INFO_BUFFERING_END = 702,
106a9d0febdd0f0502ec4f29f77b742e11ceae8a30eJames Dong    // Bandwidth in recent past
107a9d0febdd0f0502ec4f29f77b742e11ceae8a30eJames Dong    MEDIA_INFO_NETWORK_BANDWIDTH = 703,
108a9d0febdd0f0502ec4f29f77b742e11ceae8a30eJames Dong
109c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project    // 8xx
110c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project    // Bad interleaving means that a media has been improperly interleaved or not
111c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project    // interleaved at all, e.g has all the video samples first then all the audio
112c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project    // ones. Video is playing but a lot of disk seek may be happening.
113c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project    MEDIA_INFO_BAD_INTERLEAVING = 800,
114c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project    // The media is not seekable (e.g live stream).
115c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project    MEDIA_INFO_NOT_SEEKABLE = 801,
116b2c693919be966f179080a9ec70a7a82dbf57627Nicolas Catania    // New media metadata is available.
117b2c693919be966f179080a9ec70a7a82dbf57627Nicolas Catania    MEDIA_INFO_METADATA_UPDATE = 802,
118c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project};
119c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project
120c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project
1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectenum media_player_states {
1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    MEDIA_PLAYER_STATE_ERROR        = 0,
1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    MEDIA_PLAYER_IDLE               = 1 << 0,
1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    MEDIA_PLAYER_INITIALIZED        = 1 << 1,
1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    MEDIA_PLAYER_PREPARING          = 1 << 2,
1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    MEDIA_PLAYER_PREPARED           = 1 << 3,
1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    MEDIA_PLAYER_STARTED            = 1 << 4,
1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    MEDIA_PLAYER_PAUSED             = 1 << 5,
1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    MEDIA_PLAYER_STOPPED            = 1 << 6,
1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    MEDIA_PLAYER_PLAYBACK_COMPLETE  = 1 << 7
1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project};
1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1346ff9b812abe388478bbaba118a580c3f4a30c863Glenn Kasten// Keep KEY_PARAMETER_* in sync with MediaPlayer.java.
1356ff9b812abe388478bbaba118a580c3f4a30c863Glenn Kasten// The same enum space is used for both set and get, in case there are future keys that
1366ff9b812abe388478bbaba118a580c3f4a30c863Glenn Kasten// can be both set and get.  But as of now, all parameters are either set only or get only.
1376ff9b812abe388478bbaba118a580c3f4a30c863Glenn Kastenenum media_parameter_keys {
1386ff9b812abe388478bbaba118a580c3f4a30c863Glenn Kasten    KEY_PARAMETER_TIMED_TEXT_TRACK_INDEX = 1000,                // set only
1396ff9b812abe388478bbaba118a580c3f4a30c863Glenn Kasten    KEY_PARAMETER_TIMED_TEXT_ADD_OUT_OF_BAND_SOURCE = 1001,     // set only
140a9d0febdd0f0502ec4f29f77b742e11ceae8a30eJames Dong
141a9d0febdd0f0502ec4f29f77b742e11ceae8a30eJames Dong    // Streaming/buffering parameters
1426ff9b812abe388478bbaba118a580c3f4a30c863Glenn Kasten    KEY_PARAMETER_CACHE_STAT_COLLECT_FREQ_MS = 1100,            // set only
1436ff9b812abe388478bbaba118a580c3f4a30c863Glenn Kasten
1446ff9b812abe388478bbaba118a580c3f4a30c863Glenn Kasten    // Return a Parcel containing a single int, which is the channel count of the
1456ff9b812abe388478bbaba118a580c3f4a30c863Glenn Kasten    // audio track, or zero for error (e.g. no audio track) or unknown.
1466ff9b812abe388478bbaba118a580c3f4a30c863Glenn Kasten    KEY_PARAMETER_AUDIO_CHANNEL_COUNT = 1200,                   // get only
1476ff9b812abe388478bbaba118a580c3f4a30c863Glenn Kasten
148c6091ddd3a22da98b5e83d4b5d864939b451b752Gloria Wang};
1496ff9b812abe388478bbaba118a580c3f4a30c863Glenn Kasten
1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ----------------------------------------------------------------------------
1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ref-counted object for callbacks
1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass MediaPlayerListener: virtual public RefBase
1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic:
155162ee49e1ce8800de80697fdd0e0e42ad7e9374eGloria Wang    virtual void notify(int msg, int ext1, int ext2, const Parcel *obj) = 0;
1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project};
1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
15834bbc22cbca0004475788f06be2300fef23c6a52James Dongclass MediaPlayer : public BnMediaPlayerClient,
15934bbc22cbca0004475788f06be2300fef23c6a52James Dong                    public virtual IMediaDeathNotifier
1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic:
1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    MediaPlayer();
1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ~MediaPlayer();
16434bbc22cbca0004475788f06be2300fef23c6a52James Dong            void            died();
1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            void            disconnect();
166256430093679e1d62b54fb0c852126e54d162f6fAndreas Huber
167256430093679e1d62b54fb0c852126e54d162f6fAndreas Huber            status_t        setDataSource(
168256430093679e1d62b54fb0c852126e54d162f6fAndreas Huber                    const char *url,
169256430093679e1d62b54fb0c852126e54d162f6fAndreas Huber                    const KeyedVector<String8, String8> *headers);
170256430093679e1d62b54fb0c852126e54d162f6fAndreas Huber
1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            status_t        setDataSource(int fd, int64_t offset, int64_t length);
172fc301b0bb5c635c6bb51b48c504a8db5f9010e5cDave Burke            status_t        setDataSource(const sp<IStreamSource> &source);
173cc562a3576a6a8096626387472e05e8bee03352aGlenn Kasten            status_t        setVideoSurfaceTexture(
174cc562a3576a6a8096626387472e05e8bee03352aGlenn Kasten                                    const sp<ISurfaceTexture>& surfaceTexture);
1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            status_t        setListener(const sp<MediaPlayerListener>& listener);
1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            status_t        prepare();
1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            status_t        prepareAsync();
1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            status_t        start();
1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            status_t        stop();
1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            status_t        pause();
1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            bool            isPlaying();
1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            status_t        getVideoWidth(int *w);
1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            status_t        getVideoHeight(int *h);
1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            status_t        seekTo(int msec);
1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            status_t        getCurrentPosition(int *msec);
1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            status_t        getDuration(int *msec);
1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            status_t        reset();
1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            status_t        setAudioStreamType(int type);
1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            status_t        setLooping(int loop);
1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            bool            isLooping();
1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            status_t        setVolume(float leftVolume, float rightVolume);
192162ee49e1ce8800de80697fdd0e0e42ad7e9374eGloria Wang            void            notify(int msg, int ext1, int ext2, const Parcel *obj = NULL);
1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    static  sp<IMemory>     decode(const char* url, uint32_t *pSampleRate, int* pNumChannels, int* pFormat);
1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    static  sp<IMemory>     decode(int fd, int64_t offset, int64_t length, uint32_t *pSampleRate, int* pNumChannels, int* pFormat);
19520cb94eeb5b9672573fc86bf51e09bd66a774581Nicolas Catania            status_t        invoke(const Parcel& request, Parcel *reply);
196b2c693919be966f179080a9ec70a7a82dbf57627Nicolas Catania            status_t        setMetadataFilter(const Parcel& filter);
1975d55c7119820ee9bb06fc072e416fe98ba77cd28Nicolas Catania            status_t        getMetadata(bool update_only, bool apply_filter, Parcel *metadata);
198619346f902241736d933657a4fe10f10c50a1ba8Eric Laurent            status_t        setAudioSessionId(int sessionId);
199619346f902241736d933657a4fe10f10c50a1ba8Eric Laurent            int             getAudioSessionId();
2007070b36549d511d6627538c73dfbab23fbae5b43Eric Laurent            status_t        setAuxEffectSendLevel(float level);
2017070b36549d511d6627538c73dfbab23fbae5b43Eric Laurent            status_t        attachAuxEffect(int effectId);
202d01ec6eab019e46398975202e9e4a198a603ad99Gloria Wang            status_t        setParameter(int key, const Parcel& request);
203d01ec6eab019e46398975202e9e4a198a603ad99Gloria Wang            status_t        getParameter(int key, Parcel* reply);
204d01ec6eab019e46398975202e9e4a198a603ad99Gloria Wang
2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectprivate:
2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            void            clear_l();
2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            status_t        seekTo_l(int msec);
2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            status_t        prepareAsync_l();
2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            status_t        getDuration_l(int *msec);
210fc301b0bb5c635c6bb51b48c504a8db5f9010e5cDave Burke            status_t        attachNewPlayer(const sp<IMediaPlayer>& player);
211c85ca5d6b573e1a663a10950578220b4580c285cJamie Gennis            status_t        reset_l();
2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    sp<IMediaPlayer>            mPlayer;
214ebb020aebc157ff127458dc20e1d0066b86bb99dJason Sams    thread_id_t                 mLockThreadId;
2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    Mutex                       mLock;
2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    Mutex                       mNotifyLock;
2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    Condition                   mSignal;
2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    sp<MediaPlayerListener>     mListener;
2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void*                       mCookie;
2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    media_player_states         mCurrentState;
2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    int                         mDuration;
2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    int                         mCurrentPosition;
2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    int                         mSeekPosition;
2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    bool                        mPrepareSync;
2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    status_t                    mPrepareStatus;
2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    int                         mStreamType;
2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    bool                        mLoop;
2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    float                       mLeftVolume;
2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    float                       mRightVolume;
2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    int                         mVideoWidth;
2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    int                         mVideoHeight;
232619346f902241736d933657a4fe10f10c50a1ba8Eric Laurent    int                         mAudioSessionId;
2337070b36549d511d6627538c73dfbab23fbae5b43Eric Laurent    float                       mSendLevel;
2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project};
2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; // namespace android
2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#endif // ANDROID_MEDIAPLAYER_H
239