| Index: media/cast/logging/encoding_event_subscriber.cc
|
| diff --git a/media/cast/logging/encoding_event_subscriber.cc b/media/cast/logging/encoding_event_subscriber.cc
|
| index 265e39d2be4c05d5a23540d586e33a247600feae..5262e4928ecb5270f7fe774687b8248a2563a361 100644
|
| --- a/media/cast/logging/encoding_event_subscriber.cc
|
| +++ b/media/cast/logging/encoding_event_subscriber.cc
|
| @@ -20,8 +20,12 @@ namespace media {
|
| namespace cast {
|
|
|
| EncodingEventSubscriber::EncodingEventSubscriber(
|
| - EventMediaType event_media_type, size_t max_frames)
|
| - : event_media_type_(event_media_type), max_frames_(max_frames) {}
|
| + EventMediaType event_media_type,
|
| + size_t max_frames)
|
| + : event_media_type_(event_media_type),
|
| + max_frames_(max_frames),
|
| + seen_first_rtp_timestamp_(false),
|
| + first_rtp_timestamp_(0u) {}
|
|
|
| EncodingEventSubscriber::~EncodingEventSubscriber() {
|
| DCHECK(thread_checker_.CalledOnValidThread());
|
| @@ -32,16 +36,17 @@ void EncodingEventSubscriber::OnReceiveFrameEvent(
|
| DCHECK(thread_checker_.CalledOnValidThread());
|
|
|
| if (ShouldProcessEvent(frame_event.type)) {
|
| - FrameEventMap::iterator it =
|
| - frame_event_map_.find(frame_event.rtp_timestamp);
|
| + RtpTimestamp relative_rtp_timestamp =
|
| + GetRelativeRtpTimestamp(frame_event.rtp_timestamp);
|
| + FrameEventMap::iterator it = frame_event_map_.find(relative_rtp_timestamp);
|
| linked_ptr<AggregatedFrameEvent> event_proto;
|
|
|
| // Look up existing entry. If not found, create a new entry and add to map.
|
| if (it == frame_event_map_.end()) {
|
| event_proto.reset(new AggregatedFrameEvent);
|
| - event_proto->set_rtp_timestamp(frame_event.rtp_timestamp);
|
| + event_proto->set_rtp_timestamp(relative_rtp_timestamp);
|
| frame_event_map_.insert(
|
| - std::make_pair(frame_event.rtp_timestamp, event_proto));
|
| + std::make_pair(relative_rtp_timestamp, event_proto));
|
| } else {
|
| event_proto = it->second;
|
| }
|
| @@ -69,17 +74,19 @@ void EncodingEventSubscriber::OnReceivePacketEvent(
|
| DCHECK(thread_checker_.CalledOnValidThread());
|
|
|
| if (ShouldProcessEvent(packet_event.type)) {
|
| + RtpTimestamp relative_rtp_timestamp =
|
| + GetRelativeRtpTimestamp(packet_event.rtp_timestamp);
|
| PacketEventMap::iterator it =
|
| - packet_event_map_.find(packet_event.rtp_timestamp);
|
| + packet_event_map_.find(relative_rtp_timestamp);
|
| linked_ptr<AggregatedPacketEvent> event_proto;
|
| BasePacketEvent* base_packet_event_proto = NULL;
|
|
|
| // Look up existing entry. If not found, create a new entry and add to map.
|
| if (it == packet_event_map_.end()) {
|
| event_proto.reset(new AggregatedPacketEvent);
|
| - event_proto->set_rtp_timestamp(packet_event.rtp_timestamp);
|
| + event_proto->set_rtp_timestamp(relative_rtp_timestamp);
|
| packet_event_map_.insert(
|
| - std::make_pair(packet_event.rtp_timestamp, event_proto));
|
| + std::make_pair(relative_rtp_timestamp, event_proto));
|
| base_packet_event_proto = event_proto->add_base_packet_event();
|
| base_packet_event_proto->set_packet_id(packet_event.packet_id);
|
| } else {
|
| @@ -120,21 +127,18 @@ void EncodingEventSubscriber::OnReceiveGenericEvent(
|
| // Do nothing, there are no generic events we are interested in.
|
| }
|
|
|
| -void EncodingEventSubscriber::GetFrameEventsAndReset(
|
| - FrameEventMap* frame_event_map) {
|
| +void EncodingEventSubscriber::GetEventsAndReset(
|
| + FrameEventMap* frame_events,
|
| + PacketEventMap* packet_events,
|
| + RtpTimestamp* first_rtp_timestamp) {
|
| DCHECK(thread_checker_.CalledOnValidThread());
|
| - frame_event_map->swap(frame_event_map_);
|
| - frame_event_map_.clear();
|
| -}
|
|
|
| -void EncodingEventSubscriber::GetPacketEventsAndReset(
|
| - PacketEventMap* packet_event_map) {
|
| - DCHECK(thread_checker_.CalledOnValidThread());
|
| - packet_event_map->swap(packet_event_map_);
|
| - packet_event_map_.clear();
|
| + frame_events->swap(frame_event_map_);
|
| + packet_events->swap(packet_event_map_);
|
| + *first_rtp_timestamp = first_rtp_timestamp_;
|
| + Reset();
|
| }
|
|
|
| -
|
| bool EncodingEventSubscriber::ShouldProcessEvent(CastLoggingEvent event) {
|
| return GetEventMediaType(event) == event_media_type_;
|
| }
|
| @@ -153,5 +157,22 @@ void EncodingEventSubscriber::TruncatePacketEventMapIfNeeded() {
|
| packet_event_map_.erase(packet_event_map_.begin());
|
| }
|
|
|
| +RtpTimestamp EncodingEventSubscriber::GetRelativeRtpTimestamp(
|
| + RtpTimestamp rtp_timestamp) {
|
| + if (!seen_first_rtp_timestamp_) {
|
| + seen_first_rtp_timestamp_ = true;
|
| + first_rtp_timestamp_ = rtp_timestamp;
|
| + }
|
| +
|
| + return rtp_timestamp - first_rtp_timestamp_;
|
| +}
|
| +
|
| +void EncodingEventSubscriber::Reset() {
|
| + frame_event_map_.clear();
|
| + packet_event_map_.clear();
|
| + seen_first_rtp_timestamp_ = false;
|
| + first_rtp_timestamp_ = 0u;
|
| +}
|
| +
|
| } // namespace cast
|
| } // namespace media
|
|
|