1 /* 2 * Copyright (c) 2022-2023 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 16 #ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_IMAGE_APNG_APNG_IMAGE_OBJECT_H 17 #define FOUNDATION_ACE_FRAMEWORKS_CORE_IMAGE_APNG_APNG_IMAGE_OBJECT_H 18 19 #include "core/image/image_object.h" 20 #include "apng_image_player.h" 21 22 namespace OHOS::Ace { 23 class ApngImageObject : public ImageObject { 24 DECLARE_ACE_TYPE(ApngImageObject, ImageObject); 25 public: 26 using CancelableTask = CancelableCallback<void()>; 27 28 #ifndef USE_ROSEN_DRAWING ApngImageObject(ImageSourceInfo source,const Size & imageSize,int32_t frameCount,const sk_sp<SkData> & data,const RefPtr<PNGImageDecoder> & decoder)29 ApngImageObject( 30 ImageSourceInfo source, 31 const Size& imageSize, 32 int32_t frameCount, 33 const sk_sp<SkData>& data, 34 const RefPtr<PNGImageDecoder>& decoder) 35 : ImageObject(source, imageSize, frameCount), skData_(data) 36 { 37 skData_ = data; 38 apngDecoder_ = decoder; 39 } 40 #else ApngImageObject(ImageSourceInfo source,const Size & imageSize,int32_t frameCount,const std::shared_ptr<RSData> & data,const RefPtr<PNGImageDecoder> & decoder)41 ApngImageObject( 42 ImageSourceInfo source, 43 const Size& imageSize, 44 int32_t frameCount, 45 const std::shared_ptr<RSData>& data, 46 const RefPtr<PNGImageDecoder>& decoder) 47 : ImageObject(source, imageSize, frameCount), drawingData_(data) 48 { 49 drawingData_ = data; 50 apngDecoder_ = decoder; 51 } 52 #endif 53 54 void UploadToGpuForRender( 55 const WeakPtr<PipelineBase>& context, 56 const UploadSuccessCallback& successCallback, 57 const FailedCallback& failedCallback, 58 const Size& imageSize, 59 bool forceResize, 60 bool syncMode = false) override; 61 62 bool IsApng(); 63 Pause()64 void Pause() override 65 { 66 if (animatedPlayer_) { 67 LOGI("animated image Paused"); 68 animatedPlayer_->Pause(); 69 } 70 } 71 Resume()72 void Resume() override 73 { 74 if (animatedPlayer_) { 75 LOGI("animated image Resume"); 76 animatedPlayer_->Resume(); 77 } 78 } 79 ClearData()80 void ClearData() override 81 { 82 skData_ = nullptr; 83 } 84 Clone()85 RefPtr<ImageObject> Clone() override 86 { 87 return MakeRefPtr<ApngImageObject>(imageSource_, imageSize_, frameCount_, skData_, apngDecoder_); 88 } 89 90 private: 91 #ifndef USE_ROSEN_DRAWING 92 sk_sp<SkData> skData_; 93 #else 94 std::shared_ptr<RSData> drawingData_; 95 #endif 96 RefPtr<APngImagePlayer> animatedPlayer_; 97 RefPtr<PNGImageDecoder> apngDecoder_; 98 }; 99 100 } // namespace OHOS::Ace 101 102 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_IMAGE_APNG_APNG_IMAGE_OBJECT_H 103