aboutsummaryrefslogtreecommitdiff
path: root/source/scale_rgb.cc
diff options
context:
space:
mode:
authorAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2024-04-18 22:13:46 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2024-04-18 22:13:46 +0000
commit30c00556ad8a5c6b6719589948bfda4e9f324b8d (patch)
tree7aa355fd0b89ec0b2611e17ee84a14c6fa449e22 /source/scale_rgb.cc
parent8e521e2ea589b4cafb788330f83037a0413f200a (diff)
parentf635a4c50514783b67549770dee0c53c9fa0c773 (diff)
downloadlibyuv-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.cc66
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