Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(342)

Side by Side Diff: media/base/android/media_codec_player.h

Issue 1242913004: MediaCodecPlayer implementation (stage 3 - browser seek and surface change) (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@mtplayer-seek
Patch Set: Rebased, changed DCHECKs. Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef MEDIA_BASE_ANDROID_MEDIA_CODEC_PLAYER_H_ 5 #ifndef MEDIA_BASE_ANDROID_MEDIA_CODEC_PLAYER_H_
6 #define MEDIA_BASE_ANDROID_MEDIA_CODEC_PLAYER_H_ 6 #define MEDIA_BASE_ANDROID_MEDIA_CODEC_PLAYER_H_
7 7
8 #include "base/android/scoped_java_ref.h" 8 #include "base/android/scoped_java_ref.h"
9 #include "base/memory/scoped_ptr.h" 9 #include "base/memory/scoped_ptr.h"
10 #include "base/memory/weak_ptr.h" 10 #include "base/memory/weak_ptr.h"
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after
148 // Typedefs for the notification callbacks 148 // Typedefs for the notification callbacks
149 typedef base::Callback<void(base::TimeDelta, const gfx::Size&)> 149 typedef base::Callback<void(base::TimeDelta, const gfx::Size&)>
150 MetadataChangedCallback; 150 MetadataChangedCallback;
151 151
152 typedef base::Callback<void(base::TimeDelta, base::TimeTicks)> 152 typedef base::Callback<void(base::TimeDelta, base::TimeTicks)>
153 TimeUpdateCallback; 153 TimeUpdateCallback;
154 154
155 typedef base::Callback<void(const base::TimeDelta& current_timestamp)> 155 typedef base::Callback<void(const base::TimeDelta& current_timestamp)>
156 SeekDoneCallback; 156 SeekDoneCallback;
157 157
158 typedef base::Callback<void(int)> ErrorCallback;
159
158 // Constructs a player with the given ID and demuxer. |manager| must outlive 160 // Constructs a player with the given ID and demuxer. |manager| must outlive
159 // the lifetime of this object. 161 // the lifetime of this object.
160 MediaCodecPlayer(int player_id, 162 MediaCodecPlayer(int player_id,
161 base::WeakPtr<MediaPlayerManager> manager, 163 base::WeakPtr<MediaPlayerManager> manager,
162 const RequestMediaResourcesCB& request_media_resources_cb, 164 const RequestMediaResourcesCB& request_media_resources_cb,
163 scoped_ptr<DemuxerAndroid> demuxer, 165 scoped_ptr<DemuxerAndroid> demuxer,
164 const GURL& frame_url); 166 const GURL& frame_url);
165 ~MediaCodecPlayer() override; 167 ~MediaCodecPlayer() override;
166 168
167 // A helper method that performs the media thread part of initialization. 169 // A helper method that performs the media thread part of initialization.
(...skipping 20 matching lines...) Expand all
188 190
189 // DemuxerAndroidClient implementation. 191 // DemuxerAndroidClient implementation.
190 void OnDemuxerConfigsAvailable(const DemuxerConfigs& params) override; 192 void OnDemuxerConfigsAvailable(const DemuxerConfigs& params) override;
191 void OnDemuxerDataAvailable(const DemuxerData& params) override; 193 void OnDemuxerDataAvailable(const DemuxerData& params) override;
192 void OnDemuxerSeekDone(base::TimeDelta actual_browser_seek_time) override; 194 void OnDemuxerSeekDone(base::TimeDelta actual_browser_seek_time) override;
193 void OnDemuxerDurationChanged(base::TimeDelta duration) override; 195 void OnDemuxerDurationChanged(base::TimeDelta duration) override;
194 196
195 private: 197 private:
196 // The state machine states. 198 // The state machine states.
197 enum PlayerState { 199 enum PlayerState {
198 STATE_PAUSED, 200 kStatePaused,
199 STATE_WAITING_FOR_CONFIG, 201 kStateWaitingForConfig,
200 STATE_PREFETCHING, 202 kStatePrefetching,
201 STATE_PLAYING, 203 kStatePlaying,
202 STATE_STOPPING, 204 kStateStopping,
203 STATE_WAITING_FOR_SURFACE, 205 kStateWaitingForSurface,
204 STATE_WAITING_FOR_SEEK, 206 kStateWaitingForSeek,
205 STATE_ERROR, 207 kStateError,
208 };
209
210 enum StartStatus {
211 kStartOk = 0,
212 kStartBrowserSeekRequired,
213 kStartFailed,
206 }; 214 };
207 215
208 // Cached values for the manager. 216 // Cached values for the manager.
209 struct MediaMetadata { 217 struct MediaMetadata {
210 base::TimeDelta duration; 218 base::TimeDelta duration;
211 gfx::Size video_size; 219 gfx::Size video_size;
212 }; 220 };
213 221
214 // Information about current seek in progress. 222 // Information about current seek in progress.
215 struct SeekInfo { 223 struct SeekInfo {
(...skipping 21 matching lines...) Expand all
237 void OnTimeIntervalUpdate(DemuxerStream::Type stream_type, 245 void OnTimeIntervalUpdate(DemuxerStream::Type stream_type,
238 base::TimeDelta now_playing, 246 base::TimeDelta now_playing,
239 base::TimeDelta last_buffered); 247 base::TimeDelta last_buffered);
240 248
241 // Callbacks from video decoder 249 // Callbacks from video decoder
242 void OnVideoCodecCreated(); 250 void OnVideoCodecCreated();
243 void OnVideoResolutionChanged(const gfx::Size& size); 251 void OnVideoResolutionChanged(const gfx::Size& size);
244 252
245 // Operations called from the state machine. 253 // Operations called from the state machine.
246 void SetState(PlayerState new_state); 254 void SetState(PlayerState new_state);
247 void SetPendingSurface(gfx::ScopedJavaSurface surface);
248 bool HasPendingSurface() const;
249 void SetPendingStart(bool need_to_start); 255 void SetPendingStart(bool need_to_start);
250 bool HasPendingStart() const; 256 bool HasPendingStart() const;
251 void SetPendingSeek(base::TimeDelta timestamp); 257 void SetPendingSeek(base::TimeDelta timestamp);
252 base::TimeDelta GetPendingSeek() const; 258 base::TimeDelta GetPendingSeek() const;
253 bool HasVideo() const; 259 bool HasVideo() const;
254 bool HasAudio() const; 260 bool HasAudio() const;
255 void SetDemuxerConfigs(const DemuxerConfigs& configs); 261 void SetDemuxerConfigs(const DemuxerConfigs& configs);
256 void StartPrefetchDecoders(); 262 void StartPrefetchDecoders();
257 void StartPlaybackDecoders(); 263 void StartPlaybackOrBrowserSeek();
264 StartStatus StartPlaybackDecoders();
258 void StopDecoders(); 265 void StopDecoders();
259 void RequestToStopDecoders(); 266 void RequestToStopDecoders();
260 void RequestDemuxerSeek(base::TimeDelta seek_time, 267 void RequestDemuxerSeek(base::TimeDelta seek_time,
261 bool is_browser_seek = false); 268 bool is_browser_seek = false);
262 void ReleaseDecoderResources(); 269 void ReleaseDecoderResources();
263 270
264 // Helper methods. 271 // Helper methods.
265 void CreateDecoders(); 272 void CreateDecoders();
266 bool AudioFinished() const; 273 bool AudioFinished() const;
267 bool VideoFinished() const; 274 bool VideoFinished() const;
(...skipping 12 matching lines...) Expand all
280 scoped_ptr<MediaCodecVideoDecoder> video_decoder_; 287 scoped_ptr<MediaCodecVideoDecoder> video_decoder_;
281 288
282 // The state of the state machine. 289 // The state of the state machine.
283 PlayerState state_; 290 PlayerState state_;
284 291
285 // Notification callbacks, they call MediaPlayerManager. 292 // Notification callbacks, they call MediaPlayerManager.
286 base::Closure request_resources_cb_; 293 base::Closure request_resources_cb_;
287 TimeUpdateCallback time_update_cb_; 294 TimeUpdateCallback time_update_cb_;
288 base::Closure completion_cb_; 295 base::Closure completion_cb_;
289 SeekDoneCallback seek_done_cb_; 296 SeekDoneCallback seek_done_cb_;
297 ErrorCallback error_cb_;
290 298
291 // A callback that updates metadata cache and calls the manager. 299 // A callback that updates metadata cache and calls the manager.
292 MetadataChangedCallback metadata_changed_cb_; 300 MetadataChangedCallback metadata_changed_cb_;
293 301
294 // We call the base class' AttachListener() and DetachListener() methods on UI 302 // We call the base class' AttachListener() and DetachListener() methods on UI
295 // thread with these callbacks. 303 // thread with these callbacks.
296 base::Closure attach_listener_cb_; 304 base::Closure attach_listener_cb_;
297 base::Closure detach_listener_cb_; 305 base::Closure detach_listener_cb_;
298 306
299 // Error callback is posted by decoders or by this class itself if we cannot 307 // Error callback is posted by decoders or by this class itself if we cannot
300 // configure or start decoder. 308 // configure or start decoder.
301 base::Closure error_cb_; 309 base::Closure internal_error_cb_;
302 310
303 // Total duration reported by demuxer. 311 // Total duration reported by demuxer.
304 base::TimeDelta duration_; 312 base::TimeDelta duration_;
305 313
306 // base::TickClock used by |interpolator_|. 314 // base::TickClock used by |interpolator_|.
307 base::DefaultTickClock default_tick_clock_; 315 base::DefaultTickClock default_tick_clock_;
308 316
309 // Tracks the most recent media time update and provides interpolated values 317 // Tracks the most recent media time update and provides interpolated values
310 // as playback progresses. 318 // as playback progresses.
311 TimeDeltaInterpolator interpolator_; 319 TimeDeltaInterpolator interpolator_;
(...skipping 15 matching lines...) Expand all
327 base::WeakPtr<MediaCodecPlayer> media_weak_this_; 335 base::WeakPtr<MediaCodecPlayer> media_weak_this_;
328 // NOTE: Weak pointers must be invalidated before all other member variables. 336 // NOTE: Weak pointers must be invalidated before all other member variables.
329 base::WeakPtrFactory<MediaCodecPlayer> media_weak_factory_; 337 base::WeakPtrFactory<MediaCodecPlayer> media_weak_factory_;
330 338
331 DISALLOW_COPY_AND_ASSIGN(MediaCodecPlayer); 339 DISALLOW_COPY_AND_ASSIGN(MediaCodecPlayer);
332 }; 340 };
333 341
334 } // namespace media 342 } // namespace media
335 343
336 #endif // MEDIA_BASE_ANDROID_MEDIA_CODEC_PLAYER_H_ 344 #endif // MEDIA_BASE_ANDROID_MEDIA_CODEC_PLAYER_H_
OLDNEW
« no previous file with comments | « media/base/android/media_codec_decoder_unittest.cc ('k') | media/base/android/media_codec_player.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698