include(External)

# In llvm-test-suite/test-suite-externals:
# git clone -b n7.1.1 https://git.ffmpeg.org/ffmpeg.git

llvm_externals_find(TEST_SUITE_FFMPEG_ROOT "ffmpeg" "ffmpeg 7.1")

if (NOT TEST_SUITE_FFMPEG_ROOT)
  return()
endif()

include(CheckCCompilerFlag)
include(CheckFunctionExists)
include(CheckLanguage)
include(CheckLibraryExists)
include(CheckLinkerFlag)

set(CMAKE_C_STANDARD 17)

include_directories(.)
include_directories(${TEST_SUITE_FFMPEG_ROOT})
include_directories(${TEST_SUITE_FFMPEG_ROOT}/compat/stdbit)

# Convenience helper for adding an option if it is supported, automatically
# setting up suitable cache variables for the tests.
function(check_enable_option option)
  if (${option} MATCHES "^-Wno")
    # GCC silently accepts any unknown warning class in options like -Wno-foo,
    # but such unrecognized options can produce other distracting notices
    # if there actual warnings to print. Therefore, for options like -Wno-foo,
    # test whether -Wfoo is supported instead, and if it is, add -Wno-foo.
    string(REGEX REPLACE "^-Wno-" "-W" test_option ${option})
  else()
    set(test_option ${option})
  endif()
  # Transform the option name into a suitable cmake cache variable name, to
  # avoid requiring the caller to uniquely set one for each case.
  string(REGEX REPLACE "^--*" "" varname ${test_option})
  string(TOUPPER ${varname} varname)
  string(REGEX REPLACE "[-=]" "_" varname ${varname})
  set(varname "SUPPORTS_${varname}")
  check_c_compiler_flag(${test_option} ${varname})
  if (${varname})
    # If supported, enable the original form of the option that was requested.
    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${option}" PARENT_SCOPE)
  endif()
endfunction()

if (NOT MSVC)
  # clang-cl supports -Wall, but it corresponds to -Weverything
  check_enable_option(-Wall)
endif()

check_enable_option(-Wdeclaration-after-statement)
check_enable_option(-Wdisabled-optimization)
check_enable_option(-Wpointer-arith)
check_enable_option(-Wredundant-decls)
check_enable_option(-Wwrite-strings)
check_enable_option(-Wtype-limits)
check_enable_option(-Wundef)
check_enable_option(-Wmissing-prototypes)
check_enable_option(-Wstrict-prototypes)
check_enable_option(-Wempty-body)
check_enable_option(-Werror=implicit-function-declaration)
check_enable_option(-Werror=missing-prototypes)
check_enable_option(-Werror=return-type)

# GCC specific
check_enable_option(-Werror=format-security)
check_enable_option(-Werror=vla)
check_enable_option(-Wformat)

check_enable_option(-Wno-parentheses)
check_enable_option(-Wno-switch)
check_enable_option(-Wno-format-zero-length)
check_enable_option(-Wno-pointer-sign)
check_enable_option(-Wno-unused-const-variable)
check_enable_option(-Wno-bool-operation)
check_enable_option(-Wno-char-subscripts)
check_enable_option(-Wno-implicit-const-int-float-conversion)

# Unless enabled extra_warnings
check_enable_option(-Wno-maybe-uninitialized)

# Specific for the CMake build
check_enable_option(-Wno-deprecated)
check_enable_option(-Wno-deprecated-declarations)
check_enable_option(-Wno-format-truncation)
check_enable_option(-Wno-unused-variable)
check_enable_option(-Wno-unused-function)
check_enable_option(-Wno-sometimes-uninitialized)
check_enable_option(-Wno-unused-but-set-variable)
check_enable_option(-Wno-enum-conversion)
check_enable_option(-Wno-stringop-overflow)
check_enable_option(-Wno-array-bounds)
check_enable_option(-Wno-array-parameter)

check_function_exists(sin HAVE_DEFAULT_MATH)
if (NOT HAVE_DEFAULT_MATH)
  check_library_exists(m sin "" HAVE_LIBM)
  if (HAVE_LIBM)
    link_libraries(m)
  endif()
endif()
check_library_exists(atomic __atomic_load_8 "" HAVE_LIBATOMIC)
if (HAVE_LIBATOMIC)
  link_libraries(atomic)
endif()
if (NOT WIN32)
  find_package(Threads)
  if (Threads_FOUND)
    link_libraries(${CMAKE_THREAD_LIBS_INIT})
  endif()
endif()

if (WIN32)
  add_compile_definitions(WIN32_LEAN_AND_MEAN)
endif()

if (CMAKE_SYSTEM_PROCESSOR STREQUAL "aarch64" OR CMAKE_SYSTEM_PROCESSOR STREQUAL "arm64")
  set(ARCH_AARCH64 1)
  enable_language(ASM)
  message(STATUS "ffmpeg: Enabling aarch64 assembly")
elseif (CMAKE_SYSTEM_PROCESSOR MATCHES "^arm")
  set(ARCH_ARM 1)
  enable_language(ASM)
  message(STATUS "ffmpeg: Enabling arm assembly")
elseif (CMAKE_SYSTEM_PROCESSOR MATCHES "^i.86$" OR CMAKE_SYSTEM_PROCESSOR MATCHES "^[Xx]86$")
  set(ARCH_I386 1)
  check_language(ASM_NASM)
  if (CMAKE_ASM_NASM_COMPILER)
    enable_language(ASM_NASM)
    message(STATUS "ffmpeg: Enabling i386 nasm assembly")
  else()
    add_compile_definitions(NO_X86ASM)
    message(STATUS "ffmpeg: Not enabling i386 nasm assembly")
  endif()
  set(CMAKE_ASM_NASM_FLAGS "${CMAKE_ASM_NASM_FLAGS} -Pasm-i386.asm")
  if (CMAKE_SYSTEM_NAME STREQUAL "Darwin" OR CMAKE_SYSTEM_NAME STREQUAL "Windows")
    set(CMAKE_ASM_NASM_FLAGS "${CMAKE_ASM_NASM_FLAGS} -DPREFIX")
  endif()
  # If the option is supported, allow text relocations. (LLD for ELF disallows
  # it by default.)
  check_linker_flag(C -Wl,-z,notext SUPPORTS_WL_Z_NOTEXT)
  if (SUPPORTS_WL_Z_NOTEXT)
    add_link_options(-Wl,-z,notext)
  endif()
elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" OR CMAKE_SYSTEM_PROCESSOR STREQUAL "AMD64" OR CMAKE_SYSTEM_PROCESSOR STREQUAL "amd64")
  set(ARCH_X86_64 1)
  add_compile_definitions(PIC)
  check_language(ASM_NASM)
  if (CMAKE_ASM_NASM_COMPILER)
    enable_language(ASM_NASM)
    message(STATUS "ffmpeg: Enabling x86_64 nasm assembly")
  else()
    add_compile_definitions(NO_X86ASM)
    message(STATUS "ffmpeg: Not enabling x86_64 nasm assembly")
  endif()
  set(CMAKE_ASM_NASM_FLAGS "${CMAKE_ASM_NASM_FLAGS} -Pasm-x86_64.asm")
  if (CMAKE_SYSTEM_NAME STREQUAL "Darwin")
    set(CMAKE_ASM_NASM_FLAGS "${CMAKE_ASM_NASM_FLAGS} -DPREFIX")
  endif()
else()
  message(STATUS "ffmpeg: Not enabling any assembly optimizations for ${CMAKE_SYSTEM_PROCESSOR}")
endif()


# libavutil

set(avutil_src
    adler32.c
    aes.c
    aes_ctr.c
    ambient_viewing_environment.c
    audio_fifo.c
    avstring.c
    avsscanf.c
    base64.c
    blowfish.c
    bprint.c
    buffer.c
    cast5.c
    camellia.c
    channel_layout.c
    cpu.c
    crc.c
    csp.c
    des.c
    detection_bbox.c
    dict.c
    display.c
    dovi_meta.c
    downmix_info.c
    encryption_info.c
    error.c
    eval.c
    executor.c
    fifo.c
    file.c
    file_open.c
    float_dsp.c
    film_grain_params.c
    fixed_dsp.c
    frame.c
    hash.c
    hdr_dynamic_metadata.c
    hdr_dynamic_vivid_metadata.c
    hmac.c
    hwcontext.c
    hwcontext_stub.c
    iamf.c
    imgutils.c
    integer.c
    intmath.c
    lfg.c
    lls.c
    log.c
    log2_tab.c
    lzo.c
    mathematics.c
    mastering_display_metadata.c
    md5.c
    mem.c
    murmur3.c
    opt.c
    parseutils.c
    pixdesc.c
    pixelutils.c
    random_seed.c
    rational.c
    reverse.c
    rc4.c
    ripemd.c
    samplefmt.c
    sha.c
    sha512.c
    slicethread.c
    spherical.c
    stereo3d.c
    threadmessage.c
    time.c
    timecode.c
    timestamp.c
    tree.c
    twofish.c
    utils.c
    xga_font_data.c
    xtea.c
    tea.c
    tx.c
    tx_float.c
    tx_double.c
    tx_int32.c
    uuid.c
    version.c
    video_enc_params.c
    video_hint.c)
if (ARCH_AARCH64)
  list(APPEND avutil_src
      aarch64/cpu.c
      aarch64/float_dsp_init.c
      aarch64/tx_float_init.c
      aarch64/float_dsp_neon.S
      aarch64/tx_float_neon.S)
elseif (ARCH_ARM)
  list(APPEND avutil_src
      arm/cpu.c
      arm/float_dsp_init_arm.c
      arm/float_dsp_init_vfp.c
      arm/float_dsp_vfp.S
      arm/float_dsp_init_neon.c
      arm/float_dsp_neon.S)
elseif (ARCH_I386 OR ARCH_X86_64)
  list(APPEND avutil_src
      x86/cpu.c
      x86/fixed_dsp_init.c
      x86/float_dsp_init.c
      x86/imgutils_init.c
      x86/lls_init.c
      x86/tx_float_init.c
      x86/pixelutils_init.c)
  if (CMAKE_ASM_NASM_COMPILER)
    set(x86_nasm_sources
        x86/cpuid.asm
        x86/emms.asm
        x86/fixed_dsp.asm
        x86/float_dsp.asm
        x86/imgutils.asm
        x86/lls.asm
        x86/pixelutils.asm
        x86/tx_float.asm)
    list(APPEND avutil_src
        ${x86_nasm_sources})
    list(TRANSFORM x86_nasm_sources PREPEND ${TEST_SUITE_FFMPEG_ROOT}/libavutil/)
    set_source_files_properties(${x86_nasm_sources} PROPERTIES LANGUAGE ASM_NASM)
  endif()
