11320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Copyright 2014 The Chromium Authors. All rights reserved.
21320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Use of this source code is governed by a BSD-style license that can be
31320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// found in the LICENSE file.
41320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
51320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#ifndef MEDIA_BASE_RENDERER_H_
61320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#define MEDIA_BASE_RENDERER_H_
71320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/callback.h"
91320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/time/time.h"
101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "media/base/buffering_state.h"
111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "media/base/media_export.h"
121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "media/base/pipeline_status.h"
131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccinamespace media {
151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass MediaKeys;
171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass MEDIA_EXPORT Renderer {
191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public:
201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  typedef base::Callback<base::TimeDelta()> TimeDeltaCB;
211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  Renderer();
231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Stops rendering and fires any pending callbacks.
251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual ~Renderer();
261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Initializes the Renderer, executing |init_cb| upon completion.
281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // If initialization failed, fires |error_cb| before |init_cb|.
291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  //
301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Permanent callbacks:
311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // - |statistics_cb|: Executed periodically with rendering statistics.
321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // - |time_cb|: Executed whenever time has advanced through rendering.
331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // - |ended_cb|: Executed when rendering has reached the end of stream.
341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // - |error_cb|: Executed if any error was encountered during rendering.
351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual void Initialize(const base::Closure& init_cb,
361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                          const StatisticsCB& statistics_cb,
371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                          const base::Closure& ended_cb,
381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                          const PipelineStatusCB& error_cb,
391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                          const BufferingStateCB& buffering_state_cb) = 0;
401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // The following functions must be called after Initialize().
421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Discards any buffered data, executing |flush_cb| when completed.
441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual void Flush(const base::Closure& flush_cb) = 0;
451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Starts rendering from |time|.
471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual void StartPlayingFrom(base::TimeDelta time) = 0;
481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Updates the current playback rate. The default playback rate should be 1.
501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual void SetPlaybackRate(float playback_rate) = 0;
511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Sets the output volume. The default volume should be 1.
531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual void SetVolume(float volume) = 0;
541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Returns the current media time.
561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual base::TimeDelta GetMediaTime() = 0;
571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Returns whether |this| renders audio.
591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual bool HasAudio() = 0;
601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Returns whether |this| renders video.
621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual bool HasVideo() = 0;
631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Associates the |cdm| with this Renderer.
651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual void SetCdm(MediaKeys* cdm) = 0;
661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci private:
681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  DISALLOW_COPY_AND_ASSIGN(Renderer);
691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci};
701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}  // namespace media
721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#endif  // MEDIA_BASE_RENDERER_H_
74