• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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.ImageSource12
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