Coverage Report

Created: 2025-08-11 07:34

/src/libultrahdr/lib/include/ultrahdr/editorhelper.h
Line
Count
Source (jump to first uncovered line)
1
/*
2
 * Copyright 2024 The Android Open Source Project
3
 *
4
 * Licensed under the Apache License, Version 2.0 (the "License");
5
 * you may not use this file except in compliance with the License.
6
 * You may obtain a copy of the License at
7
 *
8
 *      http://www.apache.org/licenses/LICENSE-2.0
9
 *
10
 * Unless required by applicable law or agreed to in writing, software
11
 * distributed under the License is distributed on an "AS IS" BASIS,
12
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
 * See the License for the specific language governing permissions and
14
 * limitations under the License.
15
 */
16
17
#ifndef ULTRAHDR_EDITORHELPER_H
18
#define ULTRAHDR_EDITORHELPER_H
19
20
#include "ultrahdr_api.h"
21
#include "ultrahdr/ultrahdrcommon.h"
22
23
namespace ultrahdr {
24
25
/*!\brief uhdr image effect descriptor */
26
typedef struct uhdr_effect_desc {
27
  virtual std::string to_string() = 0;
28
29
18.6k
  virtual ~uhdr_effect_desc() = default;
30
} uhdr_effect_desc_t; /**< alias for struct uhdr_effect_desc */
31
32
/*!\brief mirror effect descriptor */
33
typedef struct uhdr_mirror_effect : uhdr_effect_desc {
34
  uhdr_mirror_effect(uhdr_mirror_direction_t direction);
35
36
0
  std::string to_string() {
37
0
    return "effect : mirror, metadata : direction - " + ((m_direction == UHDR_MIRROR_HORIZONTAL)
38
0
                                                             ? std::string{"horizontal"}
39
0
                                                             : std::string{"vertical"});
40
0
  }
41
42
  uhdr_mirror_direction_t m_direction;
43
44
  void (*m_mirror_uint8_t)(uint8_t*, uint8_t*, int, int, int, int, uhdr_mirror_direction_t);
45
  void (*m_mirror_uint16_t)(uint16_t*, uint16_t*, int, int, int, int, uhdr_mirror_direction_t);
46
  void (*m_mirror_uint32_t)(uint32_t*, uint32_t*, int, int, int, int, uhdr_mirror_direction_t);
47
  void (*m_mirror_uint64_t)(uint64_t*, uint64_t*, int, int, int, int, uhdr_mirror_direction_t);
48
} uhdr_mirror_effect_t; /**< alias for struct uhdr_mirror_effect */
49
50
/*!\brief rotate effect descriptor */
51
typedef struct uhdr_rotate_effect : uhdr_effect_desc {
52
  uhdr_rotate_effect(int degree);
53
54
0
  std::string to_string() {
55
0
    return "effect : rotate, metadata : degree - " + std::to_string(m_degree);
56
0
  }
57
58
  int m_degree;
59
60
  void (*m_rotate_uint8_t)(uint8_t*, uint8_t*, int, int, int, int, int);
61
  void (*m_rotate_uint16_t)(uint16_t*, uint16_t*, int, int, int, int, int);
62
  void (*m_rotate_uint32_t)(uint32_t*, uint32_t*, int, int, int, int, int);
63
  void (*m_rotate_uint64_t)(uint64_t*, uint64_t*, int, int, int, int, int);
64
} uhdr_rotate_effect_t; /**< alias for struct uhdr_rotate_effect */
65
66
/*!\brief crop effect descriptor */
67
typedef struct uhdr_crop_effect : uhdr_effect_desc {
68
  uhdr_crop_effect(int left, int right, int top, int bottom);
69
70
0
  std::string to_string() {
71
0
    return "effect : crop, metadata : left, right, top, bottom - " + std::to_string(m_left) + " ," +
72
0
           std::to_string(m_right) + " ," + std::to_string(m_top) + " ," + std::to_string(m_bottom);
73
0
  }
74
75
  int m_left;
76
  int m_right;
77
  int m_top;
78
  int m_bottom;
79
80
  void (*m_crop_uint8_t)(uint8_t*, uint8_t*, int, int, int, int, int, int);
81
  void (*m_crop_uint16_t)(uint16_t*, uint16_t*, int, int, int, int, int, int);
82
  void (*m_crop_uint32_t)(uint32_t*, uint32_t*, int, int, int, int, int, int);
83
  void (*m_crop_uint64_t)(uint64_t*, uint64_t*, int, int, int, int, int, int);
84
} uhdr_crop_effect_t; /**< alias for struct uhdr_crop_effect */
85
86
/*!\brief resize effect descriptor */
87
typedef struct uhdr_resize_effect : uhdr_effect_desc {
88
  uhdr_resize_effect(int width, int height);
89
90
0
  std::string to_string() {
91
0
    return "effect : resize, metadata : dimensions w, h" + std::to_string(m_width) + " ," +
92
0
           std::to_string(m_height);
93
0
  }
94
95
  int m_width;
96
  int m_height;
97
98
  void (*m_resize_uint8_t)(uint8_t*, uint8_t*, int, int, int, int, int, int);
99
  void (*m_resize_uint16_t)(uint16_t*, uint16_t*, int, int, int, int, int, int);
100
  void (*m_resize_uint32_t)(uint32_t*, uint32_t*, int, int, int, int, int, int);
101
  void (*m_resize_uint64_t)(uint64_t*, uint64_t*, int, int, int, int, int, int);
102
} uhdr_resize_effect_t; /**< alias for struct uhdr_resize_effect */
103
104
template <typename T>
105
extern void rotate_buffer_clockwise(T* src_buffer, T* dst_buffer, int src_w, int src_h,
106
                                    int src_stride, int dst_stride, int degree);
107
108
template <typename T>
109
extern void mirror_buffer(T* src_buffer, T* dst_buffer, int src_w, int src_h, int src_stride,
110
                          int dst_stride, uhdr_mirror_direction_t direction);
111
112
template <typename T>
113
extern void resize_buffer(T* src_buffer, T* dst_buffer, int src_w, int src_h, int dst_w, int dst_h,
114
                          int src_stride, int dst_stride);
115
116
std::unique_ptr<uhdr_raw_image_ext_t> resize_image(uhdr_raw_image_t* src, int dst_w, int dst_h);
117
118
#if (defined(UHDR_ENABLE_INTRINSICS) && (defined(__ARM_NEON__) || defined(__ARM_NEON)))
119
template <typename T>
120
extern void mirror_buffer_neon(T* src_buffer, T* dst_buffer, int src_w, int src_h, int src_stride,
121
                               int dst_stride, uhdr_mirror_direction_t direction);
122
123
template <typename T>
124
extern void rotate_buffer_clockwise_neon(T* src_buffer, T* dst_buffer, int src_w, int src_h,
125
                                         int src_stride, int dst_stride, int degrees);
126
#endif
127
128
#ifdef UHDR_ENABLE_GLES
129
130
std::unique_ptr<uhdr_raw_image_ext_t> apply_resize_gles(uhdr_raw_image_t* src, int dst_w, int dst_h,
131
                                                        uhdr_opengl_ctxt* gl_ctxt,
132
                                                        GLuint* srcTexture);
133
134
std::unique_ptr<uhdr_raw_image_ext_t> apply_mirror_gles(ultrahdr::uhdr_mirror_effect_t* desc,
135
                                                        uhdr_raw_image_t* src,
136
                                                        uhdr_opengl_ctxt* gl_ctxt,
137
                                                        GLuint* srcTexture);
138
139
std::unique_ptr<uhdr_raw_image_ext_t> apply_rotate_gles(ultrahdr::uhdr_rotate_effect_t* desc,
140
                                                        uhdr_raw_image_t* src,
141
                                                        uhdr_opengl_ctxt* gl_ctxt,
142
                                                        GLuint* srcTexture);
143
144
std::unique_ptr<uhdr_raw_image_ext_t> apply_crop_gles(uhdr_raw_image_t* src, int left, int top,
145
                                                      int wd, int ht, uhdr_opengl_ctxt* gl_ctxt,
146
                                                      GLuint* srcTexture);
147
#endif
148
149
std::unique_ptr<uhdr_raw_image_ext_t> apply_rotate(ultrahdr::uhdr_rotate_effect_t* desc,
150
                                                   uhdr_raw_image_t* src, void* gl_ctxt = nullptr,
151
                                                   void* texture = nullptr);
152
153
std::unique_ptr<uhdr_raw_image_ext_t> apply_mirror(ultrahdr::uhdr_mirror_effect_t* desc,
154
                                                   uhdr_raw_image_t* src, void* gl_ctxt = nullptr,
155
                                                   void* texture = nullptr);
156
157
std::unique_ptr<uhdr_raw_image_ext_t> apply_resize(ultrahdr::uhdr_resize_effect_t* desc,
158
                                                   uhdr_raw_image* src, int dst_w, int dst_h,
159
                                                   void* gl_ctxt = nullptr,
160
                                                   void* texture = nullptr);
161
162
std::unique_ptr<uhdr_raw_image_ext_t> apply_crop(ultrahdr::uhdr_crop_effect_t* desc,
163
                                                 uhdr_raw_image_t* src, int left, int top, int wd,
164
                                                 int ht, void* gl_ctxt = nullptr,
165
                                                 void* texture = nullptr);
166
167
}  // namespace ultrahdr
168
169
#endif  // ULTRAHDR_EDITORHELPER_H