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