OLD | NEW |
(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/raw_event_subscriber_bundle.h" |
| 6 |
| 7 #include "media/cast/cast_environment.h" |
| 8 #include "media/cast/logging/receiver_time_offset_estimator_impl.h" |
| 9 |
| 10 namespace media { |
| 11 namespace cast { |
| 12 |
| 13 RawEventSubscriberBundleForStream::RawEventSubscriberBundleForStream( |
| 14 const scoped_refptr<CastEnvironment>& cast_environment, |
| 15 bool is_audio, |
| 16 ReceiverTimeOffsetEstimator* offset_estimator) |
| 17 : cast_environment_(cast_environment), |
| 18 event_subscriber_( |
| 19 is_audio ? AUDIO_EVENT : VIDEO_EVENT, |
| 20 is_audio ? kMaxAudioEventEntries : kMaxVideoEventEntries), |
| 21 stats_subscriber_( |
| 22 is_audio ? AUDIO_EVENT : VIDEO_EVENT, |
| 23 cast_environment->Clock(), offset_estimator) { |
| 24 cast_environment_->Logging()->AddRawEventSubscriber(&event_subscriber_); |
| 25 cast_environment_->Logging()->AddRawEventSubscriber(&stats_subscriber_); |
| 26 } |
| 27 |
| 28 RawEventSubscriberBundleForStream::~RawEventSubscriberBundleForStream() { |
| 29 cast_environment_->Logging()->RemoveRawEventSubscriber(&event_subscriber_); |
| 30 cast_environment_->Logging()->RemoveRawEventSubscriber(&stats_subscriber_); |
| 31 } |
| 32 |
| 33 EncodingEventSubscriber* |
| 34 RawEventSubscriberBundleForStream::GetEncodingEventSubscriber() { |
| 35 return &event_subscriber_; |
| 36 } |
| 37 |
| 38 StatsEventSubscriber* |
| 39 RawEventSubscriberBundleForStream::GetStatsEventSubscriber() { |
| 40 return &stats_subscriber_; |
| 41 } |
| 42 |
| 43 RawEventSubscriberBundle::RawEventSubscriberBundle( |
| 44 const scoped_refptr<CastEnvironment>& cast_environment) |
| 45 : cast_environment_(cast_environment) {} |
| 46 |
| 47 RawEventSubscriberBundle::~RawEventSubscriberBundle() { |
| 48 if (receiver_offset_estimator_.get()) { |
| 49 cast_environment_->Logging()->RemoveRawEventSubscriber( |
| 50 receiver_offset_estimator_.get()); |
| 51 } |
| 52 } |
| 53 |
| 54 void RawEventSubscriberBundle::AddEventSubscribers(bool is_audio) { |
| 55 if (!receiver_offset_estimator_.get()) { |
| 56 receiver_offset_estimator_.reset( |
| 57 new ReceiverTimeOffsetEstimatorImpl); |
| 58 cast_environment_->Logging()->AddRawEventSubscriber( |
| 59 receiver_offset_estimator_.get()); |
| 60 } |
| 61 SubscribersMapByStream::iterator it = subscribers_.find(is_audio); |
| 62 if (it != subscribers_.end()) |
| 63 return; |
| 64 |
| 65 subscribers_.insert(std::make_pair( |
| 66 is_audio, |
| 67 new RawEventSubscriberBundleForStream( |
| 68 cast_environment_, is_audio, receiver_offset_estimator_.get()))); |
| 69 } |
| 70 |
| 71 void RawEventSubscriberBundle::RemoveEventSubscribers(bool is_audio) { |
| 72 SubscribersMapByStream::iterator it = subscribers_.find(is_audio); |
| 73 if (it == subscribers_.end()) |
| 74 return; |
| 75 |
| 76 subscribers_.erase(it); |
| 77 if (subscribers_.empty()) { |
| 78 cast_environment_->Logging()->RemoveRawEventSubscriber( |
| 79 receiver_offset_estimator_.get()); |
| 80 receiver_offset_estimator_.reset(); |
| 81 } |
| 82 } |
| 83 |
| 84 EncodingEventSubscriber* |
| 85 RawEventSubscriberBundle::GetEncodingEventSubscriber(bool is_audio) { |
| 86 SubscribersMapByStream::iterator it = subscribers_.find(is_audio); |
| 87 return it == subscribers_.end() ? |
| 88 NULL : it->second->GetEncodingEventSubscriber(); |
| 89 } |
| 90 |
| 91 StatsEventSubscriber* |
| 92 RawEventSubscriberBundle::GetStatsEventSubscriber(bool is_audio) { |
| 93 SubscribersMapByStream::iterator it = subscribers_.find(is_audio); |
| 94 return it == subscribers_.end() ? |
| 95 NULL : it->second->GetStatsEventSubscriber(); |
| 96 } |
| 97 |
| 98 } // namespace cast |
| 99 } // namespace media |
OLD | NEW |