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