1db205a1d75c1e9a7d0dbd8fa011335249ad6f4acNipun Kwatra/* 2db205a1d75c1e9a7d0dbd8fa011335249ad6f4acNipun Kwatra * Copyright (C) 2010 The Android Open Source Project 3db205a1d75c1e9a7d0dbd8fa011335249ad6f4acNipun Kwatra * 4db205a1d75c1e9a7d0dbd8fa011335249ad6f4acNipun Kwatra * Licensed under the Apache License, Version 2.0 (the "License"); 5db205a1d75c1e9a7d0dbd8fa011335249ad6f4acNipun Kwatra * you may not use this file except in compliance with the License. 6db205a1d75c1e9a7d0dbd8fa011335249ad6f4acNipun Kwatra * You may obtain a copy of the License at 7db205a1d75c1e9a7d0dbd8fa011335249ad6f4acNipun Kwatra * 8db205a1d75c1e9a7d0dbd8fa011335249ad6f4acNipun Kwatra * http://www.apache.org/licenses/LICENSE-2.0 9db205a1d75c1e9a7d0dbd8fa011335249ad6f4acNipun Kwatra * 10db205a1d75c1e9a7d0dbd8fa011335249ad6f4acNipun Kwatra * Unless required by applicable law or agreed to in writing, software 11db205a1d75c1e9a7d0dbd8fa011335249ad6f4acNipun Kwatra * distributed under the License is distributed on an "AS IS" BASIS, 12db205a1d75c1e9a7d0dbd8fa011335249ad6f4acNipun Kwatra * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13db205a1d75c1e9a7d0dbd8fa011335249ad6f4acNipun Kwatra * See the License for the specific language governing permissions and 14db205a1d75c1e9a7d0dbd8fa011335249ad6f4acNipun Kwatra * limitations under the License. 15db205a1d75c1e9a7d0dbd8fa011335249ad6f4acNipun Kwatra */ 16db205a1d75c1e9a7d0dbd8fa011335249ad6f4acNipun Kwatra 17db205a1d75c1e9a7d0dbd8fa011335249ad6f4acNipun Kwatra// YUVCanvas holds a reference to a YUVImage on which it can do various 18db205a1d75c1e9a7d0dbd8fa011335249ad6f4acNipun Kwatra// drawing operations. It provides various utility functions for filling, 19db205a1d75c1e9a7d0dbd8fa011335249ad6f4acNipun Kwatra// cropping, etc. 20db205a1d75c1e9a7d0dbd8fa011335249ad6f4acNipun Kwatra 21db205a1d75c1e9a7d0dbd8fa011335249ad6f4acNipun Kwatra 22db205a1d75c1e9a7d0dbd8fa011335249ad6f4acNipun Kwatra#ifndef YUV_CANVAS_H_ 23db205a1d75c1e9a7d0dbd8fa011335249ad6f4acNipun Kwatra 24db205a1d75c1e9a7d0dbd8fa011335249ad6f4acNipun Kwatra#define YUV_CANVAS_H_ 25db205a1d75c1e9a7d0dbd8fa011335249ad6f4acNipun Kwatra 26db205a1d75c1e9a7d0dbd8fa011335249ad6f4acNipun Kwatra#include <stdint.h> 27db205a1d75c1e9a7d0dbd8fa011335249ad6f4acNipun Kwatra 28db205a1d75c1e9a7d0dbd8fa011335249ad6f4acNipun Kwatranamespace android { 29db205a1d75c1e9a7d0dbd8fa011335249ad6f4acNipun Kwatra 30db205a1d75c1e9a7d0dbd8fa011335249ad6f4acNipun Kwatraclass YUVImage; 31db205a1d75c1e9a7d0dbd8fa011335249ad6f4acNipun Kwatraclass Rect; 32db205a1d75c1e9a7d0dbd8fa011335249ad6f4acNipun Kwatra 33db205a1d75c1e9a7d0dbd8fa011335249ad6f4acNipun Kwatraclass YUVCanvas { 34db205a1d75c1e9a7d0dbd8fa011335249ad6f4acNipun Kwatrapublic: 35db205a1d75c1e9a7d0dbd8fa011335249ad6f4acNipun Kwatra 36db205a1d75c1e9a7d0dbd8fa011335249ad6f4acNipun Kwatra // Constructor takes in reference to a yuvImage on which it can do 37db205a1d75c1e9a7d0dbd8fa011335249ad6f4acNipun Kwatra // various drawing opreations. 38db205a1d75c1e9a7d0dbd8fa011335249ad6f4acNipun Kwatra YUVCanvas(YUVImage &yuvImage); 39db205a1d75c1e9a7d0dbd8fa011335249ad6f4acNipun Kwatra ~YUVCanvas(); 40db205a1d75c1e9a7d0dbd8fa011335249ad6f4acNipun Kwatra 41db205a1d75c1e9a7d0dbd8fa011335249ad6f4acNipun Kwatra // Fills the entire image with the given YUV values. 42db205a1d75c1e9a7d0dbd8fa011335249ad6f4acNipun Kwatra void FillYUV(uint8_t yValue, uint8_t uValue, uint8_t vValue); 43db205a1d75c1e9a7d0dbd8fa011335249ad6f4acNipun Kwatra 44db205a1d75c1e9a7d0dbd8fa011335249ad6f4acNipun Kwatra // Fills the rectangular region [startX,endX]x[startY,endY] with the given YUV values. 45db205a1d75c1e9a7d0dbd8fa011335249ad6f4acNipun Kwatra void FillYUVRectangle(const Rect& rect, 46db205a1d75c1e9a7d0dbd8fa011335249ad6f4acNipun Kwatra uint8_t yValue, uint8_t uValue, uint8_t vValue); 47db205a1d75c1e9a7d0dbd8fa011335249ad6f4acNipun Kwatra 48db205a1d75c1e9a7d0dbd8fa011335249ad6f4acNipun Kwatra // Copies the region [startX,endX]x[startY,endY] from srcImage into the 49db205a1d75c1e9a7d0dbd8fa011335249ad6f4acNipun Kwatra // canvas' target image (mYUVImage) starting at 50db205a1d75c1e9a7d0dbd8fa011335249ad6f4acNipun Kwatra // (destinationStartX,destinationStartY). 51db205a1d75c1e9a7d0dbd8fa011335249ad6f4acNipun Kwatra // Note that undefined behavior may occur if srcImage is same as the canvas' 52db205a1d75c1e9a7d0dbd8fa011335249ad6f4acNipun Kwatra // target image. 53db205a1d75c1e9a7d0dbd8fa011335249ad6f4acNipun Kwatra void CopyImageRect( 54db205a1d75c1e9a7d0dbd8fa011335249ad6f4acNipun Kwatra const Rect& srcRect, 55db205a1d75c1e9a7d0dbd8fa011335249ad6f4acNipun Kwatra int32_t destStartX, int32_t destStartY, 56db205a1d75c1e9a7d0dbd8fa011335249ad6f4acNipun Kwatra const YUVImage &srcImage); 57db205a1d75c1e9a7d0dbd8fa011335249ad6f4acNipun Kwatra 58c0d936ddacc4f7d883f3bd1dd8099586836c820fNipun Kwatra // Downsamples the srcImage into the canvas' target image (mYUVImage) 59c0d936ddacc4f7d883f3bd1dd8099586836c820fNipun Kwatra // The downsampling copies pixels from the source image starting at 60c0d936ddacc4f7d883f3bd1dd8099586836c820fNipun Kwatra // (srcOffsetX, srcOffsetY) to the target image, starting at (0, 0). 61c0d936ddacc4f7d883f3bd1dd8099586836c820fNipun Kwatra // For each X increment in the target image, skipX pixels are skipped 62c0d936ddacc4f7d883f3bd1dd8099586836c820fNipun Kwatra // in the source image. 63c0d936ddacc4f7d883f3bd1dd8099586836c820fNipun Kwatra // Similarly for each Y increment in the target image, skipY pixels 64c0d936ddacc4f7d883f3bd1dd8099586836c820fNipun Kwatra // are skipped in the source image. 65c0d936ddacc4f7d883f3bd1dd8099586836c820fNipun Kwatra void downsample( 66c0d936ddacc4f7d883f3bd1dd8099586836c820fNipun Kwatra int32_t srcOffsetX, int32_t srcOffsetY, 67c0d936ddacc4f7d883f3bd1dd8099586836c820fNipun Kwatra int32_t skipX, int32_t skipY, 68c0d936ddacc4f7d883f3bd1dd8099586836c820fNipun Kwatra const YUVImage &srcImage); 69c0d936ddacc4f7d883f3bd1dd8099586836c820fNipun Kwatra 70db205a1d75c1e9a7d0dbd8fa011335249ad6f4acNipun Kwatraprivate: 71db205a1d75c1e9a7d0dbd8fa011335249ad6f4acNipun Kwatra YUVImage& mYUVImage; 72db205a1d75c1e9a7d0dbd8fa011335249ad6f4acNipun Kwatra 73db205a1d75c1e9a7d0dbd8fa011335249ad6f4acNipun Kwatra YUVCanvas(const YUVCanvas &); 74db205a1d75c1e9a7d0dbd8fa011335249ad6f4acNipun Kwatra YUVCanvas &operator=(const YUVCanvas &); 75db205a1d75c1e9a7d0dbd8fa011335249ad6f4acNipun Kwatra}; 76db205a1d75c1e9a7d0dbd8fa011335249ad6f4acNipun Kwatra 77db205a1d75c1e9a7d0dbd8fa011335249ad6f4acNipun Kwatra} // namespace android 78db205a1d75c1e9a7d0dbd8fa011335249ad6f4acNipun Kwatra 79db205a1d75c1e9a7d0dbd8fa011335249ad6f4acNipun Kwatra#endif // YUV_CANVAS_H_ 80