aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/codec
diff options
context:
space:
mode:
authorGravatar Ben Wagner <benjaminwagner@google.com>2017-10-18 18:09:37 +0000
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-10-18 18:09:47 +0000
commit021e5c70160c9682e8d8ab6e2c36a3cb3f57604a (patch)
treed21021d44fa49985d169bd7906c47f2bbe6a27fd /src/codec
parent7c4ce9b94b9dd7983d554874f35827cc608aa46c (diff)
Revert "Add an Option for orientation on JPEG encodes"
This reverts commit 5411a60e0d7370a5d47b5049de845a06fe52e98b. Reason for revert: ASAN and Coverage failing: https://chromium-swarm.appspot.com/task?id=394978f3b7d44610 Flutter_Android failing. Original change's description: > Add an Option for orientation on JPEG encodes > > Move Origin to its own header so that SkPixmap and SkJpegEncoder need > not depend on SkCodec. > > Add libexif, which is already used by Android, and use it to write the > orientation. Write a makefile based on the Android.bp in Android, minus > warnings. (libexif has an LGPL license.) > > Add a test that verifies all the orientations work. > > Optionally enable writing the orientation (and therefore including > libexif). Chromium does not currently need it, and Android does not > expose an API that would allow using it. Disable on Windows, where we > still have build errors to fix. > > Bug: skia:7138 > Change-Id: Iaeff44c36aebe0e639666979dc00e1b7594bbeb1 > Reviewed-on: https://skia-review.googlesource.com/60721 > Commit-Queue: Leon Scroggins <scroggo@google.com> > Reviewed-by: Mike Klein <mtklein@chromium.org> > Reviewed-by: Mike Reed <reed@google.com> TBR=mtklein@chromium.org,mtklein@google.com,scroggo@google.com,reed@google.com Change-Id: I05b7ae8d1c5bbd1de1642d9ef024943500256273 No-Presubmit: true No-Tree-Checks: true No-Try: true Bug: skia:7138 Reviewed-on: https://skia-review.googlesource.com/61620 Reviewed-by: Ben Wagner <benjaminwagner@google.com> Commit-Queue: Ben Wagner <benjaminwagner@google.com>
Diffstat (limited to 'src/codec')
-rw-r--r--src/codec/SkCodec.cpp5
-rw-r--r--src/codec/SkCodecImageGenerator.cpp24
-rw-r--r--src/codec/SkJpegCodec.cpp16
-rw-r--r--src/codec/SkJpegCodec.h2
4 files changed, 23 insertions, 24 deletions
diff --git a/src/codec/SkCodec.cpp b/src/codec/SkCodec.cpp
index 59978c6fdf..c3d99f2793 100644
--- a/src/codec/SkCodec.cpp
+++ b/src/codec/SkCodec.cpp
@@ -128,7 +128,7 @@ std::unique_ptr<SkCodec> SkCodec::MakeFromData(sk_sp<SkData> data, SkPngChunkRea
SkCodec::SkCodec(int width, int height, const SkEncodedInfo& info,
XformFormat srcFormat, std::unique_ptr<SkStream> stream,
- sk_sp<SkColorSpace> colorSpace, SkEncodedOrigin origin)
+ sk_sp<SkColorSpace> colorSpace, Origin origin)
: fEncodedInfo(info)
, fSrcInfo(info.makeImageInfo(width, height, std::move(colorSpace)))
, fSrcXformFormat(srcFormat)
@@ -142,8 +142,7 @@ SkCodec::SkCodec(int width, int height, const SkEncodedInfo& info,
{}
SkCodec::SkCodec(const SkEncodedInfo& info, const SkImageInfo& imageInfo,
- XformFormat srcFormat, std::unique_ptr<SkStream> stream,
- SkEncodedOrigin origin)
+ XformFormat srcFormat, std::unique_ptr<SkStream> stream, Origin origin)
: fEncodedInfo(info)
, fSrcInfo(imageInfo)
, fSrcXformFormat(srcFormat)
diff --git a/src/codec/SkCodecImageGenerator.cpp b/src/codec/SkCodecImageGenerator.cpp
index 741c8e393d..e8d7d3038a 100644
--- a/src/codec/SkCodecImageGenerator.cpp
+++ b/src/codec/SkCodecImageGenerator.cpp
@@ -15,23 +15,23 @@
#define kSwapXY SkPixmapPriv::kSwapXY
const uint8_t gOrientationFlags[] = {
- 0, // kTopLeft_SkEncodedOrigin
- kMirrorX, // kTopRight_SkEncodedOrigin
- kMirrorX | kMirrorY, // kBottomRight_SkEncodedOrigin
- kMirrorY, // kBottomLeft_SkEncodedOrigin
- kSwapXY, // kLeftTop_SkEncodedOrigin
- kMirrorX | kSwapXY, // kRightTop_SkEncodedOrigin
- kMirrorX | kMirrorY | kSwapXY, // kRightBottom_SkEncodedOrigin
- kMirrorY | kSwapXY, // kLeftBottom_SkEncodedOrigin
+ 0, // kTopLeft_Origin
+ kMirrorX, // kTopRight_Origin
+ kMirrorX | kMirrorY, // kBottomRight_Origin
+ kMirrorY, // kBottomLeft_Origin
+ kSwapXY, // kLeftTop_Origin
+ kMirrorX | kSwapXY, // kRightTop_Origin
+ kMirrorX | kMirrorY | kSwapXY, // kRightBottom_Origin
+ kMirrorY | kSwapXY, // kLeftBottom_Origin
};
-SkPixmapPriv::OrientFlags SkPixmapPriv::OriginToOrient(SkEncodedOrigin o) {
+SkPixmapPriv::OrientFlags SkPixmapPriv::OriginToOrient(SkCodec::Origin o) {
unsigned io = static_cast<int>(o) - 1;
SkASSERT(io < SK_ARRAY_COUNT(gOrientationFlags));
return static_cast<SkPixmapPriv::OrientFlags>(gOrientationFlags[io]);
}
-static bool should_swap_width_height(SkEncodedOrigin o) {
+static bool should_swap_width_height(SkCodec::Origin o) {
return SkToBool(SkPixmapPriv::OriginToOrient(o) & kSwapXY);
}
@@ -73,12 +73,12 @@ SkData* SkCodecImageGenerator::onRefEncodedData() {
bool SkCodecImageGenerator::onGetPixels(const SkImageInfo& requestInfo, void* requestPixels,
size_t requestRowBytes, const Options& opts) {
- const auto origin = fCodec->getOrigin();
+ const SkCodec::Origin origin = fCodec->getOrigin();
const SkPixmap request(requestInfo, requestPixels, requestRowBytes);
const SkPixmap* codecMap = &request;
SkAutoPixmapStorage storage; // used if we have to post-orient the output from the codec
- if (origin != kTopLeft_SkEncodedOrigin) {
+ if (origin != SkCodec::kTopLeft_Origin) {
SkImageInfo info = requestInfo;
if (should_swap_width_height(origin)) {
info = swap_width_height(info);
diff --git a/src/codec/SkJpegCodec.cpp b/src/codec/SkJpegCodec.cpp
index 062f05bd01..be5c9f7942 100644
--- a/src/codec/SkJpegCodec.cpp
+++ b/src/codec/SkJpegCodec.cpp
@@ -45,7 +45,7 @@ static uint32_t get_endian_int(const uint8_t* data, bool littleEndian) {
const uint32_t kExifHeaderSize = 14;
const uint32_t kExifMarker = JPEG_APP0 + 1;
-static bool is_orientation_marker(jpeg_marker_struct* marker, SkEncodedOrigin* orientation) {
+static bool is_orientation_marker(jpeg_marker_struct* marker, SkCodec::Origin* orientation) {
if (kExifMarker != marker->marker || marker->data_length < kExifHeaderSize) {
return false;
}
@@ -87,8 +87,8 @@ static bool is_orientation_marker(jpeg_marker_struct* marker, SkEncodedOrigin* o
uint32_t count = get_endian_int(data + 4, littleEndian);
if (kOriginTag == tag && kOriginType == type && 1 == count) {
uint16_t val = get_endian_short(data + 8, littleEndian);
- if (0 < val && val <= kLast_SkEncodedOrigin) {
- *orientation = (SkEncodedOrigin) val;
+ if (0 < val && val <= SkCodec::kLast_Origin) {
+ *orientation = (SkCodec::Origin) val;
return true;
}
}
@@ -97,15 +97,15 @@ static bool is_orientation_marker(jpeg_marker_struct* marker, SkEncodedOrigin* o
return false;
}
-static SkEncodedOrigin get_exif_orientation(jpeg_decompress_struct* dinfo) {
- SkEncodedOrigin orientation;
+static SkCodec::Origin get_exif_orientation(jpeg_decompress_struct* dinfo) {
+ SkCodec::Origin orientation;
for (jpeg_marker_struct* marker = dinfo->marker_list; marker; marker = marker->next) {
if (is_orientation_marker(marker, &orientation)) {
return orientation;
}
}
- return kDefault_SkEncodedOrigin;
+ return SkCodec::kDefault_Origin;
}
static bool is_icc_marker(jpeg_marker_struct* marker) {
@@ -227,7 +227,7 @@ SkCodec::Result SkJpegCodec::ReadHeader(SkStream* stream, SkCodec** codecOut,
// Create image info object and the codec
SkEncodedInfo info = SkEncodedInfo::Make(color, SkEncodedInfo::kOpaque_Alpha, 8);
- SkEncodedOrigin orientation = get_exif_orientation(decoderMgr->dinfo());
+ Origin orientation = get_exif_orientation(decoderMgr->dinfo());
sk_sp<SkData> iccData = get_icc_profile(decoderMgr->dinfo());
sk_sp<SkColorSpace> colorSpace = nullptr;
if (iccData) {
@@ -284,7 +284,7 @@ std::unique_ptr<SkCodec> SkJpegCodec::MakeFromStream(std::unique_ptr<SkStream> s
SkJpegCodec::SkJpegCodec(int width, int height, const SkEncodedInfo& info,
std::unique_ptr<SkStream> stream, JpegDecoderMgr* decoderMgr,
- sk_sp<SkColorSpace> colorSpace, SkEncodedOrigin origin)
+ sk_sp<SkColorSpace> colorSpace, Origin origin)
: INHERITED(width, height, info, SkColorSpaceXform::kRGBA_8888_ColorFormat, std::move(stream),
std::move(colorSpace), origin)
, fDecoderMgr(decoderMgr)
diff --git a/src/codec/SkJpegCodec.h b/src/codec/SkJpegCodec.h
index 41814d2ead..fd8ee63d6c 100644
--- a/src/codec/SkJpegCodec.h
+++ b/src/codec/SkJpegCodec.h
@@ -107,7 +107,7 @@ private:
* takes ownership
*/
SkJpegCodec(int width, int height, const SkEncodedInfo& info, std::unique_ptr<SkStream> stream,
- JpegDecoderMgr* decoderMgr, sk_sp<SkColorSpace> colorSpace, SkEncodedOrigin origin);
+ JpegDecoderMgr* decoderMgr, sk_sp<SkColorSpace> colorSpace, Origin origin);
/*
* Checks if the conversion between the input image and the requested output