blob: ed992325dd4eb1623e02fbabf28d9dc045021714 [file] [log] [blame]
// Copyright 2020 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.
#ifndef MEDIA_CAPTURE_VIDEO_MAC_TEST_PIXEL_BUFFER_TEST_UTILS_MAC_H_
#define MEDIA_CAPTURE_VIDEO_MAC_TEST_PIXEL_BUFFER_TEST_UTILS_MAC_H_
#include <memory>
#include <tuple>
#include <vector>
#import <CoreVideo/CoreVideo.h>
#import <IOSurface/IOSurface.h>
#include "base/mac/scoped_cftyperef.h"
namespace media {
struct ByteArrayPixelBuffer {
ByteArrayPixelBuffer();
~ByteArrayPixelBuffer();
std::vector<uint8_t> byte_array;
base::ScopedCFTypeRef<CVPixelBufferRef> pixel_buffer;
};
// All pixels of the resulting buffer have the specified RGB. Alpha is 255.
std::vector<uint8_t> CreateArgbBufferFromSingleRgbColor(int width,
int height,
uint8_t r,
uint8_t g,
uint8_t b);
// True if the RGB color is closer to white (255,255,255) than black (0,0,0).
bool IsArgbPixelWhite(const std::vector<uint8_t>& argb_buffer, size_t i);
// True if all pixels are the specified RGB color, within some margin of error.
bool ArgbBufferIsSingleColor(const std::vector<uint8_t>& argb_buffer,
uint8_t r,
uint8_t g,
uint8_t b);
// Creates a checker pattern with tiles being white (255,255,255) or dark gray
// (100,100,100). Alpha is 255. The top-left corner is white.
std::vector<uint8_t> CreateArgbCheckerPatternBuffer(int width,
int height,
int num_tiles_across);
// Traverse the top and left border pixels, counting the number of tiles if this
// is a checker pattern. (Each pixel is characterized as white or non-white and
// this function counts the number of transitions between these colors.)
std::tuple<int, int> GetCheckerPatternNumTilesAccross(
const std::vector<uint8_t>& argb_buffer,
int width,
int height);
// Creates a CVPixelBuffer that is backed by an in-memory byte array.
std::unique_ptr<ByteArrayPixelBuffer> CreateYuvsPixelBufferFromArgbBuffer(
int width,
int height,
const std::vector<uint8_t>& argb_buffer);
std::unique_ptr<ByteArrayPixelBuffer> CreateYuvsPixelBufferFromSingleRgbColor(
int width,
int height,
uint8_t r,
uint8_t g,
uint8_t b);
// YUVS IOSurface -> ARGB byte array.
std::vector<uint8_t> CreateArgbBufferFromYuvsIOSurface(IOSurfaceRef io_surface);
// True if all pixels of the YUVS IOSurface are the specified RGB color, within
// some margin of error.
bool YuvsIOSurfaceIsSingleColor(IOSurfaceRef io_surface,
uint8_t r,
uint8_t g,
uint8_t b);
// True if all pixels of the pixel buffer are the specified RGB color, within
// some margin of error.
bool PixelBufferIsSingleColor(CVPixelBufferRef pixel_buffer,
uint8_t r,
uint8_t g,
uint8_t b);
} // namespace media
#endif // MEDIA_CAPTURE_VIDEO_MAC_TEST_PIXEL_BUFFER_TEST_UTILS_MAC_H_