• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #include "SkMovie.h"
2 #include "SkCanvas.h"
3 #include "SkPaint.h"
4 
5 // We should never see this in normal operation since our time values are
6 // 0-based. So we use it as a sentinal.
7 #define UNINITIALIZED_MSEC ((SkMSec)-1)
8 
SkMovie()9 SkMovie::SkMovie()
10 {
11     fInfo.fDuration = UNINITIALIZED_MSEC;  // uninitialized
12     fCurrTime = UNINITIALIZED_MSEC; // uninitialized
13     fNeedBitmap = true;
14 }
15 
ensureInfo()16 void SkMovie::ensureInfo()
17 {
18     if (fInfo.fDuration == UNINITIALIZED_MSEC && !this->onGetInfo(&fInfo))
19         memset(&fInfo, 0, sizeof(fInfo));   // failure
20 }
21 
duration()22 SkMSec SkMovie::duration()
23 {
24     this->ensureInfo();
25     return fInfo.fDuration;
26 }
27 
width()28 int SkMovie::width()
29 {
30     this->ensureInfo();
31     return fInfo.fWidth;
32 }
33 
height()34 int SkMovie::height()
35 {
36     this->ensureInfo();
37     return fInfo.fHeight;
38 }
39 
isOpaque()40 int SkMovie::isOpaque()
41 {
42     this->ensureInfo();
43     return fInfo.fIsOpaque;
44 }
45 
setTime(SkMSec time)46 bool SkMovie::setTime(SkMSec time)
47 {
48     SkMSec dur = this->duration();
49     if (time > dur)
50         time = dur;
51 
52     bool changed = false;
53     if (time != fCurrTime)
54     {
55         fCurrTime = time;
56         changed = this->onSetTime(time);
57         fNeedBitmap |= changed;
58     }
59     return changed;
60 }
61 
bitmap()62 const SkBitmap& SkMovie::bitmap()
63 {
64     if (fCurrTime == UNINITIALIZED_MSEC)    // uninitialized
65         this->setTime(0);
66 
67     if (fNeedBitmap)
68     {
69         if (!this->onGetBitmap(&fBitmap))   // failure
70             fBitmap.reset();
71         fNeedBitmap = false;
72     }
73     return fBitmap;
74 }
75 
76 ////////////////////////////////////////////////////////////////////
77 
78 #include "SkStream.h"
79 
DecodeMemory(const void * data,size_t length)80 SkMovie* SkMovie::DecodeMemory(const void* data, size_t length) {
81     SkMemoryStream stream(data, length, false);
82     return SkMovie::DecodeStream(&stream);
83 }
84 
DecodeFile(const char path[])85 SkMovie* SkMovie::DecodeFile(const char path[])
86 {
87     SkMovie* movie = NULL;
88 
89     SkFILEStream stream(path);
90     if (stream.isValid()) {
91         movie = SkMovie::DecodeStream(&stream);
92     }
93 #ifdef SK_DEBUG
94     else {
95         SkDebugf("Movie file not found <%s>\n", path);
96     }
97 #endif
98 
99     return movie;
100 }
101 
102