1104c45677660586026a7e74ef8c47d396403d50eMichael Jurka/*
2104c45677660586026a7e74ef8c47d396403d50eMichael Jurka * Copyright (C) 2012 The Android Open Source Project
3104c45677660586026a7e74ef8c47d396403d50eMichael Jurka *
4104c45677660586026a7e74ef8c47d396403d50eMichael Jurka * Licensed under the Apache License, Version 2.0 (the "License");
5104c45677660586026a7e74ef8c47d396403d50eMichael Jurka * you may not use this file except in compliance with the License.
6104c45677660586026a7e74ef8c47d396403d50eMichael Jurka * You may obtain a copy of the License at
7104c45677660586026a7e74ef8c47d396403d50eMichael Jurka *
8104c45677660586026a7e74ef8c47d396403d50eMichael Jurka *      http://www.apache.org/licenses/LICENSE-2.0
9104c45677660586026a7e74ef8c47d396403d50eMichael Jurka *
10104c45677660586026a7e74ef8c47d396403d50eMichael Jurka * Unless required by applicable law or agreed to in writing, software
11104c45677660586026a7e74ef8c47d396403d50eMichael Jurka * distributed under the License is distributed on an "AS IS" BASIS,
12104c45677660586026a7e74ef8c47d396403d50eMichael Jurka * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13104c45677660586026a7e74ef8c47d396403d50eMichael Jurka * See the License for the specific language governing permissions and
14104c45677660586026a7e74ef8c47d396403d50eMichael Jurka * limitations under the License.
15104c45677660586026a7e74ef8c47d396403d50eMichael Jurka */
16104c45677660586026a7e74ef8c47d396403d50eMichael Jurka
17104c45677660586026a7e74ef8c47d396403d50eMichael Jurkapackage com.android.gallery3d.exif;
18104c45677660586026a7e74ef8c47d396403d50eMichael Jurka
19104c45677660586026a7e74ef8c47d396403d50eMichael Jurkaimport java.io.InputStream;
20104c45677660586026a7e74ef8c47d396403d50eMichael Jurkaimport java.nio.ByteBuffer;
21104c45677660586026a7e74ef8c47d396403d50eMichael Jurka
22104c45677660586026a7e74ef8c47d396403d50eMichael Jurkaclass ByteBufferInputStream extends InputStream {
23104c45677660586026a7e74ef8c47d396403d50eMichael Jurka
24104c45677660586026a7e74ef8c47d396403d50eMichael Jurka    private ByteBuffer mBuf;
25104c45677660586026a7e74ef8c47d396403d50eMichael Jurka
26104c45677660586026a7e74ef8c47d396403d50eMichael Jurka    public ByteBufferInputStream(ByteBuffer buf) {
27104c45677660586026a7e74ef8c47d396403d50eMichael Jurka        mBuf = buf;
28104c45677660586026a7e74ef8c47d396403d50eMichael Jurka    }
29104c45677660586026a7e74ef8c47d396403d50eMichael Jurka
30104c45677660586026a7e74ef8c47d396403d50eMichael Jurka    @Override
31104c45677660586026a7e74ef8c47d396403d50eMichael Jurka    public int read() {
32104c45677660586026a7e74ef8c47d396403d50eMichael Jurka        if (!mBuf.hasRemaining()) {
33104c45677660586026a7e74ef8c47d396403d50eMichael Jurka            return -1;
34104c45677660586026a7e74ef8c47d396403d50eMichael Jurka        }
35104c45677660586026a7e74ef8c47d396403d50eMichael Jurka        return mBuf.get() & 0xFF;
36104c45677660586026a7e74ef8c47d396403d50eMichael Jurka    }
37104c45677660586026a7e74ef8c47d396403d50eMichael Jurka
38104c45677660586026a7e74ef8c47d396403d50eMichael Jurka    @Override
39104c45677660586026a7e74ef8c47d396403d50eMichael Jurka    public int read(byte[] bytes, int off, int len) {
40104c45677660586026a7e74ef8c47d396403d50eMichael Jurka        if (!mBuf.hasRemaining()) {
41104c45677660586026a7e74ef8c47d396403d50eMichael Jurka            return -1;
42104c45677660586026a7e74ef8c47d396403d50eMichael Jurka        }
43104c45677660586026a7e74ef8c47d396403d50eMichael Jurka
44104c45677660586026a7e74ef8c47d396403d50eMichael Jurka        len = Math.min(len, mBuf.remaining());
45104c45677660586026a7e74ef8c47d396403d50eMichael Jurka        mBuf.get(bytes, off, len);
46104c45677660586026a7e74ef8c47d396403d50eMichael Jurka        return len;
47104c45677660586026a7e74ef8c47d396403d50eMichael Jurka    }
48104c45677660586026a7e74ef8c47d396403d50eMichael Jurka}
49