# 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.

import("//media/media_options.gni")

assert(media_use_ffmpeg)

source_set("ffmpeg") {
  visibility = [ "//media/*" ]
  allow_circular_includes_from = [ "//media/base" ]
  configs += [ "//media/base:base_config" ]
  sources = [
    "ffmpeg_common.cc",
    "ffmpeg_common.h",
    "ffmpeg_deleters.h",
  ]
  deps = [
    "//base",
    "//media:media_features",
    "//media:shared_memory_support",
    "//media/base",
    "//third_party/ffmpeg",
  ]
}

source_set("ffmpeg_unittests") {
  testonly = true
  sources = [
    "ffmpeg_common_unittest.cc",
  ]
  deps = [
    "//base",
    "//media",
    "//media/base:test_support",
    "//testing/gtest",
    "//third_party/ffmpeg",
  ]
}

source_set("ffmpeg_regression_tests") {
  testonly = true
  sources = [
    "ffmpeg_regression_tests.cc",
  ]
  deps = [
    "//base",
    "//media",
    "//media/test:pipeline_integration_test_base",
    "//testing/gmock",
    "//third_party/ffmpeg",
  ]
}
