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

Side by Side Diff: media/cast/rtcp/sender_rtcp_event_subscriber.cc

Issue 270493003: Cast: Deduplicate event types in cast library. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase Created 6 years, 7 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
1 // Copyright 2014 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "media/cast/rtcp/sender_rtcp_event_subscriber.h" 5 #include "media/cast/rtcp/sender_rtcp_event_subscriber.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "media/cast/rtcp/rtcp_defines.h" 10 #include "media/cast/rtcp/rtcp_defines.h"
11 11
12 namespace media { 12 namespace media {
13 namespace cast { 13 namespace cast {
14 14
15 SenderRtcpEventSubscriber::SenderRtcpEventSubscriber( 15 SenderRtcpEventSubscriber::SenderRtcpEventSubscriber(
16 const size_t max_size_to_retain) 16 const size_t max_size_to_retain)
17 : max_size_to_retain_(max_size_to_retain) { 17 : max_size_to_retain_(max_size_to_retain) {
18 DCHECK(max_size_to_retain_ > 0u); 18 DCHECK(max_size_to_retain_ > 0u);
19 } 19 }
20 20
21 SenderRtcpEventSubscriber::~SenderRtcpEventSubscriber() { 21 SenderRtcpEventSubscriber::~SenderRtcpEventSubscriber() {
22 DCHECK(thread_checker_.CalledOnValidThread()); 22 DCHECK(thread_checker_.CalledOnValidThread());
23 } 23 }
24 24
25 void SenderRtcpEventSubscriber::OnReceiveFrameEvent( 25 void SenderRtcpEventSubscriber::OnReceiveFrameEvent(
26 const FrameEvent& frame_event) { 26 const FrameEvent& frame_event) {
27 DCHECK(thread_checker_.CalledOnValidThread()); 27 DCHECK(thread_checker_.CalledOnValidThread());
28 if (frame_event.type != kVideoFrameCaptureBegin && 28 if (frame_event.media_type != VIDEO_EVENT)
29 frame_event.type != kVideoFrameSentToEncoder && 29 return;
30 frame_event.type != kVideoFrameEncoded) { 30 if (frame_event.type != FRAME_CAPTURE_BEGIN &&
31 frame_event.type != FRAME_ENCODED) {
31 // Not interested in other events. 32 // Not interested in other events.
32 return; 33 return;
33 } 34 }
34 35
35 RtcpEventMap::iterator it = rtcp_events_.find(frame_event.rtp_timestamp); 36 RtcpEventMap::iterator it = rtcp_events_.find(frame_event.rtp_timestamp);
36 if (it == rtcp_events_.end()) { 37 if (it == rtcp_events_.end()) {
37 // We have not stored this frame (RTP timestamp) in our map. 38 // We have not stored this frame (RTP timestamp) in our map.
38 RtcpEvent rtcp_event; 39 RtcpEvent rtcp_event;
39 rtcp_event.type = frame_event.type; 40 rtcp_event.type = frame_event.type;
40 rtcp_event.timestamp = frame_event.timestamp; 41 rtcp_event.timestamp = frame_event.timestamp;
41 42
42 // Do not need to fill out rtcp_event.delay_delta or rtcp_event.packet_id 43 // Do not need to fill out rtcp_event.delay_delta or rtcp_event.packet_id
43 // as they are not set in frame events we are interested in. 44 // as they are not set in frame events we are interested in.
44 rtcp_events_.insert(std::make_pair(frame_event.rtp_timestamp, rtcp_event)); 45 rtcp_events_.insert(std::make_pair(frame_event.rtp_timestamp, rtcp_event));
45 46
46 TruncateMapIfNeeded(); 47 TruncateMapIfNeeded();
47 } else { 48 } else {
48 // We already have this frame (RTP timestamp) in our map. 49 // We already have this frame (RTP timestamp) in our map.
49 // Only update events that are later in the chain. 50 // Only update events that are later in the chain.
50 // This is due to that events can be reordered on the wire. 51 // This is due to that events can be reordered on the wire.
51 if (frame_event.type == kVideoFrameCaptureBegin) { 52 if (frame_event.type == FRAME_CAPTURE_BEGIN) {
52 return; // First event in chain can not be late by definition. 53 return; // First event in chain can not be late by definition.
53 } 54 }
54 55
55 if (it->second.type == kVideoFrameEncoded) { 56 if (it->second.type == FRAME_ENCODED) {
56 return; // Last event in chain should not be updated. 57 return; // Last event in chain should not be updated.
57 } 58 }
58 59
59 // Update existing entry. 60 // Update existing entry.
60 it->second.type = frame_event.type; 61 it->second.type = frame_event.type;
61 } 62 }
62 63
63 DCHECK(rtcp_events_.size() <= max_size_to_retain_); 64 DCHECK(rtcp_events_.size() <= max_size_to_retain_);
64 } 65 }
65 66
(...skipping 16 matching lines...) Expand all
82 if (rtcp_events_.size() > max_size_to_retain_) { 83 if (rtcp_events_.size() > max_size_to_retain_) {
83 DVLOG(2) << "RTCP event map exceeded size limit; " 84 DVLOG(2) << "RTCP event map exceeded size limit; "
84 << "removing oldest entry"; 85 << "removing oldest entry";
85 // This is fine since we only insert elements one at a time. 86 // This is fine since we only insert elements one at a time.
86 rtcp_events_.erase(rtcp_events_.begin()); 87 rtcp_events_.erase(rtcp_events_.begin());
87 } 88 }
88 } 89 }
89 90
90 } // namespace cast 91 } // namespace cast
91 } // namespace media 92 } // namespace media
OLDNEW
« no previous file with comments | « media/cast/rtcp/rtcp_utility.cc ('k') | media/cast/rtcp/sender_rtcp_event_subscriber_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698