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