blob: e3b6b12f3ad4ef83f776e46caba0c2e081efeef7 [file] [log] [blame]
# Copyright 2016 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import("//build/fidl/fidl.gni")
import("//build/package.gni")
import("//build/testing/environments.gni")
declare_args() {
build_all_vp9_file_decoder_conformance_tests = false
}
# We have a separate package for each example to clarify the dependencies of
# each example.
package("use_media_decoder") {
testonly = true
deps = [
"use_media_decoder",
]
binaries = [
{
name = "use_media_decoder"
shell = true
},
]
meta = [
{
path = rebase_path("use_media_decoder/meta/use_media_decoder.cmx")
dest = "use_media_decoder.cmx"
},
]
}
#
# Tests that run on CQ.
#
package("use_h264_decoder_test") {
testonly = true
deps = [
"//garnet/examples/media/use_media_decoder:use_h264_decoder_test",
]
meta = [
{
path = rebase_path("use_media_decoder/meta/use_h264_decoder_test.cmx")
dest = "use_h264_decoder_test.cmx"
},
]
tests = [
{
# Should pass when run VIM2, astro, or QEMU.
name = "use_h264_decoder_test"
environments = [
vim2_env,
astro_env,
qemu_env,
]
},
]
resources = [
{
path = rebase_path(
"../../test_data/media/third_party/chromium_media_test_data/bear.h264")
dest = "bear.h264"
},
]
}
#
# Tests that don't run on CQ yet.
#
package("use_aac_decoder_test") {
testonly = true
deps = [
"//garnet/examples/media/use_media_decoder:use_aac_decoder_test",
]
tests = [
{
name = "use_aac_decoder_test"
environments = basic_envs
},
]
resources = [
{
path = rebase_path("use_media_decoder/test/test_audio.adts")
dest = "media_test_data/test_audio.adts"
},
]
meta = [
{
path = rebase_path("use_media_decoder/meta/use_aac_decoder_test.cmx")
dest = "use_aac_decoder_test.cmx"
},
]
}
package("use_vp9_decoder_test") {
testonly = true
deps = [
"//garnet/examples/media/use_media_decoder:use_vp9_decoder_test",
]
meta = [
{
path = rebase_path("use_media_decoder/meta/use_vp9_decoder_test.cmx")
dest = "use_vp9_decoder_test.cmx"
},
]
tests = [
{
# Soon, this should pass when run on VIM2 or astro, and fail otherwise.
#
# However, at the moment VP9 HW decode is not enabled, so this will fail
# everywhere for now. That's why this package is not included in tests
# yet.
#
# TODO(MTWN-224): Fix the above comment when VP9 HW decode is enabled.
name = "use_vp9_decoder_test"
environments = [
vim2_env,
astro_env,
]
},
]
resources = [
{
path = rebase_path(
"../../test_data/media/third_party/chromium_media_test_data/bear-vp9.ivf")
dest = "bear-vp9.ivf"
},
]
}
template("vp9_file_decoder_conformance_test") {
package(target_name) {
testonly = true
deps = [
"//garnet/examples/media/use_media_decoder:vp9_decoder_conformance_test",
]
meta = [
{
path = rebase_path(
"use_media_decoder/meta/vp9_decoder_conformance_test.cmx")
dest = "vp9_decoder_conformance_test.cmx"
},
]
tests = [
{
# Soon, this should pass when run on VIM2 or astro, and fail otherwise.
#
# TODO(dustingreen): This package is not yet included in tests, but
# should be soon.
name = "vp9_decoder_conformance_test"
environments = [
vim2_env,
astro_env,
]
},
]
resources = [
{
path = rebase_path(invoker.ivf_file)
dest = "vp9.ivf"
},
{
path = rebase_path(invoker.md5_file)
dest = "vp9.md5"
},
]
}
}
# Running this binary, the --http=<url> command-line parameter needs to be
# passed, and the binary won't verify the MD5. Instead it'll stream the URL
# data in, parse it as ivf, decode it, compute MD5, and output the MD5.
package("vp9_decoder_conformance_http") {
testonly = true
deps = [
"//garnet/examples/media/use_media_decoder:vp9_decoder_conformance_test",
]
meta = [
{
path =
rebase_path("use_media_decoder/meta/vp9_decoder_conformance_http.cmx")
dest = "vp9_decoder_conformance_http.cmx"
},
]
binaries = [
{
name = "vp9_decoder_conformance_http"
# We share the binary for now, but this could change.
source = "$root_out_dir/vp9_decoder_conformance_test"
},
]
}
# Put the below group of vp9 conformance tests last in the file. Otherwise,
# with the above __http package last in this file, the build complains about
# duplicate packages, at least when fx set with these:
# --args=build_all_vp9_file_decoder_conformance_tests=true \
# --with //garnet/examples/media:vp9_decoder_conformance_tests \
# --with //garnet/examples/media:vp9_decoder_conformance_test__http
_vp9_file_conformance_tests_group_deps = []
# This target makes sure the vp9_decoder_conformance_test executable builds and
# can verify an md5 hash of decompressed frames.
package_name = "vp9_decoder_conformance_test__bear-vp9"
vp9_file_decoder_conformance_test(package_name) {
ivf_file =
"../../test_data/media/third_party/chromium_media_test_data/bear-vp9.ivf"
md5_file = "use_media_decoder/test/bear-vp9.i420.md5"
}
_vp9_file_conformance_tests_group_deps += [ ":" + package_name ]
# build_all_vp9_file_decoder_conformance_tests is currently false by default.
# These tests currently require a directory of converted VP9 test streams which
# is not yet hosted on CIPD.
#
# The self-contained variants of these tests rely on having enough flash space
# for the whole input file, and running more than one large test per pave will
# tend to fail due to insufficient flash space (at the moment). Still, for
# debugging it's useful to be able to run this way, especially since re-building
# the code doesn't require re-copying the input file blob whose hash hasn't
# changed - and building tests this way avoids relying on a local http server.
#
# For automated testing, we instead use vp9_decoder_conformance_test__http
# (single target), which will fetch a .ivf file from a local http server and
# output it's MD5 hash to stdout. That target is driven by e2e test script
# running off-target that scrapts stdout for the MD5 and deteremines e2e test
# success/failure in the e2e test script, not on the target.
if (build_all_vp9_file_decoder_conformance_tests) {
testcases = read_file(
"../../test_data/media/third_party/webm_vp9_conformance_streams/test_cases_all.list",
"trim list lines")
foreach(testcase, testcases) {
# remove prefix
testcase = string_replace(testcase, "processed/", "")
# remove suffix
testcase_partial_path = string_replace(testcase, ".webm.ivf", "")
# don't have any "/" in the name
testcase = string_replace(testcase_partial_path, "/", "__")
# shorten profile string
testcase = string_replace(testcase, "Profile_0_8bit", "0")
testcase = string_replace(testcase, "Profile_2_10bit", "2")
# Downcase the only uppercase letters that actually exist; uppercase isn't
# allowed in package names.
testcase = string_replace(testcase, "X", "x")
package_name = "vp9_decoder_conformance_test__file__" + testcase
vp9_file_decoder_conformance_test(package_name) {
ivf_file = "../../test_data/media/third_party/webm_vp9_conformance_streams/processed/" + testcase_partial_path + ".webm.ivf"
md5_file = "../../test_data/media/third_party/webm_vp9_conformance_streams/decompressed_md5/" + testcase_partial_path + ".md5"
}
_vp9_file_conformance_tests_group_deps += [ ":" + package_name ]
}
}
group("vp9_decoder_conformance_tests") {
testonly = true
deps = _vp9_file_conformance_tests_group_deps
}