Chromium Code Reviews| Index: media/cast/logging/logging_raw.cc |
| diff --git a/media/cast/logging/logging_raw.cc b/media/cast/logging/logging_raw.cc |
| index 95257296000bbc8ff18a979c318b09fc07218068..b419f829e6acc3a09f09c20848c944d94c1794b3 100644 |
| --- a/media/cast/logging/logging_raw.cc |
| +++ b/media/cast/logging/logging_raw.cc |
| @@ -11,8 +11,9 @@ |
| namespace media { |
| namespace cast { |
| -LoggingRaw::LoggingRaw() |
| - : frame_map_(), |
| +LoggingRaw::LoggingRaw(bool is_sender) |
| + : is_sender_(is_sender), |
| + frame_map_(), |
| packet_map_(), |
| generic_map_(), |
| weak_factory_(this) {} |
| @@ -24,6 +25,8 @@ void LoggingRaw::InsertFrameEvent(const base::TimeTicks& time_of_event, |
| uint32 rtp_timestamp, |
| uint32 frame_id) { |
| InsertBaseFrameEvent(time_of_event, event, frame_id, rtp_timestamp); |
| + |
| + InsertRtcpFrameEvent(time_of_event, event, rtp_timestamp, base::TimeDelta()); |
| } |
| void LoggingRaw::InsertFrameEventWithSize(const base::TimeTicks& time_of_event, |
| @@ -48,6 +51,8 @@ void LoggingRaw::InsertFrameEventWithDelay(const base::TimeTicks& time_of_event, |
| FrameRawMap::iterator it = frame_map_.find(rtp_timestamp); |
| DCHECK(it != frame_map_.end()); |
| it->second.delay_delta = delay; |
| + |
| + InsertRtcpFrameEvent(time_of_event, event, rtp_timestamp, delay); |
| } |
| void LoggingRaw::InsertBaseFrameEvent(const base::TimeTicks& time_of_event, |
| @@ -107,6 +112,20 @@ void LoggingRaw::InsertPacketEvent(const base::TimeTicks& time_of_event, |
| packet_it->second.type.push_back(event); |
| } |
| } |
| + if (event == kAudioPacketReceived) { |
| + // TOOD audio or video |
|
mikhal1
2014/01/14 19:57:18
nit:todo format
pwestin
2014/01/17 23:46:17
That todo was done
|
| + ReceiverRtcpEvent rtcp_event; |
| + rtcp_event.type = event; |
| + rtcp_event.timestamp = time_of_event; |
| + rtcp_event.packet_id = packet_id; |
| + audio_rtcp_map_.insert(std::make_pair(rtp_timestamp, rtcp_event)); |
| + } else if (event == kVideoPacketReceived) { |
| + ReceiverRtcpEvent rtcp_event; |
| + rtcp_event.type = event; |
| + rtcp_event.timestamp = time_of_event; |
| + rtcp_event.packet_id = packet_id; |
| + video_rtcp_map_.insert(std::make_pair(rtp_timestamp, rtcp_event)); |
| + } |
| } |
| void LoggingRaw::InsertGenericEvent(const base::TimeTicks& time_of_event, |
| @@ -126,6 +145,60 @@ void LoggingRaw::InsertGenericEvent(const base::TimeTicks& time_of_event, |
| } |
| } |
| +void LoggingRaw::InsertRtcpFrameEvent(const base::TimeTicks& time_of_event, |
| + CastLoggingEvent event, |
| + uint32 rtp_timestamp, |
| + base::TimeDelta delay) { |
| + ReceiverRtcpEvent rtcp_event; |
| + if (is_sender_) { |
| + if (event != kVideoFrameCaptured && |
| + event != kVideoFrameSentToEncoder && |
| + event != kVideoFrameEncoded) { |
| + // Not interested in other events. |
| + return; |
| + } |
| + VideoRtcpRawMap::iterator it = video_rtcp_map_.find(rtp_timestamp); |
| + if (it == video_rtcp_map_.end()) { |
| + // We don't this frame (RTP timestamp) in our map. |
|
mikhal1
2014/01/14 19:57:18
rephrase
pwestin
2014/01/17 23:46:17
Done.
|
| + rtcp_event.type = event; |
| + video_rtcp_map_.insert(std::make_pair(rtp_timestamp, rtcp_event)); |
| + } else { |
| + // We already have this frame (RTP timestamp) in our map. |
| + // Only update events that are later in the chain. |
| + if (event == kVideoFrameCaptured) { |
| + return; // First event in chain can not be late by definition. |
|
mikhal1
2014/01/14 19:57:18
But can two frames have the same event? How can th
pwestin
2014/01/17 23:46:17
Correct but events could be reordered in theory.
mikhal1
2014/01/17 23:48:13
Could you add a comment pls?
On 2014/01/17 23:46:1
pwestin
2014/01/17 23:57:23
Done.
|
| + } |
| + if (it->second.type == kVideoFrameEncoded) { |
| + return; // Last event in chain should not be updated. |
| + } |
| + // Update existing entry. |
| + it->second.type = event; |
| + } |
| + } else { |
| + // We are a cast receiver. |
| + switch (event) { |
| + case kAudioPlayoutDelay: |
| + rtcp_event.delay_delta = delay; |
| + case kAudioFrameDecoded: |
| + case kAudioAckSent: |
| + rtcp_event.type = event; |
| + rtcp_event.timestamp = time_of_event; |
| + audio_rtcp_map_.insert(std::make_pair(rtp_timestamp, rtcp_event)); |
| + break; |
| + case kVideoRenderDelay: |
| + rtcp_event.delay_delta = delay; |
| + case kVideoFrameDecoded: |
| + case kVideoAckSent: |
| + rtcp_event.type = event; |
| + rtcp_event.timestamp = time_of_event; |
| + video_rtcp_map_.insert(std::make_pair(rtp_timestamp, rtcp_event)); |
| + break; |
| + default: |
| + break; |
| + } |
| + } |
| +} |
| + |
| FrameRawMap LoggingRaw::GetFrameData() const { |
| return frame_map_; |
| } |
| @@ -138,6 +211,18 @@ GenericRawMap LoggingRaw::GetGenericData() const { |
| return generic_map_; |
| } |
| +AudioRtcpRawMap LoggingRaw::GetAndResetAudioRtcpData() { |
| + AudioRtcpRawMap return_map; |
| + audio_rtcp_map_.swap(return_map); |
| + return return_map; |
| +} |
| + |
| +VideoRtcpRawMap LoggingRaw::GetAndResetVideoRtcpData() { |
| + VideoRtcpRawMap return_map; |
| + video_rtcp_map_.swap(return_map); |
| + return return_map; |
| +} |
| + |
| void LoggingRaw::Reset() { |
| frame_map_.clear(); |
| packet_map_.clear(); |