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

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 miu's comments and changed targets 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 <utility>
8
9 #include "base/logging.h"
10 #include "media/cast/logging/proto/proto_utils.h"
11
12 using google::protobuf::RepeatedPtrField;
13 using media::cast::proto::AggregatedFrameEvent;
14 using media::cast::proto::AggregatedGenericEvent;
15 using media::cast::proto::AggregatedPacketEvent;
16 using media::cast::proto::BasePacketEvent;
17
18 namespace media {
19 namespace cast {
20
21 EncodingEventSubscriber::EncodingEventSubscriber() {}
22
23 EncodingEventSubscriber::~EncodingEventSubscriber() {
24 DCHECK(thread_checker_.CalledOnValidThread());
25 }
26
27 void EncodingEventSubscriber::OnReceiveFrameEvent(
28 const FrameEvent& frame_event) {
29 DCHECK(thread_checker_.CalledOnValidThread());
30
31 FrameEventMap::iterator it = frame_event_map_.find(frame_event.rtp_timestamp);
32 linked_ptr<AggregatedFrameEvent> event_proto;
33
34 // Look up existing entry. If not found, create a new entry and add to map.
35 if (it == frame_event_map_.end()) {
36 event_proto.reset(new AggregatedFrameEvent);
37 event_proto->set_rtp_timestamp(frame_event.rtp_timestamp);
38 frame_event_map_.insert(
39 std::make_pair(frame_event.rtp_timestamp, event_proto));
40 } else {
41 event_proto = it->second;
42 }
43
44 event_proto->add_event_type(ToProtoEventType(frame_event.type));
45 event_proto->add_event_timestamp_micros(
46 frame_event.timestamp.ToInternalValue());
47
48 if (frame_event.type == kAudioFrameEncoded ||
49 frame_event.type == kVideoFrameEncoded) {
50 event_proto->set_encoded_frame_size(frame_event.size);
51 } else if (frame_event.type == kAudioPlayoutDelay ||
52 frame_event.type == kVideoRenderDelay) {
53 event_proto->set_delay_millis(frame_event.delay_delta.InMilliseconds());
54 }
55 }
56
57 void EncodingEventSubscriber::OnReceivePacketEvent(
58 const PacketEvent& packet_event) {
59 DCHECK(thread_checker_.CalledOnValidThread());
60
61 PacketEventMap::iterator it =
62 packet_event_map_.find(packet_event.rtp_timestamp);
63 linked_ptr<AggregatedPacketEvent> event_proto;
64 BasePacketEvent* base_packet_event_proto = NULL;
65
66 // Look up existing entry. If not found, create a new entry and add to map.
67 if (it == packet_event_map_.end()) {
68 event_proto.reset(new AggregatedPacketEvent);
69 event_proto->set_rtp_timestamp(packet_event.rtp_timestamp);
70 packet_event_map_.insert(
71 std::make_pair(packet_event.rtp_timestamp, event_proto));
72 base_packet_event_proto = event_proto->add_base_packet_event();
73 base_packet_event_proto->set_packet_id(packet_event.packet_id);
74 } else {
75 // Found existing entry, now look up existing BasePacketEvent using packet
76 // ID. If not found, create a new entry and add to proto.
77 event_proto = it->second;
78 RepeatedPtrField<BasePacketEvent>* field =
79 event_proto->mutable_base_packet_event();
80 for (RepeatedPtrField<BasePacketEvent>::pointer_iterator it =
81 field->pointer_begin();
82 it != field->pointer_end(); ++it) {
83 if ((*it)->packet_id() == packet_event.packet_id) {
84 base_packet_event_proto = *it;
85 break;
86 }
87 }
88 if (!base_packet_event_proto) {
89 base_packet_event_proto = event_proto->add_base_packet_event();
90 base_packet_event_proto->set_packet_id(packet_event.packet_id);
91 }
92 }
93
94 base_packet_event_proto->add_event_type(ToProtoEventType(packet_event.type));
95 base_packet_event_proto->add_event_timestamp_micros(
96 packet_event.timestamp.ToInternalValue());
97 }
98
99 void EncodingEventSubscriber::OnReceiveGenericEvent(
100 const GenericEvent& generic_event) {
101 DCHECK(thread_checker_.CalledOnValidThread());
102
103 GenericEventMap::iterator it = generic_event_map_.find(generic_event.type);
104 linked_ptr<AggregatedGenericEvent> event_proto;
105 if (it == generic_event_map_.end()) {
106 event_proto.reset(new AggregatedGenericEvent);
107 event_proto->set_event_type(ToProtoEventType(generic_event.type));
108 generic_event_map_.insert(std::make_pair(generic_event.type, event_proto));
109 } else {
110 event_proto = it->second;
111 }
112
113 event_proto->add_event_timestamp_micros(
114 generic_event.timestamp.ToInternalValue());
115 event_proto->add_value(generic_event.value);
116 }
117
118 void EncodingEventSubscriber::GetFrameEventsAndReset(
119 FrameEventMap* frame_event_map) {
120 DCHECK(thread_checker_.CalledOnValidThread());
121 frame_event_map->swap(frame_event_map_);
122 frame_event_map_.clear();
123 }
124
125 void EncodingEventSubscriber::GetPacketEventsAndReset(
126 PacketEventMap* packet_event_map) {
127 DCHECK(thread_checker_.CalledOnValidThread());
128 packet_event_map->swap(packet_event_map_);
129 packet_event_map_.clear();
130 }
131
132 void EncodingEventSubscriber::GetGenericEventsAndReset(
133 GenericEventMap* generic_event_map) {
134 DCHECK(thread_checker_.CalledOnValidThread());
135 generic_event_map->swap(generic_event_map_);
136 generic_event_map_.clear();
137 }
138
139 } // namespace cast
140 } // namespace media
OLDNEW
« no previous file with comments | « media/cast/logging/encoding_event_subscriber.h ('k') | media/cast/logging/encoding_event_subscriber_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698