1e8d1bf7a439450b9979701909164a6baffbe8baeMichael Jurka/*
2e8d1bf7a439450b9979701909164a6baffbe8baeMichael Jurka * Copyright (C) 2012 The Android Open Source Project
3e8d1bf7a439450b9979701909164a6baffbe8baeMichael Jurka *
4e8d1bf7a439450b9979701909164a6baffbe8baeMichael Jurka * Licensed under the Apache License, Version 2.0 (the "License");
5e8d1bf7a439450b9979701909164a6baffbe8baeMichael Jurka * you may not use this file except in compliance with the License.
6e8d1bf7a439450b9979701909164a6baffbe8baeMichael Jurka * You may obtain a copy of the License at
7e8d1bf7a439450b9979701909164a6baffbe8baeMichael Jurka *
8e8d1bf7a439450b9979701909164a6baffbe8baeMichael Jurka *      http://www.apache.org/licenses/LICENSE-2.0
9e8d1bf7a439450b9979701909164a6baffbe8baeMichael Jurka *
10e8d1bf7a439450b9979701909164a6baffbe8baeMichael Jurka * Unless required by applicable law or agreed to in writing, software
11e8d1bf7a439450b9979701909164a6baffbe8baeMichael Jurka * distributed under the License is distributed on an "AS IS" BASIS,
12e8d1bf7a439450b9979701909164a6baffbe8baeMichael Jurka * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13e8d1bf7a439450b9979701909164a6baffbe8baeMichael Jurka * See the License for the specific language governing permissions and
14e8d1bf7a439450b9979701909164a6baffbe8baeMichael Jurka * limitations under the License.
15e8d1bf7a439450b9979701909164a6baffbe8baeMichael Jurka */
16e8d1bf7a439450b9979701909164a6baffbe8baeMichael Jurka
17e8d1bf7a439450b9979701909164a6baffbe8baeMichael Jurkapackage com.android.gallery3d.exif;
18e8d1bf7a439450b9979701909164a6baffbe8baeMichael Jurka
19e8d1bf7a439450b9979701909164a6baffbe8baeMichael Jurkaimport java.io.FilterOutputStream;
20e8d1bf7a439450b9979701909164a6baffbe8baeMichael Jurkaimport java.io.IOException;
21e8d1bf7a439450b9979701909164a6baffbe8baeMichael Jurkaimport java.io.OutputStream;
22e8d1bf7a439450b9979701909164a6baffbe8baeMichael Jurkaimport java.nio.ByteBuffer;
23e8d1bf7a439450b9979701909164a6baffbe8baeMichael Jurkaimport java.nio.ByteOrder;
24e8d1bf7a439450b9979701909164a6baffbe8baeMichael Jurka
25e8d1bf7a439450b9979701909164a6baffbe8baeMichael Jurkaclass OrderedDataOutputStream extends FilterOutputStream {
26e8d1bf7a439450b9979701909164a6baffbe8baeMichael Jurka    private final ByteBuffer mByteBuffer = ByteBuffer.allocate(4);
27e8d1bf7a439450b9979701909164a6baffbe8baeMichael Jurka
28e8d1bf7a439450b9979701909164a6baffbe8baeMichael Jurka    public OrderedDataOutputStream(OutputStream out) {
29e8d1bf7a439450b9979701909164a6baffbe8baeMichael Jurka        super(out);
30e8d1bf7a439450b9979701909164a6baffbe8baeMichael Jurka    }
31e8d1bf7a439450b9979701909164a6baffbe8baeMichael Jurka
32e8d1bf7a439450b9979701909164a6baffbe8baeMichael Jurka    public OrderedDataOutputStream setByteOrder(ByteOrder order) {
33e8d1bf7a439450b9979701909164a6baffbe8baeMichael Jurka        mByteBuffer.order(order);
34e8d1bf7a439450b9979701909164a6baffbe8baeMichael Jurka        return this;
35e8d1bf7a439450b9979701909164a6baffbe8baeMichael Jurka    }
36e8d1bf7a439450b9979701909164a6baffbe8baeMichael Jurka
37e8d1bf7a439450b9979701909164a6baffbe8baeMichael Jurka    public OrderedDataOutputStream writeShort(short value) throws IOException {
38e8d1bf7a439450b9979701909164a6baffbe8baeMichael Jurka        mByteBuffer.rewind();
39e8d1bf7a439450b9979701909164a6baffbe8baeMichael Jurka        mByteBuffer.putShort(value);
40e8d1bf7a439450b9979701909164a6baffbe8baeMichael Jurka        out.write(mByteBuffer.array(), 0, 2);
41e8d1bf7a439450b9979701909164a6baffbe8baeMichael Jurka        return this;
42e8d1bf7a439450b9979701909164a6baffbe8baeMichael Jurka    }
43e8d1bf7a439450b9979701909164a6baffbe8baeMichael Jurka
44e8d1bf7a439450b9979701909164a6baffbe8baeMichael Jurka    public OrderedDataOutputStream writeInt(int value) throws IOException {
45e8d1bf7a439450b9979701909164a6baffbe8baeMichael Jurka        mByteBuffer.rewind();
46e8d1bf7a439450b9979701909164a6baffbe8baeMichael Jurka        mByteBuffer.putInt(value);
47e8d1bf7a439450b9979701909164a6baffbe8baeMichael Jurka        out.write(mByteBuffer.array());
48e8d1bf7a439450b9979701909164a6baffbe8baeMichael Jurka        return this;
49e8d1bf7a439450b9979701909164a6baffbe8baeMichael Jurka    }
50e8d1bf7a439450b9979701909164a6baffbe8baeMichael Jurka
51e8d1bf7a439450b9979701909164a6baffbe8baeMichael Jurka    public OrderedDataOutputStream writeRational(Rational rational) throws IOException {
52e8d1bf7a439450b9979701909164a6baffbe8baeMichael Jurka        writeInt((int) rational.getNumerator());
53e8d1bf7a439450b9979701909164a6baffbe8baeMichael Jurka        writeInt((int) rational.getDenominator());
54e8d1bf7a439450b9979701909164a6baffbe8baeMichael Jurka        return this;
55e8d1bf7a439450b9979701909164a6baffbe8baeMichael Jurka    }
56e8d1bf7a439450b9979701909164a6baffbe8baeMichael Jurka}
57