1a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik/*
2a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik * Copyright (C) 2013 The Android Open Source Project
3a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik *
4a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik * Licensed under the Apache License, Version 2.0 (the "License");
5a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik * you may not use this file except in compliance with the License.
6a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik * You may obtain a copy of the License at
7a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik *
8a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik *      http://www.apache.org/licenses/LICENSE-2.0
9a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik *
10a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik * Unless required by applicable law or agreed to in writing, software
11a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik * distributed under the License is distributed on an "AS IS" BASIS,
12a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik * See the License for the specific language governing permissions and
14a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik * limitations under the License.
15a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik */
16a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik
17a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik#ifndef RASTERMILL_FRAME_SEQUENCE_H
18a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik#define RASTERMILL_FRAME_SEQUENCE_H
19a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik
20a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik#include "Stream.h"
21a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik#include "Color.h"
22a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik
23a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craikclass FrameSequenceState {
24a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craikpublic:
25a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik    /**
26a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik     * Produces a frame of animation in the output buffer, drawing (at minimum) the delta since
27a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik     * previousFrameNr (the current contents of the buffer), or from scratch if previousFrameNr is
28a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik     * negative
29a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik     *
30a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik     * Returns frame's delay time in milliseconds.
31a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik     */
32a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik    virtual long drawFrame(int frameNr,
33a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik            Color8888* outputPtr, int outputPixelStride, int previousFrameNr) = 0;
34a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik    virtual ~FrameSequenceState() {}
35a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik};
36a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik
37a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craikclass FrameSequence {
38a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craikpublic:
39a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik    /**
40a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik     * Creates a FrameSequence using data from the data stream
41a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik     *
42a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik     * Type determined by header information in the stream
43a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik     */
44a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik    static FrameSequence* create(Stream* stream);
45a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik
46a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik    virtual ~FrameSequence() {}
47a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik    virtual int getWidth() const = 0;
48a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik    virtual int getHeight() const = 0;
49a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik    virtual bool isOpaque() const = 0;
50e36c5d675c8c2f900ef186a55edf71ce36ca9fa0Chris Craik    virtual int getFrameCount() const = 0;
51e36c5d675c8c2f900ef186a55edf71ce36ca9fa0Chris Craik    virtual int getDefaultLoopCount() const = 0;
526a61141137c7a46d747aa611c9caf62436bc119fChris Craik    virtual jobject getRawByteBuffer() const = 0;
53a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik
54a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik    virtual FrameSequenceState* createState() const = 0;
55a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik};
56a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik
57a3ac0a2df64dcfb8b0b01f1cf05e9afd1439e1f4Chris Craik#endif //RASTERMILL_FRAME_SEQUENCE_H
58