endif()
if (WIN32)
  list(APPEND avutil_link bcrypt)
endif()
list(TRANSFORM avutil_src PREPEND ${TEST_SUITE_FFMPEG_ROOT}/libavutil/)
llvm_test_library(avutil ${avutil_src})
target_link_libraries(avutil LINK_PRIVATE ${avutil_link})
target_compile_definitions(avutil PRIVATE HAVE_AV_CONFIG_H)


# libavcodec

set(avcodec_src
    012v.c
    4xm.c
    8bps.c
    8svx.c
    a64multienc.c
    aac/aacdec.c
    aac/aacdec_ac.c
    aac/aacdec_fixed.c
    aac/aacdec_float.c
    aac/aacdec_lpd.c
    aac/aacdec_tab.c
    aac/aacdec_usac.c
    aac_ac3_parser.c
    aac_parser.c
    aaccoder.c
    aacenc.c
    aacenc_is.c
    aacenc_ltp.c
    aacenc_pred.c
    aacenc_tns.c
    aacenctab.c
    aacps_common.c
    aacps_fixed.c
    aacps_float.c
    aacpsdsp_fixed.c
    aacpsdsp_float.c
    aacpsy.c
    aacsbr.c
    aacsbr_fixed.c
    aactab.c
    aandcttab.c
    aasc.c
    ac3.c
    ac3_channel_layout_tab.c
    ac3_parser.c
    ac3dec_data.c
    ac3dec_fixed.c
    ac3dec_float.c
    ac3dsp.c
    ac3enc.c
    ac3enc_fixed.c
    ac3enc_float.c
    ac3tab.c
    acelp_filters.c
    acelp_pitch_delay.c
    acelp_vectors.c
    adpcm.c
    adpcm_data.c
    adpcmenc.c
    adts_header.c
    adts_parser.c
    adx.c
    adx_parser.c
    adxdec.c
    adxenc.c
    agm.c
    aic.c
    alac.c
    alac_data.c
    alacdsp.c
    alacenc.c
    aliaspixdec.c
    aliaspixenc.c
    allcodecs.c
    alsdec.c
    amr_parser.c
    amrnbdec.c
    amrwbdec.c
    anm.c
    ansi.c
    aom_film_grain.c
    apac.c
    apedec.c
    aptx.c
    aptxdec.c
    aptxenc.c
    arbc.c
    argo.c
    ass.c
    ass_split.c
    assdec.c
    assenc.c
    asv.c
    asvdec.c
    asvenc.c
    atrac.c
    atrac1.c
    atrac3.c
    atrac3plus.c
    atrac3plusdec.c
    atrac3plusdsp.c
    atrac9dec.c
    atsc_a53.c
    audio_frame_queue.c
    audiodsp.c
    aura.c
    av1_levels.c
    av1_parse.c
    av1_parser.c
    av1dec.c
    avcodec.c
    avdct.c
    avfft.c
    avrndec.c
    avs.c
    avs2.c
    avs2_parser.c
    avs3_parser.c
    avuidec.c
    avuienc.c
    bethsoftvideo.c
    bfi.c
    bgmc.c
    bink.c
    binkaudio.c
    binkdsp.c
    bintext.c
    bitpacked_dec.c
    bitpacked_enc.c
    bitstream.c
    bitstream_filters.c
    blockdsp.c
    bmp.c
    bmp_parser.c
    bmpenc.c
    bmvaudio.c
    bmvvideo.c
    bonk.c
    brenderpix.c
    bsf.c
    bsf/aac_adtstoasc.c
    bsf/av1_frame_merge.c
    bsf/av1_frame_split.c
    bsf/av1_metadata.c
    bsf/chomp.c
    bsf/dca_core.c
    bsf/dovi_rpu.c
    bsf/dts2pts.c
    bsf/dump_extradata.c
    bsf/dv_error_marker.c
    bsf/eac3_core.c
    bsf/evc_frame_merge.c
    bsf/extract_extradata.c
    bsf/filter_units.c
    bsf/h264_metadata.c
    bsf/h264_mp4toannexb.c
    bsf/h264_redundant_pps.c
    bsf/h265_metadata.c
    bsf/h266_metadata.c
    bsf/hapqa_extract.c
    bsf/hevc_mp4toannexb.c
    bsf/imx_dump_header.c
    bsf/media100_to_mjpegb.c
    bsf/mjpeg2jpeg.c
    bsf/mjpega_dump_header.c
    bsf/movsub.c
    bsf/mpeg2_metadata.c
    bsf/mpeg4_unpack_bframes.c
    bsf/noise.c
    bsf/null.c
    bsf/opus_metadata.c
    bsf/pcm_rechunk.c
    bsf/pgs_frame_merge.c
    bsf/prores_metadata.c
    bsf/remove_extradata.c
    bsf/setts.c
    bsf/showinfo.c
    bsf/trace_headers.c
    bsf/truehd_core.c
    bsf/vp9_metadata.c
    bsf/vp9_raw_reorder.c
    bsf/vp9_superframe.c
    bsf/vp9_superframe_split.c
    bsf/vvc_mp4toannexb.c
    bswapdsp.c
    c93.c
    cabac.c
    canopus.c
    cavs.c
    cavs_parser.c
    cavsdata.c
    cavsdec.c
    cavsdsp.c
    cbrt_data.c
    cbrt_data_fixed.c
    cbs.c
    cbs_av1.c
    cbs_bsf.c
    cbs_h2645.c
    cbs_jpeg.c
    cbs_mpeg2.c
    cbs_sei.c
    cbs_vp8.c
    cbs_vp9.c
    ccaption_dec.c
    cdgraphics.c
    cdtoons.c
    cdxl.c
    celp_filters.c
    celp_math.c
    cfhd.c
    cfhddata.c
    cfhddsp.c
    cfhdenc.c
    cfhdencdsp.c
    cga_data.c
    cinepak.c
    cinepakenc.c
    clearvideo.c
    cljrdec.c
    cljrenc.c
    cllc.c
    cngdec.c
    cngenc.c
    codec_desc.c
    codec_par.c
    container_fifo.c
    cook.c
    cook_parser.c
    cpia.c
    cri.c
    cri_parser.c
    cscd.c
    cyuv.c
    dca.c
    dca_core.c
    dca_exss.c
    dca_lbr.c
    dca_parser.c
    dca_sample_rate_tab.c
    dca_xll.c
    dcaadpcm.c
    dcadata.c
    dcadct.c
    dcadec.c
    dcadsp.c
    dcaenc.c
    dcahuff.c
    dct32_fixed.c
    dct32_float.c
    dds.c
    decode.c
    dfa.c
    dfpwmdec.c
    dfpwmenc.c
    dirac.c
    dirac_arith.c
    dirac_dwt.c
    dirac_parser.c
    dirac_vlc.c
    diracdec.c
    diracdsp.c
    diractab.c
    dnxhd_parser.c
    dnxhddata.c
    dnxhddec.c
    dnxhdenc.c
    dolby_e.c
    dolby_e_parse.c
    dolby_e_parser.c
    dovi_rpu.c
    dovi_rpudec.c
    dovi_rpuenc.c
    dpcm.c
    dpx.c
    dpx_parser.c
    dpxenc.c
    dsd.c
    dsddec.c
    dsicinaudio.c
    dsicinvideo.c
    dss_sp.c
    dstdec.c
    dv.c
    dv_profile.c
    dvaudio_parser.c
    dvaudiodec.c
    dvbsub_parser.c
    dvbsubdec.c
    dvbsubenc.c
    dvd_nav_parser.c
    dvdata.c
    dvdec.c
    dvdsub.c
    dvdsub_parser.c
    dvdsubdec.c
    dvdsubenc.c
    dvenc.c
    dxtory.c
    dxv.c
    dxvenc.c
    dynamic_hdr_vivid.c
    eac3_data.c
    eac3enc.c
    eacmv.c
    eaidct.c
    eamad.c
    eatgq.c
    eatgv.c
    eatqi.c
    elbg.c
    elsdec.c
    encode.c
    error_resilience.c
    escape124.c
    escape130.c
    evc_parse.c
    evc_parser.c
    evc_ps.c
    evrcdec.c
    exif.c
    exrdsp.c
    faandct.c
    faanidct.c
    fastaudio.c
    faxcompr.c
    fdctdsp.c
    ffv1.c
    ffv1dec.c
    ffv1enc.c
    ffwavesynth.c
    fic.c
    fits.c
    fitsdec.c
    fitsenc.c
    flac.c
    flac_parser.c
    flacdata.c
    flacdec.c
    flacdsp.c
    flacenc.c
    flacencdsp.c
    flicvideo.c
    float2half.c
    flvdec.c
    flvenc.c
    fmtconvert.c
    fmvc.c
    frame_thread_encoder.c
    fraps.c
    frwu.c
    ftr.c
    ftr_parser.c
    g722.c
    g722dec.c
    g722dsp.c
    g722enc.c
    g723_1.c
    g723_1_parser.c
    g723_1dec.c
    g723_1enc.c
    g726.c
    g729_parser.c
    g729dec.c
    g729postfilter.c
    gdv.c
    gemdec.c
    get_buffer.c
    gif.c
    gif_parser.c
    gifdec.c
    golomb.c
    gsm_parser.c
    gsmdec.c
    gsmdec_data.c
    h261.c
    h261_parser.c
    h261data.c
    h261dec.c
    h261enc.c
    h263.c
    h263_parser.c
    h263data.c
    h263dec.c
    h263dsp.c
    h2645_parse.c
    h2645_sei.c
    h2645_vui.c
    h2645data.c
    h264_cabac.c
    h264_cavlc.c
    h264_direct.c
    h264_levels.c
    h264_loopfilter.c
    h264_mb.c
    h264_parse.c
    h264_parser.c
    h264_picture.c
    h264_ps.c
    h264_refs.c
    h264_sei.c
    h264_slice.c
    h264chroma.c
    h264data.c
    h264dec.c
    h264dsp.c
    h264idct.c
    h264pred.c
    h264qpel.c
    h265_profile_level.c
    h274.c
    half2float.c
    hap.c
    hapdec.c
    hcadec.c
    hcom.c
    hdr_parser.c
    hdrdec.c
    hdrenc.c
    hevc/cabac.c
    hevc/data.c
    hevc/dsp.c
    hevc/filter.c
    hevc/hevcdec.c
    hevc/mvs.c
    hevc/parse.c
    hevc/parser.c
    hevc/pred.c
    hevc/ps.c
    hevc/ps_enc.c
    hevc/refs.c
    hevc/sei.c
    hnm4video.c
    hpeldsp.c
    hq_hqa.c
    hq_hqadsp.c
    hqx.c
    hqxdsp.c
    hqxvlc.c
    htmlsubtitles.c
    huffman.c
    huffyuv.c
    huffyuvdec.c
    huffyuvdsp.c
    huffyuvenc.c
    huffyuvencdsp.c
    hw_base_encode.c
    hw_base_encode_h264.c
    hw_base_encode_h265.c
    idcinvideo.c
    idctdsp.c
    iff.c
    iirfilter.c
    ilbcdec.c
    imc.c
    imgconvert.c
    imm4.c
    imm5.c
    imx.c
    indeo2.c
    indeo3.c
    indeo4.c
    indeo5.c
    intelh263dec.c
    interplayacm.c
    interplayvideo.c
    intrax8.c
    intrax8dsp.c
    ipu_parser.c
    ituh263dec.c
    ituh263enc.c
    ivi.c
    ivi_dsp.c
    j2kenc.c
    jacosubdec.c
    jfdctfst.c
    jfdctint.c
    jni.c
    jpeg2000.c
    jpeg2000_parser.c
    jpeg2000dec.c
    jpeg2000dsp.c
    jpeg2000dwt.c
    jpeg2000htdec.c
    jpegls.c
    jpeglsdec.c
    jpeglsenc.c
    jpegquanttables.c
    jpegtables.c
    jpegxl_parse.c
    jpegxl_parser.c
    jrevdct.c
    jvdec.c
    kbdwin.c
    kgv1dec.c
    kmvc.c
    lagarith.c
    lagarithrac.c
    latm_parser.c
    lcevcdec.c
    lcldec.c
    leaddec.c
    ljpegenc.c
    loco.c
    lossless_audiodsp.c
    lossless_videodsp.c
    lossless_videoencdsp.c
    lpc.c
    lsp.c
    lzf.c
    lzw.c
    lzwenc.c
    m101.c
    mace.c
    magicyuv.c
    magicyuvenc.c
    mathtables.c
    mdec.c
    me_cmp.c
    metasound.c
    microdvddec.c
    midivid.c
    mimic.c
    misc4.c
    misc4_parser.c
    mjpeg_parser.c
    mjpegbdec.c
    mjpegdec.c
    mjpegdec_common.c
    mjpegenc.c
    mjpegenc_common.c
    mjpegenc_huffman.c
    mlp.c
    mlp_parse.c
    mlp_parser.c
    mlpdec.c
    mlpdsp.c
    mlpenc.c
    mlz.c
    mmvideo.c
    mobiclip.c
    motion_est.c
    motionpixels.c
    movtextdec.c
    movtextenc.c
    mpc.c
    mpc7.c
    mpc8.c
    mpeg12.c
    mpeg12data.c
    mpeg12dec.c
    mpeg12enc.c
    mpeg12framerate.c
    mpeg4audio.c
    mpeg4audio_sample_rates.c
    mpeg4video.c
    mpeg4video_parser.c
    mpeg4videodec.c
    mpeg4videodsp.c
    mpeg4videoenc.c
    mpeg_er.c
    mpegaudio.c
    mpegaudio_parser.c
    mpegaudiodata.c
    mpegaudiodec_common.c
    mpegaudiodec_fixed.c
    mpegaudiodec_float.c
    mpegaudiodecheader.c
    mpegaudiodsp.c
    mpegaudiodsp_data.c
    mpegaudiodsp_fixed.c
    mpegaudiodsp_float.c
    mpegaudioenc_fixed.c
    mpegaudioenc_float.c
    mpegaudiotabs.c
    mpegpicture.c
    mpegutils.c
    mpegvideo.c
    mpegvideo_dec.c
    mpegvideo_enc.c
    mpegvideo_motion.c
    mpegvideo_parser.c
    mpegvideodata.c
    mpegvideoencdsp.c
    mpl2dec.c
    mqc.c
    mqcdec.c
    mqcenc.c
    msgsmdec.c
    msmpeg4.c
    msmpeg4_vc1_data.c
    msmpeg4data.c
    msmpeg4dec.c
    msmpeg4enc.c
    msp2dec.c
    msrle.c
    msrledec.c
    msrleenc.c
    mss1.c
    mss12.c
    mss2.c
    mss2dsp.c
    mss3.c
    mss34dsp.c
    mss4.c
    msvideo1.c
    msvideo1enc.c
    mv30.c
    mvcdec.c
    mxpegdec.c
    nellymoser.c
    nellymoserdec.c
    nellymoserenc.c
    notchlc.c
    null.c
    nuv.c
    on2avc.c
    on2avcdata.c
    options.c
    opus/celt.c
    opus/dec.c
    opus/dec_celt.c
    opus/dsp.c
    opus/enc.c
    opus/enc_psy.c
    opus/parse.c
    opus/parser.c
    opus/pvq.c
    opus/rc.c
    opus/silk.c
    opus/tab.c
    osq.c
    packet.c
    pafaudio.c
    pafvideo.c
    pamenc.c
    parser.c
    parsers.c
    pcm-bluray.c
    pcm-blurayenc.c
    pcm-dvd.c
    pcm-dvdenc.c
    pcm.c
    pcx.c
    pcxenc.c
    pgssubdec.c
    pgxdec.c
    photocd.c
    pictordec.c
    pixblockdsp.c
    pixlet.c
    png.c
    png_parser.c
    pngdsp.c
    pnm.c
    pnm_parser.c
    pnmdec.c
    pnmenc.c
    profiles.c
    proresdata.c
    proresdec.c
    proresdsp.c
    proresenc_anatoliy.c
    proresenc_kostya.c
    prosumer.c
    psd.c
    psymodel.c
    pthread.c
    pthread_frame.c
    pthread_slice.c
    ptx.c
    qcelpdec.c
    qdm2.c
    qdmc.c
    qdrw.c
    qoadec.c
    qoi_parser.c
    qoidec.c
    qoienc.c
    qpeg.c
    qpeldsp.c
    qtrle.c
    qtrleenc.c
    r210dec.c
    r210enc.c
    ra144.c
    ra144dec.c
    ra144enc.c
    ra288.c
    ralf.c
    rangecoder.c
    ratecontrol.c
    raw.c
    rawdec.c
    rawenc.c
    realtextdec.c
    refstruct.c
    rka.c
    rl.c
    rl2.c
    rle.c
    roqaudioenc.c
    roqvideo.c
    roqvideodec.c
    roqvideoenc.c
    rpza.c
    rpzaenc.c
    rtjpeg.c
    rtv1.c
    rv10.c
    rv10enc.c
    rv20enc.c
    rv30.c
    rv30dsp.c
    rv34.c
    rv34_parser.c
    rv34dsp.c
    rv40.c
    rv40dsp.c
    s302m.c
    s302menc.c
    samidec.c
    sanm.c
    sbc.c
    sbc_parser.c
    sbcdec.c
    sbcdec_data.c
    sbcdsp.c
    sbcdsp_data.c
    sbcenc.c
    sbrdsp.c
    sbrdsp_fixed.c
    scpr.c
    sga.c
    sgidec.c
    sgienc.c
    sgirledec.c
    sheervideo.c
    shorten.c
    simple_idct.c
    sinewin.c
    sipr.c
    sipr16k.c
    sipr_parser.c
    siren.c
    smacker.c
    smc.c
    smcenc.c
    snappy.c
    snow.c
    snow_dwt.c
    snowdec.c
    snowenc.c
    sonic.c
    sp5xdec.c
    speedhq.c
    speedhqdec.c
    speedhqenc.c
    speexdec.c
    srtdec.c
    srtenc.c
    startcode.c
    subviewerdec.c
    sunrast.c
    sunrastenc.c
    svq1.c
    svq1dec.c
    svq1enc.c
    svq3.c
    synth_filter.c
    tak.c
    tak_parser.c
    takdec.c
    takdsp.c
    targa.c
    targa_y216dec.c
    targaenc.c
    textdec.c
    texturedsp.c
    texturedspenc.c
    threadprogress.c
    tiertexseqv.c
    tiff.c
    tiff_common.c
    tiffenc.c
    tmv.c
    to_upper4.c
    tpeldsp.c
    truemotion1.c
    truemotion2.c
    truemotion2rt.c
    truespeech.c
    tscc2.c
    tta.c
    ttadata.c
    ttadsp.c
    ttaenc.c
    ttaencdsp.c
    ttmlenc.c
    twinvq.c
    twinvqdec.c
    txd.c
    ulti.c
    utils.c
    utvideodec.c
    utvideodsp.c
    utvideoenc.c
    v210dec.c
    v210enc.c
    v210x.c
    v308dec.c
    v308enc.c
    v408dec.c
    v408enc.c
    v410dec.c
    v410enc.c
    vb.c
    vble.c
    vbndec.c
    vbnenc.c
    vc1.c
    vc1_block.c
    vc1_loopfilter.c
    vc1_mc.c
    vc1_parser.c
    vc1_pred.c
    vc1data.c
    vc1dec.c
    vc1dsp.c
    vc2enc.c
    vc2enc_dwt.c
    vcr1.c
    version.c
    videodsp.c
    vima.c
    vlc.c
    vmdaudio.c
    vmdvideo.c
    vmixdec.c
    vmnc.c
    vorbis.c
    vorbis_data.c
    vorbis_parser.c
    vorbisdec.c
    vorbisdsp.c
    vorbisenc.c
    vp3.c
    vp3_parser.c
    vp3dsp.c
    vp5.c
    vp56.c
    vp56data.c
    vp56dsp.c
    vp6.c
    vp6dsp.c
    vp8.c
    vp8_parser.c
    vp8data.c
    vp8dsp.c
    vp9.c
    vp9_parser.c
    vp9block.c
    vp9data.c
    vp9dsp.c
    vp9dsp_10bpp.c
    vp9dsp_12bpp.c
    vp9dsp_8bpp.c
    vp9lpf.c
    vp9mvs.c
    vp9prob.c
    vp9recon.c
    vpx_rac.c
    vqavideo.c
    vqcdec.c
    vvc/cabac.c
    vvc/ctu.c
    vvc/data.c
    vvc/dec.c
    vvc/dsp.c
    vvc/filter.c
    vvc/inter.c
    vvc/intra.c
    vvc/intra_utils.c
    vvc/itx_1d.c
    vvc/mvs.c
    vvc/ps.c
    vvc/refs.c
    vvc/thread.c
    vvc_parser.c
    wavarc.c
    wavpack.c
    wavpackdata.c
    wavpackenc.c
    wbmpdec.c
    wbmpenc.c
    webp.c
    webp_parser.c
    webvttdec.c
    webvttenc.c
    wma.c
    wma_common.c
    wma_freqs.c
    wmadec.c
    wmaenc.c
    wmalosslessdec.c
    wmaprodec.c
    wmavoice.c
    wmv2.c
    wmv2data.c
    wmv2dec.c
    wmv2dsp.c
    wmv2enc.c
    wnv1.c
    wrapped_avframe.c
    ws-snd1.c
    xan.c
    xbm_parser.c
    xbmdec.c
    xbmenc.c
    xface.c
    xfacedec.c
    xfaceenc.c
    xiph.c
    xl.c
    xma_parser.c
    xpmdec.c
    xsubdec.c
    xsubenc.c
    xvididct.c
    xwd_parser.c
    xwddec.c
    xwdenc.c
    xxan.c
    y41pdec.c
    y41penc.c
    ylc.c
    yop.c
    yuv4dec.c
    yuv4enc.c)
