audio_directive_list.h revision 6e8cce623b6e4fe0c9e4af605d675dd9d0338c38
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 COMPONENTS_COPRESENCE_HANDLERS_AUDIO_AUDIO_DIRECTIVE_LIST_H_ 6#define COMPONENTS_COPRESENCE_HANDLERS_AUDIO_AUDIO_DIRECTIVE_LIST_H_ 7 8#include <string> 9#include <vector> 10 11#include "base/callback.h" 12#include "base/macros.h" 13#include "base/memory/scoped_ptr.h" 14#include "base/time/time.h" 15 16namespace media { 17class AudioBusRefCounted; 18} 19 20namespace copresence { 21 22struct AudioDirective { 23 // Default ctor, required by the priority queue. 24 AudioDirective(); 25 AudioDirective(const std::string& op_id, base::Time end_time); 26 27 std::string op_id; 28 base::Time end_time; 29}; 30 31// This class maintains a list of active audio directives. It fetches the audio 32// samples associated with a audio transmit directives and expires directives 33// that have outlived their TTL. 34// TODO(rkc): Once we implement more token technologies, move reusable code 35// from here to a base class and inherit various XxxxDirectiveList 36// classes from it. 37class AudioDirectiveList { 38 public: 39 AudioDirectiveList(); 40 virtual ~AudioDirectiveList(); 41 42 void AddDirective(const std::string& op_id, base::TimeDelta ttl); 43 void RemoveDirective(const std::string& op_id); 44 45 scoped_ptr<AudioDirective> GetActiveDirective(); 46 47 private: 48 // Comparator for comparing end_times on audio tokens. 49 class LatestFirstComparator { 50 public: 51 // This will sort our queue with the 'latest' time being the top. 52 bool operator()(const AudioDirective& left, 53 const AudioDirective& right) const { 54 return left.end_time < right.end_time; 55 } 56 }; 57 58 std::vector<AudioDirective>::iterator FindDirectiveByOpId( 59 const std::string& op_id); 60 61 // This vector will be organized as a heap with the latest time as the first 62 // element. Only currently active directives will exist in this list. 63 std::vector<AudioDirective> active_directives_; 64 65 DISALLOW_COPY_AND_ASSIGN(AudioDirectiveList); 66}; 67 68} // namespace copresence 69 70#endif // COMPONENTS_COPRESENCE_HANDLERS_AUDIO_AUDIO_DIRECTIVE_LIST_H_ 71