Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 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 | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #include "examples/media_test/media_test.h" | |
| 6 #include "mojo/services/media/common/cpp/linear_transform.h" | |
| 7 #include "mojo/services/media/common/cpp/local_time.h" | |
| 8 #include "mojo/services/media/control/interfaces/media_factory.mojom.h" | |
| 9 | |
| 10 namespace examples { | |
| 11 | |
| 12 // static | |
| 13 std::unique_ptr<MediaTest> MediaTest::Create( | |
| 14 mojo::ApplicationImpl* app, | |
| 15 const std::string& input_file_name) { | |
| 16 return std::unique_ptr<MediaTest>(new MediaTest(app, input_file_name)); | |
| 17 } | |
| 18 | |
| 19 MediaTest::MediaTest( | |
| 20 mojo::ApplicationImpl* app, | |
| 21 const std::string& input_file_name) : | |
| 22 state_(mojo::media::MediaState::UNPREPARED) { | |
| 23 mojo::media::MediaFactoryPtr factory; | |
| 24 app->ConnectToService("mojo:media_factory", &factory); | |
| 25 | |
| 26 factory->CreatePlayer(input_file_name, GetProxy(&media_player_)); | |
| 27 | |
| 28 HandleStatusUpdates(); | |
| 29 } | |
| 30 | |
| 31 MediaTest::~MediaTest() {} | |
| 32 | |
| 33 void MediaTest::RegisterUpdateCallback(const UpdateCallback& callback) { | |
| 34 update_callback_ = callback; | |
| 35 } | |
| 36 | |
| 37 void MediaTest::Play() { | |
| 38 media_player_->Play(); | |
| 39 } | |
| 40 | |
| 41 void MediaTest::Pause() { | |
| 42 media_player_->Pause(); | |
| 43 } | |
| 44 | |
| 45 void MediaTest::Seek(int64_t position_ns) { | |
| 46 media_player_->Seek(position_ns); | |
| 47 } | |
| 48 | |
| 49 mojo::media::MediaState MediaTest::state() const { | |
| 50 return state_; | |
| 51 } | |
| 52 | |
| 53 int64_t MediaTest::position_ns() const { | |
| 54 if (!transform_) { | |
| 55 return 0; | |
| 56 } | |
| 57 | |
| 58 // Create a linear transform that translates local time to presentation time. | |
| 59 // Note that 'reference' here refers to the presentation time, and 'target' | |
| 60 // refers to the local time. | |
| 61 mojo::media::LinearTransform transform( | |
|
johngro
2016/03/21 22:10:46
transform_ does not appear to be getting used for
dalesat
2016/03/21 23:58:35
Done.
| |
| 62 transform_->quad->target_offset, | |
| 63 transform_->quad->reference_delta, | |
| 64 transform_->quad->target_delta, | |
| 65 transform_->quad->reference_offset); | |
| 66 | |
| 67 // Apply the transform to the current time. | |
| 68 int64_t position; | |
| 69 transform.DoForwardTransform( | |
| 70 mojo::media::LocalClock::now().time_since_epoch().count(), | |
| 71 &position); | |
| 72 | |
| 73 return position; | |
|
johngro
2016/03/21 22:10:46
if you have an idea of what the asset's duration i
dalesat
2016/03/21 23:58:35
Done.
| |
| 74 } | |
| 75 | |
| 76 const mojo::media::MediaMetadataPtr& MediaTest::metadata() const { | |
| 77 return metadata_; | |
| 78 } | |
| 79 | |
| 80 void MediaTest::HandleStatusUpdates( | |
| 81 uint64_t version, | |
| 82 mojo::media::MediaPlayerStatusPtr status) { | |
| 83 if (status) { | |
| 84 // Process status received from the player. | |
| 85 state_ = status->state; | |
| 86 transform_ = status->timeline_transform.Pass(); | |
| 87 metadata_ = status->metadata.Pass(); | |
| 88 if (update_callback_ != nullptr) { | |
| 89 update_callback_(); | |
| 90 } | |
| 91 } | |
| 92 | |
| 93 // Request a status update. | |
| 94 media_player_->GetStatus( | |
| 95 version, | |
| 96 [this](uint64_t version, mojo::media::MediaPlayerStatusPtr status) { | |
| 97 HandleStatusUpdates(version, status.Pass()); | |
| 98 }); | |
| 99 } | |
| 100 | |
| 101 } // namespace examples | |
| OLD | NEW |