1 /*
2 * Copyright (C) 2024 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15 #include "common_utils.h"
16 #include "exif_metadata.h"
17 #include "image_common.h"
18 #include "image_common_impl.h"
19 #include "image_log.h"
20 #include "image_type.h"
21 #include "image_utils.h"
22 #include "media_errors.h"
23 #include "picture_native.h"
24 #include "picture_native_impl.h"
25 #include "pixelmap_native_impl.h"
26 #ifdef __cplusplus
27 extern "C" {
28 #endif
29
AuxTypeInnerToNative(OHOS::Media::AuxiliaryPictureType type)30 static Image_AuxiliaryPictureType AuxTypeInnerToNative(OHOS::Media::AuxiliaryPictureType type)
31 {
32 return static_cast<Image_AuxiliaryPictureType>(static_cast<int>(type));
33 }
34
AuxTypeNativeToInner(Image_AuxiliaryPictureType type)35 static OHOS::Media::AuxiliaryPictureType AuxTypeNativeToInner(Image_AuxiliaryPictureType type)
36 {
37 return static_cast<OHOS::Media::AuxiliaryPictureType>(static_cast<int>(type));
38 }
39
MetaDataTypeNativeToInner(Image_MetadataType metadataType)40 static OHOS::Media::MetadataType MetaDataTypeNativeToInner(Image_MetadataType metadataType)
41 {
42 return static_cast<OHOS::Media::MetadataType>(static_cast<int>(metadataType));
43 }
44
45 MIDK_EXPORT
OH_PictureNative_CreatePicture(OH_PixelmapNative * mainPixelmap,OH_PictureNative ** picture)46 Image_ErrorCode OH_PictureNative_CreatePicture(OH_PixelmapNative *mainPixelmap, OH_PictureNative **picture)
47 {
48 if (mainPixelmap == nullptr || picture == nullptr) {
49 return IMAGE_BAD_PARAMETER;
50 }
51 auto innerPixelMap = mainPixelmap->GetInnerPixelmap();
52 auto pictureTmp = std::make_unique<OH_PictureNative>(innerPixelMap);
53 if (!pictureTmp || !pictureTmp->GetInnerPicture()) {
54 return IMAGE_ALLOC_FAILED;
55 }
56 *picture = pictureTmp.release();
57 return IMAGE_SUCCESS;
58 }
59
60 MIDK_EXPORT
OH_PictureNative_GetMainPixelmap(OH_PictureNative * picture,OH_PixelmapNative ** mainPixelmap)61 Image_ErrorCode OH_PictureNative_GetMainPixelmap(OH_PictureNative *picture, OH_PixelmapNative **mainPixelmap)
62 {
63 if (mainPixelmap == nullptr || picture == nullptr ||
64 !picture->GetInnerPicture() || !picture->GetInnerPicture()->GetMainPixel()) {
65 return IMAGE_BAD_PARAMETER;
66 }
67 auto mainPixelmapTmp = std::make_unique<OH_PixelmapNative>(picture->GetInnerPicture()->GetMainPixel());
68 if (!mainPixelmapTmp || !mainPixelmapTmp->GetInnerPixelmap()) {
69 return IMAGE_ALLOC_FAILED;
70 }
71 *mainPixelmap = mainPixelmapTmp.release();
72 return IMAGE_SUCCESS;
73 }
74
75 MIDK_EXPORT
OH_PictureNative_GetHdrComposedPixelmap(OH_PictureNative * picture,OH_PixelmapNative ** mainPixelmap)76 Image_ErrorCode OH_PictureNative_GetHdrComposedPixelmap(OH_PictureNative *picture, OH_PixelmapNative **mainPixelmap)
77 {
78 if (mainPixelmap == nullptr || picture == nullptr || !picture->GetInnerPicture()) {
79 return IMAGE_BAD_PARAMETER;
80 }
81
82 auto pixelPtrTmp = picture->GetInnerPicture()->GetHdrComposedPixelMap();
83 if (pixelPtrTmp == nullptr) {
84 return IMAGE_UNSUPPORTED_OPERATION;
85 }
86 auto mainPixelmapNative = std::make_unique<OH_PixelmapNative>(std::move(pixelPtrTmp));
87 if (mainPixelmapNative == nullptr || mainPixelmapNative.get() == nullptr ||
88 !mainPixelmapNative->GetInnerPixelmap()) {
89 return IMAGE_ALLOC_FAILED;
90 }
91 *mainPixelmap = mainPixelmapNative.release();
92 return IMAGE_SUCCESS;
93 }
94
95 MIDK_EXPORT
OH_PictureNative_GetGainmapPixelmap(OH_PictureNative * picture,OH_PixelmapNative ** gainmapPixelmap)96 Image_ErrorCode OH_PictureNative_GetGainmapPixelmap(OH_PictureNative *picture, OH_PixelmapNative **gainmapPixelmap)
97 {
98 if (gainmapPixelmap == nullptr || picture == nullptr || !picture->GetInnerPicture()) {
99 return IMAGE_BAD_PARAMETER;
100 }
101
102 auto gainMainPixelmapTmp = std::make_unique<OH_PixelmapNative>(picture->GetInnerPicture()->GetGainmapPixelMap());
103 if (!gainMainPixelmapTmp || !gainMainPixelmapTmp->GetInnerPixelmap()) {
104 return IMAGE_ALLOC_FAILED;
105 }
106 *gainmapPixelmap = gainMainPixelmapTmp.release();
107 return IMAGE_SUCCESS;
108 }
109
110 MIDK_EXPORT
OH_PictureNative_SetAuxiliaryPicture(OH_PictureNative * picture,Image_AuxiliaryPictureType type,OH_AuxiliaryPictureNative * auxiliaryPicture)111 Image_ErrorCode OH_PictureNative_SetAuxiliaryPicture(OH_PictureNative *picture, Image_AuxiliaryPictureType type,
112 OH_AuxiliaryPictureNative *auxiliaryPicture)
113 {
114 if (picture == nullptr || auxiliaryPicture == nullptr || !picture->GetInnerPicture() ||
115 !auxiliaryPicture->GetInnerAuxiliaryPicture()) {
116 return IMAGE_BAD_PARAMETER;
117 }
118
119 auto auxPicTypeUser = AuxTypeNativeToInner(type);
120 if (!OHOS::Media::ImageUtils::IsAuxiliaryPictureTypeSupported(auxPicTypeUser)) {
121 return IMAGE_BAD_PARAMETER;
122 }
123
124 auto innerAuxiliaryPicture = auxiliaryPicture->GetInnerAuxiliaryPicture();
125 OHOS::Media::AuxiliaryPictureType auxPicTypeInner = innerAuxiliaryPicture->GetType();
126 if (auxPicTypeUser != auxPicTypeInner) {
127 return IMAGE_BAD_PARAMETER;
128 }
129 picture->GetInnerPicture()->SetAuxiliaryPicture(innerAuxiliaryPicture);
130 return IMAGE_SUCCESS;
131 }
132
133 MIDK_EXPORT
OH_PictureNative_GetAuxiliaryPicture(OH_PictureNative * picture,Image_AuxiliaryPictureType type,OH_AuxiliaryPictureNative ** auxiliaryPicture)134 Image_ErrorCode OH_PictureNative_GetAuxiliaryPicture(OH_PictureNative *picture, Image_AuxiliaryPictureType type,
135 OH_AuxiliaryPictureNative **auxiliaryPicture)
136 {
137 if (picture == nullptr || auxiliaryPicture == nullptr || !picture->GetInnerPicture()) {
138 return IMAGE_BAD_PARAMETER;
139 }
140
141 auto auxPicTypeInner = AuxTypeNativeToInner(type);
142 if (!OHOS::Media::ImageUtils::IsAuxiliaryPictureTypeSupported(auxPicTypeInner)) {
143 return IMAGE_BAD_PARAMETER;
144 }
145
146 auto auxiliaryPictureTmp = picture->GetInnerPicture()->GetAuxiliaryPicture(auxPicTypeInner);
147 if (!auxiliaryPictureTmp) {
148 return IMAGE_BAD_PARAMETER;
149 }
150 auto auxNativeTmp = std::make_unique<OH_AuxiliaryPictureNative>(auxiliaryPictureTmp);
151 if (!auxNativeTmp || !auxNativeTmp->GetInnerAuxiliaryPicture()) {
152 return IMAGE_ALLOC_FAILED;
153 }
154 *auxiliaryPicture = auxNativeTmp.release();
155 return IMAGE_SUCCESS;
156 }
157
OH_PictureNative_GetMetadata(OH_PictureNative * picture,Image_MetadataType metadataType,OH_PictureMetadata ** metadata)158 Image_ErrorCode OH_PictureNative_GetMetadata(OH_PictureNative *picture, Image_MetadataType metadataType,
159 OH_PictureMetadata **metadata)
160 {
161 if (picture == nullptr || metadata == nullptr || !picture->GetInnerPicture()) {
162 return IMAGE_BAD_PARAMETER;
163 }
164 std::shared_ptr<OHOS::Media::ImageMetadata> metadataTmp = nullptr;
165 if (metadataType == EXIF_METADATA) {
166 metadataTmp = picture->GetInnerPicture()->GetExifMetadata();
167 }
168 if (metadataTmp == nullptr) {
169 return IMAGE_UNSUPPORTED_METADATA;
170 }
171 auto matadataNativeTmp = std::make_unique<OH_PictureMetadata>(metadataTmp);
172 if (!matadataNativeTmp || !matadataNativeTmp->GetInnerAuxiliaryMetadata()) {
173 return IMAGE_UNSUPPORTED_METADATA;
174 }
175 *metadata = matadataNativeTmp.release();
176 return IMAGE_SUCCESS;
177 }
178
OH_PictureNative_SetMetadata(OH_PictureNative * picture,Image_MetadataType metadataType,OH_PictureMetadata * metadata)179 Image_ErrorCode OH_PictureNative_SetMetadata(OH_PictureNative *picture, Image_MetadataType metadataType,
180 OH_PictureMetadata *metadata)
181 {
182 if (picture == nullptr || metadata == nullptr || !picture->GetInnerPicture() ||
183 !metadata->GetInnerAuxiliaryMetadata()) {
184 return IMAGE_BAD_PARAMETER;
185 }
186 if (metadataType == EXIF_METADATA) {
187 auto metadataInner = metadata->GetInnerAuxiliaryMetadata();
188 auto exifMetadata = std::static_pointer_cast<OHOS::Media::ExifMetadata>(metadataInner);
189 auto errorCode = picture->GetInnerPicture()->SetExifMetadata(exifMetadata);
190 if (errorCode != OHOS::Media::SUCCESS) {
191 return IMAGE_UNSUPPORTED_METADATA;
192 }
193 } else {
194 return IMAGE_UNSUPPORTED_METADATA;
195 }
196 return IMAGE_SUCCESS;
197 }
198
199 MIDK_EXPORT
OH_PictureNative_Release(OH_PictureNative * picture)200 Image_ErrorCode OH_PictureNative_Release(OH_PictureNative *picture)
201 {
202 if (picture == nullptr) {
203 return IMAGE_BAD_PARAMETER;
204 }
205 delete picture;
206 picture = nullptr;
207 return IMAGE_SUCCESS;
208 }
209
210 MIDK_EXPORT
OH_AuxiliaryPictureNative_Create(uint8_t * data,size_t dataLength,Image_Size * size,Image_AuxiliaryPictureType type,OH_AuxiliaryPictureNative ** auxiliaryPicture)211 Image_ErrorCode OH_AuxiliaryPictureNative_Create(uint8_t *data, size_t dataLength, Image_Size *size,
212 Image_AuxiliaryPictureType type, OH_AuxiliaryPictureNative **auxiliaryPicture)
213 {
214 if (data == nullptr || dataLength <= 0 || auxiliaryPicture == nullptr || size == nullptr) {
215 return IMAGE_BAD_PARAMETER;
216 }
217
218 auto auxPicTypeInner = AuxTypeNativeToInner(type);
219 if (!OHOS::Media::ImageUtils::IsAuxiliaryPictureTypeSupported(auxPicTypeInner)) {
220 return IMAGE_BAD_PARAMETER;
221 }
222
223 OHOS::Media::InitializationOptions initializationOptions;
224 initializationOptions.size.width = size->width;
225 initializationOptions.size.height = size->height;
226 initializationOptions.editable = true;
227 initializationOptions.useDMA = true;
228 auto dataTmp = reinterpret_cast<uint32_t*>(data);
229 auto dataLengthTmp = static_cast<uint32_t>(dataLength);
230
231 auto pixelMap = OHOS::Media::PixelMap::Create(dataTmp, dataLengthTmp, initializationOptions);
232 std::shared_ptr<OHOS::Media::PixelMap> pixelMapPtr = std::move(pixelMap);
233 if (!pixelMapPtr) {
234 return IMAGE_BAD_PARAMETER;
235 }
236 auto auxiliaryPictureTmp = std::make_unique<OH_AuxiliaryPictureNative>(pixelMapPtr, auxPicTypeInner,
237 initializationOptions.size);
238 if (!auxiliaryPictureTmp || !auxiliaryPictureTmp->GetInnerAuxiliaryPicture()) {
239 return IMAGE_ALLOC_FAILED;
240 }
241 *auxiliaryPicture = auxiliaryPictureTmp.release();
242 return IMAGE_SUCCESS;
243 }
244
245 MIDK_EXPORT
OH_AuxiliaryPictureNative_WritePixels(OH_AuxiliaryPictureNative * auxiliaryPicture,uint8_t * source,size_t bufferSize)246 Image_ErrorCode OH_AuxiliaryPictureNative_WritePixels(OH_AuxiliaryPictureNative *auxiliaryPicture,
247 uint8_t *source, size_t bufferSize)
248 {
249 if (auxiliaryPicture == nullptr || source == nullptr) {
250 return IMAGE_BAD_PARAMETER;
251 }
252 auto innerAuxiliaryPicture = auxiliaryPicture->GetInnerAuxiliaryPicture();
253 if (!innerAuxiliaryPicture) {
254 return IMAGE_BAD_PARAMETER;
255 }
256 uint32_t ret = innerAuxiliaryPicture->WritePixels(source, static_cast<uint64_t>(bufferSize));
257 if (ret != OHOS::Media::SUCCESS) {
258 return IMAGE_COPY_FAILED;
259 }
260 return IMAGE_SUCCESS;
261 }
262
263 MIDK_EXPORT
OH_AuxiliaryPictureNative_ReadPixels(OH_AuxiliaryPictureNative * auxiliaryPicture,uint8_t * destination,size_t * bufferSize)264 Image_ErrorCode OH_AuxiliaryPictureNative_ReadPixels(OH_AuxiliaryPictureNative *auxiliaryPicture, uint8_t *destination,
265 size_t *bufferSize)
266 {
267 if (auxiliaryPicture == nullptr || destination == nullptr || bufferSize == nullptr) {
268 return IMAGE_BAD_PARAMETER;
269 }
270 auto innerAuxiliaryPicture = auxiliaryPicture->GetInnerAuxiliaryPicture();
271 if (!innerAuxiliaryPicture) {
272 return IMAGE_BAD_PARAMETER;
273 }
274 auto size = static_cast<uint64_t>(*bufferSize);
275 if (innerAuxiliaryPicture->ReadPixels(size, reinterpret_cast<uint8_t*>(destination)) != IMAGE_SUCCESS) {
276 return IMAGE_BAD_PARAMETER;
277 }
278 *bufferSize = static_cast<size_t>(size);
279 return IMAGE_SUCCESS;
280 }
281
282 MIDK_EXPORT
OH_AuxiliaryPictureNative_GetType(OH_AuxiliaryPictureNative * auxiliaryPicture,Image_AuxiliaryPictureType * type)283 Image_ErrorCode OH_AuxiliaryPictureNative_GetType(OH_AuxiliaryPictureNative *auxiliaryPicture,
284 Image_AuxiliaryPictureType *type)
285 {
286 if (auxiliaryPicture == nullptr || type == nullptr || !auxiliaryPicture->GetInnerAuxiliaryPicture()) {
287 return IMAGE_BAD_PARAMETER;
288 }
289
290 auto auxiliaryPictureType = auxiliaryPicture->GetInnerAuxiliaryPicture()->GetType();
291 Image_AuxiliaryPictureType auxiliaryPictureTypeTmp = AuxTypeInnerToNative(auxiliaryPictureType);
292 *type = auxiliaryPictureTypeTmp;
293 return IMAGE_SUCCESS;
294 }
295
296 MIDK_EXPORT
OH_AuxiliaryPictureNative_GetInfo(OH_AuxiliaryPictureNative * auxiliaryPicture,OH_AuxiliaryPictureInfo ** info)297 Image_ErrorCode OH_AuxiliaryPictureNative_GetInfo(OH_AuxiliaryPictureNative *auxiliaryPicture,
298 OH_AuxiliaryPictureInfo **info)
299 {
300 if (auxiliaryPicture == nullptr || !auxiliaryPicture->GetInnerAuxiliaryPicture() || info == nullptr) {
301 return IMAGE_BAD_PARAMETER;
302 }
303 auto auxInfo = auxiliaryPicture->GetInnerAuxiliaryPicture()->GetAuxiliaryPictureInfo();
304 *info = new OH_AuxiliaryPictureInfo(auxInfo);
305 return IMAGE_SUCCESS;
306 }
307
308 MIDK_EXPORT
OH_AuxiliaryPictureNative_SetInfo(OH_AuxiliaryPictureNative * auxiliaryPicture,OH_AuxiliaryPictureInfo * info)309 Image_ErrorCode OH_AuxiliaryPictureNative_SetInfo(OH_AuxiliaryPictureNative *auxiliaryPicture,
310 OH_AuxiliaryPictureInfo *info)
311 {
312 if (auxiliaryPicture == nullptr || !auxiliaryPicture->GetInnerAuxiliaryPicture() || info == nullptr) {
313 return IMAGE_BAD_PARAMETER;
314 }
315 auto tempInfo = *(info->GetInnerAuxiliaryPictureInfo().get());
316 uint32_t res = auxiliaryPicture->GetInnerAuxiliaryPicture()->SetAuxiliaryPictureInfo(tempInfo);
317 if (res != IMAGE_SUCCESS) {
318 return IMAGE_BAD_PARAMETER;
319 }
320 return IMAGE_SUCCESS;
321 }
322
323 MIDK_EXPORT
OH_AuxiliaryPictureNative_GetMetadata(OH_AuxiliaryPictureNative * auxiliaryPicture,Image_MetadataType metadataType,OH_PictureMetadata ** metadata)324 Image_ErrorCode OH_AuxiliaryPictureNative_GetMetadata(OH_AuxiliaryPictureNative *auxiliaryPicture, Image_MetadataType
325 metadataType, OH_PictureMetadata **metadata)
326 {
327 if (auxiliaryPicture == nullptr || metadata == nullptr || !auxiliaryPicture->GetInnerAuxiliaryPicture()) {
328 return IMAGE_BAD_PARAMETER;
329 }
330
331 auto metadataTypeInner = MetaDataTypeNativeToInner(metadataType);
332 if (!OHOS::Media::ImageUtils::IsMetadataTypeSupported(metadataTypeInner)) {
333 return IMAGE_BAD_PARAMETER;
334 }
335 std::shared_ptr<OHOS::Media::ImageMetadata> metadataPtr = nullptr;
336 if (metadataTypeInner == OHOS::Media::MetadataType::EXIF) {
337 return IMAGE_UNSUPPORTED_METADATA;
338 } else if (auxiliaryPicture->GetInnerAuxiliaryPicture()->GetType()
339 != OHOS::Media::AuxiliaryPictureType::FRAGMENT_MAP
340 && metadataTypeInner == OHOS::Media::MetadataType::FRAGMENT) {
341 return IMAGE_UNSUPPORTED_METADATA;
342 } else {
343 metadataPtr = auxiliaryPicture->GetInnerAuxiliaryPicture()->GetMetadata(metadataTypeInner);
344 }
345 if (metadataPtr == nullptr) {
346 return IMAGE_BAD_PARAMETER;
347 }
348 *metadata = new OH_PictureMetadata(metadataPtr);
349 return IMAGE_SUCCESS;
350 }
351
352 MIDK_EXPORT
OH_AuxiliaryPictureNative_SetMetadata(OH_AuxiliaryPictureNative * auxiliaryPicture,Image_MetadataType metadataType,OH_PictureMetadata * metadata)353 Image_ErrorCode OH_AuxiliaryPictureNative_SetMetadata(OH_AuxiliaryPictureNative *auxiliaryPicture,
354 Image_MetadataType metadataType, OH_PictureMetadata *metadata)
355 {
356 if (auxiliaryPicture == nullptr || !auxiliaryPicture->GetInnerAuxiliaryPicture() || metadata == nullptr) {
357 return IMAGE_BAD_PARAMETER;
358 }
359
360 auto metadataTypeInner = MetaDataTypeNativeToInner(metadataType);
361 if (!OHOS::Media::ImageUtils::IsMetadataTypeSupported(metadataTypeInner)) {
362 return IMAGE_BAD_PARAMETER;
363 }
364
365 auto metadataPtr = metadata->GetInnerAuxiliaryMetadata();
366 if (!metadataPtr) {
367 return IMAGE_BAD_PARAMETER;
368 }
369 if (auxiliaryPicture->GetInnerAuxiliaryPicture()->GetType() != OHOS::Media::AuxiliaryPictureType::FRAGMENT_MAP
370 && metadataTypeInner == OHOS::Media::MetadataType::FRAGMENT) {
371 return IMAGE_UNSUPPORTED_METADATA;
372 } else {
373 auxiliaryPicture->GetInnerAuxiliaryPicture()->SetMetadata(metadataTypeInner, metadataPtr);
374 }
375 return IMAGE_SUCCESS;
376 }
377
378 MIDK_EXPORT
OH_AuxiliaryPictureNative_Release(OH_AuxiliaryPictureNative * picture)379 Image_ErrorCode OH_AuxiliaryPictureNative_Release(OH_AuxiliaryPictureNative *picture)
380 {
381 if (picture == nullptr) {
382 return IMAGE_BAD_PARAMETER;
383 }
384 delete picture;
385 picture = nullptr;
386 return IMAGE_SUCCESS;
387 }
388
389 MIDK_EXPORT
OH_AuxiliaryPictureInfo_Create(OH_AuxiliaryPictureInfo ** info)390 Image_ErrorCode OH_AuxiliaryPictureInfo_Create(OH_AuxiliaryPictureInfo **info)
391 {
392 if (info == nullptr) {
393 return IMAGE_BAD_PARAMETER;
394 }
395 *info = new OH_AuxiliaryPictureInfo();
396 return IMAGE_SUCCESS;
397 }
398
399 MIDK_EXPORT
OH_AuxiliaryPictureInfo_GetType(OH_AuxiliaryPictureInfo * info,Image_AuxiliaryPictureType * type)400 Image_ErrorCode OH_AuxiliaryPictureInfo_GetType(OH_AuxiliaryPictureInfo *info, Image_AuxiliaryPictureType *type)
401 {
402 if (info == nullptr || type == nullptr || !info->GetInnerAuxiliaryPictureInfo()) {
403 return IMAGE_BAD_PARAMETER;
404 }
405 auto typeTmpInner = info->GetInnerAuxiliaryPictureInfo()->auxiliaryPictureType;
406 auto typeTmpNative = AuxTypeInnerToNative(typeTmpInner);
407 *type = typeTmpNative;
408 return IMAGE_SUCCESS;
409 }
410
411 MIDK_EXPORT
OH_AuxiliaryPictureInfo_SetType(OH_AuxiliaryPictureInfo * info,Image_AuxiliaryPictureType type)412 Image_ErrorCode OH_AuxiliaryPictureInfo_SetType(OH_AuxiliaryPictureInfo *info, Image_AuxiliaryPictureType type)
413 {
414 if (info == nullptr || !info->GetInnerAuxiliaryPictureInfo()) {
415 return IMAGE_BAD_PARAMETER;
416 }
417
418 auto auxPicTypeInner = AuxTypeNativeToInner(type);
419 if (!OHOS::Media::ImageUtils::IsAuxiliaryPictureTypeSupported(auxPicTypeInner)) {
420 return IMAGE_BAD_PARAMETER;
421 }
422
423 info->GetInnerAuxiliaryPictureInfo()->auxiliaryPictureType = auxPicTypeInner;
424 return IMAGE_SUCCESS;
425 }
426
427 MIDK_EXPORT
OH_AuxiliaryPictureInfo_GetSize(OH_AuxiliaryPictureInfo * info,Image_Size * size)428 Image_ErrorCode OH_AuxiliaryPictureInfo_GetSize(OH_AuxiliaryPictureInfo *info, Image_Size *size)
429 {
430 if (info == nullptr || size == nullptr || !info->GetInnerAuxiliaryPictureInfo()) {
431 return IMAGE_BAD_PARAMETER;
432 }
433 auto sizeIner = info->GetInnerAuxiliaryPictureInfo()->size;
434 Image_Size sizeTmp = Image_Size();
435 sizeTmp.height = sizeIner.height;
436 sizeTmp.width = sizeIner.width;
437 *size = sizeTmp;
438 return IMAGE_SUCCESS;
439 }
440
441 MIDK_EXPORT
OH_AuxiliaryPictureInfo_SetSize(OH_AuxiliaryPictureInfo * info,Image_Size * size)442 Image_ErrorCode OH_AuxiliaryPictureInfo_SetSize(OH_AuxiliaryPictureInfo *info, Image_Size *size)
443 {
444 if (info == nullptr || !info->GetInnerAuxiliaryPictureInfo() || size == nullptr) {
445 return IMAGE_BAD_PARAMETER;
446 }
447 OHOS::Media::Size sizeTmp = OHOS::Media::Size();
448 sizeTmp.height = size->height;
449 sizeTmp.width = size->width;
450 info->GetInnerAuxiliaryPictureInfo()->size = sizeTmp;
451 return IMAGE_SUCCESS;
452 }
453
454 MIDK_EXPORT
OH_AuxiliaryPictureInfo_GetRowStride(OH_AuxiliaryPictureInfo * info,uint32_t * rowStride)455 Image_ErrorCode OH_AuxiliaryPictureInfo_GetRowStride(OH_AuxiliaryPictureInfo *info, uint32_t *rowStride)
456 {
457 if (info == nullptr || rowStride == nullptr || !info->GetInnerAuxiliaryPictureInfo()) {
458 return IMAGE_BAD_PARAMETER;
459 }
460 *rowStride = info->GetInnerAuxiliaryPictureInfo()->rowStride;
461 return IMAGE_SUCCESS;
462 }
463
464 MIDK_EXPORT
OH_AuxiliaryPictureInfo_SetRowStride(OH_AuxiliaryPictureInfo * info,uint32_t rowStride)465 Image_ErrorCode OH_AuxiliaryPictureInfo_SetRowStride(OH_AuxiliaryPictureInfo *info, uint32_t rowStride)
466 {
467 if (info == nullptr || !info->GetInnerAuxiliaryPictureInfo()) {
468 return IMAGE_BAD_PARAMETER;
469 }
470 info->GetInnerAuxiliaryPictureInfo()->rowStride = rowStride;
471 return IMAGE_SUCCESS;
472 }
473
474 MIDK_EXPORT
OH_AuxiliaryPictureInfo_GetPixelFormat(OH_AuxiliaryPictureInfo * info,PIXEL_FORMAT * pixelFormat)475 Image_ErrorCode OH_AuxiliaryPictureInfo_GetPixelFormat(OH_AuxiliaryPictureInfo *info, PIXEL_FORMAT *pixelFormat)
476 {
477 if (info == nullptr || !info->GetInnerAuxiliaryPictureInfo() || pixelFormat == nullptr) {
478 return IMAGE_BAD_PARAMETER;
479 }
480 auto pixelFormatTpm = info->GetInnerAuxiliaryPictureInfo()->pixelFormat;
481 *pixelFormat = static_cast<PIXEL_FORMAT>(pixelFormatTpm);
482 return IMAGE_SUCCESS;
483 }
484
485 MIDK_EXPORT
OH_AuxiliaryPictureInfo_SetPixelFormat(OH_AuxiliaryPictureInfo * info,PIXEL_FORMAT pixelFormat)486 Image_ErrorCode OH_AuxiliaryPictureInfo_SetPixelFormat(OH_AuxiliaryPictureInfo *info, PIXEL_FORMAT pixelFormat)
487 {
488 if (info == nullptr || !info->GetInnerAuxiliaryPictureInfo()) {
489 return IMAGE_BAD_PARAMETER;
490 }
491 if (pixelFormat < PIXEL_FORMAT::PIXEL_FORMAT_UNKNOWN ||
492 pixelFormat > PIXEL_FORMAT::PIXEL_FORMAT_YCRCB_P010 ||
493 pixelFormat == static_cast<int32_t>(OHOS::Media::PixelFormat::ARGB_8888)) {
494 return IMAGE_BAD_PARAMETER;
495 }
496 info->GetInnerAuxiliaryPictureInfo()->pixelFormat = static_cast<OHOS::Media::PixelFormat>(pixelFormat);
497 return IMAGE_SUCCESS;
498 }
499
500 MIDK_EXPORT
OH_AuxiliaryPictureInfo_Release(OH_AuxiliaryPictureInfo * info)501 Image_ErrorCode OH_AuxiliaryPictureInfo_Release(OH_AuxiliaryPictureInfo *info)
502 {
503 if (info == nullptr) {
504 return IMAGE_BAD_PARAMETER;
505 }
506 delete info;
507 info = nullptr;
508 return IMAGE_SUCCESS;
509 }
510
511 #ifdef __cplusplus
512 };
513 #endif
514