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_STREAM_H 18a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#define RASTERMILL_STREAM_H 19a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik 20a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#include <jni.h> 21a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#include <stdio.h> 22a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#include <sys/types.h> 23a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik 24a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craikclass Stream { 25a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craikpublic: 26a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik Stream(); 27a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik virtual ~Stream(); 28a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik 29a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik size_t peek(void* buffer, size_t size); 30a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik size_t read(void* buffer, size_t size); 316a61141137c7a46d747aa611c9caf62436bc119fChris Craik virtual uint8_t* getRawBufferAddr(); 326a61141137c7a46d747aa611c9caf62436bc119fChris Craik virtual jobject getRawBuffer(); 336a61141137c7a46d747aa611c9caf62436bc119fChris Craik virtual int getRawBufferSize(); 34a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik 35a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craikprotected: 36a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik virtual size_t doRead(void* buffer, size_t size) = 0; 37a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik 38a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craikprivate: 39a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik char* mPeekBuffer; 40a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik size_t mPeekSize; 41a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik size_t mPeekOffset; 42a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik}; 43a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik 44a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craikclass MemoryStream : public Stream { 45a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craikpublic: 466a61141137c7a46d747aa611c9caf62436bc119fChris Craik MemoryStream(void* buffer, size_t size, jobject buf) : 476a61141137c7a46d747aa611c9caf62436bc119fChris Craik mBuffer((uint8_t*)buffer), 486a61141137c7a46d747aa611c9caf62436bc119fChris Craik mRemaining(size), 496a61141137c7a46d747aa611c9caf62436bc119fChris Craik mRawBuffer(buf) {} 506a61141137c7a46d747aa611c9caf62436bc119fChris Craik virtual uint8_t* getRawBufferAddr(); 516a61141137c7a46d747aa611c9caf62436bc119fChris Craik virtual jobject getRawBuffer(); 526a61141137c7a46d747aa611c9caf62436bc119fChris Craik virtual int getRawBufferSize(); 53a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik 54a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craikprotected: 55a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik virtual size_t doRead(void* buffer, size_t size); 56a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik 57a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craikprivate: 586a61141137c7a46d747aa611c9caf62436bc119fChris Craik uint8_t* mBuffer; 59a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik size_t mRemaining; 606a61141137c7a46d747aa611c9caf62436bc119fChris Craik jobject mRawBuffer; 61a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik}; 62a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik 63a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craikclass FileStream : public Stream { 64a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craikpublic: 65a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik FileStream(FILE* fd) : mFd(fd) {} 66a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik 67a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craikprotected: 68a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik virtual size_t doRead(void* buffer, size_t size); 69a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik 70a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craikprivate: 71a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik FILE* mFd; 72a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik}; 73a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik 74a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craikclass JavaInputStream : public Stream { 75a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craikpublic: 76a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik JavaInputStream(JNIEnv* env, jobject inputStream, jbyteArray byteArray) : 77a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik mEnv(env), 78a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik mInputStream(inputStream), 79a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik mByteArray(byteArray), 80a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik mByteArrayLength(env->GetArrayLength(byteArray)) {} 81a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik 82a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craikprotected: 83a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik virtual size_t doRead(void* buffer, size_t size); 84a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik 85a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craikprivate: 86a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik JNIEnv* mEnv; 87a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik const jobject mInputStream; 88a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik const jbyteArray mByteArray; 89a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik const size_t mByteArrayLength; 90a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik}; 91a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik 92a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craikjint JavaStream_OnLoad(JNIEnv* env); 93a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik 94a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#endif //RASTERMILL_STREAM_H 95