Chromium Code Reviews| Index: media/cast/rtcp/rtcp_receiver.cc |
| diff --git a/media/cast/rtcp/rtcp_receiver.cc b/media/cast/rtcp/rtcp_receiver.cc |
| index 8c0e593d6e22a2c7332ad8aa2d8b309466901b15..f8d9df4b9e66d0d628194c3da3989b2c06dc1391 100644 |
| --- a/media/cast/rtcp/rtcp_receiver.cc |
| +++ b/media/cast/rtcp/rtcp_receiver.cc |
| @@ -10,35 +10,11 @@ |
| namespace { |
| -media::cast::CastLoggingEvent TranslateToLogEventFromWireFormat(uint8 event) { |
| - switch (event) { |
| - case 1: |
| - return media::cast::kAudioAckSent; |
| - case 2: |
| - return media::cast::kAudioPlayoutDelay; |
| - case 3: |
| - return media::cast::kAudioFrameDecoded; |
| - case 4: |
| - return media::cast::kAudioPacketReceived; |
| - case 5: |
| - return media::cast::kVideoAckSent; |
| - case 6: |
| - return media::cast::kVideoFrameDecoded; |
| - case 7: |
| - return media::cast::kVideoRenderDelay; |
| - case 8: |
| - return media::cast::kVideoPacketReceived; |
| - case 9: |
| - return media::cast::kDuplicateAudioPacketReceived; |
| - case 10: |
| - return media::cast::kDuplicateVideoPacketReceived; |
| - default: |
| - // If the sender adds new log messages we will end up here until we add |
| - // the new messages in the receiver. |
| - VLOG(1) << "Unexpected log message received: " << static_cast<int>(event); |
| - NOTREACHED(); |
| - return media::cast::kUnknown; |
| - } |
| +bool IsRtcpPacketEvent(media::cast::CastLoggingEvent event_type) { |
| + return event_type == media::cast::kAudioPacketReceived || |
| + event_type == media::cast::kVideoPacketReceived || |
| + event_type == media::cast::kDuplicateAudioPacketReceived || |
| + event_type == media::cast::kDuplicateVideoPacketReceived; |
| } |
| media::cast::transport::RtcpSenderFrameStatus |
| @@ -61,12 +37,16 @@ TranslateToFrameStatusFromWireFormat(uint8 status) { |
| } |
| } |
| -// A receiver event is identified by frame RTP timestamp, event timestamp and |
| -// event type. |
| +// A receiver frame event is identified by frame RTP timestamp, event timestamp |
| +// and event type. |
| +// A receiver packet event is identified by all of the above plus packet id. |
| size_t HashReceiverEvent(uint32 frame_rtp_timestamp, |
|
Alpha Left Google
2014/05/06 20:55:52
I suggest we change the hash set to use a key of s
imcheng
2014/05/06 21:19:47
Are you suggesting that we get rid of the base::Ha
Alpha Left Google
2014/05/06 21:21:45
That's right. I used it because base::hash_map mig
imcheng
2014/05/06 22:29:39
Done.
|
| const base::TimeTicks& event_timestamp, |
| - media::cast::CastLoggingEvent event_type) { |
| + uint8 event_type, |
| + uint16 packet_id_or_zero) { |
| uint64 value1 = event_type; |
| + value1 <<= 16; |
| + value1 |= packet_id_or_zero; |
| value1 <<= 32; |
| value1 |= frame_rtp_timestamp; |
| return base::HashInts64( |
| @@ -490,8 +470,10 @@ void RtcpReceiver::HandleApplicationSpecificCastReceiverEventLog( |
| RtcpReceiverEventLogMessages* event_log_messages) { |
| const RtcpField& rtcp_field = rtcp_parser->Field(); |
| - const CastLoggingEvent event_type = |
| - TranslateToLogEventFromWireFormat(rtcp_field.cast_receiver_log.event); |
| + const uint8 event = rtcp_field.cast_receiver_log.event; |
| + const CastLoggingEvent event_type = TranslateToLogEventFromWireFormat(event); |
| + uint16 packet_id = IsRtcpPacketEvent(event_type) ? |
| + rtcp_field.cast_receiver_log.delay_delta_or_packet_id.packet_id : 0; |
| const base::TimeTicks event_timestamp = |
| base::TimeTicks() + |
| base::TimeDelta::FromMilliseconds( |
| @@ -506,7 +488,7 @@ void RtcpReceiver::HandleApplicationSpecificCastReceiverEventLog( |
| // Different events may have the same hash value. That's okay because full |
| // accuracy is not important in this case. |
| const size_t event_hash = |
| - HashReceiverEvent(frame_rtp_timestamp, event_timestamp, event_type); |
| + HashReceiverEvent(frame_rtp_timestamp, event_timestamp, event, packet_id); |
| if (receiver_event_hash_set_.find(event_hash) != |
| receiver_event_hash_set_.end()) { |
| return; |