if (ARCH_AARCH64)
  list(APPEND avcodec_src
      aarch64/aacpsdsp_init_aarch64.c
      aarch64/aacpsdsp_neon.S
      aarch64/ac3dsp_init_aarch64.c
      aarch64/ac3dsp_neon.S
      aarch64/fdctdsp_init_aarch64.c
      aarch64/fdctdsp_neon.S
      aarch64/fmtconvert_init.c
      aarch64/fmtconvert_neon.S
      aarch64/h264chroma_init_aarch64.c
      aarch64/h264cmc_neon.S
      aarch64/h264dsp_init_aarch64.c
      aarch64/h264dsp_neon.S
      aarch64/h264idct_neon.S
      aarch64/h264pred_init.c
      aarch64/h264pred_neon.S
      aarch64/h264qpel_init_aarch64.c
      aarch64/h264qpel_neon.S
      aarch64/h26x/epel_neon.S
      aarch64/h26x/qpel_neon.S
      aarch64/h26x/sao_neon.S
      aarch64/hevcdsp_deblock_neon.S
      aarch64/hevcdsp_idct_neon.S
      aarch64/hevcdsp_init_aarch64.c
      aarch64/hpeldsp_init_aarch64.c
      aarch64/hpeldsp_neon.S
      aarch64/idctdsp_init_aarch64.c
      aarch64/idctdsp_neon.S
      aarch64/me_cmp_init_aarch64.c
      aarch64/me_cmp_neon.S
      aarch64/mpegaudiodsp_init.c
      aarch64/mpegaudiodsp_neon.S
      aarch64/mpegvideoencdsp_init.c
      aarch64/mpegvideoencdsp_neon.S
      aarch64/neontest.c
      aarch64/opusdsp_init.c
      aarch64/opusdsp_neon.S
      aarch64/pixblockdsp_init_aarch64.c
      aarch64/pixblockdsp_neon.S
      aarch64/rv40dsp_init_aarch64.c
      aarch64/sbrdsp_init_aarch64.c
      aarch64/sbrdsp_neon.S
      aarch64/simple_idct_neon.S
      aarch64/synth_filter_init.c
      aarch64/synth_filter_neon.S
      aarch64/vc1dsp_init_aarch64.c
      aarch64/vc1dsp_neon.S
      aarch64/videodsp.S
      aarch64/videodsp_init.c
      aarch64/vorbisdsp_init.c
      aarch64/vorbisdsp_neon.S
      aarch64/vp8dsp_init_aarch64.c
      aarch64/vp8dsp_neon.S
      aarch64/vp9dsp_init_10bpp_aarch64.c
      aarch64/vp9dsp_init_12bpp_aarch64.c
      aarch64/vp9dsp_init_aarch64.c
      aarch64/vp9itxfm_16bpp_neon.S
      aarch64/vp9itxfm_neon.S
      aarch64/vp9lpf_16bpp_neon.S
      aarch64/vp9lpf_neon.S
      aarch64/vp9mc_16bpp_neon.S
      aarch64/vp9mc_aarch64.S
      aarch64/vp9mc_neon.S
      aarch64/vvc/alf.S
      aarch64/vvc/dsp_init.c
      aarch64/vvc/inter.S
      aarch64/vvc/sad.S
      neon/mpegvideo.c)
