1ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian/* 2ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian * Copyright 2012 The LibYuv Project Authors. All rights reserved. 3ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian * 4ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian * Use of this source code is governed by a BSD-style license 5ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian * that can be found in the LICENSE file in the root of the source 6ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian * tree. An additional intellectual property rights grant can be found 7ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian * in the file PATENTS. All contributing project authors may 8ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian * be found in the AUTHORS file in the root of the source tree. 9ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian */ 10ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian 11ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#ifndef INCLUDE_LIBYUV_CONVERT_ARGB_H_ // NOLINT 12ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#define INCLUDE_LIBYUV_CONVERT_ARGB_H_ 13ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian 14ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#include "libyuv/basic_types.h" 15ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// TODO(fbarchard): Remove the following headers includes 16ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#include "libyuv/convert_from.h" 17ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#include "libyuv/planar_functions.h" 18ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#include "libyuv/rotate.h" 19ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian 20ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// TODO(fbarchard): This set of functions should exactly match convert.h 21ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// Add missing Q420. 22ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// TODO(fbarchard): Add tests. Create random content of right size and convert 23ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// with C vs Opt and or to I420 and compare. 24ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// TODO(fbarchard): Some of these functions lack parameter setting. 25ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian 26ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#ifdef __cplusplus 27ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramaniannamespace libyuv { 28ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianextern "C" { 29ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#endif 30ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian 31ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// Alias. 32ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#define ARGBToARGB ARGBCopy 33ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian 34ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// Copy ARGB to ARGB. 35ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh VenkatasubramanianLIBYUV_API 36ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianint ARGBCopy(const uint8* src_argb, int src_stride_argb, 37ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian uint8* dst_argb, int dst_stride_argb, 38ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian int width, int height); 39ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian 40ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// Convert I420 to ARGB. 41ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh VenkatasubramanianLIBYUV_API 42ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianint I420ToARGB(const uint8* src_y, int src_stride_y, 43ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian const uint8* src_u, int src_stride_u, 44ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian const uint8* src_v, int src_stride_v, 45ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian uint8* dst_argb, int dst_stride_argb, 46ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian int width, int height); 47ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian 48ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// Convert I422 to ARGB. 49ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh VenkatasubramanianLIBYUV_API 50ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianint I422ToARGB(const uint8* src_y, int src_stride_y, 51ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian const uint8* src_u, int src_stride_u, 52ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian const uint8* src_v, int src_stride_v, 53ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian uint8* dst_argb, int dst_stride_argb, 54ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian int width, int height); 55ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian 56ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// Convert I444 to ARGB. 57ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh VenkatasubramanianLIBYUV_API 58ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianint I444ToARGB(const uint8* src_y, int src_stride_y, 59ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian const uint8* src_u, int src_stride_u, 60ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian const uint8* src_v, int src_stride_v, 61ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian uint8* dst_argb, int dst_stride_argb, 62ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian int width, int height); 63ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian 64ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// Convert I411 to ARGB. 65ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh VenkatasubramanianLIBYUV_API 66ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianint I411ToARGB(const uint8* src_y, int src_stride_y, 67ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian const uint8* src_u, int src_stride_u, 68ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian const uint8* src_v, int src_stride_v, 69ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian uint8* dst_argb, int dst_stride_argb, 70ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian int width, int height); 71ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian 72ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// Convert I400 (grey) to ARGB. 73ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh VenkatasubramanianLIBYUV_API 74ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianint I400ToARGB(const uint8* src_y, int src_stride_y, 75ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian uint8* dst_argb, int dst_stride_argb, 76ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian int width, int height); 77ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian 78ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// Alias. 79ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#define YToARGB I400ToARGB_Reference 80ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian 81ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// Convert I400 to ARGB. Reverse of ARGBToI400. 82ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh VenkatasubramanianLIBYUV_API 83ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianint I400ToARGB_Reference(const uint8* src_y, int src_stride_y, 84ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian uint8* dst_argb, int dst_stride_argb, 85ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian int width, int height); 86ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian 87ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// Convert NV12 to ARGB. 88ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh VenkatasubramanianLIBYUV_API 89ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianint NV12ToARGB(const uint8* src_y, int src_stride_y, 90ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian const uint8* src_uv, int src_stride_uv, 91ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian uint8* dst_argb, int dst_stride_argb, 92ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian int width, int height); 93ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian 94ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// Convert NV21 to ARGB. 95ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh VenkatasubramanianLIBYUV_API 96ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianint NV21ToARGB(const uint8* src_y, int src_stride_y, 97ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian const uint8* src_vu, int src_stride_vu, 98ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian uint8* dst_argb, int dst_stride_argb, 99ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian int width, int height); 100ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian 101ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// Convert M420 to ARGB. 102ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh VenkatasubramanianLIBYUV_API 103ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianint M420ToARGB(const uint8* src_m420, int src_stride_m420, 104ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian uint8* dst_argb, int dst_stride_argb, 105ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian int width, int height); 106ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian 107ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// TODO(fbarchard): Convert Q420 to ARGB. 108ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// LIBYUV_API 109ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// int Q420ToARGB(const uint8* src_y, int src_stride_y, 110ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// const uint8* src_yuy2, int src_stride_yuy2, 111ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// uint8* dst_argb, int dst_stride_argb, 112ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// int width, int height); 113ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian 114ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// Convert YUY2 to ARGB. 115ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh VenkatasubramanianLIBYUV_API 116ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianint YUY2ToARGB(const uint8* src_yuy2, int src_stride_yuy2, 117ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian uint8* dst_argb, int dst_stride_argb, 118ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian int width, int height); 119ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian 120ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// Convert UYVY to ARGB. 121ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh VenkatasubramanianLIBYUV_API 122ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianint UYVYToARGB(const uint8* src_uyvy, int src_stride_uyvy, 123ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian uint8* dst_argb, int dst_stride_argb, 124ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian int width, int height); 125ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian 126ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// BGRA little endian (argb in memory) to ARGB. 127ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh VenkatasubramanianLIBYUV_API 128ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianint BGRAToARGB(const uint8* src_frame, int src_stride_frame, 129ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian uint8* dst_argb, int dst_stride_argb, 130ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian int width, int height); 131ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian 132ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// ABGR little endian (rgba in memory) to ARGB. 133ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh VenkatasubramanianLIBYUV_API 134ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianint ABGRToARGB(const uint8* src_frame, int src_stride_frame, 135ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian uint8* dst_argb, int dst_stride_argb, 136ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian int width, int height); 137ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian 138ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// RGBA little endian (abgr in memory) to ARGB. 139ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh VenkatasubramanianLIBYUV_API 140ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianint RGBAToARGB(const uint8* src_frame, int src_stride_frame, 141ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian uint8* dst_argb, int dst_stride_argb, 142ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian int width, int height); 143ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian 144ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// Deprecated function name. 145ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#define BG24ToARGB RGB24ToARGB 146ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian 147ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// RGB little endian (bgr in memory) to ARGB. 148ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh VenkatasubramanianLIBYUV_API 149ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianint RGB24ToARGB(const uint8* src_frame, int src_stride_frame, 150ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian uint8* dst_argb, int dst_stride_argb, 151ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian int width, int height); 152ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian 153ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// RGB big endian (rgb in memory) to ARGB. 154ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh VenkatasubramanianLIBYUV_API 155ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianint RAWToARGB(const uint8* src_frame, int src_stride_frame, 156ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian uint8* dst_argb, int dst_stride_argb, 157ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian int width, int height); 158ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian 159ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// RGB16 (RGBP fourcc) little endian to ARGB. 160ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh VenkatasubramanianLIBYUV_API 161ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianint RGB565ToARGB(const uint8* src_frame, int src_stride_frame, 162ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian uint8* dst_argb, int dst_stride_argb, 163ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian int width, int height); 164ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian 165ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// RGB15 (RGBO fourcc) little endian to ARGB. 166ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh VenkatasubramanianLIBYUV_API 167ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianint ARGB1555ToARGB(const uint8* src_frame, int src_stride_frame, 168ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian uint8* dst_argb, int dst_stride_argb, 169ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian int width, int height); 170ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian 171ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// RGB12 (R444 fourcc) little endian to ARGB. 172ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh VenkatasubramanianLIBYUV_API 173ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianint ARGB4444ToARGB(const uint8* src_frame, int src_stride_frame, 174ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian uint8* dst_argb, int dst_stride_argb, 175ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian int width, int height); 176ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian 177ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#ifdef HAVE_JPEG 178ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// src_width/height provided by capture 179ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// dst_width/height for clipping determine final size. 180ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh VenkatasubramanianLIBYUV_API 181ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianint MJPGToARGB(const uint8* sample, size_t sample_size, 182ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian uint8* dst_argb, int dst_stride_argb, 183ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian int src_width, int src_height, 184ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian int dst_width, int dst_height); 185ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#endif 186ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian 187ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// Note Bayer formats (BGGR) to ARGB are in format_conversion.h. 188ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian 189ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// Convert camera sample to ARGB with cropping, rotation and vertical flip. 190ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// "src_size" is needed to parse MJPG. 191ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// "dst_stride_argb" number of bytes in a row of the dst_argb plane. 192ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// Normally this would be the same as dst_width, with recommended alignment 193ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// to 16 bytes for better efficiency. 194ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// If rotation of 90 or 270 is used, stride is affected. The caller should 195ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// allocate the I420 buffer according to rotation. 196ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// "dst_stride_u" number of bytes in a row of the dst_u plane. 197ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// Normally this would be the same as (dst_width + 1) / 2, with 198ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// recommended alignment to 16 bytes for better efficiency. 199ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// If rotation of 90 or 270 is used, stride is affected. 200ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// "crop_x" and "crop_y" are starting position for cropping. 201ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// To center, crop_x = (src_width - dst_width) / 2 202ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// crop_y = (src_height - dst_height) / 2 203ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// "src_width" / "src_height" is size of src_frame in pixels. 204ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// "src_height" can be negative indicating a vertically flipped image source. 205ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// "crop_width" / "crop_height" is the size to crop the src to. 206ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// Must be less than or equal to src_width/src_height 207ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// Cropping parameters are pre-rotation. 208ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// "rotation" can be 0, 90, 180 or 270. 209ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// "format" is a fourcc. ie 'I420', 'YUY2' 210ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// Returns 0 for successful; -1 for invalid parameter. Non-zero for failure. 211ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh VenkatasubramanianLIBYUV_API 212ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianint ConvertToARGB(const uint8* src_frame, size_t src_size, 213ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian uint8* dst_argb, int dst_stride_argb, 214ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian int crop_x, int crop_y, 215ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian int src_width, int src_height, 216ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian int crop_width, int crop_height, 217ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian enum RotationMode rotation, 218ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian uint32 format); 219ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian 220ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#ifdef __cplusplus 221ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian} // extern "C" 222ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian} // namespace libyuv 223ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#endif 224ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian 225ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#endif // INCLUDE_LIBYUV_CONVERT_ARGB_H_ NOLINT 226