diff options
author | Leon Scroggins III <scroggo@google.com> | 2017-10-18 11:43:29 -0400 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2017-10-18 17:38:15 +0000 |
commit | 5411a60e0d7370a5d47b5049de845a06fe52e98b (patch) | |
tree | 8995da6236e7f37419a4d3075c35bbdc36049672 /src/codec/SkCodecImageGenerator.cpp | |
parent | 1d014105ac8e5968b6d260745c807ab45dfee956 (diff) |
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>
Diffstat (limited to 'src/codec/SkCodecImageGenerator.cpp')
-rw-r--r-- | src/codec/SkCodecImageGenerator.cpp | 24 |
1 files changed, 12 insertions, 12 deletions
diff --git a/src/codec/SkCodecImageGenerator.cpp b/src/codec/SkCodecImageGenerator.cpp index e8d7d3038a..741c8e393d 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_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 + 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 }; -SkPixmapPriv::OrientFlags SkPixmapPriv::OriginToOrient(SkCodec::Origin o) { +SkPixmapPriv::OrientFlags SkPixmapPriv::OriginToOrient(SkEncodedOrigin 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(SkCodec::Origin o) { +static bool should_swap_width_height(SkEncodedOrigin 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 SkCodec::Origin origin = fCodec->getOrigin(); + const auto 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 != SkCodec::kTopLeft_Origin) { + if (origin != kTopLeft_SkEncodedOrigin) { SkImageInfo info = requestInfo; if (should_swap_width_height(origin)) { info = swap_width_height(info); |