130ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni/* 230ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni * Copyright (C) 2011 The Android Open Source Project 330ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni * 430ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni * Licensed under the Apache License, Version 2.0 (the "License"); 530ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni * you may not use this file except in compliance with the License. 630ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni * You may obtain a copy of the License at 730ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni * 830ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni * http://www.apache.org/licenses/LICENSE-2.0 930ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni * 1030ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni * Unless required by applicable law or agreed to in writing, software 1130ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni * distributed under the License is distributed on an "AS IS" BASIS, 1230ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1330ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni * See the License for the specific language governing permissions and 1430ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni * limitations under the License. 1530ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni */ 1630ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni 1730ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni 1830ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceronipackage android.filterfw.format; 1930ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni 2030ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroniimport android.filterfw.core.FrameFormat; 2130ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroniimport android.filterfw.core.MutableFrameFormat; 2230ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroniimport android.graphics.Bitmap; 2330ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni 24a3bfbe5389c6146abe318a7add3fa688d69bc01bEino-Ville Talvala/** 25a3bfbe5389c6146abe318a7add3fa688d69bc01bEino-Ville Talvala * @hide 26a3bfbe5389c6146abe318a7add3fa688d69bc01bEino-Ville Talvala */ 2730ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceronipublic class ImageFormat { 2830ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni 2930ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni public static final String COLORSPACE_KEY = "colorspace"; 3030ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni 3130ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni public static final int COLORSPACE_GRAY = 1; 3230ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni public static final int COLORSPACE_RGB = 2; 3330ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni public static final int COLORSPACE_RGBA = 3; 3430ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni public static final int COLORSPACE_YUV = 4; 3530ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni 3630ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni public static MutableFrameFormat create(int width, 3730ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni int height, 3830ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni int colorspace, 3930ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni int bytesPerSample, 4030ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni int target) { 4121d0ac7403b836e32e2bdbdc8dc98f42b2dfa4e5Marius Renn MutableFrameFormat result = new MutableFrameFormat(FrameFormat.TYPE_BYTE, target); 4230ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni result.setDimensions(width, height); 4330ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni result.setBytesPerSample(bytesPerSample); 4421d0ac7403b836e32e2bdbdc8dc98f42b2dfa4e5Marius Renn result.setMetaValue(COLORSPACE_KEY, colorspace); 45bf4aaebc555cfb1e49ee411e3477203749fe6a11Marius Renn if (target == FrameFormat.TARGET_SIMPLE) { 4630ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni result.setObjectClass(Bitmap.class); 4730ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni } 4830ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni return result; 4930ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni } 5030ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni 5130ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni public static MutableFrameFormat create(int width, 5230ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni int height, 5330ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni int colorspace, 5430ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni int target) { 5530ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni return create(width, 5630ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni height, 5730ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni colorspace, 5830ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni bytesPerSampleForColorspace(colorspace), 5930ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni target); 6030ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni } 6130ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni 6230ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni public static MutableFrameFormat create(int colorspace, int target) { 6330ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni return create(FrameFormat.SIZE_UNSPECIFIED, 6430ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni FrameFormat.SIZE_UNSPECIFIED, 6530ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni colorspace, 6630ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni bytesPerSampleForColorspace(colorspace), 6730ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni target); 6830ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni } 6930ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni 70c0017fd82acec5d0427306ea5f536c3d78854f95Marius Renn public static MutableFrameFormat create(int colorspace) { 71c0017fd82acec5d0427306ea5f536c3d78854f95Marius Renn return create(FrameFormat.SIZE_UNSPECIFIED, 72c0017fd82acec5d0427306ea5f536c3d78854f95Marius Renn FrameFormat.SIZE_UNSPECIFIED, 73c0017fd82acec5d0427306ea5f536c3d78854f95Marius Renn colorspace, 74c0017fd82acec5d0427306ea5f536c3d78854f95Marius Renn bytesPerSampleForColorspace(colorspace), 75c0017fd82acec5d0427306ea5f536c3d78854f95Marius Renn FrameFormat.TARGET_UNSPECIFIED); 76c0017fd82acec5d0427306ea5f536c3d78854f95Marius Renn } 77c0017fd82acec5d0427306ea5f536c3d78854f95Marius Renn 7830ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni public static int bytesPerSampleForColorspace(int colorspace) { 7930ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni switch (colorspace) { 8030ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni case COLORSPACE_GRAY: 8130ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni return 1; 8230ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni case COLORSPACE_RGB: 8330ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni return 3; 8430ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni case COLORSPACE_RGBA: 8530ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni return 4; 8630ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni case COLORSPACE_YUV: 8730ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni return 3; 8830ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni default: 8930ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni throw new RuntimeException("Unknown colorspace id " + colorspace + "!"); 9030ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni } 9130ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni } 9230ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni} 93