Andreas Huber | 27366fc | 2009-11-20 09:32:46 -0800 | [diff] [blame] | 1 | /* |
| 2 | * Copyright (C) 2009 The Android Open Source Project |
| 3 | * |
| 4 | * Licensed under the Apache License, Version 2.0 (the "License"); |
| 5 | * you may not use this file except in compliance with the License. |
| 6 | * You may obtain a copy of the License at |
| 7 | * |
| 8 | * http://www.apache.org/licenses/LICENSE-2.0 |
| 9 | * |
| 10 | * Unless required by applicable law or agreed to in writing, software |
| 11 | * distributed under the License is distributed on an "AS IS" BASIS, |
| 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| 13 | * See the License for the specific language governing permissions and |
| 14 | * limitations under the License. |
| 15 | */ |
| 16 | |
| 17 | #ifndef AWESOME_PLAYER_H_ |
| 18 | |
| 19 | #define AWESOME_PLAYER_H_ |
| 20 | |
Andreas Huber | 5f5719e | 2011-03-08 15:59:28 -0800 | [diff] [blame] | 21 | #include "HTTPBase.h" |
Andreas Huber | 27366fc | 2009-11-20 09:32:46 -0800 | [diff] [blame] | 22 | #include "TimedEventQueue.h" |
| 23 | |
| 24 | #include <media/MediaPlayerInterface.h> |
Andreas Huber | 7b73cfc | 2010-02-12 14:40:08 -0800 | [diff] [blame] | 25 | #include <media/stagefright/DataSource.h> |
Andreas Huber | 27366fc | 2009-11-20 09:32:46 -0800 | [diff] [blame] | 26 | #include <media/stagefright/OMXClient.h> |
Andreas Huber | 971305d | 2010-07-07 13:35:27 -0700 | [diff] [blame] | 27 | #include <media/stagefright/TimeSource.h> |
Andreas Huber | 27366fc | 2009-11-20 09:32:46 -0800 | [diff] [blame] | 28 | #include <utils/threads.h> |
Gloria Wang | d577091 | 2010-06-22 13:55:38 -0700 | [diff] [blame] | 29 | #include <drm/DrmManagerClient.h> |
Andreas Huber | 27366fc | 2009-11-20 09:32:46 -0800 | [diff] [blame] | 30 | |
| 31 | namespace android { |
| 32 | |
Andreas Huber | b9e6383 | 2010-01-26 16:20:10 -0800 | [diff] [blame] | 33 | struct AudioPlayer; |
Andreas Huber | ba7ec91 | 2010-02-12 10:42:02 -0800 | [diff] [blame] | 34 | struct DataSource; |
Andreas Huber | 27366fc | 2009-11-20 09:32:46 -0800 | [diff] [blame] | 35 | struct MediaBuffer; |
| 36 | struct MediaExtractor; |
| 37 | struct MediaSource; |
Andreas Huber | 4d61f60 | 2010-06-10 11:17:50 -0700 | [diff] [blame] | 38 | struct NuCachedSource2; |
Glenn Kasten | cc562a3 | 2011-02-08 17:26:17 -0800 | [diff] [blame] | 39 | struct ISurfaceTexture; |
Andreas Huber | 27366fc | 2009-11-20 09:32:46 -0800 | [diff] [blame] | 40 | |
Andreas Huber | 7a747b8 | 2010-06-07 15:19:40 -0700 | [diff] [blame] | 41 | struct ALooper; |
| 42 | struct ARTSPController; |
| 43 | |
Gloria Wang | d577091 | 2010-06-22 13:55:38 -0700 | [diff] [blame] | 44 | class DrmManagerClinet; |
| 45 | class DecryptHandle; |
Andreas Huber | 27366fc | 2009-11-20 09:32:46 -0800 | [diff] [blame] | 46 | |
Gloria Wang | c6091dd | 2011-05-03 15:59:03 -0700 | [diff] [blame] | 47 | class TimedTextPlayer; |
| 48 | |
Andreas Huber | 1314e73 | 2009-12-14 14:18:22 -0800 | [diff] [blame] | 49 | struct AwesomeRenderer : public RefBase { |
| 50 | AwesomeRenderer() {} |
| 51 | |
| 52 | virtual void render(MediaBuffer *buffer) = 0; |
| 53 | |
| 54 | private: |
| 55 | AwesomeRenderer(const AwesomeRenderer &); |
| 56 | AwesomeRenderer &operator=(const AwesomeRenderer &); |
| 57 | }; |
| 58 | |
Andreas Huber | 27366fc | 2009-11-20 09:32:46 -0800 | [diff] [blame] | 59 | struct AwesomePlayer { |
| 60 | AwesomePlayer(); |
| 61 | ~AwesomePlayer(); |
| 62 | |
Andreas Huber | a3f4384 | 2010-01-21 10:28:45 -0800 | [diff] [blame] | 63 | void setListener(const wp<MediaPlayerBase> &listener); |
Andreas Huber | 27366fc | 2009-11-20 09:32:46 -0800 | [diff] [blame] | 64 | |
Andreas Huber | 433c9ac | 2010-01-27 16:49:05 -0800 | [diff] [blame] | 65 | status_t setDataSource( |
| 66 | const char *uri, |
| 67 | const KeyedVector<String8, String8> *headers = NULL); |
| 68 | |
Andreas Huber | 27366fc | 2009-11-20 09:32:46 -0800 | [diff] [blame] | 69 | status_t setDataSource(int fd, int64_t offset, int64_t length); |
| 70 | |
Andreas Huber | 52b52cd | 2010-11-23 11:41:34 -0800 | [diff] [blame] | 71 | status_t setDataSource(const sp<IStreamSource> &source); |
| 72 | |
Andreas Huber | 27366fc | 2009-11-20 09:32:46 -0800 | [diff] [blame] | 73 | void reset(); |
| 74 | |
Andreas Huber | 6be780e | 2010-02-08 14:40:30 -0800 | [diff] [blame] | 75 | status_t prepare(); |
Andreas Huber | ffdf478 | 2010-02-09 14:05:43 -0800 | [diff] [blame] | 76 | status_t prepare_l(); |
Andreas Huber | 6be780e | 2010-02-08 14:40:30 -0800 | [diff] [blame] | 77 | status_t prepareAsync(); |
| 78 | status_t prepareAsync_l(); |
| 79 | |
Andreas Huber | 27366fc | 2009-11-20 09:32:46 -0800 | [diff] [blame] | 80 | status_t play(); |
| 81 | status_t pause(); |
| 82 | |
| 83 | bool isPlaying() const; |
| 84 | |
Andreas Huber | e3c0183 | 2010-08-16 08:49:37 -0700 | [diff] [blame] | 85 | void setSurface(const sp<Surface> &surface); |
Glenn Kasten | cc562a3 | 2011-02-08 17:26:17 -0800 | [diff] [blame] | 86 | void setSurfaceTexture(const sp<ISurfaceTexture> &surfaceTexture); |
Andreas Huber | 27366fc | 2009-11-20 09:32:46 -0800 | [diff] [blame] | 87 | void setAudioSink(const sp<MediaPlayerBase::AudioSink> &audioSink); |
| 88 | status_t setLooping(bool shouldLoop); |
| 89 | |
| 90 | status_t getDuration(int64_t *durationUs); |
| 91 | status_t getPosition(int64_t *positionUs); |
| 92 | |
Gloria Wang | d01ec6e | 2011-04-25 17:28:22 -0700 | [diff] [blame] | 93 | status_t setParameter(int key, const Parcel &request); |
| 94 | status_t getParameter(int key, Parcel *reply); |
| 95 | |
Andreas Huber | 27366fc | 2009-11-20 09:32:46 -0800 | [diff] [blame] | 96 | status_t seekTo(int64_t timeUs); |
| 97 | |
Andreas Huber | 62f7ffe | 2010-05-06 10:18:05 -0700 | [diff] [blame] | 98 | // This is a mask of MediaExtractor::Flags. |
| 99 | uint32_t flags() const; |
| 100 | |
Andreas Huber | 4dc482d | 2011-03-22 10:31:21 -0700 | [diff] [blame] | 101 | void postAudioEOS(int64_t delayUs = 0ll); |
Andreas Huber | 2b359ed | 2010-09-28 11:56:39 -0700 | [diff] [blame] | 102 | void postAudioSeekComplete(); |
| 103 | |
Gloria Wang | c6091dd | 2011-05-03 15:59:03 -0700 | [diff] [blame] | 104 | status_t setTimedTextTrackIndex(int32_t index); |
| 105 | |
Andreas Huber | 27366fc | 2009-11-20 09:32:46 -0800 | [diff] [blame] | 106 | private: |
| 107 | friend struct AwesomeEvent; |
Dharmaray Kundargi | 3b3cddc | 2011-01-16 16:43:20 -0800 | [diff] [blame] | 108 | friend struct PreviewPlayer; |
Andreas Huber | 27366fc | 2009-11-20 09:32:46 -0800 | [diff] [blame] | 109 | |
Andreas Huber | 62f7ffe | 2010-05-06 10:18:05 -0700 | [diff] [blame] | 110 | enum { |
Gloria Wang | c6091dd | 2011-05-03 15:59:03 -0700 | [diff] [blame] | 111 | PLAYING = 0x01, |
| 112 | LOOPING = 0x02, |
| 113 | FIRST_FRAME = 0x04, |
| 114 | PREPARING = 0x08, |
| 115 | PREPARED = 0x10, |
| 116 | AT_EOS = 0x20, |
| 117 | PREPARE_CANCELLED = 0x40, |
| 118 | CACHE_UNDERRUN = 0x80, |
| 119 | AUDIO_AT_EOS = 0x0100, |
| 120 | VIDEO_AT_EOS = 0x0200, |
| 121 | AUTO_LOOPING = 0x0400, |
Andreas Huber | eaf2c5a | 2010-10-19 12:18:51 -0700 | [diff] [blame] | 122 | |
| 123 | // We are basically done preparing but are currently buffering |
| 124 | // sufficient data to begin playback and finish the preparation phase |
| 125 | // for good. |
Gloria Wang | c6091dd | 2011-05-03 15:59:03 -0700 | [diff] [blame] | 126 | PREPARING_CONNECTED = 0x0800, |
Andreas Huber | 0a84f4f | 2011-02-07 11:43:12 -0800 | [diff] [blame] | 127 | |
| 128 | // We're triggering a single video event to display the first frame |
| 129 | // after the seekpoint. |
Gloria Wang | c6091dd | 2011-05-03 15:59:03 -0700 | [diff] [blame] | 130 | SEEK_PREVIEW = 0x1000, |
Andreas Huber | ce8a101 | 2011-02-11 13:09:36 -0800 | [diff] [blame] | 131 | |
Gloria Wang | c6091dd | 2011-05-03 15:59:03 -0700 | [diff] [blame] | 132 | AUDIO_RUNNING = 0x2000, |
| 133 | AUDIOPLAYER_STARTED = 0x4000, |
Andreas Huber | 53182c4 | 2011-02-24 14:42:48 -0800 | [diff] [blame] | 134 | |
Gloria Wang | c6091dd | 2011-05-03 15:59:03 -0700 | [diff] [blame] | 135 | INCOGNITO = 0x8000, |
| 136 | |
| 137 | TEXT_RUNNING = 0x10000, |
| 138 | TEXTPLAYER_STARTED = 0x20000, |
Andreas Huber | 27366fc | 2009-11-20 09:32:46 -0800 | [diff] [blame] | 139 | }; |
| 140 | |
| 141 | mutable Mutex mLock; |
Andreas Huber | 252573c | 2010-03-26 10:17:17 -0700 | [diff] [blame] | 142 | Mutex mMiscStateLock; |
Andreas Huber | 27366fc | 2009-11-20 09:32:46 -0800 | [diff] [blame] | 143 | |
| 144 | OMXClient mClient; |
| 145 | TimedEventQueue mQueue; |
Andreas Huber | 406a18b | 2010-02-18 16:45:13 -0800 | [diff] [blame] | 146 | bool mQueueStarted; |
Andreas Huber | a3f4384 | 2010-01-21 10:28:45 -0800 | [diff] [blame] | 147 | wp<MediaPlayerBase> mListener; |
Andreas Huber | 27366fc | 2009-11-20 09:32:46 -0800 | [diff] [blame] | 148 | |
Andreas Huber | e3c0183 | 2010-08-16 08:49:37 -0700 | [diff] [blame] | 149 | sp<Surface> mSurface; |
Glenn Kasten | cc562a3 | 2011-02-08 17:26:17 -0800 | [diff] [blame] | 150 | sp<ANativeWindow> mNativeWindow; |
Andreas Huber | 27366fc | 2009-11-20 09:32:46 -0800 | [diff] [blame] | 151 | sp<MediaPlayerBase::AudioSink> mAudioSink; |
| 152 | |
Andreas Huber | 971305d | 2010-07-07 13:35:27 -0700 | [diff] [blame] | 153 | SystemTimeSource mSystemTimeSource; |
Andreas Huber | 27366fc | 2009-11-20 09:32:46 -0800 | [diff] [blame] | 154 | TimeSource *mTimeSource; |
| 155 | |
Andreas Huber | ffdf478 | 2010-02-09 14:05:43 -0800 | [diff] [blame] | 156 | String8 mUri; |
| 157 | KeyedVector<String8, String8> mUriHeaders; |
| 158 | |
Andreas Huber | ba7ec91 | 2010-02-12 10:42:02 -0800 | [diff] [blame] | 159 | sp<DataSource> mFileSource; |
| 160 | |
Andreas Huber | 3ac94ef | 2010-03-05 10:42:10 -0800 | [diff] [blame] | 161 | sp<MediaSource> mVideoTrack; |
Andreas Huber | 27366fc | 2009-11-20 09:32:46 -0800 | [diff] [blame] | 162 | sp<MediaSource> mVideoSource; |
Andreas Huber | 1314e73 | 2009-12-14 14:18:22 -0800 | [diff] [blame] | 163 | sp<AwesomeRenderer> mVideoRenderer; |
Andreas Huber | 7b73cfc | 2010-02-12 14:40:08 -0800 | [diff] [blame] | 164 | bool mVideoRendererIsPreview; |
Andreas Huber | 27366fc | 2009-11-20 09:32:46 -0800 | [diff] [blame] | 165 | |
Andreas Huber | 3ac94ef | 2010-03-05 10:42:10 -0800 | [diff] [blame] | 166 | sp<MediaSource> mAudioTrack; |
Andreas Huber | 27366fc | 2009-11-20 09:32:46 -0800 | [diff] [blame] | 167 | sp<MediaSource> mAudioSource; |
| 168 | AudioPlayer *mAudioPlayer; |
| 169 | int64_t mDurationUs; |
| 170 | |
James Dong | 08adfd2 | 2011-01-16 11:30:13 -0800 | [diff] [blame] | 171 | int32_t mDisplayWidth; |
| 172 | int32_t mDisplayHeight; |
| 173 | |
Andreas Huber | 27366fc | 2009-11-20 09:32:46 -0800 | [diff] [blame] | 174 | uint32_t mFlags; |
Andreas Huber | 62f7ffe | 2010-05-06 10:18:05 -0700 | [diff] [blame] | 175 | uint32_t mExtractorFlags; |
Andreas Huber | 27366fc | 2009-11-20 09:32:46 -0800 | [diff] [blame] | 176 | |
Andreas Huber | 27366fc | 2009-11-20 09:32:46 -0800 | [diff] [blame] | 177 | int64_t mTimeSourceDeltaUs; |
| 178 | int64_t mVideoTimeUs; |
| 179 | |
Andreas Huber | a2c2997 | 2011-02-24 12:05:40 -0800 | [diff] [blame] | 180 | enum SeekType { |
| 181 | NO_SEEK, |
| 182 | SEEK, |
| 183 | SEEK_VIDEO_ONLY |
| 184 | }; |
| 185 | SeekType mSeeking; |
| 186 | |
Andreas Huber | 8e2b941 | 2010-03-31 09:40:15 -0700 | [diff] [blame] | 187 | bool mSeekNotificationSent; |
Andreas Huber | 27366fc | 2009-11-20 09:32:46 -0800 | [diff] [blame] | 188 | int64_t mSeekTimeUs; |
| 189 | |
Andreas Huber | 4deb3eb | 2010-10-12 16:55:11 -0700 | [diff] [blame] | 190 | int64_t mBitrate; // total bitrate of the file (in bps) or -1 if unknown. |
| 191 | |
Andreas Huber | 70d10c0 | 2010-02-03 11:37:29 -0800 | [diff] [blame] | 192 | bool mWatchForAudioSeekComplete; |
| 193 | bool mWatchForAudioEOS; |
| 194 | |
Andreas Huber | 27366fc | 2009-11-20 09:32:46 -0800 | [diff] [blame] | 195 | sp<TimedEventQueue::Event> mVideoEvent; |
| 196 | bool mVideoEventPending; |
| 197 | sp<TimedEventQueue::Event> mStreamDoneEvent; |
| 198 | bool mStreamDoneEventPending; |
Andreas Huber | b9e6383 | 2010-01-26 16:20:10 -0800 | [diff] [blame] | 199 | sp<TimedEventQueue::Event> mBufferingEvent; |
| 200 | bool mBufferingEventPending; |
Andreas Huber | 70d10c0 | 2010-02-03 11:37:29 -0800 | [diff] [blame] | 201 | sp<TimedEventQueue::Event> mCheckAudioStatusEvent; |
| 202 | bool mAudioStatusEventPending; |
Andreas Huber | 52c7832 | 2011-01-11 15:05:28 -0800 | [diff] [blame] | 203 | sp<TimedEventQueue::Event> mVideoLagEvent; |
| 204 | bool mVideoLagEventPending; |
Andreas Huber | 27366fc | 2009-11-20 09:32:46 -0800 | [diff] [blame] | 205 | |
Andreas Huber | 6be780e | 2010-02-08 14:40:30 -0800 | [diff] [blame] | 206 | sp<TimedEventQueue::Event> mAsyncPrepareEvent; |
| 207 | Condition mPreparedCondition; |
Andreas Huber | ffdf478 | 2010-02-09 14:05:43 -0800 | [diff] [blame] | 208 | bool mIsAsyncPrepare; |
| 209 | status_t mPrepareResult; |
Andreas Huber | d7d22eb | 2010-02-23 13:45:33 -0800 | [diff] [blame] | 210 | status_t mStreamDoneStatus; |
Andreas Huber | 6be780e | 2010-02-08 14:40:30 -0800 | [diff] [blame] | 211 | |
Andreas Huber | 27366fc | 2009-11-20 09:32:46 -0800 | [diff] [blame] | 212 | void postVideoEvent_l(int64_t delayUs = -1); |
Andreas Huber | b9e6383 | 2010-01-26 16:20:10 -0800 | [diff] [blame] | 213 | void postBufferingEvent_l(); |
Andreas Huber | d7d22eb | 2010-02-23 13:45:33 -0800 | [diff] [blame] | 214 | void postStreamDoneEvent_l(status_t status); |
Andreas Huber | 4dc482d | 2011-03-22 10:31:21 -0700 | [diff] [blame] | 215 | void postCheckAudioStatusEvent_l(int64_t delayUs); |
Andreas Huber | 52c7832 | 2011-01-11 15:05:28 -0800 | [diff] [blame] | 216 | void postVideoLagEvent_l(); |
Andreas Huber | ba7ec91 | 2010-02-12 10:42:02 -0800 | [diff] [blame] | 217 | status_t play_l(); |
Andreas Huber | 27366fc | 2009-11-20 09:32:46 -0800 | [diff] [blame] | 218 | |
Andreas Huber | 27366fc | 2009-11-20 09:32:46 -0800 | [diff] [blame] | 219 | MediaBuffer *mVideoBuffer; |
| 220 | |
Andreas Huber | 5f5719e | 2011-03-08 15:59:28 -0800 | [diff] [blame] | 221 | sp<HTTPBase> mConnectingDataSource; |
Andreas Huber | 4d61f60 | 2010-06-10 11:17:50 -0700 | [diff] [blame] | 222 | sp<NuCachedSource2> mCachedSource; |
Andreas Huber | b9e6383 | 2010-01-26 16:20:10 -0800 | [diff] [blame] | 223 | |
Andreas Huber | 7a747b8 | 2010-06-07 15:19:40 -0700 | [diff] [blame] | 224 | sp<ALooper> mLooper; |
| 225 | sp<ARTSPController> mRTSPController; |
Andreas Huber | cb21879 | 2011-02-14 14:14:23 -0800 | [diff] [blame] | 226 | sp<ARTSPController> mConnectingRTSPController; |
Andreas Huber | 7a747b8 | 2010-06-07 15:19:40 -0700 | [diff] [blame] | 227 | |
Gloria Wang | d577091 | 2010-06-22 13:55:38 -0700 | [diff] [blame] | 228 | DrmManagerClient *mDrmManagerClient; |
Gloria Wang | ae77527 | 2011-02-24 16:40:57 -0800 | [diff] [blame] | 229 | sp<DecryptHandle> mDecryptHandle; |
Gloria Wang | d577091 | 2010-06-22 13:55:38 -0700 | [diff] [blame] | 230 | |
Andreas Huber | 3a785fe | 2011-03-14 10:55:40 -0700 | [diff] [blame] | 231 | int64_t mLastVideoTimeUs; |
Gloria Wang | c6091dd | 2011-05-03 15:59:03 -0700 | [diff] [blame] | 232 | TimedTextPlayer *mTextPlayer; |
Andreas Huber | 3a785fe | 2011-03-14 10:55:40 -0700 | [diff] [blame] | 233 | |
Andreas Huber | ba7ec91 | 2010-02-12 10:42:02 -0800 | [diff] [blame] | 234 | status_t setDataSource_l( |
| 235 | const char *uri, |
| 236 | const KeyedVector<String8, String8> *headers = NULL); |
| 237 | |
| 238 | status_t setDataSource_l(const sp<DataSource> &dataSource); |
Andreas Huber | 27366fc | 2009-11-20 09:32:46 -0800 | [diff] [blame] | 239 | status_t setDataSource_l(const sp<MediaExtractor> &extractor); |
| 240 | void reset_l(); |
| 241 | status_t seekTo_l(int64_t timeUs); |
Andreas Huber | c743f45 | 2010-10-05 10:25:34 -0700 | [diff] [blame] | 242 | status_t pause_l(bool at_eos = false); |
Andreas Huber | 27366fc | 2009-11-20 09:32:46 -0800 | [diff] [blame] | 243 | void initRenderer_l(); |
Andreas Huber | e3c0183 | 2010-08-16 08:49:37 -0700 | [diff] [blame] | 244 | void notifyVideoSize_l(); |
Andreas Huber | 27366fc | 2009-11-20 09:32:46 -0800 | [diff] [blame] | 245 | void seekAudioIfNecessary_l(); |
| 246 | |
Andreas Huber | b9e6383 | 2010-01-26 16:20:10 -0800 | [diff] [blame] | 247 | void cancelPlayerEvents(bool keepBufferingGoing = false); |
Andreas Huber | 27366fc | 2009-11-20 09:32:46 -0800 | [diff] [blame] | 248 | |
Andreas Huber | 3ac94ef | 2010-03-05 10:42:10 -0800 | [diff] [blame] | 249 | void setAudioSource(sp<MediaSource> source); |
| 250 | status_t initAudioDecoder(); |
| 251 | |
| 252 | void setVideoSource(sp<MediaSource> source); |
Andreas Huber | 4c19bf9 | 2010-09-08 14:32:20 -0700 | [diff] [blame] | 253 | status_t initVideoDecoder(uint32_t flags = 0); |
Andreas Huber | 27366fc | 2009-11-20 09:32:46 -0800 | [diff] [blame] | 254 | |
Gloria Wang | c6091dd | 2011-05-03 15:59:03 -0700 | [diff] [blame] | 255 | void addTextSource(sp<MediaSource> source); |
| 256 | |
Andreas Huber | 27366fc | 2009-11-20 09:32:46 -0800 | [diff] [blame] | 257 | void onStreamDone(); |
| 258 | |
Andreas Huber | 6be780e | 2010-02-08 14:40:30 -0800 | [diff] [blame] | 259 | void notifyListener_l(int msg, int ext1 = 0, int ext2 = 0); |
Andreas Huber | b9e6383 | 2010-01-26 16:20:10 -0800 | [diff] [blame] | 260 | |
Andreas Huber | 6be780e | 2010-02-08 14:40:30 -0800 | [diff] [blame] | 261 | void onVideoEvent(); |
Andreas Huber | b9e6383 | 2010-01-26 16:20:10 -0800 | [diff] [blame] | 262 | void onBufferingUpdate(); |
Andreas Huber | 70d10c0 | 2010-02-03 11:37:29 -0800 | [diff] [blame] | 263 | void onCheckAudioStatus(); |
Andreas Huber | 6be780e | 2010-02-08 14:40:30 -0800 | [diff] [blame] | 264 | void onPrepareAsyncEvent(); |
Andreas Huber | 3ac94ef | 2010-03-05 10:42:10 -0800 | [diff] [blame] | 265 | void abortPrepare(status_t err); |
Andreas Huber | 87ab9cd | 2010-09-03 13:20:33 -0700 | [diff] [blame] | 266 | void finishAsyncPrepare_l(); |
Andreas Huber | 52c7832 | 2011-01-11 15:05:28 -0800 | [diff] [blame] | 267 | void onVideoLagUpdate(); |
Andreas Huber | 87ab9cd | 2010-09-03 13:20:33 -0700 | [diff] [blame] | 268 | |
| 269 | bool getCachedDuration_l(int64_t *durationUs, bool *eos); |
Andreas Huber | 3ac94ef | 2010-03-05 10:42:10 -0800 | [diff] [blame] | 270 | |
Andreas Huber | ffdf478 | 2010-02-09 14:05:43 -0800 | [diff] [blame] | 271 | status_t finishSetDataSource_l(); |
Andreas Huber | a3f4384 | 2010-01-21 10:28:45 -0800 | [diff] [blame] | 272 | |
Andreas Huber | f71daba | 2010-03-24 09:24:40 -0700 | [diff] [blame] | 273 | static bool ContinuePreparation(void *cookie); |
| 274 | |
Andreas Huber | 0c46b69 | 2010-10-08 15:21:08 -0700 | [diff] [blame] | 275 | static void OnRTSPSeekDoneWrapper(void *cookie); |
| 276 | void onRTSPSeekDone(); |
| 277 | |
Andreas Huber | 4deb3eb | 2010-10-12 16:55:11 -0700 | [diff] [blame] | 278 | bool getBitrate(int64_t *bitrate); |
| 279 | |
Andreas Huber | 4d450a8 | 2010-10-19 09:34:44 -0700 | [diff] [blame] | 280 | void finishSeekIfNecessary(int64_t videoTimeUs); |
Andreas Huber | 10b920c | 2010-11-11 15:37:17 -0800 | [diff] [blame] | 281 | void ensureCacheIsFetching_l(); |
Andreas Huber | 4d450a8 | 2010-10-19 09:34:44 -0700 | [diff] [blame] | 282 | |
Andreas Huber | ce8a101 | 2011-02-11 13:09:36 -0800 | [diff] [blame] | 283 | status_t startAudioPlayer_l(); |
Andreas Huber | 5fd43e3 | 2011-05-10 13:56:39 -0700 | [diff] [blame] | 284 | void postAudioSeekComplete_l(); |
Andreas Huber | ce8a101 | 2011-02-11 13:09:36 -0800 | [diff] [blame] | 285 | |
Andreas Huber | 3a785fe | 2011-03-14 10:55:40 -0700 | [diff] [blame] | 286 | void shutdownVideoDecoder_l(); |
| 287 | void setNativeWindow_l(const sp<ANativeWindow> &native); |
| 288 | |
Andreas Huber | 27366fc | 2009-11-20 09:32:46 -0800 | [diff] [blame] | 289 | AwesomePlayer(const AwesomePlayer &); |
| 290 | AwesomePlayer &operator=(const AwesomePlayer &); |
| 291 | }; |
| 292 | |
| 293 | } // namespace android |
| 294 | |
| 295 | #endif // AWESOME_PLAYER_H_ |
| 296 | |