diff --git a/autobuild.xml b/autobuild.xml
index 59610b41e2..1d10e6bbee 100755
--- a/autobuild.xml
+++ b/autobuild.xml
@@ -2362,6 +2362,18 @@
name
windows
+ linux
+
version
2.2.3.315283
diff --git a/indra/cmake/LibVLCPlugin.cmake b/indra/cmake/LibVLCPlugin.cmake
index 0d2c46bac0..4472676fb4 100644
--- a/indra/cmake/LibVLCPlugin.cmake
+++ b/indra/cmake/LibVLCPlugin.cmake
@@ -19,4 +19,9 @@ if (WINDOWS)
)
elseif (DARWIN)
elseif (LINUX)
+ # Specify a full path to make sure we get a static link
+ set(VLC_PLUGIN_LIBRARIES
+ ${LIBS_PREBUILT_DIR}/lib/libvlc.a
+ ${LIBS_PREBUILT_DIR}/lib/libvlccore.a
+ )
endif (WINDOWS)
diff --git a/indra/media_plugins/CMakeLists.txt b/indra/media_plugins/CMakeLists.txt
index 2f6ac4d4ff..1eac5df2e7 100644
--- a/indra/media_plugins/CMakeLists.txt
+++ b/indra/media_plugins/CMakeLists.txt
@@ -4,6 +4,7 @@ add_subdirectory(base)
if (LINUX)
add_subdirectory(gstreamer010)
add_subdirectory(cef)
+ add_subdirectory(libvlc)
endif (LINUX)
if (DARWIN)
diff --git a/indra/media_plugins/cef/media_plugin_cef.cpp b/indra/media_plugins/cef/media_plugin_cef.cpp
index 42378d6bbf..0b2988244c 100644
--- a/indra/media_plugins/cef/media_plugin_cef.cpp
+++ b/indra/media_plugins/cef/media_plugin_cef.cpp
@@ -610,6 +610,8 @@ void MediaPluginCEF::receiveMessage(const char* message_string)
S32 x = message_in.getValueS32("x");
S32 y = message_in.getValueS32("y");
+ y = mHeight - y;
+
// only even send left mouse button events to LLCEFLib
// (partially prompted by crash in OS X CEF when sending right button events)
// we catch the right click in viewer and display our own context menu anyway
diff --git a/indra/media_plugins/libvlc/media_plugin_libvlc.cpp b/indra/media_plugins/libvlc/media_plugin_libvlc.cpp
index 43d4e95243..3852d10c44 100644
--- a/indra/media_plugins/libvlc/media_plugin_libvlc.cpp
+++ b/indra/media_plugins/libvlc/media_plugin_libvlc.cpp
@@ -330,45 +330,45 @@ void MediaPluginLibVLC::receiveMessage( const char* message_string )
playMedia();
}
}
- else
- if (message_class == LLPLUGIN_MESSAGE_CLASS_MEDIA_TIME)
- {
- if (message_name == "stop")
- {
- if (gLibVLCMediaPlayer)
- {
- libvlc_media_player_stop(gLibVLCMediaPlayer);
- }
- }
- else if (message_name == "start")
- {
- if (gLibVLCMediaPlayer)
- {
- libvlc_media_player_play(gLibVLCMediaPlayer);
- }
- }
- else if (message_name == "pause")
- {
- if (gLibVLCMediaPlayer)
- {
- libvlc_media_player_pause(gLibVLCMediaPlayer);
- }
- }
- else if (message_name == "seek")
- {
- }
- else if (message_name == "set_loop")
- {
- }
- else if (message_name == "set_volume")
- {
- if (gLibVLCMediaPlayer)
- {
- F64 volume = message_in.getValueReal("volume");
- libvlc_audio_set_volume(gLibVLCMediaPlayer, (int)(volume * 100));
- }
- }
- }
+ else
+ if (message_class == LLPLUGIN_MESSAGE_CLASS_MEDIA_TIME)
+ {
+ if (message_name == "stop")
+ {
+ if (gLibVLCMediaPlayer)
+ {
+ libvlc_media_player_stop(gLibVLCMediaPlayer);
+ }
+ }
+ else if (message_name == "start")
+ {
+ if (gLibVLCMediaPlayer)
+ {
+ libvlc_media_player_play(gLibVLCMediaPlayer);
+ }
+ }
+ else if (message_name == "pause")
+ {
+ if (gLibVLCMediaPlayer)
+ {
+ libvlc_media_player_pause(gLibVLCMediaPlayer);
+ }
+ }
+ else if (message_name == "seek")
+ {
+ }
+ else if (message_name == "set_loop")
+ {
+ }
+ else if (message_name == "set_volume")
+ {
+ if (gLibVLCMediaPlayer)
+ {
+ F64 volume = message_in.getValueReal("volume");
+ libvlc_audio_set_volume(gLibVLCMediaPlayer, (int)(volume * 100));
+ }
+ }
+ }
}
}
diff --git a/indra/media_plugins/quicktime/media_plugin_quicktime.cpp b/indra/media_plugins/quicktime/media_plugin_quicktime.cpp
index ff1ed8bfbc..6d4c6ca43d 100755
--- a/indra/media_plugins/quicktime/media_plugin_quicktime.cpp
+++ b/indra/media_plugins/quicktime/media_plugin_quicktime.cpp
@@ -311,7 +311,9 @@ private:
MatrixRecord transform;
SetIdentityMatrix( &transform ); // transforms are additive so start from identify matrix
double scaleX = (double) mWidth / mNaturalWidth;
- double scaleY = -1.0 * (double) mHeight / mNaturalHeight;
+
+ // 2016-05-31 CP remove local flip (via -1.0) since texture coods for media on a prim are now flipped for VLC/CEF
+ double scaleY = 1.0 * (double) mHeight / mNaturalHeight;
double centerX = mWidth / 2.0;
double centerY = mHeight / 2.0;
ScaleMatrix( &transform, X2Fix( scaleX ), X2Fix( scaleY ), X2Fix( centerX ), X2Fix( centerY ) );
@@ -919,7 +921,10 @@ void MediaPluginQuickTime::receiveMessage(const char *message_string)
#endif
message.setValueS32("depth", mDepth);
message.setValueU32("internalformat", GL_RGB);
- message.setValueBoolean("coords_opengl", true); // true == use OpenGL-style coordinates, false == (0,0) is upper left.
+
+ // note this apparently only has an effect when media is opened in 2D browser.
+ // see https://jira.secondlife.com/browse/BUG-18252 - media flipped in 2D so flipping it back.
+ message.setValueBoolean("coords_opengl", false); // true == use OpenGL-style coordinates, false == (0,0) is upper left.
message.setValueBoolean("allow_downsample", true);
sendMessage(message);
}
diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index b397ced15a..e3b83613a8 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -2339,6 +2339,7 @@ if (NOT ENABLE_MEDIA_PLUGINS)
SLPlugin
media_plugin_cef
media_plugin_gstreamer010
+ media_plugin_libvlc
llcommon
)
else (NOT ENABLE_MEDIA_PLUGINS)
diff --git a/indra/newview/llmediactrl.cpp b/indra/newview/llmediactrl.cpp
index 6f89217474..e721bed198 100644
--- a/indra/newview/llmediactrl.cpp
+++ b/indra/newview/llmediactrl.cpp
@@ -952,7 +952,7 @@ void LLMediaCtrl::convertInputCoords(S32& x, S32& y)
}
x = ll_round((F32)x * LLUI::getScaleFactor().mV[VX]);
- if ( ! coords_opengl )
+ if ( coords_opengl )
{
y = ll_round((F32)(y) * LLUI::getScaleFactor().mV[VY]);
}
diff --git a/indra/newview/llsurfacepatch.cpp b/indra/newview/llsurfacepatch.cpp
index f63ec22349..c956b58c75 100644
--- a/indra/newview/llsurfacepatch.cpp
+++ b/indra/newview/llsurfacepatch.cpp
@@ -231,8 +231,8 @@ void LLSurfacePatch::eval(const U32 x, const U32 y, const U32 stride, LLVector3
const F32 xyScaleInv = (1.f / xyScale)*(0.2222222222f);
F32 vec[3] = {
- (F32)fmod((F32)(mOriginGlobal.mdV[0] + x)*xyScaleInv, 256.f), // Added (F32) for proper array initialization
- (F32)fmod((F32)(mOriginGlobal.mdV[1] + y)*xyScaleInv, 256.f), // Added (F32) for proper array initialization
+ (F32)fmod((F32)(mOriginGlobal.mdV[0] + x)*xyScaleInv, 256.f),
+ (F32)fmod((F32)(mOriginGlobal.mdV[1] + y)*xyScaleInv, 256.f),
0.f
};
F32 rand_val = llclamp(noise2(vec)* 0.75f + 0.5f, 0.f, 1.f);
diff --git a/indra/newview/llworld.cpp b/indra/newview/llworld.cpp
index 72174b14df..5d6bc82951 100644
--- a/indra/newview/llworld.cpp
+++ b/indra/newview/llworld.cpp
@@ -1426,8 +1426,8 @@ void LLWorld::updateWaterObjects()
S32 add_boundary[4] = {
// Fix water height on regions larger than 2048x2048
- //512 - (max_x - region_x),
- //512 - (max_y - region_y),
+ //(S32)(512 - (max_x - region_x)),
+ //(S32)(512 - (max_y - region_y)),
(S32)(512 - (max_x - (rwidth - 256) - region_x)),
(S32)(512 - (max_y - (rwidth - 256) - region_y)),
(S32)(512 - (region_x - min_x)),
diff --git a/indra/newview/skins/default/xui/en/mime_types.xml b/indra/newview/skins/default/xui/en/mime_types.xml
index 2867204318..c27fac6731 100644
--- a/indra/newview/skins/default/xui/en/mime_types.xml
+++ b/indra/newview/skins/default/xui/en/mime_types.xml
@@ -174,7 +174,7 @@
audio
- media_plugin_cef
+ media_plugin_libvlc
@@ -317,7 +317,7 @@
audio
- media_plugin_cef
+ media_plugin_libvlc
@@ -328,7 +328,7 @@
audio
- media_plugin_cef
+ media_plugin_libvlc
@@ -339,7 +339,7 @@
audio
- media_plugin_cef
+ media_plugin_libvlc
diff --git a/indra/newview/skins/default/xui/en/mime_types_linux.xml b/indra/newview/skins/default/xui/en/mime_types_linux.xml
index 22a0024874..a130d2b0e9 100644
--- a/indra/newview/skins/default/xui/en/mime_types_linux.xml
+++ b/indra/newview/skins/default/xui/en/mime_types_linux.xml
@@ -130,7 +130,7 @@
movie
- media_plugin_gstreamer
+ media_plugin_libvlc
@@ -163,7 +163,7 @@
audio
- media_plugin_gstreamer
+ media_plugin_libvlc
@@ -174,7 +174,7 @@
movie
- media_plugin_gstreamer
+ media_plugin_libvlc
@@ -196,7 +196,7 @@
movie
- media_plugin_gstreamer
+ media_plugin_libvlc
@@ -218,7 +218,7 @@
audio
- media_plugin_gstreamer
+ media_plugin_libvlc
@@ -295,7 +295,7 @@
audio
- media_plugin_gstreamer
+ media_plugin_libvlc
@@ -306,7 +306,7 @@
audio
- media_plugin_gstreamer
+ media_plugin_libvlc
@@ -317,7 +317,7 @@
audio
- media_plugin_gstreamer
+ media_plugin_libvlc
@@ -328,7 +328,7 @@
audio
- media_plugin_gstreamer
+ media_plugin_libvlc
@@ -438,7 +438,7 @@
movie
- media_plugin_gstreamer
+ media_plugin_libvlc
@@ -449,7 +449,7 @@
movie
- media_plugin_gstreamer
+ media_plugin_libvlc
@@ -460,7 +460,7 @@
movie
- media_plugin_gstreamer
+ media_plugin_libvlc
@@ -471,7 +471,7 @@
movie
- media_plugin_gstreamer
+ media_plugin_libvlc
@@ -482,7 +482,7 @@
movie
- media_plugin_gstreamer
+ media_plugin_libvlc
@@ -493,7 +493,7 @@
movie
- media_plugin_gstreamer
+ media_plugin_libvlc
diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py
index 32eccfadee..17be371705 100755
--- a/indra/newview/viewer_manifest.py
+++ b/indra/newview/viewer_manifest.py
@@ -1344,8 +1344,18 @@ class LinuxManifest(ViewerManifest):
if self.prefix(src="", dst="bin/llplugin"):
self.path("../media_plugins/gstreamer010/libmedia_plugin_gstreamer010.so", "libmedia_plugin_gstreamer.so")
self.path( "../media_plugins/cef/libmedia_plugin_cef.so", "libmedia_plugin_cef.so" )
+ self.path("../media_plugins/libvlc/libmedia_plugin_libvlc.so", "libmedia_plugin_libvlc.so")
self.end_prefix("bin/llplugin")
+ if self.prefix(src=os.path.join(os.pardir, 'packages', 'lib', 'vlc', 'plugins'), dst="bin/llplugin/vlc/plugins"):
+ self.path( "plugins.dat" )
+ self.path( "*/*.so" )
+ self.end_prefix()
+
+ if self.prefix(src=os.path.join(os.pardir, 'packages', 'lib' ), dst="lib"):
+ self.path( "libvlc*.so*" )
+ self.end_prefix()
+
# CEF files
if self.prefix(src=os.path.join(os.pardir, 'packages', 'lib', 'release'), dst="lib"):
self.path( "libcef.so" )