enc-aomedia-av1: Initial version
Properly configures, builds, registers and attempts to encode. Gets stuck on an unusual long stall when finally having enough frames to encode.
This commit is contained in:
+156
@@ -0,0 +1,156 @@
|
||||
cmake_minimum_required(VERSION 2.8.12)
|
||||
PROJECT(enc-aomedia-av1)
|
||||
|
||||
################################################################################
|
||||
# Options
|
||||
################################################################################
|
||||
SET(AOMEDIA_AV1_BUILD_DIR "" CACHE PATH "Path to the directory containing the CMake build files.")
|
||||
SET(AOMEDIA_AV1_INCLUDE_DIR "" CACHE PATH "Include directory for AOMedia1 containing aom.h")
|
||||
|
||||
if(NOT TARGET obs-studio)
|
||||
SET(OBSSTUDIO_DIR "" CACHE PATH "OBS Studio Source Code Directory")
|
||||
endif()
|
||||
|
||||
# Validate
|
||||
if(AOMEDIA_AV1_BUILD_DIR STREQUAL "")
|
||||
message(FATAL_ERROR "AV1: Build directory not set!")
|
||||
return()
|
||||
elseif(NOT EXISTS "${AOMEDIA_AV1_BUILD_DIR}/RelWithDebInfo/aom.lib")
|
||||
message(FATAL_ERROR "AV1: Build directory set, but could not find RelWithDebInfo/aom.lib!")
|
||||
return()
|
||||
elseif(NOT EXISTS "${AOMEDIA_AV1_BUILD_DIR}/Debug/aom.lib")
|
||||
message(FATAL_ERROR "AV1: Build directory set, but could not find Debug/aom.lib!")
|
||||
return()
|
||||
endif()
|
||||
|
||||
if(AOMEDIA_AV1_INCLUDE_DIR STREQUAL "")
|
||||
message(FATAL_ERROR "AV1: Include directory not set!")
|
||||
return()
|
||||
elseif(NOT EXISTS "${AOMEDIA_AV1_INCLUDE_DIR}/aom/aom.h")
|
||||
message(FATAL_ERROR "AV1: Include directory set, but could not find aom.h!")
|
||||
return()
|
||||
endif()
|
||||
|
||||
if(NOT TARGET obs-studio)
|
||||
if(OBSSTUDIO_DIR STREQUAL "")
|
||||
message(FATAL_ERROR "OBSSTUDIO_DIR not set!")
|
||||
return()
|
||||
endif()
|
||||
if(NOT EXISTS "${OBSSTUDIO_DIR}/libobs/obs-module.h")
|
||||
message(FATAL_ERROR "OBSSTUDIO_DIR invalid!")
|
||||
return()
|
||||
endif()
|
||||
endif()
|
||||
|
||||
################################################################################
|
||||
# Code
|
||||
################################################################################
|
||||
|
||||
# Versioning
|
||||
SET(VERSION_MAJOR 0)
|
||||
SET(VERSION_MINOR 0)
|
||||
SET(VERSION_PATCH 0)
|
||||
configure_file(
|
||||
"${PROJECT_SOURCE_DIR}/source/version.h.in"
|
||||
"${PROJECT_BINARY_DIR}/source/version.h"
|
||||
)
|
||||
|
||||
# Headers
|
||||
SET(enc-aomedia-av1_HEADERS
|
||||
"${PROJECT_SOURCE_DIR}/source/av1-encoder.h"
|
||||
"${PROJECT_SOURCE_DIR}/source/plugin.h"
|
||||
"${PROJECT_BINARY_DIR}/source/version.h"
|
||||
"${PROJECT_SOURCE_DIR}/source/strings.h"
|
||||
)
|
||||
|
||||
# Sources
|
||||
SET(enc-aomedia-av1_SOURCES
|
||||
"${PROJECT_SOURCE_DIR}/source/av1-encoder.cpp"
|
||||
"${PROJECT_SOURCE_DIR}/source/plugin.cpp"
|
||||
"${PROJECT_SOURCE_DIR}/source/version.h.in"
|
||||
)
|
||||
|
||||
# Libraries
|
||||
SET(enc-aomedia-av1_LIBRARIES
|
||||
debug ${AOMEDIA_AV1_BUILD_DIR}/Debug/aom.lib
|
||||
optimized ${AOMEDIA_AV1_BUILD_DIR}/RelWithDebInfo/aom.lib
|
||||
)
|
||||
|
||||
# Include Directories
|
||||
INCLUDE_DIRECTORIES(
|
||||
"${AOMEDIA_AV1_BUILD_DIR}/dist/include"
|
||||
"${AOMEDIA_AV1_BUILD_DIR}"
|
||||
"${PROJECT_BINARY_DIR}"
|
||||
"${PROJECT_BINARY_DIR}/source"
|
||||
"${PROJECT_SOURCE_DIR}"
|
||||
"${PROJECT_SOURCE_DIR}/source"
|
||||
)
|
||||
|
||||
################################################################################
|
||||
# Standalone and OBS Studio Build Data
|
||||
################################################################################
|
||||
if(TARGET obs-studio)
|
||||
# Directories
|
||||
INCLUDE_DIRECTORIES(
|
||||
"${CMAKE_SOURCE_DIR}"
|
||||
)
|
||||
SET(LIBOBS_LIBRARIES libobs)
|
||||
else()
|
||||
# Standlone Specific
|
||||
|
||||
# Find OBS Libraries
|
||||
SET(obsPath "${OBSSTUDIO_DIR}")
|
||||
INCLUDE("${obsPath}/cmake/external/Findlibobs.cmake")
|
||||
|
||||
# Compiling
|
||||
INCLUDE_DIRECTORIES(
|
||||
"${OBSSTUDIO_DIR}"
|
||||
)
|
||||
add_definitions(-D_CRT_SECURE_NO_WARNINGS)
|
||||
endif()
|
||||
|
||||
################################################################################
|
||||
# Build
|
||||
################################################################################
|
||||
ADD_LIBRARY(enc-aomedia-av1 MODULE
|
||||
${enc-aomedia-av1_HEADERS}
|
||||
${enc-aomedia-av1_SOURCES}
|
||||
)
|
||||
TARGET_LINK_LIBRARIES(enc-aomedia-av1
|
||||
${LIBOBS_LIBRARIES}
|
||||
${enc-aomedia-av1_LIBRARIES}
|
||||
)
|
||||
|
||||
# All Warnings, Extra Warnings, Pedantic
|
||||
if(MSVC)
|
||||
# Force to always compile with W4
|
||||
if(CMAKE_CXX_FLAGS MATCHES "/W[0-4]")
|
||||
string(REGEX REPLACE "/W[0-4]" "/W4" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
|
||||
else()
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W4")
|
||||
endif()
|
||||
elseif(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX)
|
||||
# Update if necessary
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wno-long-long -pedantic")
|
||||
endif()
|
||||
|
||||
if(TARGET obs-studio)
|
||||
install_obs_plugin_with_data(enc-aomedia-av1 data)
|
||||
else()
|
||||
math(EXPR BITS "8*${CMAKE_SIZEOF_VOID_P}")
|
||||
add_custom_command(TARGET enc-aomedia-av1 POST_BUILD
|
||||
COMMAND ${CMAKE_COMMAND} -E copy_directory
|
||||
"${PROJECT_SOURCE_DIR}/data"
|
||||
"${PROJECT_SOURCE_DIR}/#Build/data/obs-plugins/enc-aomedia-av1"
|
||||
)
|
||||
add_custom_command(TARGET enc-aomedia-av1 POST_BUILD
|
||||
COMMAND ${CMAKE_COMMAND} -E copy
|
||||
"$<TARGET_FILE:enc-aomedia-av1>"
|
||||
"${PROJECT_SOURCE_DIR}/#Build/obs-plugins/${BITS}bit/$<TARGET_FILE_NAME:enc-aomedia-av1>"
|
||||
)
|
||||
add_custom_command(TARGET enc-aomedia-av1 POST_BUILD
|
||||
COMMAND ${CMAKE_COMMAND} -E copy
|
||||
"$<TARGET_FILE_DIR:enc-aomedia-av1>/enc-aomedia-av1.pdb"
|
||||
"${PROJECT_SOURCE_DIR}/#Build/obs-plugins/${BITS}bit/enc-aomedia-av1.pdb"
|
||||
)
|
||||
endif()
|
||||
Reference in New Issue
Block a user