diff options
Diffstat (limited to 'src/com/android')
-rw-r--r-- | src/com/android/camera/Storage.java | 10 | ||||
-rw-r--r-- | src/com/android/camera/exif/ExifInterface.java | 7 | ||||
-rw-r--r-- | src/com/android/camera/exif/ExifOutputStream.java | 13 | ||||
-rw-r--r-- | src/com/android/camera/exif/OrderedDataOutputStream.java | 7 |
4 files changed, 30 insertions, 7 deletions
diff --git a/src/com/android/camera/Storage.java b/src/com/android/camera/Storage.java index 53950f2f2..ab2f818ab 100644 --- a/src/com/android/camera/Storage.java +++ b/src/com/android/camera/Storage.java @@ -74,12 +74,12 @@ public class Storage { } } - public static void writeFile(String path, byte[] jpeg, ExifInterface exif, + public static int writeFile(String path, byte[] jpeg, ExifInterface exif, String mimeType) { if (exif != null && (mimeType == null || mimeType.equalsIgnoreCase("jpeg"))) { try { - exif.writeExif(jpeg, path); + return exif.writeExif(jpeg, path); } catch (Exception e) { Log.e(TAG, "Failed to write data", e); } @@ -89,7 +89,9 @@ public class Storage { dir.mkdirs(); } writeFile(path, jpeg); + return jpeg.length; } + return 0; } public static void writeFile(String path, byte[] data) { @@ -114,9 +116,9 @@ public class Storage { int height, String mimeType) { String path = generateFilepath(title, mimeType); - writeFile(path, jpeg, exif, mimeType); + int size = writeFile(path, jpeg, exif, mimeType); return addImage(resolver, title, date, location, orientation, - jpeg.length, path, width, height, mimeType); + size, path, width, height, mimeType); } // Get a ContentValues object for the given photo data diff --git a/src/com/android/camera/exif/ExifInterface.java b/src/com/android/camera/exif/ExifInterface.java index 340f19e1c..f353f3586 100644 --- a/src/com/android/camera/exif/ExifInterface.java +++ b/src/com/android/camera/exif/ExifInterface.java @@ -850,14 +850,14 @@ public class ExifInterface { * @throws FileNotFoundException * @throws IOException */ - public void writeExif(byte[] jpeg, String exifOutFileName) throws FileNotFoundException, + public int writeExif(byte[] jpeg, String exifOutFileName) throws FileNotFoundException, IOException { if (jpeg == null || exifOutFileName == null) { throw new IllegalArgumentException(NULL_ARGUMENT_STRING); } - OutputStream s = null; + ExifOutputStream s = null; try { - s = getExifWriterStream(exifOutFileName); + s = (ExifOutputStream) getExifWriterStream(exifOutFileName); s.write(jpeg, 0, jpeg.length); s.flush(); } catch (IOException e) { @@ -865,6 +865,7 @@ public class ExifInterface { throw e; } s.close(); + return s.size(); } /** diff --git a/src/com/android/camera/exif/ExifOutputStream.java b/src/com/android/camera/exif/ExifOutputStream.java index 191e8280c..90d432769 100644 --- a/src/com/android/camera/exif/ExifOutputStream.java +++ b/src/com/android/camera/exif/ExifOutputStream.java @@ -82,6 +82,8 @@ class ExifOutputStream extends FilterOutputStream { private ByteBuffer mBuffer = ByteBuffer.allocate(4); private final ExifInterface mInterface; + private int mSize = 0; + protected ExifOutputStream(OutputStream ou, ExifInterface iRef) { super(new BufferedOutputStream(ou, STREAMBUFFER_SIZE)); mInterface = iRef; @@ -127,6 +129,7 @@ class ExifOutputStream extends FilterOutputStream { if (mByteToCopy > 0) { int byteToProcess = length > mByteToCopy ? mByteToCopy : length; out.write(buffer, offset, byteToProcess); + mSize += byteToProcess; length -= byteToProcess; mByteToCopy -= byteToProcess; offset += byteToProcess; @@ -147,6 +150,7 @@ class ExifOutputStream extends FilterOutputStream { throw new IOException("Not a valid jpeg image, cannot write exif"); } out.write(mBuffer.array(), 0, 2); + mSize += 2; mState = STATE_FRAME_HEADER; mBuffer.rewind(); writeExifData(); @@ -162,6 +166,7 @@ class ExifOutputStream extends FilterOutputStream { short tag = mBuffer.getShort(); if (tag == JpegHeader.EOI) { out.write(mBuffer.array(), 0, 2); + mSize += 2; mBuffer.rewind(); } } @@ -175,9 +180,11 @@ class ExifOutputStream extends FilterOutputStream { mState = STATE_JPEG_DATA; } else if (!JpegHeader.isSofMarker(marker)) { out.write(mBuffer.array(), 0, 4); + mSize += 4; mByteToCopy = (mBuffer.getShort() & 0x0000ffff) - 2; } else { out.write(mBuffer.array(), 0, 4); + mSize += 4; mState = STATE_JPEG_DATA; } mBuffer.rewind(); @@ -185,6 +192,7 @@ class ExifOutputStream extends FilterOutputStream { } if (length > 0) { out.write(buffer, offset, length); + mSize += length; } } @@ -238,6 +246,7 @@ class ExifOutputStream extends FilterOutputStream { for (ExifTag t : nullTags) { mExifData.addTag(t); } + mSize += dataOutputStream.size(); } private ArrayList<ExifTag> stripNullValueTags(ExifData data) { @@ -515,4 +524,8 @@ class ExifOutputStream extends FilterOutputStream { break; } } + + int size() { + return mSize; + } } diff --git a/src/com/android/camera/exif/OrderedDataOutputStream.java b/src/com/android/camera/exif/OrderedDataOutputStream.java index 1a1b31be4..abc0a6eb1 100644 --- a/src/com/android/camera/exif/OrderedDataOutputStream.java +++ b/src/com/android/camera/exif/OrderedDataOutputStream.java @@ -24,6 +24,7 @@ import java.nio.ByteOrder; class OrderedDataOutputStream extends FilterOutputStream { private final ByteBuffer mByteBuffer = ByteBuffer.allocate(4); + private int mSize = 0; public OrderedDataOutputStream(OutputStream out) { super(out); @@ -38,6 +39,7 @@ class OrderedDataOutputStream extends FilterOutputStream { mByteBuffer.rewind(); mByteBuffer.putShort(value); out.write(mByteBuffer.array(), 0, 2); + mSize += 2; return this; } @@ -45,6 +47,7 @@ class OrderedDataOutputStream extends FilterOutputStream { mByteBuffer.rewind(); mByteBuffer.putInt(value); out.write(mByteBuffer.array()); + mSize += 4; return this; } @@ -53,4 +56,8 @@ class OrderedDataOutputStream extends FilterOutputStream { writeInt((int) rational.getDenominator()); return this; } + + public int size() { + return mSize; + } } |