# Copyright (c) 2025 The WebRTC project authors. All Rights Reserved.
#
# Use of this source code is governed by a BSD-style license
# that can be found in the LICENSE file in the root of the source
# tree. An additional intellectual property rights grant can be found
# in the file PATENTS.  All contributing project authors may
# be found in the AUTHORS file in the root of the source tree.

import("../webrtc.gni")

audio_processing_unittests_resources = [
  "audio_processing/aec3/noop_ml_aec_model_for_testing.tflite",
  "audio_processing/agc/agc_audio.pcm",
  "audio_processing/agc/agc_no_circular_buffer.dat",
  "audio_processing/agc/agc_pitch_gain.dat",
  "audio_processing/agc/agc_pitch_lag.dat",
  "audio_processing/agc/agc_spectral_peak.dat",
  "audio_processing/agc/agc_vad.dat",
  "audio_processing/agc/agc_voicing_prob.dat",
  "audio_processing/agc/agc_with_circular_buffer.dat",
  "audio_processing/output_data_fixed.pb",
  "audio_processing/output_data_float.pb",
  "audio_processing/output_data_float_avx2.pb",
  "audio_processing/output_data_mac.pb",
  "audio_processing/transient/ajm-macbook-1-spke16m.pcm",
  "audio_processing/transient/audio16kHz.pcm",
  "audio_processing/transient/audio32kHz.pcm",
  "audio_processing/transient/audio48kHz.pcm",
  "audio_processing/transient/audio8kHz.pcm",
  "audio_processing/transient/detect16kHz.dat",
  "audio_processing/transient/detect32kHz.dat",
  "audio_processing/transient/detect48kHz.dat",
  "audio_processing/transient/detect8kHz.dat",
  "audio_processing/transient/double-utils.dat",
  "audio_processing/transient/float-utils.dat",
  "audio_processing/transient/suppressed16kHz.pcm",
  "audio_processing/transient/suppressed32kHz.pcm",
  "audio_processing/transient/suppressed8kHz.pcm",
  "audio_processing/transient/wpd0.dat",
  "audio_processing/transient/wpd1.dat",
  "audio_processing/transient/wpd2.dat",
  "audio_processing/transient/wpd3.dat",
  "audio_processing/transient/wpd4.dat",
  "audio_processing/transient/wpd5.dat",
  "audio_processing/transient/wpd6.dat",
  "audio_processing/transient/wpd7.dat",
  "far16_stereo.pcm",
  "far176_stereo.pcm",
  "far192_stereo.pcm",
  "far22_stereo.pcm",
  "far32_stereo.pcm",
  "far44_stereo.pcm",
  "far48_stereo.pcm",
  "far88_stereo.pcm",
  "far8_stereo.pcm",
  "far96_stereo.pcm",
  "near16_stereo.pcm",
  "near176_stereo.pcm",
  "near192_stereo.pcm",
  "near22_stereo.pcm",
  "near32_stereo.pcm",
  "near44_stereo.pcm",
  "near48_mono.pcm",
  "near48_stereo.pcm",
  "near88_stereo.pcm",
  "near8_stereo.pcm",
  "near96_stereo.pcm",
  "ref03.aecdump",
  "short_mixed_mono_48.dat",
  "short_mixed_mono_48.pcm",
  "short_mixed_mono_48_arm.dat",
  "short_mixed_stereo_48.dat",
  "short_mixed_stereo_48.pcm",
]

group("audio_processing_unittests_data") {
  data = audio_processing_unittests_resources
}
if (is_ios) {
  bundle_data("audio_processing_unittests_bundle_data") {
    testonly = true
    sources = audio_processing_unittests_resources
    outputs = [ "{{bundle_resources_dir}}/{{source_file_part}}" ]
  }
}

audio_coding_unittests_resources = [
  "audio_coding/neteq_opus.rtp",
  "audio_coding/neteq_opus_dtx.rtp",
  "audio_coding/neteq_universal_new.rtp",
  "audio_coding/speech_4_channels_48k_one_second.wav",
  "audio_coding/speech_mono_16kHz.pcm",
  "audio_coding/speech_mono_32_48kHz.pcm",
  "audio_coding/testfile16kHz.pcm",
  "audio_coding/testfile32kHz.pcm",
  "audio_coding/testfile_fake_stereo_32kHz.pcm",
  "audio_coding/teststereo32kHz.pcm",
  "near48_mono.pcm",
  "near48_stereo.pcm",
]

group("audio_coding_unittests_data") {
  data = audio_coding_unittests_resources
}
if (is_ios) {
  bundle_data("audio_coding_unittests_bundle_data") {
    testonly = true
    sources = audio_coding_unittests_resources
    outputs = [ "{{bundle_resources_dir}}/{{source_file_part}}" ]
  }
}

