17cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde/* 233cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp * Copyright 2011 The LibYuv Project Authors. All rights reserved. 37cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde * 47cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde * Use of this source code is governed by a BSD-style license 57cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde * that can be found in the LICENSE file in the root of the source 67cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde * tree. An additional intellectual property rights grant can be found 77cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde * in the file PATENTS. All contributing project authors may 87cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde * be found in the AUTHORS file in the root of the source tree. 97cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde */ 107cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde 1133cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#ifndef INCLUDE_LIBYUV_FORMATCONVERSION_H_ // NOLINT 127cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde#define INCLUDE_LIBYUV_FORMATCONVERSION_H_ 137cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde 147cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde#include "libyuv/basic_types.h" 157cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde 1633cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#ifdef __cplusplus 177cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Bordenamespace libyuv { 1833cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkampextern "C" { 1933cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#endif 2033cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp 2133cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp// Convert Bayer RGB formats to I420. 2233cfdeb7b267ab635413797fffb046b73272f7ecHendrik DahlkampLIBYUV_API 2333cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkampint BayerBGGRToI420(const uint8* src_bayer, int src_stride_bayer, 2433cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp uint8* dst_y, int dst_stride_y, 2533cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp uint8* dst_u, int dst_stride_u, 2633cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp uint8* dst_v, int dst_stride_v, 2733cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp int width, int height); 2833cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp 2933cfdeb7b267ab635413797fffb046b73272f7ecHendrik DahlkampLIBYUV_API 3033cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkampint BayerGBRGToI420(const uint8* src_bayer, int src_stride_bayer, 3133cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp uint8* dst_y, int dst_stride_y, 3233cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp uint8* dst_u, int dst_stride_u, 3333cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp uint8* dst_v, int dst_stride_v, 3433cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp int width, int height); 3533cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp 3633cfdeb7b267ab635413797fffb046b73272f7ecHendrik DahlkampLIBYUV_API 3733cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkampint BayerGRBGToI420(const uint8* src_bayer, int src_stride_bayer, 3833cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp uint8* dst_y, int dst_stride_y, 3933cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp uint8* dst_u, int dst_stride_u, 4033cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp uint8* dst_v, int dst_stride_v, 4133cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp int width, int height); 4233cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp 4333cfdeb7b267ab635413797fffb046b73272f7ecHendrik DahlkampLIBYUV_API 4433cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkampint BayerRGGBToI420(const uint8* src_bayer, int src_stride_bayer, 4533cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp uint8* dst_y, int dst_stride_y, 4633cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp uint8* dst_u, int dst_stride_u, 4733cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp uint8* dst_v, int dst_stride_v, 4833cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp int width, int height); 4933cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp 5033cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp// Temporary API mapper. 5133cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#define BayerRGBToI420(b, bs, f, y, ys, u, us, v, vs, w, h) \ 5233cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp BayerToI420(b, bs, y, ys, u, us, v, vs, w, h, f) 5333cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp 5433cfdeb7b267ab635413797fffb046b73272f7ecHendrik DahlkampLIBYUV_API 5533cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkampint BayerToI420(const uint8* src_bayer, int src_stride_bayer, 5633cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp uint8* dst_y, int dst_stride_y, 5733cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp uint8* dst_u, int dst_stride_u, 5833cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp uint8* dst_v, int dst_stride_v, 5933cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp int width, int height, 6033cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp uint32 src_fourcc_bayer); 6133cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp 6233cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp// Convert I420 to Bayer RGB formats. 6333cfdeb7b267ab635413797fffb046b73272f7ecHendrik DahlkampLIBYUV_API 6433cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkampint I420ToBayerBGGR(const uint8* src_y, int src_stride_y, 6533cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp const uint8* src_u, int src_stride_u, 6633cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp const uint8* src_v, int src_stride_v, 6733cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp uint8* dst_frame, int dst_stride_frame, 6833cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp int width, int height); 6933cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp 7033cfdeb7b267ab635413797fffb046b73272f7ecHendrik DahlkampLIBYUV_API 7133cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkampint I420ToBayerGBRG(const uint8* src_y, int src_stride_y, 7233cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp const uint8* src_u, int src_stride_u, 7333cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp const uint8* src_v, int src_stride_v, 7433cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp uint8* dst_frame, int dst_stride_frame, 7533cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp int width, int height); 7633cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp 7733cfdeb7b267ab635413797fffb046b73272f7ecHendrik DahlkampLIBYUV_API 7833cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkampint I420ToBayerGRBG(const uint8* src_y, int src_stride_y, 7933cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp const uint8* src_u, int src_stride_u, 8033cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp const uint8* src_v, int src_stride_v, 8133cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp uint8* dst_frame, int dst_stride_frame, 8233cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp int width, int height); 8333cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp 8433cfdeb7b267ab635413797fffb046b73272f7ecHendrik DahlkampLIBYUV_API 8533cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkampint I420ToBayerRGGB(const uint8* src_y, int src_stride_y, 8633cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp const uint8* src_u, int src_stride_u, 8733cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp const uint8* src_v, int src_stride_v, 8833cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp uint8* dst_frame, int dst_stride_frame, 8933cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp int width, int height); 9033cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp 9133cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp// Temporary API mapper. 9233cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#define I420ToBayerRGB(y, ys, u, us, v, vs, b, bs, f, w, h) \ 9333cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp I420ToBayer(y, ys, u, us, v, vs, b, bs, w, h, f) 9433cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp 9533cfdeb7b267ab635413797fffb046b73272f7ecHendrik DahlkampLIBYUV_API 9633cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkampint I420ToBayer(const uint8* src_y, int src_stride_y, 9733cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp const uint8* src_u, int src_stride_u, 9833cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp const uint8* src_v, int src_stride_v, 9933cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp uint8* dst_frame, int dst_stride_frame, 10033cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp int width, int height, 10133cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp uint32 dst_fourcc_bayer); 10233cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp 10333cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp// Convert Bayer RGB formats to ARGB. 10433cfdeb7b267ab635413797fffb046b73272f7ecHendrik DahlkampLIBYUV_API 10533cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkampint BayerBGGRToARGB(const uint8* src_bayer, int src_stride_bayer, 10633cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp uint8* dst_argb, int dst_stride_argb, 10733cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp int width, int height); 10833cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp 10933cfdeb7b267ab635413797fffb046b73272f7ecHendrik DahlkampLIBYUV_API 11033cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkampint BayerGBRGToARGB(const uint8* src_bayer, int src_stride_bayer, 11133cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp uint8* dst_argb, int dst_stride_argb, 11233cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp int width, int height); 11333cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp 11433cfdeb7b267ab635413797fffb046b73272f7ecHendrik DahlkampLIBYUV_API 11533cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkampint BayerGRBGToARGB(const uint8* src_bayer, int src_stride_bayer, 11633cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp uint8* dst_argb, int dst_stride_argb, 11733cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp int width, int height); 11833cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp 11933cfdeb7b267ab635413797fffb046b73272f7ecHendrik DahlkampLIBYUV_API 12033cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkampint BayerRGGBToARGB(const uint8* src_bayer, int src_stride_bayer, 12133cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp uint8* dst_argb, int dst_stride_argb, 12233cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp int width, int height); 12333cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp 12433cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp// Temporary API mapper. 12533cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#define BayerRGBToARGB(b, bs, f, a, as, w, h) BayerToARGB(b, bs, a, as, w, h, f) 12633cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp 12733cfdeb7b267ab635413797fffb046b73272f7ecHendrik DahlkampLIBYUV_API 12833cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkampint BayerToARGB(const uint8* src_bayer, int src_stride_bayer, 12933cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp uint8* dst_argb, int dst_stride_argb, 13033cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp int width, int height, 13133cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp uint32 src_fourcc_bayer); 13233cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp 13333cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp// Converts ARGB to Bayer RGB formats. 13433cfdeb7b267ab635413797fffb046b73272f7ecHendrik DahlkampLIBYUV_API 13533cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkampint ARGBToBayerBGGR(const uint8* src_argb, int src_stride_argb, 13633cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp uint8* dst_bayer, int dst_stride_bayer, 13733cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp int width, int height); 13833cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp 13933cfdeb7b267ab635413797fffb046b73272f7ecHendrik DahlkampLIBYUV_API 14033cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkampint ARGBToBayerGBRG(const uint8* src_argb, int src_stride_argb, 14133cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp uint8* dst_bayer, int dst_stride_bayer, 14233cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp int width, int height); 14333cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp 14433cfdeb7b267ab635413797fffb046b73272f7ecHendrik DahlkampLIBYUV_API 14533cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkampint ARGBToBayerGRBG(const uint8* src_argb, int src_stride_argb, 14633cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp uint8* dst_bayer, int dst_stride_bayer, 14733cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp int width, int height); 14833cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp 14933cfdeb7b267ab635413797fffb046b73272f7ecHendrik DahlkampLIBYUV_API 15033cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkampint ARGBToBayerRGGB(const uint8* src_argb, int src_stride_argb, 15133cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp uint8* dst_bayer, int dst_stride_bayer, 15233cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp int width, int height); 15333cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp 15433cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp// Temporary API mapper. 15533cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#define ARGBToBayerRGB(a, as, b, bs, f, w, h) ARGBToBayer(b, bs, a, as, w, h, f) 1567cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde 15733cfdeb7b267ab635413797fffb046b73272f7ecHendrik DahlkampLIBYUV_API 15833cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkampint ARGBToBayer(const uint8* src_argb, int src_stride_argb, 15933cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp uint8* dst_bayer, int dst_stride_bayer, 16033cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp int width, int height, 16133cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp uint32 dst_fourcc_bayer); 1627cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde 16333cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#ifdef __cplusplus 16433cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp} // extern "C" 1657cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde} // namespace libyuv 16633cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#endif 1677cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde 16833cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#endif // INCLUDE_LIBYUV_FORMATCONVERSION_H_ NOLINT 169