12a4a7d5af053a17586a262a1267ba993e31790f1Andreas Huber/* 22a4a7d5af053a17586a262a1267ba993e31790f1Andreas Huber * Copyright (C) 2009 The Android Open Source Project 32a4a7d5af053a17586a262a1267ba993e31790f1Andreas Huber * 42a4a7d5af053a17586a262a1267ba993e31790f1Andreas Huber * Licensed under the Apache License, Version 2.0 (the "License"); 52a4a7d5af053a17586a262a1267ba993e31790f1Andreas Huber * you may not use this file except in compliance with the License. 62a4a7d5af053a17586a262a1267ba993e31790f1Andreas Huber * You may obtain a copy of the License at 72a4a7d5af053a17586a262a1267ba993e31790f1Andreas Huber * 82a4a7d5af053a17586a262a1267ba993e31790f1Andreas Huber * http://www.apache.org/licenses/LICENSE-2.0 92a4a7d5af053a17586a262a1267ba993e31790f1Andreas Huber * 102a4a7d5af053a17586a262a1267ba993e31790f1Andreas Huber * Unless required by applicable law or agreed to in writing, software 112a4a7d5af053a17586a262a1267ba993e31790f1Andreas Huber * distributed under the License is distributed on an "AS IS" BASIS, 122a4a7d5af053a17586a262a1267ba993e31790f1Andreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 132a4a7d5af053a17586a262a1267ba993e31790f1Andreas Huber * See the License for the specific language governing permissions and 142a4a7d5af053a17586a262a1267ba993e31790f1Andreas Huber * limitations under the License. 152a4a7d5af053a17586a262a1267ba993e31790f1Andreas Huber */ 162a4a7d5af053a17586a262a1267ba993e31790f1Andreas Huber 172a4a7d5af053a17586a262a1267ba993e31790f1Andreas Huber#ifndef COLOR_CONVERTER_H_ 182a4a7d5af053a17586a262a1267ba993e31790f1Andreas Huber 192a4a7d5af053a17586a262a1267ba993e31790f1Andreas Huber#define COLOR_CONVERTER_H_ 202a4a7d5af053a17586a262a1267ba993e31790f1Andreas Huber 212a4a7d5af053a17586a262a1267ba993e31790f1Andreas Huber#include <sys/types.h> 222a4a7d5af053a17586a262a1267ba993e31790f1Andreas Huber 23d3eaeefb1bac68bc1fee91b794be2c2c3bea6d94Andreas Huber#include <stdint.h> 241472eb39f7516faa26de200d8592464c8aaac38eAndreas Huber#include <utils/Errors.h> 25d3eaeefb1bac68bc1fee91b794be2c2c3bea6d94Andreas Huber 262a4a7d5af053a17586a262a1267ba993e31790f1Andreas Huber#include <OMX_Video.h> 272a4a7d5af053a17586a262a1267ba993e31790f1Andreas Huber 282a4a7d5af053a17586a262a1267ba993e31790f1Andreas Hubernamespace android { 292a4a7d5af053a17586a262a1267ba993e31790f1Andreas Huber 302a4a7d5af053a17586a262a1267ba993e31790f1Andreas Huberstruct ColorConverter { 312a4a7d5af053a17586a262a1267ba993e31790f1Andreas Huber ColorConverter(OMX_COLOR_FORMATTYPE from, OMX_COLOR_FORMATTYPE to); 322a4a7d5af053a17586a262a1267ba993e31790f1Andreas Huber ~ColorConverter(); 332a4a7d5af053a17586a262a1267ba993e31790f1Andreas Huber 342a4a7d5af053a17586a262a1267ba993e31790f1Andreas Huber bool isValid() const; 352a4a7d5af053a17586a262a1267ba993e31790f1Andreas Huber 361472eb39f7516faa26de200d8592464c8aaac38eAndreas Huber status_t convert( 37f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber const void *srcBits, 38f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber size_t srcWidth, size_t srcHeight, 39f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber size_t srcCropLeft, size_t srcCropTop, 40f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber size_t srcCropRight, size_t srcCropBottom, 41f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber void *dstBits, 42f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber size_t dstWidth, size_t dstHeight, 43f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber size_t dstCropLeft, size_t dstCropTop, 44f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber size_t dstCropRight, size_t dstCropBottom); 452a4a7d5af053a17586a262a1267ba993e31790f1Andreas Huber 462a4a7d5af053a17586a262a1267ba993e31790f1Andreas Huberprivate: 47f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber struct BitmapParams { 48f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber BitmapParams( 49f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber void *bits, 50f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber size_t width, size_t height, 51f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber size_t cropLeft, size_t cropTop, 52f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber size_t cropRight, size_t cropBottom); 53f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber 54f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber size_t cropWidth() const; 55f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber size_t cropHeight() const; 56f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber 57f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber void *mBits; 58f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber size_t mWidth, mHeight; 59f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber size_t mCropLeft, mCropTop, mCropRight, mCropBottom; 60f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber }; 61f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber 622a4a7d5af053a17586a262a1267ba993e31790f1Andreas Huber OMX_COLOR_FORMATTYPE mSrcFormat, mDstFormat; 632a4a7d5af053a17586a262a1267ba993e31790f1Andreas Huber uint8_t *mClip; 642a4a7d5af053a17586a262a1267ba993e31790f1Andreas Huber 652a4a7d5af053a17586a262a1267ba993e31790f1Andreas Huber uint8_t *initClip(); 662a4a7d5af053a17586a262a1267ba993e31790f1Andreas Huber 671472eb39f7516faa26de200d8592464c8aaac38eAndreas Huber status_t convertCbYCrY( 68f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber const BitmapParams &src, const BitmapParams &dst); 692a4a7d5af053a17586a262a1267ba993e31790f1Andreas Huber 701472eb39f7516faa26de200d8592464c8aaac38eAndreas Huber status_t convertYUV420Planar( 71f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber const BitmapParams &src, const BitmapParams &dst); 722a4a7d5af053a17586a262a1267ba993e31790f1Andreas Huber 731472eb39f7516faa26de200d8592464c8aaac38eAndreas Huber status_t convertQCOMYUV420SemiPlanar( 74f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber const BitmapParams &src, const BitmapParams &dst); 752a4a7d5af053a17586a262a1267ba993e31790f1Andreas Huber 761472eb39f7516faa26de200d8592464c8aaac38eAndreas Huber status_t convertYUV420SemiPlanar( 77f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber const BitmapParams &src, const BitmapParams &dst); 781c8ed2e906576fd8d7fa03f577bdec518cbe13d7Andreas Huber 79cb62bc3fe54222cf05824e6f98fefafee552049aAnu Sundararajan status_t convertTIYUV420PackedSemiPlanar( 80cb62bc3fe54222cf05824e6f98fefafee552049aAnu Sundararajan const BitmapParams &src, const BitmapParams &dst); 81cb62bc3fe54222cf05824e6f98fefafee552049aAnu Sundararajan 822a4a7d5af053a17586a262a1267ba993e31790f1Andreas Huber ColorConverter(const ColorConverter &); 832a4a7d5af053a17586a262a1267ba993e31790f1Andreas Huber ColorConverter &operator=(const ColorConverter &); 842a4a7d5af053a17586a262a1267ba993e31790f1Andreas Huber}; 852a4a7d5af053a17586a262a1267ba993e31790f1Andreas Huber 862a4a7d5af053a17586a262a1267ba993e31790f1Andreas Huber} // namespace android 872a4a7d5af053a17586a262a1267ba993e31790f1Andreas Huber 882a4a7d5af053a17586a262a1267ba993e31790f1Andreas Huber#endif // COLOR_CONVERTER_H_ 89