1// Copyright (c) 2012 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 REMOTING_CLIENT_AUDIO_DECODE_SCHEDULER_H_
6#define REMOTING_CLIENT_AUDIO_DECODE_SCHEDULER_H_
7
8#include "base/memory/ref_counted.h"
9#include "base/memory/scoped_ptr.h"
10#include "remoting/protocol/audio_stub.h"
11
12namespace base {
13class SingleThreadTaskRunner;
14}  // namespace base
15
16namespace remoting {
17
18namespace protocol {
19class SessionConfig;
20}  // namespace protocol
21
22class AudioDecoder;
23class AudioPacket;
24class AudioPlayer;
25
26class AudioDecodeScheduler : public protocol::AudioStub {
27 public:
28  AudioDecodeScheduler(
29      scoped_refptr<base::SingleThreadTaskRunner> main_task_runner,
30      scoped_refptr<base::SingleThreadTaskRunner> audio_decode_task_runner,
31      scoped_ptr<AudioPlayer> audio_player);
32  virtual ~AudioDecodeScheduler();
33
34  // Initializes decoder with the information from the protocol config.
35  void Initialize(const protocol::SessionConfig& config);
36
37  // AudioStub implementation.
38  virtual void ProcessAudioPacket(scoped_ptr<AudioPacket> packet,
39                                  const base::Closure& done) OVERRIDE;
40
41 private:
42  class Core;
43
44  scoped_refptr<Core> core_;
45
46  DISALLOW_COPY_AND_ASSIGN(AudioDecodeScheduler);
47};
48
49}  // namespace remoting
50
51#endif  // REMOTING_CLIENT_AUDIO_DECODE_SCHEDULER_H_
52