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

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

Powered by Google App Engine
This is Rietveld 408576698