141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org/* 241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org * Copyright 2012 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_CONVERT_ARGB_H_ // NOLINT 1241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org#define INCLUDE_LIBYUV_CONVERT_ARGB_H_ 1341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 1441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org#include "libyuv/basic_types.h" 1541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org// TODO(fbarchard): Remove the following headers includes 1641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org#include "libyuv/convert_from.h" 1741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org#include "libyuv/planar_functions.h" 1841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org#include "libyuv/rotate.h" 1941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 2041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org// TODO(fbarchard): This set of functions should exactly match convert.h 2141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org// Add missing Q420. 2241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org// TODO(fbarchard): Add tests. Create random content of right size and convert 2341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org// with C vs Opt and or to I420 and compare. 2441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org// TODO(fbarchard): Some of these functions lack parameter setting. 2541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 2641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org#ifdef __cplusplus 2741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgnamespace libyuv { 2841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgextern "C" { 2941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org#endif 3041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 3141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org// Alias. 3241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org#define ARGBToARGB ARGBCopy 3341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 3441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org// Copy ARGB to ARGB. 3541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgLIBYUV_API 3641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgint ARGBCopy(const uint8* src_argb, int src_stride_argb, 3741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org uint8* dst_argb, int dst_stride_argb, 3841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org int width, int height); 3941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 4041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org// Convert I420 to ARGB. 4141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgLIBYUV_API 4241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgint I420ToARGB(const uint8* src_y, int src_stride_y, 4341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org const uint8* src_u, int src_stride_u, 4441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org const uint8* src_v, int src_stride_v, 4541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org uint8* dst_argb, int dst_stride_argb, 4641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org int width, int height); 4741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 4841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org// Convert I422 to ARGB. 4941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgLIBYUV_API 5041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgint I422ToARGB(const uint8* src_y, int src_stride_y, 5141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org const uint8* src_u, int src_stride_u, 5241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org const uint8* src_v, int src_stride_v, 5341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org uint8* dst_argb, int dst_stride_argb, 5441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org int width, int height); 5541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 5641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org// Convert I444 to ARGB. 5741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgLIBYUV_API 5841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgint I444ToARGB(const uint8* src_y, int src_stride_y, 5941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org const uint8* src_u, int src_stride_u, 6041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org const uint8* src_v, int src_stride_v, 6141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org uint8* dst_argb, int dst_stride_argb, 6241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org int width, int height); 6341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 6441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org// Convert I411 to ARGB. 6541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgLIBYUV_API 6641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgint I411ToARGB(const uint8* src_y, int src_stride_y, 6741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org const uint8* src_u, int src_stride_u, 6841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org const uint8* src_v, int src_stride_v, 6941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org uint8* dst_argb, int dst_stride_argb, 7041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org int width, int height); 7141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 7241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org// Convert I400 (grey) to ARGB. 7341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgLIBYUV_API 7441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgint I400ToARGB(const uint8* src_y, int src_stride_y, 7541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org uint8* dst_argb, int dst_stride_argb, 7641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org int width, int height); 7741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 7841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org// Alias. 7941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org#define YToARGB I400ToARGB_Reference 8041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 8141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org// Convert I400 to ARGB. Reverse of ARGBToI400. 8241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgLIBYUV_API 8341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgint I400ToARGB_Reference(const uint8* src_y, int src_stride_y, 8441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org uint8* dst_argb, int dst_stride_argb, 8541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org int width, int height); 8641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 8741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org// Convert NV12 to ARGB. 8841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgLIBYUV_API 8941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgint NV12ToARGB(const uint8* src_y, int src_stride_y, 9041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org const uint8* src_uv, int src_stride_uv, 9141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org uint8* dst_argb, int dst_stride_argb, 9241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org int width, int height); 9341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 9441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org// Convert NV21 to ARGB. 9541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgLIBYUV_API 9641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgint NV21ToARGB(const uint8* src_y, int src_stride_y, 9741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org const uint8* src_vu, int src_stride_vu, 9841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org uint8* dst_argb, int dst_stride_argb, 9941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org int width, int height); 10041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 10141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org// Convert M420 to ARGB. 10241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgLIBYUV_API 10341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgint M420ToARGB(const uint8* src_m420, int src_stride_m420, 10441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org uint8* dst_argb, int dst_stride_argb, 10541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org int width, int height); 10641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 10741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org// TODO(fbarchard): Convert Q420 to ARGB. 10841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org// LIBYUV_API 10941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org// int Q420ToARGB(const uint8* src_y, int src_stride_y, 11041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org// const uint8* src_yuy2, int src_stride_yuy2, 11141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org// uint8* dst_argb, int dst_stride_argb, 11241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org// int width, int height); 11341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 11441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org// Convert YUY2 to ARGB. 11541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgLIBYUV_API 11641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgint YUY2ToARGB(const uint8* src_yuy2, int src_stride_yuy2, 11741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org uint8* dst_argb, int dst_stride_argb, 11841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org int width, int height); 11941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 12041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org// Convert UYVY to ARGB. 12141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgLIBYUV_API 12241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgint UYVYToARGB(const uint8* src_uyvy, int src_stride_uyvy, 12341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org uint8* dst_argb, int dst_stride_argb, 12441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org int width, int height); 12541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 12641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org// BGRA little endian (argb in memory) to ARGB. 12741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgLIBYUV_API 12841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgint BGRAToARGB(const uint8* src_frame, int src_stride_frame, 12941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org uint8* dst_argb, int dst_stride_argb, 13041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org int width, int height); 13141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 13241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org// ABGR little endian (rgba in memory) to ARGB. 13341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgLIBYUV_API 13441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgint ABGRToARGB(const uint8* src_frame, int src_stride_frame, 13541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org uint8* dst_argb, int dst_stride_argb, 13641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org int width, int height); 13741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 13841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org// RGBA little endian (abgr in memory) to ARGB. 13941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgLIBYUV_API 14041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgint RGBAToARGB(const uint8* src_frame, int src_stride_frame, 14141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org uint8* dst_argb, int dst_stride_argb, 14241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org int width, int height); 14341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 14441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org// Deprecated function name. 14541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org#define BG24ToARGB RGB24ToARGB 14641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 14741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org// RGB little endian (bgr in memory) to ARGB. 14841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgLIBYUV_API 14941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgint RGB24ToARGB(const uint8* src_frame, int src_stride_frame, 15041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org uint8* dst_argb, int dst_stride_argb, 15141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org int width, int height); 15241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 15341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org// RGB big endian (rgb in memory) to ARGB. 15441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgLIBYUV_API 15541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgint RAWToARGB(const uint8* src_frame, int src_stride_frame, 15641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org uint8* dst_argb, int dst_stride_argb, 15741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org int width, int height); 15841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 15941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org// RGB16 (RGBP fourcc) little endian to ARGB. 16041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgLIBYUV_API 16141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgint RGB565ToARGB(const uint8* src_frame, int src_stride_frame, 16241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org uint8* dst_argb, int dst_stride_argb, 16341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org int width, int height); 16441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 16541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org// RGB15 (RGBO fourcc) little endian to ARGB. 16641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgLIBYUV_API 16741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgint ARGB1555ToARGB(const uint8* src_frame, int src_stride_frame, 16841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org uint8* dst_argb, int dst_stride_argb, 16941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org int width, int height); 17041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 17141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org// RGB12 (R444 fourcc) little endian to ARGB. 17241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgLIBYUV_API 17341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgint ARGB4444ToARGB(const uint8* src_frame, int src_stride_frame, 17441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org uint8* dst_argb, int dst_stride_argb, 17541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org int width, int height); 17641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 17741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org#ifdef HAVE_JPEG 17841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org// src_width/height provided by capture 17941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org// dst_width/height for clipping determine final size. 18041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgLIBYUV_API 18141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgint MJPGToARGB(const uint8* sample, size_t sample_size, 18241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org uint8* dst_argb, int dst_stride_argb, 18341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org int src_width, int src_height, 18441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org int dst_width, int dst_height); 18541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org#endif 18641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 18741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org// Note Bayer formats (BGGR) to ARGB are in format_conversion.h. 18841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 18941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org// Convert camera sample to ARGB with cropping, rotation and vertical flip. 19041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org// "src_size" is needed to parse MJPG. 19141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org// "dst_stride_argb" number of bytes in a row of the dst_argb plane. 19241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org// Normally this would be the same as dst_width, with recommended alignment 19341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org// to 16 bytes for better efficiency. 19441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org// If rotation of 90 or 270 is used, stride is affected. The caller should 19541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org// allocate the I420 buffer according to rotation. 19641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org// "dst_stride_u" number of bytes in a row of the dst_u plane. 19741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org// Normally this would be the same as (dst_width + 1) / 2, with 19841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org// recommended alignment to 16 bytes for better efficiency. 19941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org// If rotation of 90 or 270 is used, stride is affected. 20041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org// "crop_x" and "crop_y" are starting position for cropping. 20141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org// To center, crop_x = (src_width - dst_width) / 2 20241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org// crop_y = (src_height - dst_height) / 2 20341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org// "src_width" / "src_height" is size of src_frame in pixels. 20441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org// "src_height" can be negative indicating a vertically flipped image source. 20541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org// "crop_width" / "crop_height" is the size to crop the src to. 20641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org// Must be less than or equal to src_width/src_height 20741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org// Cropping parameters are pre-rotation. 20841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org// "rotation" can be 0, 90, 180 or 270. 20941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org// "format" is a fourcc. ie 'I420', 'YUY2' 21041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org// Returns 0 for successful; -1 for invalid parameter. Non-zero for failure. 21141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgLIBYUV_API 21241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgint ConvertToARGB(const uint8* src_frame, size_t src_size, 21341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org uint8* dst_argb, int dst_stride_argb, 21441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org int crop_x, int crop_y, 21541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org int src_width, int src_height, 21641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org int crop_width, int crop_height, 21741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org enum RotationMode rotation, 21841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org uint32 format); 21941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 22041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org#ifdef __cplusplus 22141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org} // extern "C" 22241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org} // namespace libyuv 22341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org#endif 22441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 22541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org#endif // INCLUDE_LIBYUV_CONVERT_ARGB_H_ NOLINT 226