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