| Index: media/cast/logging/raw_event_subscriber_bundle.cc
|
| diff --git a/media/cast/logging/raw_event_subscriber_bundle.cc b/media/cast/logging/raw_event_subscriber_bundle.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..1946b6ce82a3b790a2bca7ecd5dff6cf2223d46f
|
| --- /dev/null
|
| +++ b/media/cast/logging/raw_event_subscriber_bundle.cc
|
| @@ -0,0 +1,99 @@
|
| +// Copyright 2014 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include "media/cast/logging/raw_event_subscriber_bundle.h"
|
| +
|
| +#include "media/cast/cast_environment.h"
|
| +#include "media/cast/logging/receiver_time_offset_estimator_impl.h"
|
| +
|
| +namespace media {
|
| +namespace cast {
|
| +
|
| +RawEventSubscriberBundleForStream::RawEventSubscriberBundleForStream(
|
| + const scoped_refptr<CastEnvironment>& cast_environment,
|
| + bool is_audio,
|
| + ReceiverTimeOffsetEstimator* offset_estimator)
|
| + : cast_environment_(cast_environment),
|
| + event_subscriber_(
|
| + is_audio ? AUDIO_EVENT : VIDEO_EVENT,
|
| + is_audio ? kMaxAudioEventEntries : kMaxVideoEventEntries),
|
| + stats_subscriber_(
|
| + is_audio ? AUDIO_EVENT : VIDEO_EVENT,
|
| + cast_environment->Clock(), offset_estimator) {
|
| + cast_environment_->Logging()->AddRawEventSubscriber(&event_subscriber_);
|
| + cast_environment_->Logging()->AddRawEventSubscriber(&stats_subscriber_);
|
| +}
|
| +
|
| +RawEventSubscriberBundleForStream::~RawEventSubscriberBundleForStream() {
|
| + cast_environment_->Logging()->RemoveRawEventSubscriber(&event_subscriber_);
|
| + cast_environment_->Logging()->RemoveRawEventSubscriber(&stats_subscriber_);
|
| +}
|
| +
|
| +EncodingEventSubscriber*
|
| +RawEventSubscriberBundleForStream::GetEncodingEventSubscriber() {
|
| + return &event_subscriber_;
|
| +}
|
| +
|
| +StatsEventSubscriber*
|
| +RawEventSubscriberBundleForStream::GetStatsEventSubscriber() {
|
| + return &stats_subscriber_;
|
| +}
|
| +
|
| +RawEventSubscriberBundle::RawEventSubscriberBundle(
|
| + const scoped_refptr<CastEnvironment>& cast_environment)
|
| + : cast_environment_(cast_environment) {}
|
| +
|
| +RawEventSubscriberBundle::~RawEventSubscriberBundle() {
|
| + if (receiver_offset_estimator_.get()) {
|
| + cast_environment_->Logging()->RemoveRawEventSubscriber(
|
| + receiver_offset_estimator_.get());
|
| + }
|
| +}
|
| +
|
| +void RawEventSubscriberBundle::AddEventSubscribers(bool is_audio) {
|
| + if (!receiver_offset_estimator_.get()) {
|
| + receiver_offset_estimator_.reset(
|
| + new ReceiverTimeOffsetEstimatorImpl);
|
| + cast_environment_->Logging()->AddRawEventSubscriber(
|
| + receiver_offset_estimator_.get());
|
| + }
|
| + SubscribersMapByStream::iterator it = subscribers_.find(is_audio);
|
| + if (it != subscribers_.end())
|
| + return;
|
| +
|
| + subscribers_.insert(std::make_pair(
|
| + is_audio,
|
| + make_linked_ptr(new RawEventSubscriberBundleForStream(
|
| + cast_environment_, is_audio, receiver_offset_estimator_.get()))));
|
| +}
|
| +
|
| +void RawEventSubscriberBundle::RemoveEventSubscribers(bool is_audio) {
|
| + SubscribersMapByStream::iterator it = subscribers_.find(is_audio);
|
| + if (it == subscribers_.end())
|
| + return;
|
| +
|
| + subscribers_.erase(it);
|
| + if (subscribers_.empty()) {
|
| + cast_environment_->Logging()->RemoveRawEventSubscriber(
|
| + receiver_offset_estimator_.get());
|
| + receiver_offset_estimator_.reset();
|
| + }
|
| +}
|
| +
|
| +EncodingEventSubscriber*
|
| +RawEventSubscriberBundle::GetEncodingEventSubscriber(bool is_audio) {
|
| + SubscribersMapByStream::iterator it = subscribers_.find(is_audio);
|
| + return it == subscribers_.end() ?
|
| + NULL : it->second->GetEncodingEventSubscriber();
|
| +}
|
| +
|
| +StatsEventSubscriber*
|
| +RawEventSubscriberBundle::GetStatsEventSubscriber(bool is_audio) {
|
| + SubscribersMapByStream::iterator it = subscribers_.find(is_audio);
|
| + return it == subscribers_.end() ?
|
| + NULL : it->second->GetStatsEventSubscriber();
|
| +}
|
| +
|
| +} // namespace cast
|
| +} // namespace media
|
|
|