157 TInt64 time; |
158 TInt64 time; |
158 GetMediaTime(&time); |
159 GetMediaTime(&time); |
159 iStartedEventTime = time; |
160 iStartedEventTime = time; |
160 |
161 |
161 TInt err = KErrNone; |
162 TInt err = KErrNone; |
162 // AAC controller does not support multiple |
163 DEBUG("CMMAMMFPlayerBase::StopL: Position not zero, pausing"); |
163 // calls to pause but leave with KErrNotReady. |
164 err = iController.Pause(); |
164 // That error is dismissed as player should |
165 |
165 // be paused already in that case. |
|
166 if (time == 0) |
|
167 { |
|
168 DEBUG("CMMAMMFPlayerBase::StopL: Position is zero, stopping"); |
|
169 // Normally pause would be called, but if |
|
170 // current time is zero, Stop is called instead. |
|
171 // This is done because video playback breaks |
|
172 // if pause is called between events |
|
173 // KMMFEventCategoryVideoLoadingStarted and |
|
174 // KMMFEventCategoryVideoLoadingCompleted |
|
175 // (no wurther events are delivered altough |
|
176 // playback continues fine). |
|
177 // However calling Stop is tolerated in that |
|
178 // situation. |
|
179 err = iController.Stop(); |
|
180 if (err == KErrNone) |
|
181 { |
|
182 err = iController.Prime(); |
|
183 } |
|
184 } |
|
185 else |
|
186 { |
|
187 DEBUG("CMMAMMFPlayerBase::StopL: Position not zero, pausing"); |
|
188 err = iController.Pause(); |
|
189 } |
|
190 |
|
191 if ((err != KErrNone) && (err != KErrNotReady)) |
166 if ((err != KErrNone) && (err != KErrNotReady)) |
192 { |
167 { |
193 DEBUG_INT("CMMAMMFPlayerBase::StopL: pause/stop failed %d, leaving", err); |
168 DEBUG_INT("CMMAMMFPlayerBase::StopL: pause/stop failed %d, leaving", err); |
194 User::Leave(err); |
169 User::Leave(err); |
195 } |
170 } |