Review #112
This change adds controls that change state based on the selection in the nearby media panel. There are basically 3 sets:
- Time-based
- Web-based ("Normal")
- Disabled
Again, these change based on what you've got selected in the panel
Review #109
This (fairly major) change adds new "items" to the media list for
Parcel Media and Parcel Audio. Since these items are special (before
the items were always MoaP impls), they had to be treated
special. Moreover, actions on all of "media" had to be centralized so
that they would have similar behavior.
Review #100http://10.1.19.90:8080/go?page=ReviewDisplay&reviewid=100
This encompasses the first of the behavioral and structural changes for the Nearby Media Floater and the chrome button at the top of the UI. It includes:
- Removal of the Parcel Media and Parcel Audio UI. Still not in the list yet.
- New More/Less button, which doesn't quite work right (see below)
- Changed icon for UI chrome
- Enabled "turning on" and "turning off" media from the chrome and NMF
- Added gear icon to bring up prefs
- XUI changes to the structure of NMF
- Implementation of the "tentative" autoplay flag
This is basically a checkpoint so that Richard can help with the More/Less implementation
Several changes here:
- Implemented support for "media classification": see http://docs.google.com/a/lindenlab.com/View?id=ddznhrqn_29vhnr2pg8
- Added settings for auto-playing of said classifications
Nearby Media Floater:
- On/Off buttons are now explicit...no more power buttons
- Parcel Media and Parcel Audio are "lighter weight", with no more on/off
- List now sorts with playing items at top, non-playing below
- There is now a "Show" drop-down that filters the list by classification
- Added checkboxes to the bottom to control auto-play settings
More work is needed, so consider this a checkpoint
Review #89
This implements the changes Sam wanted in order to reduce the confusion over media enabled-ness, in particular:
- "Media Enabled" pref now only controls "AudioStreamingMedia"
- No more "tentative" state
- New "Music Enabled" pref
- First run dialog controls Media and Music (Sam, this is a change from your request...I think it works better)
- Put a reflection of the "Media Enabled" checkbox in the Nearby Media Floater
- Get rid of the "AudioStreamingVideo" setting altogether (whatever used it, it should now obey "AudioStreamingMedia").
This is actually two seperate issues:
1) After disabling parcel media from the nearby media floater, it can't be re-enabled
2) When you disable parcel media from the nearby media floater, faces displaying it don't revert to their original texture
This change fixes issue (1), by forcing the priority of the inworld media instance to normal in LLViewerMedia::updateMedia() so it will always get reloaded instead of possibly being kept unloaded due to already-loaded prim media.
Issue (2) is still under investigation. In addition to the case where you disable parcel media from the nearby media floater, it also doesn't restore the textures when you leave the parcel, and I think I've even seen it when unloading
Added an LLSD argument to LLPluginClassMedia::keyEvent() and LLPluginClassMedia::textInput() which contains the native key data.
Made LLViewerMediaImpl retrieve the native key data and pass it to keyEvent and textInput.
Added a native_key_data parameter to the text_event and key_event messages.
Made the webkit plugin extract the native_key_data parameter and pass it to the internal keyEvent() and unicodeInput() functions.
Fixed LLMediaPluginTest to match function signature change to LLPluginClassMedia::keyEvent().
Don't allow LLViewerMediaImpl to process a navigateInternal during the call to LLPluginClassMedia::idle(). This prevents untimely destruction of the LLPluginClassMedia and LLPluginMessagePipe objects, which was causing the crash.
Reviewed by Rick.
Added a notion of "background color" to LLViewerMediaImpl and LLPluginClassMedia.
Added background color parameters to the size_change message.
Webkit plugin now sets the background color of the instance from the supplied background color, and navigates to a data: url with that background color instead of about:blank as its initial navigate.
Webkit plugin now no longer waits for the first onPageChanged event
LLViewerMediaImpl now clears the texture to the background color when initializing it.
Made LLMediaCtrl fill with its opaque background color when the media impl isn't set up yet.
Removed the initial data URL from the search and help floaters, since what it was doing is now handled internally by the new background color code.
Reviewed by callum and rick.
We now no longer check the error code returned from the MIME type probe.
If we have a mime type, use it, regardless of the status. If not, default to the web plugin and let it handle error reporting.
LLViewerMediaImpl::initializeMedia() was assuming an invalid invariant (that mMimeType was associated with the currently loaded plugin). Fixed by adding a new member variable, mCurrentMimeType, which reflects the MIME type that caused the currently loaded plugin to be loaded, and using that instead of mMimeType when determining whether to reload the plugin.
In proximity_comparitor(), if the impls have exactly the same distance, return the result of comparing the impl pointers. This will give them a completely arbitrary ordering, but it will be stable...
propagate the parent app's OSUserAppDir (i.e. ~/.secondlife/) all the way down to plugins, if they need persistant user data/settings (like the webkit plugin needs a place to put its cache).
Added LLViewerMediaImpl::mInNearbyMediaList for LLFloaterNearbyMedia::refreshList() to use to keep track of which elements it's seen -- this allows us to remove a linear search in an inner loop.
Added a map from texture ID to media impl pointer in LLViewerMedia/LLViewerMediaImpl. This allows LLViewerMedia::getMediaImplFromTextureID() to be a std::map lookup instead of a linear search.
In LLFloaterNearbyMedia, call sortByColumnIndex in postBuild instead of in addMediaItem(). The latter was causing some unnecessary re-sorting.
Hf: Enter commit message. Lines beginning with 'HG:' are removed.
Renamed llviewerversion to llversioninfo, to avoid confusion with
llversionviewer in llcommon (llversion is already used by llwindow).
Created new LLVersionInfo class with the following methods:
static S32 getMajor();
static S32 getMinor();
static S32 getPatch();
static S32 getBuild();
static const std::string &getVersion();
static const std::string &getShortVersion();
static const std::string &getChannel();
All viewer code has been updated to use this API. Viewer code no
longer directly includes llversionviewer.h from llcommon.
This module now contains general viewer version routines, not just
access to the viewer build number, so I've renamed it from
llviewerbuild to llviewerversion.
Rather than copy/paste the same version string formatting pattern
again, I added new string-based version routines:
/// return the full viewer version as a string like "2.0.0.200030"
const std::string &llGetViewerVersion();
/// return the viewer version as a string like "2.0.0"
const std::string &llGetViewerShortVersion();
/// return the viewer build version as a string, e.g., "200130"
const std::string &llGetViewerBuildVersion();
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.