1a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik/* 2a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik * Copyright (C) 2013 The Android Open Source Project 3a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik * 4a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik * Licensed under the Apache License, Version 2.0 (the "License"); 5a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik * you may not use this file except in compliance with the License. 6a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik * You may obtain a copy of the License at 7a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik * 8a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik * http://www.apache.org/licenses/LICENSE-2.0 9a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik * 10a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik * Unless required by applicable law or agreed to in writing, software 11a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik * distributed under the License is distributed on an "AS IS" BASIS, 12a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik * See the License for the specific language governing permissions and 14a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik * limitations under the License. 15a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik */ 16a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik 17a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#ifndef RASTERMILL_REGISTRY_H 18a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#define RASTERMILL_REGISTRY_H 19a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik 206a61141137c7a46d747aa611c9caf62436bc119fChris Craik#include "jni.h" 216a61141137c7a46d747aa611c9caf62436bc119fChris Craik#include <stdint.h> 226a61141137c7a46d747aa611c9caf62436bc119fChris Craik 23a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craikclass FrameSequence; 24a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craikclass Decoder; 25a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craikclass Stream; 26a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik 27a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craikstruct RegistryEntry { 28a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik int requiredHeaderBytes; 29a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik bool (*checkHeader)(void* header, int header_size); 30a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik FrameSequence* (*createFrameSequence)(Stream* stream); 31a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik Decoder* (*createDecoder)(Stream* stream); 326a61141137c7a46d747aa611c9caf62436bc119fChris Craik bool (*acceptsBuffer)(); 33a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik}; 34a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik 35a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik/** 36a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik * Template class for registering subclasses that can produce instances of themselves given a 37a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik * DataStream pointer. 38a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik * 39a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik * The super class / root constructable type only needs to define a single static construction 40a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik * meathod that creates an instance by iterating through all factory methods. 41a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik */ 42a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craikclass Registry { 43a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craikpublic: 44a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik Registry(const RegistryEntry& entry); 45a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik 46a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik static const RegistryEntry* Find(Stream* stream); 47a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik 48a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craikprivate: 49a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik RegistryEntry mImpl; 50a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik Registry* mNext; 51a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik}; 52a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik 53a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#endif // RASTERMILL_REGISTRY_H 54