/* * Copyright (C) 2011 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef ANDROID_CAMERA_CAMERA_FORMAT_CONVERTERS_H #define ANDROID_CAMERA_CAMERA_FORMAT_CONVERTERS_H /* * Contains declaration of the API that allows converting frames from one * pixel format to another. * * For the emulator, we really need to convert into two formats: YV12, which is * used by the camera framework for video, and RGB32 for preview window. */ #include "camera-common.h" /* Checks if conversion between two pixel formats is available. * Param: * from - Pixel format to convert from. * to - Pixel format to convert to. * Return: * boolean: 1 if converter is available, or 0 if no conversion exists. */ extern int has_converter(uint32_t from, uint32_t to); /* Converts a frame into multiple framebuffers. * When camera service replies to a framebuffer request from the client, it * usualy sends two framebuffers in the reply: one for video, and another for * preview window. Since these two framebuffers have different pixel formats * (most of the time), we need to do two conversions for each frame received from * the camera. This is the main intention behind this routine: to have a one call * that produces as many conversions as needed. * Param: * frame - Frame to convert. * pixel_format - Defines pixel format for the converting framebuffer. * framebuffer_size, width, height - Converting framebuffer byte size, width, * and height. * framebuffers - Array of framebuffers where to convert the frame. Size of this * array is defined by the 'fbs_num' parameter. Note that the caller must * make sure that buffers are large enough to contain entire frame captured * from the device. * fbs_num - Number of entries in the 'framebuffers' array. * r_scale, g_scale, b_scale - White balance scale. * exp_comp - Expsoure compensation. * Return: * 0 on success, or non-zero value on failure. */ extern int convert_frame(const void* frame, uint32_t pixel_format, size_t framebuffer_size, int width, int height, ClientFrameBuffer* framebuffers, int fbs_num, float r_scale, float g_scale, float b_scale, float exp_comp); #endif /* ANDROID_CAMERA_CAMERA_FORMAT_CONVERTERS_H */