elseif (ARCH_ARM)
  list(APPEND avcodec_src
      arm/aacpsdsp_init_arm.c
      arm/aacpsdsp_neon.S
      arm/ac3dsp_arm.S
      arm/ac3dsp_armv6.S
      arm/ac3dsp_init_arm.c
      arm/ac3dsp_neon.S
      arm/audiodsp_init_arm.c
      arm/audiodsp_init_neon.c
      arm/audiodsp_neon.S
      arm/blockdsp_init_arm.c
      arm/blockdsp_init_neon.c
      arm/blockdsp_neon.S
      arm/flacdsp_arm.S
      arm/flacdsp_init_arm.c
      arm/fmtconvert_init_arm.c
      arm/fmtconvert_neon.S
      arm/fmtconvert_vfp.S
      arm/g722dsp_init_arm.c
      arm/g722dsp_neon.S
      arm/h264chroma_init_arm.c
      arm/h264cmc_neon.S
      arm/h264dsp_init_arm.c
      arm/h264dsp_neon.S
      arm/h264idct_neon.S
      arm/h264pred_init_arm.c
      arm/h264pred_neon.S
      arm/h264qpel_init_arm.c
      arm/h264qpel_neon.S
      arm/hevcdsp_deblock_neon.S
      arm/hevcdsp_idct_neon.S
      arm/hevcdsp_init_arm.c
      arm/hevcdsp_init_neon.c
      arm/hevcdsp_qpel_neon.S
      arm/hevcdsp_sao_neon.S
      arm/hpeldsp_arm.S
      arm/hpeldsp_armv6.S
      arm/hpeldsp_init_arm.c
      arm/hpeldsp_init_armv6.c
      arm/hpeldsp_init_neon.c
      arm/hpeldsp_neon.S
      arm/idctdsp_arm.S
      arm/idctdsp_armv6.S
      arm/idctdsp_init_arm.c
      arm/idctdsp_init_armv5te.c
      arm/idctdsp_init_armv6.c
      arm/idctdsp_init_neon.c
      arm/idctdsp_neon.S
      arm/int_neon.S
      arm/jrevdct_arm.S
      arm/lossless_audiodsp_init_arm.c
      arm/lossless_audiodsp_neon.S
      arm/me_cmp_armv6.S
      arm/me_cmp_init_arm.c
      arm/mlpdsp_armv5te.S
      arm/mlpdsp_armv6.S
      arm/mlpdsp_init_arm.c
      arm/mpegaudiodsp_fixed_armv6.S
      arm/mpegaudiodsp_init_arm.c
      arm/mpegvideo_arm.c
      arm/mpegvideo_armv5te.c
      arm/mpegvideo_armv5te_s.S
      arm/mpegvideo_neon.S
      arm/mpegvideoencdsp_armv6.S
      arm/mpegvideoencdsp_init_arm.c
      arm/neontest.c
      arm/pixblockdsp_armv6.S
      arm/pixblockdsp_init_arm.c
      arm/pixblockdsp_neon.S
      arm/rv34dsp_init_arm.c
      arm/rv34dsp_neon.S
      arm/rv40dsp_init_arm.c
      arm/rv40dsp_neon.S
      arm/sbcdsp_armv6.S
      arm/sbcdsp_init_arm.c
      arm/sbcdsp_neon.S
      arm/sbrdsp_init_arm.c
      arm/sbrdsp_neon.S
      arm/simple_idct_arm.S
      arm/simple_idct_armv5te.S
      arm/simple_idct_armv6.S
      arm/simple_idct_neon.S
      arm/startcode_armv6.S
      arm/synth_filter_init_arm.c
      arm/synth_filter_neon.S
      arm/synth_filter_vfp.S
      arm/vc1dsp_init_arm.c
      arm/vc1dsp_init_neon.c
      arm/vc1dsp_neon.S
      arm/videodsp_armv5te.S
      arm/videodsp_init_arm.c
      arm/videodsp_init_armv5te.c
      arm/vorbisdsp_init_arm.c
      arm/vorbisdsp_neon.S
      arm/vp3dsp_init_arm.c
      arm/vp3dsp_neon.S
      arm/vp6dsp_init_arm.c
      arm/vp6dsp_neon.S
      arm/vp8_armv6.S
      arm/vp8dsp_armv6.S
      arm/vp8dsp_init_arm.c
      arm/vp8dsp_init_armv6.c
      arm/vp8dsp_init_neon.c
      arm/vp8dsp_neon.S
      arm/vp9dsp_init_10bpp_arm.c
      arm/vp9dsp_init_12bpp_arm.c
      arm/vp9dsp_init_arm.c
      arm/vp9itxfm_16bpp_neon.S
      arm/vp9itxfm_neon.S
      arm/vp9lpf_16bpp_neon.S
      arm/vp9lpf_neon.S
      arm/vp9mc_16bpp_neon.S
      arm/vp9mc_neon.S)
