15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef MEDIA_BASE_AUDIO_RENDERER_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define MEDIA_BASE_AUDIO_RENDERER_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/callback.h"
9eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/time/time.h"
10116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "media/base/buffering_state.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "media/base/media_export.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "media/base/pipeline_status.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace media {
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class DemuxerStream;
175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)class TimeSource;
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class MEDIA_EXPORT AudioRenderer {
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  AudioRenderer();
225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // Stop all operations and fire all pending callbacks.
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual ~AudioRenderer();
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Initialize an AudioRenderer with |stream|, executing |init_cb| upon
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // completion.
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // |statistics_cb| is executed periodically with audio rendering stats.
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //
31116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // |buffering_state_cb| is executed when audio rendering has either run out of
32116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // data or has enough data to continue playback.
33116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  //
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // |ended_cb| is executed when audio rendering has reached the end of stream.
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // |error_cb| is executed if an error was encountered.
37c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual void Initialize(DemuxerStream* stream,
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                          const PipelineStatusCB& init_cb,
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                          const StatisticsCB& statistics_cb,
40116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                          const BufferingStateCB& buffering_state_cb,
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                          const base::Closure& ended_cb,
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                          const PipelineStatusCB& error_cb) = 0;
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // Returns the TimeSource associated with audio rendering.
455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual TimeSource* GetTimeSource() = 0;
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Discard any audio data, executing |callback| when completed.
48116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  //
49116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // Clients should expect |buffering_state_cb| to be called with
50116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // BUFFERING_HAVE_NOTHING while flushing is in progress.
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void Flush(const base::Closure& callback) = 0;
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
53116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // Starts playback by reading from |stream| and decoding and rendering audio.
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Only valid to call after a successful Initialize() or Flush().
565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual void StartPlaying() = 0;
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Sets the output volume.
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void SetVolume(float volume) = 0;
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(AudioRenderer);
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace media
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // MEDIA_BASE_AUDIO_RENDERER_H_
68