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