1*4e366538SXin Li /* 2*4e366538SXin Li * Copyright 2011 The LibYuv Project Authors. All rights reserved. 3*4e366538SXin Li * 4*4e366538SXin Li * Use of this source code is governed by a BSD-style license 5*4e366538SXin Li * that can be found in the LICENSE file in the root of the source 6*4e366538SXin Li * tree. An additional intellectual property rights grant can be found 7*4e366538SXin Li * in the file PATENTS. All contributing project authors may 8*4e366538SXin Li * be found in the AUTHORS file in the root of the source tree. 9*4e366538SXin Li */ 10*4e366538SXin Li 11*4e366538SXin Li #ifndef INCLUDE_LIBYUV_CONVERT_FROM_H_ 12*4e366538SXin Li #define INCLUDE_LIBYUV_CONVERT_FROM_H_ 13*4e366538SXin Li 14*4e366538SXin Li #include "libyuv/basic_types.h" 15*4e366538SXin Li #include "libyuv/rotate.h" 16*4e366538SXin Li 17*4e366538SXin Li #ifdef __cplusplus 18*4e366538SXin Li namespace libyuv { 19*4e366538SXin Li extern "C" { 20*4e366538SXin Li #endif 21*4e366538SXin Li 22*4e366538SXin Li // See Also convert.h for conversions from formats to I420. 23*4e366538SXin Li 24*4e366538SXin Li // Convert 8 bit YUV to 10 bit. 25*4e366538SXin Li #define H420ToH010 I420ToI010 26*4e366538SXin Li LIBYUV_API 27*4e366538SXin Li int I420ToI010(const uint8_t* src_y, 28*4e366538SXin Li int src_stride_y, 29*4e366538SXin Li const uint8_t* src_u, 30*4e366538SXin Li int src_stride_u, 31*4e366538SXin Li const uint8_t* src_v, 32*4e366538SXin Li int src_stride_v, 33*4e366538SXin Li uint16_t* dst_y, 34*4e366538SXin Li int dst_stride_y, 35*4e366538SXin Li uint16_t* dst_u, 36*4e366538SXin Li int dst_stride_u, 37*4e366538SXin Li uint16_t* dst_v, 38*4e366538SXin Li int dst_stride_v, 39*4e366538SXin Li int width, 40*4e366538SXin Li int height); 41*4e366538SXin Li 42*4e366538SXin Li // Convert 8 bit YUV to 12 bit. 43*4e366538SXin Li #define H420ToH012 I420ToI012 44*4e366538SXin Li LIBYUV_API 45*4e366538SXin Li int I420ToI012(const uint8_t* src_y, 46*4e366538SXin Li int src_stride_y, 47*4e366538SXin Li const uint8_t* src_u, 48*4e366538SXin Li int src_stride_u, 49*4e366538SXin Li const uint8_t* src_v, 50*4e366538SXin Li int src_stride_v, 51*4e366538SXin Li uint16_t* dst_y, 52*4e366538SXin Li int dst_stride_y, 53*4e366538SXin Li uint16_t* dst_u, 54*4e366538SXin Li int dst_stride_u, 55*4e366538SXin Li uint16_t* dst_v, 56*4e366538SXin Li int dst_stride_v, 57*4e366538SXin Li int width, 58*4e366538SXin Li int height); 59*4e366538SXin Li 60*4e366538SXin Li LIBYUV_API 61*4e366538SXin Li int I420ToI422(const uint8_t* src_y, 62*4e366538SXin Li int src_stride_y, 63*4e366538SXin Li const uint8_t* src_u, 64*4e366538SXin Li int src_stride_u, 65*4e366538SXin Li const uint8_t* src_v, 66*4e366538SXin Li int src_stride_v, 67*4e366538SXin Li uint8_t* dst_y, 68*4e366538SXin Li int dst_stride_y, 69*4e366538SXin Li uint8_t* dst_u, 70*4e366538SXin Li int dst_stride_u, 71*4e366538SXin Li uint8_t* dst_v, 72*4e366538SXin Li int dst_stride_v, 73*4e366538SXin Li int width, 74*4e366538SXin Li int height); 75*4e366538SXin Li 76*4e366538SXin Li LIBYUV_API 77*4e366538SXin Li int I420ToI444(const uint8_t* src_y, 78*4e366538SXin Li int src_stride_y, 79*4e366538SXin Li const uint8_t* src_u, 80*4e366538SXin Li int src_stride_u, 81*4e366538SXin Li const uint8_t* src_v, 82*4e366538SXin Li int src_stride_v, 83*4e366538SXin Li uint8_t* dst_y, 84*4e366538SXin Li int dst_stride_y, 85*4e366538SXin Li uint8_t* dst_u, 86*4e366538SXin Li int dst_stride_u, 87*4e366538SXin Li uint8_t* dst_v, 88*4e366538SXin Li int dst_stride_v, 89*4e366538SXin Li int width, 90*4e366538SXin Li int height); 91*4e366538SXin Li 92*4e366538SXin Li // Copy to I400. Source can be I420, I422, I444, I400, NV12 or NV21. 93*4e366538SXin Li LIBYUV_API 94*4e366538SXin Li int I400Copy(const uint8_t* src_y, 95*4e366538SXin Li int src_stride_y, 96*4e366538SXin Li uint8_t* dst_y, 97*4e366538SXin Li int dst_stride_y, 98*4e366538SXin Li int width, 99*4e366538SXin Li int height); 100*4e366538SXin Li 101*4e366538SXin Li LIBYUV_API 102*4e366538SXin Li int I420ToNV12(const uint8_t* src_y, 103*4e366538SXin Li int src_stride_y, 104*4e366538SXin Li const uint8_t* src_u, 105*4e366538SXin Li int src_stride_u, 106*4e366538SXin Li const uint8_t* src_v, 107*4e366538SXin Li int src_stride_v, 108*4e366538SXin Li uint8_t* dst_y, 109*4e366538SXin Li int dst_stride_y, 110*4e366538SXin Li uint8_t* dst_uv, 111*4e366538SXin Li int dst_stride_uv, 112*4e366538SXin Li int width, 113*4e366538SXin Li int height); 114*4e366538SXin Li 115*4e366538SXin Li LIBYUV_API 116*4e366538SXin Li int I420ToNV21(const uint8_t* src_y, 117*4e366538SXin Li int src_stride_y, 118*4e366538SXin Li const uint8_t* src_u, 119*4e366538SXin Li int src_stride_u, 120*4e366538SXin Li const uint8_t* src_v, 121*4e366538SXin Li int src_stride_v, 122*4e366538SXin Li uint8_t* dst_y, 123*4e366538SXin Li int dst_stride_y, 124*4e366538SXin Li uint8_t* dst_vu, 125*4e366538SXin Li int dst_stride_vu, 126*4e366538SXin Li int width, 127*4e366538SXin Li int height); 128*4e366538SXin Li 129*4e366538SXin Li LIBYUV_API 130*4e366538SXin Li int I420ToYUY2(const uint8_t* src_y, 131*4e366538SXin Li int src_stride_y, 132*4e366538SXin Li const uint8_t* src_u, 133*4e366538SXin Li int src_stride_u, 134*4e366538SXin Li const uint8_t* src_v, 135*4e366538SXin Li int src_stride_v, 136*4e366538SXin Li uint8_t* dst_yuy2, 137*4e366538SXin Li int dst_stride_yuy2, 138*4e366538SXin Li int width, 139*4e366538SXin Li int height); 140*4e366538SXin Li 141*4e366538SXin Li LIBYUV_API 142*4e366538SXin Li int I420ToUYVY(const uint8_t* src_y, 143*4e366538SXin Li int src_stride_y, 144*4e366538SXin Li const uint8_t* src_u, 145*4e366538SXin Li int src_stride_u, 146*4e366538SXin Li const uint8_t* src_v, 147*4e366538SXin Li int src_stride_v, 148*4e366538SXin Li uint8_t* dst_uyvy, 149*4e366538SXin Li int dst_stride_uyvy, 150*4e366538SXin Li int width, 151*4e366538SXin Li int height); 152*4e366538SXin Li 153*4e366538SXin Li // The following are from convert_argb.h 154*4e366538SXin Li // DEPRECATED: The prototypes will be removed in future. Use convert_argb.h 155*4e366538SXin Li 156*4e366538SXin Li // Convert I420 to ARGB. 157*4e366538SXin Li LIBYUV_API 158*4e366538SXin Li int I420ToARGB(const uint8_t* src_y, 159*4e366538SXin Li int src_stride_y, 160*4e366538SXin Li const uint8_t* src_u, 161*4e366538SXin Li int src_stride_u, 162*4e366538SXin Li const uint8_t* src_v, 163*4e366538SXin Li int src_stride_v, 164*4e366538SXin Li uint8_t* dst_argb, 165*4e366538SXin Li int dst_stride_argb, 166*4e366538SXin Li int width, 167*4e366538SXin Li int height); 168*4e366538SXin Li 169*4e366538SXin Li // Convert I420 to ABGR. 170*4e366538SXin Li LIBYUV_API 171*4e366538SXin Li int I420ToABGR(const uint8_t* src_y, 172*4e366538SXin Li int src_stride_y, 173*4e366538SXin Li const uint8_t* src_u, 174*4e366538SXin Li int src_stride_u, 175*4e366538SXin Li const uint8_t* src_v, 176*4e366538SXin Li int src_stride_v, 177*4e366538SXin Li uint8_t* dst_abgr, 178*4e366538SXin Li int dst_stride_abgr, 179*4e366538SXin Li int width, 180*4e366538SXin Li int height); 181*4e366538SXin Li 182*4e366538SXin Li // Convert I420 to specified format. 183*4e366538SXin Li // "dst_sample_stride" is bytes in a row for the destination. Pass 0 if the 184*4e366538SXin Li // buffer has contiguous rows. Can be negative. A multiple of 16 is optimal. 185*4e366538SXin Li LIBYUV_API 186*4e366538SXin Li int ConvertFromI420(const uint8_t* y, 187*4e366538SXin Li int y_stride, 188*4e366538SXin Li const uint8_t* u, 189*4e366538SXin Li int u_stride, 190*4e366538SXin Li const uint8_t* v, 191*4e366538SXin Li int v_stride, 192*4e366538SXin Li uint8_t* dst_sample, 193*4e366538SXin Li int dst_sample_stride, 194*4e366538SXin Li int width, 195*4e366538SXin Li int height, 196*4e366538SXin Li uint32_t fourcc); 197*4e366538SXin Li 198*4e366538SXin Li #ifdef __cplusplus 199*4e366538SXin Li } // extern "C" 200*4e366538SXin Li } // namespace libyuv 201*4e366538SXin Li #endif 202*4e366538SXin Li 203*4e366538SXin Li #endif // INCLUDE_LIBYUV_CONVERT_FROM_H_ 204