From 78a2116a4ad58a96d23146ffa8f8ca4d998a3a5a Mon Sep 17 00:00:00 2001 From: Marc Bertola <5149167+marcbertola@users.noreply.github.com> Date: Tue, 24 Mar 2020 16:00:09 -0400 Subject: [ffmpeg] Add NVIDIA Codec feature for Windows and Linux (#9171) * Add NVIDIA Codec support for Windows, Linux and Linux for Tegra * [ffnvcodec] Fix typos, add/remove comments * Bump nvcodec version to 9.1.23.1 * Update version number as per change request * Use PORT variable instead of hardcoded portname * Identify the release the hash pertains to * Find nvcodec in 'installed' instead of 'packages' * Force FFmpeg to look for nvcodec headers in the installed directory instead of /usr/lib/pkgconfig. * Use p option on cygpath to convert full path in case it contains more than one entry --- ports/ffnvcodec/CONTROL | 8 ++--- ports/ffnvcodec/build.sh | 18 ++++++++++++ ports/ffnvcodec/copyright | 26 +++++++++++++++++ ports/ffnvcodec/portfile.cmake | 66 +++++++++++++++++++++++++++++++++--------- 4 files changed, 101 insertions(+), 17 deletions(-) create mode 100644 ports/ffnvcodec/build.sh create mode 100644 ports/ffnvcodec/copyright (limited to 'ports/ffnvcodec') diff --git a/ports/ffnvcodec/CONTROL b/ports/ffnvcodec/CONTROL index 5cc6cb19b..5779ec9e3 100644 --- a/ports/ffnvcodec/CONTROL +++ b/ports/ffnvcodec/CONTROL @@ -1,4 +1,4 @@ -Source: ffnvcodec -Version: 9.1.23.0 -Homepage: https://github.com/FFmpeg/nv-codec-headers -Description: FFmpeg version of Nvidia Codec SDK headers. \ No newline at end of file +Source: ffnvcodec +Version: 9.1.23.1 +Homepage: https://github.com/FFmpeg/nv-codec-headers +Description: FFmpeg version of Nvidia Codec SDK headers. diff --git a/ports/ffnvcodec/build.sh b/ports/ffnvcodec/build.sh new file mode 100644 index 000000000..416c6bd8f --- /dev/null +++ b/ports/ffnvcodec/build.sh @@ -0,0 +1,18 @@ +#!/usr/bin/bash + +# Deploys the ffnvcodec.pc file to the MSYS rootfs so that pkgconfig can find it. + +set -e +export PATH=/usr/bin:$PATH + +SOURCE_PATH="$1" +CURRENT_PACKAGES_DIR="$2" + +pushd ${SOURCE_PATH} + +# Create ffnvcodec.pc +make PREFIX=${CURRENT_PACKAGES_DIR} +make install PREFIX=${CURRENT_PACKAGES_DIR} + + +popd diff --git a/ports/ffnvcodec/copyright b/ports/ffnvcodec/copyright new file mode 100644 index 000000000..07c1bc4d7 --- /dev/null +++ b/ports/ffnvcodec/copyright @@ -0,0 +1,26 @@ +/* + * This copyright notice applies to this header file only: + * + * Copyright (c) 2010-2019 NVIDIA Corporation + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the software, and to permit persons to whom the + * software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + */ diff --git a/ports/ffnvcodec/portfile.cmake b/ports/ffnvcodec/portfile.cmake index c6f13e711..66d8bcb18 100644 --- a/ports/ffnvcodec/portfile.cmake +++ b/ports/ffnvcodec/portfile.cmake @@ -1,13 +1,53 @@ -# Header-only-library -vcpkg_from_github( - OUT_SOURCE_PATH SOURCE_PATH - REPO FFmpeg/nv-codec-headers - REF n9.1.23.0 - SHA512 d9cb1ad496d971da31165e643c6c4f433561a856050503783051604f24ea5f9997859b05695632ea94ce9659966915789e6d7f7d536764804c9f673d1c8c63e4 - HEAD_REF master -) - -file(COPY ${SOURCE_PATH}/include DESTINATION ${CURRENT_PACKAGES_DIR}) - -#Handle copyright -file(INSTALL ${CMAKE_CURRENT_LIST_DIR}/LICENSE.txt DESTINATION ${CURRENT_PACKAGES_DIR}/share/${PORT} RENAME copyright) \ No newline at end of file +# Get nvcodec +vcpkg_from_github( + OUT_SOURCE_PATH SOURCE_PATH + REPO FFmpeg/nv-codec-headers + REF 4a0bbfd58724d6d19851cd8a6f7a9098dde9ab77 # 9.1.23.1 + SHA512 39b643c6925558428f2e814fc3441878a906f324163396b8c6139ce48f62308c3dc2416b9c995eaed890338919ca0dfc9437fbb6b6d078f7a6f1b9675104c223 + HEAD_REF master +) + +# ==================================================== +# Install the pkgconfig info for the `nvcodec` package +# ==================================================== + +# Windows +if(NOT VCPKG_CMAKE_SYSTEM_NAME OR VCPKG_CMAKE_SYSTEM_NAME STREQUAL "WindowsStore") + set(BUILD_SCRIPT ${CMAKE_CURRENT_LIST_DIR}\\build.sh) + vcpkg_acquire_msys(MSYS_ROOT PACKAGES make pkg-config) + set(BASH ${MSYS_ROOT}/usr/bin/bash.exe) + + message(STATUS "Building ${_csc_PROJECT_PATH} for Release") + file(MAKE_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}) + + # Make and deploy the ffnvcodec.pc file using MSYS + # (so that FFmpeg can find it in the MSYS rootfs) + vcpkg_execute_required_process( + COMMAND ${BASH} --noprofile --norc "${BUILD_SCRIPT}" + "${SOURCE_PATH}" + "${CURRENT_PACKAGES_DIR}" + WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET} + LOGNAME build-${TARGET_TRIPLET} + ) + +# Linux, etc. +else() + FIND_PROGRAM(MAKE make) + IF (NOT MAKE) + MESSAGE(FATAL_ERROR "MAKE not found") + ENDIF () + + vcpkg_execute_required_process( + COMMAND make PREFIX=$${CURRENT_PACKAGES_DIR} + WORKING_DIRECTORY ${SOURCE_PATH} + LOGNAME make-${TARGET_TRIPLET} + ) + + # FFmpeg uses pkgconfig to find ffnvcodec.pc, so install it where + # FFMpeg's call to pkgconfig expects to find it. + file(INSTALL ${SOURCE_PATH}/ffnvcodec.pc DESTINATION ${CURRENT_PACKAGES_DIR}/lib/pkgconfig) +endif() + +# Install the files to their default vcpkg locations +file(INSTALL ${SOURCE_PATH}/include DESTINATION ${CURRENT_PACKAGES_DIR}) +file(INSTALL ${CURRENT_PORT_DIR}/copyright DESTINATION ${CURRENT_PACKAGES_DIR}/share/${PORT}) -- cgit v1.2.3