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

Side by Side Diff: services/media/factory_service/media_player_impl.h

Issue 2009643002: Motown: Implement MediaTimelineController and use it. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Sync 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 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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 MOJO_SERVICES_MEDIA_FACTORY_MEDIA_PLAYER_IMPL_H_ 5 #ifndef MOJO_SERVICES_MEDIA_FACTORY_MEDIA_PLAYER_IMPL_H_
6 #define MOJO_SERVICES_MEDIA_FACTORY_MEDIA_PLAYER_IMPL_H_ 6 #define MOJO_SERVICES_MEDIA_FACTORY_MEDIA_PLAYER_IMPL_H_
7 7
8 #include <limits> 8 #include <limits>
9 #include <vector> 9 #include <vector>
10 10
11 #include "mojo/public/cpp/application/application_impl.h" 11 #include "mojo/public/cpp/application/application_impl.h"
12 #include "mojo/public/cpp/bindings/binding.h" 12 #include "mojo/public/cpp/bindings/binding.h"
13 #include "mojo/services/media/common/cpp/timeline.h" 13 #include "mojo/services/media/common/cpp/timeline.h"
14 #include "mojo/services/media/common/cpp/timeline_function.h" 14 #include "mojo/services/media/common/cpp/timeline_function.h"
15 #include "mojo/services/media/common/interfaces/media_transport.mojom.h" 15 #include "mojo/services/media/common/interfaces/media_transport.mojom.h"
16 #include "mojo/services/media/control/interfaces/media_factory.mojom.h" 16 #include "mojo/services/media/control/interfaces/media_factory.mojom.h"
17 #include "mojo/services/media/core/interfaces/seeking_reader.mojom.h" 17 #include "mojo/services/media/core/interfaces/seeking_reader.mojom.h"
18 #include "mojo/services/media/core/interfaces/timeline_controller.mojom.h"
18 #include "services/media/common/mojo_publisher.h" 19 #include "services/media/common/mojo_publisher.h"
19 #include "services/media/factory_service/factory_service.h" 20 #include "services/media/factory_service/factory_service.h"
20 #include "services/media/framework/util/callback_joiner.h" 21 #include "services/media/framework/util/callback_joiner.h"
21 22
22 namespace mojo { 23 namespace mojo {
23 namespace media { 24 namespace media {
24 25
25 // Mojo agent that renders streams from an origin specified by URL. 26 // Mojo agent that renders streams from an origin specified by URL.
26 class MediaPlayerImpl : public MediaFactoryService::Product<MediaPlayer>, 27 class MediaPlayerImpl : public MediaFactoryService::Product<MediaPlayer>,
27 public MediaPlayer { 28 public MediaPlayer {
(...skipping 19 matching lines...) Expand all
47 static constexpr int64_t kMinimumLeadTime = Timeline::ns_from_ms(30); 48 static constexpr int64_t kMinimumLeadTime = Timeline::ns_from_ms(30);
48 49
49 // Internal state. 50 // Internal state.
50 enum class State { 51 enum class State {
51 kWaiting, // Waiting for some work to complete. 52 kWaiting, // Waiting for some work to complete.
52 kPaused, 53 kPaused,
53 kPlaying, 54 kPlaying,
54 }; 55 };
55 56
56 struct Stream { 57 struct Stream {
57 Stream(size_t index, MediaTypePtr media_type); 58 Stream();
58 ~Stream(); 59 ~Stream();
59 size_t index_; 60 // TODO(dalesat): Have the sink enlist the decoder.
60 bool enabled_ = false;
61 bool end_of_stream_ = false;
62 MediaTypePtr media_type_;
63 MediaTypeConverterPtr decoder_; 61 MediaTypeConverterPtr decoder_;
64 MediaSinkPtr sink_; 62 MediaSinkPtr sink_;
65 MediaTimelineControlSitePtr timeline_control_site_; 63 // The following fields are just temporaries used to solve lambda capture
66 TimelineConsumerPtr timeline_consumer_; 64 // problems.
67 MediaProducerPtr encoded_producer_; 65 MediaProducerPtr encoded_producer_;
68 MediaProducerPtr decoded_producer_; 66 MediaProducerPtr decoded_producer_;
69 }; 67 };
70 68
71 MediaPlayerImpl(InterfaceHandle<SeekingReader> reader, 69 MediaPlayerImpl(InterfaceHandle<SeekingReader> reader,
72 InterfaceRequest<MediaPlayer> request, 70 InterfaceRequest<MediaPlayer> request,
73 MediaFactoryService* owner); 71 MediaFactoryService* owner);
74 72
75 // Takes action based on current state. 73 // Takes action based on current state.
76 void Update(); 74 void Update();
77 75
78 // Handles seeking in paused state. 76 // Handles seeking in paused state.
79 void WhenPausedAndSeeking(); 77 void WhenPausedAndSeeking();
80 78
81 // Handles seeking in paused state with flushed pipeline. 79 // Handles seeking in paused state with flushed pipeline.
82 void WhenFlushedAndSeeking(); 80 void WhenFlushedAndSeeking();
83 81
84 // Sets the timeline transforms on all the sinks. transform_subject_time_ is 82 // Sets the timeline transform. transform_subject_time_ is used for the
85 // used for the subject_time, and the effective_reference_time is now plus an 83 // subject_time, and the effective_reference_time is now plus
86 // epsilon. 84 // kMinimumLeadTime.
87 void SetSinkTimelineTransforms(uint32_t reference_delta, 85 void SetTimelineTransform(uint32_t reference_delta, uint32_t subject_delta);
88 uint32_t subject_delta);
89
90 // Sets the timeline transforms on all the sinks.
91 void SetSinkTimelineTransforms(int64_t subject_time,
92 uint32_t reference_delta,
93 uint32_t subject_delta,
94 int64_t effective_reference_time,
95 int64_t effective_subject_time);
96
97 // Determines if all the enabled sinks have reached end-of-stream. Returns
98 // false if there are no enabled streams.
99 bool AllSinksAtEndOfStream();
100 86
101 // Prepares a stream. 87 // Prepares a stream.
102 void PrepareStream(Stream* stream, 88 void PrepareStream(Stream* stream,
89 size_t index,
90 const MediaTypePtr& input_media_type,
103 const String& url, 91 const String& url,
104 const std::function<void()>& callback); 92 const std::function<void()>& callback);
105 93
106 // Creates a sink for a stream. 94 // Creates a sink for a stream.
107 void CreateSink(Stream* stream, 95 void CreateSink(Stream* stream,
108 const MediaTypePtr& input_media_type, 96 const MediaTypePtr& input_media_type,
109 const String& url, 97 const String& url,
110 const std::function<void()>& callback); 98 const std::function<void()>& callback);
111 99
112 // Handles a metadata update from the demux. When called with the default 100 // Handles a metadata update from the demux. When called with the default
113 // argument values, initiates demux metadata updates. 101 // argument values, initiates demux metadata updates.
114 void HandleDemuxMetadataUpdates( 102 void HandleDemuxMetadataUpdates(
115 uint64_t version = MediaDemux::kInitialMetadata, 103 uint64_t version = MediaDemux::kInitialMetadata,
116 MediaMetadataPtr metadata = nullptr); 104 MediaMetadataPtr metadata = nullptr);
117 105
118 // Handles a status update from a control site. When called with the default 106 // Handles a status update from the control site. When called with the default
119 // argument values, initiates control site. status updates. 107 // argument values, initiates control site. status updates.
120 void HandleTimelineControlSiteStatusUpdates( 108 void HandleTimelineControlSiteStatusUpdates(
121 Stream* stream,
122 uint64_t version = MediaTimelineControlSite::kInitialStatus, 109 uint64_t version = MediaTimelineControlSite::kInitialStatus,
123 MediaTimelineControlSiteStatusPtr status = nullptr); 110 MediaTimelineControlSiteStatusPtr status = nullptr);
124 111
125 MediaFactoryPtr factory_; 112 MediaFactoryPtr factory_;
126 MediaDemuxPtr demux_; 113 MediaDemuxPtr demux_;
114 MediaTimelineControllerPtr timeline_controller_;
115 MediaTimelineControlSitePtr timeline_control_site_;
116 TimelineConsumerPtr timeline_consumer_;
127 std::vector<std::unique_ptr<Stream>> streams_; 117 std::vector<std::unique_ptr<Stream>> streams_;
128 State state_ = State::kWaiting; 118 State state_ = State::kWaiting;
129 State target_state_ = State::kPaused; 119 State target_state_ = State::kPaused;
130 bool flushed_ = true; 120 bool flushed_ = true;
121 bool end_of_stream_ = false;
131 int64_t target_position_ = kUnspecifiedTime; 122 int64_t target_position_ = kUnspecifiedTime;
132 int64_t transform_subject_time_ = kUnspecifiedTime; 123 int64_t transform_subject_time_ = kUnspecifiedTime;
133 TimelineFunction timeline_function_; 124 TimelineFunction timeline_function_;
134 CallbackJoiner set_transform_joiner_; 125 CallbackJoiner set_transform_joiner_;
135 MediaMetadataPtr metadata_; 126 MediaMetadataPtr metadata_;
136 MojoPublisher<GetStatusCallback> status_publisher_; 127 MojoPublisher<GetStatusCallback> status_publisher_;
137 }; 128 };
138 129
139 } // namespace media 130 } // namespace media
140 } // namespace mojo 131 } // namespace mojo
141 132
142 #endif // MOJO_SERVICES_MEDIA_FACTORY_MEDIA_PLAYER_IMPL_H_ 133 #endif // MOJO_SERVICES_MEDIA_FACTORY_MEDIA_PLAYER_IMPL_H_
OLDNEW
« no previous file with comments | « services/media/factory_service/factory_service.cc ('k') | services/media/factory_service/media_player_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698