Disabling and re-enabling media should work much more like teleporting away and teleporting back -- media will respect the auto-play flag when reloading, instead of returning to its previous load state.
Added LLViewerMediaImpl::scaleTextureCoords() function to encapsulate the code that maps from texture coordinates to media coordinates.
Made scaleTextureCoords() wrap the texture coordinate to the range [0.0, 1.0) before converting to media coordinates.
Review #49
This change adjusts each media's priority based on whether the viewer is minimized (media priority becomes HIDDEN) or unfocused (media priority becomes LOW). However, due to the fact that updateMedia() was no longer being called when minimized, I moved its call out of LLViewerTextureList::updateImages() (a seemingly odd place anyway) and into its own idle callback.
Now, LLViewerMedia has explicit skipBack() and skipForward()
functions, and the buttons in LLPanelPrimMediaControls now map
onto those functions neatly.
Enabled CPU limit setting by default (set to 100% of 1 CPU).
Lowered default limits on plugin priorities: 2 normal+, 4 low, 8 total.
Limit on total number of instances now only applies to inworld media -- media instances in the UI (such as the help browser and search) don't count toward the limit. UI media will still bump inworld media down from normal/low priority, though.
Several improvements to plugin manager debug code in the nearby media list.
Don't load unloaded instances that are at PRIORITY_SLIDESHOW or PRIORITY_HIDDEN (they don't get unloaded, they just won't be loaded unless they're at higher priority).
Added LLViewerMediaImpl::isPlayable(), which indicates whether an instance would be loaded if it were high enough in the priority list (taking into account autoplay and current load state). Priority algorithm now takes this into account.
Fixed a couple of issues with approximate texture interest calculation and its use in setting priorities.
Adjusted sleep times on low and normal priorities to be more friendly.
This change implements the enabling/disabling of parcel media,
as well as setting the user's autoplay preference. I still
am quite confused by this UI, so we'll need to play with it a bit
to ensure it is what we want to present to users.
This adds a few helpers to llviewerparcelmedia to get the name and URL
of media.
Fixed by having LLViewerMedia::updateMediaImpl() copy the media entry's current URL into the media impl's mMediaURL in the case where the impl has a non-empty media URL but the function doesn't do a navigate.
Added accessors to get platform-specific process ID from LLProcessLauncher.
Added an optional "debug" argument to LLPluginClassMedia::init() and LLPluginProcessParent::init() (defaults to false).
Mac only: made the state machine in LLPluginProcessParent::idle() open a new window in Terminal.app with a gdb session attached to the plugin process upon successful launch.
Created LLViewerMediaImpl::unload(), which unloads the media and clears internal state (such as the last-navigated URL) to keep it from getting reloaded.
LLViewerMedia::updateMediaImpl() now calls unload() on the impl instead of just using destroyMediaSource().
Made LLViewerMedia::updateMediaImpl() unload the impl's media plugin when the current URL goes empty.
Made LLVOVolume::syncMediaData() call removeMediaImpl() if the media data gets deleted.
Added LLViewerMediaImpl::set/getDisabled(), which will prevent a media instance from loading.
Added LLViewerMedia::set/getInWorldMediaDisabled(), which will disable all inworld media fom loading.
Added LLViewerMedia::getPriorityList() and made the priority comparitor public.
Added LLViewerMediaImpl::getCurrentMediaURL(), which reflects the most recent url either set with navigateTo or received from the plugin via locationChanged/navigateComplete. LLViewerMediaImpl now uses this when reload() is called.
LLPanelPrimMediaControls now uses getCurrentMediaURL() to get the url it displays in the URL input bar and opens with the pop-out control.
Reworked some of the autoplay logic in LLViewerMediaImpl to try and make it more consistent when media is unloaded and reloaded by the performance manager.
LLViewerMediaImpl will now keep track of the media state and current time of media that it unloads for performance reasons, and attempt to restore playing or paused media to the same playhead time and state (playing or paused) when it reloads.
Added "done" status that time-based media plugins can use to indicate that they've reached the end of the media and stopped.
Added logging of priority transitions, for use in debugging issues with the peformance manager.
Added LLPluginClassMedia::getVolume().
Added setVolume/getVolumeupdateVolume methods to LLViewerMediaImpl.
LLViewerMedia::setVolume() now no longer overrides the volume settings on all media instances -- it now sets a "global volume" value which is multiplied by all instances' volumes to modulate them.
Cleaned up volume/mute handling in LLPanelMediaHUD (made it go through the LLViewerMediaImpl interface instead of directly through LLPluginClassMedia, and removed the mMediaVolume member variable, since the media impl now stores that state).
Moved some special-case handling from LLMediaCtrl::handleKeyHere/handleUnicodeCharHere to LLViewerMediaImpl::handleKeyHere/handleUnicodeCharHere so that the key handling for LLViewerMediaFocus gets the benefit of it as well.
LLViewerMediaFocus now tracks two separate objects: the currently focused media object, and the media object that's currently being hovered over. It no longer stores smart pointers to either the LLViewerObject or the LLViewerMediaImpl -- it now looks up both by UUID every time they're needed, and fails gracefully if either goes away. This will prevent it from keeping objects from being deleted.
The poorly-understood "mouseOverFlag" has been expunged.
LLViewerMediaFocus no longer uses LLSelectMgr at all. The object to focus on is explicitly passed between LLViewerMediaFocus and LLPanelMediaHUD instead of going indirectly through the selection manager.
LLViewerMediaFocus also no longer interacts with the pick from LLToolPie -- the data it needs from the pick (the object and normal vector) is passed explicitly.
LLViewerMediaFocus::setCameraZoom and LLViewerMediaFocus::getBBoxAspectRatio now have no dependencies on the LLViewerMediaFocus object -- all the data they need is passed in when they're called by the LLPanelMediaHUD. I made them static member functions, but they could be moved to LLPanelMediaHUD or even made into file-scoped static functions. The only reason I didn't do either of those is that it seems like they belong with the LLViewerMediaFocus code as opposed to the HUD.
There were a couple of issues interacting to cause this:
Firstly, when LLViewerMediaImpl delayed loading the parcel media (which it normally does), it was losing track of the specified MIME type, but the autodiscovery code also wasn't being triggered. The code should now carry through both the specified MIME type and the autodiscovery flag when loading is delayed.
Second, the new media autodiscovery code might not work for some legacy parcel media content (for example, if it's stored on a server that doesn't report the correct MIME types). The code has been changed to first check whether the specified MIME type maps to a known plugin and allow that to override MIME type detection, which should allow this legacy content to keep working.
Made LLPluginProcessParent differentiate between failures launching/loading the plugin and failures after the plugin has been loaded. This allows us to handle launch failures differently, since retrying is unlikely to fix them.
Added new media event MEDIA_EVENT_PLUGIN_FAILED_LAUNCH to indicate a launch failure.
Added a case for the new event to LLViewerMediaImpl::handleMediaEvent() that sets the "failed init" flag to prevent retries.
svn merge -r 129913:131718 svn+ssh://svn.lindenlab.com/svn/linden/branches/pluginapi/pluginapi_05
Some branch shenannigans in the pluginapi_05 branch caused this to become a two-part merge.
* featurettes-4 89061:89589 (which is all of featurettes-1, -2, and -3, and part of -4)
* gteam-showstoppers-3 91950:91951 (which is all of gteam-showstoppers-1, -2, and -3)
* featurettes-5 92149:92150 (patch for last line of chat text not visible in chat history, DEV-17771)
* snapshot-3 91988:91991 (which is all of snapshot-1, -2, and -3)
Merging revisions 92190-92387 of svn+ssh://svn.lindenlab.com/svn/linden/branches/support-featurettes-snapshot-merge-2 into release, respecting ancestry
* QAR-590 Merge Lock Request for Support Sprint
* QAR-627 Merge snapshot improvements
* QAR-686 Merge Lock request for Featurettes