From: Seungho Baek Date: Thu, 9 May 2024 02:52:35 +0000 (+0900) Subject: Returns -1 for frameCount before until animated image loading finished. X-Git-Tag: dali_2.3.24~8 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F45%2F310845%2F2;p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git Returns -1 for frameCount before until animated image loading finished. Change-Id: I368d076116b8e9716d2b3ce0f64a42c559585823 Signed-off-by: Seungho Baek --- diff --git a/automated-tests/src/dali-toolkit/utc-Dali-AnimatedImageVisual.cpp b/automated-tests/src/dali-toolkit/utc-Dali-AnimatedImageVisual.cpp index 4535413..ba02bef 100644 --- a/automated-tests/src/dali-toolkit/utc-Dali-AnimatedImageVisual.cpp +++ b/automated-tests/src/dali-toolkit/utc-Dali-AnimatedImageVisual.cpp @@ -481,7 +481,7 @@ int UtcDaliAnimatedImageVisualGetPropertyMap04(void) value = resultMap.Find(Toolkit::DevelImageVisual::Property::TOTAL_FRAME_NUMBER, "totalFrameNumber"); DALI_TEST_CHECK(value); - DALI_TEST_EQUALS(value->Get(), 4, TEST_LOCATION); + DALI_TEST_EQUALS(value->Get(), -1, TEST_LOCATION); value = resultMap.Find(Toolkit::DevelVisual::Property::BORDERLINE_WIDTH, "borderlineWidth"); DALI_TEST_CHECK(value); @@ -1994,7 +1994,6 @@ int UtcDaliAnimatedImageVisualDesiredSize(void) END_TEST; } - int UtcDaliAnimatedImageVisualControlVisibilityChanged(void) { ToolkitTestApplication application; @@ -2150,4 +2149,53 @@ int UtcDaliAnimatedImageVisualWindowVisibilityChanged(void) DALI_TEST_EQUALS(value->Get(), 0, TEST_LOCATION); END_TEST; -} \ No newline at end of file +} + +int UtcDaliAnimatedImageVisualFrameCountBeforeLoadingFinished(void) +{ + ToolkitTestApplication application; + tet_infoline("UtcDaliAnimatedImageVisualFrameCountBeforeLoadingFinished"); + + Property::Map propertyMap; + propertyMap.Add(Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_IMAGE) + .Add(ImageVisual::Property::URL, TEST_GIF_FILE_NAME) + .Add(ImageVisual::Property::SYNCHRONOUS_LOADING, false); + + Visual::Base visual = VisualFactory::Get().CreateVisual(propertyMap); + DALI_TEST_CHECK(visual); + + Property::Map resultMap1; + visual.CreatePropertyMap(resultMap1); + Property::Value* value1 = resultMap1.Find(DevelImageVisual::Property::TOTAL_FRAME_NUMBER); + DALI_TEST_CHECK(value1); + DALI_TEST_EQUALS(value1->Get(), -1, Math::MACHINE_EPSILON_100, TEST_LOCATION); + + DummyControl actor = DummyControl::New(true); + DummyControlImpl& dummyImpl = static_cast(actor.GetImplementation()); + dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, visual); + + Property::Map resultMap2; + visual.CreatePropertyMap(resultMap2); + Property::Value* value2 = resultMap2.Find(DevelImageVisual::Property::TOTAL_FRAME_NUMBER); + DALI_TEST_CHECK(value2); + DALI_TEST_EQUALS(value2->Get(), -1, Math::MACHINE_EPSILON_100, TEST_LOCATION); + + Vector2 controlSize(20.f, 30.f); + actor.SetProperty(Actor::Property::SIZE, controlSize); + + application.GetScene().Add(actor); + + application.SendNotification(); + application.Render(); + + // Trigger count is 2 - load & render a frame + DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(2), true, TEST_LOCATION); + + Property::Map resultMap3; + visual.CreatePropertyMap(resultMap3); + Property::Value* value3 = resultMap3.Find(DevelImageVisual::Property::TOTAL_FRAME_NUMBER); + DALI_TEST_CHECK(value3); + DALI_TEST_EQUALS(value3->Get(), 4, Math::MACHINE_EPSILON_100, TEST_LOCATION); + + END_TEST; +} diff --git a/dali-toolkit/internal/visuals/animated-image/animated-image-visual.cpp b/dali-toolkit/internal/visuals/animated-image/animated-image-visual.cpp index a3991c6..60c0579 100644 --- a/dali-toolkit/internal/visuals/animated-image/animated-image-visual.cpp +++ b/dali-toolkit/internal/visuals/animated-image/animated-image-visual.cpp @@ -345,26 +345,23 @@ void AnimatedImageVisual::DoCreatePropertyMap(Property::Map& map) const map.Insert(Toolkit::DevelImageVisual::Property::LOOP_COUNT, static_cast(mLoopCount)); map.Insert(Toolkit::DevelImageVisual::Property::CURRENT_FRAME_NUMBER, (mImageCache) ? static_cast(mImageCache->GetCurrentFrameIndex()) : -1); - // 1. Get cached mFrameCount if mFrameCount != 0. - // 2. If we are not using animated image loading, ask to image cache. - // 2-1. If image cache return SINGLE_IMAGE_COUNT or less, It might not a valid value - // (since default frameCount of image cache is SINGLE_IMAGE_COUNT) - // So, let we ask to animated image loader again. - // 2-1-1. If animated image loader return 0, it means that it is not a valid animated image. - // 2-1-2. Otherwise, we can assume that it is valid frame count. - // 2-2. Otherwise, we can assume that it is valid frame count. - uint32_t frameCount = mFrameCount; + // This returns -1 until the loading is finished. + int32_t frameCount = mFrameCount; if(mImageCache && frameCount == 0) { frameCount = mImageCache->GetTotalFrameCount(); - if(frameCount <= SINGLE_IMAGE_COUNT && mAnimatedImageLoading) + if(frameCount <= SINGLE_IMAGE_COUNT && mAnimatedImageLoading && mAnimatedImageLoading.HasLoadingSucceeded()) { frameCount = mAnimatedImageLoading.GetImageCount(); } + else + { + frameCount = -1; + } } - map.Insert(Toolkit::DevelImageVisual::Property::TOTAL_FRAME_NUMBER, (frameCount >= SINGLE_IMAGE_COUNT) ? static_cast(frameCount) : -1); + map.Insert(Toolkit::DevelImageVisual::Property::TOTAL_FRAME_NUMBER, static_cast(frameCount)); map.Insert(Toolkit::DevelImageVisual::Property::STOP_BEHAVIOR, mStopBehavior);