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