diff --git a/CMakeLists.txt b/CMakeLists.txt index f362f450c..afe467322 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,5 +1,9 @@ project(OpenMW) +# Sound source selection +set(USE_AUDIERE "no") +set(USE_FFMPEG "yes") + # We probably support older versions than this. cmake_minimum_required(VERSION 2.6) @@ -93,13 +97,31 @@ set(OENGINE_GUI ${LIBDIR}/openengine/gui/events.cpp ${LIBDIR}/openengine/gui/manager.cpp ) + +# Sound setup +if (USE_AUDIERE) + set(MANGLE_SOUND_OUTPUT + ${LIBDIR}/mangle/sound/sources/audiere_source.cpp + ${LIBDIR}/mangle/stream/clients/audiere_file.cpp) + find_package(Audiere REQUIRED) + set(SOUND_INPUT_LIBRARY ${AUDIERE_LIBRARY}) + add_definitions(-DOPENMW_USE_AUDIERE) +endif (USE_AUDIERE) + +if (USE_FFMPEG) + set(MANGLE_SOUND_OUTPUT + ${LIBDIR}/mangle/sound/sources/ffmpeg_source.cpp) + find_package(FFMPEG REQUIRED) + set(SOUND_INPUT_LIBRARY ${FFMPEG_LIBRARIES}) + add_definitions(-DOPENMW_USE_FFMPEG) +endif (USE_FFMPEG) + set(OENGINE_SOUND # Mangle and OEngine sound files are sort of intertwined, so put # them together here ${LIBDIR}/openengine/sound/sndmanager.cpp - ${LIBDIR}/mangle/sound/sources/audiere_source.cpp ${LIBDIR}/mangle/sound/outputs/openal_out.cpp - ${LIBDIR}/mangle/stream/clients/audiere_file.cpp + ${MANGLE_SOUND_OUTPUT} ) set(OENGINE_ALL ${OENGINE_OGRE} ${OENGINE_GUI} ${OENGINE_SOUND}) source_group(libs\\openengine FILES ${OENGINE_ALL}) @@ -122,7 +144,6 @@ find_package(Boost REQUIRED COMPONENTS system filesystem program_options thread) find_package(OIS REQUIRED) find_package(Iconv REQUIRED) find_package(OpenAL REQUIRED) -find_package(Audiere REQUIRED) include_directories("." ${OGRE_INCLUDE_DIR} ${OGRE_INCLUDE_DIR}/Ogre ${OIS_INCLUDE_DIR} ${Boost_INCLUDE_DIR} diff --git a/apps/openmw/CMakeLists.txt b/apps/openmw/CMakeLists.txt index c978bc2db..a4a6f6c27 100644 --- a/apps/openmw/CMakeLists.txt +++ b/apps/openmw/CMakeLists.txt @@ -184,7 +184,7 @@ target_link_libraries(openmw ${OIS_LIBRARIES} ${Boost_LIBRARIES} ${OPENAL_LIBRARY} - ${AUDIERE_LIBRARY} + ${SOUND_INPUT_LIBRARY} ${ICONV_LIBRARIES} caelum MyGUIEngine diff --git a/apps/openmw/mwsound/soundmanager.cpp b/apps/openmw/mwsound/soundmanager.cpp index 4d84964c2..1754fdf28 100644 --- a/apps/openmw/mwsound/soundmanager.cpp +++ b/apps/openmw/mwsound/soundmanager.cpp @@ -5,17 +5,18 @@ #include #include -/* Set up the sound manager to use Audiere for input (reading sound - files) and OpenAL for output. +/* Set up the sound manager to use Audiere of FFMPEG for input. The + OPENMW_USE_x macros are set in CMakeLists.txt. */ +#ifdef OPENMW_USE_AUDIERE #include #define SOUND_FACTORY OpenAL_Audiere_Factory -/* - We could allow several options for libraries via external #defines - if we like, controlled through CMake. The only things that need to - change is the include and #define above, and of course the linker - parameters. - */ +#endif + +#ifdef OPENMW_USE_FFMPEG +#include +#define SOUND_FACTORY OpenAL_FFMpeg_Factory +#endif using namespace Mangle::Sound; typedef OEngine::Sound::SoundManager OEManager; diff --git a/apps/soundtest/CMakeLists.txt b/apps/soundtest/CMakeLists.txt index 81ea7a395..71c870e04 100644 --- a/apps/soundtest/CMakeLists.txt +++ b/apps/soundtest/CMakeLists.txt @@ -7,5 +7,5 @@ add_executable(sound_test main.cpp ${OENGINE_SOUND}) target_link_libraries(sound_test ${OPENAL_LIBRARY} - ${AUDIERE_LIBRARY} + ${SOUND_INPUT_LIBRARY} ) diff --git a/apps/soundtest/main.cpp b/apps/soundtest/main.cpp index a645d3753..1e88020e1 100644 --- a/apps/soundtest/main.cpp +++ b/apps/soundtest/main.cpp @@ -1,7 +1,6 @@ #include #include -#include #include #include @@ -9,14 +8,23 @@ using namespace std; using namespace Mangle::Stream; using namespace Mangle::Sound; +#ifdef OPENMW_USE_AUDIERE +#include AudiereLoader loader; +#endif + +#ifdef OPENMW_USE_FFMPEG +#include +FFMpegLoader loader; +#endif + OpenAL_Factory openal; void play(const char* name) { try { - cout << "Opening " << name << " via Audiere\n"; + cout << "Opening " << name << "\n"; SampleSourcePtr samples = loader.load(name); cout << "Loading entire file into memory\n"; StreamPtr buf(new BufferStream(samples)); diff --git a/cmake/FindFFMPEG.cmake b/cmake/FindFFMPEG.cmake new file mode 100644 index 000000000..ff6d0c598 --- /dev/null +++ b/cmake/FindFFMPEG.cmake @@ -0,0 +1,90 @@ +# Find the FFmpeg library +# +# Sets +# FFMPEG_FOUND. If false, don't try to use ffmpeg +# FFMPEG_INCLUDE_DIR +# FFMPEG_LIBRARIES +# +# Modified by Nicolay Korslund for OpenMW + +SET( FFMPEG_FOUND "NO" ) + +FIND_PATH( FFMPEG_avcodec_INCLUDE_DIR avcodec.h + HINTS + PATHS + /usr/include + /usr/local/include + /usr/include/ffmpeg + /usr/local/include/ffmpeg + /usr/include/ffmpeg/libavcodec + /usr/local/include/ffmpeg/libavcodec + /usr/include/libavcodec + /usr/local/include/libavcodec +) + +FIND_PATH( FFMPEG_avformat_INCLUDE_DIR avformat.h + HINTS + PATHS + /usr/include + /usr/local/include + /usr/include/ffmpeg + /usr/local/include/ffmpeg + /usr/include/ffmpeg/libavformat + /usr/local/include/ffmpeg/libavformat + /usr/include/libavformat + /usr/local/include/libavformat +) + +set(FFMPEG_INCLUDE_DIR ${FFMPEG_avcodec_INCLUDE_DIR} ${FFMPEG_avformat_INCLUDE_DIR}) + +IF( FFMPEG_INCLUDE_DIR ) + +FIND_PROGRAM( FFMPEG_CONFIG ffmpeg-config + /usr/bin + /usr/local/bin + ${HOME}/bin +) + +IF( FFMPEG_CONFIG ) + EXEC_PROGRAM( ${FFMPEG_CONFIG} ARGS "--libs avformat" OUTPUT_VARIABLE FFMPEG_LIBS ) + SET( FFMPEG_FOUND "YES" ) + SET( FFMPEG_LIBRARIES "${FFMPEG_LIBS}" ) + +ELSE( FFMPEG_CONFIG ) + + FIND_LIBRARY( FFMPEG_avcodec_LIBRARY avcodec + /usr/lib + /usr/local/lib + /usr/lib64 + /usr/local/lib64 + ) + + FIND_LIBRARY( FFMPEG_avformat_LIBRARY avformat + /usr/lib + /usr/local/lib + /usr/lib64 + /usr/local/lib64 + ) + + FIND_LIBRARY( FFMPEG_avutil_LIBRARY avutil + /usr/lib + /usr/local/lib + /usr/lib64 + /usr/local/lib64 + ) + + IF( FFMPEG_avcodec_LIBRARY ) + IF( FFMPEG_avformat_LIBRARY ) + + SET( FFMPEG_FOUND "YES" ) + SET( FFMPEG_LIBRARIES ${FFMPEG_avformat_LIBRARY} ${FFMPEG_avcodec_LIBRARY} ) + IF( FFMPEG_avutil_LIBRARY ) + SET( FFMPEG_LIBRARIES ${FFMPEG_LIBRARIES} ${FFMPEG_avutil_LIBRARY} ) + ENDIF( FFMPEG_avutil_LIBRARY ) + + ENDIF( FFMPEG_avformat_LIBRARY ) + ENDIF( FFMPEG_avcodec_LIBRARY ) + +ENDIF( FFMPEG_CONFIG ) + +ENDIF( FFMPEG_INCLUDE_DIR ) diff --git a/libs/mangle b/libs/mangle index f95ea1677..160e8655d 160000 --- a/libs/mangle +++ b/libs/mangle @@ -1 +1 @@ -Subproject commit f95ea1677cc5c52790e1342aa6d3d6bba950b8be +Subproject commit 160e8655d2503ad93992200d6d131186ede22aa3