elseif (ARCH_I386 OR ARCH_X86_64)
  list(APPEND avcodec_src
      x86/aacencdsp_init.c
      x86/aacpsdsp_init.c
      x86/ac3dsp_init.c
      x86/alacdsp_init.c
      x86/audiodsp_init.c
      x86/blockdsp_init.c
      x86/bswapdsp_init.c
      x86/cavsdsp.c
      x86/celt_pvq_init.c
      x86/cfhddsp_init.c
      x86/cfhdencdsp_init.c
      x86/constants.c
      x86/dcadsp_init.c
      x86/dirac_dwt_init.c
      x86/diracdsp_init.c
      x86/dnxhdenc_init.c
      x86/exrdsp_init.c
      x86/fdct.c
      x86/fdctdsp_init.c
      x86/flacdsp_init.c
      x86/flacencdsp_init.c
      x86/fmtconvert_init.c
      x86/g722dsp_init.c
      x86/h263dsp_init.c
      x86/h264_intrapred_init.c
      x86/h264_qpel.c
      x86/h264chroma_init.c
      x86/h264dsp_init.c
      x86/h26x/h2656dsp.c
      x86/hevcdsp_init.c
      x86/hpeldsp_init.c
      x86/huffyuvdsp_init.c
      x86/huffyuvencdsp_init.c
      x86/idctdsp_init.c
      x86/jpeg2000dsp_init.c
      x86/lossless_audiodsp_init.c
      x86/lossless_videodsp_init.c
      x86/lossless_videoencdsp_init.c
      x86/lpc_init.c
      x86/me_cmp_init.c
      x86/mlpdsp_init.c
      x86/mpeg4videodsp.c
      x86/mpegaudiodsp.c
      x86/mpegvideo.c
      x86/mpegvideoenc.c
      x86/mpegvideoencdsp_init.c
      x86/opusdsp_init.c
      x86/pixblockdsp_init.c
      x86/pngdsp_init.c
      x86/proresdsp_init.c
      x86/qpeldsp_init.c
      x86/rv34dsp_init.c
      x86/rv40dsp_init.c
      x86/sbcdsp_init.c
      x86/sbrdsp_init.c
      x86/snowdsp.c
      x86/svq1enc_init.c
      x86/synth_filter_init.c
      x86/takdsp_init.c
      x86/ttadsp_init.c
      x86/ttaencdsp_init.c
      x86/utvideodsp_init.c
      x86/v210-init.c
      x86/v210enc_init.c
      x86/vc1dsp_init.c
      x86/vc1dsp_mmx.c
      x86/videodsp_init.c
      x86/vorbisdsp_init.c
      x86/vp3dsp_init.c
      x86/vp6dsp_init.c
      x86/vp8dsp_init.c
      x86/vp9dsp_init.c
      x86/vp9dsp_init_10bpp.c
      x86/vp9dsp_init_12bpp.c
      x86/vp9dsp_init_16bpp.c
      x86/vvc/vvcdsp_init.c
      x86/xvididct_init.c)
  if (CMAKE_ASM_NASM_COMPILER)
    set(x86_nasm_sources
        x86/aacencdsp.asm
        x86/aacpsdsp.asm
        x86/ac3dsp.asm
        x86/ac3dsp_downmix.asm
        x86/alacdsp.asm
        x86/audiodsp.asm
        x86/blockdsp.asm
        x86/bswapdsp.asm
        x86/cavsidct.asm
        x86/celt_pvq_search.asm
        x86/cfhddsp.asm
        x86/cfhdencdsp.asm
        x86/dcadsp.asm
        x86/dct32.asm x86/imdct36.asm
        x86/dirac_dwt.asm
        x86/diracdsp.asm
        x86/dnxhdenc.asm
        x86/exrdsp.asm
        x86/flac_dsp_gpl.asm
        x86/flacdsp.asm
        x86/fmtconvert.asm
        x86/fpel.asm
        x86/g722dsp.asm
        x86/h263_loopfilter.asm
        x86/h264_chromamc.asm
        x86/h264_chromamc_10bit.asm
        x86/h264_deblock.asm
        x86/h264_deblock_10bit.asm
        x86/h264_idct.asm
        x86/h264_idct_10bit.asm
        x86/h264_intrapred.asm
        x86/h264_intrapred_10bit.asm
        x86/h264_qpel_10bit.asm
        x86/h264_qpel_8bit.asm
        x86/h264_weight.asm
        x86/h264_weight_10bit.asm
        x86/h26x/h2656_inter.asm
        x86/hevc_add_res.asm
        x86/hevc_deblock.asm
        x86/hevc_idct.asm
        x86/hevc_mc.asm
        x86/hevc_sao.asm
        x86/hevc_sao_10bit.asm
        x86/hpeldsp.asm
        x86/huffyuvdsp.asm
        x86/huffyuvencdsp.asm
        x86/idctdsp.asm
        x86/jpeg2000dsp.asm
        x86/lossless_audiodsp.asm
        x86/lossless_videodsp.asm
        x86/lossless_videoencdsp.asm
        x86/lpc.asm
        x86/me_cmp.asm
        x86/mlpdsp.asm
        x86/mpegvideoencdsp.asm
        x86/opusdsp.asm
        x86/pixblockdsp.asm
        x86/pngdsp.asm
        x86/proresdsp.asm
        x86/qpel.asm
        x86/qpeldsp.asm
        x86/rv34dsp.asm
        x86/rv40dsp.asm
        x86/sbcdsp.asm
        x86/sbrdsp.asm
        x86/svq1enc.asm
        x86/synth_filter.asm
        x86/takdsp.asm
        x86/ttadsp.asm
        x86/ttaencdsp.asm
        x86/utvideodsp.asm
        x86/v210.asm
        x86/v210enc.asm
        x86/vc1dsp_loopfilter.asm
        x86/vc1dsp_mc.asm
        x86/videodsp.asm
        x86/vorbisdsp.asm
        x86/vp3dsp.asm
        x86/vp6dsp.asm
        x86/vp8dsp.asm
        x86/vp8dsp_loopfilter.asm
        x86/vp9intrapred.asm
        x86/vp9intrapred_16bpp.asm
        x86/vp9itxfm.asm
        x86/vp9itxfm_16bpp.asm
        x86/vp9lpf.asm
        x86/vp9lpf_16bpp.asm
        x86/vp9mc.asm
        x86/vp9mc_16bpp.asm
        x86/vvc/vvc_alf.asm
        x86/vvc/vvc_dmvr.asm
        x86/vvc/vvc_mc.asm
        x86/vvc/vvc_of.asm
        x86/vvc/vvc_sad.asm
        x86/xvididct.asm)
    if (ARCH_X86_64)
      list(APPEND x86_nasm_sources
          x86/simple_idct10.asm)
    else()
      list(APPEND x86_nasm_sources
          x86/simple_idct.asm)
    endif()
    list(APPEND avcodec_src
        ${x86_nasm_sources})
    list(TRANSFORM x86_nasm_sources PREPEND ${TEST_SUITE_FFMPEG_ROOT}/libavcodec/)
    set_source_files_properties(${x86_nasm_sources} PROPERTIES LANGUAGE ASM_NASM INCLUDE_DIRECTORIES ${TEST_SUITE_FFMPEG_ROOT}/libavcodec/x86)
  endif()
endif()
list(TRANSFORM avcodec_src PREPEND ${TEST_SUITE_FFMPEG_ROOT}/libavcodec/)
llvm_test_library(avcodec ${avcodec_src})
target_compile_definitions(avcodec PRIVATE HAVE_AV_CONFIG_H)
target_include_directories(avcodec PRIVATE ${TEST_SUITE_FFMPEG_ROOT}/libavcodec)


# libavformat

