diff options
author | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2024-04-18 22:13:46 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2024-04-18 22:13:46 +0000 |
commit | 30c00556ad8a5c6b6719589948bfda4e9f324b8d (patch) | |
tree | 7aa355fd0b89ec0b2611e17ee84a14c6fa449e22 /source/scale_rgb.cc | |
parent | 8e521e2ea589b4cafb788330f83037a0413f200a (diff) | |
parent | f635a4c50514783b67549770dee0c53c9fa0c773 (diff) | |
download | libyuv-30c00556ad8a5c6b6719589948bfda4e9f324b8d.tar.gz |
Merge "Snap for 11735041 from 488a2af021e3e7473f083a9435b1472c0d411f3d to androidx-core-animation-release" into androidx-core-animation-releaseandroidx-core-animation-release
Diffstat (limited to 'source/scale_rgb.cc')
-rw-r--r-- | source/scale_rgb.cc | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/source/scale_rgb.cc b/source/scale_rgb.cc new file mode 100644 index 00000000..8db59b56 --- /dev/null +++ b/source/scale_rgb.cc @@ -0,0 +1,66 @@ +/* + * Copyright 2022 The LibYuv Project Authors. All rights reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +#include "libyuv/scale.h" /* For FilterMode */ + +#include <assert.h> +#include <string.h> + +#include "libyuv/convert_argb.h" +#include "libyuv/convert_from_argb.h" +#include "libyuv/row.h" +#include "libyuv/scale_argb.h" +#include "libyuv/scale_rgb.h" + +#ifdef __cplusplus +namespace libyuv { +extern "C" { +#endif + +// Scale a 24 bit image. +// Converts to ARGB as intermediate step + +LIBYUV_API +int RGBScale(const uint8_t* src_rgb, + int src_stride_rgb, + int src_width, + int src_height, + uint8_t* dst_rgb, + int dst_stride_rgb, + int dst_width, + int dst_height, + enum FilterMode filtering) { + int r; + uint8_t* src_argb = + (uint8_t*)malloc(src_width * src_height * 4 + dst_width * dst_height * 4); + uint8_t* dst_argb = src_argb + src_width * src_height * 4; + + if (!src_argb) { + return 1; + } + + r = RGB24ToARGB(src_rgb, src_stride_rgb, src_argb, src_width * 4, src_width, + src_height); + if (!r) { + r = ARGBScale(src_argb, src_width * 4, src_width, src_height, dst_argb, + dst_width * 4, dst_width, dst_height, filtering); + if (!r) { + r = ARGBToRGB24(dst_argb, dst_width * 4, dst_rgb, dst_stride_rgb, + dst_width, dst_height); + } + } + free(src_argb); + return r; +} + +#ifdef __cplusplus +} // extern "C" +} // namespace libyuv +#endif |