1b5e74b90b26e6ad7c075d60ff11a14c1fd99230dLeon Scroggins III 2b5e74b90b26e6ad7c075d60ff11a14c1fd99230dLeon Scroggins III/* 3b5e74b90b26e6ad7c075d60ff11a14c1fd99230dLeon Scroggins III * Copyright 2008 The Android Open Source Project 4b5e74b90b26e6ad7c075d60ff11a14c1fd99230dLeon Scroggins III * 5b5e74b90b26e6ad7c075d60ff11a14c1fd99230dLeon Scroggins III * Use of this source code is governed by a BSD-style license that can be 6b5e74b90b26e6ad7c075d60ff11a14c1fd99230dLeon Scroggins III * found in the LICENSE file. 7b5e74b90b26e6ad7c075d60ff11a14c1fd99230dLeon Scroggins III */ 8b5e74b90b26e6ad7c075d60ff11a14c1fd99230dLeon Scroggins III 9b5e74b90b26e6ad7c075d60ff11a14c1fd99230dLeon Scroggins III 10b5e74b90b26e6ad7c075d60ff11a14c1fd99230dLeon Scroggins III#ifndef Movie_DEFINED 11b5e74b90b26e6ad7c075d60ff11a14c1fd99230dLeon Scroggins III#define Movie_DEFINED 12b5e74b90b26e6ad7c075d60ff11a14c1fd99230dLeon Scroggins III 13b5e74b90b26e6ad7c075d60ff11a14c1fd99230dLeon Scroggins III#include "SkRefCnt.h" 14b5e74b90b26e6ad7c075d60ff11a14c1fd99230dLeon Scroggins III#include "SkCanvas.h" 15b5e74b90b26e6ad7c075d60ff11a14c1fd99230dLeon Scroggins III 16b5e74b90b26e6ad7c075d60ff11a14c1fd99230dLeon Scroggins IIIclass SkStreamRewindable; 17b5e74b90b26e6ad7c075d60ff11a14c1fd99230dLeon Scroggins III 18b5e74b90b26e6ad7c075d60ff11a14c1fd99230dLeon Scroggins IIIclass Movie : public SkRefCnt { 19b5e74b90b26e6ad7c075d60ff11a14c1fd99230dLeon Scroggins IIIpublic: 20b5e74b90b26e6ad7c075d60ff11a14c1fd99230dLeon Scroggins III /** Try to create a movie from the stream. If the stream format is not 21b5e74b90b26e6ad7c075d60ff11a14c1fd99230dLeon Scroggins III supported, return NULL. 22b5e74b90b26e6ad7c075d60ff11a14c1fd99230dLeon Scroggins III */ 23b5e74b90b26e6ad7c075d60ff11a14c1fd99230dLeon Scroggins III static Movie* DecodeStream(SkStreamRewindable*); 24b5e74b90b26e6ad7c075d60ff11a14c1fd99230dLeon Scroggins III /** Try to create a movie from the specified file path. If the file is not 25b5e74b90b26e6ad7c075d60ff11a14c1fd99230dLeon Scroggins III found, or the format is not supported, return NULL. If a movie is 26b5e74b90b26e6ad7c075d60ff11a14c1fd99230dLeon Scroggins III returned, the stream may be retained by the movie (via ref()) until 27b5e74b90b26e6ad7c075d60ff11a14c1fd99230dLeon Scroggins III the movie is finished with it (by calling unref()). 28b5e74b90b26e6ad7c075d60ff11a14c1fd99230dLeon Scroggins III */ 29b5e74b90b26e6ad7c075d60ff11a14c1fd99230dLeon Scroggins III static Movie* DecodeFile(const char path[]); 30b5e74b90b26e6ad7c075d60ff11a14c1fd99230dLeon Scroggins III /** Try to create a movie from the specified memory. 31b5e74b90b26e6ad7c075d60ff11a14c1fd99230dLeon Scroggins III If the format is not supported, return NULL. If a movie is returned, 32b5e74b90b26e6ad7c075d60ff11a14c1fd99230dLeon Scroggins III the data will have been read or copied, and so the caller may free 33b5e74b90b26e6ad7c075d60ff11a14c1fd99230dLeon Scroggins III it. 34b5e74b90b26e6ad7c075d60ff11a14c1fd99230dLeon Scroggins III */ 35b5e74b90b26e6ad7c075d60ff11a14c1fd99230dLeon Scroggins III static Movie* DecodeMemory(const void* data, size_t length); 36b5e74b90b26e6ad7c075d60ff11a14c1fd99230dLeon Scroggins III 37b5e74b90b26e6ad7c075d60ff11a14c1fd99230dLeon Scroggins III SkMSec duration(); 38b5e74b90b26e6ad7c075d60ff11a14c1fd99230dLeon Scroggins III int width(); 39b5e74b90b26e6ad7c075d60ff11a14c1fd99230dLeon Scroggins III int height(); 40b5e74b90b26e6ad7c075d60ff11a14c1fd99230dLeon Scroggins III int isOpaque(); 41b5e74b90b26e6ad7c075d60ff11a14c1fd99230dLeon Scroggins III 42b5e74b90b26e6ad7c075d60ff11a14c1fd99230dLeon Scroggins III /** Specify the time code (between 0...duration) to sample a bitmap 43b5e74b90b26e6ad7c075d60ff11a14c1fd99230dLeon Scroggins III from the movie. Returns true if this time code generated a different 44b5e74b90b26e6ad7c075d60ff11a14c1fd99230dLeon Scroggins III bitmap/frame from the previous state (i.e. true means you need to 45b5e74b90b26e6ad7c075d60ff11a14c1fd99230dLeon Scroggins III redraw). 46b5e74b90b26e6ad7c075d60ff11a14c1fd99230dLeon Scroggins III */ 47b5e74b90b26e6ad7c075d60ff11a14c1fd99230dLeon Scroggins III bool setTime(SkMSec); 48b5e74b90b26e6ad7c075d60ff11a14c1fd99230dLeon Scroggins III 49b5e74b90b26e6ad7c075d60ff11a14c1fd99230dLeon Scroggins III // return the right bitmap for the current time code 50b5e74b90b26e6ad7c075d60ff11a14c1fd99230dLeon Scroggins III const SkBitmap& bitmap(); 51b5e74b90b26e6ad7c075d60ff11a14c1fd99230dLeon Scroggins III 52b5e74b90b26e6ad7c075d60ff11a14c1fd99230dLeon Scroggins IIIprotected: 53b5e74b90b26e6ad7c075d60ff11a14c1fd99230dLeon Scroggins III struct Info { 54b5e74b90b26e6ad7c075d60ff11a14c1fd99230dLeon Scroggins III SkMSec fDuration; 55b5e74b90b26e6ad7c075d60ff11a14c1fd99230dLeon Scroggins III int fWidth; 56b5e74b90b26e6ad7c075d60ff11a14c1fd99230dLeon Scroggins III int fHeight; 57b5e74b90b26e6ad7c075d60ff11a14c1fd99230dLeon Scroggins III bool fIsOpaque; 58b5e74b90b26e6ad7c075d60ff11a14c1fd99230dLeon Scroggins III }; 59b5e74b90b26e6ad7c075d60ff11a14c1fd99230dLeon Scroggins III 60b5e74b90b26e6ad7c075d60ff11a14c1fd99230dLeon Scroggins III virtual bool onGetInfo(Info*) = 0; 61b5e74b90b26e6ad7c075d60ff11a14c1fd99230dLeon Scroggins III virtual bool onSetTime(SkMSec) = 0; 62b5e74b90b26e6ad7c075d60ff11a14c1fd99230dLeon Scroggins III virtual bool onGetBitmap(SkBitmap*) = 0; 63b5e74b90b26e6ad7c075d60ff11a14c1fd99230dLeon Scroggins III 64b5e74b90b26e6ad7c075d60ff11a14c1fd99230dLeon Scroggins III // visible for subclasses 65b5e74b90b26e6ad7c075d60ff11a14c1fd99230dLeon Scroggins III Movie(); 66b5e74b90b26e6ad7c075d60ff11a14c1fd99230dLeon Scroggins III 67b5e74b90b26e6ad7c075d60ff11a14c1fd99230dLeon Scroggins IIIprivate: 68b5e74b90b26e6ad7c075d60ff11a14c1fd99230dLeon Scroggins III Info fInfo; 69b5e74b90b26e6ad7c075d60ff11a14c1fd99230dLeon Scroggins III SkMSec fCurrTime; 70b5e74b90b26e6ad7c075d60ff11a14c1fd99230dLeon Scroggins III SkBitmap fBitmap; 71b5e74b90b26e6ad7c075d60ff11a14c1fd99230dLeon Scroggins III bool fNeedBitmap; 72b5e74b90b26e6ad7c075d60ff11a14c1fd99230dLeon Scroggins III 73b5e74b90b26e6ad7c075d60ff11a14c1fd99230dLeon Scroggins III void ensureInfo(); 74b5e74b90b26e6ad7c075d60ff11a14c1fd99230dLeon Scroggins III 75b5e74b90b26e6ad7c075d60ff11a14c1fd99230dLeon Scroggins III typedef SkRefCnt INHERITED; 76b5e74b90b26e6ad7c075d60ff11a14c1fd99230dLeon Scroggins III}; 77b5e74b90b26e6ad7c075d60ff11a14c1fd99230dLeon Scroggins III 78b5e74b90b26e6ad7c075d60ff11a14c1fd99230dLeon Scroggins III#endif 79