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