# Copyright 2014 The Cobalt Authors. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# This is a sample sandbox application for experimenting with the Cobalt
# media/renderer interface.

{
  'variables': {
    'has_zzuf': '<!(python ../../../build/dir_exists.py ../../../third_party/zzuf)',
  },
  'targets': [
    # This target can choose the correct media dependency.
    {
      'target_name': 'media',
      'type': 'static_library',
      'conditions': [
        ['cobalt_media_source_2016==1', {
          'dependencies': [
            '<(DEPTH)/cobalt/media/media2.gyp:media2',
          ],
        }, {
          'dependencies': [
            '<(DEPTH)/cobalt/media/media.gyp:media',
          ],
        }],
      ],
    },

    # This target will build a sandbox application that allows for easy
    # experimentation with the media interface on any platform.  This can
    # also be useful for visually inspecting the output that the Cobalt
    # media stack is producing.
    {
      'target_name': 'web_media_player_sandbox',
      'type': '<(final_executable_type)',
      'sources': [
        'format_guesstimator.cc',
        'format_guesstimator.h',
        'media_sandbox.cc',
        'media_sandbox.h',
        'web_media_player_helper.cc',
        'web_media_player_helper.h',
        'web_media_player_sandbox.cc',
      ],
      'dependencies': [
        'media',
        '<(DEPTH)/cobalt/base/base.gyp:base',
        # Use test data from demos to avoid keeping two copies of video files.
        '<(DEPTH)/cobalt/demos/demos.gyp:copy_demos',
        '<(DEPTH)/cobalt/loader/loader.gyp:loader',
        '<(DEPTH)/cobalt/network/network.gyp:network',
        '<(DEPTH)/cobalt/renderer/renderer.gyp:renderer',
        '<(DEPTH)/cobalt/system_window/system_window.gyp:system_window',
        '<(DEPTH)/cobalt/trace_event/trace_event.gyp:trace_event',
        '<(DEPTH)/googleurl/googleurl.gyp:googleurl',
        '<@(cobalt_platform_dependencies)',
      ],
    },

    {
      'target_name': 'web_media_player_sandbox_deploy',
      'type': 'none',
      'dependencies': [
        'web_media_player_sandbox',
      ],
      'variables': {
        'executable_name': 'web_media_player_sandbox',
      },
      'includes': [ '<(DEPTH)/starboard/build/deploy.gypi' ],
    },
  ],
  'conditions': [
    ['sb_media_platform == "starboard" and cobalt_media_source_2016==1', {
      'targets': [
        {
          'target_name': 'media2_sandbox',
          'type': '<(final_executable_type)',
          'sources': [
            'media2_sandbox.cc',
          ],
          'dependencies': [
            '<(DEPTH)/cobalt/base/base.gyp:base',
            '<(DEPTH)/cobalt/math/math.gyp:math',
            '<(DEPTH)/cobalt/media/media2.gyp:media2',
          ],
        },
        {
          'target_name': 'media2_sandbox_deploy',
          'type': 'none',
          'dependencies': [
            'media2_sandbox',
          ],
          'variables': {
            'executable_name': 'media2_sandbox',
          },
          'includes': [ '<(DEPTH)/starboard/build/deploy.gypi' ],
        },
      ],
    }],
    ['OS == "starboard" and has_zzuf == "True" and cobalt_media_source_2016!=1', {
      'targets': [
        # This target will build a sandbox application that allows for fuzzing
        # decoder.
        {
          'target_name': 'raw_video_decoder_fuzzer',
          'type': '<(final_executable_type)',
          'sources': [
            'fuzzer_app.cc',
            'fuzzer_app.h',
            'media_sandbox.cc',
            'media_sandbox.h',
            'media_source_demuxer.cc',
            'media_source_demuxer.h',
            'raw_video_decoder_fuzzer.cc',
            'zzuf_fuzzer.cc',
            'zzuf_fuzzer.h',
          ],
          'dependencies': [
            '<(DEPTH)/cobalt/base/base.gyp:base',
            # Use test data from demos to avoid keeping two copies of video files.
            '<(DEPTH)/cobalt/demos/demos.gyp:copy_demos',
            '<(DEPTH)/cobalt/loader/loader.gyp:loader',
            '<(DEPTH)/cobalt/media/media.gyp:media',
            '<(DEPTH)/cobalt/network/network.gyp:network',
            '<(DEPTH)/cobalt/renderer/renderer.gyp:renderer',
            '<(DEPTH)/cobalt/system_window/system_window.gyp:system_window',
            '<(DEPTH)/cobalt/trace_event/trace_event.gyp:trace_event',
            '<(DEPTH)/googleurl/googleurl.gyp:googleurl',
            '<(DEPTH)/third_party/zzuf/zzuf.gyp:zzuf',
          ],
        },

        {
          'target_name': 'raw_video_decoder_fuzzer_deploy',
          'type': 'none',
          'dependencies': [
            'raw_video_decoder_fuzzer',
          ],
          'variables': {
            'executable_name': 'raw_video_decoder_fuzzer',
          },
          'includes': [ '<(DEPTH)/starboard/build/deploy.gypi' ],
        },

        # This target will build a sandbox application that allows for fuzzing
        # shell demuxers.
        {
          'target_name': 'shell_demuxer_fuzzer',
          'type': '<(final_executable_type)',
          'sources': [
            'fuzzer_app.cc',
            'fuzzer_app.h',
            'in_memory_data_source.cc',
            'in_memory_data_source.h',
            'media_sandbox.cc',
            'media_sandbox.h',
            'shell_demuxer_fuzzer.cc',
            'zzuf_fuzzer.cc',
            'zzuf_fuzzer.h',
          ],
          'dependencies': [
            '<(DEPTH)/cobalt/base/base.gyp:base',
            # Use test data from demos to avoid keeping two copies of video files.
            '<(DEPTH)/cobalt/demos/demos.gyp:copy_demos',
            '<(DEPTH)/cobalt/loader/loader.gyp:loader',
            '<(DEPTH)/cobalt/media/media.gyp:media',
            '<(DEPTH)/cobalt/network/network.gyp:network',
            '<(DEPTH)/cobalt/renderer/renderer.gyp:renderer',
            '<(DEPTH)/cobalt/system_window/system_window.gyp:system_window',
            '<(DEPTH)/cobalt/trace_event/trace_event.gyp:trace_event',
            '<(DEPTH)/googleurl/googleurl.gyp:googleurl',
            '<(DEPTH)/third_party/zzuf/zzuf.gyp:zzuf',
          ],
        },

        {
          'target_name': 'shell_demuxer_fuzzer_deploy',
          'type': 'none',
          'dependencies': [
            'shell_demuxer_fuzzer',
          ],
          'variables': {
            'executable_name': 'shell_demuxer_fuzzer',
          },
          'includes': [ '<(DEPTH)/starboard/build/deploy.gypi' ],
        },
      ],
    }],
  ],
}
