summaryrefslogtreecommitdiffstats
path: root/chromium/media/cast/logging/raw_event_subscriber_bundle.h
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/media/cast/logging/raw_event_subscriber_bundle.h')
-rw-r--r--chromium/media/cast/logging/raw_event_subscriber_bundle.h84
1 files changed, 84 insertions, 0 deletions
diff --git a/chromium/media/cast/logging/raw_event_subscriber_bundle.h b/chromium/media/cast/logging/raw_event_subscriber_bundle.h
new file mode 100644
index 00000000000..58ab21e6e8a
--- /dev/null
+++ b/chromium/media/cast/logging/raw_event_subscriber_bundle.h
@@ -0,0 +1,84 @@
+// 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.
+
+#ifndef MEDIA_CAST_LOGGING_RAW_EVENT_SUBSCRIBER_BUNDLE_H_
+#define MEDIA_CAST_LOGGING_RAW_EVENT_SUBSCRIBER_BUNDLE_H_
+
+#include "base/macros.h"
+#include "base/memory/ref_counted.h"
+#include "media/cast/logging/encoding_event_subscriber.h"
+#include "media/cast/logging/stats_event_subscriber.h"
+
+namespace media {
+namespace cast {
+
+class CastEnvironment;
+class ReceiverTimeOffsetEstimator;
+
+// Allow 9MB for serialized video / audio event logs.
+const int kMaxSerializedBytes = 9000000;
+
+// Assume serialized log data for each frame will take up to 150 bytes.
+const int kMaxVideoEventEntries = kMaxSerializedBytes / 150;
+
+// Assume serialized log data for each frame will take up to 75 bytes.
+const int kMaxAudioEventEntries = kMaxSerializedBytes / 75;
+
+// A bundle for raw event subscribers for a single stream.
+// It contains an EncodingEventSubscriber and a StatsSubscriber.
+class RawEventSubscriberBundleForStream {
+ public:
+ RawEventSubscriberBundleForStream(
+ const scoped_refptr<CastEnvironment>& cast_environment,
+ bool is_audio,
+ ReceiverTimeOffsetEstimator* offset_estimator);
+ ~RawEventSubscriberBundleForStream();
+
+ EncodingEventSubscriber* GetEncodingEventSubscriber();
+ StatsEventSubscriber* GetStatsEventSubscriber();
+
+ private:
+ const scoped_refptr<CastEnvironment> cast_environment_;
+ EncodingEventSubscriber event_subscriber_;
+ StatsEventSubscriber stats_subscriber_;
+
+ DISALLOW_COPY_AND_ASSIGN(RawEventSubscriberBundleForStream);
+};
+
+// A bundle of subscribers for all streams. An instance of this object
+// is associated with a CastEnvironment.
+// This class can be used for managing event subscribers
+// in a session where they could be multiple streams (i.e. CastSessionDelegate).
+// It also contains a ReceiverTimeOffsetEstimator that is shared by subscribers
+// of different streams.
+class RawEventSubscriberBundle {
+ public:
+ explicit RawEventSubscriberBundle(
+ const scoped_refptr<CastEnvironment>& cast_environment);
+ ~RawEventSubscriberBundle();
+
+ void AddEventSubscribers(bool is_audio);
+ void RemoveEventSubscribers(bool is_audio);
+ EncodingEventSubscriber* GetEncodingEventSubscriber(
+ bool is_audio);
+ StatsEventSubscriber* GetStatsEventSubscriber(bool is_audio);
+
+ private:
+ // Map from (is_audio) -> RawEventSubscriberBundleForStream.
+ // TODO(imcheng): This works because we only have 1 audio and 1 video stream.
+ // This needs to scale better.
+ typedef std::map<bool, linked_ptr<RawEventSubscriberBundleForStream> >
+ SubscribersMapByStream;
+ const scoped_refptr<CastEnvironment> cast_environment_;
+ SubscribersMapByStream subscribers_;
+ scoped_ptr<ReceiverTimeOffsetEstimator> receiver_offset_estimator_;
+
+ DISALLOW_COPY_AND_ASSIGN(RawEventSubscriberBundle);
+};
+
+} // namespace cast
+} // namespace media
+
+#endif // MEDIA_CAST_LOGGING_RAW_EVENT_SUBSCRIBER_BUNDLE_H_
+