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

Side by Side Diff: services/media/framework_mojo/mojo_consumer.h

Issue 1692443002: Motown: Framework parts for mojo transport (producer/consumer/mediapipe) and control (audiotrack). (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Added comments to AudioTrackController::SetRate regarding the proper way to implement it. Created 4 years, 9 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 // Copyright 2016 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 #ifndef SERVICES_MEDIA_FRAMEWORK_MOJO_MOJO_CONSUMER_H_
6 #define SERVICES_MEDIA_FRAMEWORK_MOJO_MOJO_CONSUMER_H_
7
8
9 #include "base/single_thread_task_runner.h"
10 #include "base/task_runner.h"
11 #include "mojo/common/binding_set.h"
12 #include "mojo/services/media/common/cpp/mapped_shared_buffer.h"
13 #include "mojo/services/media/common/interfaces/media_transport.mojom.h"
14 #include "services/media/framework/models/active_source.h"
15
16 namespace mojo {
17 namespace media {
18
19 // Implements MediaConsumer::Flush on behalf of MediaConsumer to avoid name
20 // conflict with Part::Flush.
21 class MojoConsumerMediaConsumer : public MediaConsumer {
22 // MediaConsumer implementation.
23 void Flush(const FlushCallback& callback) override;
24
25 // Implements MediaConsumer::Flush.
26 virtual void MediaConsumerFlush(const FlushCallback& callback) = 0;
27 };
28
29 // Implements MediaConsumer to receive a stream from across mojo.
30 class MojoConsumer : public MojoConsumerMediaConsumer, public ActiveSource {
31 public:
32 using FlushRequestedCallback = std::function<void(const FlushCallback&)>;
33
34 static std::shared_ptr<MojoConsumer> Create() {
35 return std::shared_ptr<MojoConsumer>(new MojoConsumer());
36 }
37
38 ~MojoConsumer() override;
39
40 // Adds a binding.
41 void AddBinding(InterfaceRequest<MediaConsumer> consumer);
42
43 // Sets a callback signalling that a flush has been requested from the
44 // MediaConsumer client.
45 void SetFlushRequestedCallback(const FlushRequestedCallback& callback);
46
47 // MediaConsumer implementation.
48 void SetBuffer(
49 ScopedSharedBufferHandle buffer,
50 uint64_t size,
51 const SetBufferCallback& callback) override;
52
53 void PushPacket(MediaPacketPtr packet, const PushPacketCallback& callback)
54 override;
55
56 void MediaConsumerFlush(const FlushCallback& callback) override;
57
58 // ActiveSource implementation.
59 bool can_accept_allocator() const override;
60
61 void set_allocator(PayloadAllocator* allocator) override;
62
63 void SetSupplyCallback(const SupplyCallback& supply_callback) override;
64
65 void SetDownstreamDemand(Demand demand) override;
66
67 private:
68 MojoConsumer();
69
70 // Specialized packet implementation.
71 class PacketImpl : public Packet {
72 public:
73 static PacketPtr Create(
74 MediaPacketPtr media_packet,
75 const PushPacketCallback& callback,
76 scoped_refptr<base::SingleThreadTaskRunner> task_runner,
77 const MappedSharedBuffer& buffer) {
78 return PacketPtr(new PacketImpl(
79 media_packet.Pass(),
80 callback,
81 task_runner,
82 buffer));
83 }
84
85 // Packet implementation.
86 int64_t presentation_time() const override {
87 return media_packet_->pts;
88 }
89
90 uint64_t duration() const override {
91 return media_packet_->duration;
92 }
93
94 bool end_of_stream() const override {
95 return media_packet_->end_of_stream;
96 }
97
98 size_t size() const override {
99 return media_packet_->payload->length;
100 }
101
102 void* payload() const override { return payload_; }
103
104 protected:
105 void Release() override;
106
107 private:
108 PacketImpl(
109 MediaPacketPtr media_packet,
110 const PushPacketCallback& callback,
111 scoped_refptr<base::SingleThreadTaskRunner> task_runner,
112 const MappedSharedBuffer& buffer);
113
114 ~PacketImpl() override;
115
116 static void RunCallback(const PushPacketCallback& callback);
117
118 MediaPacketPtr media_packet_;
119 const PushPacketCallback callback_;
120 scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
121 void* payload_;
122 };
123
124 BindingSet<MediaConsumer> bindings_;
125 FlushRequestedCallback flush_requested_callback_;
126 scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
127 MappedSharedBuffer buffer_;
128 SupplyCallback supply_callback_;
129 };
130
131 } // namespace media
132 } // namespace mojo
133
134 #endif // SERVICES_MEDIA_FRAMEWORK_MOJO_MOJO_CONSUMER_H_
OLDNEW
« no previous file with comments | « services/media/framework_mojo/mojo_allocator.cc ('k') | services/media/framework_mojo/mojo_consumer.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698