1e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman/* 2e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * Copyright (C) 2007 The Android Open Source Project 3e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * 4e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * Licensed under the Apache License, Version 2.0 (the "License"); 5e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * you may not use this file except in compliance with the License. 6e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * You may obtain a copy of the License at 7e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * 8e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * http://www.apache.org/licenses/LICENSE-2.0 9e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * 10e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * Unless required by applicable law or agreed to in writing, software 11e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * distributed under the License is distributed on an "AS IS" BASIS, 12e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * See the License for the specific language governing permissions and 14e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * limitations under the License. 15e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman */ 16e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 17e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman#ifndef ANDROID_MEDIAPLAYER_H 18e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman#define ANDROID_MEDIAPLAYER_H 19e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 20e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman#include <arpa/inet.h> 21e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 22e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman#include <binder/IMemory.h> 23e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 24e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman#include <media/AudioResamplerPublic.h> 25e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman#include <media/BufferingSettings.h> 26e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman#include <media/IMediaPlayerClient.h> 27e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman#include <media/IMediaPlayer.h> 28e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman#include <media/IMediaDeathNotifier.h> 29e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman#include <media/IStreamSource.h> 30e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 31e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman#include <utils/KeyedVector.h> 32e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman#include <utils/String8.h> 33e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 34e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatramanstruct ANativeWindow; 35e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 36e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatramannamespace android { 37e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 38e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatramanstruct AVSyncSettings; 39e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatramanclass IGraphicBufferProducer; 40e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatramanclass Surface; 41e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 42e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatramanenum media_event_type { 43e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman MEDIA_NOP = 0, // interface test message 44e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman MEDIA_PREPARED = 1, 45e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman MEDIA_PLAYBACK_COMPLETE = 2, 46e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman MEDIA_BUFFERING_UPDATE = 3, 47e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman MEDIA_SEEK_COMPLETE = 4, 48e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman MEDIA_SET_VIDEO_SIZE = 5, 49e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman MEDIA_STARTED = 6, 50e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman MEDIA_PAUSED = 7, 51e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman MEDIA_STOPPED = 8, 52e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman MEDIA_SKIPPED = 9, 53e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman MEDIA_TIMED_TEXT = 99, 54e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman MEDIA_ERROR = 100, 55e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman MEDIA_INFO = 200, 56e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman MEDIA_SUBTITLE_DATA = 201, 57e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman MEDIA_META_DATA = 202, 58e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman MEDIA_DRM_INFO = 210, 59e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman}; 60e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 61e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman// Generic error codes for the media player framework. Errors are fatal, the 62e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman// playback must abort. 63e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman// 64e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman// Errors are communicated back to the client using the 65e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman// MediaPlayerListener::notify method defined below. 66e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman// In this situation, 'notify' is invoked with the following: 67e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman// 'msg' is set to MEDIA_ERROR. 68e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman// 'ext1' should be a value from the enum media_error_type. 69e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman// 'ext2' contains an implementation dependant error code to provide 70e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman// more details. Should default to 0 when not used. 71e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman// 72e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman// The codes are distributed as follow: 73e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman// 0xx: Reserved 74e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman// 1xx: Android Player errors. Something went wrong inside the MediaPlayer. 75e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman// 2xx: Media errors (e.g Codec not supported). There is a problem with the 76e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman// media itself. 77e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman// 3xx: Runtime errors. Some extraordinary condition arose making the playback 78e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman// impossible. 79e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman// 80e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatramanenum media_error_type { 81e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman // 0xx 82e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman MEDIA_ERROR_UNKNOWN = 1, 83e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman // 1xx 84e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman MEDIA_ERROR_SERVER_DIED = 100, 85e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman // 2xx 86e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman MEDIA_ERROR_NOT_VALID_FOR_PROGRESSIVE_PLAYBACK = 200, 87e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman // 3xx 88e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman}; 89e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 90e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 91e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman// Info and warning codes for the media player framework. These are non fatal, 92e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman// the playback is going on but there might be some user visible issues. 93e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman// 94e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman// Info and warning messages are communicated back to the client using the 95e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman// MediaPlayerListener::notify method defined below. In this situation, 96e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman// 'notify' is invoked with the following: 97e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman// 'msg' is set to MEDIA_INFO. 98e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman// 'ext1' should be a value from the enum media_info_type. 99e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman// 'ext2' contains an implementation dependant info code to provide 100e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman// more details. Should default to 0 when not used. 101e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman// 102e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman// The codes are distributed as follow: 103e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman// 0xx: Reserved 104e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman// 7xx: Android Player info/warning (e.g player lagging behind.) 105e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman// 8xx: Media info/warning (e.g media badly interleaved.) 106e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman// 107e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatramanenum media_info_type { 108e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman // 0xx 109e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman MEDIA_INFO_UNKNOWN = 1, 110e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman // The player was started because it was used as the next player for another 111e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman // player, which just completed playback 112e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman MEDIA_INFO_STARTED_AS_NEXT = 2, 113e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman // The player just pushed the very first video frame for rendering 114e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman MEDIA_INFO_RENDERING_START = 3, 115e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman // 7xx 116e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman // The video is too complex for the decoder: it can't decode frames fast 117e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman // enough. Possibly only the audio plays fine at this stage. 118e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman MEDIA_INFO_VIDEO_TRACK_LAGGING = 700, 119e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman // MediaPlayer is temporarily pausing playback internally in order to 120e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman // buffer more data. 121e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman MEDIA_INFO_BUFFERING_START = 701, 122e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman // MediaPlayer is resuming playback after filling buffers. 123e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman MEDIA_INFO_BUFFERING_END = 702, 124e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman // Bandwidth in recent past 125e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman MEDIA_INFO_NETWORK_BANDWIDTH = 703, 126e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 127e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman // 8xx 128e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman // Bad interleaving means that a media has been improperly interleaved or not 129e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman // interleaved at all, e.g has all the video samples first then all the audio 130e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman // ones. Video is playing but a lot of disk seek may be happening. 131e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman MEDIA_INFO_BAD_INTERLEAVING = 800, 132e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman // The media is not seekable (e.g live stream). 133e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman MEDIA_INFO_NOT_SEEKABLE = 801, 134e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman // New media metadata is available. 135e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman MEDIA_INFO_METADATA_UPDATE = 802, 136686e8e57299151127c4ae30daf84a21cd947bf65Wei Jia // Audio can not be played. 137686e8e57299151127c4ae30daf84a21cd947bf65Wei Jia MEDIA_INFO_PLAY_AUDIO_ERROR = 804, 138686e8e57299151127c4ae30daf84a21cd947bf65Wei Jia // Video can not be played. 139686e8e57299151127c4ae30daf84a21cd947bf65Wei Jia MEDIA_INFO_PLAY_VIDEO_ERROR = 805, 140e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 141e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman //9xx 142e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman MEDIA_INFO_TIMED_TEXT_ERROR = 900, 143e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman}; 144e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 145e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 146e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 147e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatramanenum media_player_states { 148e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman MEDIA_PLAYER_STATE_ERROR = 0, 149e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman MEDIA_PLAYER_IDLE = 1 << 0, 150e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman MEDIA_PLAYER_INITIALIZED = 1 << 1, 151e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman MEDIA_PLAYER_PREPARING = 1 << 2, 152e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman MEDIA_PLAYER_PREPARED = 1 << 3, 153e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman MEDIA_PLAYER_STARTED = 1 << 4, 154e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman MEDIA_PLAYER_PAUSED = 1 << 5, 155e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman MEDIA_PLAYER_STOPPED = 1 << 6, 156e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman MEDIA_PLAYER_PLAYBACK_COMPLETE = 1 << 7 157e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman}; 158e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 159e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman// Keep KEY_PARAMETER_* in sync with MediaPlayer.java. 160e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman// The same enum space is used for both set and get, in case there are future keys that 161e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman// can be both set and get. But as of now, all parameters are either set only or get only. 162e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatramanenum media_parameter_keys { 163e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman // Streaming/buffering parameters 164e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman KEY_PARAMETER_CACHE_STAT_COLLECT_FREQ_MS = 1100, // set only 165e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 166e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman // Return a Parcel containing a single int, which is the channel count of the 167e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman // audio track, or zero for error (e.g. no audio track) or unknown. 168e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman KEY_PARAMETER_AUDIO_CHANNEL_COUNT = 1200, // get only 169e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 170e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman // Playback rate expressed in permille (1000 is normal speed), saved as int32_t, with negative 171e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman // values used for rewinding or reverse playback. 172e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman KEY_PARAMETER_PLAYBACK_RATE_PERMILLE = 1300, // set only 173e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 174e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman // Set a Parcel containing the value of a parcelled Java AudioAttribute instance 175e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman KEY_PARAMETER_AUDIO_ATTRIBUTES = 1400 // set only 176e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman}; 177e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 178e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman// Keep INVOKE_ID_* in sync with MediaPlayer.java. 179e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatramanenum media_player_invoke_ids { 180e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman INVOKE_ID_GET_TRACK_INFO = 1, 181e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman INVOKE_ID_ADD_EXTERNAL_SOURCE = 2, 182e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman INVOKE_ID_ADD_EXTERNAL_SOURCE_FD = 3, 183e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman INVOKE_ID_SELECT_TRACK = 4, 184e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman INVOKE_ID_UNSELECT_TRACK = 5, 185e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman INVOKE_ID_SET_VIDEO_SCALING_MODE = 6, 186e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman INVOKE_ID_GET_SELECTED_TRACK = 7 187e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman}; 188e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 189e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman// Keep MEDIA_TRACK_TYPE_* in sync with MediaPlayer.java. 190e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatramanenum media_track_type { 191e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman MEDIA_TRACK_TYPE_UNKNOWN = 0, 192e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman MEDIA_TRACK_TYPE_VIDEO = 1, 193e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman MEDIA_TRACK_TYPE_AUDIO = 2, 194e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman MEDIA_TRACK_TYPE_TIMEDTEXT = 3, 195e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman MEDIA_TRACK_TYPE_SUBTITLE = 4, 196e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman MEDIA_TRACK_TYPE_METADATA = 5, 197e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman}; 198e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 199e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman// ---------------------------------------------------------------------------- 200e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman// ref-counted object for callbacks 201e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatramanclass MediaPlayerListener: virtual public RefBase 202e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman{ 203e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatramanpublic: 204e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman virtual void notify(int msg, int ext1, int ext2, const Parcel *obj) = 0; 205e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman}; 206e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 207e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatramanstruct IMediaHTTPService; 208e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 209e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatramanclass MediaPlayer : public BnMediaPlayerClient, 210e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman public virtual IMediaDeathNotifier 211e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman{ 212e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatramanpublic: 213e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman MediaPlayer(); 214e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman ~MediaPlayer(); 215e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman void died(); 216e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman void disconnect(); 217e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 218e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman status_t setDataSource( 219e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman const sp<IMediaHTTPService> &httpService, 220e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman const char *url, 221e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman const KeyedVector<String8, String8> *headers); 222e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 223e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman status_t setDataSource(int fd, int64_t offset, int64_t length); 224e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman status_t setDataSource(const sp<IDataSource> &source); 225e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman status_t setVideoSurfaceTexture( 226e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman const sp<IGraphicBufferProducer>& bufferProducer); 227e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman status_t setListener(const sp<MediaPlayerListener>& listener); 228e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman status_t getDefaultBufferingSettings(BufferingSettings* buffering /* nonnull */); 229e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman status_t getBufferingSettings(BufferingSettings* buffering /* nonnull */); 230e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman status_t setBufferingSettings(const BufferingSettings& buffering); 231e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman status_t prepare(); 232e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman status_t prepareAsync(); 233e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman status_t start(); 234e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman status_t stop(); 235e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman status_t pause(); 236e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman bool isPlaying(); 237e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman status_t setPlaybackSettings(const AudioPlaybackRate& rate); 238e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman status_t getPlaybackSettings(AudioPlaybackRate* rate /* nonnull */); 239e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman status_t setSyncSettings(const AVSyncSettings& sync, float videoFpsHint); 240e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman status_t getSyncSettings( 241e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman AVSyncSettings* sync /* nonnull */, 242e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman float* videoFps /* nonnull */); 243e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman status_t getVideoWidth(int *w); 244e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman status_t getVideoHeight(int *h); 245e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman status_t seekTo( 246e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman int msec, 247e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman MediaPlayerSeekMode mode = MediaPlayerSeekMode::SEEK_PREVIOUS_SYNC); 248e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman status_t getCurrentPosition(int *msec); 249e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman status_t getDuration(int *msec); 250e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman status_t reset(); 251e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman status_t setAudioStreamType(audio_stream_type_t type); 252e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman status_t getAudioStreamType(audio_stream_type_t *type); 253e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman status_t setLooping(int loop); 254e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman bool isLooping(); 255e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman status_t setVolume(float leftVolume, float rightVolume); 256e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman void notify(int msg, int ext1, int ext2, const Parcel *obj = NULL); 257e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman status_t invoke(const Parcel& request, Parcel *reply); 258e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman status_t setMetadataFilter(const Parcel& filter); 259e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman status_t getMetadata(bool update_only, bool apply_filter, Parcel *metadata); 260e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman status_t setAudioSessionId(audio_session_t sessionId); 261e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman audio_session_t getAudioSessionId(); 262e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman status_t setAuxEffectSendLevel(float level); 263e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman status_t attachAuxEffect(int effectId); 264e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman status_t setParameter(int key, const Parcel& request); 265e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman status_t getParameter(int key, Parcel* reply); 266e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman status_t setRetransmitEndpoint(const char* addrString, uint16_t port); 267e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman status_t setNextMediaPlayer(const sp<MediaPlayer>& player); 268e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 269e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman VolumeShaper::Status applyVolumeShaper( 270e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman const sp<VolumeShaper::Configuration>& configuration, 271e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman const sp<VolumeShaper::Operation>& operation); 272e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman sp<VolumeShaper::State> getVolumeShaperState(int id); 273e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman // Modular DRM 274e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman status_t prepareDrm(const uint8_t uuid[16], const Vector<uint8_t>& drmSessionId); 275e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman status_t releaseDrm(); 276e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 277e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatramanprivate: 278e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman void clear_l(); 279e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman status_t seekTo_l(int msec, MediaPlayerSeekMode mode); 280e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman status_t prepareAsync_l(); 281e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman status_t getDuration_l(int *msec); 282e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman status_t attachNewPlayer(const sp<IMediaPlayer>& player); 283e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman status_t reset_l(); 284e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman status_t doSetRetransmitEndpoint(const sp<IMediaPlayer>& player); 285e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman status_t checkStateForKeySet_l(int key); 286e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 287e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman sp<IMediaPlayer> mPlayer; 288e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman thread_id_t mLockThreadId; 289e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman Mutex mLock; 290e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman Mutex mNotifyLock; 291e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman Condition mSignal; 292e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman sp<MediaPlayerListener> mListener; 293e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman void* mCookie; 294e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman media_player_states mCurrentState; 295e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman int mCurrentPosition; 296e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman MediaPlayerSeekMode mCurrentSeekMode; 297e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman int mSeekPosition; 298e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman MediaPlayerSeekMode mSeekMode; 299e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman bool mPrepareSync; 300e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman status_t mPrepareStatus; 301e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman audio_stream_type_t mStreamType; 302e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman Parcel* mAudioAttributesParcel; 303e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman bool mLoop; 304e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman float mLeftVolume; 305e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman float mRightVolume; 306e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman int mVideoWidth; 307e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman int mVideoHeight; 308e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman audio_session_t mAudioSessionId; 309e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman float mSendLevel; 310e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman struct sockaddr_in mRetransmitEndpoint; 311e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman bool mRetransmitEndpointValid; 312e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman BufferingSettings mCurrentBufferingSettings; 313e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman}; 314e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 315e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman}; // namespace android 316e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 317e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman#endif // ANDROID_MEDIAPLAYER_H 318