| 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 |