2 * Copyright (c) 2015 Samsung Electronics Co., Ltd.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
20 #include <dali-toolkit-test-suite-utils.h>
21 #include <dali-toolkit/dali-toolkit.h>
22 #include <dali-toolkit/public-api/controls/video-view/video-view.h>
25 using namespace Dali::Toolkit;
29 const char* const TEST_FILE( "test.mp4" );
30 const char* const VOLUME_LEFT( "volumeLeft" );
31 const char* const VOLUME_RIGHT( "volumeRight" );
32 const char* const RENDERING_TYPE( "renderingTarget" );
34 const char* VERTEX_SHADER = DALI_COMPOSE_SHADER(
35 attribute mediump vec2 aPosition;\n
36 varying mediump vec2 vTexCoord;\n
37 uniform mediump mat4 uMvpMatrix;\n
38 uniform mediump vec3 uSize;\n
42 mediump vec4 vertexPosition = vec4(aPosition, 0.0, 1.0);\n
43 vertexPosition.xyz *= uSize;\n
44 vertexPosition = uMvpMatrix * vertexPosition;\n
46 vTexCoord = aPosition + vec2(0.5);\n
47 gl_Position = vertexPosition;\n
51 const char* fragmentShaderPrefix( "#extension GL_OES_EGL_image_external:require\n" );
52 const char* FRAGMENT_SHADER = DALI_COMPOSE_SHADER(
53 varying mediump vec2 vTexCoord;\n
54 uniform samplerExternalOES sTexture;\n
55 uniform lowp vec4 uColor;\n
59 gl_FragColor = texture2D( sTexture, vTexCoord ) * uColor;\n
65 void video_view_startup(void)
67 test_return_value = TET_UNDEF;
70 void video_view_cleanup(void)
72 test_return_value = TET_PASS;
75 // Negative test case for a method
76 int UtcDaliVideoViewUninitialized(void)
78 ToolkitTestApplication application;
79 tet_infoline(" UtcDaliVideoViewUninitialized");
81 Toolkit::VideoView view;
85 // New() must be called to create a VideoView or it wont be valid.
86 Actor a = Actor::New();
88 DALI_TEST_CHECK( false );
90 catch (Dali::DaliException& e)
92 // Tests that a negative test of an assertion succeeds
93 DALI_TEST_PRINT_ASSERT( e );
94 DALI_TEST_CHECK(!view);
99 // Positive test case for a method
100 int UtcDaliVideoViewNew(void)
102 ToolkitTestApplication application;
103 tet_infoline(" UtcDaliVideoViewNew");
105 Toolkit::VideoView view = Toolkit::VideoView::New();
106 DALI_TEST_CHECK( view );
108 Toolkit::VideoView view2 = Toolkit::VideoView::New( "" );
109 DALI_TEST_CHECK( view2 );
113 // Positive test case for a method
114 int UtcDaliVideoViewDownCast(void)
116 ToolkitTestApplication application;
117 tet_infoline(" UtcDaliVideoViewDownCast");
119 Toolkit::VideoView view = Toolkit::VideoView::New();
120 BaseHandle handle(view);
122 Toolkit::VideoView view2 = Toolkit::VideoView::DownCast( handle );
123 DALI_TEST_CHECK( view );
124 DALI_TEST_CHECK( view2 );
125 DALI_TEST_CHECK( view == view2 );
129 // Positive test case for a method
130 int UtcDaliVideoViewProperty1(void)
132 ToolkitTestApplication application;
133 tet_infoline(" UtcDaliVideoViewProperty1");
135 Toolkit::VideoView view = Toolkit::VideoView::New();
136 DALI_TEST_CHECK( view );
139 view.SetProperty( VideoView::Property::VIDEO, TEST_FILE );
140 Property::Value val = view.GetProperty( VideoView::Property::VIDEO );
141 DALI_TEST_CHECK( val.Get( file ) );
142 DALI_TEST_CHECK( file == TEST_FILE );
146 // Positive test case for a method
147 int UtcDaliVideoViewProperty1b(void)
149 ToolkitTestApplication application;
150 tet_infoline(" UtcDaliVideoViewProperty1");
152 Toolkit::VideoView view = Toolkit::VideoView::New();
153 DALI_TEST_CHECK( view );
154 Stage stage = Stage::GetCurrent();
159 view.SetProperty( VideoView::Property::VIDEO, Property::Map()
160 .Add("rendererType", "IMAGE")
161 .Add("url", "video.mpg") // Note, videoView doesn't use this url
162 .Add("RENDERING_TARGET", "windowSurfaceTarget" )
164 .Add("height", 100) );
168 Property::Value val = view.GetProperty( VideoView::Property::VIDEO );
169 Property::Map* resultMap = val.GetMap();
171 DALI_TEST_CHECK( resultMap );
172 Property::Value* value = resultMap->Find("url");
173 DALI_TEST_CHECK( value );
174 DALI_TEST_EQUALS( value->Get<std::string>(), "video.mpg", TEST_LOCATION );
176 stage.Remove( view );
181 int UtcDaliVideoViewProperty2(void)
183 ToolkitTestApplication application;
184 tet_infoline(" UtcDaliVideoViewProperty2");
186 Toolkit::VideoView view = Toolkit::VideoView::New();
187 DALI_TEST_CHECK( view );
190 Property::Value val = view.GetProperty( VideoView::Property::LOOPING );
191 DALI_TEST_CHECK( val.Get( looping ) );
192 DALI_TEST_CHECK( !looping );
194 view.SetProperty( VideoView::Property::LOOPING, true );
195 val = view.GetProperty( VideoView::Property::LOOPING );
196 DALI_TEST_CHECK( val.Get( looping ) );
197 DALI_TEST_CHECK( looping );
201 int UtcDaliVideoViewProperty3(void)
203 ToolkitTestApplication application;
204 tet_infoline(" UtcDaliVideoViewProperty3");
206 Toolkit::VideoView view = Toolkit::VideoView::New();
207 DALI_TEST_CHECK( view );
210 Property::Value val = view.GetProperty( VideoView::Property::MUTED );
211 DALI_TEST_CHECK( val.Get( muted ) );
212 DALI_TEST_CHECK( !muted );
214 view.SetProperty( VideoView::Property::MUTED, true );
215 val = view.GetProperty( VideoView::Property::MUTED );
216 DALI_TEST_CHECK( val.Get( muted ) );
217 DALI_TEST_CHECK( muted );
222 int UtcDaliVideoViewProperty4(void)
224 ToolkitTestApplication application;
225 tet_infoline(" UtcDaliVideoViewProperty4");
227 Toolkit::VideoView view = Toolkit::VideoView::New();
228 DALI_TEST_CHECK( view );
234 map.Insert( VOLUME_LEFT, 0.5f );
235 map.Insert( VOLUME_RIGHT, 0.5f );
237 view.SetProperty( VideoView::Property::VOLUME, map );
238 Property::Value val = view.GetProperty( VideoView::Property::VOLUME );
241 DALI_TEST_CHECK( val.Get( map2 ) );
243 Property::Value* volumeLeft = map2.Find( VOLUME_LEFT );
244 Property::Value* volumeRight = map2.Find( VOLUME_RIGHT );
246 DALI_TEST_CHECK( volumeLeft && volumeLeft->Get( left ) );
247 DALI_TEST_CHECK( volumeRight && volumeRight->Get( right ) );
248 DALI_TEST_CHECK( left == 0.5f );
249 DALI_TEST_CHECK( right == 0.5f );
254 int UtcDaliVideoViewCopyAndAssignment(void)
256 ToolkitTestApplication application;
258 VideoView view = Toolkit::VideoView::New();
259 DALI_TEST_CHECK( view );
261 VideoView copy( view );
262 DALI_TEST_CHECK( view == copy );
265 DALI_TEST_CHECK( !assign );
268 DALI_TEST_CHECK( assign == view );
273 int UtcDaliVideoViewTypeRegistry(void)
275 ToolkitTestApplication application;
277 TypeRegistry typeRegistry = TypeRegistry::Get();
278 DALI_TEST_CHECK( typeRegistry );
280 TypeInfo typeInfo = typeRegistry.GetTypeInfo( "VideoView" );
281 DALI_TEST_CHECK( typeInfo );
283 BaseHandle handle = typeInfo.CreateInstance();
284 DALI_TEST_CHECK( handle );
286 VideoView view = VideoView::DownCast( handle );
287 DALI_TEST_CHECK( view );
292 int UtcDaliVideoViewMethodsForCoverage(void)
294 ToolkitTestApplication application;
296 VideoView videoView = VideoView::New();
297 DALI_TEST_CHECK( videoView );
302 videoView.Forward(10);
303 videoView.Backward(10);
304 VideoView::VideoViewSignalType& signal = videoView.FinishedSignal();
305 DALI_TEST_EQUALS( 0, signal.GetConnectionCount(), TEST_LOCATION );
310 int UtcDaliVideoViewMethodsForRenderType(void)
312 ToolkitTestApplication application;
313 VideoView videoView = VideoView::New();
314 DALI_TEST_CHECK( videoView );
316 Property::Map windowSurfaceTarget;
317 Property::Map nativeImageTarget;
319 windowSurfaceTarget.Insert( RENDERING_TYPE, "windowSurfaceTarget" );
320 nativeImageTarget.Insert( RENDERING_TYPE, "nativeImageTarget" );
323 Property::Value value;
324 videoView.SetProperty( VideoView::Property::VIDEO, windowSurfaceTarget );
326 value = videoView.GetProperty( VideoView::Property::VIDEO );
327 DALI_TEST_CHECK( value.Get( map ) );
329 Property::Value* type = map.Find( RENDERING_TYPE );
330 DALI_TEST_CHECK( type );
331 DALI_TEST_EQUALS( "windowSurfaceTarget", type->Get<std::string>(), TEST_LOCATION );
333 videoView.SetProperty( VideoView::Property::VIDEO, nativeImageTarget );
335 value = videoView.GetProperty( VideoView::Property::VIDEO );
336 DALI_TEST_CHECK( value.Get( map ) );
337 type = map.Find( RENDERING_TYPE );
339 DALI_TEST_CHECK( type );
340 DALI_TEST_EQUALS( "nativeImageTarget", type->Get<std::string>(), TEST_LOCATION );
345 int UtcDaliVideoViewCustomShaderForCoverage(void)
347 ToolkitTestApplication application;
348 VideoView videoView = VideoView::New();
349 DALI_TEST_CHECK( videoView );
351 ToolkitApplication::DECODED_IMAGES_SUPPORTED = true;
353 videoView.SetProperty( Toolkit::VideoView::Property::UNDERLAY, false );
354 bool isUnderlay = videoView.GetProperty( Toolkit::VideoView::Property::UNDERLAY ).Get< bool >();
355 DALI_TEST_CHECK( !isUnderlay );
357 Stage::GetCurrent().Add( videoView );
358 videoView.SetProperty( VideoView::Property::VIDEO, "testvideo" );
360 Property::Map customShader;
361 customShader.Insert( "vertexShader", VERTEX_SHADER );
362 customShader.Insert( "fragmentShader", FRAGMENT_SHADER );
365 map.Insert( "shader", customShader );
367 videoView.SetProperty( VideoView::Property::VIDEO, map );
370 Property::Value value = videoView.GetProperty( VideoView::Property::VIDEO );
372 DALI_TEST_CHECK( !value.Get( map2 ) );
376 int UtcDaliVideoViewMethodsForCoverage2(void)
378 ToolkitTestApplication application;
379 VideoView videoView = VideoView::New();
380 DALI_TEST_CHECK( videoView );
382 Property::Map windowSurfaceTarget;
384 windowSurfaceTarget.Insert( RENDERING_TYPE, "windowSurfaceTarget" );
386 Stage::GetCurrent().Add( videoView );
388 application.SendNotification();
389 application.Render();
392 Property::Value value;
393 videoView.SetProperty( VideoView::Property::VIDEO, windowSurfaceTarget );
395 value = videoView.GetProperty( VideoView::Property::VIDEO );
396 DALI_TEST_CHECK( value.Get( map ) );
398 Property::Value* type = map.Find( RENDERING_TYPE );
399 DALI_TEST_CHECK( type );
400 DALI_TEST_EQUALS( "windowSurfaceTarget", type->Get<std::string>(), TEST_LOCATION );
402 Vector3 vector(100.0f, 100.0f, 0.0f);
404 DALI_TEST_CHECK(vector != videoView.GetCurrentSize());
405 videoView.SetSize( vector );
407 application.SendNotification();
408 application.Render();
410 // Check the size in the new frame
411 DALI_TEST_CHECK(vector == videoView.GetCurrentSize());
416 int UtcDaliVideoViewPropertyUnderlay(void)
418 ToolkitTestApplication application;
419 tet_infoline("UtcDaliVideoViewPropertyUnderlay");
420 ToolkitApplication::DECODED_IMAGES_SUPPORTED = true;
422 VideoView view = VideoView::New();
423 DALI_TEST_CHECK( view );
425 Stage::GetCurrent().Add( view );
428 application.SendNotification();
429 application.Render();
431 bool isUnderlay = view.GetProperty( Toolkit::VideoView::Property::UNDERLAY ).Get< bool >();
432 DALI_TEST_CHECK( isUnderlay );
435 view.SetProperty( Toolkit::VideoView::Property::UNDERLAY, false );
436 isUnderlay = view.GetProperty( Toolkit::VideoView::Property::UNDERLAY ).Get< bool >();
437 DALI_TEST_CHECK( !isUnderlay );
440 view.SetProperty( Toolkit::VideoView::Property::UNDERLAY, true );
441 isUnderlay = view.GetProperty( Toolkit::VideoView::Property::UNDERLAY ).Get< bool >();
442 DALI_TEST_CHECK( isUnderlay );
444 // If platform api doesn't provide any API or feature for decoded images of video,
445 // UNDERLAY should be true
446 ToolkitApplication::DECODED_IMAGES_SUPPORTED = false;
448 view.SetProperty( Toolkit::VideoView::Property::UNDERLAY, false );
449 isUnderlay = view.GetProperty( Toolkit::VideoView::Property::UNDERLAY ).Get< bool >();
450 DALI_TEST_CHECK( isUnderlay );
453 ToolkitApplication::DECODED_IMAGES_SUPPORTED = true;
455 view.SetProperty( Toolkit::VideoView::Property::UNDERLAY, true );
456 view.SetProperty( Toolkit::VideoView::Property::UNDERLAY, false );
457 isUnderlay = view.GetProperty( Toolkit::VideoView::Property::UNDERLAY ).Get< bool >();
458 DALI_TEST_CHECK( !isUnderlay );
465 int UtcDaliVideoViewPropertyPlayPosition(void)
467 ToolkitTestApplication application;
468 tet_infoline("UtcDaliVideoViewPropertyPlayPosition");
470 VideoView view = VideoView::New();
471 DALI_TEST_CHECK( view );
473 Stage::GetCurrent().Add( view );
476 application.SendNotification();
477 application.Render();
479 int playPos = view.GetProperty( Toolkit::VideoView::Property::PLAY_POSITION ).Get< int >();
480 DALI_TEST_CHECK( playPos == 0 );
482 view.SetProperty( Toolkit::VideoView::Property::PLAY_POSITION, 10 );
483 playPos = view.GetProperty( Toolkit::VideoView::Property::PLAY_POSITION ).Get< int >();
484 // Actually setting play position will be async
485 // Actual platform result may be different.
486 DALI_TEST_CHECK( playPos == 10 );
492 int UtcDaliVideoViewNew2(void)
494 ToolkitTestApplication application;
495 tet_infoline("UtcDaliVideoViewNew2");
497 VideoView view = VideoView::New( true );
498 DALI_TEST_CHECK( view );
500 Stage::GetCurrent().Add( view );
503 application.SendNotification();
504 application.Render();
506 VideoView view2 = VideoView::New( "", false );
507 DALI_TEST_CHECK( view2 );
509 Stage::GetCurrent().Add( view2 );
512 application.SendNotification();
513 application.Render();
518 int UtcDaliVideoViewPropertyDisplayMode(void)
520 ToolkitTestApplication application;
521 tet_infoline("UtcDaliVideoViewPropertyDisplayMode");
523 VideoView view = VideoView::New();
524 DALI_TEST_CHECK( view );
526 Stage::GetCurrent().Add( view );
529 application.SendNotification();
530 application.Render();
532 view.SetProperty( Toolkit::VideoView::Property::DISPLAY_MODE, Toolkit::VideoView::DisplayMode::DST_ROI );
533 int displayMode = view.GetProperty( Toolkit::VideoView::Property::DISPLAY_MODE ).Get< int >();
534 DALI_TEST_CHECK( displayMode == Toolkit::VideoView::DisplayMode::DST_ROI );
540 int UtcDaliVideoViewCustomShader(void)
542 ToolkitTestApplication application;
543 tet_infoline( "VideoView with custom shader" );
545 VideoView view = VideoView::New();
546 DALI_TEST_CHECK( view );
548 ToolkitApplication::DECODED_IMAGES_SUPPORTED = true;
550 view.SetProperty( Toolkit::VideoView::Property::UNDERLAY, false );
551 bool isUnderlay = view.GetProperty( Toolkit::VideoView::Property::UNDERLAY ).Get< bool >();
552 DALI_TEST_CHECK( !isUnderlay );
554 Stage::GetCurrent().Add( view );
555 view.SetProperty( VideoView::Property::VIDEO, "testvideo" );
557 /* insert custom shader */
558 Property::Map customShader;
559 std::string fragmentShaderString;
560 fragmentShaderString.reserve( strlen( fragmentShaderPrefix ) + strlen( FRAGMENT_SHADER ) );
561 fragmentShaderString.append( fragmentShaderPrefix );
562 fragmentShaderString.append( FRAGMENT_SHADER );
563 customShader.Insert( "vertexShader", VERTEX_SHADER );
564 customShader.Insert( "fragmentShader", fragmentShaderString );
567 map.Insert( "shader", customShader );
569 view.SetProperty( VideoView::Property::VIDEO, map );
571 /* do render for check custom shader */
572 Stage::GetCurrent().Add( view );
575 application.SendNotification();
576 application.Render();
579 DALI_TEST_CHECK( view.GetRendererCount() == 1u );
580 Renderer renderer = view.GetRendererAt( 0 );
581 Shader shader = renderer.GetShader();
582 DALI_TEST_CHECK( shader );
584 Property::Value value = shader.GetProperty(Shader::Property::PROGRAM);
585 Property::Map* shaderMap = value.GetMap();
586 DALI_TEST_CHECK( shaderMap );
588 Property::Value* fragment = shaderMap->Find( "fragment" ); // fragment key name from shader-impl.cpp
589 DALI_TEST_EQUALS( fragmentShaderString, fragment->Get<std::string>(), TEST_LOCATION );
591 Property::Value* vertex = shaderMap->Find( "vertex" ); // vertex key name from shader-impl.cpp
592 DALI_TEST_EQUALS( VERTEX_SHADER, vertex->Get<std::string>(), TEST_LOCATION );