1 /* 2 * Copyright (C) 2013 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 #ifndef RASTERMILL_STREAM_H 18 #define RASTERMILL_STREAM_H 19 20 #include <jni.h> 21 #include <stdio.h> 22 #include <sys/types.h> 23 24 class Stream { 25 public: 26 Stream(); 27 virtual ~Stream(); 28 29 size_t peek(void* buffer, size_t size); 30 size_t read(void* buffer, size_t size); 31 virtual uint8_t* getRawBufferAddr(); 32 virtual jobject getRawBuffer(); 33 virtual int getRawBufferSize(); 34 35 protected: 36 virtual size_t doRead(void* buffer, size_t size) = 0; 37 38 private: 39 char* mPeekBuffer; 40 size_t mPeekSize; 41 size_t mPeekOffset; 42 }; 43 44 class MemoryStream : public Stream { 45 public: MemoryStream(void * buffer,size_t size,jobject buf)46 MemoryStream(void* buffer, size_t size, jobject buf) : 47 mBuffer((uint8_t*)buffer), 48 mRemaining(size), 49 mRawBuffer(buf) {} 50 virtual uint8_t* getRawBufferAddr(); 51 virtual jobject getRawBuffer(); 52 virtual int getRawBufferSize(); 53 54 protected: 55 virtual size_t doRead(void* buffer, size_t size); 56 57 private: 58 uint8_t* mBuffer; 59 size_t mRemaining; 60 jobject mRawBuffer; 61 }; 62 63 class FileStream : public Stream { 64 public: FileStream(FILE * fd)65 FileStream(FILE* fd) : mFd(fd) {} 66 67 protected: 68 virtual size_t doRead(void* buffer, size_t size); 69 70 private: 71 FILE* mFd; 72 }; 73 74 class JavaInputStream : public Stream { 75 public: JavaInputStream(JNIEnv * env,jobject inputStream,jbyteArray byteArray)76 JavaInputStream(JNIEnv* env, jobject inputStream, jbyteArray byteArray) : 77 mEnv(env), 78 mInputStream(inputStream), 79 mByteArray(byteArray), 80 mByteArrayLength(env->GetArrayLength(byteArray)) {} 81 82 protected: 83 virtual size_t doRead(void* buffer, size_t size); 84 85 private: 86 JNIEnv* mEnv; 87 const jobject mInputStream; 88 const jbyteArray mByteArray; 89 const size_t mByteArrayLength; 90 }; 91 92 jint JavaStream_OnLoad(JNIEnv* env); 93 94 #endif //RASTERMILL_STREAM_H 95