# 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") {
  # Do not expand the visibility here without double-checking with OWNERS, this
  # is a roll-up target which is part of the //media component. Most other DEPs
  # should be using //media and not directly DEP this roll-up target.
  visibility = [
    "//media",
    "//media/filters",
  ]
  configs += [
    # TODO(crbug.com/167187): Fix size_t to int truncations.
    "//build/config/compiler:no_size_t_to_int_warning",

    "//media:subcomponent_config",
  ]
  sources = [
    "ffmpeg_common.cc",
    "ffmpeg_common.h",
    "ffmpeg_decoding_loop.cc",
    "ffmpeg_decoding_loop.h",
    "ffmpeg_deleters.h",
  ]
  deps = [
    "//base",
    "//media/base",
    "//third_party/ffmpeg",
    "//third_party/ffmpeg:ffmpeg_features",
  ]
}

source_set("unit_tests") {
  testonly = true
  sources = [
    "ffmpeg_common_unittest.cc",
  ]
  configs += [ "//media:media_config" ]
  deps = [
    "//base",
    "//media: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",
  ]
}
