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

Side by Side Diff: examples/audio_play_test/play_tone.cc

Issue 2015643002: Add (optional) options to Run[Main]Application(). (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: doh Created 4 years, 6 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 #include <math.h> 5 #include <math.h>
6 #include <memory> 6 #include <memory>
7 7
8 #include "mojo/public/c/system/main.h" 8 #include "mojo/public/c/system/main.h"
9 #include "mojo/public/cpp/application/application_delegate.h" 9 #include "mojo/public/cpp/application/application_impl_base.h"
10 #include "mojo/public/cpp/application/application_impl.h"
11 #include "mojo/public/cpp/application/application_runner.h"
12 #include "mojo/public/cpp/application/connect.h" 10 #include "mojo/public/cpp/application/connect.h"
11 #include "mojo/public/cpp/application/run_application.h"
13 #include "mojo/public/cpp/utility/run_loop.h" 12 #include "mojo/public/cpp/utility/run_loop.h"
14 #include "mojo/services/media/audio/interfaces/audio_server.mojom.h" 13 #include "mojo/services/media/audio/interfaces/audio_server.mojom.h"
15 #include "mojo/services/media/audio/interfaces/audio_track.mojom.h" 14 #include "mojo/services/media/audio/interfaces/audio_track.mojom.h"
16 #include "mojo/services/media/common/cpp/circular_buffer_media_pipe_adapter.h" 15 #include "mojo/services/media/common/cpp/circular_buffer_media_pipe_adapter.h"
17 #include "mojo/services/media/common/cpp/linear_transform.h" 16 #include "mojo/services/media/common/cpp/linear_transform.h"
18 #include "mojo/services/media/common/cpp/local_time.h" 17 #include "mojo/services/media/common/cpp/local_time.h"
19 #include "mojo/services/media/common/interfaces/timelines.mojom.h" 18 #include "mojo/services/media/common/interfaces/timelines.mojom.h"
20 19
21 namespace mojo { 20 namespace mojo {
22 namespace media { 21 namespace media {
23 namespace audio { 22 namespace audio {
24 namespace examples { 23 namespace examples {
25 24
26 static constexpr uint32_t SAMP_FREQ = 48000; 25 static constexpr uint32_t SAMP_FREQ = 48000;
27 static constexpr uint32_t CHUNK_USEC = 10000; 26 static constexpr uint32_t CHUNK_USEC = 10000;
28 static constexpr uint32_t BUF_LO_WATER_USEC = 500000; 27 static constexpr uint32_t BUF_LO_WATER_USEC = 500000;
29 static constexpr uint32_t BUF_HI_WATER_USEC = BUF_LO_WATER_USEC 28 static constexpr uint32_t BUF_HI_WATER_USEC = BUF_LO_WATER_USEC
30 + (4 * CHUNK_USEC); 29 + (4 * CHUNK_USEC);
31 static constexpr uint32_t BUF_DEPTH_USEC = BUF_HI_WATER_USEC 30 static constexpr uint32_t BUF_DEPTH_USEC = BUF_HI_WATER_USEC
32 + (4 * CHUNK_USEC); 31 + (4 * CHUNK_USEC);
33 static constexpr uint32_t FRAME_BYTES = sizeof(int16_t); 32 static constexpr uint32_t FRAME_BYTES = sizeof(int16_t);
34 33
35 static inline constexpr uint32_t USecToBytes(uint64_t usec) { 34 static inline constexpr uint32_t USecToBytes(uint64_t usec) {
36 return ((usec * SAMP_FREQ) / 1000000) * FRAME_BYTES; 35 return ((usec * SAMP_FREQ) / 1000000) * FRAME_BYTES;
37 } 36 }
38 37
39 class PlayToneApp : public ApplicationDelegate { 38 class PlayToneApp : public ApplicationImplBase {
40 public: 39 public:
41 ~PlayToneApp() override { Quit(); } 40 ~PlayToneApp() override { OnQuit(); }
42 41
43 // ApplicationDelegate 42 // ApplicationImplBase overrides:
44 void Initialize(ApplicationImpl* app) override; 43 void OnInitialize() override;
45 void Quit() override; 44 void OnQuit() override;
46 45
47 private: 46 private:
48 void GenerateToneCbk(MediaResult res); 47 void GenerateToneCbk(MediaResult res);
49 void PlayTone(double freq_hz, double amplitude, double duration_sec); 48 void PlayTone(double freq_hz, double amplitude, double duration_sec);
50 void PostShutdown(); 49 void PostShutdown();
51 void Shutdown(); 50 void Shutdown();
52 void OnConnectionError(const std::string& connection_name); 51 void OnConnectionError(const std::string& connection_name);
53 52
54 AudioServerPtr audio_server_; 53 AudioServerPtr audio_server_;
55 AudioTrackPtr audio_track_; 54 AudioTrackPtr audio_track_;
56 TimelineConsumerPtr timeline_consumer_; 55 TimelineConsumerPtr timeline_consumer_;
57 std::unique_ptr<CircularBufferMediaPipeAdapter> audio_pipe_; 56 std::unique_ptr<CircularBufferMediaPipeAdapter> audio_pipe_;
58 57
59 bool clock_started_ = false; 58 bool clock_started_ = false;
60 uint64_t media_time_ = 0; 59 uint64_t media_time_ = 0;
61 double freq_hz_ = 440.0; 60 double freq_hz_ = 440.0;
62 double amplitude_ = 1.0; 61 double amplitude_ = 1.0;
63 bool shutting_down_ = false; 62 bool shutting_down_ = false;
64 }; 63 };
65 64
66 void PlayToneApp::Quit() { 65 void PlayToneApp::OnQuit() {
67 timeline_consumer_.reset(); 66 timeline_consumer_.reset();
68 audio_pipe_.reset(); 67 audio_pipe_.reset();
69 audio_track_.reset(); 68 audio_track_.reset();
70 audio_server_.reset(); 69 audio_server_.reset();
71 } 70 }
72 71
73 void PlayToneApp::Initialize(ApplicationImpl* app) { 72 void PlayToneApp::OnInitialize() {
74 mojo::ConnectToService(app->shell(), "mojo:audio_server", 73 mojo::ConnectToService(shell(), "mojo:audio_server",
75 GetProxy(&audio_server_)); 74 GetProxy(&audio_server_));
76 audio_server_.set_connection_error_handler([this]() { 75 audio_server_.set_connection_error_handler([this]() {
77 OnConnectionError("audio_server"); 76 OnConnectionError("audio_server");
78 }); 77 });
79 78
80 audio_server_->CreateTrack(GetProxy(&audio_track_)); 79 audio_server_->CreateTrack(GetProxy(&audio_track_));
81 audio_track_.set_connection_error_handler([this]() { 80 audio_track_.set_connection_error_handler([this]() {
82 OnConnectionError("audio_track"); 81 OnConnectionError("audio_track");
83 }); 82 });
84 83
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after
226 audio_pipe_->ResetSignalCallback(); 225 audio_pipe_->ResetSignalCallback();
227 } 226 }
228 audio_pipe_ = nullptr; 227 audio_pipe_ = nullptr;
229 228
230 mojo::RunLoop::current()->PostDelayedTask([this]() -> void { 229 mojo::RunLoop::current()->PostDelayedTask([this]() -> void {
231 Shutdown(); 230 Shutdown();
232 }, 0); 231 }, 0);
233 } 232 }
234 233
235 void PlayToneApp::Shutdown() { 234 void PlayToneApp::Shutdown() {
236 Quit(); 235 OnQuit();
237 RunLoop::current()->Quit(); 236 RunLoop::current()->Quit();
238 } 237 }
239 238
240 } // namespace examples 239 } // namespace examples
241 } // namespace audio 240 } // namespace audio
242 } // namespace media 241 } // namespace media
243 } // namespace mojo 242 } // namespace mojo
244 243
245 MojoResult MojoMain(MojoHandle app_request) { 244 MojoResult MojoMain(MojoHandle app_request) {
246 mojo::ApplicationRunner runner( 245 mojo::media::audio::examples::PlayToneApp play_tone_app;
247 std::unique_ptr<mojo::media::audio::examples::PlayToneApp>( 246 return mojo::RunMainApplication(app_request, &play_tone_app);
248 new mojo::media::audio::examples::PlayToneApp()));
249 return runner.Run(app_request);
250 } 247 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698