system: Linux mars.sprixweb.com 3.10.0-1160.119.1.el7.x86_64 #1 SMP Tue Jun 4 14:43:51 UTC 2024 x86_64
cmd: 

Direktori : /usr/local/src/libavif-main/apps/shared/
Upload File :
Current File : //usr/local/src/libavif-main/apps/shared/avifexif.c

// Copyright 2022 Google LLC
// SPDX-License-Identifier: BSD-2-Clause

#include "avifexif.h"
#include "avif/avif.h"

uint8_t avifImageGetExifOrientationFromIrotImir(const avifImage * image)
{
    if ((image->transformFlags & AVIF_TRANSFORM_IROT) && (image->irot.angle == 1)) {
        if (image->transformFlags & AVIF_TRANSFORM_IMIR) {
            if (image->imir.axis) {
                return 7; // 90 degrees anti-clockwise then swap left and right.
            }
            return 5; // 90 degrees anti-clockwise then swap top and bottom.
        }
        return 6; // 90 degrees anti-clockwise.
    }
    if ((image->transformFlags & AVIF_TRANSFORM_IROT) && (image->irot.angle == 2)) {
        if (image->transformFlags & AVIF_TRANSFORM_IMIR) {
            if (image->imir.axis) {
                return 4; // 180 degrees anti-clockwise then swap left and right.
            }
            return 2; // 180 degrees anti-clockwise then swap top and bottom.
        }
        return 3; // 180 degrees anti-clockwise.
    }
    if ((image->transformFlags & AVIF_TRANSFORM_IROT) && (image->irot.angle == 3)) {
        if (image->transformFlags & AVIF_TRANSFORM_IMIR) {
            if (image->imir.axis) {
                return 5; // 270 degrees anti-clockwise then swap left and right.
            }
            return 7; // 270 degrees anti-clockwise then swap top and bottom.
        }
        return 8; // 270 degrees anti-clockwise.
    }
    if (image->transformFlags & AVIF_TRANSFORM_IMIR) {
        if (image->imir.axis) {
            return 2; // Swap left and right.
        }
        return 4; // Swap top and bottom.
    }
    return 1; // Default orientation ("top-left", no-op).
}

avifResult avifSetExifOrientation(avifRWData * exif, uint8_t orientation)
{
    size_t offset;
    const avifResult result = avifGetExifOrientationOffset(exif->data, exif->size, &offset);
    if (result != AVIF_RESULT_OK) {
        return result;
    }
    if (offset < exif->size) {
        exif->data[offset] = orientation;
        return AVIF_RESULT_OK;
    }
    // No Exif orientation was found.
    if (orientation == 1) {
        // The default orientation is 1, so if the given orientation is 1 too, do nothing.
        return AVIF_RESULT_OK;
    }
    // Adding an orientation tag to an Exif payload is involved.
    return AVIF_RESULT_NOT_IMPLEMENTED;
}