summaryrefslogtreecommitdiff
path: root/indra/media_plugins
diff options
context:
space:
mode:
Diffstat (limited to 'indra/media_plugins')
-rwxr-xr-x[-rw-r--r--]indra/media_plugins/CMakeLists.txt0
-rwxr-xr-x[-rw-r--r--]indra/media_plugins/base/CMakeLists.txt5
-rwxr-xr-x[-rw-r--r--]indra/media_plugins/base/media_plugin_base.cpp0
-rwxr-xr-x[-rw-r--r--]indra/media_plugins/base/media_plugin_base.exp0
-rwxr-xr-x[-rw-r--r--]indra/media_plugins/base/media_plugin_base.h0
-rwxr-xr-x[-rw-r--r--]indra/media_plugins/example/CMakeLists.txt7
-rwxr-xr-x[-rw-r--r--]indra/media_plugins/example/media_plugin_example.cpp4
-rwxr-xr-x[-rw-r--r--]indra/media_plugins/gstreamer010/CMakeLists.txt5
-rwxr-xr-x[-rw-r--r--]indra/media_plugins/gstreamer010/llmediaimplgstreamer.h0
-rwxr-xr-x[-rw-r--r--]indra/media_plugins/gstreamer010/llmediaimplgstreamer_syms.cpp0
-rwxr-xr-x[-rw-r--r--]indra/media_plugins/gstreamer010/llmediaimplgstreamer_syms.h0
-rwxr-xr-x[-rw-r--r--]indra/media_plugins/gstreamer010/llmediaimplgstreamer_syms_raw.inc0
-rwxr-xr-x[-rw-r--r--]indra/media_plugins/gstreamer010/llmediaimplgstreamer_syms_rawv.inc0
-rwxr-xr-x[-rw-r--r--]indra/media_plugins/gstreamer010/llmediaimplgstreamertriviallogging.h0
-rwxr-xr-x[-rw-r--r--]indra/media_plugins/gstreamer010/llmediaimplgstreamervidplug.cpp3
-rwxr-xr-x[-rw-r--r--]indra/media_plugins/gstreamer010/llmediaimplgstreamervidplug.h0
-rwxr-xr-x[-rw-r--r--]indra/media_plugins/gstreamer010/media_plugin_gstreamer010.cpp0
-rwxr-xr-x[-rw-r--r--]indra/media_plugins/quicktime/CMakeLists.txt5
-rwxr-xr-x[-rw-r--r--]indra/media_plugins/quicktime/media_plugin_quicktime.cpp77
-rwxr-xr-x[-rw-r--r--]indra/media_plugins/webkit/CMakeLists.txt17
-rwxr-xr-x[-rw-r--r--]indra/media_plugins/webkit/dummy_volume_catcher.cpp0
-rwxr-xr-x[-rw-r--r--]indra/media_plugins/webkit/linux_volume_catcher.cpp0
-rwxr-xr-x[-rw-r--r--]indra/media_plugins/webkit/linux_volume_catcher_pa_syms.inc0
-rwxr-xr-x[-rw-r--r--]indra/media_plugins/webkit/linux_volume_catcher_paglib_syms.inc0
-rwxr-xr-x[-rw-r--r--]indra/media_plugins/webkit/mac_volume_catcher.cpp9
-rwxr-xr-x[-rw-r--r--]indra/media_plugins/webkit/media_plugin_webkit.cpp210
-rwxr-xr-x[-rw-r--r--]indra/media_plugins/webkit/volume_catcher.h0
-rwxr-xr-x[-rw-r--r--]indra/media_plugins/webkit/windows_volume_catcher.cpp52
-rwxr-xr-x[-rw-r--r--]indra/media_plugins/winmmshim/CMakeLists.txt6
-rwxr-xr-x[-rw-r--r--]indra/media_plugins/winmmshim/forwarding_api.cpp177
-rwxr-xr-x[-rw-r--r--]indra/media_plugins/winmmshim/forwarding_api.h5
-rwxr-xr-x[-rw-r--r--]indra/media_plugins/winmmshim/winmm.def0
-rwxr-xr-x[-rw-r--r--]indra/media_plugins/winmmshim/winmm_shim.cpp85
33 files changed, 535 insertions, 132 deletions
diff --git a/indra/media_plugins/CMakeLists.txt b/indra/media_plugins/CMakeLists.txt
index 85318aea3b..85318aea3b 100644..100755
--- a/indra/media_plugins/CMakeLists.txt
+++ b/indra/media_plugins/CMakeLists.txt
diff --git a/indra/media_plugins/base/CMakeLists.txt b/indra/media_plugins/base/CMakeLists.txt
index 3ad94b0c64..7367b9e5e6 100644..100755
--- a/indra/media_plugins/base/CMakeLists.txt
+++ b/indra/media_plugins/base/CMakeLists.txt
@@ -11,7 +11,7 @@ include(LLRender)
include(LLWindow)
include(Linking)
include(PluginAPI)
-include(FindOpenGL)
+include(OpenGL)
include_directories(
${LLPLUGIN_INCLUDE_DIRS}
@@ -21,6 +21,9 @@ include_directories(
${LLRENDER_INCLUDE_DIRS}
${LLWINDOW_INCLUDE_DIRS}
)
+include_directories(SYSTEM
+ ${LLCOMMON_SYSTEM_INCLUDE_DIRS}
+ )
### media_plugin_base
diff --git a/indra/media_plugins/base/media_plugin_base.cpp b/indra/media_plugins/base/media_plugin_base.cpp
index 37c498664a..37c498664a 100644..100755
--- a/indra/media_plugins/base/media_plugin_base.cpp
+++ b/indra/media_plugins/base/media_plugin_base.cpp
diff --git a/indra/media_plugins/base/media_plugin_base.exp b/indra/media_plugins/base/media_plugin_base.exp
index d8c7bb712a..d8c7bb712a 100644..100755
--- a/indra/media_plugins/base/media_plugin_base.exp
+++ b/indra/media_plugins/base/media_plugin_base.exp
diff --git a/indra/media_plugins/base/media_plugin_base.h b/indra/media_plugins/base/media_plugin_base.h
index 38b8226bb3..38b8226bb3 100644..100755
--- a/indra/media_plugins/base/media_plugin_base.h
+++ b/indra/media_plugins/base/media_plugin_base.h
diff --git a/indra/media_plugins/example/CMakeLists.txt b/indra/media_plugins/example/CMakeLists.txt
index 56cefde4bd..171645ef04 100644..100755
--- a/indra/media_plugins/example/CMakeLists.txt
+++ b/indra/media_plugins/example/CMakeLists.txt
@@ -12,7 +12,7 @@ include(LLWindow)
include(Linking)
include(PluginAPI)
include(MediaPluginBase)
-include(FindOpenGL)
+include(OpenGL)
include(ExamplePlugin)
@@ -25,6 +25,9 @@ include_directories(
${LLRENDER_INCLUDE_DIRS}
${LLWINDOW_INCLUDE_DIRS}
)
+include_directories(SYSTEM
+ ${LLCOMMON_SYSTEM_INCLUDE_DIRS}
+ )
### media_plugin_example
@@ -79,4 +82,4 @@ if (DARWIN)
LINK_FLAGS "-exported_symbols_list ${CMAKE_CURRENT_SOURCE_DIR}/../base/media_plugin_base.exp"
)
-endif (DARWIN) \ No newline at end of file
+endif (DARWIN)
diff --git a/indra/media_plugins/example/media_plugin_example.cpp b/indra/media_plugins/example/media_plugin_example.cpp
index da7de01799..66c00cd58c 100644..100755
--- a/indra/media_plugins/example/media_plugin_example.cpp
+++ b/indra/media_plugins/example/media_plugin_example.cpp
@@ -363,10 +363,10 @@ void MediaPluginExample::update( F64 milliseconds )
};
if ( mXpos[ n ] + mXInc[ n ] < 0 || mXpos[ n ] + mXInc[ n ] >= mWidth - mBlockSize[ n ] )
- mXInc[ n ] =- mXInc[ n ];
+ mXInc[ n ]= -mXInc[ n ];
if ( mYpos[ n ] + mYInc[ n ] < 0 || mYpos[ n ] + mYInc[ n ] >= mHeight - mBlockSize[ n ] )
- mYInc[ n ] =- mYInc[ n ];
+ mYInc[ n ]= -mYInc[ n ];
mXpos[ n ] += mXInc[ n ];
mYpos[ n ] += mYInc[ n ];
diff --git a/indra/media_plugins/gstreamer010/CMakeLists.txt b/indra/media_plugins/gstreamer010/CMakeLists.txt
index 5786bd1e25..447f6e0689 100644..100755
--- a/indra/media_plugins/gstreamer010/CMakeLists.txt
+++ b/indra/media_plugins/gstreamer010/CMakeLists.txt
@@ -12,7 +12,7 @@ include(LLWindow)
include(Linking)
include(PluginAPI)
include(MediaPluginBase)
-include(FindOpenGL)
+include(OpenGL)
include(GStreamer010Plugin)
@@ -27,6 +27,9 @@ include_directories(
${GSTREAMER010_INCLUDE_DIRS}
${GSTREAMER010_PLUGINS_BASE_INCLUDE_DIRS}
)
+include_directories(SYSTEM
+ ${LLCOMMON_SYSTEM_INCLUDE_DIRS}
+ )
### media_plugin_gstreamer010
diff --git a/indra/media_plugins/gstreamer010/llmediaimplgstreamer.h b/indra/media_plugins/gstreamer010/llmediaimplgstreamer.h
index 6bc272c009..6bc272c009 100644..100755
--- a/indra/media_plugins/gstreamer010/llmediaimplgstreamer.h
+++ b/indra/media_plugins/gstreamer010/llmediaimplgstreamer.h
diff --git a/indra/media_plugins/gstreamer010/llmediaimplgstreamer_syms.cpp b/indra/media_plugins/gstreamer010/llmediaimplgstreamer_syms.cpp
index 2e4baaa9eb..2e4baaa9eb 100644..100755
--- a/indra/media_plugins/gstreamer010/llmediaimplgstreamer_syms.cpp
+++ b/indra/media_plugins/gstreamer010/llmediaimplgstreamer_syms.cpp
diff --git a/indra/media_plugins/gstreamer010/llmediaimplgstreamer_syms.h b/indra/media_plugins/gstreamer010/llmediaimplgstreamer_syms.h
index d1559089c8..d1559089c8 100644..100755
--- a/indra/media_plugins/gstreamer010/llmediaimplgstreamer_syms.h
+++ b/indra/media_plugins/gstreamer010/llmediaimplgstreamer_syms.h
diff --git a/indra/media_plugins/gstreamer010/llmediaimplgstreamer_syms_raw.inc b/indra/media_plugins/gstreamer010/llmediaimplgstreamer_syms_raw.inc
index b33e59363d..b33e59363d 100644..100755
--- a/indra/media_plugins/gstreamer010/llmediaimplgstreamer_syms_raw.inc
+++ b/indra/media_plugins/gstreamer010/llmediaimplgstreamer_syms_raw.inc
diff --git a/indra/media_plugins/gstreamer010/llmediaimplgstreamer_syms_rawv.inc b/indra/media_plugins/gstreamer010/llmediaimplgstreamer_syms_rawv.inc
index 14fbcb48b9..14fbcb48b9 100644..100755
--- a/indra/media_plugins/gstreamer010/llmediaimplgstreamer_syms_rawv.inc
+++ b/indra/media_plugins/gstreamer010/llmediaimplgstreamer_syms_rawv.inc
diff --git a/indra/media_plugins/gstreamer010/llmediaimplgstreamertriviallogging.h b/indra/media_plugins/gstreamer010/llmediaimplgstreamertriviallogging.h
index e7b31bec94..e7b31bec94 100644..100755
--- a/indra/media_plugins/gstreamer010/llmediaimplgstreamertriviallogging.h
+++ b/indra/media_plugins/gstreamer010/llmediaimplgstreamertriviallogging.h
diff --git a/indra/media_plugins/gstreamer010/llmediaimplgstreamervidplug.cpp b/indra/media_plugins/gstreamer010/llmediaimplgstreamervidplug.cpp
index cdb7f4faeb..932aaffa1b 100644..100755
--- a/indra/media_plugins/gstreamer010/llmediaimplgstreamervidplug.cpp
+++ b/indra/media_plugins/gstreamer010/llmediaimplgstreamervidplug.cpp
@@ -278,10 +278,9 @@ gst_slvideo_set_caps (GstBaseSink * bsink, GstCaps * caps)
static gboolean
gst_slvideo_start (GstBaseSink * bsink)
{
- GstSLVideo *slvideo;
gboolean ret = TRUE;
- slvideo = GST_SLVIDEO(bsink);
+ GST_SLVIDEO(bsink);
return ret;
}
diff --git a/indra/media_plugins/gstreamer010/llmediaimplgstreamervidplug.h b/indra/media_plugins/gstreamer010/llmediaimplgstreamervidplug.h
index 29d65fa4e9..29d65fa4e9 100644..100755
--- a/indra/media_plugins/gstreamer010/llmediaimplgstreamervidplug.h
+++ b/indra/media_plugins/gstreamer010/llmediaimplgstreamervidplug.h
diff --git a/indra/media_plugins/gstreamer010/media_plugin_gstreamer010.cpp b/indra/media_plugins/gstreamer010/media_plugin_gstreamer010.cpp
index 352b63583e..352b63583e 100644..100755
--- a/indra/media_plugins/gstreamer010/media_plugin_gstreamer010.cpp
+++ b/indra/media_plugins/gstreamer010/media_plugin_gstreamer010.cpp
diff --git a/indra/media_plugins/quicktime/CMakeLists.txt b/indra/media_plugins/quicktime/CMakeLists.txt
index f0b8f0d167..58391007ff 100644..100755
--- a/indra/media_plugins/quicktime/CMakeLists.txt
+++ b/indra/media_plugins/quicktime/CMakeLists.txt
@@ -12,7 +12,7 @@ include(LLWindow)
include(Linking)
include(PluginAPI)
include(MediaPluginBase)
-include(FindOpenGL)
+include(OpenGL)
include(QuickTimePlugin)
include_directories(
@@ -24,6 +24,9 @@ include_directories(
${LLRENDER_INCLUDE_DIRS}
${LLWINDOW_INCLUDE_DIRS}
)
+include_directories(SYSTEM
+ ${LLCOMMON_SYSTEM_INCLUDE_DIRS}
+ )
if (DARWIN)
include(CMakeFindFrameworks)
diff --git a/indra/media_plugins/quicktime/media_plugin_quicktime.cpp b/indra/media_plugins/quicktime/media_plugin_quicktime.cpp
index 999f754dcf..ff1ed8bfbc 100644..100755
--- a/indra/media_plugins/quicktime/media_plugin_quicktime.cpp
+++ b/indra/media_plugins/quicktime/media_plugin_quicktime.cpp
@@ -29,25 +29,28 @@
#include "linden_common.h"
#include "llgl.h"
-
+
#include "llplugininstance.h"
#include "llpluginmessage.h"
#include "llpluginmessageclasses.h"
#include "media_plugin_base.h"
-
+
#if LL_QUICKTIME_ENABLED
-
+
#if defined(LL_DARWIN)
- #include <QuickTime/QuickTime.h>
+#include <QuickTime/QuickTime.h>
#elif defined(LL_WINDOWS)
- #include "MacTypes.h"
- #include "QTML.h"
- #include "Movies.h"
- #include "QDoffscreen.h"
- #include "FixMath.h"
- #include "QTLoadLibraryUtils.h"
+#include "llwin32headers.h"
+#include "MacTypes.h"
+#include "QTML.h"
+#include "Movies.h"
+#include "QDoffscreen.h"
+#include "FixMath.h"
+#include "QTLoadLibraryUtils.h"
#endif
+
+
// TODO: Make sure that the only symbol exported from this library is LLPluginInitEntryPoint
////////////////////////////////////////////////////////////////////////////////
//
@@ -232,12 +235,8 @@ private:
mMovieHandle = NULL;
};
- if ( mGWorldHandle )
- {
- DisposeGWorld( mGWorldHandle );
- mGWorldHandle = NULL;
- };
-
+ mGWorldHandle = NULL;
+
setStatus(STATUS_NONE);
return true;
@@ -273,6 +272,7 @@ private:
//std::cerr << "<--- Sending size change request to application with name: " << mTextureSegmentName << " - size is " << width << " x " << height << std::endl;
}
}
+
// sanitize destination size
Rect dest_rect = rectFromSize(mWidth, mHeight);
@@ -281,12 +281,10 @@ private:
int depth_bits = mDepth * 8;
long rowbytes = mDepth * mTextureWidth;
- GWorldPtr old_gworld_handle = mGWorldHandle;
-
if(mPixels != NULL)
{
// We have pixels. Set up a GWorld pointing at the texture.
- OSErr result = NewGWorldFromPtr( &mGWorldHandle, depth_bits, &dest_rect, NULL, NULL, 0, (Ptr)mPixels, rowbytes);
+ OSErr result = QTNewGWorldFromPtr( &mGWorldHandle, depth_bits, &dest_rect, NULL, NULL, 0, (Ptr)mPixels, rowbytes);
if ( noErr != result )
{
// TODO: unrecoverable?? throw exception? return something?
@@ -297,7 +295,7 @@ private:
{
// We don't have pixels. Create a fake GWorld we can point the movie at when it's not safe to render normally.
Rect tempRect = rectFromSize(1, 1);
- OSErr result = NewGWorld( &mGWorldHandle, depth_bits, &tempRect, NULL, NULL, 0);
+ OSErr result = QTNewGWorld( &mGWorldHandle, depth_bits, &tempRect, NULL, NULL, 0);
if ( noErr != result )
{
// TODO: unrecoverable?? throw exception? return something?
@@ -305,14 +303,8 @@ private:
}
}
- SetMovieGWorld( mMovieHandle, mGWorldHandle, GetGWorldDevice( mGWorldHandle ) );
-
- // If the GWorld was already set up, delete it.
- if(old_gworld_handle != NULL)
- {
- DisposeGWorld( old_gworld_handle );
- }
-
+ SetMovieGWorld( mMovieHandle, mGWorldHandle, NULL );
+
// Set up the movie display matrix
{
// scale movie to fit rect and invert vertically to match opengl image format
@@ -579,28 +571,7 @@ private:
}
};
-
- int getDataWidth() const
- {
- if ( mGWorldHandle )
- {
- int depth = mDepth;
-
- if (depth < 1)
- depth = 1;
-
- // ALWAYS use the row bytes from the PixMap if we have a GWorld because
- // sometimes it's not the same as mMediaDepth * mMediaWidth !
- PixMapHandle pix_map_handle = GetGWorldPixMap( mGWorldHandle );
- return QTGetPixMapHandleRowBytes( pix_map_handle ) / depth;
- }
- else
- {
- // TODO : return LLMediaImplCommon::getaDataWidth();
- return 0;
- }
- };
-
+
void seek( F64 time )
{
if ( mMovieController )
@@ -705,7 +676,7 @@ private:
// look up "Display Name" in meta data
OSType meta_data_key = kQTMetaDataCommonKeyDisplayName;
QTMetaDataItem item = kQTMetaDataItemUninitialized;
- result = QTMetaDataGetNextItem( media_data_ref, kQTMetaDataStorageFormatWildcard,
+ result = (OSErr)QTMetaDataGetNextItem( media_data_ref, kQTMetaDataStorageFormatWildcard,
0, kQTMetaDataKeyFormatCommon,
(const UInt8 *)&meta_data_key,
sizeof( meta_data_key ), &item );
@@ -714,14 +685,14 @@ private:
// find the size of the title
ByteCount size;
- result = QTMetaDataGetItemValue( media_data_ref, item, NULL, 0, &size );
+ result = (OSErr)QTMetaDataGetItemValue( media_data_ref, item, NULL, 0, &size );
if ( noErr != result || size <= 0 /*|| size > 1024 FIXME: arbitrary limit */ )
return false;
// allocate some space and grab it
UInt8* item_data = new UInt8[ size + 1 ];
memset( item_data, 0, ( size + 1 ) * sizeof( UInt8 ) );
- result = QTMetaDataGetItemValue( media_data_ref, item, item_data, size, NULL );
+ result = (OSErr)QTMetaDataGetItemValue( media_data_ref, item, item_data, size, NULL );
if ( noErr != result )
{
delete [] item_data;
diff --git a/indra/media_plugins/webkit/CMakeLists.txt b/indra/media_plugins/webkit/CMakeLists.txt
index 3b1f679540..5a8fe90bdd 100644..100755
--- a/indra/media_plugins/webkit/CMakeLists.txt
+++ b/indra/media_plugins/webkit/CMakeLists.txt
@@ -13,7 +13,7 @@ include(UI)
include(Linking)
include(PluginAPI)
include(MediaPluginBase)
-include(FindOpenGL)
+include(OpenGL)
include(PulseAudio)
include(WebKitLibPlugin)
@@ -29,6 +29,9 @@ include_directories(
${LLWINDOW_INCLUDE_DIRS}
${LLQTWEBKIT_INCLUDE_DIR}
)
+include_directories(SYSTEM
+ ${LLCOMMON_SYSTEM_INCLUDE_DIRS}
+ )
### media_plugin_webkit
@@ -118,12 +121,12 @@ if (DARWIN)
)
# copy the webkit dylib to the build directory
- add_custom_command(
- TARGET media_plugin_webkit POST_BUILD
-# OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/libllqtwebkit.dylib
- COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/../libraries/universal-darwin/lib_release/libllqtwebkit.dylib ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/
- DEPENDS media_plugin_webkit ${CMAKE_SOURCE_DIR}/../libraries/universal-darwin/lib_release/libllqtwebkit.dylib
- )
+# add_custom_command(
+# TARGET media_plugin_webkit POST_BUILD
+# # OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/libllqtwebkit.dylib
+# COMMAND ${CMAKE_COMMAND} -E copy ${ARCH_PREBUILT_DIRS_RELEASE}/libllqtwebkit.dylib ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/
+# DEPENDS media_plugin_webkit ${ARCH_PREBUILT_DIRS_RELEASE}/libllqtwebkit.dylib
+# )
endif (DARWIN)
diff --git a/indra/media_plugins/webkit/dummy_volume_catcher.cpp b/indra/media_plugins/webkit/dummy_volume_catcher.cpp
index d54b31b2ae..d54b31b2ae 100644..100755
--- a/indra/media_plugins/webkit/dummy_volume_catcher.cpp
+++ b/indra/media_plugins/webkit/dummy_volume_catcher.cpp
diff --git a/indra/media_plugins/webkit/linux_volume_catcher.cpp b/indra/media_plugins/webkit/linux_volume_catcher.cpp
index 91be3a89e9..91be3a89e9 100644..100755
--- a/indra/media_plugins/webkit/linux_volume_catcher.cpp
+++ b/indra/media_plugins/webkit/linux_volume_catcher.cpp
diff --git a/indra/media_plugins/webkit/linux_volume_catcher_pa_syms.inc b/indra/media_plugins/webkit/linux_volume_catcher_pa_syms.inc
index d806b48428..d806b48428 100644..100755
--- a/indra/media_plugins/webkit/linux_volume_catcher_pa_syms.inc
+++ b/indra/media_plugins/webkit/linux_volume_catcher_pa_syms.inc
diff --git a/indra/media_plugins/webkit/linux_volume_catcher_paglib_syms.inc b/indra/media_plugins/webkit/linux_volume_catcher_paglib_syms.inc
index abf628c96c..abf628c96c 100644..100755
--- a/indra/media_plugins/webkit/linux_volume_catcher_paglib_syms.inc
+++ b/indra/media_plugins/webkit/linux_volume_catcher_paglib_syms.inc
diff --git a/indra/media_plugins/webkit/mac_volume_catcher.cpp b/indra/media_plugins/webkit/mac_volume_catcher.cpp
index 8a06bb8487..73e5bf3da3 100644..100755
--- a/indra/media_plugins/webkit/mac_volume_catcher.cpp
+++ b/indra/media_plugins/webkit/mac_volume_catcher.cpp
@@ -35,9 +35,13 @@
#include "volume_catcher.h"
-#include <Carbon/Carbon.h>
#include <QuickTime/QuickTime.h>
#include <AudioUnit/AudioUnit.h>
+#include <list>
+
+#if LL_DARWIN
+#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+#endif
struct VolumeCatcherStorage;
@@ -266,3 +270,6 @@ void VolumeCatcher::pump()
// No periodic tasks are necessary for this implementation.
}
+#if LL_DARWIN
+#pragma GCC diagnostic warning "-Wdeprecated-declarations"
+#endif
diff --git a/indra/media_plugins/webkit/media_plugin_webkit.cpp b/indra/media_plugins/webkit/media_plugin_webkit.cpp
index d6f8ae3e16..3edeef51e3 100644..100755
--- a/indra/media_plugins/webkit/media_plugin_webkit.cpp
+++ b/indra/media_plugins/webkit/media_plugin_webkit.cpp
@@ -25,12 +25,11 @@
* $/LicenseInfo$
* @endcond
*/
-
#include "llqtwebkit.h"
-
#include "linden_common.h"
#include "indra_constants.h" // for indra keyboard codes
+#include "lltimer.h"
#include "llgl.h"
#include "llplugininstance.h"
@@ -90,6 +89,7 @@ private:
bool mCookiesEnabled;
bool mJavascriptEnabled;
bool mPluginsEnabled;
+ bool mEnableMediaPluginDebugging;
enum
{
@@ -116,9 +116,24 @@ private:
F32 mBackgroundG;
F32 mBackgroundB;
std::string mTarget;
-
+ LLTimer mElapsedTime;
+
VolumeCatcher mVolumeCatcher;
+ void postDebugMessage( const std::string& msg )
+ {
+ if ( mEnableMediaPluginDebugging )
+ {
+ std::stringstream str;
+ str << "@Media Msg> " << "[" << (double)mElapsedTime.getElapsedTimeF32() << "] -- " << msg;
+
+ LLPluginMessage debug_message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "debug_message");
+ debug_message.setValue("message_text", str.str());
+ debug_message.setValue("message_level", "info");
+ sendMessage(debug_message);
+ }
+ }
+
void setInitState(int state)
{
// std::cerr << "changing init state to " << state << std::endl;
@@ -205,7 +220,7 @@ private:
char cwd[ FILENAME_MAX ]; // I *think* this is defined on all platforms we use
if (NULL == getcwd( cwd, FILENAME_MAX - 1 ))
{
- llwarns << "Couldn't get cwd - probably too long - failing to init." << llendl;
+ LL_WARNS() << "Couldn't get cwd - probably too long - failing to init." << LL_ENDL;
return false;
}
std::string application_dir = std::string( cwd );
@@ -252,6 +267,9 @@ private:
std::string component_dir = application_dir;
#endif
+ // debug spam sent to viewer and displayed in the log as usual
+ postDebugMessage( "Component dir set to: " + component_dir );
+
// window handle - needed on Windows and must be app window.
#if LL_WINDOWS
char window_title[ MAX_PATH ];
@@ -266,10 +284,16 @@ private:
if ( result )
{
mInitState = INIT_STATE_INITIALIZED;
-
+
+ // debug spam sent to viewer and displayed in the log as usual
+ postDebugMessage( "browser initialized okay" );
+
return true;
};
+ // debug spam sent to viewer and displayed in the log as usual
+ postDebugMessage( "browser nOT initialized." );
+
return false;
};
@@ -292,20 +316,34 @@ private:
if(!mHostLanguage.empty())
{
LLQtWebKit::getInstance()->setHostLanguage(mHostLanguage);
+ postDebugMessage( "Setting language to " + mHostLanguage );
}
// turn on/off cookies based on what host app tells us
LLQtWebKit::getInstance()->enableCookies( mCookiesEnabled );
-
+
// turn on/off plugins based on what host app tells us
LLQtWebKit::getInstance()->enablePlugins( mPluginsEnabled );
// turn on/off Javascript based on what host app tells us
+#if LLQTWEBKIT_API_VERSION >= 11
+ LLQtWebKit::getInstance()->enableJavaScript( mJavascriptEnabled );
+#else
LLQtWebKit::getInstance()->enableJavascript( mJavascriptEnabled );
-
+#endif
+
+ std::stringstream str;
+ str << "Cookies enabled = " << mCookiesEnabled << ", plugins enabled = " << mPluginsEnabled << ", Javascript enabled = " << mJavascriptEnabled;
+ postDebugMessage( str.str() );
+
// create single browser window
mBrowserWindowId = LLQtWebKit::getInstance()->createBrowserWindow( mWidth, mHeight, mTarget);
+ str.str("");
+ str.clear();
+ str << "Setting browser window size to " << mWidth << " x " << mHeight;
+ postDebugMessage( str.str() );
+
// tell LLQtWebKit about the size of the browser window
LLQtWebKit::getInstance()->setSize( mBrowserWindowId, mWidth, mHeight );
@@ -314,7 +352,8 @@ private:
// append details to agent string
LLQtWebKit::getInstance()->setBrowserAgentId( mUserAgent );
-
+ postDebugMessage( "Updating user agent with " + mUserAgent );
+
#if !LL_QTWEBKIT_USES_PIXMAPS
// don't flip bitmap
LLQtWebKit::getInstance()->flipWindow( mBrowserWindowId, true );
@@ -341,8 +380,18 @@ private:
url << std::setfill('0') << std::setw(2) << std::hex << int(mBackgroundB * 255.0f);
url << "%22%3E%3C/body%3E%3C/html%3E";
- //lldebugs << "data url is: " << url.str() << llendl;
-
+ //LL_DEBUGS() << "data url is: " << url.str() << LL_ENDL;
+
+ // always display loading overlay now
+#if LLQTWEBKIT_API_VERSION >= 16
+ LLQtWebKit::getInstance()->enableLoadingOverlay(mBrowserWindowId, true);
+#else
+ LL_WARNS() << "Ignoring enableLoadingOverlay() call (llqtwebkit version is too old)." << LL_ENDL;
+#endif
+ str.clear();
+ str << "Loading overlay enabled = " << mEnableMediaPluginDebugging << " for mBrowserWindowId = " << mBrowserWindowId;
+ postDebugMessage( str.str() );
+
LLQtWebKit::getInstance()->navigateTo( mBrowserWindowId, url.str() );
// LLQtWebKit::getInstance()->navigateTo( mBrowserWindowId, "about:blank" );
@@ -377,7 +426,7 @@ private:
break;
default:
- llwarns << "Unknown cursor ID: " << (int)llqt_cursor << llendl;
+ LL_WARNS() << "Unknown cursor ID: " << (int)llqt_cursor << LL_ENDL;
break;
}
@@ -410,7 +459,10 @@ private:
message.setValueBoolean("history_back_available", LLQtWebKit::getInstance()->userActionIsEnabled( mBrowserWindowId, LLQtWebKit::UA_NAVIGATE_BACK));
message.setValueBoolean("history_forward_available", LLQtWebKit::getInstance()->userActionIsEnabled( mBrowserWindowId, LLQtWebKit::UA_NAVIGATE_FORWARD));
sendMessage(message);
-
+
+ // debug spam sent to viewer and displayed in the log as usual
+ postDebugMessage( "Navigate begin event at: " + event.getEventUri() );
+
setStatus(STATUS_LOADING);
}
@@ -452,6 +504,8 @@ private:
setInitState(INIT_STATE_NAVIGATE_COMPLETE);
}
+ // debug spam sent to viewer and displayed in the log as usual
+ postDebugMessage( "Navigate complete event at: " + event.getEventUri() );
}
////////////////////////////////////////////////////////////////////////////////
@@ -492,6 +546,15 @@ private:
////////////////////////////////////////////////////////////////////////////////
// virtual
+ void onNavigateErrorPage(const EventType& event)
+ {
+ LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "navigate_error_page");
+ message.setValueS32("status_code", event.getIntValue());
+ sendMessage(message);
+ }
+
+ ////////////////////////////////////////////////////////////////////////////////
+ // virtual
void onLocationChange(const EventType& event)
{
if(mInitState >= INIT_STATE_NAVIGATE_COMPLETE)
@@ -519,6 +582,11 @@ private:
{
LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "click_nofollow");
message.setValue("uri", event.getEventUri());
+#if LLQTWEBKIT_API_VERSION >= 7
+ message.setValue("nav_type", event.getNavigationType());
+#else
+ message.setValue("nav_type", "clicked");
+#endif
sendMessage(message);
}
@@ -532,6 +600,10 @@ private:
// These could be passed through as well, but aren't really needed.
// message.setValue("uri", event.getEventUri());
// message.setValueBoolean("dead", (event.getIntValue() != 0))
+
+ // debug spam
+ postDebugMessage( "Sending cookie_set message from plugin: " + event.getStringValue() );
+
sendMessage(message);
}
@@ -810,7 +882,10 @@ MediaPluginWebKit::MediaPluginWebKit(LLPluginInstance::sendMessageFunction host_
mHostLanguage = "en"; // default to english
mJavascriptEnabled = true; // default to on
mPluginsEnabled = true; // default to on
+ mEnableMediaPluginDebugging = false;
mUserAgent = "LLPluginMedia Web Browser";
+
+ mElapsedTime.reset();
}
MediaPluginWebKit::~MediaPluginWebKit()
@@ -916,7 +991,7 @@ void MediaPluginWebKit::receiveMessage(const char *message_string)
{
if(message_name == "set_volume")
{
- F32 volume = message_in.getValueReal("volume");
+ F32 volume = (F32)message_in.getValueReal("volume");
setVolume(volume);
}
}
@@ -982,9 +1057,9 @@ void MediaPluginWebKit::receiveMessage(const char *message_string)
S32 height = message_in.getValueS32("height");
S32 texture_width = message_in.getValueS32("texture_width");
S32 texture_height = message_in.getValueS32("texture_height");
- mBackgroundR = message_in.getValueReal("background_r");
- mBackgroundG = message_in.getValueReal("background_g");
- mBackgroundB = message_in.getValueReal("background_b");
+ mBackgroundR = (F32)message_in.getValueReal("background_r");
+ mBackgroundG = (F32)message_in.getValueReal("background_g");
+ mBackgroundB = (F32)message_in.getValueReal("background_b");
// mBackgroundA = message_in.setValueReal("background_a"); // Ignore any alpha
if(!name.empty())
@@ -1154,6 +1229,77 @@ void MediaPluginWebKit::receiveMessage(const char *message_string)
authResponse(message_in);
}
else
+ if(message_name == "enable_media_plugin_debugging")
+ {
+ mEnableMediaPluginDebugging = message_in.getValueBoolean( "enable" );
+ }
+ else
+ if(message_name == "js_enable_object")
+ {
+#if LLQTWEBKIT_API_VERSION >= 9
+ bool enable = message_in.getValueBoolean( "enable" );
+ LLQtWebKit::getInstance()->setSLObjectEnabled( enable );
+#endif
+ }
+ else
+ if(message_name == "js_agent_location")
+ {
+#if LLQTWEBKIT_API_VERSION >= 9
+ F32 x = (F32)message_in.getValueReal("x");
+ F32 y = (F32)message_in.getValueReal("y");
+ F32 z = (F32)message_in.getValueReal("z");
+ LLQtWebKit::getInstance()->setAgentLocation( x, y, z );
+ LLQtWebKit::getInstance()->emitLocation();
+#endif
+ }
+ else
+ if(message_name == "js_agent_global_location")
+ {
+#if LLQTWEBKIT_API_VERSION >= 9
+ F32 x = (F32)message_in.getValueReal("x");
+ F32 y = (F32)message_in.getValueReal("y");
+ F32 z = (F32)message_in.getValueReal("z");
+ LLQtWebKit::getInstance()->setAgentGlobalLocation( x, y, z );
+ LLQtWebKit::getInstance()->emitLocation();
+#endif
+ }
+ else
+ if(message_name == "js_agent_orientation")
+ {
+#if LLQTWEBKIT_API_VERSION >= 9
+ F32 angle = (F32)message_in.getValueReal("angle");
+ LLQtWebKit::getInstance()->setAgentOrientation( angle );
+ LLQtWebKit::getInstance()->emitLocation();
+#endif
+ }
+ else
+ if(message_name == "js_agent_region")
+ {
+#if LLQTWEBKIT_API_VERSION >= 9
+ const std::string& region = message_in.getValue("region");
+ LLQtWebKit::getInstance()->setAgentRegion( region );
+ LLQtWebKit::getInstance()->emitLocation();
+#endif
+ }
+ else
+ if(message_name == "js_agent_maturity")
+ {
+#if LLQTWEBKIT_API_VERSION >= 9
+ const std::string& maturity = message_in.getValue("maturity");
+ LLQtWebKit::getInstance()->setAgentMaturity( maturity );
+ LLQtWebKit::getInstance()->emitMaturity();
+#endif
+ }
+ else
+ if(message_name == "js_agent_language")
+ {
+#if LLQTWEBKIT_API_VERSION >= 9
+ const std::string& language = message_in.getValue("language");
+ LLQtWebKit::getInstance()->setAgentLanguage( language );
+ LLQtWebKit::getInstance()->emitLanguage();
+#endif
+ }
+ else
{
// std::cerr << "MediaPluginWebKit::receiveMessage: unknown media message: " << message_string << std::endl;
}
@@ -1174,6 +1320,15 @@ void MediaPluginWebKit::receiveMessage(const char *message_string)
mFirstFocus = false;
}
}
+ else if(message_name == "set_page_zoom_factor")
+ {
+#if LLQTWEBKIT_API_VERSION >= 15
+ F32 factor = (F32)message_in.getValueReal("factor");
+ LLQtWebKit::getInstance()->setPageZoomFactor(factor);
+#else
+ LL_WARNS() << "Ignoring setPageZoomFactor message (llqtwebkit version is too old)." << LL_ENDL;
+#endif
+ }
else if(message_name == "clear_cache")
{
LLQtWebKit::getInstance()->clearCache();
@@ -1200,6 +1355,9 @@ void MediaPluginWebKit::receiveMessage(const char *message_string)
else if(message_name == "set_cookies")
{
LLQtWebKit::getInstance()->setCookies(message_in.getValue("cookies"));
+
+ // debug spam
+ postDebugMessage( "Plugin setting cookie: " + message_in.getValue("cookies") );
}
else if(message_name == "proxy_setup")
{
@@ -1231,7 +1389,9 @@ void MediaPluginWebKit::receiveMessage(const char *message_string)
std::string url = message_in.getValue("url");
if ( 404 == code ) // browser lib only supports 404 right now
{
- LLQtWebKit::getInstance()->set404RedirectUrl( mBrowserWindowId, url );
+#if LLQTWEBKIT_API_VERSION < 8
+ LLQtWebKit::getInstance()->set404RedirectUrl( mBrowserWindowId, url );
+#endif
};
}
else if(message_name == "set_user_agent")
@@ -1239,20 +1399,29 @@ void MediaPluginWebKit::receiveMessage(const char *message_string)
mUserAgent = message_in.getValue("user_agent");
LLQtWebKit::getInstance()->setBrowserAgentId( mUserAgent );
}
+ else if(message_name == "show_web_inspector")
+ {
+#if LLQTWEBKIT_API_VERSION >= 10
+ bool val = message_in.getValueBoolean("show");
+ LLQtWebKit::getInstance()->showWebInspector( val );
+#else
+ LL_WARNS() << "Ignoring showWebInspector message (llqtwebkit version is too old)." << LL_ENDL;
+#endif
+ }
else if(message_name == "ignore_ssl_cert_errors")
{
#if LLQTWEBKIT_API_VERSION >= 3
LLQtWebKit::getInstance()->setIgnoreSSLCertErrors( message_in.getValueBoolean("ignore") );
#else
- llwarns << "Ignoring ignore_ssl_cert_errors message (llqtwebkit version is too old)." << llendl;
+ LL_WARNS() << "Ignoring ignore_ssl_cert_errors message (llqtwebkit version is too old)." << LL_ENDL;
#endif
}
else if(message_name == "add_certificate_file_path")
{
#if LLQTWEBKIT_API_VERSION >= 6
- LLQtWebKit::getInstance()->addCAFile( message_in.getValue("path") );
+ LLQtWebKit::getInstance()->setCAFile( message_in.getValue("path") );
#else
- llwarns << "Ignoring add_certificate_file_path message (llqtwebkit version is too old)." << llendl;
+ LL_WARNS() << "Ignoring add_certificate_file_path message (llqtwebkit version is too old)." << LL_ENDL;
#endif
}
else if(message_name == "init_history")
@@ -1309,3 +1478,4 @@ int init_media_plugin(LLPluginInstance::sendMessageFunction host_send_func, void
return 0;
}
+
diff --git a/indra/media_plugins/webkit/volume_catcher.h b/indra/media_plugins/webkit/volume_catcher.h
index 337f2913d3..337f2913d3 100644..100755
--- a/indra/media_plugins/webkit/volume_catcher.h
+++ b/indra/media_plugins/webkit/volume_catcher.h
diff --git a/indra/media_plugins/webkit/windows_volume_catcher.cpp b/indra/media_plugins/webkit/windows_volume_catcher.cpp
index 5fb84756ee..0cfb810906 100644..100755
--- a/indra/media_plugins/webkit/windows_volume_catcher.cpp
+++ b/indra/media_plugins/webkit/windows_volume_catcher.cpp
@@ -48,18 +48,37 @@ private:
set_volume_func_t mSetVolumeFunc;
set_mute_func_t mSetMuteFunc;
+ // tests if running on Vista, 7, 8 + once in CTOR
+ bool isWindowsVistaOrHigher();
+
F32 mVolume;
F32 mPan;
+ bool mSystemIsVistaOrHigher;
};
+
+bool VolumeCatcherImpl::isWindowsVistaOrHigher()
+{
+ OSVERSIONINFO osvi;
+ ZeroMemory(&osvi, sizeof(OSVERSIONINFO));
+ osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
+ GetVersionEx(&osvi);
+ return osvi.dwMajorVersion >= 6;
+}
+
VolumeCatcherImpl::VolumeCatcherImpl()
-: mVolume(1.0f), // default volume is max
- mPan(0.f) // default pan is centered
+: mVolume(1.0f), // default volume is max
+ mPan(0.f) // default pan is centered
{
- HMODULE handle = ::LoadLibrary(L"winmm.dll");
- if(handle)
+ mSystemIsVistaOrHigher = isWindowsVistaOrHigher();
+
+ if ( ! mSystemIsVistaOrHigher )
{
- mSetVolumeFunc = (set_volume_func_t)::GetProcAddress(handle, "setPluginVolume");
- mSetMuteFunc = (set_mute_func_t)::GetProcAddress(handle, "setPluginMute");
+ HMODULE handle = ::LoadLibrary(L"winmm.dll");
+ if(handle)
+ {
+ mSetVolumeFunc = (set_volume_func_t)::GetProcAddress(handle, "setPluginVolume");
+ mSetMuteFunc = (set_mute_func_t)::GetProcAddress(handle, "setPluginMute");
+ }
}
}
@@ -67,18 +86,29 @@ VolumeCatcherImpl::~VolumeCatcherImpl()
{
}
-
void VolumeCatcherImpl::setVolume(F32 volume)
{
mVolume = volume;
- if (mSetMuteFunc)
+ if ( mSystemIsVistaOrHigher )
{
- mSetMuteFunc(volume == 0.f);
+ // set both left/right to same volume
+ // TODO: use pan value to set independently
+ DWORD left_channel = (DWORD)(mVolume * 65535.0f);
+ DWORD right_channel = (DWORD)(mVolume * 65535.0f);
+ DWORD hw_volume = left_channel << 16 | right_channel;
+ ::waveOutSetVolume(NULL, hw_volume);
}
- if (mSetVolumeFunc)
+ else
{
- mSetVolumeFunc(mVolume);
+ if (mSetMuteFunc)
+ {
+ mSetMuteFunc(volume == 0.f);
+ }
+ if (mSetVolumeFunc)
+ {
+ mSetVolumeFunc(mVolume);
+ }
}
}
diff --git a/indra/media_plugins/winmmshim/CMakeLists.txt b/indra/media_plugins/winmmshim/CMakeLists.txt
index 387214088f..bf74f81809 100644..100755
--- a/indra/media_plugins/winmmshim/CMakeLists.txt
+++ b/indra/media_plugins/winmmshim/CMakeLists.txt
@@ -3,6 +3,12 @@
project(winmm_shim)
### winmm_shim
+# *HACK - override msvcrt implementation (intialized on 00-Common) to be
+# statically linked for winmm.dll this relies on vc taking the last flag on
+# the command line
+set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MTd")
+set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} /MT")
+set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MT")
set(winmm_shim_SOURCE_FILES
forwarding_api.cpp
diff --git a/indra/media_plugins/winmmshim/forwarding_api.cpp b/indra/media_plugins/winmmshim/forwarding_api.cpp
index eff7e20451..33f0675028 100644..100755
--- a/indra/media_plugins/winmmshim/forwarding_api.cpp
+++ b/indra/media_plugins/winmmshim/forwarding_api.cpp
@@ -389,90 +389,105 @@ void init_function_pointers(HMODULE winmm_handle)
extern "C" {
LRESULT WINAPI CloseDriver( HDRVR hDriver, LPARAM lParam1, LPARAM lParam2)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"CloseDriver\n");
return CloseDriver_orig( hDriver, lParam1, lParam2);
}
HDRVR WINAPI OpenDriver( LPCWSTR szDriverName, LPCWSTR szSectionName, LPARAM lParam2)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"OpenDriver\n");
return OpenDriver_orig( szDriverName, szSectionName, lParam2);
}
LRESULT WINAPI SendDriverMessage( HDRVR hDriver, UINT message, LPARAM lParam1, LPARAM lParam2)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"SendDriverMessage\n");
return SendDriverMessage_orig( hDriver, message, lParam1, lParam2);
}
HMODULE WINAPI DrvGetModuleHandle( HDRVR hDriver)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"DrvGetModuleHandle\n");
return DrvGetModuleHandle_orig( hDriver);
}
HMODULE WINAPI GetDriverModuleHandle( HDRVR hDriver)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"GetDriverModuleHandle\n");
return GetDriverModuleHandle_orig( hDriver);
}
LRESULT WINAPI DefDriverProc( DWORD_PTR dwDriverIdentifier, HDRVR hdrvr, UINT uMsg, LPARAM lParam1, LPARAM lParam2)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"DefDriverProc\n");
return DefDriverProc_orig( dwDriverIdentifier, hdrvr, uMsg, lParam1, lParam2);
}
BOOL WINAPI DriverCallback( DWORD dwCallBack, DWORD dwFlags, HDRVR hdrvr, DWORD msg, DWORD dwUser, DWORD dwParam1, DWORD dwParam2)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"DriverCallback\n");
return DriverCallback_orig(dwCallBack, dwFlags, hdrvr, msg, dwUser, dwParam1, dwParam2);
}
UINT WINAPI mmsystemGetVersion(void)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mmsystemGetVersion\n");
return mmsystemGetVersion_orig();
}
BOOL WINAPI sndPlaySoundA( LPCSTR pszSound, UINT fuSound)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"sndPlaySoundA\n");
return sndPlaySoundA_orig( pszSound, fuSound);
}
BOOL WINAPI sndPlaySoundW( LPCWSTR pszSound, UINT fuSound)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"sndPlaySoundW\n");
return sndPlaySoundW_orig( pszSound, fuSound);
}
BOOL WINAPI PlaySoundA( LPCSTR pszSound, HMODULE hmod, DWORD fdwSound)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"PlaySoundA\n");
return PlaySoundA_orig( pszSound, hmod, fdwSound);
}
BOOL WINAPI PlaySoundW( LPCWSTR pszSound, HMODULE hmod, DWORD fdwSound)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"PlaySoundW\n");
return PlaySoundW_orig( pszSound, hmod, fdwSound);
}
UINT WINAPI waveOutGetNumDevs(void)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"waveOutGetNumDevs\n");
return waveOutGetNumDevs_orig();
}
MMRESULT WINAPI waveOutGetDevCapsA( UINT_PTR uDeviceID, LPWAVEOUTCAPSA pwoc, UINT cbwoc)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"waveOutGetDevCapsA\n");
return waveOutGetDevCapsA_orig( uDeviceID, pwoc, cbwoc);
}
MMRESULT WINAPI waveOutGetDevCapsW( UINT_PTR uDeviceID, LPWAVEOUTCAPSW pwoc, UINT cbwoc)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"waveOutGetDevCapsW\n");
return waveOutGetDevCapsW_orig( uDeviceID, pwoc, cbwoc);
}
@@ -480,24 +495,28 @@ extern "C" {
MMRESULT WINAPI waveOutGetVolume( HWAVEOUT hwo, LPDWORD pdwVolume)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"waveOutGetVolume\n");
return waveOutGetVolume_orig( hwo, pdwVolume);
}
MMRESULT WINAPI waveOutSetVolume( HWAVEOUT hwo, DWORD dwVolume)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"waveOutSetVolume\n");
return waveOutSetVolume_orig( hwo, dwVolume);
}
MMRESULT WINAPI waveOutGetErrorTextA( MMRESULT mmrError, LPSTR pszText, UINT cchText)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"waveOutGetErrorTextA\n");
return waveOutGetErrorTextA_orig( mmrError, pszText, cchText);
}
MMRESULT WINAPI waveOutGetErrorTextW( MMRESULT mmrError, LPWSTR pszText, UINT cchText)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"waveOutGetErrorTextW\n");
return waveOutGetErrorTextW_orig( mmrError, pszText, cchText);
}
@@ -516,12 +535,14 @@ extern "C" {
MMRESULT WINAPI waveOutPrepareHeader( HWAVEOUT hwo, LPWAVEHDR pwh, UINT cbwh)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"waveOutPrepareHeader\n");
return waveOutPrepareHeader_orig( hwo, pwh, cbwh);
}
MMRESULT WINAPI waveOutUnprepareHeader( HWAVEOUT hwo, LPWAVEHDR pwh, UINT cbwh)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"waveOutUnprepareHeader\n");
return waveOutUnprepareHeader_orig( hwo, pwh, cbwh);
}
@@ -535,834 +556,973 @@ extern "C" {
MMRESULT WINAPI waveOutPause( HWAVEOUT hwo)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"waveOutPause\n");
return waveOutPause_orig( hwo);
}
MMRESULT WINAPI waveOutRestart( HWAVEOUT hwo)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"waveOutRestart\n");
return waveOutRestart_orig( hwo);
}
MMRESULT WINAPI waveOutReset( HWAVEOUT hwo)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"waveOutReset\n");
return waveOutReset_orig( hwo);
}
MMRESULT WINAPI waveOutBreakLoop( HWAVEOUT hwo)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"waveOutBreakLoop\n");
return waveOutBreakLoop_orig( hwo);
}
MMRESULT WINAPI waveOutGetPosition( HWAVEOUT hwo, LPMMTIME pmmt, UINT cbmmt)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"waveOutGetPosition\n");
return waveOutGetPosition_orig( hwo, pmmt, cbmmt);
}
MMRESULT WINAPI waveOutGetPitch( HWAVEOUT hwo, LPDWORD pdwPitch)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"waveOutGetPitch\n");
return waveOutGetPitch_orig( hwo, pdwPitch);
}
MMRESULT WINAPI waveOutSetPitch( HWAVEOUT hwo, DWORD dwPitch)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"waveOutSetPitch\n");
return waveOutSetPitch_orig( hwo, dwPitch);
}
MMRESULT WINAPI waveOutGetPlaybackRate( HWAVEOUT hwo, LPDWORD pdwRate)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"waveOutGetPlaybackRate\n");
return waveOutGetPlaybackRate_orig( hwo, pdwRate);
}
MMRESULT WINAPI waveOutSetPlaybackRate( HWAVEOUT hwo, DWORD dwRate)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"waveOutSetPlaybackRate\n");
return waveOutSetPlaybackRate_orig( hwo, dwRate);
}
MMRESULT WINAPI waveOutGetID( HWAVEOUT hwo, LPUINT puDeviceID)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"waveOutGetID\n");
return waveOutGetID_orig( hwo, puDeviceID);
}
MMRESULT WINAPI waveOutMessage( HWAVEOUT hwo, UINT uMsg, DWORD_PTR dw1, DWORD_PTR dw2)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"waveOutMessage\n");
return waveOutMessage_orig( hwo, uMsg, dw1, dw2);
}
UINT WINAPI waveInGetNumDevs(void)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"waveInGetNumDevs\n");
return waveInGetNumDevs_orig();
}
MMRESULT WINAPI waveInGetDevCapsA( UINT_PTR uDeviceID, LPWAVEINCAPSA pwic, UINT cbwic)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"waveInGetDevCapsA\n");
return waveInGetDevCapsA_orig( uDeviceID, pwic, cbwic);
}
MMRESULT WINAPI waveInGetDevCapsW( UINT_PTR uDeviceID, LPWAVEINCAPSW pwic, UINT cbwic)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"waveInGetDevCapsW\n");
return waveInGetDevCapsW_orig( uDeviceID, pwic, cbwic);
}
MMRESULT WINAPI waveInGetErrorTextA(MMRESULT mmrError, LPSTR pszText, UINT cchText)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"waveInGetErrorTextA\n");
return waveInGetErrorTextA_orig(mmrError, pszText, cchText);
}
MMRESULT WINAPI waveInGetErrorTextW(MMRESULT mmrError, LPWSTR pszText, UINT cchText)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"waveInGetErrorTextW\n");
return waveInGetErrorTextW_orig(mmrError, pszText, cchText);
}
MMRESULT WINAPI waveInOpen( LPHWAVEIN phwi, UINT uDeviceID, LPCWAVEFORMATEX pwfx, DWORD_PTR dwCallback, DWORD_PTR dwInstance, DWORD fdwOpen)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"waveInOpen\n");
return waveInOpen_orig(phwi, uDeviceID, pwfx, dwCallback, dwInstance, fdwOpen);
}
MMRESULT WINAPI waveInClose( HWAVEIN hwi)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"waveInClose\n");
return waveInClose_orig( hwi);
}
MMRESULT WINAPI waveInPrepareHeader( HWAVEIN hwi, LPWAVEHDR pwh, UINT cbwh)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"waveInPrepareHeader\n");
return waveInPrepareHeader_orig( hwi, pwh, cbwh);
}
MMRESULT WINAPI waveInUnprepareHeader( HWAVEIN hwi, LPWAVEHDR pwh, UINT cbwh)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"waveInUnprepareHeader\n");
return waveInUnprepareHeader_orig( hwi, pwh, cbwh);
}
MMRESULT WINAPI waveInAddBuffer( HWAVEIN hwi, LPWAVEHDR pwh, UINT cbwh)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"waveInAddBuffer\n");
return waveInAddBuffer_orig( hwi, pwh, cbwh);
}
MMRESULT WINAPI waveInStart( HWAVEIN hwi)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"waveInStart\n");
return waveInStart_orig( hwi);
}
MMRESULT WINAPI waveInStop( HWAVEIN hwi)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"waveInStop\n");
return waveInStop_orig(hwi);
}
MMRESULT WINAPI waveInReset( HWAVEIN hwi)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"waveInReset\n");
return waveInReset_orig(hwi);
}
MMRESULT WINAPI waveInGetPosition( HWAVEIN hwi, LPMMTIME pmmt, UINT cbmmt)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"waveInGetPosition\n");
return waveInGetPosition_orig( hwi, pmmt, cbmmt);
}
MMRESULT WINAPI waveInGetID( HWAVEIN hwi, LPUINT puDeviceID)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"waveInGetID\n");
return waveInGetID_orig( hwi, puDeviceID);
}
MMRESULT WINAPI waveInMessage( HWAVEIN hwi, UINT uMsg, DWORD_PTR dw1, DWORD_PTR dw2)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"waveInMessage\n");
return waveInMessage_orig( hwi, uMsg, dw1, dw2);
}
UINT WINAPI midiOutGetNumDevs(void)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"midiOutGetNumDevs\n");
return midiOutGetNumDevs_orig();
}
MMRESULT WINAPI midiStreamOpen( LPHMIDISTRM phms, LPUINT puDeviceID, DWORD cMidi, DWORD_PTR dwCallback, DWORD_PTR dwInstance, DWORD fdwOpen)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"midiStreamOpen\n");
return midiStreamOpen_orig( phms, puDeviceID, cMidi, dwCallback, dwInstance, fdwOpen);
}
MMRESULT WINAPI midiStreamClose( HMIDISTRM hms)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"midiStreamClose\n");
return midiStreamClose_orig( hms);
}
MMRESULT WINAPI midiStreamProperty( HMIDISTRM hms, LPBYTE lppropdata, DWORD dwProperty)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"midiStreamProperty\n");
return midiStreamProperty_orig( hms, lppropdata, dwProperty);
}
MMRESULT WINAPI midiStreamPosition( HMIDISTRM hms, LPMMTIME lpmmt, UINT cbmmt)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"midiStreamPosition\n");
return midiStreamPosition_orig( hms, lpmmt, cbmmt);
}
MMRESULT WINAPI midiStreamOut( HMIDISTRM hms, LPMIDIHDR pmh, UINT cbmh)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"midiStreamOut\n");
return midiStreamOut_orig( hms, pmh, cbmh);
}
MMRESULT WINAPI midiStreamPause( HMIDISTRM hms)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"midiStreamPause\n");
return midiStreamPause_orig( hms);
}
MMRESULT WINAPI midiStreamRestart( HMIDISTRM hms)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"midiStreamRestart\n");
return midiStreamRestart_orig( hms);
}
MMRESULT WINAPI midiStreamStop( HMIDISTRM hms)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"midiStreamStop\n");
return midiStreamStop_orig( hms);
}
MMRESULT WINAPI midiConnect( HMIDI hmi, HMIDIOUT hmo, LPVOID pReserved)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"midiConnect\n");
return midiConnect_orig( hmi, hmo, pReserved);
}
MMRESULT WINAPI midiDisconnect( HMIDI hmi, HMIDIOUT hmo, LPVOID pReserved)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"midiDisconnect\n");
return midiDisconnect_orig( hmi, hmo, pReserved);
}
MMRESULT WINAPI midiOutGetDevCapsA( UINT_PTR uDeviceID, LPMIDIOUTCAPSA pmoc, UINT cbmoc)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"midiOutGetDevCapsA\n");
return midiOutGetDevCapsA_orig( uDeviceID, pmoc, cbmoc);
}
MMRESULT WINAPI midiOutGetDevCapsW( UINT_PTR uDeviceID, LPMIDIOUTCAPSW pmoc, UINT cbmoc)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"midiOutGetDevCapsW\n");
return midiOutGetDevCapsW_orig( uDeviceID, pmoc, cbmoc);
}
MMRESULT WINAPI midiOutGetVolume( HMIDIOUT hmo, LPDWORD pdwVolume)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"midiOutGetVolume\n");
return midiOutGetVolume_orig( hmo, pdwVolume);
}
MMRESULT WINAPI midiOutSetVolume( HMIDIOUT hmo, DWORD dwVolume)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"midiOutSetVolume\n");
return midiOutSetVolume_orig( hmo, dwVolume);
}
MMRESULT WINAPI midiOutGetErrorTextA( MMRESULT mmrError, LPSTR pszText, UINT cchText)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"midiOutGetErrorTextA\n");
return midiOutGetErrorTextA_orig( mmrError, pszText, cchText);
}
MMRESULT WINAPI midiOutGetErrorTextW( MMRESULT mmrError, LPWSTR pszText, UINT cchText)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"midiOutGetErrorTextW\n");
return midiOutGetErrorTextW_orig( mmrError, pszText, cchText);
}
MMRESULT WINAPI midiOutOpen( LPHMIDIOUT phmo, UINT uDeviceID, DWORD_PTR dwCallback, DWORD_PTR dwInstance, DWORD fdwOpen)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"midiOutOpen\n");
return midiOutOpen_orig(phmo, uDeviceID, dwCallback, dwInstance, fdwOpen);
}
MMRESULT WINAPI midiOutClose( HMIDIOUT hmo)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"midiOutClose\n");
return midiOutClose_orig( hmo);
}
MMRESULT WINAPI midiOutPrepareHeader( HMIDIOUT hmo, LPMIDIHDR pmh, UINT cbmh)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"midiOutPrepareHeader\n");
return midiOutPrepareHeader_orig( hmo, pmh, cbmh);
}
MMRESULT WINAPI midiOutUnprepareHeader(HMIDIOUT hmo, LPMIDIHDR pmh, UINT cbmh)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"midiOutUnprepareHeader\n");
return midiOutUnprepareHeader_orig(hmo, pmh, cbmh);
}
MMRESULT WINAPI midiOutShortMsg( HMIDIOUT hmo, DWORD dwMsg)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"midiOutShortMsg\n");
return midiOutShortMsg_orig( hmo, dwMsg);
}
MMRESULT WINAPI midiOutLongMsg(HMIDIOUT hmo, LPMIDIHDR pmh, UINT cbmh)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"midiOutLongMsg\n");
return midiOutLongMsg_orig(hmo, pmh, cbmh);
}
MMRESULT WINAPI midiOutReset( HMIDIOUT hmo)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"midiOutReset\n");
return midiOutReset_orig( hmo);
}
MMRESULT WINAPI midiOutCachePatches( HMIDIOUT hmo, UINT uBank, LPWORD pwpa, UINT fuCache)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"midiOutCachePatches\n");
return midiOutCachePatches_orig( hmo, uBank, pwpa, fuCache);
}
MMRESULT WINAPI midiOutCacheDrumPatches( HMIDIOUT hmo, UINT uPatch, LPWORD pwkya, UINT fuCache)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"midiOutCacheDrumPatches\n");
return midiOutCacheDrumPatches_orig( hmo, uPatch, pwkya, fuCache);
}
MMRESULT WINAPI midiOutGetID( HMIDIOUT hmo, LPUINT puDeviceID)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"midiOutGetID\n");
return midiOutGetID_orig( hmo, puDeviceID);
}
MMRESULT WINAPI midiOutMessage( HMIDIOUT hmo, UINT uMsg, DWORD_PTR dw1, DWORD_PTR dw2)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"midiOutMessage\n");
return midiOutMessage_orig( hmo, uMsg, dw1, dw2);
}
UINT WINAPI midiInGetNumDevs(void)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"midiInGetNumDevs\n");
return midiInGetNumDevs_orig();
}
MMRESULT WINAPI midiInGetDevCapsA( UINT_PTR uDeviceID, LPMIDIINCAPSA pmic, UINT cbmic)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"midiInGetDevCapsA\n");
return midiInGetDevCapsA_orig( uDeviceID, pmic, cbmic);
}
MMRESULT WINAPI midiInGetDevCapsW( UINT_PTR uDeviceID, LPMIDIINCAPSW pmic, UINT cbmic)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"midiInGetDevCapsW\n");
return midiInGetDevCapsW_orig( uDeviceID, pmic, cbmic);
}
MMRESULT WINAPI midiInGetErrorTextA( MMRESULT mmrError, LPSTR pszText, UINT cchText)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"midiInGetErrorTextA\n");
return midiInGetErrorTextA_orig( mmrError, pszText, cchText);
}
MMRESULT WINAPI midiInGetErrorTextW( MMRESULT mmrError, LPWSTR pszText, UINT cchText)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"midiInGetErrorTextW\n");
return midiInGetErrorTextW_orig( mmrError, pszText, cchText);
}
MMRESULT WINAPI midiInOpen( LPHMIDIIN phmi, UINT uDeviceID, DWORD_PTR dwCallback, DWORD_PTR dwInstance, DWORD fdwOpen)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"midiInOpen\n");
return midiInOpen_orig(phmi, uDeviceID, dwCallback, dwInstance, fdwOpen);
}
MMRESULT WINAPI midiInClose( HMIDIIN hmi)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"midiInClose\n");
return midiInClose_orig( hmi);
}
MMRESULT WINAPI midiInPrepareHeader( HMIDIIN hmi, LPMIDIHDR pmh, UINT cbmh)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"midiInPrepareHeader\n");
return midiInPrepareHeader_orig( hmi, pmh, cbmh);
}
MMRESULT WINAPI midiInUnprepareHeader( HMIDIIN hmi, LPMIDIHDR pmh, UINT cbmh)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"midiInUnprepareHeader\n");
return midiInUnprepareHeader_orig( hmi, pmh, cbmh);
}
MMRESULT WINAPI midiInAddBuffer( HMIDIIN hmi, LPMIDIHDR pmh, UINT cbmh)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"midiInAddBuffer\n");
return midiInAddBuffer_orig( hmi, pmh, cbmh);
}
MMRESULT WINAPI midiInStart( HMIDIIN hmi)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"midiInStart\n");
return midiInStart_orig( hmi);
}
MMRESULT WINAPI midiInStop( HMIDIIN hmi)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"midiInStop\n");
return midiInStop_orig(hmi);
}
MMRESULT WINAPI midiInReset( HMIDIIN hmi)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"midiInReset\n");
return midiInReset_orig( hmi);
}
MMRESULT WINAPI midiInGetID( HMIDIIN hmi, LPUINT puDeviceID)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"midiInGetID\n");
return midiInGetID_orig( hmi, puDeviceID);
}
MMRESULT WINAPI midiInMessage( HMIDIIN hmi, UINT uMsg, DWORD_PTR dw1, DWORD_PTR dw2)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"midiInMessage\n");
return midiInMessage_orig( hmi, uMsg, dw1, dw2);
}
UINT WINAPI auxGetNumDevs(void)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"auxGetNumDevs\n");
return auxGetNumDevs_orig();
}
MMRESULT WINAPI auxGetDevCapsA( UINT_PTR uDeviceID, LPAUXCAPSA pac, UINT cbac)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"auxGetDevCapsA\n");
return auxGetDevCapsA_orig( uDeviceID, pac, cbac);
}
MMRESULT WINAPI auxGetDevCapsW( UINT_PTR uDeviceID, LPAUXCAPSW pac, UINT cbac)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"auxGetDevCapsW\n");
return auxGetDevCapsW_orig( uDeviceID, pac, cbac);
}
MMRESULT WINAPI auxSetVolume( UINT uDeviceID, DWORD dwVolume)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"auxSetVolume\n");
return auxSetVolume_orig( uDeviceID, dwVolume);
}
MMRESULT WINAPI auxGetVolume( UINT uDeviceID, LPDWORD pdwVolume)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"auxGetVolume\n");
return auxGetVolume_orig( uDeviceID, pdwVolume);
}
MMRESULT WINAPI auxOutMessage( UINT uDeviceID, UINT uMsg, DWORD_PTR dw1, DWORD_PTR dw2)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"auxOutMessage\n");
return auxOutMessage_orig( uDeviceID, uMsg, dw1, dw2);
}
UINT WINAPI mixerGetNumDevs(void)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mixerGetNumDevs\n");
return mixerGetNumDevs_orig();
}
MMRESULT WINAPI mixerGetDevCapsA( UINT_PTR uMxId, LPMIXERCAPSA pmxcaps, UINT cbmxcaps)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mixerGetDevCapsA\n");
return mixerGetDevCapsA_orig( uMxId, pmxcaps, cbmxcaps);
}
MMRESULT WINAPI mixerGetDevCapsW( UINT_PTR uMxId, LPMIXERCAPSW pmxcaps, UINT cbmxcaps)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mixerGetDevCapsW\n");
return mixerGetDevCapsW_orig( uMxId, pmxcaps, cbmxcaps);
}
MMRESULT WINAPI mixerOpen( LPHMIXER phmx, UINT uMxId, DWORD_PTR dwCallback, DWORD_PTR dwInstance, DWORD fdwOpen)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mixerOpen\n");
return mixerOpen_orig( phmx, uMxId, dwCallback, dwInstance, fdwOpen);
}
MMRESULT WINAPI mixerClose( HMIXER hmx)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mixerClose\n");
return mixerClose_orig( hmx);
}
DWORD WINAPI mixerMessage( HMIXER hmx, UINT uMsg, DWORD_PTR dwParam1, DWORD_PTR dwParam2)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mixerMessage\n");
return mixerMessage_orig( hmx, uMsg, dwParam1, dwParam2);
}
MMRESULT WINAPI mixerGetLineInfoA( HMIXEROBJ hmxobj, LPMIXERLINEA pmxl, DWORD fdwInfo)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mixerGetLineInfoA\n");
return mixerGetLineInfoA_orig( hmxobj, pmxl, fdwInfo);
}
MMRESULT WINAPI mixerGetLineInfoW( HMIXEROBJ hmxobj, LPMIXERLINEW pmxl, DWORD fdwInfo)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mixerGetLineInfoW\n");
return mixerGetLineInfoW_orig( hmxobj, pmxl, fdwInfo);
}
MMRESULT WINAPI mixerGetID( HMIXEROBJ hmxobj, UINT FAR *puMxId, DWORD fdwId)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mixerGetID\n");
return mixerGetID_orig( hmxobj, puMxId, fdwId);
}
MMRESULT WINAPI mixerGetLineControlsA( HMIXEROBJ hmxobj, LPMIXERLINECONTROLSA pmxlc, DWORD fdwControls)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mixerGetLineControlsA\n");
return mixerGetLineControlsA_orig( hmxobj, pmxlc, fdwControls);
}
MMRESULT WINAPI mixerGetLineControlsW( HMIXEROBJ hmxobj, LPMIXERLINECONTROLSW pmxlc, DWORD fdwControls)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mixerGetLineControlsW\n");
return mixerGetLineControlsW_orig( hmxobj, pmxlc, fdwControls);
}
MMRESULT WINAPI mixerGetControlDetailsA( HMIXEROBJ hmxobj, LPMIXERCONTROLDETAILS pmxcd, DWORD fdwDetails)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mixerGetControlDetailsA\n");
return mixerGetControlDetailsA_orig( hmxobj, pmxcd, fdwDetails);
}
MMRESULT WINAPI mixerGetControlDetailsW( HMIXEROBJ hmxobj, LPMIXERCONTROLDETAILS pmxcd, DWORD fdwDetails)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mixerGetControlDetailsW\n");
return mixerGetControlDetailsW_orig( hmxobj, pmxcd, fdwDetails);
}
MMRESULT WINAPI mixerSetControlDetails( HMIXEROBJ hmxobj, LPMIXERCONTROLDETAILS pmxcd, DWORD fdwDetails)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mixerSetControlDetails\n");
return mixerSetControlDetails_orig( hmxobj, pmxcd, fdwDetails);
}
DWORD WINAPI mmGetCurrentTask(void)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mmGetCurrentTask\n");
return mmGetCurrentTask_orig();
}
void WINAPI mmTaskBlock(DWORD val)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mmTaskBlock\n");
return mmTaskBlock_orig(val);
}
UINT WINAPI mmTaskCreate(LPTASKCALLBACK a, HANDLE* b, DWORD_PTR c)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mmTaskCreate\n");
return mmTaskCreate_orig(a, b, c);
}
BOOL WINAPI mmTaskSignal(DWORD a)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mmTaskSignal\n");
return mmTaskSignal_orig(a);
}
VOID WINAPI mmTaskYield()
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mmTaskYield\n");
mmTaskYield_orig();
}
MMRESULT WINAPI timeGetSystemTime( LPMMTIME pmmt, UINT cbmmt)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"timeGetSystemTime\n");
return timeGetSystemTime_orig( pmmt, cbmmt);
}
DWORD WINAPI timeGetTime(void)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"timeGetTime\n");
return timeGetTime_orig();
}
MMRESULT WINAPI timeSetEvent( UINT uDelay, UINT uResolution, LPTIMECALLBACK fptc, DWORD_PTR dwUser, UINT fuEvent)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"timeSetEvent\n");
return timeSetEvent_orig(uDelay, uResolution, fptc, dwUser, fuEvent);
}
MMRESULT WINAPI timeKillEvent( UINT uTimerID)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"timeKillEvent\n");
return timeKillEvent_orig( uTimerID);
}
MMRESULT WINAPI timeGetDevCaps( LPTIMECAPS ptc, UINT cbtc)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"timeGetDevCaps\n");
return timeGetDevCaps_orig( ptc, cbtc);
}
MMRESULT WINAPI timeBeginPeriod( UINT uPeriod)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"timeBeginPeriod\n");
return timeBeginPeriod_orig( uPeriod);
}
MMRESULT WINAPI timeEndPeriod( UINT uPeriod)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"timeEndPeriod\n");
return timeEndPeriod_orig( uPeriod);
}
UINT WINAPI joyGetNumDevs(void)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"joyGetNumDevs\n");
return joyGetNumDevs_orig();
}
MMRESULT WINAPI joyConfigChanged(DWORD dwFlags)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"joyConfigChanged\n");
return joyConfigChanged_orig(dwFlags);
}
MMRESULT WINAPI joyGetDevCapsA( UINT_PTR uJoyID, LPJOYCAPSA pjc, UINT cbjc)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"joyGetDevCapsA\n");
return joyGetDevCapsA_orig( uJoyID, pjc, cbjc);
}
MMRESULT WINAPI joyGetDevCapsW( UINT_PTR uJoyID, LPJOYCAPSW pjc, UINT cbjc)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"joyGetDevCapsW\n");
return joyGetDevCapsW_orig( uJoyID, pjc, cbjc);
}
MMRESULT WINAPI joyGetPos( UINT uJoyID, LPJOYINFO pji)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"joyGetPos\n");
return joyGetPos_orig( uJoyID, pji);
}
MMRESULT WINAPI joyGetPosEx( UINT uJoyID, LPJOYINFOEX pji)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"joyGetPosEx\n");
return joyGetPosEx_orig( uJoyID, pji);
}
MMRESULT WINAPI joyGetThreshold( UINT uJoyID, LPUINT puThreshold)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"joyGetThreshold\n");
return joyGetThreshold_orig( uJoyID, puThreshold);
}
MMRESULT WINAPI joyReleaseCapture( UINT uJoyID)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"joyReleaseCapture\n");
return joyReleaseCapture_orig( uJoyID);
}
MMRESULT WINAPI joySetCapture( HWND hwnd, UINT uJoyID, UINT uPeriod, BOOL fChanged)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"joySetCapture\n");
return joySetCapture_orig(hwnd, uJoyID, uPeriod, fChanged);
}
MMRESULT WINAPI joySetThreshold( UINT uJoyID, UINT uThreshold)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"joySetThreshold\n");
return joySetThreshold_orig( uJoyID, uThreshold);
}
- BOOL WINAPI mciDriverNotify(HWND hwndCallback, UINT uDeviceID, UINT uStatus)
+ BOOL WINAPI mciDriverNotify(HANDLE hwndCallback, MCIDEVICEID uDeviceID, UINT uStatus)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mciDriverNotify\n");
return mciDriverNotify_orig(hwndCallback, uDeviceID, uStatus);
}
UINT WINAPI mciDriverYield(UINT uDeviceID)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mciDriverYield\n");
return mciDriverYield_orig(uDeviceID);
}
FOURCC WINAPI mmioStringToFOURCCA( LPCSTR sz, UINT uFlags)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mmioStringToFOURCCA\n");
return mmioStringToFOURCCA_orig( sz, uFlags);
}
FOURCC WINAPI mmioStringToFOURCCW( LPCWSTR sz, UINT uFlags)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mmioStringToFOURCCW\n");
return mmioStringToFOURCCW_orig( sz, uFlags);
}
LPMMIOPROC WINAPI mmioInstallIOProcA( FOURCC fccIOProc, LPMMIOPROC pIOProc, DWORD dwFlags)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mmioInstallIOProcA\n");
return mmioInstallIOProcA_orig( fccIOProc, pIOProc, dwFlags);
}
LPMMIOPROC WINAPI mmioInstallIOProcW( FOURCC fccIOProc, LPMMIOPROC pIOProc, DWORD dwFlags)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mmioInstallIOProcW\n");
return mmioInstallIOProcW_orig( fccIOProc, pIOProc, dwFlags);
}
HMMIO WINAPI mmioOpenA( LPSTR pszFileName, LPMMIOINFO pmmioinfo, DWORD fdwOpen)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mmioOpenA\n");
return mmioOpenA_orig( pszFileName, pmmioinfo, fdwOpen);
}
HMMIO WINAPI mmioOpenW( LPWSTR pszFileName, LPMMIOINFO pmmioinfo, DWORD fdwOpen)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mmioOpenW\n");
return mmioOpenW_orig( pszFileName, pmmioinfo, fdwOpen);
}
MMRESULT WINAPI mmioRenameA( LPCSTR pszFileName, LPCSTR pszNewFileName, LPCMMIOINFO pmmioinfo, DWORD fdwRename)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mmioRenameA\n");
return mmioRenameA_orig( pszFileName, pszNewFileName, pmmioinfo, fdwRename);
}
MMRESULT WINAPI mmioRenameW( LPCWSTR pszFileName, LPCWSTR pszNewFileName, LPCMMIOINFO pmmioinfo, DWORD fdwRename)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mmioRenameW\n");
return mmioRenameW_orig( pszFileName, pszNewFileName, pmmioinfo, fdwRename);
}
MMRESULT WINAPI mmioClose( HMMIO hmmio, UINT fuClose)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mmioClose\n");
return mmioClose_orig( hmmio, fuClose);
}
LONG WINAPI mmioRead( HMMIO hmmio, HPSTR pch, LONG cch)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mmioRead\n");
return mmioRead_orig( hmmio, pch, cch);
}
LONG WINAPI mmioWrite( HMMIO hmmio, const char _huge* pch, LONG cch)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mmioWrite\n");
return mmioWrite_orig( hmmio, pch, cch);
}
LONG WINAPI mmioSeek( HMMIO hmmio, LONG lOffset, int iOrigin)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mmioSeek\n");
return mmioSeek_orig(hmmio, lOffset, iOrigin);
}
MMRESULT WINAPI mmioGetInfo( HMMIO hmmio, LPMMIOINFO pmmioinfo, UINT fuInfo)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mmioGetInfo\n");
return mmioGetInfo_orig( hmmio, pmmioinfo, fuInfo);
}
MMRESULT WINAPI mmioSetInfo( HMMIO hmmio, LPCMMIOINFO pmmioinfo, UINT fuInfo)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mmioSetInfo\n");
return mmioSetInfo_orig( hmmio, pmmioinfo, fuInfo);
}
MMRESULT WINAPI mmioSetBuffer( HMMIO hmmio, LPSTR pchBuffer, LONG cchBuffer, UINT fuBuffer)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mmioSetBuffer\n");
return mmioSetBuffer_orig(hmmio, pchBuffer, cchBuffer, fuBuffer);
}
MMRESULT WINAPI mmioFlush( HMMIO hmmio, UINT fuFlush)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mmioFlush\n");
return mmioFlush_orig( hmmio, fuFlush);
}
MMRESULT WINAPI mmioAdvance( HMMIO hmmio, LPMMIOINFO pmmioinfo, UINT fuAdvance)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mmioAdvance\n");
return mmioAdvance_orig( hmmio, pmmioinfo, fuAdvance);
}
LRESULT WINAPI mmioSendMessage( HMMIO hmmio, UINT uMsg, LPARAM lParam1, LPARAM lParam2)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mmioSendMessage\n");
return mmioSendMessage_orig(hmmio, uMsg, lParam1, lParam2);
}
MMRESULT WINAPI mmioDescend( HMMIO hmmio, LPMMCKINFO pmmcki, const MMCKINFO FAR* pmmckiParent, UINT fuDescend)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mmioDescend\n");
return mmioDescend_orig(hmmio, pmmcki, pmmckiParent, fuDescend);
}
MMRESULT WINAPI mmioAscend( HMMIO hmmio, LPMMCKINFO pmmcki, UINT fuAscend)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mmioAscend\n");
return mmioAscend_orig( hmmio, pmmcki, fuAscend);
}
MMRESULT WINAPI mmioCreateChunk(HMMIO hmmio, LPMMCKINFO pmmcki, UINT fuCreate)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mmioCreateChunk\n");
return mmioCreateChunk_orig(hmmio, pmmcki, fuCreate);
}
MCIERROR WINAPI mciSendCommandA( MCIDEVICEID mciId, UINT uMsg, DWORD_PTR dwParam1, DWORD_PTR dwParam2)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mciSendCommandA\n");
return mciSendCommandA_orig( mciId, uMsg, dwParam1, dwParam2);
}
MCIERROR WINAPI mciSendCommandW( MCIDEVICEID mciId, UINT uMsg, DWORD_PTR dwParam1, DWORD_PTR dwParam2)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mciSendCommandW\n");
return mciSendCommandW_orig( mciId, uMsg, dwParam1, dwParam2);
}
MCIERROR WINAPI mciSendStringA( LPCSTR lpstrCommand, LPSTR lpstrReturnString, UINT uReturnLength, HWND hwndCallback)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mciSendStringA\n");
return mciSendStringA_orig( lpstrCommand, lpstrReturnString, uReturnLength, hwndCallback);
}
MCIERROR WINAPI mciSendStringW( LPCWSTR lpstrCommand, LPWSTR lpstrReturnString, UINT uReturnLength, HWND hwndCallback)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mciSendStringW\n");
return mciSendStringW_orig( lpstrCommand, lpstrReturnString, uReturnLength, hwndCallback);
}
@@ -1375,72 +1535,84 @@ extern "C" {
MCIDEVICEID WINAPI mciGetDeviceIDW( LPCWSTR pszDevice)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mciGetDeviceIDW\n");
return mciGetDeviceIDW_orig( pszDevice);
}
MCIDEVICEID WINAPI mciGetDeviceIDFromElementIDA( DWORD dwElementID, LPCSTR lpstrType )
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mciGetDeviceIDFromElementIDA\n");
return mciGetDeviceIDFromElementIDA_orig( dwElementID, lpstrType );
}
MCIDEVICEID WINAPI mciGetDeviceIDFromElementIDW( DWORD dwElementID, LPCWSTR lpstrType )
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mciGetDeviceIDFromElementIDW\n");
return mciGetDeviceIDFromElementIDW_orig( dwElementID, lpstrType );
}
DWORD_PTR WINAPI mciGetDriverData(UINT uDeviceID)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mciGetDriverData\n");
return mciGetDriverData_orig(uDeviceID);
}
BOOL WINAPI mciGetErrorStringA( MCIERROR mcierr, LPSTR pszText, UINT cchText)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mciGetErrorStringA\n");
return mciGetErrorStringA_orig( mcierr, pszText, cchText);
}
BOOL WINAPI mciGetErrorStringW( MCIERROR mcierr, LPWSTR pszText, UINT cchText)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mciGetErrorStringW\n");
return mciGetErrorStringW_orig( mcierr, pszText, cchText);
}
BOOL WINAPI mciSetDriverData(UINT uDeviceID, DWORD_PTR dwData)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mciSetDriverData_type\n");
return mciSetDriverData_orig( uDeviceID, dwData );
}
BOOL WINAPI mciSetYieldProc( MCIDEVICEID mciId, YIELDPROC fpYieldProc, DWORD dwYieldData)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mciSetYieldProc\n");
return mciSetYieldProc_orig(mciId, fpYieldProc, dwYieldData);
}
BOOL WINAPI mciFreeCommandResource(UINT uTable)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mciFreeCommandResource\n");
return mciFreeCommandResource_orig(uTable);
}
HTASK WINAPI mciGetCreatorTask( MCIDEVICEID mciId)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mciGetCreatorTask\n");
return mciGetCreatorTask_orig( mciId);
}
YIELDPROC WINAPI mciGetYieldProc( MCIDEVICEID mciId, LPDWORD pdwYieldData)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mciGetYieldProc\n");
return mciGetYieldProc_orig( mciId, pdwYieldData);
}
- UINT WINAPI mciLoadCommandResource(HINSTANCE hInstance, LPCWSTR lpResName, UINT uType)
+ UINT WINAPI mciLoadCommandResource(HANDLE hInstance, LPCWSTR lpResName, UINT uType)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mciLoadCommandResource");
return mciLoadCommandResource_orig(hInstance, lpResName, uType);
}
@@ -1448,6 +1620,7 @@ extern "C" {
BOOL WINAPI mciExecute(LPCSTR pszCommand)
{
+ ll_winmm_shim_initialize();
//OutputDebugString(L"mciExecute\n");
return mciExecute_orig(pszCommand);
}
diff --git a/indra/media_plugins/winmmshim/forwarding_api.h b/indra/media_plugins/winmmshim/forwarding_api.h
index 89a6b347f3..1418fc9e1d 100644..100755
--- a/indra/media_plugins/winmmshim/forwarding_api.h
+++ b/indra/media_plugins/winmmshim/forwarding_api.h
@@ -30,6 +30,7 @@
#include <mmsystem.h>
void init_function_pointers(HMODULE winmm_handle);
+void ll_winmm_shim_initialize();
typedef VOID (*LPTASKCALLBACK)(DWORD_PTR dwInst);
@@ -305,7 +306,7 @@ typedef MMRESULT (WINAPI *joySetCapture_type)( HWND hwnd, UINT uJoyID, UINT uPer
extern joySetCapture_type joySetCapture_orig;
typedef MMRESULT (WINAPI *joySetThreshold_type)( UINT uJoyID, UINT uThreshold);
extern joySetThreshold_type joySetThreshold_orig;
-typedef BOOL (WINAPI *mciDriverNotify_type)(HWND hwndCallback, UINT uDeviceID, UINT uStatus);
+typedef BOOL(WINAPI *mciDriverNotify_type)(HANDLE hwndCallback, MCIDEVICEID uDeviceID, UINT uStatus);
extern mciDriverNotify_type mciDriverNotify_orig;
typedef UINT (WINAPI *mciDriverYield_type)(UINT uDeviceID);
extern mciDriverYield_type mciDriverYield_orig;
@@ -383,7 +384,7 @@ typedef HTASK (WINAPI *mciGetCreatorTask_type)( MCIDEVICEID mciId);
extern mciGetCreatorTask_type mciGetCreatorTask_orig;
typedef YIELDPROC (WINAPI *mciGetYieldProc_type)( MCIDEVICEID mciId, LPDWORD pdwYieldData);
extern mciGetYieldProc_type mciGetYieldProc_orig;
-typedef UINT (WINAPI *mciLoadCommandResource_type)(HINSTANCE hInstance, LPCWSTR lpResName, UINT uType);
+typedef UINT (WINAPI *mciLoadCommandResource_type)(HANDLE hInstance, LPCWSTR lpResName, UINT uType);
extern mciLoadCommandResource_type mciLoadCommandResource_orig;
typedef BOOL (WINAPI *mciExecute_type)(LPCSTR pszCommand);
extern mciExecute_type mciExecute_orig;
diff --git a/indra/media_plugins/winmmshim/winmm.def b/indra/media_plugins/winmmshim/winmm.def
index c55a2845f8..c55a2845f8 100644..100755
--- a/indra/media_plugins/winmmshim/winmm.def
+++ b/indra/media_plugins/winmmshim/winmm.def
diff --git a/indra/media_plugins/winmmshim/winmm_shim.cpp b/indra/media_plugins/winmmshim/winmm_shim.cpp
index 9563a3b664..78f7a9b0da 100644..100755
--- a/indra/media_plugins/winmmshim/winmm_shim.cpp
+++ b/indra/media_plugins/winmmshim/winmm_shim.cpp
@@ -4,7 +4,7 @@
*
* $LicenseInfo:firstyear=2010&license=viewerlgpl$
* Second Life Viewer Source Code
- * Copyright (C) 2010, Linden Research, Inc.
+ * Copyright (C) 2010-2014, Linden Research, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -30,37 +30,53 @@
using std::wstring;
-static float sVolumeLevel = 1.f;
-static bool sMute = false;
+static float sVolumeLevel = 1.f; // Could be covered by critical section,
+static bool sMute = false; // not needed with atomicity and alignment.
+static CRITICAL_SECTION sCriticalSection;
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
- static bool initialized = false;
- // do this only once
+ if (ul_reason_for_call == DLL_PROCESS_ATTACH)
+ {
+ InitializeCriticalSection(&sCriticalSection);
+ }
+ return TRUE;
+}
+
+void ll_winmm_shim_initialize(){
+ static volatile bool initialized = false;
+
+ // do this only once using double-check locking
if (!initialized)
- { // bind to original winmm.dll
- TCHAR system_path[MAX_PATH];
- TCHAR dll_path[MAX_PATH];
- ::GetSystemDirectory(system_path, MAX_PATH);
-
- // grab winmm.dll from system path, where it should live
- wsprintf(dll_path, "%s\\winmm.dll", system_path);
- HMODULE winmm_handle = ::LoadLibrary(dll_path);
-
- if (winmm_handle != NULL)
- { // we have a dll, let's get out pointers!
- initialized = true;
- init_function_pointers(winmm_handle);
- return true;
+ {
+ EnterCriticalSection(&sCriticalSection);
+ if (!initialized)
+ { // bind to original winmm.dll
+ TCHAR system_path[MAX_PATH];
+ TCHAR dll_path[MAX_PATH];
+ ::GetSystemDirectory(system_path, MAX_PATH);
+
+ // grab winmm.dll from system path, where it should live
+ wsprintf(dll_path, "%s\\winmm.dll", system_path);
+ HMODULE winmm_handle = ::LoadLibrary(dll_path);
+
+ if (winmm_handle != NULL)
+ { // we have a dll, let's get out pointers!
+ init_function_pointers(winmm_handle);
+ ::OutputDebugStringA("WINMM_SHIM.DLL: real winmm.dll initialized successfully\n");
+ initialized = true; // Last thing after completing setup
+ }
+ else
+ {
+ // failed to initialize real winmm.dll
+ ::OutputDebugStringA("WINMM_SHIM.DLL: Failed to initialize real winmm.dll\n");
+ }
}
-
- // failed to initialize real winmm.dll
- return false;
+ LeaveCriticalSection(&sCriticalSection);
}
- return true;
}
@@ -75,10 +91,11 @@ extern "C"
int mBitsPerSample;
};
typedef std::map<HWAVEOUT, WaveOutFormat*> wave_out_map_t;
- static wave_out_map_t sWaveOuts;
+ static wave_out_map_t sWaveOuts; // Covered by sCriticalSection
MMRESULT WINAPI waveOutOpen( LPHWAVEOUT phwo, UINT uDeviceID, LPCWAVEFORMATEX pwfx, DWORD_PTR dwCallback, DWORD_PTR dwInstance, DWORD fdwOpen)
{
+ ll_winmm_shim_initialize();
if (pwfx->wFormatTag != WAVE_FORMAT_PCM
|| (pwfx->wBitsPerSample != 8 && pwfx->wBitsPerSample != 16))
{ // uncompressed 8 and 16 bit sound are the only types we support
@@ -90,24 +107,30 @@ extern "C"
&& ((fdwOpen & WAVE_FORMAT_QUERY) == 0)) // not just querying for format support
{ // remember the requested bits per sample, and associate with the given handle
WaveOutFormat* wave_outp = new WaveOutFormat(pwfx->wBitsPerSample);
+ EnterCriticalSection(&sCriticalSection);
sWaveOuts.insert(std::make_pair(*phwo, wave_outp));
+ LeaveCriticalSection(&sCriticalSection);
}
return result;
}
MMRESULT WINAPI waveOutClose( HWAVEOUT hwo)
{
+ ll_winmm_shim_initialize();
+ EnterCriticalSection(&sCriticalSection);
wave_out_map_t::iterator found_it = sWaveOuts.find(hwo);
if (found_it != sWaveOuts.end())
{ // forget what we know about this handle
delete found_it->second;
sWaveOuts.erase(found_it);
}
- return waveOutClose_orig( hwo);
+ LeaveCriticalSection(&sCriticalSection);
+ return waveOutClose_orig(hwo);
}
MMRESULT WINAPI waveOutWrite( HWAVEOUT hwo, LPWAVEHDR pwh, UINT cbwh)
{
+ ll_winmm_shim_initialize();
MMRESULT result = MMSYSERR_NOERROR;
if (sMute)
@@ -116,11 +139,19 @@ extern "C"
}
else if (sVolumeLevel != 1.f)
{ // need to apply volume level
+ int bits_per_sample(0);
+
+ EnterCriticalSection(&sCriticalSection);
wave_out_map_t::iterator found_it = sWaveOuts.find(hwo);
if (found_it != sWaveOuts.end())
{
- WaveOutFormat* formatp = found_it->second;
- switch (formatp->mBitsPerSample){
+ bits_per_sample = found_it->second->mBitsPerSample;
+ }
+ LeaveCriticalSection(&sCriticalSection);
+ if (bits_per_sample)
+ {
+ switch (bits_per_sample)
+ {
case 8:
{
char volume = (char)(sVolumeLevel * 127.f);