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