1a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt// Copyright (c) 2012 The Chromium Authors. All rights reserved.
2a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt// Use of this source code is governed by a BSD-style license that can be
3a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt// found in the LICENSE file.
4a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt
5a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt#ifndef REMOTING_CLIENT_AUDIO_DECODE_SCHEDULER_H_
6a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt#define REMOTING_CLIENT_AUDIO_DECODE_SCHEDULER_H_
7a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt
8a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt#include "base/memory/ref_counted.h"
9a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt#include "base/memory/scoped_ptr.h"
10a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt#include "remoting/protocol/audio_stub.h"
11a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt
12a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidtnamespace base {
13a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidtclass SingleThreadTaskRunner;
14a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt}  // namespace base
15a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt
16a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidtnamespace remoting {
17a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt
18a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidtnamespace protocol {
19a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidtclass SessionConfig;
20a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt}  // namespace protocol
21a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt
22a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidtclass AudioDecoder;
23a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidtclass AudioPacket;
24a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidtclass AudioPlayer;
25a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt
26a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidtclass AudioDecodeScheduler : public protocol::AudioStub {
27a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt public:
28a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt  AudioDecodeScheduler(
29a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt      scoped_refptr<base::SingleThreadTaskRunner> main_task_runner,
30a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt      scoped_refptr<base::SingleThreadTaskRunner> audio_decode_task_runner,
31a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt      scoped_ptr<AudioPlayer> audio_player);
32a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt  virtual ~AudioDecodeScheduler();
33a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt
34a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt  // Initializes decoder with the information from the protocol config.
35a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt  void Initialize(const protocol::SessionConfig& config);
36a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt
37a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt  // AudioStub implementation.
38a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt  virtual void ProcessAudioPacket(scoped_ptr<AudioPacket> packet,
39a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt                                  const base::Closure& done) OVERRIDE;
40a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt
41a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt private:
42a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt  class Core;
43a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt
44a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt  scoped_refptr<Core> core_;
45a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt
46a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt  DISALLOW_COPY_AND_ASSIGN(AudioDecodeScheduler);
47a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt};
48a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt
49a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt}  // namespace remoting
50a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt
51a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt#endif  // REMOTING_CLIENT_AUDIO_DECODE_SCHEDULER_H_
52a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt