1# multimedia子系统变更说明 2 3## cl.multimedia.1 Image.ImageSource.DecodingOptionsForPicture接口的desiredAuxiliaryPictures属性系统能力变更 4 5**访问级别** 6 7公开接口 8 9**变更原因** 10 11接口DecodingOptionsForPicture与属性desiredAuxiliaryPictures归属的系统能力不一致,会影响对接口支持系统能力情况的判断,需要将desiredAuxiliaryPictures的SystemCapability中的SystemCapability.Multimedia.Image.Core改为SystemCapability.Multimedia.Image.ImageSource。 12 13**变更影响** 14 15此变更为不兼容变更。 16对接口中属性的SystemCapability进行调整,对接口本身的使用方式无影响。 17 18变更前:DecodingOptionsForPicture接口的系统能力要求为“SystemCapability.Multimedia.Image.Core”。 19 20变更后:DecodingOptionsForPicture接口的系统能力要求为“SystemCapability.Multimedia.Image.ImageSource”。 21 22**起始 API Level** 23 2413 25 26**变更发生版本** 27 28从OpenHarmony 5.0.0.57版本开始。 29 30**变更的接口/组件** 31 32@ohos.multimedia.image中涉及修改的属性如下: 33 34| 接口名| 接口说明 | 属性名 | 属性说明 | 35| -------- | -------- | -------- | -------- | 36|image.ImageSource.DecodingOptionsForPicture|图像解码设置选项|desiredAuxiliaryPictures|设置AuxiliaryPicture类型,默认解码所有AuxiliaryPicture类型| 37 38 39**适配指导** 40 41接口中属性的SystemCapability正常应该与对应接口的SystemCapability一致。但如果代码中涉及调用canIUse()方法对本次变更涉及接口支持情况进行判断,则应修改canIUse()方法传入的SystemCapability,判断设备是否支持图片源解码解析能力需使用canIUse("SystemCapability.Multimedia.Image.ImageSource")。 42 43## cl.multimedia.2 image.Component.OH_AuxiliaryPictureNative_SetInfo()接口行为变更 44 45**访问级别** 46 47公开接口 48 49**变更原因** 50 51通过OH_AuxiliaryPictureNative_SetInfo设置辅助图信息时,会将辅助图信息中的size、pixelFormat等信息同步到pixelMap的ImageInfo中,需要对size和pixelFormat信息做合法校验,防止对pixelMap像素数据信息的越界访问。 52 53**变更影响** 54 55该变更为不兼容变更。 56 57变更前:OH_AuxiliaryPictureNative_SetInfo()接口设置辅助图信息时,对pixelFormat没有校验,都可以设置成功。 58 59变更后:OH_AuxiliaryPictureNative_SetInfo()接口设置辅助图信息时,若将存储像素字节数变大,则设置不成功,返回错误码401。例如将pixelFormat从RGBA_8888设置为RGBA_F16。 60 61**起始 API Level** 62 6313 64 65**变更发生版本** 66 67从OpenHarmony 5.0.0.57版本开始。 68 69**变更的接口/组件** 70 71picture_native.h下的接口: 72 73Image_ErrorCode OH_AuxiliaryPictureNative_SetInfo(OH_AuxiliaryPictureNative *auxiliaryPicture, OH_AuxiliaryPictureInfo *info); 74 75**适配指导** 76 77设置辅助图信息时,如果将存储像素字节数变大,则设置不成功,返回错误码401。 78 79```c++ 80size_t filePathSize = 1024; 81OH_ImageSourceNative* imageSource = nullptr; 82Image_ErrorCode image_ErrorCode = OH_ImageSourceNative_CreateFromUri("test.jpg", filePathSize, &imageSource); 83if (image_ErrorCode != Image_ErrorCode::IMAGE_SUCCESS || imageSource == nullptr) { 84 H_LOGE("OH_ImageSourceNative_CreateFromUri failed."); 85} 86OH_DecodingOptionsForPicture *opts = nullptr; 87OH_DecodingOptionsForPicture_Create(&opts); 88OH_PictureNative *picture = nullptr; 89image_ErrorCode = OH_ImageSourceNative_CreatePicture(imageSource, opts, &picture); 90OH_ImageSourceNative_Release(imageSource); 91OH_DecodingOptionsForPicture_Release(opts); 92if (image_ErrorCode != Image_ErrorCode::IMAGE_SUCCESS || picture == nullptr) { 93 H_LOGE("OH_ImageSourceNative_CreatePicture failed. image_ErrorCode=%{public}d", image_ErrorCode); 94} 95OH_AuxiliaryPictureNative *auxiliaryPicture = nullptr; 96image_ErrorCode = OH_PictureNative_GetAuxiliaryPicture( 97 picture, Image_AuxiliaryPictureType::AUXILIARY_PICTURE_TYPE_FRAGMENT_MAP, &auxiliaryPicture); 98if (image_ErrorCode != Image_ErrorCode::IMAGE_SUCCESS || auxiliaryPicture == nullptr) { 99 H_LOGE("OH_PictureNative_GetAuxiliaryPicture failed. image_ErrorCode=%{public}d", image_ErrorCode); 100} 101OH_AuxiliaryPictureInfo *auxInfo = nullptr; 102image_ErrorCode = OH_AuxiliaryPictureNative_GetInfo(auxiliaryPicture, &auxInfo); 103PIXEL_FORMAT newPixelFormat = PIXEL_FORMAT_RGBA_F16; 104OH_AuxiliaryPictureInfo_SetPixelFormat(auxInfo, newPixelFormat); 105image_ErrorCode = OH_AuxiliaryPictureNative_SetInfo(auxiliaryPicture, auxInfo); 106if (image_ErrorCode != Image_ErrorCode::IMAGE_SUCCESS || info == nullptr) { 107 H_LOGE("OH_AuxiliaryPictureNative_SetInfo failed. image_ErrorCode=%{public}d", image_ErrorCode); 108} 109OH_AuxiliaryPictureInfo_Release(auxInfo); 110OH_AuxiliaryPictureNative_Release(auxiliaryPicture); 111``` 112 113## cl.multimedia.3 image.Component.setAuxiliaryPictureInfo接口行为变更 114 115**访问级别** 116 117公开接口 118 119**变更原因** 120 121通过setAuxiliaryPictureInfo设置辅助图信息时,会将辅助图信息中的size、pixelFormat等信息同步到pixelMap的ImageInfo中,需要对size和pixelFormat信息做合法校验,防止对pixelMap像素数据信息的越界访问。 122 123**变更影响** 124 125该变更为不兼容变更。 126 127变更前:setAuxiliaryPictureInfo()接口设置辅助图信息时,对pixelFormat没有校验,都可以设置成功。 128 129变更后:setAuxiliaryPictureInfo()接口设置辅助图信息时,若将存储像素字节数变大,则设置不成功,返回错误码401。例如将pixelFormat从RGBA_8888设置为RGBA_F16。 130 131**起始 API Level** 132 13313 134 135**变更发生版本** 136 137从OpenHarmony 5.0.0.57版本开始。 138 139**变更的接口/组件** 140 141@ohos.multimedia.image.d.ts中涉及的接口如下: 142 143setAuxiliaryPictureInfo(info: AuxiliaryPictureInfo): void 144 145**适配指导** 146 147设置辅助图信息时,如果将存储像素字节数变大,则设置不成功,返回错误码401。 148 149```ts 150const context = getContext(this); 151const resourceMgr = context.resourceManager; 152const rawFile = await resourceMgr.getRawFileContent('test.jpg'); 153let imageSource: image.ImageSource = image.createImageSource(rawFile.buffer as ArrayBuffer); 154let options: image.DecodingOptionsForPicture = { 155 desiredAuxiliaryPictures: [image.AuxiliaryPictureType.FRAGMENT_MAP] 156}; 157try { 158 let picture: image.Picture = await imageSource.createPicture(options); 159 let auxiliaryPicture = picture.getAuxiliaryPicture(image.AuxiliaryPictureType.FRAGMENT_MAP); 160 let originInfo = auxiliaryPicture?.getAuxiliaryPictureInfo(); 161 console.info("CreatePicture", 'originInfo = ' + JSON.stringify(originInfo)); 162 let changedInfo: image.AuxiliaryPictureInfo = { 163 auxiliaryPictureType: image.AuxiliaryPictureType.FRAGMENT_MAP, 164 size: { height: 410, width: 3072 }, 165 rowStride: 3072 * 8, 166 pixelFormat: image.PixelMapFormat.RGBA_F16, 167 colorSpace: colorSpaceManager.create(colorSpaceManager.ColorSpace.DCI_P3), 168 }; 169 try { 170 auxiliaryPicture?.setAuxiliaryPictureInfo(changedInfo); 171 console.info("CreatePicture", ' changedInfo = ' + JSON.stringify(changedInfo)); 172 } catch (error) { 173 console.error("CreatePicture", 'setAuxiliaryPictureInfo', ` failed error.code: ` + JSON.stringify(error.code) 174 + ` error.message: ` + JSON.stringify(error.message)); 175 } 176} catch (err) { 177 console.error("CreatePicture", ' decode Picture failed !!!'); 178} 179``` 180