Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1015)

Side by Side Diff: media/cast/logging/encoding_event_subscriber.cc

Issue 138913014: Cast: Added a new RawEventSubscriber implementation for use in cast extension. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Addressed Alpha's comments Created 6 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
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
3 // found in the LICENSE file.
4
5 #include "media/cast/logging/encoding_event_subscriber.h"
6
7 #include <functional>
miu 2014/02/13 02:02:12 Is <functional> needed?
imcheng 2014/02/13 02:38:08 It is not needed. What I do need here is <utility>
8 #include <map>
miu 2014/02/13 02:02:12 You can remove <map>, and "linked_ptr.h" since the
imcheng 2014/02/13 02:38:08 Done.
9
10 #include "base/logging.h"
11 #include "base/memory/linked_ptr.h"
12 #include "media/cast/logging/proto/proto_utils.h"
13
14 using google::protobuf::RepeatedPtrField;
15 using media::cast::proto::AggregatedFrameEvent;
16 using media::cast::proto::AggregatedGenericEvent;
17 using media::cast::proto::AggregatedPacketEvent;
18 using media::cast::proto::BasePacketEvent;
19
20 namespace media {
21 namespace cast {
22
23 EncodingEventSubscriber::EncodingEventSubscriber() {}
24
25 EncodingEventSubscriber::~EncodingEventSubscriber() {
26 DCHECK(thread_checker_.CalledOnValidThread());
27 }
28
29 void EncodingEventSubscriber::OnReceiveFrameEvent(
30 const FrameEvent& frame_event) {
31 DCHECK(thread_checker_.CalledOnValidThread());
32
33 FrameEventMap::iterator it = frame_event_map_.find(frame_event.rtp_timestamp);
34 linked_ptr<AggregatedFrameEvent> event_proto;
35
36 // Look up existing entry. If not found, create a new entry and add to map.
37 if (it == frame_event_map_.end()) {
38 event_proto.reset(new AggregatedFrameEvent);
39 event_proto->set_rtp_timestamp(frame_event.rtp_timestamp);
40 frame_event_map_.insert(
41 std::make_pair(frame_event.rtp_timestamp, event_proto));
42 } else {
43 event_proto = it->second;
44 }
45
46 event_proto->add_event_type(ToProtoEventType(frame_event.type));
47 event_proto->add_event_timestamp_micros(
48 frame_event.timestamp.ToInternalValue());
49
50 if (frame_event.type == kAudioFrameEncoded ||
51 frame_event.type == kVideoFrameEncoded) {
52 event_proto->set_encoded_frame_size(frame_event.size);
53 } else if (frame_event.type == kAudioPlayoutDelay ||
54 frame_event.type == kVideoRenderDelay) {
55 event_proto->set_delay_millis(frame_event.delay_delta.InMilliseconds());
56 }
57 }
58
59 void EncodingEventSubscriber::OnReceivePacketEvent(
60 const PacketEvent& packet_event) {
61 DCHECK(thread_checker_.CalledOnValidThread());
62
63 PacketEventMap::iterator it =
64 packet_event_map_.find(packet_event.rtp_timestamp);
65 linked_ptr<AggregatedPacketEvent> event_proto;
66 BasePacketEvent* base_packet_event_proto = NULL;
67
68 // Look up existing entry. If not found, create a new entry and add to map.
69 if (it == packet_event_map_.end()) {
70 event_proto.reset(new AggregatedPacketEvent);
71 event_proto->set_rtp_timestamp(packet_event.rtp_timestamp);
72 packet_event_map_.insert(
73 std::make_pair(packet_event.rtp_timestamp, event_proto));
74 base_packet_event_proto = event_proto->add_base_packet_event();
75 base_packet_event_proto->set_packet_id(packet_event.packet_id);
76 } else {
77 // Found existing entry, now look up existing BasePacketEvent using packet
78 // ID. If not found, create a new entry and add to proto.
79 event_proto = it->second;
80 RepeatedPtrField<BasePacketEvent>* field =
81 event_proto->mutable_base_packet_event();
82 for (RepeatedPtrField<BasePacketEvent>::pointer_iterator it =
83 field->pointer_begin();
84 it != field->pointer_end(); ++it) {
85 if ((*it)->packet_id() == packet_event.packet_id) {
86 base_packet_event_proto = *it;
87 break;
88 }
89 }
90 if (!base_packet_event_proto) {
91 base_packet_event_proto = event_proto->add_base_packet_event();
92 base_packet_event_proto->set_packet_id(packet_event.packet_id);
93 }
94 }
95
96 base_packet_event_proto->add_event_type(ToProtoEventType(packet_event.type));
97 base_packet_event_proto->add_event_timestamp_micros(
98 packet_event.timestamp.ToInternalValue());
99 }
100
101 void EncodingEventSubscriber::OnReceiveGenericEvent(
102 const GenericEvent& generic_event) {
103 DCHECK(thread_checker_.CalledOnValidThread());
104
105 GenericEventMap::iterator it = generic_event_map_.find(generic_event.type);
106 linked_ptr<AggregatedGenericEvent> event_proto;
107 if (it == generic_event_map_.end()) {
108 event_proto.reset(new AggregatedGenericEvent);
109 event_proto->set_event_type(ToProtoEventType(generic_event.type));
110 generic_event_map_.insert(std::make_pair(generic_event.type, event_proto));
111 } else {
112 event_proto = it->second;
113 }
114
115 event_proto->add_event_timestamp_micros(
116 generic_event.timestamp.ToInternalValue());
117 event_proto->add_value(generic_event.value);
118 }
119
120 void EncodingEventSubscriber::GetFrameEventsAndReset(
121 FrameEventMap* frame_event_map) {
122 DCHECK(thread_checker_.CalledOnValidThread());
123 frame_event_map->swap(frame_event_map_);
124 frame_event_map_.clear();
125 }
126
127 void EncodingEventSubscriber::GetPacketEventsAndReset(
128 PacketEventMap* packet_event_map) {
129 DCHECK(thread_checker_.CalledOnValidThread());
130 packet_event_map->swap(packet_event_map_);
131 packet_event_map_.clear();
132 }
133
134 void EncodingEventSubscriber::GetGenericEventsAndReset(
135 GenericEventMap* generic_event_map) {
136 DCHECK(thread_checker_.CalledOnValidThread());
137 generic_event_map->swap(generic_event_map_);
138 generic_event_map_.clear();
139 }
140
141 } // namespace cast
142 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698