set(target video)

add_compile_definitions(
    # 0d8c:0016: 板载声卡
    -DBOARD_SOUND_CARD_ID="USB0d8c:0016"
)

aux_source_directory(. VIDEO_SOURCES)

aux_source_directory(core CORE_SOURCES)
list(APPEND VIDEO_SOURCES ${CORE_SOURCES})

aux_source_directory(v4l2 CORE_V4L2_SOURCES)
list(APPEND VIDEO_SOURCES ${CORE_V4L2_SOURCES})

aux_source_directory(alsa ALSA_SOURCES)
list(APPEND VIDEO_SOURCES ${ALSA_SOURCES})

if (USING_HISIMPP5)
    aux_source_directory(hisi/mpp5 HISI_SOURCES)
    aux_source_directory(hisi/mpp5/audio-adp HISI_ADP_SOURCES)
    list(APPEND VIDEO_SOURCES ${HISI_SOURCES})
    list(APPEND VIDEO_SOURCES ${HISI_ADP_SOURCES})
endif()

if (USING_ITE_FRONTEND)
    aux_source_directory(ite ITE_SOURCES)
    list(APPEND VIDEO_SOURCES ${ITE_SOURCES})
endif()

if (USING_LIBOPUS)
aux_source_directory(libopus LIBOPUS_SOURCES)
list(APPEND VIDEO_SOURCES ${LIBOPUS_SOURCES})
endif()

if (USING_SHINE)
aux_source_directory(shine SHINE_SOURCES)
list(APPEND VIDEO_SOURCES ${SHINE_SOURCES})
endif()

aux_source_directory(ffmpeg FFMPEG_SOURCES)
list(APPEND VIDEO_SOURCES ${FFMPEG_SOURCES})

aux_source_directory(user/alsa ALSA_USER_SOURCES)
list(APPEND VIDEO_SOURCES ${ALSA_USER_SOURCES})

aux_source_directory(mediaserver MEDIA_SERVER_USER_SOURCES)
list(APPEND VIDEO_SOURCES ${MEDIA_SERVER_USER_SOURCES})

aux_source_directory(user USER_SOURCES)

list(APPEND CMAKE_PREFIX_PATH $ENV{ALSALIB_PATH})
find_package(ALSA REQUIRED)

include_directories(
    $ENV{MPP_PATH}/include
    $ENV{FFMPEG_PATH}/include
    $ENV{CIMG_PATH}
    $ENV{LIBJPEG_PATH}/include
    $ENV{LIBPNG_PATH}/include
    $ENV{FREETYPE_PATH}/include/freetype2
    $ENV{OSIP_PATH}/include
    $ENV{EXOSIP_PATH}/include
    $ENV{UCHARDET_PATH}/include
    $ENV{LIBOPUS_PATH}/include
    $ENV{SHINE_PATH}/include
    $ENV{MEDIA_SERVER_PATH}/include
    $ENV{MEDIA_SERVER_PATH}/include/avcodec/h264
     ${ALSA_INCLUDE_DIR}
)

add_library(${target} STATIC
    ${VIDEO_SOURCES}
    ${USER_SOURCES}
)
add_definitions(
    -Dcimg_display=0
    -Dcimg_use_jpeg
    -Dcimg_use_png
)

target_link_libraries(${target} PRIVATE
    $ENV{LIBJPEG_PATH}/lib/libjpeg.a
    $ENV{LIBPNG_PATH}/lib/libpng.a
    $ENV{FREETYPE_PATH}/lib/libfreetype.a
    $ENV{EXOSIP_PATH}/lib/libeXosip2.a
    $ENV{OSIP_PATH}/lib/libosip2.a
    $ENV{OSIP_PATH}/lib/libosipparser2.a
    $ENV{UCHARDET_PATH}/lib/libuchardet.a
    $ENV{OPENJPEG_PATH}/lib/libopenjp2.a
    ${ALSA_LIBRARIES}
)
 
if (USING_ZLMEDIAKIT)
    message("Using ZLMediaKit...")
    add_subdirectory(zlmediakit)
    add_definitions(-DUSING_ZLMEDIAKIT)
    target_include_directories(${target} PUBLIC zlmediakit)
    target_link_libraries(${target} PRIVATE zlmediakit)
endif()

if (USING_FFMPEG)
    add_compile_definitions(-DUSING_FFMPEG -D__STDC_CONSTANT_MACROS)
    target_link_libraries(${target} PRIVATE
        $ENV{FFMPEG_PATH}/lib/libavdevice.a
        $ENV{FFMPEG_PATH}/lib/libavfilter.a
        $ENV{FFMPEG_PATH}/lib/libavformat.a
        $ENV{FFMPEG_PATH}/lib/libavcodec.a
        $ENV{FFMPEG_PATH}/lib/libavutil.a
        $ENV{FFMPEG_PATH}/lib/libswscale.a
        $ENV{FFMPEG_PATH}/lib/libswresample.a
        $ENV{X264_PATH}/lib/libx264.a
        $ENV{X265_PATH}/lib/libx265.a
        $ENV{LIBMP3LAME_PATH}/lib/libmp3lame.a
        dl
    )
endif()

if (USING_MEDIASERVER)
target_link_libraries(${target} PRIVATE
    $ENV{MEDIA_SERVER_PATH}/librtmp.a
    $ENV{MEDIA_SERVER_PATH}/libflv.a
    $ENV{MEDIA_SERVER_PATH}/libmpeg.a
    $ENV{MEDIA_SERVER_PATH}/libh264.a
    $ENV{MEDIA_SERVER_PATH}/libh265.a
)
endif()

if (USING_LIBOPUS)
target_link_libraries(${target} PRIVATE
    $ENV{LIBOPUS_PATH}/lib/libopus.a
)
endif()

if (USING_SHINE)
target_link_libraries(${target} PRIVATE
    $ENV{SHINE_PATH}/lib/libshine.a
)
endif()
