133cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp/*
233cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp *  Copyright 2011 The LibYuv Project Authors. All rights reserved.
333cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp *
433cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp *  Use of this source code is governed by a BSD-style license
533cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp *  that can be found in the LICENSE file in the root of the source
633cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp *  tree. An additional intellectual property rights grant can be found
733cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp *  in the file PATENTS.  All contributing project authors may
833cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp *  be found in the AUTHORS file in the root of the source tree.
933cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp */
1033cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp
1133cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#ifndef INCLUDE_LIBYUV_CONVERT_FROM_H_  // NOLINT
1233cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#define INCLUDE_LIBYUV_CONVERT_FROM_H_
1333cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp
1433cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#include "libyuv/basic_types.h"
1533cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#include "libyuv/rotate.h"
1633cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp
1733cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#ifdef __cplusplus
1833cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkampnamespace libyuv {
1933cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkampextern "C" {
2033cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#endif
2133cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp
2233cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp// See Also convert.h for conversions from formats to I420.
2333cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp
2433cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp// I420Copy in convert to I420ToI420.
2533cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp
2633cfdeb7b267ab635413797fffb046b73272f7ecHendrik DahlkampLIBYUV_API
2733cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkampint I420ToI422(const uint8* src_y, int src_stride_y,
2833cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp               const uint8* src_u, int src_stride_u,
2933cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp               const uint8* src_v, int src_stride_v,
3033cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp               uint8* dst_y, int dst_stride_y,
3133cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp               uint8* dst_u, int dst_stride_u,
3233cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp               uint8* dst_v, int dst_stride_v,
3333cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp               int width, int height);
3433cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp
3533cfdeb7b267ab635413797fffb046b73272f7ecHendrik DahlkampLIBYUV_API
3633cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkampint I420ToI444(const uint8* src_y, int src_stride_y,
3733cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp               const uint8* src_u, int src_stride_u,
3833cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp               const uint8* src_v, int src_stride_v,
3933cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp               uint8* dst_y, int dst_stride_y,
4033cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp               uint8* dst_u, int dst_stride_u,
4133cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp               uint8* dst_v, int dst_stride_v,
4233cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp               int width, int height);
4333cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp
4433cfdeb7b267ab635413797fffb046b73272f7ecHendrik DahlkampLIBYUV_API
4533cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkampint I420ToI411(const uint8* src_y, int src_stride_y,
4633cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp               const uint8* src_u, int src_stride_u,
4733cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp               const uint8* src_v, int src_stride_v,
4833cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp               uint8* dst_y, int dst_stride_y,
4933cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp               uint8* dst_u, int dst_stride_u,
5033cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp               uint8* dst_v, int dst_stride_v,
5133cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp               int width, int height);
5233cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp
5333cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp// Copy to I400. Source can be I420, I422, I444, I400, NV12 or NV21.
5433cfdeb7b267ab635413797fffb046b73272f7ecHendrik DahlkampLIBYUV_API
5533cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkampint I400Copy(const uint8* src_y, int src_stride_y,
5633cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp             uint8* dst_y, int dst_stride_y,
5733cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp             int width, int height);
5833cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp
5933cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp// TODO(fbarchard): I420ToNV12
6033cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp// TODO(fbarchard): I420ToM420
6133cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp// TODO(fbarchard): I420ToQ420
6233cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp
6333cfdeb7b267ab635413797fffb046b73272f7ecHendrik DahlkampLIBYUV_API
6433cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkampint I420ToYUY2(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 I420ToUYVY(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 I420ToV210(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 I420ToARGB(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_argb, int dst_stride_argb,
8933cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp               int width, int height);
9033cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp
9133cfdeb7b267ab635413797fffb046b73272f7ecHendrik DahlkampLIBYUV_API
9233cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkampint I420ToBGRA(const uint8* src_y, int src_stride_y,
9333cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp               const uint8* src_u, int src_stride_u,
9433cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp               const uint8* src_v, int src_stride_v,
9533cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp               uint8* dst_argb, int dst_stride_argb,
9633cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp               int width, int height);
9733cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp
9833cfdeb7b267ab635413797fffb046b73272f7ecHendrik DahlkampLIBYUV_API
9933cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkampint I420ToABGR(const uint8* src_y, int src_stride_y,
10033cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp               const uint8* src_u, int src_stride_u,
10133cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp               const uint8* src_v, int src_stride_v,
10233cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp               uint8* dst_argb, int dst_stride_argb,
10333cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp               int width, int height);
10433cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp
10533cfdeb7b267ab635413797fffb046b73272f7ecHendrik DahlkampLIBYUV_API
10633cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkampint I420ToRGBA(const uint8* src_y, int src_stride_y,
10733cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp               const uint8* src_u, int src_stride_u,
10833cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp               const uint8* src_v, int src_stride_v,
10933cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp               uint8* dst_rgba, int dst_stride_rgba,
11033cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp               int width, int height);
11133cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp
11233cfdeb7b267ab635413797fffb046b73272f7ecHendrik DahlkampLIBYUV_API
11333cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkampint I420ToRGB24(const uint8* src_y, int src_stride_y,
11433cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp                const uint8* src_u, int src_stride_u,
11533cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp                const uint8* src_v, int src_stride_v,
11633cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp                uint8* dst_frame, int dst_stride_frame,
11733cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp                int width, int height);
11833cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp
11933cfdeb7b267ab635413797fffb046b73272f7ecHendrik DahlkampLIBYUV_API
12033cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkampint I420ToRAW(const uint8* src_y, int src_stride_y,
12133cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp              const uint8* src_u, int src_stride_u,
12233cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp              const uint8* src_v, int src_stride_v,
12333cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp              uint8* dst_frame, int dst_stride_frame,
12433cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp              int width, int height);
12533cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp
12633cfdeb7b267ab635413797fffb046b73272f7ecHendrik DahlkampLIBYUV_API
12733cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkampint I420ToRGB565(const uint8* src_y, int src_stride_y,
12833cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp                 const uint8* src_u, int src_stride_u,
12933cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp                 const uint8* src_v, int src_stride_v,
13033cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp                 uint8* dst_frame, int dst_stride_frame,
13133cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp                 int width, int height);
13233cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp
13333cfdeb7b267ab635413797fffb046b73272f7ecHendrik DahlkampLIBYUV_API
13433cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkampint I420ToARGB1555(const uint8* src_y, int src_stride_y,
13533cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp                   const uint8* src_u, int src_stride_u,
13633cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp                   const uint8* src_v, int src_stride_v,
13733cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp                   uint8* dst_frame, int dst_stride_frame,
13833cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp                   int width, int height);
13933cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp
14033cfdeb7b267ab635413797fffb046b73272f7ecHendrik DahlkampLIBYUV_API
14133cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkampint I420ToARGB4444(const uint8* src_y, int src_stride_y,
14233cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp                   const uint8* src_u, int src_stride_u,
14333cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp                   const uint8* src_v, int src_stride_v,
14433cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp                   uint8* dst_frame, int dst_stride_frame,
14533cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp                   int width, int height);
14633cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp
14733cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp// Note Bayer formats (BGGR) To I420 are in format_conversion.h.
14833cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp
14933cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp// Convert I420 to specified format.
15033cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp// "dst_sample_stride" is bytes in a row for the destination. Pass 0 if the
15133cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp//    buffer has contiguous rows. Can be negative. A multiple of 16 is optimal.
15233cfdeb7b267ab635413797fffb046b73272f7ecHendrik DahlkampLIBYUV_API
15333cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkampint ConvertFromI420(const uint8* y, int y_stride,
15433cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp                    const uint8* u, int u_stride,
15533cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp                    const uint8* v, int v_stride,
15633cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp                    uint8* dst_sample, int dst_sample_stride,
15733cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp                    int width, int height,
15833cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp                    uint32 format);
15933cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp
16033cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#ifdef __cplusplus
16133cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp}  // extern "C"
16233cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp}  // namespace libyuv
16333cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#endif
16433cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp
16533cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#endif  // INCLUDE_LIBYUV_CONVERT_FROM_H_  NOLINT
166