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