1f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin/* 2f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * Copyright (C) 2010 The Android Open Source Project 3f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * 4f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * Licensed under the Apache License, Version 2.0 (the "License"); 5f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * you may not use this file except in compliance with the License. 6f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * You may obtain a copy of the License at 7f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * 8f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * http://www.apache.org/licenses/LICENSE-2.0 9f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * 10f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * Unless required by applicable law or agreed to in writing, software 11f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * distributed under the License is distributed on an "AS IS" BASIS, 12f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * See the License for the specific language governing permissions and 14f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * limitations under the License. 15f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin */ 16f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 17f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linpackage com.android.gallery3d.data; 18f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 19f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport android.graphics.Bitmap; 20f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport android.graphics.BitmapRegionDecoder; 21f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 22df4763cf8752fb1babc7244fc2be33ed87d3b072Owen Linimport com.android.gallery3d.common.ApiHelper; 2315b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Changimport com.android.gallery3d.ui.ScreenNail; 24d8fb81f601830385a2343d08ad5dd171e4c7bfe0Owen Linimport com.android.gallery3d.util.ThreadPool.Job; 254bb5912e85f6d1bd8a6b78d6d52b4c4da7aeb740Owen Lin 26f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin// MediaItem represents an image or a video item. 27f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linpublic abstract class MediaItem extends MediaObject { 28f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin // NOTE: These type numbers are stored in the image cache, so it should not 29f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin // not be changed without resetting the cache. 30f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public static final int TYPE_THUMBNAIL = 1; 31f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public static final int TYPE_MICROTHUMBNAIL = 2; 32f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 3304a9a44fb85263c4590ca68f92adff6f9da360e9Ray Chen public static final int CACHED_IMAGE_QUALITY = 95; 3404a9a44fb85263c4590ca68f92adff6f9da360e9Ray Chen 35f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public static final int IMAGE_READY = 0; 36f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public static final int IMAGE_WAIT = 1; 37f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public static final int IMAGE_ERROR = -1; 38f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 39d74016524fa899747411240daa453e5ca9cac219Ray Chen public static final String MIME_TYPE_JPEG = "image/jpeg"; 40d74016524fa899747411240daa453e5ca9cac219Ray Chen 41cafd30f96355ad446943d60cd2595d08423944e2Owen Lin private static final int BYTESBUFFE_POOL_SIZE = 4; 42cafd30f96355ad446943d60cd2595d08423944e2Owen Lin private static final int BYTESBUFFER_SIZE = 200 * 1024; 43cafd30f96355ad446943d60cd2595d08423944e2Owen Lin 443ea0bfbcbea64276595029878d37f25bf4fbb881Bobby Georgescu private static int sMicrothumbnailTargetSize = 200; 453ea0bfbcbea64276595029878d37f25bf4fbb881Bobby Georgescu private static final BytesBufferPool sMicroThumbBufferPool = 463ea0bfbcbea64276595029878d37f25bf4fbb881Bobby Georgescu new BytesBufferPool(BYTESBUFFE_POOL_SIZE, BYTESBUFFER_SIZE); 47df4763cf8752fb1babc7244fc2be33ed87d3b072Owen Lin 483ea0bfbcbea64276595029878d37f25bf4fbb881Bobby Georgescu private static int sThumbnailTargetSize = 640; 49df4763cf8752fb1babc7244fc2be33ed87d3b072Owen Lin 50f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin // TODO: fix default value for latlng and change this. 51f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public static final double INVALID_LATLNG = 0f; 52f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 53f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public abstract Job<Bitmap> requestImage(int type); 54f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public abstract Job<BitmapRegionDecoder> requestLargeImage(); 55f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 56f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public MediaItem(Path path, long version) { 57f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin super(path, version); 58f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 59f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 60f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public long getDateInMs() { 61f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin return 0; 62f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 63f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 64f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public String getName() { 65f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin return null; 66f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 67f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 68f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public void getLatLong(double[] latLong) { 69f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin latLong[0] = INVALID_LATLNG; 70f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin latLong[1] = INVALID_LATLNG; 71f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 72f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 73f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public String[] getTags() { 74f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin return null; 75f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 76f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 77f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public Face[] getFaces() { 78f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin return null; 79f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 80f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 8122493b29c32142f2588c623f5c78e9167352dddcOwen Lin // The rotation of the full-resolution image. By default, it returns the value of 8222493b29c32142f2588c623f5c78e9167352dddcOwen Lin // getRotation(). 8322493b29c32142f2588c623f5c78e9167352dddcOwen Lin public int getFullImageRotation() { 8422493b29c32142f2588c623f5c78e9167352dddcOwen Lin return getRotation(); 8522493b29c32142f2588c623f5c78e9167352dddcOwen Lin } 8622493b29c32142f2588c623f5c78e9167352dddcOwen Lin 87f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public int getRotation() { 88f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin return 0; 89f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 90f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 91f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public long getSize() { 92f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin return 0; 93f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 94f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 95f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public abstract String getMimeType(); 96bc2154199aee16762e3758ad0cfed685323d9a9fChih-Chung Chang 97a535522fa7661771351e42465c67ed70825ed2e4George Mount public String getFilePath() { 98a535522fa7661771351e42465c67ed70825ed2e4George Mount return ""; 99a535522fa7661771351e42465c67ed70825ed2e4George Mount } 100a535522fa7661771351e42465c67ed70825ed2e4George Mount 101bc2154199aee16762e3758ad0cfed685323d9a9fChih-Chung Chang // Returns width and height of the media item. 102bc2154199aee16762e3758ad0cfed685323d9a9fChih-Chung Chang // Returns 0, 0 if the information is not available. 103bc2154199aee16762e3758ad0cfed685323d9a9fChih-Chung Chang public abstract int getWidth(); 104bc2154199aee16762e3758ad0cfed685323d9a9fChih-Chung Chang public abstract int getHeight(); 1054bb5912e85f6d1bd8a6b78d6d52b4c4da7aeb740Owen Lin 10615b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang // This is an alternative for requestImage() in PhotoPage. If this 10715b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang // is implemented, you don't need to implement requestImage(). 10815b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang public ScreenNail getScreenNail() { 10915b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang return null; 11015b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang } 11115b351a22d02e89d882fc9fe32b3f4c512080e0aChih-Chung Chang 1124bb5912e85f6d1bd8a6b78d6d52b4c4da7aeb740Owen Lin public static int getTargetSize(int type) { 1134bb5912e85f6d1bd8a6b78d6d52b4c4da7aeb740Owen Lin switch (type) { 1144bb5912e85f6d1bd8a6b78d6d52b4c4da7aeb740Owen Lin case TYPE_THUMBNAIL: 1153ea0bfbcbea64276595029878d37f25bf4fbb881Bobby Georgescu return sThumbnailTargetSize; 1164bb5912e85f6d1bd8a6b78d6d52b4c4da7aeb740Owen Lin case TYPE_MICROTHUMBNAIL: 1173ea0bfbcbea64276595029878d37f25bf4fbb881Bobby Georgescu return sMicrothumbnailTargetSize; 1184bb5912e85f6d1bd8a6b78d6d52b4c4da7aeb740Owen Lin default: 1194bb5912e85f6d1bd8a6b78d6d52b4c4da7aeb740Owen Lin throw new RuntimeException( 1204bb5912e85f6d1bd8a6b78d6d52b4c4da7aeb740Owen Lin "should only request thumb/microthumb from cache"); 1214bb5912e85f6d1bd8a6b78d6d52b4c4da7aeb740Owen Lin } 1224bb5912e85f6d1bd8a6b78d6d52b4c4da7aeb740Owen Lin } 123d8fb81f601830385a2343d08ad5dd171e4c7bfe0Owen Lin 124cafd30f96355ad446943d60cd2595d08423944e2Owen Lin public static BytesBufferPool getBytesBufferPool() { 125cafd30f96355ad446943d60cd2595d08423944e2Owen Lin return sMicroThumbBufferPool; 126cafd30f96355ad446943d60cd2595d08423944e2Owen Lin } 1273ea0bfbcbea64276595029878d37f25bf4fbb881Bobby Georgescu 1283ea0bfbcbea64276595029878d37f25bf4fbb881Bobby Georgescu public static void setThumbnailSizes(int size, int microSize) { 1293ea0bfbcbea64276595029878d37f25bf4fbb881Bobby Georgescu sThumbnailTargetSize = size; 1303ea0bfbcbea64276595029878d37f25bf4fbb881Bobby Georgescu if (sMicrothumbnailTargetSize != microSize) { 1313ea0bfbcbea64276595029878d37f25bf4fbb881Bobby Georgescu sMicrothumbnailTargetSize = microSize; 1323ea0bfbcbea64276595029878d37f25bf4fbb881Bobby Georgescu } 1333ea0bfbcbea64276595029878d37f25bf4fbb881Bobby Georgescu } 134f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin} 135