141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org/*
241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org *  Copyright 2011 The LibYuv Project Authors. All rights reserved.
341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org *
441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org *  Use of this source code is governed by a BSD-style license
541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org *  that can be found in the LICENSE file in the root of the source
641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org *  tree. An additional intellectual property rights grant can be found
741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org *  in the file PATENTS. All contributing project authors may
841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org *  be found in the AUTHORS file in the root of the source tree.
941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org */
1041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org
1141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org#ifndef INCLUDE_LIBYUV_FORMATCONVERSION_H_  // NOLINT
1241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org#define INCLUDE_LIBYUV_FORMATCONVERSION_H_
1341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org
1441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org#include "libyuv/basic_types.h"
1541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org
1641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org#ifdef __cplusplus
1741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgnamespace libyuv {
1841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgextern "C" {
1941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org#endif
2041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org
2141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org// Convert Bayer RGB formats to I420.
2241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgLIBYUV_API
2341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgint BayerBGGRToI420(const uint8* src_bayer, int src_stride_bayer,
2441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org                    uint8* dst_y, int dst_stride_y,
2541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org                    uint8* dst_u, int dst_stride_u,
2641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org                    uint8* dst_v, int dst_stride_v,
2741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org                    int width, int height);
2841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org
2941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgLIBYUV_API
3041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgint BayerGBRGToI420(const uint8* src_bayer, int src_stride_bayer,
3141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org                    uint8* dst_y, int dst_stride_y,
3241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org                    uint8* dst_u, int dst_stride_u,
3341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org                    uint8* dst_v, int dst_stride_v,
3441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org                    int width, int height);
3541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org
3641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgLIBYUV_API
3741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgint BayerGRBGToI420(const uint8* src_bayer, int src_stride_bayer,
3841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org                    uint8* dst_y, int dst_stride_y,
3941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org                    uint8* dst_u, int dst_stride_u,
4041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org                    uint8* dst_v, int dst_stride_v,
4141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org                    int width, int height);
4241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org
4341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgLIBYUV_API
4441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgint BayerRGGBToI420(const uint8* src_bayer, int src_stride_bayer,
4541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org                    uint8* dst_y, int dst_stride_y,
4641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org                    uint8* dst_u, int dst_stride_u,
4741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org                    uint8* dst_v, int dst_stride_v,
4841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org                    int width, int height);
4941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org
5041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org// Temporary API mapper.
5141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org#define BayerRGBToI420(b, bs, f, y, ys, u, us, v, vs, w, h) \
5241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org    BayerToI420(b, bs, y, ys, u, us, v, vs, w, h, f)
5341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org
5441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgLIBYUV_API
5541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgint BayerToI420(const uint8* src_bayer, int src_stride_bayer,
5641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org                uint8* dst_y, int dst_stride_y,
5741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org                uint8* dst_u, int dst_stride_u,
5841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org                uint8* dst_v, int dst_stride_v,
5941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org                int width, int height,
6041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org                uint32 src_fourcc_bayer);
6141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org
6241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org// Convert I420 to Bayer RGB formats.
6341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgLIBYUV_API
6441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgint I420ToBayerBGGR(const uint8* src_y, int src_stride_y,
6541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org                    const uint8* src_u, int src_stride_u,
6641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org                    const uint8* src_v, int src_stride_v,
6741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org                    uint8* dst_frame, int dst_stride_frame,
6841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org                    int width, int height);
6941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org
7041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgLIBYUV_API
7141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgint I420ToBayerGBRG(const uint8* src_y, int src_stride_y,
7241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org                    const uint8* src_u, int src_stride_u,
7341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org                    const uint8* src_v, int src_stride_v,
7441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org                    uint8* dst_frame, int dst_stride_frame,
7541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org                    int width, int height);
7641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org
7741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgLIBYUV_API
7841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgint I420ToBayerGRBG(const uint8* src_y, int src_stride_y,
7941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org                    const uint8* src_u, int src_stride_u,
8041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org                    const uint8* src_v, int src_stride_v,
8141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org                    uint8* dst_frame, int dst_stride_frame,
8241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org                    int width, int height);
8341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org
8441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgLIBYUV_API
8541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgint I420ToBayerRGGB(const uint8* src_y, int src_stride_y,
8641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org                    const uint8* src_u, int src_stride_u,
8741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org                    const uint8* src_v, int src_stride_v,
8841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org                    uint8* dst_frame, int dst_stride_frame,
8941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org                    int width, int height);
9041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org
9141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org// Temporary API mapper.
9241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org#define I420ToBayerRGB(y, ys, u, us, v, vs, b, bs, f, w, h) \
9341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org    I420ToBayer(y, ys, u, us, v, vs, b, bs, w, h, f)
9441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org
9541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgLIBYUV_API
9641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgint I420ToBayer(const uint8* src_y, int src_stride_y,
9741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org                const uint8* src_u, int src_stride_u,
9841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org                const uint8* src_v, int src_stride_v,
9941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org                uint8* dst_frame, int dst_stride_frame,
10041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org                int width, int height,
10141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org                uint32 dst_fourcc_bayer);
10241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org
10341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org// Convert Bayer RGB formats to ARGB.
10441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgLIBYUV_API
10541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgint BayerBGGRToARGB(const uint8* src_bayer, int src_stride_bayer,
10641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org                    uint8* dst_argb, int dst_stride_argb,
10741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org                    int width, int height);
10841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org
10941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgLIBYUV_API
11041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgint BayerGBRGToARGB(const uint8* src_bayer, int src_stride_bayer,
11141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org                    uint8* dst_argb, int dst_stride_argb,
11241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org                    int width, int height);
11341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org
11441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgLIBYUV_API
11541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgint BayerGRBGToARGB(const uint8* src_bayer, int src_stride_bayer,
11641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org                    uint8* dst_argb, int dst_stride_argb,
11741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org                    int width, int height);
11841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org
11941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgLIBYUV_API
12041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgint BayerRGGBToARGB(const uint8* src_bayer, int src_stride_bayer,
12141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org                    uint8* dst_argb, int dst_stride_argb,
12241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org                    int width, int height);
12341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org
12441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org// Temporary API mapper.
12541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org#define BayerRGBToARGB(b, bs, f, a, as, w, h) BayerToARGB(b, bs, a, as, w, h, f)
12641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org
12741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgLIBYUV_API
12841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgint BayerToARGB(const uint8* src_bayer, int src_stride_bayer,
12941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org                uint8* dst_argb, int dst_stride_argb,
13041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org                int width, int height,
13141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org                uint32 src_fourcc_bayer);
13241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org
13341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org// Converts ARGB to Bayer RGB formats.
13441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgLIBYUV_API
13541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgint ARGBToBayerBGGR(const uint8* src_argb, int src_stride_argb,
13641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org                    uint8* dst_bayer, int dst_stride_bayer,
13741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org                    int width, int height);
13841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org
13941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgLIBYUV_API
14041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgint ARGBToBayerGBRG(const uint8* src_argb, int src_stride_argb,
14141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org                    uint8* dst_bayer, int dst_stride_bayer,
14241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org                    int width, int height);
14341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org
14441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgLIBYUV_API
14541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgint ARGBToBayerGRBG(const uint8* src_argb, int src_stride_argb,
14641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org                    uint8* dst_bayer, int dst_stride_bayer,
14741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org                    int width, int height);
14841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org
14941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgLIBYUV_API
15041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgint ARGBToBayerRGGB(const uint8* src_argb, int src_stride_argb,
15141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org                    uint8* dst_bayer, int dst_stride_bayer,
15241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org                    int width, int height);
15341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org
15441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org// Temporary API mapper.
15541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org#define ARGBToBayerRGB(a, as, b, bs, f, w, h) ARGBToBayer(b, bs, a, as, w, h, f)
15641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org
15741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgLIBYUV_API
15841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgint ARGBToBayer(const uint8* src_argb, int src_stride_argb,
15941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org                uint8* dst_bayer, int dst_stride_bayer,
16041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org                int width, int height,
16141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org                uint32 dst_fourcc_bayer);
16241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org
16341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org#ifdef __cplusplus
16441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org}  // extern "C"
16541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org}  // namespace libyuv
16641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org#endif
16741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org
16841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org#endif  // INCLUDE_LIBYUV_FORMATCONVERSION_H_  NOLINT
169