modules_unittests_resources = [
  "audio_device/audio_short16.pcm",
  "audio_device/audio_short44.pcm",
  "audio_device/audio_short48.pcm",
  "foreman_cif.yuv",
  "foreman_cif_short.yuv",
  "remote_bitrate_estimator/VideoSendersTest_BweTest_IncreasingChoke1_0_AST.bin",
  "remote_bitrate_estimator/VideoSendersTest_BweTest_IncreasingChoke1_0_TOF.bin",
  "remote_bitrate_estimator/VideoSendersTest_BweTest_IncreasingChoke1_1_AST.bin",
  "remote_bitrate_estimator/VideoSendersTest_BweTest_IncreasingChoke1_1_TOF.bin",
  "remote_bitrate_estimator/VideoSendersTest_BweTest_IncreasingChoke2_0_AST.bin",
  "remote_bitrate_estimator/VideoSendersTest_BweTest_IncreasingChoke2_0_TOF.bin",
  "remote_bitrate_estimator/VideoSendersTest_BweTest_IncreasingChoke2_1_AST.bin",
  "remote_bitrate_estimator/VideoSendersTest_BweTest_IncreasingChoke2_1_TOF.bin",
  "remote_bitrate_estimator/VideoSendersTest_BweTest_IncreasingDelay1_0_AST.bin",
  "remote_bitrate_estimator/VideoSendersTest_BweTest_IncreasingDelay1_0_TOF.bin",
  "remote_bitrate_estimator/VideoSendersTest_BweTest_IncreasingLoss1_0_AST.bin",
  "remote_bitrate_estimator/VideoSendersTest_BweTest_IncreasingLoss1_0_TOF.bin",
  "remote_bitrate_estimator/VideoSendersTest_BweTest_Multi1_1_AST.bin",
  "remote_bitrate_estimator/VideoSendersTest_BweTest_Multi1_1_TOF.bin",
  "remote_bitrate_estimator/VideoSendersTest_BweTest_SteadyChoke_0_AST.bin",
  "remote_bitrate_estimator/VideoSendersTest_BweTest_SteadyChoke_0_TOF.bin",
  "remote_bitrate_estimator/VideoSendersTest_BweTest_SteadyChoke_1_AST.bin",
  "remote_bitrate_estimator/VideoSendersTest_BweTest_SteadyChoke_1_TOF.bin",
  "remote_bitrate_estimator/VideoSendersTest_BweTest_SteadyDelay_0_AST.bin",
  "remote_bitrate_estimator/VideoSendersTest_BweTest_SteadyDelay_0_TOF.bin",
  "remote_bitrate_estimator/VideoSendersTest_BweTest_SteadyLoss_0_AST.bin",
  "remote_bitrate_estimator/VideoSendersTest_BweTest_SteadyLoss_0_TOF.bin",
  "remote_bitrate_estimator/VideoSendersTest_BweTest_UnlimitedSpeed_0_AST.bin",
  "remote_bitrate_estimator/VideoSendersTest_BweTest_UnlimitedSpeed_0_TOF.bin",
  "voice_engine/audio_tiny48.wav",
]

group("modules_unittests_data") {
  data = modules_unittests_resources
}
if (is_ios) {
  bundle_data("modules_unittests_bundle_data") {
    testonly = true
    sources = modules_unittests_resources
    outputs = [ "{{bundle_resources_dir}}/{{source_file_part}}" ]
  }
}

webrtc_perf_tests_resources = [
  "ConferenceMotion_1280_720_50.yuv",
  "audio_coding/speech_mono_16kHz.pcm",
  "audio_coding/speech_mono_32_48kHz.pcm",
  "audio_coding/testfile32kHz.pcm",
  "difficult_photo_1850_1110.yuv",
  "foreman_cif.yuv",
  "paris_qcif.yuv",
  "photo_1850_1110.yuv",
  "presentation_1850_1110.yuv",
  "voice_engine/audio_long16.pcm",
  "web_screenshot_1850_1110.yuv",
]

group("webrtc_perf_tests_data") {
  data = webrtc_perf_tests_resources
}
if (is_ios) {
  bundle_data("webrtc_perf_tests_bundle_data") {
    testonly = true
    sources = webrtc_perf_tests_resources
    outputs = [ "{{bundle_resources_dir}}/{{source_file_part}}" ]
  }
}

video_engine_tests_resources = [
  "ConferenceMotion_1280_720_50.yuv",
  "foreman_cif_short.yuv",
  "voice_engine/audio_long16.pcm",
]

group("video_engine_tests_data") {
  data = video_engine_tests_resources
}

scenario_config_resources = [
  "difficult_photo_1850_1110.yuv",
  "photo_1850_1110.yuv",
  "presentation_1850_1110.yuv",
  "web_screenshot_1850_1110.yuv",
]

group("scenario_config_resources") {
  data = scenario_config_resources
}
if (is_ios) {
  bundle_data("scenario_config_resources_bundle_data") {
    testonly = true
    sources = scenario_config_resources
    outputs = [ "{{bundle_resources_dir}}/{{source_file_part}}" ]
  }
}

video_coding_tests_resources = [
  "foreman_128x96.yuv",
  "foreman_160x120.yuv",
  "foreman_176x144.yuv",
  "foreman_240x136.yuv",
  "foreman_320x240.yuv",
  "foreman_480x272.yuv",
  "foreman_cif.yuv",
  "photo_1850_1110.yuv",
]
if (!is_android) {
  video_coding_tests_resources += [
    "ConferenceMotion_1280_720_50.yuv",
    "FourPeople_1280x720_30.yuv",
  ]
}

group("video_coding_tests_data") {
  data = video_coding_tests_resources
}
if (is_ios) {
  bundle_data("video_coding_tests_bundle_data") {
    testonly = true
    sources = video_coding_tests_resources
    outputs = [ "{{bundle_resources_dir}}/{{source_file_part}}" ]
  }
}

rtc_unittests_resources = [
  "ConferenceMotion_1280_720_50.yuv",
  "FourPeople_1280x720_30.yuv",
  "difficult_photo_1850_1110.yuv",
  "presentation_1850_1110.yuv",
  "reference_less_video_test_file.y4m",
  "reference_video_640x360_30fps.y4m",
  "web_screenshot_1850_1110.yuv",
]

group("rtc_unittests_data") {
  data = rtc_unittests_resources
}
if (is_ios) {
  bundle_data("rtc_unittests_bundle_data") {
    testonly = true
    sources = rtc_unittests_resources
    outputs = [ "{{bundle_resources_dir}}/{{source_file_part}}" ]
  }
}
