diff --git a/CHANGELOG.md b/CHANGELOG.md index 401950f..6e6eed0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -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 diff --git a/library/oh-package.json5 b/library/oh-package.json5 index a3c232d..13b0406 100644 --- a/library/oh-package.json5 +++ b/library/oh-package.json5 @@ -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" }, diff --git a/library/src/main/ets/ImageKnifeDispatcher.ets b/library/src/main/ets/ImageKnifeDispatcher.ets index c95f54d..7121169 100644 --- a/library/src/main/ets/ImageKnifeDispatcher.ets +++ b/library/src/main/ets/ImageKnifeDispatcher.ets @@ -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 && diff --git a/library/src/main/ets/ImageKnifeLoader.ets b/library/src/main/ets/ImageKnifeLoader.ets index 70e5fb9..0532367 100644 --- a/library/src/main/ets/ImageKnifeLoader.ets +++ b/library/src/main/ets/ImageKnifeLoader.ets @@ -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 = [] let delayList: Array = [] 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){