#ifndef REMOTING_CLIENT_PLUGIN_PEPPER_AUDIO_PLAYER_H_
#define REMOTING_CLIENT_PLUGIN_PEPPER_AUDIO_PLAYER_H_
#include <list>
#include "base/bind.h"
#include "base/callback.h"
#include "base/memory/scoped_ptr.h"
#include "base/memory/ref_counted.h"
#include "base/synchronization/lock.h"
#include "ppapi/cpp/audio.h"
#include "ppapi/cpp/instance.h"
#include "remoting/client/audio_player.h"
#include "remoting/proto/audio.pb.h"
namespace remoting {
class PepperAudioPlayer : public AudioPlayer {
public:
explicit PepperAudioPlayer(pp::Instance* instance);
virtual ~PepperAudioPlayer();
virtual void ProcessAudioPacket(scoped_ptr<AudioPacket> packet) OVERRIDE;
private:
typedef std::list<AudioPacket*> AudioPacketQueue;
bool ResetAudioPlayer(AudioPacket::SamplingRate sampling_rate);
static void PepperAudioPlayerCallback(void* samples,
uint32_t buffer_size,
void* data);
void FillWithSamples(void* samples, uint32_t buffer_size);
pp::Instance* instance_;
pp::Audio audio_;
AudioPacket::SamplingRate sampling_rate_;
uint32_t samples_per_frame_;
bool start_failed_;
base::Lock lock_;
AudioPacketQueue queued_packets_;
int queued_samples_;
size_t bytes_consumed_;
DISALLOW_COPY_AND_ASSIGN(PepperAudioPlayer);
};
}
#endif