set(avformat_src
    3dostr.c
    4xm.c
    a64.c
    aacdec.c
    aadec.c
    aaxdec.c
    ac3dec.c
    ac4dec.c
    ac4enc.c
    acedec.c
    acm.c
    act.c
    adp.c
    ads.c
    adtsenc.c
    adxdec.c
    aeadec.c
    aeaenc.c
    afc.c
    aiff.c
    aiffdec.c
    aiffenc.c
    aixdec.c
    allformats.c
    alp.c
    amr.c
    amvenc.c
    anm.c
    apac.c
    apc.c
    ape.c
    apetag.c
    apm.c
    apngdec.c
    apngenc.c
    aptxdec.c
    aqtitledec.c
    argo_asf.c
    argo_brp.c
    argo_cvg.c
    asf.c
    asf_tags.c
    asfcrypt.c
    asfdec_f.c
    asfdec_o.c
    asfenc.c
    assdec.c
    assenc.c
    ast.c
    astdec.c
    astenc.c
    async.c
    au.c
    av1.c
    av1dec.c
    avc.c
    avformat.c
    avidec.c
    avienc.c
    avio.c
    aviobuf.c
    avlanguage.c
    avr.c
    avs.c
    avs2dec.c
    avs3dec.c
    bethsoftvid.c
    bfi.c
    bink.c
    binka.c
    bintext.c
    bit.c
    bmv.c
    boadec.c
    bonk.c
    brstm.c
    c93.c
    cache.c
    caf.c
    cafdec.c
    cafenc.c
    cavsvideodec.c
    cdg.c
    cdxl.c
    cinedec.c
    codec2.c
    concat.c
    concatdec.c
    crcenc.c
    crypto.c
    dash.c
    dashenc.c
    data_uri.c
    dauddec.c
    daudenc.c
    dcstr.c
    demux.c
    demux_utils.c
    derf.c
    dfa.c
    dfpwmdec.c
    dhav.c
    diracdec.c
    dnxhddec.c
    dovi_isom.c
    dsfdec.c
    dsicin.c
    dss.c
    dtsdec.c
    dtshddec.c
    dump.c
    dv.c
    dvbsub.c
    dvbtxt.c
    dvdclut.c
    dvenc.c
    dxa.c
    eacdata.c
    electronicarts.c
    epafdec.c
    evc.c
    evcdec.c
    ffmetadec.c
    ffmetaenc.c
    fifo.c
    file.c
    filmstripdec.c
    filmstripenc.c
    fitsdec.c
    fitsenc.c
    flac_picture.c
    flacdec.c
    flacenc.c
    flacenc_header.c
    flic.c
    flvdec.c
    flvenc.c
    format.c
    framecrcenc.c
    framehash.c
    frmdec.c
    fsb.c
    ftp.c
    fwse.c
    g722.c
    g723_1.c
    g726.c
    g729dec.c
    gdv.c
    genh.c
    gif.c
    gifdec.c
    gopher.c
    gsmdec.c
    gxf.c
    gxfenc.c
    h261dec.c
    h263dec.c
    h264dec.c
    hashenc.c
    hca.c
    hcom.c
    hdsenc.c
    hevc.c
    hevcdec.c
    hls.c
    hls_sample_encryption.c
    hlsenc.c
    hlsplaylist.c
    hlsproto.c
    hnm.c
    http.c
    httpauth.c
    iamf.c
    iamf_parse.c
    iamf_reader.c
    iamf_writer.c
    iamfdec.c
    iamfenc.c
    icecast.c
    icodec.c
    icoenc.c
    id3v1.c
    id3v2.c
    id3v2enc.c
    idcin.c
    idroqdec.c
    idroqenc.c
    iff.c
    ifv.c
    ilbc.c
    img2.c
    img2_alias_pix.c
    img2_brender_pix.c
    img2dec.c
    img2enc.c
    imx.c
    ingenientdec.c
    ip.c
    ipfsgateway.c
    ipmovie.c
    ipudec.c
    ircam.c
    ircamdec.c
    ircamenc.c
    isom.c
    isom_tags.c
    iss.c
    iv8.c
    ivfdec.c
    ivfenc.c
    jacosubdec.c
    jacosubenc.c
    jpegxl_anim_dec.c
    jvdec.c
    kvag.c
    lafdec.c
    latmenc.c
    lc3.c
    lmlm4.c
    loasdec.c
    lrc.c
    lrcdec.c
    lrcenc.c
    luodatdec.c
    lvfdec.c
    lxfdec.c
    m4vdec.c
    matroska.c
    matroskadec.c
    matroskaenc.c
    mca.c
    mccdec.c
    md5proto.c
    metadata.c
    mgsts.c
    microdvddec.c
    microdvdenc.c
    mj2kdec.c
    mkvtimestamp_v2.c
    mlpdec.c
    mlvdec.c
    mm.c
    mmf.c
    mms.c
    mmsh.c
    mmst.c
    mods.c
    moflex.c
    mov.c
    mov_chan.c
    mov_esds.c
    movenc.c
    movenc_ttml.c
    movenccenc.c
    movenchint.c
    mp3dec.c
    mp3enc.c
    mpc.c
    mpc8.c
    mpeg.c
    mpegenc.c
    mpegts.c
    mpegtsenc.c
    mpegvideodec.c
    mpjpeg.c
    mpjpegdec.c
    mpl2dec.c
    mpsubdec.c
    msf.c
    msnwc_tcp.c
    mspdec.c
    mtaf.c
    mtv.c
    musx.c
    mux.c
    mux_utils.c
    mvdec.c
    mvi.c
    mxf.c
    mxfdec.c
    mxfenc.c
    mxg.c
    nal.c
    ncdec.c
    network.c
    nistspheredec.c
    nspdec.c
    nsvdec.c
    nullenc.c
    nut.c
    nutdec.c
    nutenc.c
    nuv.c
    oggdec.c
    oggenc.c
    oggparsecelt.c
    oggparsedirac.c
    oggparseflac.c
    oggparseogm.c
    oggparseopus.c
    oggparseskeleton.c
    oggparsespeex.c
    oggparsetheora.c
    oggparsevorbis.c
    oggparsevp8.c
    oma.c
    omadec.c
    omaenc.c
    options.c
    os_support.c
    osq.c
    paf.c
    pcm.c
    pcmdec.c
    pcmenc.c
    pdvdec.c
    pjsdec.c
    pmpdec.c
    pp_bnk.c
    prompeg.c
    protocols.c
    psxstr.c
    pva.c
    pvfdec.c
    qcp.c
    qoadec.c
    qtpalette.c
    r3d.c
    rawdec.c
    rawenc.c
    rawutils.c
    rawvideodec.c
    rcwtdec.c
    rcwtenc.c
    rdt.c
    realtextdec.c
    redspark.c
    replaygain.c
    riff.c
    riffdec.c
    riffenc.c
    rka.c
    rl2.c
    rm.c
    rmdec.c
    rmenc.c
    rmsipr.c
    rpl.c
    rsd.c
    rso.c
    rsodec.c
    rsoenc.c
    rtmpdigest.c
    rtmphttp.c
    rtmppkt.c
    rtmpproto.c
    rtp.c
    rtpdec.c
    rtpdec_ac3.c
    rtpdec_amr.c
    rtpdec_asf.c
    rtpdec_dv.c
    rtpdec_g726.c
    rtpdec_h261.c
    rtpdec_h263.c
    rtpdec_h263_rfc2190.c
    rtpdec_h264.c
    rtpdec_hevc.c
    rtpdec_ilbc.c
    rtpdec_jpeg.c
    rtpdec_latm.c
    rtpdec_mpa_robust.c
    rtpdec_mpeg12.c
    rtpdec_mpeg4.c
    rtpdec_mpegts.c
    rtpdec_qcelp.c
    rtpdec_qdm2.c
    rtpdec_qt.c
    rtpdec_rfc4175.c
    rtpdec_svq3.c
    rtpdec_vc2hq.c
    rtpdec_vp8.c
    rtpdec_vp9.c
    rtpdec_xiph.c
    rtpenc.c
    rtpenc_aac.c
    rtpenc_amr.c
    rtpenc_chain.c
    rtpenc_h261.c
    rtpenc_h263.c
    rtpenc_h263_rfc2190.c
    rtpenc_h264_hevc.c
    rtpenc_jpeg.c
    rtpenc_latm.c
    rtpenc_mpegts.c
    rtpenc_mpv.c
    rtpenc_rfc4175.c
    rtpenc_vc2hq.c
    rtpenc_vp8.c
    rtpenc_vp9.c
    rtpenc_xiph.c
    rtpproto.c
    rtsp.c
    rtspdec.c
    rtspenc.c
    s337m.c
    samidec.c
    sapdec.c
    sapenc.c
    sauce.c
    sbcdec.c
    sbgdec.c
    sccdec.c
    sccenc.c
    scd.c
    sdns.c
    sdp.c
    sdr2.c
    sdsdec.c
    sdxdec.c
    seek.c
    segafilm.c
    segafilmenc.c
    segment.c
    serdec.c
    sga.c
    shortendec.c
    sierravmd.c
    siff.c
    smacker.c
    smjpeg.c
    smjpegdec.c
    smjpegenc.c
    smoothstreamingenc.c
    smush.c
    sol.c
    soxdec.c
    soxenc.c
    spdif.c
    spdifdec.c
    spdifenc.c
    srtdec.c
    srtenc.c
    srtp.c
    srtpproto.c
    stldec.c
    subfile.c
    subtitles.c
    subviewer1dec.c
    subviewerdec.c
    supdec.c
    supenc.c
    svag.c
    svs.c
    swf.c
    swfdec.c
    swfenc.c
    takdec.c
    tcp.c
    tedcaptionsdec.c
    tee.c
    tee_common.c
    teeproto.c
    thp.c
    tiertexseq.c
    tls.c
    tmv.c
    tta.c
    ttaenc.c
    ttmlenc.c
    tty.c
    txd.c
    ty.c
    udp.c
    uncodedframecrcenc.c
    url.c
    urldecode.c
    usmdec.c
    utils.c
    vag.c
    vc1dec.c
    vc1test.c
    vc1testenc.c
    version.c
    vividas.c
    vivo.c
    voc.c
    voc_packet.c
    vocdec.c
    vocenc.c
    vorbiscomment.c
    vpcc.c
    vpk.c
    vplayerdec.c
    vqf.c
    vvc.c
    vvcdec.c
    w64.c
    wady.c
    wavarc.c
    wavdec.c
    wavenc.c
    wc3movie.c
    webm_chunk.c
    webmdashenc.c
    webpenc.c
    webvttdec.c
    webvttenc.c
    westwood_aud.c
    westwood_audenc.c
    westwood_vqa.c
    wsddec.c
    wtv_common.c
    wtvdec.c
    wtvenc.c
    wv.c
    wvdec.c
    wvedec.c
    wvenc.c
    xa.c
    xmd.c
    xmv.c
    xvag.c
    xwma.c
    yop.c
    yuv4mpegdec.c
    yuv4mpegenc.c)
if (WIN32)
  list(APPEND avformat_link ws2_32)
endif()
list(TRANSFORM avformat_src PREPEND ${TEST_SUITE_FFMPEG_ROOT}/libavformat/)
llvm_test_library(avformat ${avformat_src})
target_link_libraries(avformat LINK_PRIVATE ${avformat_link})
target_compile_definitions(avformat PRIVATE HAVE_AV_CONFIG_H)


# libpostproc

set(postproc_src
    postprocess.c
    version.c)
list(TRANSFORM postproc_src PREPEND ${TEST_SUITE_FFMPEG_ROOT}/libpostproc/)
llvm_test_library(postproc ${postproc_src})
target_compile_definitions(postproc PRIVATE HAVE_AV_CONFIG_H)


# libswscale

set(swscale_src
    alphablend.c
    hscale.c
    hscale_fast_bilinear.c
    gamma.c
    half2float.c
    input.c
    options.c
    output.c
    rgb2rgb.c
    slice.c
    swscale.c
    swscale_unscaled.c
    utils.c
    version.c
    yuv2rgb.c
    vscale.c)
if (ARCH_AARCH64)
  list(APPEND swscale_src
      aarch64/rgb2rgb.c
      aarch64/swscale.c
      aarch64/swscale_unscaled.c
      aarch64/hscale.S
      aarch64/input.S
      aarch64/output.S
      aarch64/range_convert_neon.S
      aarch64/rgb2rgb_neon.S
      aarch64/swscale_unscaled_neon.S
      aarch64/yuv2rgb_neon.S
      )
elseif (ARCH_ARM)
  list(APPEND swscale_src
       arm/swscale.c
       arm/swscale_unscaled.c
       arm/rgb2yuv_neon_32.S
       arm/rgb2yuv_neon_16.S
       arm/hscale.S
       arm/output.S
       arm/yuv2rgb_neon.S)
elseif (ARCH_I386 OR ARCH_X86_64)
  list(APPEND swscale_src
      x86/rgb2rgb.c
      x86/swscale.c
      x86/yuv2rgb.c
      x86/hscale_fast_bilinear_simd.c)
  if (CMAKE_ASM_NASM_COMPILER)
    set(x86_nasm_sources
        x86/input.asm
        x86/output.asm
        x86/scale.asm
        x86/scale_avx2.asm
        x86/range_convert.asm
        x86/rgb_2_rgb.asm
        x86/yuv_2_rgb.asm
        x86/yuv2yuvX.asm)
    list(APPEND swscale_src
        ${x86_nasm_sources})
    list(TRANSFORM x86_nasm_sources PREPEND ${TEST_SUITE_FFMPEG_ROOT}/libswscale/)
    set_source_files_properties(${x86_nasm_sources} PROPERTIES LANGUAGE ASM_NASM)
  endif()
