87d42e5d12
Tunnels through SkImageGenerator as well. The new SkCodec interface doesn't assume three 8 bit planes. New SkYUVASpec more clearly defines chroma subsampling and siting of the planes. The intent is to use this for other YUVA APIs as well, in particular SkImage factories in the future. In this change we convert to the SkYUVASpec to SkYUVASizeInfo and SkYUVAIndex[4] representation. But the intent is to use the SkYUVASpec representation throughout the pipeline once legacy APIs are removed. orientation GM is replicated to test a variety of chroma subsampling configs. Bug: skia:10632 Change-Id: I3fad35752b87cac16c51b24824331f2ae7d458d3 Reviewed-on: https://skia-review.googlesource.com/c/skia/+/309658 Commit-Queue: Brian Salomon <bsalomon@google.com> Reviewed-by: Robert Phillips <robertphillips@google.com> Reviewed-by: Leon Scroggins <scroggo@google.com>
48 lines
2.1 KiB
C
48 lines
2.1 KiB
C
/*
|
|
* Copyright 2017 Google Inc.
|
|
*
|
|
* Use of this source code is governed by a BSD-style license that can be
|
|
* found in the LICENSE file.
|
|
*/
|
|
|
|
#ifndef SkEncodedOrigin_DEFINED
|
|
#define SkEncodedOrigin_DEFINED
|
|
|
|
#include "include/core/SkMatrix.h"
|
|
|
|
// These values match the orientation www.exif.org/Exif2-2.PDF.
|
|
enum SkEncodedOrigin {
|
|
kTopLeft_SkEncodedOrigin = 1, // Default
|
|
kTopRight_SkEncodedOrigin = 2, // Reflected across y-axis
|
|
kBottomRight_SkEncodedOrigin = 3, // Rotated 180
|
|
kBottomLeft_SkEncodedOrigin = 4, // Reflected across x-axis
|
|
kLeftTop_SkEncodedOrigin = 5, // Reflected across x-axis, Rotated 90 CCW
|
|
kRightTop_SkEncodedOrigin = 6, // Rotated 90 CW
|
|
kRightBottom_SkEncodedOrigin = 7, // Reflected across x-axis, Rotated 90 CW
|
|
kLeftBottom_SkEncodedOrigin = 8, // Rotated 90 CCW
|
|
kDefault_SkEncodedOrigin = kTopLeft_SkEncodedOrigin,
|
|
kLast_SkEncodedOrigin = kLeftBottom_SkEncodedOrigin,
|
|
};
|
|
|
|
/**
|
|
* Given an encoded origin and the width and height of the source data, returns a matrix
|
|
* that transforms the source rectangle with upper left corner at [0, 0] and origin to a correctly
|
|
* oriented destination rectangle of [0, 0, w, h].
|
|
*/
|
|
static inline SkMatrix SkEncodedOriginToMatrix(SkEncodedOrigin origin, int w, int h) {
|
|
switch (origin) {
|
|
case kTopLeft_SkEncodedOrigin: return SkMatrix::I();
|
|
case kTopRight_SkEncodedOrigin: return SkMatrix::MakeAll(-1, 0, w, 0, 1, 0, 0, 0, 1);
|
|
case kBottomRight_SkEncodedOrigin: return SkMatrix::MakeAll(-1, 0, w, 0, -1, h, 0, 0, 1);
|
|
case kBottomLeft_SkEncodedOrigin: return SkMatrix::MakeAll( 1, 0, 0, 0, -1, h, 0, 0, 1);
|
|
case kLeftTop_SkEncodedOrigin: return SkMatrix::MakeAll( 0, 1, 0, 1, 0, 0, 0, 0, 1);
|
|
case kRightTop_SkEncodedOrigin: return SkMatrix::MakeAll( 0, -1, w, 1, 0, 0, 0, 0, 1);
|
|
case kRightBottom_SkEncodedOrigin: return SkMatrix::MakeAll( 0, -1, w, -1, 0, h, 0, 0, 1);
|
|
case kLeftBottom_SkEncodedOrigin: return SkMatrix::MakeAll( 0, 1, 0, -1, 0, h, 0, 0, 1);
|
|
}
|
|
SK_ABORT("Unexpected origin");
|
|
}
|
|
|
|
|
|
#endif // SkEncodedOrigin_DEFINED
|