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 365343bc86119430e55fe43e132242291a74164f27Chong Zhang bool isDstRGB() const; 375343bc86119430e55fe43e132242291a74164f27Chong Zhang 381472eb39f7516faa26de200d8592464c8aaac38eAndreas Huber status_t convert( 39f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber const void *srcBits, 40f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber size_t srcWidth, size_t srcHeight, 41f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber size_t srcCropLeft, size_t srcCropTop, 42f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber size_t srcCropRight, size_t srcCropBottom, 43f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber void *dstBits, 44f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber size_t dstWidth, size_t dstHeight, 45f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber size_t dstCropLeft, size_t dstCropTop, 46f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber size_t dstCropRight, size_t dstCropBottom); 472a4a7d5af053a17586a262a1267ba993e31790f1Andreas Huber 482a4a7d5af053a17586a262a1267ba993e31790f1Andreas Huberprivate: 49f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber struct BitmapParams { 50f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber BitmapParams( 51f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber void *bits, 52f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber size_t width, size_t height, 53f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber size_t cropLeft, size_t cropTop, 54026d520295b52d136a6962a05882a696fe620725Chong Zhang size_t cropRight, size_t cropBottom, 55026d520295b52d136a6962a05882a696fe620725Chong Zhang OMX_COLOR_FORMATTYPE colorFromat); 56f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber 57f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber size_t cropWidth() const; 58f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber size_t cropHeight() const; 59f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber 60f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber void *mBits; 61026d520295b52d136a6962a05882a696fe620725Chong Zhang OMX_COLOR_FORMATTYPE mColorFormat; 62f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber size_t mWidth, mHeight; 63f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber size_t mCropLeft, mCropTop, mCropRight, mCropBottom; 64026d520295b52d136a6962a05882a696fe620725Chong Zhang size_t mBpp, mStride; 65f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber }; 66f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber 672a4a7d5af053a17586a262a1267ba993e31790f1Andreas Huber OMX_COLOR_FORMATTYPE mSrcFormat, mDstFormat; 682a4a7d5af053a17586a262a1267ba993e31790f1Andreas Huber uint8_t *mClip; 692a4a7d5af053a17586a262a1267ba993e31790f1Andreas Huber 702a4a7d5af053a17586a262a1267ba993e31790f1Andreas Huber uint8_t *initClip(); 712a4a7d5af053a17586a262a1267ba993e31790f1Andreas Huber 721472eb39f7516faa26de200d8592464c8aaac38eAndreas Huber status_t convertCbYCrY( 73f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber const BitmapParams &src, const BitmapParams &dst); 742a4a7d5af053a17586a262a1267ba993e31790f1Andreas Huber 751472eb39f7516faa26de200d8592464c8aaac38eAndreas Huber status_t convertYUV420Planar( 76f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber const BitmapParams &src, const BitmapParams &dst); 772a4a7d5af053a17586a262a1267ba993e31790f1Andreas Huber 784fdc4ce9d1a9d94801faf904ebf4f11e009fdec7Chong Zhang status_t convertYUV420PlanarUseLibYUV( 794fdc4ce9d1a9d94801faf904ebf4f11e009fdec7Chong Zhang const BitmapParams &src, const BitmapParams &dst); 804fdc4ce9d1a9d94801faf904ebf4f11e009fdec7Chong Zhang 812d2a2967ce29281816b9ddb9434b3c0084e4ce52Chong Zhang status_t convertYUV420Planar16( 822d2a2967ce29281816b9ddb9434b3c0084e4ce52Chong Zhang const BitmapParams &src, const BitmapParams &dst); 832d2a2967ce29281816b9ddb9434b3c0084e4ce52Chong Zhang 844fdc4ce9d1a9d94801faf904ebf4f11e009fdec7Chong Zhang status_t convertYUV420Planar16ToY410( 854fdc4ce9d1a9d94801faf904ebf4f11e009fdec7Chong Zhang const BitmapParams &src, const BitmapParams &dst); 864fdc4ce9d1a9d94801faf904ebf4f11e009fdec7Chong Zhang 874fdc4ce9d1a9d94801faf904ebf4f11e009fdec7Chong Zhang status_t convertYUV420Planar16ToRGB( 88d36af484a8dd3bbaf7ed7de31852c9f802243392Hangyu Kuang const BitmapParams &src, const BitmapParams &dst); 89d36af484a8dd3bbaf7ed7de31852c9f802243392Hangyu Kuang 901472eb39f7516faa26de200d8592464c8aaac38eAndreas Huber status_t convertQCOMYUV420SemiPlanar( 91f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber const BitmapParams &src, const BitmapParams &dst); 922a4a7d5af053a17586a262a1267ba993e31790f1Andreas Huber 931472eb39f7516faa26de200d8592464c8aaac38eAndreas Huber status_t convertYUV420SemiPlanar( 94f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber const BitmapParams &src, const BitmapParams &dst); 951c8ed2e906576fd8d7fa03f577bdec518cbe13d7Andreas Huber 96cb62bc3fe54222cf05824e6f98fefafee552049aAnu Sundararajan status_t convertTIYUV420PackedSemiPlanar( 97cb62bc3fe54222cf05824e6f98fefafee552049aAnu Sundararajan const BitmapParams &src, const BitmapParams &dst); 98cb62bc3fe54222cf05824e6f98fefafee552049aAnu Sundararajan 992a4a7d5af053a17586a262a1267ba993e31790f1Andreas Huber ColorConverter(const ColorConverter &); 1002a4a7d5af053a17586a262a1267ba993e31790f1Andreas Huber ColorConverter &operator=(const ColorConverter &); 1012a4a7d5af053a17586a262a1267ba993e31790f1Andreas Huber}; 1022a4a7d5af053a17586a262a1267ba993e31790f1Andreas Huber 1032a4a7d5af053a17586a262a1267ba993e31790f1Andreas Huber} // namespace android 1042a4a7d5af053a17586a262a1267ba993e31790f1Andreas Huber 1052a4a7d5af053a17586a262a1267ba993e31790f1Andreas Huber#endif // COLOR_CONVERTER_H_ 106