Files
tubestation/gfx/ycbcr/yuv_convert.h
Chun-Min Chang 853f69a468 Bug 1907121 - Modify yuv_convert APIs to return libyuv execution results r=gfx-reviewers,nical
Previously, the yuv_convert APIs internally asserted the success of the
underlying libyuv API calls. This patch modifies the yuv_convert APIs to
return the results of these calls instead of silently asserting them.
While the assertions are temporarily removed, they will be reintroduced
in appropriate locations in subsequent patches.

Differential Revision: https://phabricator.services.mozilla.com/D216186
2024-07-18 21:02:31 +00:00

138 lines
4.6 KiB
C++

// Copyright (c) 2010 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// clang-format off
#ifndef MEDIA_BASE_YUV_CONVERT_H_
#define MEDIA_BASE_YUV_CONVERT_H_
#include "ErrorList.h"
#include "chromium_types.h"
#include "mozilla/gfx/Types.h"
namespace mozilla {
namespace gfx {
// Type of YUV surface.
// The value of these enums matter as they are used to shift vertical indices.
enum YUVType {
YV12 = 0, // YV12 is half width and half height chroma channels.
YV16 = 1, // YV16 is half width and full height chroma channels.
YV24 = 2, // YV24 is full width and full height chroma channels.
Y8 = 3 // Y8 is monochrome: no chroma channels.
};
// Mirror means flip the image horizontally, as in looking in a mirror.
// Rotate happens after mirroring.
enum Rotate {
ROTATE_0, // Rotation off.
ROTATE_90, // Rotate clockwise.
ROTATE_180, // Rotate upside down.
ROTATE_270, // Rotate counter clockwise.
MIRROR_ROTATE_0, // Mirror horizontally.
MIRROR_ROTATE_90, // Mirror then Rotate clockwise.
MIRROR_ROTATE_180, // Mirror vertically.
MIRROR_ROTATE_270 // Transpose.
};
// Filter affects how scaling looks.
enum ScaleFilter {
FILTER_NONE = 0, // No filter (point sampled).
FILTER_BILINEAR_H = 1, // Bilinear horizontal filter.
FILTER_BILINEAR_V = 2, // Bilinear vertical filter.
FILTER_BILINEAR = 3 // Bilinear filter.
};
nsresult ToNSResult(int aLibyuvResult);
enum RGB32Type {
ARGB = 0,
ABGR = 1
};
// Convert a frame of YUV to 32 bit ARGB or ABGR.
// Pass in YV16/YV12 depending on source format
nsresult
ConvertYCbCrToRGB32(const uint8_t* yplane,
const uint8_t* uplane,
const uint8_t* vplane,
uint8_t* rgbframe,
int pic_x,
int pic_y,
int pic_width,
int pic_height,
int ystride,
int uvstride,
int rgbstride,
YUVType yuv_type,
YUVColorSpace yuv_color_space,
ColorRange color_range,
RGB32Type rgb32_type);
nsresult
ConvertYCbCrToRGB32_deprecated(const uint8_t* yplane,
const uint8_t* uplane,
const uint8_t* vplane,
uint8_t* rgbframe,
int pic_x,
int pic_y,
int pic_width,
int pic_height,
int ystride,
int uvstride,
int rgbstride,
YUVType yuv_type,
RGB32Type rgb32_type);
// Scale a frame of YUV to 32 bit ARGB.
// Supports rotation and mirroring.
nsresult
ScaleYCbCrToRGB32(const uint8_t* yplane,
const uint8_t* uplane,
const uint8_t* vplane,
uint8_t* rgbframe,
int source_width,
int source_height,
int width,
int height,
int ystride,
int uvstride,
int rgbstride,
YUVType yuv_type,
YUVColorSpace yuv_color_space,
ScaleFilter filter);
nsresult
ScaleYCbCrToRGB32_deprecated(const uint8_t* yplane,
const uint8_t* uplane,
const uint8_t* vplane,
uint8_t* rgbframe,
int source_width,
int source_height,
int width,
int height,
int ystride,
int uvstride,
int rgbstride,
YUVType yuv_type,
Rotate view_rotate,
ScaleFilter filter);
nsresult
ConvertI420AlphaToARGB32(const uint8_t* yplane,
const uint8_t* uplane,
const uint8_t* vplane,
const uint8_t* aplane,
uint8_t* argbframe,
int pic_width,
int pic_height,
int yastride,
int uvstride,
int argbstride);
} // namespace gfx
} // namespace mozilla
#endif // MEDIA_BASE_YUV_CONVERT_H_