OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "media/cast/rtcp/receiver_rtcp_event_subscriber.h" | 5 #include "media/cast/rtcp/receiver_rtcp_event_subscriber.h" |
6 | 6 |
7 #include <utility> | 7 #include <utility> |
8 | 8 |
9 #include "base/single_thread_task_runner.h" | |
10 #include "media/cast/cast_environment.h" | |
11 | |
12 namespace media { | 9 namespace media { |
13 namespace cast { | 10 namespace cast { |
14 | 11 |
15 ReceiverRtcpEventSubscriber::ReceiverRtcpEventSubscriber( | 12 ReceiverRtcpEventSubscriber::ReceiverRtcpEventSubscriber( |
16 const scoped_refptr<base::SingleThreadTaskRunner>& main_thread_proxy, | |
17 const size_t max_size_to_retain, Type type) | 13 const size_t max_size_to_retain, Type type) |
18 : max_size_to_retain_(max_size_to_retain), type_(type) { | 14 : max_size_to_retain_(max_size_to_retain), type_(type) { |
19 DCHECK(main_thread_proxy->RunsTasksOnCurrentThread()); | |
20 DCHECK(max_size_to_retain_ > 0u); | 15 DCHECK(max_size_to_retain_ > 0u); |
21 DCHECK(type_ == kAudioEventSubscriber || type_ == kVideoEventSubscriber); | 16 DCHECK(type_ == kAudioEventSubscriber || type_ == kVideoEventSubscriber); |
22 } | 17 } |
23 | 18 |
24 ReceiverRtcpEventSubscriber::~ReceiverRtcpEventSubscriber() { | 19 ReceiverRtcpEventSubscriber::~ReceiverRtcpEventSubscriber() { |
25 thread_checker_.CalledOnValidThread(); | 20 DCHECK(thread_checker_.CalledOnValidThread()); |
26 } | 21 } |
27 | 22 |
28 void ReceiverRtcpEventSubscriber::OnReceiveFrameEvent( | 23 void ReceiverRtcpEventSubscriber::OnReceiveFrameEvent( |
29 const FrameEvent& frame_event) { | 24 const FrameEvent& frame_event) { |
30 thread_checker_.CalledOnValidThread(); | 25 DCHECK(thread_checker_.CalledOnValidThread()); |
31 | 26 |
32 if (ShouldProcessEvent(frame_event.type)) { | 27 if (ShouldProcessEvent(frame_event.type)) { |
33 RtcpEvent rtcp_event; | 28 RtcpEvent rtcp_event; |
34 switch (frame_event.type) { | 29 switch (frame_event.type) { |
35 case kAudioPlayoutDelay: | 30 case kAudioPlayoutDelay: |
36 case kVideoRenderDelay: | 31 case kVideoRenderDelay: |
37 rtcp_event.delay_delta = frame_event.delay_delta; | 32 rtcp_event.delay_delta = frame_event.delay_delta; |
38 case kAudioFrameDecoded: | 33 case kAudioFrameDecoded: |
39 case kVideoFrameDecoded: | 34 case kVideoFrameDecoded: |
40 // TODO(imcheng): This doesn't seem correct because kAudioAckSent and | 35 // TODO(imcheng): This doesn't seem correct because kAudioAckSent and |
(...skipping 11 matching lines...) Expand all Loading... |
52 } | 47 } |
53 } | 48 } |
54 | 49 |
55 TruncateMapIfNeeded(); | 50 TruncateMapIfNeeded(); |
56 | 51 |
57 DCHECK(rtcp_events_.size() <= max_size_to_retain_); | 52 DCHECK(rtcp_events_.size() <= max_size_to_retain_); |
58 } | 53 } |
59 | 54 |
60 void ReceiverRtcpEventSubscriber::OnReceivePacketEvent( | 55 void ReceiverRtcpEventSubscriber::OnReceivePacketEvent( |
61 const PacketEvent& packet_event) { | 56 const PacketEvent& packet_event) { |
62 thread_checker_.CalledOnValidThread(); | 57 DCHECK(thread_checker_.CalledOnValidThread()); |
63 | 58 |
64 if (ShouldProcessEvent(packet_event.type)) { | 59 if (ShouldProcessEvent(packet_event.type)) { |
65 RtcpEvent rtcp_event; | 60 RtcpEvent rtcp_event; |
66 if (packet_event.type == kAudioPacketReceived || | 61 if (packet_event.type == kAudioPacketReceived || |
67 packet_event.type == kVideoPacketReceived) { | 62 packet_event.type == kVideoPacketReceived) { |
68 rtcp_event.type = packet_event.type; | 63 rtcp_event.type = packet_event.type; |
69 rtcp_event.timestamp = packet_event.timestamp; | 64 rtcp_event.timestamp = packet_event.timestamp; |
70 rtcp_event.packet_id = packet_event.packet_id; | 65 rtcp_event.packet_id = packet_event.packet_id; |
71 rtcp_events_.insert( | 66 rtcp_events_.insert( |
72 std::make_pair(packet_event.rtp_timestamp, rtcp_event)); | 67 std::make_pair(packet_event.rtp_timestamp, rtcp_event)); |
73 } | 68 } |
74 } | 69 } |
75 | 70 |
76 TruncateMapIfNeeded(); | 71 TruncateMapIfNeeded(); |
77 | 72 |
78 DCHECK(rtcp_events_.size() <= max_size_to_retain_); | 73 DCHECK(rtcp_events_.size() <= max_size_to_retain_); |
79 } | 74 } |
80 | 75 |
81 void ReceiverRtcpEventSubscriber::OnReceiveGenericEvent( | 76 void ReceiverRtcpEventSubscriber::OnReceiveGenericEvent( |
82 const GenericEvent& generic_event) { | 77 const GenericEvent& generic_event) { |
83 thread_checker_.CalledOnValidThread(); | 78 DCHECK(thread_checker_.CalledOnValidThread()); |
84 // Do nothing as RTP receiver is not interested in generic events for RTCP. | 79 // Do nothing as RTP receiver is not interested in generic events for RTCP. |
85 } | 80 } |
86 | 81 |
87 void ReceiverRtcpEventSubscriber::GetReceiverLogMessageAndReset( | 82 void ReceiverRtcpEventSubscriber::GetReceiverLogMessageAndReset( |
88 RtcpReceiverLogMessage* receiver_log) { | 83 RtcpReceiverLogMessage* receiver_log) { |
89 thread_checker_.CalledOnValidThread(); | 84 DCHECK(thread_checker_.CalledOnValidThread()); |
90 | 85 |
91 receiver_log->clear(); | 86 receiver_log->clear(); |
92 | 87 |
93 typedef std::multimap<RtpTimestamp, RtcpEvent> RtcpEventMultiMap; | 88 typedef std::multimap<RtpTimestamp, RtcpEvent> RtcpEventMultiMap; |
94 RtcpEventMultiMap::const_iterator it = rtcp_events_.begin(); | 89 RtcpEventMultiMap::const_iterator it = rtcp_events_.begin(); |
95 while (it != rtcp_events_.end()) { | 90 while (it != rtcp_events_.end()) { |
96 // On each iteration, process all entries that have the same key (RTP | 91 // On each iteration, process all entries that have the same key (RTP |
97 // timestamp) within the multimap, and generate a | 92 // timestamp) within the multimap, and generate a |
98 // RtcpReceiverFrameLogMessage from them. | 93 // RtcpReceiverFrameLogMessage from them. |
99 RtpTimestamp rtp_timestamp = it->first; | 94 RtpTimestamp rtp_timestamp = it->first; |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
135 return event_type == kVideoRenderDelay || | 130 return event_type == kVideoRenderDelay || |
136 event_type == kVideoFrameDecoded || event_type == kVideoAckSent || | 131 event_type == kVideoFrameDecoded || event_type == kVideoAckSent || |
137 event_type == kVideoPacketReceived; | 132 event_type == kVideoPacketReceived; |
138 } else { | 133 } else { |
139 return false; | 134 return false; |
140 } | 135 } |
141 } | 136 } |
142 | 137 |
143 } // namespace cast | 138 } // namespace cast |
144 } // namespace media | 139 } // namespace media |
OLD | NEW |