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