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 20c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman#include <arpa/inet.h> 21c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman 227562408b2261d38415453378b6188f74fda99d88Mathias Agopian#include <binder/IMemory.h> 2389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#include <media/IMediaPlayerClient.h> 2489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#include <media/IMediaPlayer.h> 25dd172fce75b2a1c3cb3a5d3b3bbb5020b1ae8675James Dong#include <media/IMediaDeathNotifier.h> 26d681bbb1767bed09415e050ba78975df214bcd68Dave Burke#include <media/IStreamSource.h> 2789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 282db8455d8f4468a637109d31f319ce02d9d743ecAndreas Huber#include <utils/KeyedVector.h> 292db8455d8f4468a637109d31f319ce02d9d743ecAndreas Huber#include <utils/String8.h> 302db8455d8f4468a637109d31f319ce02d9d743ecAndreas Huber 3161c7ef5bde2c7ed94a078396aa65da67b47e5402Jamie Gennisclass ANativeWindow; 3261c7ef5bde2c7ed94a078396aa65da67b47e5402Jamie Gennis 3389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectnamespace android { 3489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 353cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopianclass Surface; 36484566c410afdfbc4b6bc5aa1732aef37428a5b8Andy McFaddenclass IGraphicBufferProducer; 373cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian 3889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectenum media_event_type { 3989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project MEDIA_NOP = 0, // interface test message 4089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project MEDIA_PREPARED = 1, 4189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project MEDIA_PLAYBACK_COMPLETE = 2, 4289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project MEDIA_BUFFERING_UPDATE = 3, 4389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project MEDIA_SEEK_COMPLETE = 4, 4489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project MEDIA_SET_VIDEO_SIZE = 5, 45cbaffcffee6418d678806e63097c19fe26d48fe0Lajos Molnar MEDIA_STARTED = 6, 46cbaffcffee6418d678806e63097c19fe26d48fe0Lajos Molnar MEDIA_PAUSED = 7, 47cbaffcffee6418d678806e63097c19fe26d48fe0Lajos Molnar MEDIA_STOPPED = 8, 486218fdc2bef7b9c912bc4d132c12ee43b7b2dd37Lajos Molnar MEDIA_SKIPPED = 9, 49b483c4724846c0b8d4e82afcbb7c17f671bae81cGloria Wang MEDIA_TIMED_TEXT = 99, 5089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project MEDIA_ERROR = 100, 5165e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project MEDIA_INFO = 200, 52dcb89b3b505522efde173c105a851c412f947178Chong Zhang MEDIA_SUBTITLE_DATA = 201, 5389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}; 5489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 5565e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project// Generic error codes for the media player framework. Errors are fatal, the 5665e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project// playback must abort. 5765e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project// 5865e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project// Errors are communicated back to the client using the 5965e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project// MediaPlayerListener::notify method defined below. 6065e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project// In this situation, 'notify' is invoked with the following: 6165e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project// 'msg' is set to MEDIA_ERROR. 6265e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project// 'ext1' should be a value from the enum media_error_type. 6365e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project// 'ext2' contains an implementation dependant error code to provide 6465e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project// more details. Should default to 0 when not used. 6565e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project// 6665e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project// The codes are distributed as follow: 6765e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project// 0xx: Reserved 6865e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project// 1xx: Android Player errors. Something went wrong inside the MediaPlayer. 6965e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project// 2xx: Media errors (e.g Codec not supported). There is a problem with the 7065e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project// media itself. 7165e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project// 3xx: Runtime errors. Some extraordinary condition arose making the playback 7265e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project// impossible. 7365e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project// 7465e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Projectenum media_error_type { 7565e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project // 0xx 7665e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project MEDIA_ERROR_UNKNOWN = 1, 7765e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project // 1xx 7865e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project MEDIA_ERROR_SERVER_DIED = 100, 7965e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project // 2xx 8065e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project MEDIA_ERROR_NOT_VALID_FOR_PROGRESSIVE_PLAYBACK = 200, 8165e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project // 3xx 8265e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project}; 8365e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project 8465e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project 8565e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project// Info and warning codes for the media player framework. These are non fatal, 8665e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project// the playback is going on but there might be some user visible issues. 8765e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project// 8865e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project// Info and warning messages are communicated back to the client using the 8965e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project// MediaPlayerListener::notify method defined below. In this situation, 9065e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project// 'notify' is invoked with the following: 9165e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project// 'msg' is set to MEDIA_INFO. 9265e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project// 'ext1' should be a value from the enum media_info_type. 93387eac4b282b9b403af772f92bcad469ae69177fRavi K Yenduri// 'ext2' contains an implementation dependant info code to provide 9465e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project// more details. Should default to 0 when not used. 9565e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project// 9665e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project// The codes are distributed as follow: 9765e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project// 0xx: Reserved 9865e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project// 7xx: Android Player info/warning (e.g player lagging behind.) 9965e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project// 8xx: Media info/warning (e.g media badly interleaved.) 100660951867e959ebe98612742ef1f72d33ea7e9a3Nicolas Catania// 10165e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Projectenum media_info_type { 10265e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project // 0xx 10365e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project MEDIA_INFO_UNKNOWN = 1, 1046b74d671a1321a6ecc4a40b6c87beedfecc1ec44Marco Nelissen // The player was started because it was used as the next player for another 1056b74d671a1321a6ecc4a40b6c87beedfecc1ec44Marco Nelissen // player, which just completed playback 1066b74d671a1321a6ecc4a40b6c87beedfecc1ec44Marco Nelissen MEDIA_INFO_STARTED_AS_NEXT = 2, 107c374dae535b83d9b499dd9fe8f9dabdb8b0ac9fdJames Dong // The player just pushed the very first video frame for rendering 108c374dae535b83d9b499dd9fe8f9dabdb8b0ac9fdJames Dong MEDIA_INFO_RENDERING_START = 3, 10965e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project // 7xx 11065e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project // The video is too complex for the decoder: it can't decode frames fast 11165e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project // enough. Possibly only the audio plays fine at this stage. 11265e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project MEDIA_INFO_VIDEO_TRACK_LAGGING = 700, 1130a5baa9b411fe086013d2a5e9126ed63fbad046cAndreas Huber // MediaPlayer is temporarily pausing playback internally in order to 1140a5baa9b411fe086013d2a5e9126ed63fbad046cAndreas Huber // buffer more data. 1150a5baa9b411fe086013d2a5e9126ed63fbad046cAndreas Huber MEDIA_INFO_BUFFERING_START = 701, 1160a5baa9b411fe086013d2a5e9126ed63fbad046cAndreas Huber // MediaPlayer is resuming playback after filling buffers. 1170a5baa9b411fe086013d2a5e9126ed63fbad046cAndreas Huber MEDIA_INFO_BUFFERING_END = 702, 1185b1b8a93a07326f1cbc627f09e02988375189e0aJames Dong // Bandwidth in recent past 1195b1b8a93a07326f1cbc627f09e02988375189e0aJames Dong MEDIA_INFO_NETWORK_BANDWIDTH = 703, 1205b1b8a93a07326f1cbc627f09e02988375189e0aJames Dong 12165e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project // 8xx 12265e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project // Bad interleaving means that a media has been improperly interleaved or not 12365e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project // interleaved at all, e.g has all the video samples first then all the audio 12465e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project // ones. Video is playing but a lot of disk seek may be happening. 12565e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project MEDIA_INFO_BAD_INTERLEAVING = 800, 12665e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project // The media is not seekable (e.g live stream). 12765e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project MEDIA_INFO_NOT_SEEKABLE = 801, 128a7e0e8b4c429fc68eb1bd5b5a30f5b91352288f9Nicolas Catania // New media metadata is available. 129a7e0e8b4c429fc68eb1bd5b5a30f5b91352288f9Nicolas Catania MEDIA_INFO_METADATA_UPDATE = 802, 130f9d660a5e0196240add5daf0199f128d471e592cInsun Kang 131f9d660a5e0196240add5daf0199f128d471e592cInsun Kang //9xx 132f9d660a5e0196240add5daf0199f128d471e592cInsun Kang MEDIA_INFO_TIMED_TEXT_ERROR = 900, 13365e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project}; 13465e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project 13565e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project 13689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 13789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectenum media_player_states { 13889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project MEDIA_PLAYER_STATE_ERROR = 0, 13989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project MEDIA_PLAYER_IDLE = 1 << 0, 14089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project MEDIA_PLAYER_INITIALIZED = 1 << 1, 14189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project MEDIA_PLAYER_PREPARING = 1 << 2, 14289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project MEDIA_PLAYER_PREPARED = 1 << 3, 14389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project MEDIA_PLAYER_STARTED = 1 << 4, 14489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project MEDIA_PLAYER_PAUSED = 1 << 5, 14589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project MEDIA_PLAYER_STOPPED = 1 << 6, 14689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project MEDIA_PLAYER_PLAYBACK_COMPLETE = 1 << 7 14789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}; 14889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 149cd25fed09742235fac10953b9d4b77268c695063Glenn Kasten// Keep KEY_PARAMETER_* in sync with MediaPlayer.java. 150cd25fed09742235fac10953b9d4b77268c695063Glenn Kasten// The same enum space is used for both set and get, in case there are future keys that 151cd25fed09742235fac10953b9d4b77268c695063Glenn Kasten// can be both set and get. But as of now, all parameters are either set only or get only. 152cd25fed09742235fac10953b9d4b77268c695063Glenn Kastenenum media_parameter_keys { 1535b1b8a93a07326f1cbc627f09e02988375189e0aJames Dong // Streaming/buffering parameters 154cd25fed09742235fac10953b9d4b77268c695063Glenn Kasten KEY_PARAMETER_CACHE_STAT_COLLECT_FREQ_MS = 1100, // set only 155cd25fed09742235fac10953b9d4b77268c695063Glenn Kasten 156cd25fed09742235fac10953b9d4b77268c695063Glenn Kasten // Return a Parcel containing a single int, which is the channel count of the 157cd25fed09742235fac10953b9d4b77268c695063Glenn Kasten // audio track, or zero for error (e.g. no audio track) or unknown. 158cd25fed09742235fac10953b9d4b77268c695063Glenn Kasten KEY_PARAMETER_AUDIO_CHANNEL_COUNT = 1200, // get only 159cd25fed09742235fac10953b9d4b77268c695063Glenn Kasten 1607a8b0ed6419e57dd8b41d3806893d63d3df91aabJean-Michel Trivi // Playback rate expressed in permille (1000 is normal speed), saved as int32_t, with negative 1617a8b0ed6419e57dd8b41d3806893d63d3df91aabJean-Michel Trivi // values used for rewinding or reverse playback. 1627a8b0ed6419e57dd8b41d3806893d63d3df91aabJean-Michel Trivi KEY_PARAMETER_PLAYBACK_RATE_PERMILLE = 1300, // set only 163d9d7fa0873796ac661c44a7fcd6ad5ff697ff01fJean-Michel Trivi 164d9d7fa0873796ac661c44a7fcd6ad5ff697ff01fJean-Michel Trivi // Set a Parcel containing the value of a parcelled Java AudioAttribute instance 165d9d7fa0873796ac661c44a7fcd6ad5ff697ff01fJean-Michel Trivi KEY_PARAMETER_AUDIO_ATTRIBUTES = 1400 // set only 1667a1e3e81264189e23a1db2b174e1b5a5d4c7d1c3Gloria Wang}; 167cd25fed09742235fac10953b9d4b77268c695063Glenn Kasten 168f9d660a5e0196240add5daf0199f128d471e592cInsun Kang// Keep INVOKE_ID_* in sync with MediaPlayer.java. 169f9d660a5e0196240add5daf0199f128d471e592cInsun Kangenum media_player_invoke_ids { 170f9d660a5e0196240add5daf0199f128d471e592cInsun Kang INVOKE_ID_GET_TRACK_INFO = 1, 171f9d660a5e0196240add5daf0199f128d471e592cInsun Kang INVOKE_ID_ADD_EXTERNAL_SOURCE = 2, 172f9d660a5e0196240add5daf0199f128d471e592cInsun Kang INVOKE_ID_ADD_EXTERNAL_SOURCE_FD = 3, 173f9d660a5e0196240add5daf0199f128d471e592cInsun Kang INVOKE_ID_SELECT_TRACK = 4, 174f9d660a5e0196240add5daf0199f128d471e592cInsun Kang INVOKE_ID_UNSELECT_TRACK = 5, 1757c4f0d757bfeedaab4b7ef4ccf5b0a72ec8f4306Robert Shih INVOKE_ID_SET_VIDEO_SCALING_MODE = 6, 1767c4f0d757bfeedaab4b7ef4ccf5b0a72ec8f4306Robert Shih INVOKE_ID_GET_SELECTED_TRACK = 7 177f9d660a5e0196240add5daf0199f128d471e592cInsun Kang}; 178f9d660a5e0196240add5daf0199f128d471e592cInsun Kang 179f9d660a5e0196240add5daf0199f128d471e592cInsun Kang// Keep MEDIA_TRACK_TYPE_* in sync with MediaPlayer.java. 180f9d660a5e0196240add5daf0199f128d471e592cInsun Kangenum media_track_type { 181f9d660a5e0196240add5daf0199f128d471e592cInsun Kang MEDIA_TRACK_TYPE_UNKNOWN = 0, 182f9d660a5e0196240add5daf0199f128d471e592cInsun Kang MEDIA_TRACK_TYPE_VIDEO = 1, 183f9d660a5e0196240add5daf0199f128d471e592cInsun Kang MEDIA_TRACK_TYPE_AUDIO = 2, 184f9d660a5e0196240add5daf0199f128d471e592cInsun Kang MEDIA_TRACK_TYPE_TIMEDTEXT = 3, 185dcb89b3b505522efde173c105a851c412f947178Chong Zhang MEDIA_TRACK_TYPE_SUBTITLE = 4, 186f9d660a5e0196240add5daf0199f128d471e592cInsun Kang}; 187f9d660a5e0196240add5daf0199f128d471e592cInsun Kang 18889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project// ---------------------------------------------------------------------------- 18989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project// ref-counted object for callbacks 19089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectclass MediaPlayerListener: virtual public RefBase 19189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{ 19289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectpublic: 193b483c4724846c0b8d4e82afcbb7c17f671bae81cGloria Wang virtual void notify(int msg, int ext1, int ext2, const Parcel *obj) = 0; 19489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}; 19589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 1961b86fe063badb5f28c467ade39be0f4008688947Andreas Huberstruct IMediaHTTPService; 1971b86fe063badb5f28c467ade39be0f4008688947Andreas Huber 198dd172fce75b2a1c3cb3a5d3b3bbb5020b1ae8675James Dongclass MediaPlayer : public BnMediaPlayerClient, 199dd172fce75b2a1c3cb3a5d3b3bbb5020b1ae8675James Dong public virtual IMediaDeathNotifier 20089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{ 20189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectpublic: 20289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project MediaPlayer(); 20389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project ~MediaPlayer(); 204dd172fce75b2a1c3cb3a5d3b3bbb5020b1ae8675James Dong void died(); 20589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project void disconnect(); 2062db8455d8f4468a637109d31f319ce02d9d743ecAndreas Huber 2072db8455d8f4468a637109d31f319ce02d9d743ecAndreas Huber status_t setDataSource( 2081b86fe063badb5f28c467ade39be0f4008688947Andreas Huber const sp<IMediaHTTPService> &httpService, 2092db8455d8f4468a637109d31f319ce02d9d743ecAndreas Huber const char *url, 2102db8455d8f4468a637109d31f319ce02d9d743ecAndreas Huber const KeyedVector<String8, String8> *headers); 2112db8455d8f4468a637109d31f319ce02d9d743ecAndreas Huber 21289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t setDataSource(int fd, int64_t offset, int64_t length); 213d681bbb1767bed09415e050ba78975df214bcd68Dave Burke status_t setDataSource(const sp<IStreamSource> &source); 2141173118eace0e9e347cb007f0da817cee87579edGlenn Kasten status_t setVideoSurfaceTexture( 215484566c410afdfbc4b6bc5aa1732aef37428a5b8Andy McFadden const sp<IGraphicBufferProducer>& bufferProducer); 21689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t setListener(const sp<MediaPlayerListener>& listener); 21789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t prepare(); 21889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t prepareAsync(); 21989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t start(); 22089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t stop(); 22189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t pause(); 22289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project bool isPlaying(); 22389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t getVideoWidth(int *w); 22489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t getVideoHeight(int *h); 22589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t seekTo(int msec); 22689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t getCurrentPosition(int *msec); 22789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t getDuration(int *msec); 22889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t reset(); 229fff6d715a8db0daf08a50634f242c40268de3d49Glenn Kasten status_t setAudioStreamType(audio_stream_type_t type); 230de9453fb5cbc9cd69fd1ea45d577851e3aa3b8c9John Spurlock status_t getAudioStreamType(audio_stream_type_t *type); 23189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t setLooping(int loop); 23289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project bool isLooping(); 23389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t setVolume(float leftVolume, float rightVolume); 234b483c4724846c0b8d4e82afcbb7c17f671bae81cGloria Wang void notify(int msg, int ext1, int ext2, const Parcel *obj = NULL); 2351b86fe063badb5f28c467ade39be0f4008688947Andreas Huber static status_t decode( 2361b86fe063badb5f28c467ade39be0f4008688947Andreas Huber const sp<IMediaHTTPService> &httpService, 2371b86fe063badb5f28c467ade39be0f4008688947Andreas Huber const char* url, 2381b86fe063badb5f28c467ade39be0f4008688947Andreas Huber uint32_t *pSampleRate, 2391b86fe063badb5f28c467ade39be0f4008688947Andreas Huber int* pNumChannels, 2401b86fe063badb5f28c467ade39be0f4008688947Andreas Huber audio_format_t* pFormat, 2411b86fe063badb5f28c467ade39be0f4008688947Andreas Huber const sp<IMemoryHeap>& heap, 2421b86fe063badb5f28c467ade39be0f4008688947Andreas Huber size_t *pSize); 2433d00aa6de95fb46e36f2bab4e3facdf0b96acf06Eric Laurent static status_t decode(int fd, int64_t offset, int64_t length, uint32_t *pSampleRate, 2443d00aa6de95fb46e36f2bab4e3facdf0b96acf06Eric Laurent int* pNumChannels, audio_format_t* pFormat, 2453d00aa6de95fb46e36f2bab4e3facdf0b96acf06Eric Laurent const sp<IMemoryHeap>& heap, size_t *pSize); 2461d187f1a86855f5f0694d7ec30efc9833bf7c589Nicolas Catania status_t invoke(const Parcel& request, Parcel *reply); 247a7e0e8b4c429fc68eb1bd5b5a30f5b91352288f9Nicolas Catania status_t setMetadataFilter(const Parcel& filter); 2488e1b6cce24574b9ecd5b0300155776bd0b4ef756Nicolas Catania status_t getMetadata(bool update_only, bool apply_filter, Parcel *metadata); 249a514bdb58b5de4986679f72b7204b4764f7a2778Eric Laurent status_t setAudioSessionId(int sessionId); 250a514bdb58b5de4986679f72b7204b4764f7a2778Eric Laurent int getAudioSessionId(); 2512beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent status_t setAuxEffectSendLevel(float level); 2522beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent status_t attachAuxEffect(int effectId); 2534f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang status_t setParameter(int key, const Parcel& request); 2544f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang status_t getParameter(int key, Parcel* reply); 255c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman status_t setRetransmitEndpoint(const char* addrString, uint16_t port); 2566b74d671a1321a6ecc4a40b6c87beedfecc1ec44Marco Nelissen status_t setNextMediaPlayer(const sp<MediaPlayer>& player); 2574f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang 25889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectprivate: 25989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project void clear_l(); 26089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t seekTo_l(int msec); 26189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t prepareAsync_l(); 26289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t getDuration_l(int *msec); 263d681bbb1767bed09415e050ba78975df214bcd68Dave Burke status_t attachNewPlayer(const sp<IMediaPlayer>& player); 26461c7ef5bde2c7ed94a078396aa65da67b47e5402Jamie Gennis status_t reset_l(); 265c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman status_t doSetRetransmitEndpoint(const sp<IMediaPlayer>& player); 266d9d7fa0873796ac661c44a7fcd6ad5ff697ff01fJean-Michel Trivi status_t checkStateForKeySet_l(int key); 26789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 26889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project sp<IMediaPlayer> mPlayer; 2691af452f333664e8b0a61d96a9b3bb682d8b9a00fJason Sams thread_id_t mLockThreadId; 27089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Mutex mLock; 27189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Mutex mNotifyLock; 27289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Condition mSignal; 27389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project sp<MediaPlayerListener> mListener; 27489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project void* mCookie; 27589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project media_player_states mCurrentState; 27689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int mCurrentPosition; 27789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int mSeekPosition; 27889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project bool mPrepareSync; 27989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t mPrepareStatus; 280fff6d715a8db0daf08a50634f242c40268de3d49Glenn Kasten audio_stream_type_t mStreamType; 281640adb3cf89cc9b826372009fad8c9b3d120482eJean-Michel Trivi Parcel* mAudioAttributesParcel; 28289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project bool mLoop; 28389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project float mLeftVolume; 28489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project float mRightVolume; 28589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int mVideoWidth; 28689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int mVideoHeight; 287a514bdb58b5de4986679f72b7204b4764f7a2778Eric Laurent int mAudioSessionId; 2882beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent float mSendLevel; 289c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman struct sockaddr_in mRetransmitEndpoint; 290c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman bool mRetransmitEndpointValid; 29189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}; 29289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 29389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}; // namespace android 29489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 29589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#endif // ANDROID_MEDIAPLAYER_H 296