endif()
list(TRANSFORM swscale_src PREPEND ${TEST_SUITE_FFMPEG_ROOT}/libswscale/)
llvm_test_library(swscale ${swscale_src})
target_compile_definitions(swscale PRIVATE HAVE_AV_CONFIG_H)


# libswresample

set(swresample_src
    audioconvert.c
    dither.c
    options.c
    rematrix.c
    resample.c
    resample_dsp.c
    swresample.c
    swresample_frame.c
    version.c)
if (ARCH_AARCH64)
  list(APPEND swresample_src
      aarch64/audio_convert_init.c
      aarch64/resample_init.c
      aarch64/neontest.c
      aarch64/audio_convert_neon.S
      aarch64/resample.S
      )
elseif (ARCH_ARM)
  list(APPEND swresample_src
      arm/audio_convert_init.c
      arm/resample_init.c
      arm/neontest.c
      arm/audio_convert_neon.S
      arm/resample.S)
elseif (ARCH_I386 OR ARCH_X86_64)
  list(APPEND swresample_src
      x86/audio_convert_init.c
      x86/rematrix_init.c
      x86/resample_init.c)
  if (CMAKE_ASM_NASM_COMPILER)
    set(x86_nasm_sources
        x86/audio_convert.asm
        x86/rematrix.asm
        x86/resample.asm)
    list(APPEND swresample_src
        ${x86_nasm_sources})
    list(TRANSFORM x86_nasm_sources PREPEND ${TEST_SUITE_FFMPEG_ROOT}/libswresample/)
    set_source_files_properties(${x86_nasm_sources} PROPERTIES LANGUAGE ASM_NASM)
  endif()
endif()
list(TRANSFORM swresample_src PREPEND ${TEST_SUITE_FFMPEG_ROOT}/libswresample/)
llvm_test_library(swresample ${swresample_src})
target_compile_definitions(swresample PRIVATE HAVE_AV_CONFIG_H)


# libavfilter

set(avfilter_src
    aeval.c
    af_aap.c
    af_acontrast.c
    af_acopy.c
    af_acrossover.c
    af_acrusher.c
    af_adeclick.c
    af_adecorrelate.c
    af_adelay.c
    af_adenorm.c
    af_aderivative.c
    af_adrc.c
    af_adynamicequalizer.c
    af_adynamicsmooth.c
    af_aecho.c
    af_aemphasis.c
    af_aexciter.c
    af_afade.c
    af_afftdn.c
    af_afftfilt.c
    af_afir.c
    af_aformat.c
    af_afreqshift.c
    af_afwtdn.c
    af_agate.c
    af_aiir.c
    af_alimiter.c
    af_amerge.c
    af_amix.c
    af_amultiply.c
    af_anequalizer.c
    af_anlmdn.c
    af_anlms.c
    af_anull.c
    af_apad.c
    af_aphaser.c
    af_apsyclip.c
    af_apulsator.c
    af_aresample.c
    af_arls.c
    af_arnndn.c
    af_asdr.c
    af_asetnsamples.c
    af_asetrate.c
    af_ashowinfo.c
    af_asoftclip.c
    af_aspectralstats.c
    af_astats.c
    af_asubboost.c
    af_asupercut.c
    af_atempo.c
    af_atilt.c
    af_axcorrelate.c
    af_biquads.c
    af_channelmap.c
    af_channelsplit.c
    af_chorus.c
    af_compand.c
    af_compensationdelay.c
    af_crossfeed.c
    af_crystalizer.c
    af_dcshift.c
    af_deesser.c
    af_dialoguenhance.c
    af_drmeter.c
    af_dynaudnorm.c
    af_earwax.c
    af_extrastereo.c
    af_firequalizer.c
    af_flanger.c
    af_haas.c
    af_hdcd.c
    af_headphone.c
    af_join.c
    af_loudnorm.c
    af_mcompand.c
    af_pan.c
    af_replaygain.c
    af_sidechaincompress.c
    af_silencedetect.c
    af_silenceremove.c
    af_speechnorm.c
    af_stereotools.c
    af_stereowiden.c
    af_superequalizer.c
    af_surround.c
    af_tremolo.c
    af_vibrato.c
    af_virtualbass.c
    af_volume.c
    af_volumedetect.c
    allfilters.c
    asink_anullsink.c
    asrc_afdelaysrc.c
    asrc_afirsrc.c
    asrc_anoisesrc.c
    asrc_anullsrc.c
    asrc_hilbert.c
    asrc_sinc.c
    asrc_sine.c
    audio.c
    avf_a3dscope.c
    avf_abitscope.c
    avf_ahistogram.c
    avf_aphasemeter.c
    avf_avectorscope.c
    avf_concat.c
    avf_showcqt.c
    avf_showcwt.c
    avf_showfreqs.c
    avf_showspatial.c
    avf_showspectrum.c
    avf_showvolume.c
    avf_showwaves.c
    avfilter.c
    avfiltergraph.c
    bbox.c
    boxblur.c
    buffersink.c
    buffersrc.c
    bwdifdsp.c
    ccfifo.c
    colorspace.c
    colorspacedsp.c
    dnn_filter_common.c
    drawutils.c
    ebur128.c
    edge_common.c
    f_bench.c
    f_cue.c
    f_drawgraph.c
    f_ebur128.c
    f_graphmonitor.c
    f_interleave.c
    f_latency.c
    f_loop.c
    f_metadata.c
    f_perms.c
    f_realtime.c
    f_reverse.c
    f_segment.c
    f_select.c
    f_sendcmd.c
    f_sidedata.c
    f_streamselect.c
    formats.c
    framepool.c
    framequeue.c
    framesync.c
    generate_wave_table.c
    graphdump.c
    graphparser.c
    lavfutils.c
    lswsutils.c
    motion_estimation.c
    palette.c
    perlin.c
    pthread.c
    qp_table.c
    scale_eval.c
    scene_sad.c
    setpts.c
    settb.c
    split.c
    src_avsynctest.c
    src_movie.c
    transform.c
    trim.c
    vaf_spectrumsynth.c
    version.c
    vf_addroi.c
    vf_alphamerge.c
    vf_amplify.c
    vf_aspect.c
    vf_atadenoise.c
    vf_avgblur.c
    vf_backgroundkey.c
    vf_bbox.c
    vf_bilateral.c
    vf_bitplanenoise.c
    vf_blackdetect.c
    vf_blackframe.c
    vf_blend.c
    vf_blockdetect.c
    vf_blurdetect.c
    vf_bm3d.c
    vf_boxblur.c
    vf_bwdif.c
    vf_cas.c
    vf_ccrepack.c
    vf_chromakey.c
    vf_chromanr.c
    vf_chromashift.c
    vf_ciescope.c
    vf_codecview.c
    vf_colorbalance.c
    vf_colorchannelmixer.c
    vf_colorconstancy.c
    vf_colorcontrast.c
    vf_colorcorrect.c
    vf_colorize.c
    vf_colorkey.c
    vf_colorlevels.c
    vf_colormap.c
    vf_colormatrix.c
    vf_colorspace.c
    vf_colortemperature.c
    vf_convolution.c
    vf_convolve.c
    vf_copy.c
    vf_corr.c
    vf_cover_rect.c
    vf_crop.c
    vf_cropdetect.c
    vf_curves.c
    vf_datascope.c
    vf_dblur.c
    vf_dctdnoiz.c
    vf_deband.c
    vf_deblock.c
    vf_decimate.c
    vf_dedot.c
    vf_deflicker.c
    vf_dejudder.c
    vf_delogo.c
    vf_derain.c
    vf_deshake.c
    vf_despill.c
    vf_detelecine.c
    vf_displace.c
    vf_dnn_classify.c
    vf_dnn_detect.c
    vf_dnn_processing.c
    vf_drawbox.c
    vf_edgedetect.c
    vf_elbg.c
    vf_entropy.c
    vf_epx.c
    vf_eq.c
    vf_estdif.c
    vf_exposure.c
    vf_extractplanes.c
    vf_fade.c
    vf_feedback.c
    vf_fftdnoiz.c
    vf_fftfilt.c
    vf_field.c
    vf_fieldhint.c
    vf_fieldmatch.c
    vf_fieldorder.c
    vf_fillborders.c
    vf_find_rect.c
    vf_floodfill.c
    vf_format.c
    vf_fps.c
    vf_framepack.c
    vf_framerate.c
    vf_framestep.c
    vf_freezedetect.c
    vf_freezeframes.c
    vf_fspp.c
    vf_fsync.c
    vf_gblur.c
    vf_geq.c
    vf_gradfun.c
    vf_grayworld.c
    vf_guided.c
    vf_hflip.c
    vf_histeq.c
    vf_histogram.c
    vf_hqdn3d.c
    vf_hqx.c
    vf_hsvkey.c
    vf_hue.c
    vf_huesaturation.c
    vf_hwdownload.c
    vf_hwmap.c
    vf_hwupload.c
    vf_hysteresis.c
    vf_identity.c
    vf_idet.c
    vf_il.c
    vf_kerndeint.c
    vf_lagfun.c
    vf_lenscorrection.c
    vf_limitdiff.c
    vf_limiter.c
    vf_lumakey.c
    vf_lut.c
    vf_lut2.c
    vf_lut3d.c
    vf_maskedclamp.c
    vf_maskedmerge.c
    vf_maskedminmax.c
    vf_maskedthreshold.c
    vf_maskfun.c
    vf_mcdeint.c
    vf_median.c
    vf_mergeplanes.c
    vf_mestimate.c
    vf_midequalizer.c
    vf_minterpolate.c
    vf_mix.c
    vf_monochrome.c
    vf_morpho.c
    vf_mpdecimate.c
    vf_multiply.c
    vf_negate.c
    vf_neighbor.c
    vf_nlmeans.c
    vf_nnedi.c
    vf_noise.c
    vf_normalize.c
    vf_null.c
    vf_overlay.c
    vf_owdenoise.c
    vf_pad.c
    vf_palettegen.c
    vf_paletteuse.c
    vf_perspective.c
    vf_phase.c
    vf_photosensitivity.c
    vf_pixdesctest.c
    vf_pixelize.c
    vf_pp.c
    vf_pp7.c
    vf_premultiply.c
    vf_pseudocolor.c
    vf_psnr.c
    vf_pullup.c
    vf_qp.c
    vf_random.c
    vf_readeia608.c
    vf_readvitc.c
    vf_remap.c
    vf_removegrain.c
    vf_removelogo.c
    vf_repeatfields.c
    vf_rotate.c
    vf_sab.c
    vf_scale.c
    vf_scdet.c
    vf_scroll.c
    vf_selectivecolor.c
    vf_separatefields.c
    vf_setparams.c
    vf_shear.c
    vf_showinfo.c
    vf_showpalette.c
    vf_shuffleframes.c
    vf_shufflepixels.c
    vf_shuffleplanes.c
    vf_signalstats.c
    vf_signature.c
    vf_siti.c
    vf_smartblur.c
    vf_spp.c
    vf_sr.c
    vf_ssim.c
    vf_ssim360.c
    vf_stack.c
    vf_stereo3d.c
    vf_super2xsai.c
    vf_swaprect.c
    vf_swapuv.c
    vf_telecine.c
    vf_threshold.c
    vf_thumbnail.c
    vf_tile.c
    vf_tiltandshift.c
    vf_tinterlace.c
    vf_tmidequalizer.c
    vf_tonemap.c
    vf_tpad.c
    vf_transpose.c
    vf_unsharp.c
    vf_untile.c
    vf_uspp.c
    vf_v360.c
    vf_vaguedenoiser.c
    vf_varblur.c
    vf_vectorscope.c
    vf_vflip.c
    vf_vfrdet.c
    vf_vibrance.c
    vf_vif.c
    vf_vignette.c
    vf_vmafmotion.c
    vf_w3fdif.c
    vf_waveform.c
    vf_weave.c
    vf_xbr.c
    vf_xfade.c
    vf_xmedian.c
    vf_xpsnr.c
    vf_yadif.c
    vf_yaepblur.c
    vf_zoompan.c
    video.c
    vsink_nullsink.c
    vsrc_cellauto.c
    vsrc_gradients.c
    vsrc_life.c
    vsrc_mandelbrot.c
    vsrc_mptestsrc.c
    vsrc_perlin.c
    vsrc_sierpinski.c
    vsrc_testsrc.c
    yadif_common.c)
