Returns -1 for frameCount before until animated image loading finished. 45/310845/2
authorSeungho Baek <sbsh.baek@samsung.com>
Thu, 9 May 2024 02:52:35 +0000 (11:52 +0900)
committerSeungho Baek <sbsh.baek@samsung.com>
Thu, 9 May 2024 05:32:03 +0000 (14:32 +0900)
Change-Id: I368d076116b8e9716d2b3ce0f64a42c559585823
Signed-off-by: Seungho Baek <sbsh.baek@samsung.com>
automated-tests/src/dali-toolkit/utc-Dali-AnimatedImageVisual.cpp
dali-toolkit/internal/visuals/animated-image/animated-image-visual.cpp

index 4535413..ba02bef 100644 (file)
@@ -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<int>(), 4, TEST_LOCATION);
+  DALI_TEST_EQUALS(value->Get<int>(), -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<int>(), 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<int>(), -1, Math::MACHINE_EPSILON_100, TEST_LOCATION);
+
+  DummyControl      actor     = DummyControl::New(true);
+  DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(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<int>(), -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<int>(), 4, Math::MACHINE_EPSILON_100, TEST_LOCATION);
+
+  END_TEST;
+}
index a3991c6..60c0579 100644 (file)
@@ -345,26 +345,23 @@ void AnimatedImageVisual::DoCreatePropertyMap(Property::Map& map) const
   map.Insert(Toolkit::DevelImageVisual::Property::LOOP_COUNT, static_cast<int>(mLoopCount));
   map.Insert(Toolkit::DevelImageVisual::Property::CURRENT_FRAME_NUMBER, (mImageCache) ? static_cast<int32_t>(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<int>(frameCount) : -1);
+  map.Insert(Toolkit::DevelImageVisual::Property::TOTAL_FRAME_NUMBER, static_cast<int>(frameCount));
 
   map.Insert(Toolkit::DevelImageVisual::Property::STOP_BEHAVIOR, mStopBehavior);