1 /* 2 * Copyright (C) 2009 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.android.camera.gallery; 18 19 import com.android.camera.BitmapManager; 20 21 import android.content.ContentResolver; 22 import android.graphics.Bitmap; 23 import android.media.ThumbnailUtils; 24 import android.net.Uri; 25 import android.provider.MediaStore.Images; 26 import android.provider.MediaStore.Video; 27 import android.util.Log; 28 29 import java.io.IOException; 30 import java.io.InputStream; 31 32 /** 33 * Represents a particular video and provides access to the underlying data and 34 * two thumbnail bitmaps as well as other information such as the id, and the 35 * path to the actual video data. 36 */ 37 public class VideoObject extends BaseImage implements IImage { 38 private static final String TAG = "VideoObject"; 39 /** 40 * Constructor. 41 * 42 * @param id the image id of the image 43 * @param cr the content resolver 44 */ VideoObject(BaseImageList container, ContentResolver cr, long id, int index, Uri uri, String dataPath, String mimeType, long dateTaken, String title)45 protected VideoObject(BaseImageList container, ContentResolver cr, 46 long id, int index, Uri uri, String dataPath, 47 String mimeType, long dateTaken, String title) { 48 super(container, cr, id, index, uri, dataPath, 49 mimeType, dateTaken, title); 50 } 51 52 @Override equals(Object other)53 public boolean equals(Object other) { 54 if (other == null || !(other instanceof VideoObject)) return false; 55 return fullSizeImageUri().equals( 56 ((VideoObject) other).fullSizeImageUri()); 57 } 58 59 @Override hashCode()60 public int hashCode() { 61 return fullSizeImageUri().toString().hashCode(); 62 } 63 64 @Override fullSizeBitmap(int minSideLength, int maxNumberOfPixels, boolean rotateAsNeeded, boolean useNative)65 public Bitmap fullSizeBitmap(int minSideLength, int maxNumberOfPixels, 66 boolean rotateAsNeeded, boolean useNative) { 67 return ThumbnailUtils.createVideoThumbnail(mDataPath, 68 Video.Thumbnails.MINI_KIND); 69 } 70 71 @Override fullSizeImageData()72 public InputStream fullSizeImageData() { 73 try { 74 InputStream input = mContentResolver.openInputStream( 75 fullSizeImageUri()); 76 return input; 77 } catch (IOException ex) { 78 return null; 79 } 80 } 81 82 @Override getHeight()83 public int getHeight() { 84 return 0; 85 } 86 87 @Override getWidth()88 public int getWidth() { 89 return 0; 90 } 91 isReadonly()92 public boolean isReadonly() { 93 return false; 94 } 95 isDrm()96 public boolean isDrm() { 97 return false; 98 } 99 rotateImageBy(int degrees)100 public boolean rotateImageBy(int degrees) { 101 return false; 102 } 103 thumbBitmap(boolean rotateAsNeeded)104 public Bitmap thumbBitmap(boolean rotateAsNeeded) { 105 return fullSizeBitmap(THUMBNAIL_TARGET_SIZE, THUMBNAIL_MAX_NUM_PIXELS); 106 } 107 108 @Override miniThumbBitmap()109 public Bitmap miniThumbBitmap() { 110 try { 111 long id = mId; 112 return BitmapManager.instance().getThumbnail(mContentResolver, 113 id, Images.Thumbnails.MICRO_KIND, null, true); 114 } catch (Throwable ex) { 115 Log.e(TAG, "miniThumbBitmap got exception", ex); 116 return null; 117 } 118 } 119 120 @Override toString()121 public String toString() { 122 return new StringBuilder("VideoObject").append(mId).toString(); 123 } 124 } 125