1,502
edits
(Update with libfaad instructions) |
(Add detailed instructions on how to get libmpeg2 working) |
||
Line 33: | Line 33: | ||
* [https://github.com/gypified/libfaad libfaad] for AAC support. | * [https://github.com/gypified/libfaad libfaad] for AAC support. | ||
You need the latest libfaad source code. | You need the latest libfaad source code. | ||
* [http://libmpeg2.sourceforge.net/ libmpeg2] for MPEG-2 support. | |||
You need the latest libmpeg2 source code from the downloads section. | |||
== Building the libraries == | == Building the libraries == | ||
Line 229: | Line 232: | ||
static INLINE int lrintf(float f) | static INLINE int lrintf(float f) | ||
{ | { | ||
</source> | |||
=== libmpeg2 === | |||
Since the MSVC project files for libmpeg2 haven't been updated for a *very* long time, we'll need to recreate them from scratch. For libmpeg2, ALL the MMX optimizations have to be disabled, as libmpeg2 is using AT&T ASM syntax (GCC style), whereas MSVC uses the Intel syntax. | |||
In order to create the project files, do the following: | |||
* Create a new empty C++ project, named "libmpeg2" | |||
* Copy inttypes.h and config.h from the vc++ directory into the libmpeg2 directory | |||
* Copy attributes.h and mpeg2.h from the include directory into the libmpeg2 directory | |||
* Add the following files to the project, from the libmpeg2 folder: | |||
** alloc.c | |||
** config.h | |||
** decode.c | |||
** header.c | |||
** idct.c | |||
** inttypes.h | |||
** motion_comp.c | |||
** mpeg2.h | |||
** mpeg2_internal.h | |||
** slice.c | |||
* Find all occurences of: | |||
<source lang="C"> | |||
* #include <inttypes.h> | |||
</source> | |||
and change them to: | |||
<source lang="C"> | |||
* #include "inttypes.h" | |||
</source> | |||
* Open config.h and comment out this line: | |||
<source lang="C"> | |||
#define restrict __restrict | |||
</source> | |||
* Change configuration to "Release" | |||
* Right click project->Properties | |||
** Configuration Properties->General, change "Configuration type" to "Static library(.lib)" | |||
** Configuration Properties->C/C++->Code Generation, change "Runtime Library" to "Multi-threaded (/MT)" | |||
** Configuration Properties->Librarian->General->Set "Link Time Code Generation" to "No" | |||
Now, we'll remove all the MMX optimization references from the files that have been added to the project. Perform the following: | |||
- Open idct.c, go to line 238 (inside mpeg2_idct_init) and change: | |||
<source lang="C"> | |||
#ifdef ARCH_X86 | |||
</source> | |||
to: | |||
<source lang="C"> | |||
#if defined(ARCH_X86) && !defined(_MSC_VER) | |||
</source> | |||
- Open motion_comp.c, go to line 36 (inside mpeg2_mc_init) and change: | |||
<source lang="C"> | |||
#ifdef ARCH_X86 | |||
</source> | |||
to: | |||
<source lang="C"> | |||
#if defined(ARCH_X86) && !defined(_MSC_VER) | |||
</source> | |||
- Open slice.c, replace these lines: | |||
<source lang="C"> | |||
extern void (* mpeg2_cpu_state_save) (cpu_state_t * state); | |||
extern void (* mpeg2_cpu_state_restore) (cpu_state_t * state); | |||
</source> | |||
with: | |||
<source lang="C"> | |||
void (* mpeg2_cpu_state_save) (cpu_state_t * state) = 0; | |||
void (* mpeg2_cpu_state_restore) (cpu_state_t * state) = 0; | |||
uint32_t mpeg2_detect_accel (uint32_t accel) { return 0; } | |||
void mpeg2_cpu_state_init (uint32_t accel) {} | |||
</source> | </source> |
edits