mirror of
https://github.com/microsoft/vcpkg.git
synced 2025-01-14 06:22:56 +08:00
[libmpeg2] Add new port (#8871)
* [libmpeg2] Add new port Libmpeg2 seems to be a somewhat old project, last release was done in 2008, but it is still in use by some projects e.g. ResidualVM I have verified the mpeg2dec built for x86-64 with MSVC produces similar results as the one pre-packaged on my Arch. * [libmpeg2] Apply review comments * [libmpeg2] Add ci.baseline.txt exemptions
This commit is contained in:
parent
0bbf4400e9
commit
305785ba9b
146
ports/libmpeg2/0001-Add-naive-MSVC-support-to-sources.patch
Normal file
146
ports/libmpeg2/0001-Add-naive-MSVC-support-to-sources.patch
Normal file
@ -0,0 +1,146 @@
|
||||
From ed3b6e4bca1fe5211e3d7ca06bbbf9b161c8bc19 Mon Sep 17 00:00:00 2001
|
||||
From: Michal Janiszewski <janisozaur@gmail.com>
|
||||
Date: Sat, 2 Nov 2019 14:50:53 -0700
|
||||
Subject: [PATCH] Add naive MSVC support to sources
|
||||
|
||||
---
|
||||
libmpeg2/convert/rgb.c | 2 +-
|
||||
libmpeg2/cpu_accel.c | 4 ++--
|
||||
libmpeg2/cpu_state.c | 4 ++--
|
||||
libmpeg2/idct.c | 2 +-
|
||||
libmpeg2/motion_comp.c | 2 +-
|
||||
libvo/video_out_dx.c | 6 +++---
|
||||
vc++/config.h | 2 ++
|
||||
7 files changed, 12 insertions(+), 10 deletions(-)
|
||||
|
||||
diff --git a/libmpeg2/convert/rgb.c b/libmpeg2/convert/rgb.c
|
||||
index 8863b0b..db6f4e3 100644
|
||||
--- a/libmpeg2/convert/rgb.c
|
||||
+++ b/libmpeg2/convert/rgb.c
|
||||
@@ -499,7 +499,7 @@ static int rgb_internal (mpeg2convert_rgb_order_t order, unsigned int bpp,
|
||||
int convert420 = 0;
|
||||
int rgb_stride_min = ((bpp + 7) >> 3) * seq->width;
|
||||
|
||||
-#ifdef ARCH_X86
|
||||
+#if !defined(_MSC_VER) && defined(ARCH_X86)
|
||||
if (!copy && (accel & MPEG2_ACCEL_X86_MMXEXT)) {
|
||||
convert420 = 0;
|
||||
copy = mpeg2convert_rgb_mmxext (order, bpp, seq);
|
||||
diff --git a/libmpeg2/cpu_accel.c b/libmpeg2/cpu_accel.c
|
||||
index 9b24610..a922df1 100644
|
||||
--- a/libmpeg2/cpu_accel.c
|
||||
+++ b/libmpeg2/cpu_accel.c
|
||||
@@ -29,7 +29,7 @@
|
||||
#include "attributes.h"
|
||||
#include "mpeg2_internal.h"
|
||||
|
||||
-#if defined(ARCH_X86) || defined(ARCH_X86_64)
|
||||
+#if !defined(_MSC_VER) && (defined(ARCH_X86) || defined(ARCH_X86_64))
|
||||
static inline uint32_t arch_accel (uint32_t accel)
|
||||
{
|
||||
if (accel & (MPEG2_ACCEL_X86_3DNOW | MPEG2_ACCEL_X86_MMXEXT))
|
||||
@@ -253,7 +253,7 @@ static inline uint32_t arch_accel (uint32_t accel)
|
||||
|
||||
uint32_t mpeg2_detect_accel (uint32_t accel)
|
||||
{
|
||||
-#if defined (ARCH_X86) || defined (ARCH_X86_64) || defined (ARCH_PPC) || defined (ARCH_ALPHA) || defined (ARCH_SPARC)
|
||||
+#if !defined(_MSC_VER) && (defined (ARCH_X86) || defined (ARCH_X86_64) || defined (ARCH_PPC) || defined (ARCH_ALPHA) || defined (ARCH_SPARC))
|
||||
accel = arch_accel (accel);
|
||||
#endif
|
||||
return accel;
|
||||
diff --git a/libmpeg2/cpu_state.c b/libmpeg2/cpu_state.c
|
||||
index 2f2f64a..f4966c1 100644
|
||||
--- a/libmpeg2/cpu_state.c
|
||||
+++ b/libmpeg2/cpu_state.c
|
||||
@@ -36,7 +36,7 @@
|
||||
void (* mpeg2_cpu_state_save) (cpu_state_t * state) = NULL;
|
||||
void (* mpeg2_cpu_state_restore) (cpu_state_t * state) = NULL;
|
||||
|
||||
-#if defined(ARCH_X86) || defined(ARCH_X86_64)
|
||||
+#if !defined(_MSC_VER) && (defined(ARCH_X86) || defined(ARCH_X86_64))
|
||||
static void state_restore_mmx (cpu_state_t * state)
|
||||
{
|
||||
emms ();
|
||||
@@ -115,7 +115,7 @@ static void state_restore_altivec (cpu_state_t * state)
|
||||
|
||||
void mpeg2_cpu_state_init (uint32_t accel)
|
||||
{
|
||||
-#if defined(ARCH_X86) || defined(ARCH_X86_64)
|
||||
+#if !defined(_MSC_VER) && (defined(ARCH_X86) || defined(ARCH_X86_64))
|
||||
if (accel & MPEG2_ACCEL_X86_MMX) {
|
||||
mpeg2_cpu_state_restore = state_restore_mmx;
|
||||
}
|
||||
diff --git a/libmpeg2/idct.c b/libmpeg2/idct.c
|
||||
index 81c57e0..a057bf7 100644
|
||||
--- a/libmpeg2/idct.c
|
||||
+++ b/libmpeg2/idct.c
|
||||
@@ -235,7 +235,7 @@ static void mpeg2_idct_add_c (const int last, int16_t * block,
|
||||
|
||||
void mpeg2_idct_init (uint32_t accel)
|
||||
{
|
||||
-#ifdef ARCH_X86
|
||||
+#if !defined(_MSC_VER) && defined(ARCH_X86)
|
||||
if (accel & MPEG2_ACCEL_X86_SSE2) {
|
||||
mpeg2_idct_copy = mpeg2_idct_copy_sse2;
|
||||
mpeg2_idct_add = mpeg2_idct_add_sse2;
|
||||
diff --git a/libmpeg2/motion_comp.c b/libmpeg2/motion_comp.c
|
||||
index 7aed113..b00a32d 100644
|
||||
--- a/libmpeg2/motion_comp.c
|
||||
+++ b/libmpeg2/motion_comp.c
|
||||
@@ -33,7 +33,7 @@ mpeg2_mc_t mpeg2_mc;
|
||||
|
||||
void mpeg2_mc_init (uint32_t accel)
|
||||
{
|
||||
-#ifdef ARCH_X86
|
||||
+#if !defined(_MSC_VER) && defined(ARCH_X86)
|
||||
if (accel & MPEG2_ACCEL_X86_MMXEXT)
|
||||
mpeg2_mc = mpeg2_mc_mmxext;
|
||||
else if (accel & MPEG2_ACCEL_X86_3DNOW)
|
||||
diff --git a/libvo/video_out_dx.c b/libvo/video_out_dx.c
|
||||
index 36de68a..0797cdc 100644
|
||||
--- a/libvo/video_out_dx.c
|
||||
+++ b/libvo/video_out_dx.c
|
||||
@@ -82,7 +82,7 @@ static void update_overlay (dx_instance_t * instance)
|
||||
dwFlags, &ddofx);
|
||||
}
|
||||
|
||||
-static long FAR PASCAL event_procedure (HWND hwnd, UINT message,
|
||||
+static LRESULT FAR PASCAL event_procedure (HWND hwnd, UINT message,
|
||||
WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
RECT rect_window;
|
||||
@@ -92,7 +92,7 @@ static long FAR PASCAL event_procedure (HWND hwnd, UINT message,
|
||||
switch (message) {
|
||||
|
||||
case WM_WINDOWPOSCHANGED:
|
||||
- instance = (dx_instance_t *) GetWindowLong (hwnd, GWL_USERDATA);
|
||||
+ instance = (dx_instance_t *) GetWindowLongPtr (hwnd, GWLP_USERDATA);
|
||||
|
||||
/* update the window position and size */
|
||||
point_window.x = 0;
|
||||
@@ -173,7 +173,7 @@ static int create_window (dx_instance_t * instance)
|
||||
/* store a directx_instance pointer into the window local storage
|
||||
* (for later use in event_handler).
|
||||
* We need to use SetWindowLongPtr when it is available in mingw */
|
||||
- SetWindowLong (instance->window, GWL_USERDATA, (LONG) instance);
|
||||
+ SetWindowLongPtr (instance->window, GWLP_USERDATA, (LONG_PTR) instance);
|
||||
|
||||
ShowWindow (instance->window, SW_SHOW);
|
||||
|
||||
diff --git a/vc++/config.h b/vc++/config.h
|
||||
index 93719f0..a03cce6 100644
|
||||
--- a/vc++/config.h
|
||||
+++ b/vc++/config.h
|
||||
@@ -16,7 +16,9 @@
|
||||
/* #undef ARCH_SPARC */
|
||||
|
||||
/* x86 architecture */
|
||||
+#if defined(_M_AMD64) || defined(_M_IX86)
|
||||
#define ARCH_X86
|
||||
+#endif
|
||||
|
||||
/* maximum supported data alignment */
|
||||
/* #undef ATTRIBUTE_ALIGNED_MAX */
|
||||
--
|
||||
2.25.0
|
||||
|
108
ports/libmpeg2/CMakeLists.txt
Normal file
108
ports/libmpeg2/CMakeLists.txt
Normal file
@ -0,0 +1,108 @@
|
||||
cmake_minimum_required(VERSION 3.2)
|
||||
project(libmpeg2)
|
||||
|
||||
option(TOOLS "Build libmpeg2 tools" OFF)
|
||||
|
||||
set(MPEG2_SOURCE_FILES
|
||||
libmpeg2/alloc.c
|
||||
libmpeg2/cpu_accel.c
|
||||
libmpeg2/cpu_state.c
|
||||
libmpeg2/decode.c
|
||||
libmpeg2/header.c
|
||||
libmpeg2/idct.c
|
||||
libmpeg2/idct_alpha.c
|
||||
libmpeg2/idct_altivec.c
|
||||
#libmpeg2/idct_mmx.c
|
||||
libmpeg2/motion_comp.c
|
||||
libmpeg2/motion_comp_alpha.c
|
||||
libmpeg2/motion_comp_altivec.c
|
||||
libmpeg2/motion_comp_arm.c
|
||||
#libmpeg2/motion_comp_mmx.c
|
||||
libmpeg2/motion_comp_vis.c
|
||||
libmpeg2/slice.c
|
||||
)
|
||||
set(VO_SOURCE_FILES
|
||||
libvo/video_out.c
|
||||
libvo/video_out_dx.c
|
||||
libvo/video_out_null.c
|
||||
libvo/video_out_pgm.c
|
||||
libvo/video_out_sdl.c
|
||||
libvo/video_out_x11.c
|
||||
)
|
||||
set(MPEG2_CONVERT_SOURCES
|
||||
libmpeg2/convert/rgb.c
|
||||
#libmpeg2/convert/rgb_mmx.c
|
||||
libmpeg2/convert/rgb_vis.c
|
||||
libmpeg2/convert/uyvy.c
|
||||
)
|
||||
set(GETOPT_FILES
|
||||
src/getopt.c
|
||||
)
|
||||
set(HEADERS
|
||||
include/mpeg2.h
|
||||
include/mpeg2convert.h
|
||||
)
|
||||
|
||||
add_library(mpeg2 ${MPEG2_SOURCE_FILES})
|
||||
add_library(mpeg2convert ${MPEG2_CONVERT_SOURCES})
|
||||
add_library(getopt STATIC ${GETOPT_FILES})
|
||||
add_library(vo STATIC ${VO_SOURCE_FILES})
|
||||
|
||||
target_include_directories(mpeg2convert PUBLIC
|
||||
"${CMAKE_SOURCE_DIR}/vc++"
|
||||
"${CMAKE_SOURCE_DIR}/include"
|
||||
)
|
||||
target_include_directories(getopt PUBLIC
|
||||
"${CMAKE_SOURCE_DIR}/vc++"
|
||||
"${CMAKE_SOURCE_DIR}/include"
|
||||
)
|
||||
target_include_directories(vo PUBLIC
|
||||
"${CMAKE_SOURCE_DIR}/vc++"
|
||||
"${CMAKE_SOURCE_DIR}/include"
|
||||
)
|
||||
target_include_directories(mpeg2 PUBLIC
|
||||
"${CMAKE_SOURCE_DIR}/vc++"
|
||||
"${CMAKE_SOURCE_DIR}/include"
|
||||
)
|
||||
target_include_directories(mpeg2 INTERFACE
|
||||
"${CMAKE_SOURCE_DIR}/include"
|
||||
)
|
||||
|
||||
target_compile_definitions(getopt PUBLIC HAVE_CONFIG_H)
|
||||
target_link_libraries(vo mpeg2convert)
|
||||
|
||||
if (TOOLS)
|
||||
add_executable(mpeg2dec src/mpeg2dec.c src/dump_state.c src/gettimeofday.c)
|
||||
add_executable(extract_mpeg2 src/extract_mpeg2.c)
|
||||
add_executable(corrupt_mpeg2 src/corrupt_mpeg2.c)
|
||||
|
||||
target_compile_definitions(extract_mpeg2 PUBLIC HAVE_CONFIG_H)
|
||||
target_compile_definitions(corrupt_mpeg2 PUBLIC HAVE_CONFIG_H)
|
||||
|
||||
target_link_libraries(mpeg2dec PRIVATE getopt vo mpeg2convert mpeg2 gdi32)
|
||||
target_link_libraries(extract_mpeg2 PRIVATE getopt)
|
||||
target_link_libraries(corrupt_mpeg2 PRIVATE getopt)
|
||||
|
||||
target_include_directories(mpeg2dec PUBLIC
|
||||
"${CMAKE_SOURCE_DIR}/vc++"
|
||||
"${CMAKE_SOURCE_DIR}/include"
|
||||
"${CMAKE_SOURCE_DIR}/src"
|
||||
)
|
||||
target_include_directories(extract_mpeg2 PUBLIC
|
||||
"${CMAKE_SOURCE_DIR}/vc++"
|
||||
"${CMAKE_SOURCE_DIR}/include"
|
||||
"${CMAKE_SOURCE_DIR}/src"
|
||||
)
|
||||
target_include_directories(corrupt_mpeg2 PUBLIC
|
||||
"${CMAKE_SOURCE_DIR}/vc++"
|
||||
"${CMAKE_SOURCE_DIR}/include"
|
||||
"${CMAKE_SOURCE_DIR}/src"
|
||||
)
|
||||
endif (TOOLS)
|
||||
|
||||
install(TARGETS mpeg2
|
||||
EXPORT libmpeg2
|
||||
LIBRARY DESTINATION lib
|
||||
)
|
||||
|
||||
install(FILES ${HEADERS} DESTINATION "include/mpeg2dec")
|
8
ports/libmpeg2/CONTROL
Normal file
8
ports/libmpeg2/CONTROL
Normal file
@ -0,0 +1,8 @@
|
||||
Source: libmpeg2
|
||||
Version: 0.5.1
|
||||
Homepage: http://libmpeg2.sourceforge.net/
|
||||
Description: a free MPEG-2 video stream decoder
|
||||
Supports: !(linux|osx|uwp)
|
||||
|
||||
Feature: tools
|
||||
Description: Build tools provided with libmpeg2
|
38
ports/libmpeg2/portfile.cmake
Normal file
38
ports/libmpeg2/portfile.cmake
Normal file
@ -0,0 +1,38 @@
|
||||
vcpkg_fail_port_install(MESSAGE "${PORT} currently only supports Windows Desktop platform." ON_TARGET "Linux" "OSX" "uwp")
|
||||
vcpkg_check_linkage(ONLY_STATIC_LIBRARY)
|
||||
|
||||
# There is archived version of releases available at https://github.com/janisozaur/libmpeg2
|
||||
vcpkg_download_distfile(ARCHIVE
|
||||
URLS "http://libmpeg2.sourceforge.net/files/libmpeg2-0.5.1.tar.gz"
|
||||
FILENAME "libmpeg2-0.5.1.tar.gz"
|
||||
SHA512 3648a2b3d7e2056d5adb328acd2fb983a1fa9a05ccb6f9388cc686c819445421811f42e8439418a0491a13080977f074a0d8bf8fa6bc101ff245ddea65a46fbc
|
||||
)
|
||||
|
||||
vcpkg_extract_source_archive_ex(
|
||||
OUT_SOURCE_PATH SOURCE_PATH
|
||||
ARCHIVE ${ARCHIVE}
|
||||
PATCHES
|
||||
0001-Add-naive-MSVC-support-to-sources.patch
|
||||
)
|
||||
|
||||
file(COPY ${CMAKE_CURRENT_LIST_DIR}/CMakeLists.txt DESTINATION ${SOURCE_PATH})
|
||||
|
||||
vcpkg_check_features(OUT_FEATURE_OPTIONS FEATURE_OPTIONS
|
||||
FEATURES
|
||||
tools TOOLS
|
||||
)
|
||||
|
||||
vcpkg_configure_cmake(
|
||||
SOURCE_PATH ${SOURCE_PATH}
|
||||
PREFER_NINJA
|
||||
OPTIONS ${FEATURE_OPTIONS}
|
||||
)
|
||||
|
||||
vcpkg_install_cmake()
|
||||
|
||||
# # Handle copyright
|
||||
file(INSTALL ${SOURCE_PATH}/COPYING DESTINATION ${CURRENT_PACKAGES_DIR}/share/libmpeg2 RENAME copyright)
|
||||
|
||||
file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/debug/include)
|
||||
|
||||
vcpkg_copy_pdbs()
|
@ -821,6 +821,10 @@ libmodman:x64-uwp=fail
|
||||
libmodman:x64-windows-static=fail
|
||||
libmodplug:arm-uwp=fail
|
||||
libmodplug:x64-uwp=fail
|
||||
libmpeg2:arm-uwp=fail
|
||||
libmpeg2:x64-linux=fail
|
||||
libmpeg2:x64-osx=fail
|
||||
libmpeg2:x64-uwp=fail
|
||||
libmupdf:x64-osx=fail
|
||||
libmysql:x86-windows=fail
|
||||
libnice:x64-linux=fail
|
||||
|
Loading…
x
Reference in New Issue
Block a user