Difference between revisions of "Compiling ScummVM/Visual Studio/Compiling Libraries"

Jump to navigation Jump to search
Add detailed instructions on how to get libmpeg2 working
(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>
1,502

edits

Navigation menu