1// Copyright 2013 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 CONTENT_RENDERER_MEDIA_PEER_CONNECTION_AUDIO_SINK_OWNER_H_
6#define CONTENT_RENDERER_MEDIA_PEER_CONNECTION_AUDIO_SINK_OWNER_H_
7
8#include <vector>
9
10#include "base/synchronization/lock.h"
11#include "content/renderer/media/media_stream_audio_track_sink.h"
12
13namespace content {
14
15class PeerConnectionAudioSink;
16
17// Reference counted holder of PeerConnectionAudioSink.
18class PeerConnectionAudioSinkOwner : public MediaStreamAudioTrackSink {
19 public:
20  explicit PeerConnectionAudioSinkOwner(PeerConnectionAudioSink* sink);
21
22  // MediaStreamAudioTrackSink implementation.
23  virtual int OnData(const int16* audio_data,
24                     int sample_rate,
25                     int number_of_channels,
26                     int number_of_frames,
27                     const std::vector<int>& channels,
28                     int audio_delay_milliseconds,
29                     int current_volume,
30                     bool need_audio_processing,
31                     bool key_pressed) OVERRIDE;
32  virtual void OnSetFormat(const media::AudioParameters& params) OVERRIDE;
33  virtual void OnReadyStateChanged(
34      blink::WebMediaStreamSource::ReadyState state) OVERRIDE;
35  virtual void Reset() OVERRIDE;
36  virtual bool IsEqual(const MediaStreamAudioSink* other) const OVERRIDE;
37  virtual bool IsEqual(const PeerConnectionAudioSink* other) const OVERRIDE;
38
39 protected:
40  virtual ~PeerConnectionAudioSinkOwner() {}
41
42 private:
43  mutable base::Lock lock_;
44
45  // Raw pointer to the delegate, the client need to call Reset() to set the
46  // pointer to NULL before the delegate goes away.
47  PeerConnectionAudioSink* delegate_;
48
49  DISALLOW_COPY_AND_ASSIGN(PeerConnectionAudioSinkOwner);
50};
51
52}  // namespace content
53
54#endif  // CONTENT_RENDERER_MEDIA_PEER_CONNECTION_AUDIO_SINK_OWNER_H_
55