# Copyright 2016 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

source_set("common") {
  sources = [
    "audio_data_s16_converter.cc",
    "audio_data_s16_converter.h",
    "input_error_code_converter.cc",
    "input_error_code_converter.h",
    "media_type_converters.cc",
    "media_type_converters.h",
    "mojo_data_pipe_read_write.cc",
    "mojo_data_pipe_read_write.h",
    "mojo_decoder_buffer_converter.cc",
    "mojo_decoder_buffer_converter.h",
    "mojo_pipe_read_write_util.cc",
    "mojo_pipe_read_write_util.h",
  ]

  deps = [
    ":mojo_shared_buffer_video_frame",
    "//base",
    "//gpu/ipc/common",
    "//media",
    "//media/mojo/mojom",
    "//mojo/public/cpp/bindings",
    "//mojo/public/cpp/system",
    "//ui/gfx/geometry",
    "//ui/gfx/geometry/mojom",
  ]
}

# This is a separate target so that //media/mojo/mojom can depend on it
# without creating a cycle.
source_set("mojo_shared_buffer_video_frame") {
  sources = [
    "mojo_shared_buffer_video_frame.cc",
    "mojo_shared_buffer_video_frame.h",
  ]

  deps = [
    "//base",
    "//media",
    "//mojo/public/cpp/system",
    "//ui/gfx/geometry",
  ]
}

source_set("unit_tests") {
  testonly = true

  sources = [
    "media_type_converters_unittest.cc",
    "mojo_data_pipe_read_write_unittest.cc",
    "mojo_decoder_buffer_converter_unittest.cc",
    "mojo_shared_buffer_video_frame_unittest.cc",
  ]

  deps = [
    "//base",
    "//base/test:test_support",
    "//media:test_support",
    "//media/mojo:test_support",
    "//testing/gmock",
    "//testing/gtest",
  ]
}
