• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 #ifndef MEDIA_CAST_LOGGING_RAW_EVENT_SUBSCRIBER_BUNDLE_H_
6 #define MEDIA_CAST_LOGGING_RAW_EVENT_SUBSCRIBER_BUNDLE_H_
7 
8 #include "base/macros.h"
9 #include "base/memory/ref_counted.h"
10 #include "media/cast/logging/encoding_event_subscriber.h"
11 #include "media/cast/logging/stats_event_subscriber.h"
12 
13 namespace media {
14 namespace cast {
15 
16 class CastEnvironment;
17 class ReceiverTimeOffsetEstimator;
18 
19 // Allow 9MB for serialized video / audio event logs.
20 const int kMaxSerializedBytes = 9000000;
21 
22 // Assume serialized log data for each frame will take up to 150 bytes.
23 const int kMaxVideoEventEntries = kMaxSerializedBytes / 150;
24 
25 // Assume serialized log data for each frame will take up to 75 bytes.
26 const int kMaxAudioEventEntries = kMaxSerializedBytes / 75;
27 
28 // A bundle for raw event subscribers for a single stream.
29 // It contains an EncodingEventSubscriber and a StatsSubscriber.
30 class RawEventSubscriberBundleForStream {
31  public:
32   RawEventSubscriberBundleForStream(
33       const scoped_refptr<CastEnvironment>& cast_environment,
34       bool is_audio,
35       ReceiverTimeOffsetEstimator* offset_estimator);
36   ~RawEventSubscriberBundleForStream();
37 
38   EncodingEventSubscriber* GetEncodingEventSubscriber();
39   StatsEventSubscriber* GetStatsEventSubscriber();
40 
41  private:
42   const scoped_refptr<CastEnvironment> cast_environment_;
43   EncodingEventSubscriber event_subscriber_;
44   StatsEventSubscriber stats_subscriber_;
45 
46   DISALLOW_COPY_AND_ASSIGN(RawEventSubscriberBundleForStream);
47 };
48 
49 // A bundle of subscribers for all streams. An instance of this object
50 // is associated with a CastEnvironment.
51 // This class can be used for managing event subscribers
52 // in a session where they could be multiple streams (i.e. CastSessionDelegate).
53 // It also contains a ReceiverTimeOffsetEstimator that is shared by subscribers
54 // of different streams.
55 class RawEventSubscriberBundle {
56  public:
57   explicit RawEventSubscriberBundle(
58       const scoped_refptr<CastEnvironment>& cast_environment);
59   ~RawEventSubscriberBundle();
60 
61   void AddEventSubscribers(bool is_audio);
62   void RemoveEventSubscribers(bool is_audio);
63   EncodingEventSubscriber* GetEncodingEventSubscriber(
64       bool is_audio);
65   StatsEventSubscriber* GetStatsEventSubscriber(bool is_audio);
66 
67  private:
68   // Map from (is_audio) -> RawEventSubscriberBundleForStream.
69   // TODO(imcheng): This works because we only have 1 audio and 1 video stream.
70   // This needs to scale better.
71   typedef std::map<bool, linked_ptr<RawEventSubscriberBundleForStream> >
72       SubscribersMapByStream;
73   const scoped_refptr<CastEnvironment> cast_environment_;
74   SubscribersMapByStream subscribers_;
75   scoped_ptr<ReceiverTimeOffsetEstimator> receiver_offset_estimator_;
76 
77   DISALLOW_COPY_AND_ASSIGN(RawEventSubscriberBundle);
78 };
79 
80 }  // namespace cast
81 }  // namespace media
82 
83 #endif  // MEDIA_CAST_LOGGING_RAW_EVENT_SUBSCRIBER_BUNDLE_H_
84 
85