11cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 20910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project/* 31cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * Copyright 2008 The Android Open Source Project 40910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project * 51cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * Use of this source code is governed by a BSD-style license that can be 61cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * found in the LICENSE file. 70910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project */ 80910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 91cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 100910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#ifndef SkMovie_DEFINED 110910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#define SkMovie_DEFINED 120910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 130910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkRefCnt.h" 140910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkCanvas.h" 150910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 160910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectclass SkStream; 170910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 180910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectclass SkMovie : public SkRefCnt { 190910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectpublic: 200910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project /** Try to create a movie from the stream. If the stream format is not 210910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project supported, return NULL. 220910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project */ 230910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project static SkMovie* DecodeStream(SkStream*); 240910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project /** Try to create a movie from the specified file path. If the file is not 250910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project found, or the format is not supported, return NULL. If a movie is 260910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project returned, the stream may be retained by the movie (via ref()) until 270910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project the movie is finished with it (by calling unref()). 280910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project */ 290910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project static SkMovie* DecodeFile(const char path[]); 300910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project /** Try to create a movie from the specified memory. 310910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project If the format is not supported, return NULL. If a movie is returned, 320910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project the data will have been read or copied, and so the caller may free 330910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project it. 340910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project */ 350910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project static SkMovie* DecodeMemory(const void* data, size_t length); 360910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 370910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkMSec duration(); 380910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project int width(); 390910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project int height(); 400910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project int isOpaque(); 410910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 420910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project /** Specify the time code (between 0...duration) to sample a bitmap 430910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project from the movie. Returns true if this time code generated a different 440910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project bitmap/frame from the previous state (i.e. true means you need to 450910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project redraw). 460910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project */ 470910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project bool setTime(SkMSec); 480910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 490910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project // return the right bitmap for the current time code 500910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project const SkBitmap& bitmap(); 510910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 520910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectprotected: 530910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project struct Info { 540910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkMSec fDuration; 550910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project int fWidth; 560910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project int fHeight; 570910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project bool fIsOpaque; 580910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project }; 590910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 600910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project virtual bool onGetInfo(Info*) = 0; 610910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project virtual bool onSetTime(SkMSec) = 0; 620910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project virtual bool onGetBitmap(SkBitmap*) = 0; 630910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 640910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project // visible for subclasses 650910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkMovie(); 660910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 670910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectprivate: 680910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project Info fInfo; 690910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkMSec fCurrTime; 700910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkBitmap fBitmap; 710910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project bool fNeedBitmap; 720910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 730910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project void ensureInfo(); 740910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}; 750910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 760910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#endif 77