1.完善错误日志

2.修复部分imagesource没有release的问题

Signed-off-by: madixin <madixin@huawei.com>
This commit is contained in:
madixin 2024-11-15 10:05:23 +08:00
parent 30c327747b
commit 5296bf7a1d
4 changed files with 32 additions and 19 deletions

View File

@ -1,7 +1,8 @@
## 3.2.0
## 3.2.0-rc.3
- Fix bug: PixelMap size exceeds the maximum value of memory cache and is not cached
- Dealing with exception scenarios where imageSource.getImageInfo return undefined
- Fix inability to parse Resource format images of other modules
- Improve the error logs
## 3.2.0-rc.2
- Added callback information for image loading

View File

@ -14,7 +14,7 @@
"main": "index.ets",
"repository": "https://gitee.com/openharmony-tpc/ImageKnife",
"type": "module",
"version": "3.2.0",
"version": "3.2.0-rc.3",
"dependencies": {
"@ohos/gpu_transform": "^1.0.2"
},

View File

@ -339,7 +339,7 @@ export class ImageKnifeDispatcher {
let pixelmap = requestJobResult.pixelMap;
if (pixelmap === undefined) {
LogUtil.log('ImageKnife_DataTime_getAndShowImage_CallBack.pixelmap undefined:'+currentRequest.imageKnifeOption.loadSrc)
LogUtil.error('ImageKnife_DataTime_getAndShowImage_CallBack.pixelmap undefined:'+currentRequest.imageKnifeOption.loadSrc + " error: " + requestJobResult.loadFail)
requestList.forEach((requestWithSource: ImageKnifeRequestWithSource) => {
// 回调请求失败
if (requestWithSource.source === ImageKnifeRequestSource.SRC &&

View File

@ -125,7 +125,8 @@ export class ImageKnifeLoader {
let imageInfoSync = imageSource.getImageInfoSync()
if (imageInfoSync == undefined){
ImageKnifeLoader.makeEmptyResult(request, "Fail to get image info of imageSource")
imageSource.release()
ImageKnifeLoader.makeEmptyResult(request, 'getImageInfoSync failed')
return
}
let size = imageInfoSync.size
@ -138,7 +139,8 @@ export class ImageKnifeLoader {
ImageKnifeLoader.getDownsamplerDecodingOptions(typeValue, request, size, ImageKnifeRequestSource.SRC)
}
} catch (err) {
ImageKnifeLoader.makeEmptyResult(request, err)
imageSource.release()
ImageKnifeLoader.makeEmptyResult(request, 'getDownsamplerDecodingOptions failed:' + err)
return
}
timeInfo.decodeStartTime = Date.now();
@ -151,7 +153,8 @@ export class ImageKnifeLoader {
}).catch((error: BusinessError) => {
timeInfo.decodeEndTime = Date.now();
imageSource.release()
ImageKnifeLoader.makeEmptyResult(request,JSON.stringify(error), ImageKnifeLoader.assembleError(callBackData, LoadPhase.PHASE_CREATE_PIXEL_MAP, LoadPixelMapCode.IMAGE_DECODE_ERROR_CODE))
ImageKnifeLoader.makeEmptyResult(request, 'createPixelMap failed:' + JSON.stringify(error),
ImageKnifeLoader.assembleError(callBackData, LoadPhase.PHASE_CREATE_PIXEL_MAP, LoadPixelMapCode.IMAGE_DECODE_ERROR_CODE))
return
})
if (request.requestSource === ImageKnifeRequestSource.SRC && request.transformation !== undefined && resPixelmap !== undefined) {
@ -162,11 +165,11 @@ export class ImageKnifeLoader {
try {
resPixelmap?.setTransferDetached(true)
} catch (e) {
LogUtil.error('PixelMap setTransferDetached err:'+JSON.stringify(e))
LogUtil.error('PixelMap setTransferDetached failed:' + JSON.stringify(e))
}
//获取各个pixelMap的大小
if (resPixelmap && typeof resPixelmap !== 'string') {
if (resPixelmap !== undefined) {
let decodeImages: DecodeImageInfo[] = [];
let size = (resPixelmap as PixelMap).getImageInfoSync().size;
let decodeImage: DecodeImageInfo = {
@ -201,7 +204,8 @@ export class ImageKnifeLoader {
let imageInfoSync = imageSource.getImageInfoSync()
if (imageInfoSync == undefined){
ImageKnifeLoader.makeEmptyResult(request, "Fail to get image info of imageSource")
imageSource.release()
ImageKnifeLoader.makeEmptyResult(request, 'getImageInfoSync failed')
return
}
let size = imageInfoSync.size
@ -224,7 +228,8 @@ export class ImageKnifeLoader {
opts = ImageKnifeLoader.getDownsamplerDecodingOptions(typeValue, request, size)
}
} catch (err) {
ImageKnifeLoader.makeEmptyResult(request,err)
imageSource.release()
ImageKnifeLoader.makeEmptyResult(request,'getDownsamplerDecodingOptions failed:' + err)
return
}
timeInfo.decodeStartTime = Date.now();
@ -236,12 +241,12 @@ export class ImageKnifeLoader {
try {
resPixelmap.setTransferDetached(true)
} catch (e) {
LogUtil.error('PixelMap setTransferDetached err:'+JSON.stringify(e))
LogUtil.error('PixelMap setTransferDetached failed:' + JSON.stringify(e))
}
}).catch((error: BusinessError) => {
timeInfo.decodeEndTime = Date.now();
imageSource.release()
ImageKnifeLoader.makeEmptyResult(request,JSON.stringify(error), ImageKnifeLoader.assembleError(callBackData, LoadPhase.PHASE_CREATE_PIXEL_MAP, LoadPixelMapCode.IMAGE_DECODE_ERROR_CODE))
ImageKnifeLoader.makeEmptyResult(request,'getImageInfoSync failed:' + JSON.stringify(error), ImageKnifeLoader.assembleError(callBackData, LoadPhase.PHASE_CREATE_PIXEL_MAP, LoadPixelMapCode.IMAGE_DECODE_ERROR_CODE))
return
})
@ -276,8 +281,9 @@ export class ImageKnifeLoader {
let frameCount = await imageSource.getFrameCount()
let imageInfoSync = imageSource.getImageInfoSync()
imageSource.release()
if (imageInfoSync == undefined){
ImageKnifeLoader.makeEmptyResult(request, "Fail to get image info of imageSource")
ImageKnifeLoader.makeEmptyResult(request, 'getImageInfoSync failed')
return
}
let size = imageInfoSync.size
@ -285,8 +291,6 @@ export class ImageKnifeLoader {
callBackData.imageWidth = size.width;
callBackData.imageHeight = size.height;
imageSource.release()
if(frameCount == undefined || frameCount == 1) {
} else {
timeInfo.decodeStartTime = Date.now()
@ -318,8 +322,15 @@ export class ImageKnifeLoader {
let decodingOptions: image.DecodingOptions = {
editable: request.requestSource === ImageKnifeRequestSource.SRC && request.transformation !== undefined ? true : false,
}
callBackData.imageWidth = imageSource.getImageInfoSync().size.width;
callBackData.imageHeight = imageSource.getImageInfoSync().size.height;
let imageInfoSync = imageSource.getImageInfoSync()
if (imageInfoSync == undefined){
imageSource.release()
ImageKnifeLoader.makeEmptyResult(request, 'getImageInfoSync failed')
return
}
callBackData.imageWidth = imageInfoSync.size.width;
callBackData.imageHeight = imageInfoSync.size.height;
let pixelMapList: Array<PixelMap> = []
let delayList: Array<number> = []
timeInfo.decodeStartTime = Date.now();
@ -351,7 +362,8 @@ export class ImageKnifeLoader {
}).catch((error: BusinessError) => {
imageSource.release()
timeInfo.decodeEndTime = Date.now();
ImageKnifeLoader.makeEmptyResult(request,JSON.stringify(error), ImageKnifeLoader.assembleError(callBackData,LoadPhase.PHASE_CREATE_PIXEL_MAP,LoadPixelMapCode.IMAGE_DECODE_ERROR_CODE))
ImageKnifeLoader.makeEmptyResult(request,'createPixelMapList failed:' + JSON.stringify(error),
ImageKnifeLoader.assembleError(callBackData,LoadPhase.PHASE_CREATE_PIXEL_MAP,LoadPixelMapCode.IMAGE_DECODE_ERROR_CODE))
return
})
callBackData.decodeImages = decodeImages;
@ -366,7 +378,7 @@ export class ImageKnifeLoader {
}
emitter.emit(Constants.CALLBACK_EMITTER + request.memoryKey, { data: { 'value': res } })
} else {
ImageKnifeLoader.makeEmptyResult(request,'ImageKnifeAnimatorComponent组件仅支持动态图', ImageKnifeLoader.assembleError(callBackData,LoadPhase.PHASE_PARSE_IAMGE,LoadPixelMapCode.IMAGE_FORMAT_ERROR_CODE))
ImageKnifeLoader.makeEmptyResult(request,'ImageKnifeAnimatorComponent not support format', ImageKnifeLoader.assembleError(callBackData,LoadPhase.PHASE_PARSE_IAMGE,LoadPixelMapCode.IMAGE_FORMAT_ERROR_CODE))
}
}
static getHeaderObj(request:RequestJobRequest){