if (ARCH_AARCH64)
  list(APPEND avfilter_src
      aarch64/vf_bwdif_init_aarch64.c
      aarch64/vf_nlmeans_init.c
      aarch64/vf_bwdif_neon.S
      aarch64/vf_nlmeans_neon.S)
elseif (ARCH_I386 OR ARCH_X86_64)
  list(APPEND avfilter_src
      x86/scene_sad_init.c
      x86/af_afir_init.c
      x86/af_anlmdn_init.c
      x86/vf_atadenoise_init.c
      x86/vf_blend_init.c
      x86/vf_bwdif_init.c
      x86/colorspacedsp_init.c
      x86/vf_convolution_init.c
      x86/vf_eq_init.c
      x86/vf_fspp_init.c
      x86/vf_gblur_init.c
      x86/vf_gradfun_init.c
      x86/vf_framerate_init.c
      x86/vf_lut3d_init.c
      x86/vf_hflip_init.c
      x86/vf_hqdn3d_init.c
      x86/vf_idet_init.c
      x86/vf_tinterlace_init.c
      x86/vf_limiter_init.c
      x86/vf_lut3d_init.c
      x86/vf_maskedclamp_init.c
      x86/vf_maskedmerge_init.c
      x86/vf_nlmeans_init.c
      x86/vf_noise.c
      x86/vf_overlay_init.c
      x86/vf_pp7_init.c
      x86/vf_psnr_init.c
      x86/vf_xpsnr_init.c
      x86/vf_pullup_init.c
      x86/vf_removegrain_init.c
      x86/avf_showcqt_init.c
      x86/vf_convolution_init.c
      x86/vf_spp.c
      x86/vf_ssim_init.c
      x86/vf_stereo3d_init.c
      x86/vf_blend_init.c
      x86/vf_threshold_init.c
      x86/vf_tinterlace_init.c
      x86/vf_transpose_init.c
      x86/af_volume_init.c
      x86/vf_v360_init.c
      x86/vf_w3fdif_init.c
      x86/vf_yadif_init.c)
  if (CMAKE_ASM_NASM_COMPILER)
    set(x86_nasm_sources
        x86/scene_sad.asm
        x86/af_afir.asm
        x86/af_anlmdn.asm
        x86/vf_atadenoise.asm
        x86/vf_blend.asm
        x86/vf_bwdif.asm
        x86/colorspacedsp.asm
        x86/vf_convolution.asm
        x86/vf_eq.asm
        x86/vf_framerate.asm
        x86/vf_fspp.asm
        x86/vf_gblur.asm
        x86/vf_gradfun.asm
        x86/vf_lut3d.asm
        x86/vf_hflip.asm
        x86/vf_hqdn3d.asm
        x86/vf_idet.asm
        x86/vf_interlace.asm
        x86/vf_limiter.asm
        x86/vf_lut3d.asm
        x86/vf_maskedclamp.asm
        x86/vf_maskedmerge.asm
        x86/vf_nlmeans.asm
        x86/vf_overlay.asm
        x86/vf_pp7.asm
        x86/vf_psnr.asm
        x86/vf_pullup.asm
        x86/vf_removegrain.asm
        x86/avf_showcqt.asm
        x86/vf_convolution.asm
        x86/vf_ssim.asm
        x86/vf_stereo3d.asm
        x86/vf_blend.asm
        x86/vf_threshold.asm
        x86/vf_interlace.asm
        x86/vf_transpose.asm
        x86/af_volume.asm
        x86/vf_v360.asm
        x86/vf_w3fdif.asm
        x86/vf_yadif.asm
        x86/yadif-10.asm
        x86/yadif-16.asm)
    list(APPEND avfilter_src
        ${x86_nasm_sources})
    list(TRANSFORM x86_nasm_sources PREPEND ${TEST_SUITE_FFMPEG_ROOT}/libavfilter/)
    set_source_files_properties(${x86_nasm_sources} PROPERTIES LANGUAGE ASM_NASM)
  endif()
endif()
list(TRANSFORM avfilter_src PREPEND ${TEST_SUITE_FFMPEG_ROOT}/libavfilter/)
llvm_test_library(avfilter ${avfilter_src})
target_compile_definitions(avfilter PRIVATE HAVE_AV_CONFIG_H)


# libavdevice

set(avdevice_src
    alldevices.c
    avdevice.c
    utils.c
    version.c
    lavfi.c)
list(TRANSFORM avdevice_src PREPEND ${TEST_SUITE_FFMPEG_ROOT}/libavdevice/)
llvm_test_library(avdevice ${avdevice_src})
target_compile_definitions(avdevice PRIVATE HAVE_AV_CONFIG_H)


# fftools

set(ffmpeg_src
    cmdutils.c
    opt_common.c
    ffmpeg.c
    ffmpeg_dec.c
    ffmpeg_demux.c
    ffmpeg_enc.c
    ffmpeg_filter.c
    ffmpeg_hw.c
    ffmpeg_mux.c
    ffmpeg_mux_init.c
    ffmpeg_opt.c
    ffmpeg_sched.c
    objpool.c
    sync_queue.c
    thread_queue.c)
list(TRANSFORM ffmpeg_src PREPEND ${TEST_SUITE_FFMPEG_ROOT}/fftools/)
llvm_test_executable_no_test(ffmpeg ${ffmpeg_src})
target_link_libraries(ffmpeg PRIVATE avdevice avfilter swscale swresample postproc avformat avcodec avutil)

install(TARGETS ffmpeg)


# tests/checkasm

set(checkasm_src
    checkasm.c
    ac3dsp.c
    audiodsp.c
    blockdsp.c
    bswapdsp.c
    fdctdsp.c
    fmtconvert.c
    g722dsp.c
    h263dsp.c
    h264chroma.c
    h264dsp.c
    h264pred.c
    h264qpel.c
    idctdsp.c
    llauddsp.c
    llviddsp.c
    llviddspenc.c
    lpc.c
    motion.c
    mpegvideoencdsp.c
    vc1dsp.c
    vp8dsp.c
    videodsp.c
    aacpsdsp.c
    sbrdsp.c
    aacencdsp.c
    alacdsp.c
    synth_filter.c
    exrdsp.c
    flacdsp.c
    huffyuvdsp.c
    jpeg2000dsp.c
    opusdsp.c
    pixblockdsp.c
    hevc_add_res.c
    hevc_deblock.c
    hevc_idct.c
    hevc_sao.c
    hevc_pel.c
    rv34dsp.c
    rv40dsp.c
    svq1enc.c
    takdsp.c
    utvideodsp.c
    v210dec.c
    v210enc.c
    vorbisdsp.c
    vp9dsp.c
    vvc_alf.c
    vvc_mc.c
    af_afir.c
    vf_blend.c
    vf_bwdif.c
    vf_colorspace.c
    vf_eq.c
    vf_gblur.c
    vf_hflip.c
    vf_threshold.c
    vf_nlmeans.c
    vf_convolution.c
    sw_gbrp.c
    sw_range_convert.c
    sw_rgb.c
    sw_scale.c
    sw_yuv2rgb.c
    sw_yuv2yuv.c
    av_tx.c
    fixed_dsp.c
    float_dsp.c
    lls.c)
if (ARCH_AARCH64)
  list(APPEND checkasm_src
      aarch64/checkasm.S)
elseif (ARCH_ARM)
  list(APPEND checkasm_src
      arm/checkasm.S)
elseif (ARCH_I386 OR ARCH_X86_64)
  if (CMAKE_ASM_NASM_COMPILER)
    set(x86_nasm_sources
        x86/checkasm.asm)
    list(APPEND checkasm_src
        ${x86_nasm_sources})
    list(TRANSFORM x86_nasm_sources PREPEND ${TEST_SUITE_FFMPEG_ROOT}/libavfilter/)
    set_source_files_properties(${x86_nasm_sources} PROPERTIES LANGUAGE ASM_NASM)
  endif()
endif()
list(TRANSFORM checkasm_src PREPEND ${TEST_SUITE_FFMPEG_ROOT}/tests/checkasm/)
llvm_test_run()
llvm_test_executable(ffmpeg_checkasm ${checkasm_src})
target_link_libraries(ffmpeg_checkasm PRIVATE avdevice avfilter swscale swresample postproc avformat avcodec avutil)
