diff options
| author | callum <none@none> | 2009-10-30 10:48:10 -0700 | 
|---|---|---|
| committer | callum <none@none> | 2009-10-30 10:48:10 -0700 | 
| commit | 91b54876b7422422326646e5b4581631883f1e69 (patch) | |
| tree | 9eaf2279417d85e3d4ed8c6f085d2ddfb3b21a58 | |
| parent | 65b74c6a5e0da64e3c30abf18e875fa4191891d0 (diff) | |
Adds an example plugin and corresponding changes to
LLMediaPluginTest test app. We do not copy over the
example plugin to the Second Life client plugin dir.
| -rw-r--r-- | indra/cmake/ExamplePlugin.cmake | 16 | ||||
| -rw-r--r-- | indra/media_plugins/CMakeLists.txt | 2 | ||||
| -rw-r--r-- | indra/media_plugins/example/CMakeLists.txt | 74 | ||||
| -rw-r--r-- | indra/media_plugins/example/media_plugin_example.cpp | 488 | ||||
| -rw-r--r-- | indra/test_apps/llplugintest/CMakeLists.txt | 7 | ||||
| -rw-r--r-- | indra/test_apps/llplugintest/bookmarks.txt | 1 | ||||
| -rw-r--r-- | indra/test_apps/llplugintest/llmediaplugintest.cpp | 22 | 
7 files changed, 600 insertions, 10 deletions
| diff --git a/indra/cmake/ExamplePlugin.cmake b/indra/cmake/ExamplePlugin.cmake new file mode 100644 index 0000000000..599787ad21 --- /dev/null +++ b/indra/cmake/ExamplePlugin.cmake @@ -0,0 +1,16 @@ +# -*- cmake -*- +include(Linking) +include(Prebuilt) + +if (STANDALONE) +    set(EXAMPLEPLUGIN OFF CACHE BOOL +        "EXAMPLEPLUGIN support for the llplugin/llmedia test apps.") +else (STANDALONE) +    set(EXAMPLEPLUGIN ON CACHE BOOL +        "EXAMPLEPLUGIN support for the llplugin/llmedia test apps.") +endif (STANDALONE) + +if (WINDOWS) +elseif (DARWIN) +elseif (LINUX) +endif (WINDOWS) diff --git a/indra/media_plugins/CMakeLists.txt b/indra/media_plugins/CMakeLists.txt index d35afd8cbd..cc03d9cb72 100644 --- a/indra/media_plugins/CMakeLists.txt +++ b/indra/media_plugins/CMakeLists.txt @@ -9,3 +9,5 @@ add_subdirectory(gstreamer010)  if (WINDOWS OR DARWIN)      add_subdirectory(quicktime)  endif (WINDOWS OR DARWIN) + +add_subdirectory(example) diff --git a/indra/media_plugins/example/CMakeLists.txt b/indra/media_plugins/example/CMakeLists.txt new file mode 100644 index 0000000000..4d82f2747c --- /dev/null +++ b/indra/media_plugins/example/CMakeLists.txt @@ -0,0 +1,74 @@ +# -*- cmake -*- + +project(media_plugin_example) + +include(00-Common) +include(LLCommon) +include(LLImage) +include(LLPlugin) +include(LLMath) +include(LLRender) +include(LLWindow) +include(Linking) +include(PluginAPI) +include(MediaPluginBase) +include(FindOpenGL) + +include(ExamplePlugin) + +include_directories( +    ${LLPLUGIN_INCLUDE_DIRS} +    ${MEDIA_PLUGIN_BASE_INCLUDE_DIRS} +    ${LLCOMMON_INCLUDE_DIRS} +    ${LLMATH_INCLUDE_DIRS} +    ${LLIMAGE_INCLUDE_DIRS} +    ${LLRENDER_INCLUDE_DIRS} +    ${LLWINDOW_INCLUDE_DIRS} +) + + +### media_plugin_example + +set(media_plugin_example_SOURCE_FILES +    media_plugin_example.cpp +    ) + +add_library(media_plugin_example +    SHARED +    ${media_plugin_example_SOURCE_FILES} +) + +target_link_libraries(media_plugin_example +  ${LLPLUGIN_LIBRARIES} +  ${MEDIA_PLUGIN_BASE_LIBRARIES} +  ${LLCOMMON_LIBRARIES} +  ${EXAMPLE_PLUGIN_LIBRARIES} +  ${PLUGIN_API_WINDOWS_LIBRARIES} +) + +add_dependencies(media_plugin_example +  ${LLPLUGIN_LIBRARIES} +  ${MEDIA_PLUGIN_BASE_LIBRARIES} +  ${LLCOMMON_LIBRARIES} +) + +if (WINDOWS) +  set_target_properties( +    media_plugin_example +    PROPERTIES +    LINK_FLAGS "/MANIFEST:NO" +    ) +endif (WINDOWS) + +if (DARWIN) +  # Don't prepend 'lib' to the executable name, and don't embed a full path in the library's install name +  set_target_properties( +    media_plugin_example +    PROPERTIES +    PREFIX "" +    BUILD_WITH_INSTALL_RPATH 1 +    INSTALL_NAME_DIR "@executable_path" +    LINK_FLAGS "-exported_symbols_list ${CMAKE_CURRENT_SOURCE_DIR}/../base/media_plugin_base.exp" +  ) + +endif (DARWIN)
\ No newline at end of file diff --git a/indra/media_plugins/example/media_plugin_example.cpp b/indra/media_plugins/example/media_plugin_example.cpp new file mode 100644 index 0000000000..e873a0d034 --- /dev/null +++ b/indra/media_plugins/example/media_plugin_example.cpp @@ -0,0 +1,488 @@ +/** + * @file media_plugin_example.cpp + * @brief Example plugin for LLMedia API plugin system + * + * $LicenseInfo:firstyear=2008&license=viewergpl$ + * + * Copyright (c) 2009, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab.  Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlife.com/developers/opensource/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at http://secondlife.com/developers/opensource/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + * $/LicenseInfo$ + */ + +#include "linden_common.h" + +#include "llgl.h" +#include "llplugininstance.h" +#include "llpluginmessage.h" +#include "llpluginmessageclasses.h" +#include "media_plugin_base.h" + +#include <time.h> + +//////////////////////////////////////////////////////////////////////////////// +// +class MediaPluginExample : +		public MediaPluginBase +{ +	public: +		MediaPluginExample( LLPluginInstance::sendMessageFunction host_send_func, void *host_user_data ); +		~MediaPluginExample(); + +		/*virtual*/ void receiveMessage( const char* message_string ); + +	private: +		bool init(); +		void update( int milliseconds ); +		void write_pixel( int x, int y, unsigned char r, unsigned char g, unsigned char b ); +		bool mFirstTime; + +		time_t mLastUpdateTime; +		enum Constants { ENumObjects = 10 }; +		unsigned char* mBackgroundPixels; +		int mColorR[ ENumObjects ]; +		int mColorG[ ENumObjects ]; +		int mColorB[ ENumObjects ]; +		int mXpos[ ENumObjects ]; +		int mYpos[ ENumObjects ]; +		int mXInc[ ENumObjects ]; +		int mYInc[ ENumObjects ]; +		int mBlockSize[ ENumObjects ]; +		bool mMouseButtonDown; +		bool mStopAction; +}; + +//////////////////////////////////////////////////////////////////////////////// +// +MediaPluginExample::MediaPluginExample( LLPluginInstance::sendMessageFunction host_send_func, void *host_user_data ) : +	MediaPluginBase( host_send_func, host_user_data ) +{ +	mFirstTime = true; +	mWidth = 0; +	mHeight = 0; +	mDepth = 4; +	mPixels = 0; +	mMouseButtonDown = false; +	mStopAction = false; +	mLastUpdateTime = 0; +} + +//////////////////////////////////////////////////////////////////////////////// +// +MediaPluginExample::~MediaPluginExample() +{ +} + +//////////////////////////////////////////////////////////////////////////////// +// +void MediaPluginExample::receiveMessage( const char* message_string ) +{ +	LLPluginMessage message_in; + +	if ( message_in.parse( message_string ) >= 0 ) +	{ +		std::string message_class = message_in.getClass(); +		std::string message_name = message_in.getName(); + +		if ( message_class == LLPLUGIN_MESSAGE_CLASS_BASE ) +		{ +			if ( message_name == "init" ) +			{ +				LLPluginMessage message( "base", "init_response" ); +				LLSD versions = LLSD::emptyMap(); +				versions[ LLPLUGIN_MESSAGE_CLASS_BASE ] = LLPLUGIN_MESSAGE_CLASS_BASE_VERSION; +				versions[ LLPLUGIN_MESSAGE_CLASS_MEDIA ] = LLPLUGIN_MESSAGE_CLASS_MEDIA_VERSION; +				versions[ LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER ] = LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER_VERSION; +				message.setValueLLSD( "versions", versions ); + +				std::string plugin_version = "Example media plugin, Example Version 1.0.0.0"; +				message.setValue( "plugin_version", plugin_version ); +				sendMessage( message ); + +				// Plugin gets to decide the texture parameters to use. +				message.setMessage( LLPLUGIN_MESSAGE_CLASS_MEDIA, "texture_params" ); +				message.setValueS32( "default_width", mWidth ); +				message.setValueS32( "default_height", mHeight ); +				message.setValueS32( "depth", mDepth ); +				message.setValueU32( "internalformat", GL_RGBA ); +				message.setValueU32( "format", GL_RGBA ); +				message.setValueU32( "type", GL_UNSIGNED_BYTE ); +				message.setValueBoolean( "coords_opengl", false ); +				sendMessage( message ); +			} +			else +			if ( message_name == "idle" ) +			{ +				// no response is necessary here. +				F64 time = message_in.getValueReal( "time" ); + +				// Convert time to milliseconds for update() +				update( time ); +			} +			else +			if ( message_name == "cleanup" ) +			{ +				// clean up here +			} +			else +			if ( message_name == "shm_added" ) +			{ +				SharedSegmentInfo info; +				info.mAddress = message_in.getValuePointer( "address" ); +				info.mSize = ( size_t )message_in.getValueS32( "size" ); +				std::string name = message_in.getValue( "name" ); + +				mSharedSegments.insert( SharedSegmentMap::value_type( name, info ) ); + +			} +			else +			if ( message_name == "shm_remove" ) +			{ +				std::string name = message_in.getValue( "name" ); + +				SharedSegmentMap::iterator iter = mSharedSegments.find( name ); +				if( iter != mSharedSegments.end() ) +				{ +					if ( mPixels == iter->second.mAddress ) +					{ +						// This is the currently active pixel buffer. +						// Make sure we stop drawing to it. +						mPixels = NULL; +						mTextureSegmentName.clear(); +					}; +					mSharedSegments.erase( iter ); +				} +				else +				{ +					//std::cerr << "MediaPluginExample::receiveMessage: unknown shared memory region!" << std::endl; +				}; + +				// Send the response so it can be cleaned up. +				LLPluginMessage message( "base", "shm_remove_response" ); +				message.setValue( "name", name ); +				sendMessage( message ); +			} +			else +			{ +				//std::cerr << "MediaPluginExample::receiveMessage: unknown base message: " << message_name << std::endl; +			}; +		} +		else +		if ( message_class == LLPLUGIN_MESSAGE_CLASS_MEDIA ) +		{ +			if ( message_name == "size_change" ) +			{ +				std::string name = message_in.getValue( "name" ); +				S32 width = message_in.getValueS32( "width" ); +				S32 height = message_in.getValueS32( "height" ); +				S32 texture_width = message_in.getValueS32( "texture_width" ); +				S32 texture_height = message_in.getValueS32( "texture_height" ); + +				if ( ! name.empty() ) +				{ +					// Find the shared memory region with this name +					SharedSegmentMap::iterator iter = mSharedSegments.find( name ); +					if ( iter != mSharedSegments.end() ) +					{ +						mPixels = ( unsigned char* )iter->second.mAddress; +						mWidth = width; +						mHeight = height; + +						mTextureWidth = texture_width; +						mTextureHeight = texture_height; + +						init(); +					}; +				}; + +				LLPluginMessage message( LLPLUGIN_MESSAGE_CLASS_MEDIA, "size_change_response" ); +				message.setValue( "name", name ); +				message.setValueS32( "width", width ); +				message.setValueS32( "height", height ); +				message.setValueS32( "texture_width", texture_width ); +				message.setValueS32( "texture_height", texture_height ); +				sendMessage( message ); +			} +			else +			if ( message_name == "load_uri" ) +			{ +				std::string uri = message_in.getValue( "uri" ); +				if ( ! uri.empty() ) +				{ +				}; +			} +			else +			if ( message_name == "mouse_event" ) +			{ +				std::string event = message_in.getValue( "event" ); +				S32 button = message_in.getValueS32( "button" ); + +				// left mouse button +				if ( button == 0 ) +				{ +					int mouse_x = message_in.getValueS32( "x" ); +					int mouse_y = message_in.getValueS32( "y" ); +					std::string modifiers = message_in.getValue( "modifiers" ); + +					if ( event == "move" ) +					{ +						if ( mMouseButtonDown ) +							write_pixel( mouse_x, mouse_y, rand() % 0x80 + 0x80, rand() % 0x80 + 0x80, rand() % 0x80 + 0x80 ); +					} +					else +					if ( event == "down" ) +					{ +						mMouseButtonDown = true; +					} +					else +					if ( event == "up" ) +					{ +						mMouseButtonDown = false; +					} +					else +					if ( event == "double_click" ) +					{ +					}; +				}; +			} +			else +			if ( message_name == "key_event" ) +			{ +				std::string event = message_in.getValue( "event" ); +				S32 key = message_in.getValueS32( "key" ); +				std::string modifiers = message_in.getValue( "modifiers" ); + +				if ( event == "down" ) +				{ +					if ( key == ' ') +					{ +						mLastUpdateTime = 0; +						update( 0 ); +					}; +				}; +			} +			else +			{ +				//std::cerr << "MediaPluginExample::receiveMessage: unknown media message: " << message_string << std::endl; +			}; +		} +		else +		if ( message_class == LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER ) +		{ +			if ( message_name == "browse_reload" ) +			{ +				mLastUpdateTime = 0; +				mFirstTime = true; +				mStopAction = false; +				update( 0 ); +			} +			else +			if ( message_name == "browse_stop" ) +			{ +				for( int n = 0; n < ENumObjects; ++n ) +					mXInc[ n ] = mYInc[ n ] = 0; + +				mStopAction = true; +				update( 0 ); +			} +			else +			{ +				//std::cerr << "MediaPluginExample::receiveMessage: unknown media_browser message: " << message_string << std::endl; +			}; +		} +		else +		{ +			//std::cerr << "MediaPluginExample::receiveMessage: unknown message class: " << message_class << std::endl; +		}; +	}; +} + +//////////////////////////////////////////////////////////////////////////////// +// +void MediaPluginExample::write_pixel( int x, int y, unsigned char r, unsigned char g, unsigned char b ) +{ +	// make sure we don't write outside the buffer +	if ( ( x < 0 ) || ( x >= mWidth ) || ( y < 0 ) || ( y >= mHeight ) ) +		return; +		 +	if ( mBackgroundPixels != NULL ) +	{ +		unsigned char *pixel = mBackgroundPixels; +		pixel += y * mWidth * mDepth; +		pixel += ( x * mDepth ); +		pixel[ 0 ] = b; +		pixel[ 1 ] = g; +		pixel[ 2 ] = r; + +		setDirty( x, y, x + 1, y + 1 ); +	}; +} + +//////////////////////////////////////////////////////////////////////////////// +// +void MediaPluginExample::update( int milliseconds ) +{ +	if ( mWidth < 1 || mWidth > 2048 || mHeight < 1 || mHeight > 2048 ) +		return; + +	if ( mPixels == 0 ) +			return; + +	if ( mFirstTime ) +	{ +		for( int n = 0; n < ENumObjects; ++n ) +		{ +			mXpos[ n ] = ( mWidth / 2 ) + rand() % ( mWidth / 16 ) - ( mWidth / 32 ); +			mYpos[ n ] = ( mHeight / 2 ) + rand() % ( mHeight / 16 ) - ( mHeight / 32 ); + +			mColorR[ n ] = rand() % 0x60 + 0x60; +			mColorG[ n ] = rand() % 0x60 + 0x60; +			mColorB[ n ] = rand() % 0x60 + 0x60; + +			mXInc[ n ] = 0; +			while ( mXInc[ n ] == 0 ) +				mXInc[ n ] = rand() % 7 - 3; + +			mYInc[ n ] = 0; +			while ( mYInc[ n ] == 0 ) +				mYInc[ n ] = rand() % 9 - 4; + +			mBlockSize[ n ] = rand() % 0x30 + 0x10; +		}; + +		delete [] mBackgroundPixels; +				 +		mBackgroundPixels = new unsigned char[ mWidth * mHeight * mDepth ]; + +		mFirstTime = false; +	}; + +	if ( mStopAction ) +		return; + +	if ( time( NULL ) > mLastUpdateTime + 3 ) +	{ +		const int num_squares = rand() % 20 + 4; +		int sqr1_r = rand() % 0x80 + 0x20; +		int sqr1_g = rand() % 0x80 + 0x20; +		int sqr1_b = rand() % 0x80 + 0x20; +		int sqr2_r = rand() % 0x80 + 0x20; +		int sqr2_g = rand() % 0x80 + 0x20; +		int sqr2_b = rand() % 0x80 + 0x20; + +		for ( int y1 = 0; y1 < num_squares; ++y1 ) +		{ +			for ( int x1 = 0; x1 < num_squares; ++x1 ) +			{ +				int px_start = mWidth * x1 / num_squares; +				int px_end = ( mWidth * ( x1 + 1 ) ) / num_squares; +				int py_start = mHeight * y1 / num_squares; +				int py_end = ( mHeight * ( y1 + 1 ) ) / num_squares; + +				for( int y2 = py_start; y2 < py_end; ++y2 ) +				{ +					for( int x2 = px_start; x2 < px_end; ++x2 ) +					{ +						int rowspan = mWidth * mDepth; + +						if ( ( y1 % 2 ) ^ ( x1 % 2 ) ) +						{ +							mBackgroundPixels[ y2 * rowspan + x2 * mDepth + 0 ] = sqr1_r; +							mBackgroundPixels[ y2 * rowspan + x2 * mDepth + 1 ] = sqr1_g; +							mBackgroundPixels[ y2 * rowspan + x2 * mDepth + 2 ] = sqr1_b; +						} +						else +						{ +							mBackgroundPixels[ y2 * rowspan + x2 * mDepth + 0 ] = sqr2_r; +							mBackgroundPixels[ y2 * rowspan + x2 * mDepth + 1 ] = sqr2_g; +							mBackgroundPixels[ y2 * rowspan + x2 * mDepth + 2 ] = sqr2_b; +						}; +					}; +				}; +			}; +		}; + +		time( &mLastUpdateTime ); +	}; + +	memcpy( mPixels, mBackgroundPixels, mWidth * mHeight * mDepth ); + +	for( int n = 0; n < ENumObjects; ++n ) +	{ +		if ( rand() % 50 == 0 ) +		{ +				mXInc[ n ] = 0; +				while ( mXInc[ n ] == 0 ) +					mXInc[ n ] = rand() % 7 - 3; + +				mYInc[ n ] = 0; +				while ( mYInc[ n ] == 0 ) +					mYInc[ n ] = rand() % 9 - 4; +		}; + +		if ( mXpos[ n ] + mXInc[ n ] < 0 || mXpos[ n ] + mXInc[ n ] >= mWidth - mBlockSize[ n ] ) +			mXInc[ n ] =- mXInc[ n ]; + +		if ( mYpos[ n ] + mYInc[ n ] < 0 || mYpos[ n ] + mYInc[ n ] >= mHeight - mBlockSize[ n ] ) +			mYInc[ n ] =- mYInc[ n ]; + +		mXpos[ n ] += mXInc[ n ]; +		mYpos[ n ] += mYInc[ n ]; + +		for( int y = 0; y < mBlockSize[ n ]; ++y ) +		{ +			for( int x = 0; x < mBlockSize[ n ]; ++x ) +			{ +				mPixels[ ( mXpos[ n ] + x ) * mDepth + ( mYpos[ n ] + y ) * mDepth * mWidth + 0 ] = mColorR[ n ]; +				mPixels[ ( mXpos[ n ] + x ) * mDepth + ( mYpos[ n ] + y ) * mDepth * mWidth + 1 ] = mColorG[ n ]; +				mPixels[ ( mXpos[ n ] + x ) * mDepth + ( mYpos[ n ] + y ) * mDepth * mWidth + 2 ] = mColorB[ n ]; +			}; +		}; +	}; + +	setDirty( 0, 0, mWidth, mHeight ); +}; + +//////////////////////////////////////////////////////////////////////////////// +// +bool MediaPluginExample::init() +{ +	LLPluginMessage message( LLPLUGIN_MESSAGE_CLASS_MEDIA, "name_text" ); +	message.setValue( "name", "Example Plugin" ); +	sendMessage( message ); + +	return true; +}; + +//////////////////////////////////////////////////////////////////////////////// +// +int init_media_plugin( LLPluginInstance::sendMessageFunction host_send_func, +						void* host_user_data, +						LLPluginInstance::sendMessageFunction *plugin_send_func, +						void **plugin_user_data ) +{ +	MediaPluginExample* self = new MediaPluginExample( host_send_func, host_user_data ); +	*plugin_send_func = MediaPluginExample::staticReceiveMessage; +	*plugin_user_data = ( void* )self; + +	return 0; +} diff --git a/indra/test_apps/llplugintest/CMakeLists.txt b/indra/test_apps/llplugintest/CMakeLists.txt index 88c4ba8ad9..53b981cccd 100644 --- a/indra/test_apps/llplugintest/CMakeLists.txt +++ b/indra/test_apps/llplugintest/CMakeLists.txt @@ -293,6 +293,7 @@ add_dependencies(llmediaplugintest    SLPlugin    media_plugin_quicktime    media_plugin_webkit +  media_plugin_example    ${LLPLUGIN_LIBRARIES}    ${LLMESSAGE_LIBRARIES}    ${LLCOMMON_LIBRARIES} @@ -369,6 +370,12 @@ if (DARWIN OR WINDOWS)      DEPENDS ${BUILT_QUICKTIME_PLUGIN}    ) +  get_target_property(BUILT_EXAMPLE_PLUGIN media_plugin_example LOCATION) +  add_custom_command(TARGET llmediaplugintest POST_BUILD +    COMMAND ${CMAKE_COMMAND} -E copy ${BUILT_EXAMPLE_PLUGIN}  ${PLUGINS_DESTINATION_DIR} +    DEPENDS ${BUILT_EXAMPLE_PLUGIN} +  ) +      # copy over bookmarks file if llmediaplugintest gets built    get_target_property(BUILT_LLMEDIAPLUGINTEST llmediaplugintest LOCATION)    add_custom_command(TARGET llmediaplugintest POST_BUILD diff --git a/indra/test_apps/llplugintest/bookmarks.txt b/indra/test_apps/llplugintest/bookmarks.txt index ef34167b29..b8b83df386 100644 --- a/indra/test_apps/llplugintest/bookmarks.txt +++ b/indra/test_apps/llplugintest/bookmarks.txt @@ -34,3 +34,4 @@  (QT) Movie - The Informers,http://movies.apple.com/movies/independent/theinformers/theinformers_h.320.mov  (QT) Animated GIF,http://upload.wikimedia.org/wikipedia/commons/4/44/Optical.greysquares.arp-animated.gif  (QT) Apple Text Descriptors,http://ubrowser.com/tmp/apple_text.txt +(EX) Example Plugin,example://blah diff --git a/indra/test_apps/llplugintest/llmediaplugintest.cpp b/indra/test_apps/llplugintest/llmediaplugintest.cpp index 553d1ab131..d987915bb8 100644 --- a/indra/test_apps/llplugintest/llmediaplugintest.cpp +++ b/indra/test_apps/llplugintest/llmediaplugintest.cpp @@ -138,8 +138,6 @@ LLMediaPluginTest::LLMediaPluginTest( int app_window, int window_width, int wind  	mMediaBrowserControlBackButtonFlag( true ),  	mMediaBrowserControlForwardButtonFlag( true ),  	mHomeWebUrl( "http://www.google.com/" ) -	//mHomeWebUrl( "file:///C|/Program Files/QuickTime/Sample.mov" ) -	//mHomeWebUrl( "http://movies.apple.com/movies/wb/watchmen/watchmen-tlr2_480p.mov" )  {  	// debugging spam  	std::cout << std::endl << "             GLUT version: " << "3.7.6" << std::endl;	// no way to get real version from GLUT @@ -277,8 +275,6 @@ void LLMediaPluginTest::bindTexture(GLuint texture, GLint row_length, GLint alig  {  	glEnable( GL_TEXTURE_2D ); -//	std::cerr << "binding texture " << texture << std::endl; -	  	glBindTexture( GL_TEXTURE_2D, texture );  	glPixelStorei( GL_UNPACK_ROW_LENGTH, row_length );  	glPixelStorei( GL_UNPACK_ALIGNMENT, alignment ); @@ -410,7 +406,7 @@ void LLMediaPluginTest::draw( int draw_type )  			// only bother with pick if we have something to render  			// Actually, we need to pick even if we're not ready to render.    			// Otherwise you can't select and remove a panel which has gone bad. -//			if ( mMediaPanels[ panel ]->mReadyToRender ) +			//if ( mMediaPanels[ panel ]->mReadyToRender )  			{  				glMatrixMode( GL_TEXTURE );  				glPushMatrix(); @@ -621,10 +617,10 @@ void LLMediaPluginTest::idle()  	if ( mSelectedPanel )  	{  		// set volume based on slider if we have time media -//		if ( mGluiMediaTimeControlWindowFlag ) -//		{ -//			mSelectedPanel->mMediaSource->setVolume( (float)mMediaTimeControlVolume / 100.0f ); -//		}; +		//if ( mGluiMediaTimeControlWindowFlag ) +		//{ +		//	mSelectedPanel->mMediaSource->setVolume( (float)mMediaTimeControlVolume / 100.0f ); +		//};  		// NOTE: it is absurd that we need cache the state of GLUI controls  		//       but enabling/disabling controls drags framerate from 500+ @@ -1463,6 +1459,9 @@ std::string LLMediaPluginTest::mimeTypeFromUrl( std::string& url )  	else  	if ( url.find( ".txt" ) != std::string::npos )	// Apple Text descriptors  		mime_type = "video/quicktime"; +	else +	if ( url.find( "example://" ) != std::string::npos )	// Example plugin +		mime_type = "example/example";  	return mime_type;  } @@ -1487,6 +1486,9 @@ std::string LLMediaPluginTest::pluginNameFromMimeType( std::string& mime_type )  	else  	if ( mime_type == "text/html" )  		plugin_name = "media_plugin_webkit.dll"; +	else +	if ( mime_type == "example/example" ) +		plugin_name = "media_plugin_example.dll";  #elif LL_LINUX  	std::string plugin_name( "libmedia_plugin_null.so" ); @@ -1799,7 +1801,7 @@ void LLMediaPluginTest::getRandomMediaSize( int& width, int& height, std::string  	// adjust this random size if it's a browser so we get   	// a more useful size for testing..  -	if ( mime_type == "text/html" ) +	if ( mime_type == "text/html" || mime_type == "example/example"  )  	{  		width = ( ( rand() % 100 ) + 100 ) * 4;  		height = ( width * ( ( rand() % 400 ) + 1000 ) ) / 1000; | 
