1f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 2f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// found in the LICENSE file. 4f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 5f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "ppapi/tests/test_video_decoder.h" 6f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 7f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "ppapi/c/pp_errors.h" 8f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "ppapi/cpp/video_decoder.h" 9f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "ppapi/lib/gl/gles2/gl2ext_ppapi.h" 10f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "ppapi/tests/testing_instance.h" 11f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 12f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)REGISTER_TEST_CASE(VideoDecoder); 13f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 14f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)bool TestVideoDecoder::Init() { 15f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) video_decoder_interface_ = static_cast<const PPB_VideoDecoder_0_1*>( 16f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) pp::Module::Get()->GetBrowserInterface(PPB_VIDEODECODER_INTERFACE_0_1)); 17f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const int width = 16; 18f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const int height = 16; 19f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const int32_t attribs[] = {PP_GRAPHICS3DATTRIB_WIDTH, width, 20f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) PP_GRAPHICS3DATTRIB_HEIGHT, height, 21f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) PP_GRAPHICS3DATTRIB_NONE}; 22f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) graphics_3d_ = pp::Graphics3D(instance_, attribs); 23f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return video_decoder_interface_ && CheckTestingInterface(); 24f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 25f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 26f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)void TestVideoDecoder::RunTests(const std::string& filter) { 27f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) RUN_CALLBACK_TEST(TestVideoDecoder, Create, filter); 28f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 29f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 30f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)std::string TestVideoDecoder::TestCreate() { 31f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Test that Initialize fails with a bad Graphics3D resource. 32f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { 33f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) pp::VideoDecoder video_decoder(instance_); 34f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ASSERT_FALSE(video_decoder.is_null()); 35f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 36f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) TestCompletionCallback callback(instance_->pp_instance(), callback_type()); 37f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) pp::Graphics3D null_graphics_3d; 381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci callback.WaitForResult( 391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci video_decoder.Initialize(null_graphics_3d, 401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci PP_VIDEOPROFILE_VP8_ANY, 411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci PP_HARDWAREACCELERATION_WITHFALLBACK, 421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci callback.GetCallback())); 43f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ASSERT_EQ(PP_ERROR_BADRESOURCE, callback.result()); 44f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 45f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Test that Initialize fails with a bad profile enum value. 46f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { 47f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) pp::VideoDecoder video_decoder(instance_); 48f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) TestCompletionCallback callback(instance_->pp_instance(), callback_type()); 49f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const PP_VideoProfile kInvalidProfile = static_cast<PP_VideoProfile>(-1); 501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci callback.WaitForResult( 511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci video_decoder.Initialize(graphics_3d_, 521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci kInvalidProfile, 531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci PP_HARDWAREACCELERATION_WITHFALLBACK, 541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci callback.GetCallback())); 55f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ASSERT_EQ(PP_ERROR_BADARGUMENT, callback.result()); 56f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 57f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Test that Initialize succeeds if we can create a Graphics3D resources and 58f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // if we allow software fallback to VP8, which should always be supported. 59f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (!graphics_3d_.is_null()) { 60f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) pp::VideoDecoder video_decoder(instance_); 61f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) TestCompletionCallback callback(instance_->pp_instance(), callback_type()); 621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci callback.WaitForResult( 631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci video_decoder.Initialize(graphics_3d_, 641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci PP_VIDEOPROFILE_VP8_ANY, 651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci PP_HARDWAREACCELERATION_WITHFALLBACK, 661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci callback.GetCallback())); 67f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ASSERT_EQ(PP_OK, callback.result()); 68f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 69f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 70f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) PASS(); 71f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 72