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

Side by Side Diff: media/base/android/media_codec_player_state.cc

Issue 1128383003: Implementation of MediaCodecPlayer stage 1 (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Addressed Min comments, added DCHECKs for current threads Created 5 years, 7 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
(Empty)
1 #include "media/base/android/media_codec_player_state.h"
2 #include "media/base/android/media_codec_player.h"
3 #include "media/base/buffers.h"
4
5 namespace media {
6
7 // Every method is called on the Media thread
8
qinmin 2015/05/13 23:17:32 nit:extra line
Tima Vaisburd 2015/05/14 00:14:59 Removed.
9
10 // MediaCodecPlayerState (superclass)
11
12 // By default, set configs for the future use
13 void MediaCodecPlayerState::EventDemuxerConfigsAvailable(
14 MediaCodecPlayer* player, const DemuxerConfigs& configs) {
15 player->SetDemuxerConfigs(configs);
16 }
17
18 // By default, set the Error state that blocks all events
19 void MediaCodecPlayerState::EventError(MediaCodecPlayer* player) {
20 player->SetState(StateError::Instance());
21 }
22
23 // Stop decoders synchronously.
24 // TODO: as it seems to work for every state, consider moving Release()
25 // out of the state machine.
26 void MediaCodecPlayerState::EventRelease(MediaCodecPlayer* player) {
27 player->SetState(StatePaused::Instance());
28 player->ReleaseDecoderResources();
29 }
30
qinmin 2015/05/13 23:17:32 ditto
Tima Vaisburd 2015/05/14 00:14:59 I put 2 lines between different states, e.g. the m
31
32 // StatePaused
33
34 void StatePaused::EventStart(MediaCodecPlayer* player) {
35 player->SetState(StatePrefetching::Instance());
36 player->StartPrefetchDecoders();
37 }
38
qinmin 2015/05/13 23:17:32 ditto
39
40 // StatePrefetching
41
42 void StatePrefetching::EventPause(MediaCodecPlayer* player) {
43 player->SetState(StatePaused::Instance());
44 player->StopDecoders();
45 }
46
47 void StatePrefetching::EventPrefetchDone(MediaCodecPlayer* player) {
48 if (!player->HasAudio() && !player->HasVideo()) {
49 // No configuration at all, let's wait for it.
50 // Although it probably should never happen here,
51 // after the data has come from demuxer.
52 player->SetState(StateWaitingForConfig::Instance());
53 return;
54 }
55
56 if (player->HasVideo() && !player->HasPendingSurface()) {
57 player->SetState(StateWaitingForSurface::Instance());
58 return;
59 }
60
61 player->SetState(StatePlaying::Instance());
62 player->StartPlaybackDecoders();
63 }
64
65
66 // StateWaitingForConfig
67
68 void StateWaitingForConfig::EventDemuxerConfigsAvailable(
69 MediaCodecPlayer* player, const DemuxerConfigs& configs) {
70
71 player->SetDemuxerConfigs(configs);
72
73 if (player->HasVideo() && !player->HasPendingSurface())
74 {
qinmin 2015/05/13 23:17:32 { has to go to the previous line
Tima Vaisburd 2015/05/14 00:14:59 Done.
75 player->SetState(StateWaitingForSurface::Instance());
76 return;
77 }
78
79 player->SetState(StatePlaying::Instance());
80 player->StartPlaybackDecoders();
81 }
82
83 void StateWaitingForConfig::EventPause(MediaCodecPlayer* player) {
84 player->SetState(StatePaused::Instance());
85 }
86
87
88 // StateWaitingForSurface
89
90 void StateWaitingForSurface::EventSetVideoSurface(MediaCodecPlayer* player) {
91 player->SetState(StatePlaying::Instance());
92 player->StartPlaybackDecoders();
93 }
94
95 void StateWaitingForSurface::EventPause(MediaCodecPlayer* player) {
96 player->SetState(StatePaused::Instance());
97 player->StopDecoders();
98 }
99
qinmin 2015/05/13 23:17:32 ditto
100
101 // StatePlaying
102
103 void StatePlaying::EventPause(MediaCodecPlayer* player) {
104 player->SetState(StateStopping::Instance());
105 player->RequestToStopDecoders();
106 }
107
108 void StatePlaying::EventStarvation(MediaCodecPlayer* player) {
109 player->SetState(StateStopping::Instance());
110 player->RequestToStopDecoders();
111 player->SetPendingStart(true);
112 }
113
114 void StatePlaying::EventStopDone(MediaCodecPlayer* player) {
115 // Unexpected stop means completion
116 player->SetState(StatePaused::Instance());
117 }
118
119 void StatePlaying::EventError(MediaCodecPlayer* player) {
120 player->SetState(StateError::Instance());
121 player->ReleaseDecoderResources();
122 }
123
qinmin 2015/05/13 23:17:32 ditto
124
125 // StateStopping
126
127 void StateStopping::EventStart(MediaCodecPlayer* player) {
128 player->SetPendingStart(true);
129 }
130
131 void StateStopping::EventStopDone(MediaCodecPlayer* player) {
132 if (player->HasPendingStart()) {
133 player->SetState(StatePrefetching::Instance());
134 player->StartPrefetchDecoders();
135 } else {
136 player->SetState(StatePaused::Instance());
137 }
138 }
139
140 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698