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