diff options
author | Ansariel <ansariel.hiller@phoenixviewer.com> | 2024-05-22 19:04:52 +0200 |
---|---|---|
committer | Ansariel <ansariel.hiller@phoenixviewer.com> | 2024-05-22 19:04:52 +0200 |
commit | 1b67dd855c41f5a0cda7ec2a68d98071986ca703 (patch) | |
tree | ab243607f74f78200787bba5b9b88f07ef1b966f /indra/newview/llviewerparcelmediaautoplay.cpp | |
parent | 6d6eabca44d08d5b97bfe3e941d2b9687c2246ea (diff) | |
parent | e1623bb276f83a43ce7a197e388720c05bdefe61 (diff) |
Merge remote-tracking branch 'origin/main' into DRTVWR-600-maint-A
# Conflicts:
# autobuild.xml
# indra/cmake/CMakeLists.txt
# indra/cmake/GoogleMock.cmake
# indra/llaudio/llaudioengine_fmodstudio.cpp
# indra/llaudio/llaudioengine_fmodstudio.h
# indra/llaudio/lllistener_fmodstudio.cpp
# indra/llaudio/lllistener_fmodstudio.h
# indra/llaudio/llstreamingaudio_fmodstudio.cpp
# indra/llaudio/llstreamingaudio_fmodstudio.h
# indra/llcharacter/llmultigesture.cpp
# indra/llcharacter/llmultigesture.h
# indra/llimage/llimage.cpp
# indra/llimage/llimagepng.cpp
# indra/llimage/llimageworker.cpp
# indra/llimage/tests/llimageworker_test.cpp
# indra/llmessage/tests/llmockhttpclient.h
# indra/llprimitive/llgltfmaterial.h
# indra/llrender/llfontfreetype.cpp
# indra/llui/llcombobox.cpp
# indra/llui/llfolderview.cpp
# indra/llui/llfolderviewmodel.h
# indra/llui/lllineeditor.cpp
# indra/llui/lllineeditor.h
# indra/llui/lltextbase.cpp
# indra/llui/lltextbase.h
# indra/llui/lltexteditor.cpp
# indra/llui/lltextvalidate.cpp
# indra/llui/lltextvalidate.h
# indra/llui/lluictrl.h
# indra/llui/llview.cpp
# indra/llwindow/llwindowmacosx.cpp
# indra/newview/app_settings/settings.xml
# indra/newview/llappearancemgr.cpp
# indra/newview/llappearancemgr.h
# indra/newview/llavatarpropertiesprocessor.cpp
# indra/newview/llavatarpropertiesprocessor.h
# indra/newview/llbreadcrumbview.cpp
# indra/newview/llbreadcrumbview.h
# indra/newview/llbreastmotion.cpp
# indra/newview/llbreastmotion.h
# indra/newview/llconversationmodel.h
# indra/newview/lldensityctrl.cpp
# indra/newview/lldensityctrl.h
# indra/newview/llface.inl
# indra/newview/llfloatereditsky.cpp
# indra/newview/llfloatereditwater.cpp
# indra/newview/llfloateremojipicker.h
# indra/newview/llfloaterimsessiontab.cpp
# indra/newview/llfloaterprofiletexture.cpp
# indra/newview/llfloaterprofiletexture.h
# indra/newview/llgesturemgr.cpp
# indra/newview/llgesturemgr.h
# indra/newview/llimpanel.cpp
# indra/newview/llimpanel.h
# indra/newview/llinventorybridge.cpp
# indra/newview/llinventorybridge.h
# indra/newview/llinventoryclipboard.cpp
# indra/newview/llinventoryclipboard.h
# indra/newview/llinventoryfunctions.cpp
# indra/newview/llinventoryfunctions.h
# indra/newview/llinventorygallery.cpp
# indra/newview/lllistbrowser.cpp
# indra/newview/lllistbrowser.h
# indra/newview/llpanelobjectinventory.cpp
# indra/newview/llpanelprofile.cpp
# indra/newview/llpanelprofile.h
# indra/newview/llpreviewgesture.cpp
# indra/newview/llsavedsettingsglue.cpp
# indra/newview/llsavedsettingsglue.h
# indra/newview/lltooldraganddrop.cpp
# indra/newview/llurllineeditorctrl.cpp
# indra/newview/llvectorperfoptions.cpp
# indra/newview/llvectorperfoptions.h
# indra/newview/llviewerparceloverlay.cpp
# indra/newview/llviewertexlayer.cpp
# indra/newview/llviewertexturelist.cpp
# indra/newview/macmain.h
# indra/test/test.cpp
Diffstat (limited to 'indra/newview/llviewerparcelmediaautoplay.cpp')
-rw-r--r-- | indra/newview/llviewerparcelmediaautoplay.cpp | 352 |
1 files changed, 176 insertions, 176 deletions
diff --git a/indra/newview/llviewerparcelmediaautoplay.cpp b/indra/newview/llviewerparcelmediaautoplay.cpp index 076dc69c05..ef22d1ff32 100644 --- a/indra/newview/llviewerparcelmediaautoplay.cpp +++ b/indra/newview/llviewerparcelmediaautoplay.cpp @@ -1,176 +1,176 @@ -/** - * @file llviewerparcelmediaautoplay.cpp - * @brief timer to automatically play media in a parcel - * - * $LicenseInfo:firstyear=2007&license=viewerlgpl$ - * Second Life Viewer Source Code - * Copyright (C) 2010, 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 - * License as published by the Free Software Foundation; - * version 2.1 of the License only. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA - * $/LicenseInfo$ - */ - - -#include "llviewerprecompiledheaders.h" - -#include "llviewerparcelmediaautoplay.h" - -#include "llparcel.h" -#include "llviewercontrol.h" -#include "llviewermedia.h" -#include "llviewerparcelaskplay.h" -#include "llviewerparcelmedia.h" -#include "llviewerparcelmgr.h" -#include "llviewerregion.h" -#include "llviewertexturelist.h" // for texture stats -#include "message.h" -#include "llagent.h" -#include "llmimetypes.h" - -const F32 AUTOPLAY_TIME = 5; // how many seconds before we autoplay -const F32 AUTOPLAY_SIZE = 24*24; // how big the texture must be (pixel area) before we autoplay -const F32 AUTOPLAY_SPEED = 0.1f; // how slow should the agent be moving to autoplay - -LLViewerParcelMediaAutoPlay::LLViewerParcelMediaAutoPlay() : - LLEventTimer(1), - - mLastParcelID(-1), - mPlayed(false), - mTimeInParcel(0) -{ -} - -// static -void LLViewerParcelMediaAutoPlay::playStarted() -{ - LLSingleton<LLViewerParcelMediaAutoPlay>::getInstance()->mPlayed = true; -} - -bool LLViewerParcelMediaAutoPlay::tick() -{ - LLParcel *this_parcel = NULL; - LLViewerRegion *this_region = NULL; - std::string this_media_url; - std::string this_media_type; - LLUUID this_media_texture_id; - S32 this_parcel_id = 0; - LLUUID this_region_id; - - this_region = gAgent.getRegion(); - - if (this_region) - { - this_region_id = this_region->getRegionID(); - } - - this_parcel = LLViewerParcelMgr::getInstance()->getAgentParcel(); - - if (this_parcel) - { - this_media_url = this_parcel->getMediaURL(); - - this_media_type = this_parcel->getMediaType(); - - this_media_texture_id = this_parcel->getMediaID(); - - this_parcel_id = this_parcel->getLocalID(); - } - - if (this_parcel_id != mLastParcelID || - this_region_id != mLastRegionID) - { - // we've entered a new parcel - mPlayed = false; // we haven't autoplayed yet - mTimeInParcel = 0; // reset our timer - mLastParcelID = this_parcel_id; - mLastRegionID = this_region_id; - } - - mTimeInParcel += mPeriod; // increase mTimeInParcel by the amount of time between ticks - - if ((!mPlayed) && // if we've never played - (mTimeInParcel > AUTOPLAY_TIME) && // and if we've been here for so many seconds - (!this_media_url.empty()) && // and if the parcel has media - (stricmp(this_media_type.c_str(), LLMIMETypes::getDefaultMimeType().c_str()) != 0) && - (!LLViewerParcelMedia::getInstance()->hasParcelMedia())) // and if the media is not already playing - { - if (this_media_texture_id.notNull()) // and if the media texture is good - { - LLViewerMediaTexture *image = LLViewerTextureManager::getMediaTexture(this_media_texture_id, false) ; - - F32 image_size = 0; - - if (image) - { - image_size = image->getMaxVirtualSize() ; - } - - if (gAgent.getVelocity().magVec() < AUTOPLAY_SPEED) // and if the agent is stopped (slow enough) - { - if (image_size > AUTOPLAY_SIZE) // and if the target texture is big enough on screen - { - if (this_parcel) - { - static LLCachedControl<S32> autoplay_mode(gSavedSettings, "ParcelMediaAutoPlayEnable"); - - switch (autoplay_mode()) - { - case 0: - // Disabled - break; - case 1: - // Play, default value for ParcelMediaAutoPlayEnable - LLViewerParcelMedia::getInstance()->play(this_parcel); - break; - case 2: - default: - { - // Ask - LLViewerParcelAskPlay::getInstance()->askToPlay(this_region->getRegionID(), - this_parcel->getLocalID(), - this_parcel->getMediaURL(), - onStartMediaResponse); - break; - } - } - } - - mPlayed = true; - } - } - } - } - - - return false; // continue ticking forever please. -} - -//static -void LLViewerParcelMediaAutoPlay::onStartMediaResponse(const LLUUID ®ion_id, const S32 &parcel_id, const std::string &url, const bool &play) -{ - if (play) - { - LLParcel *parcel = LLViewerParcelMgr::getInstance()->getAgentParcel(); - - // make sure we are still there - if (parcel->getLocalID() == parcel_id && gAgent.getRegion()->getRegionID() == region_id) - { - LLViewerParcelMedia::getInstance()->play(parcel); - } - } -} - +/**
+ * @file llviewerparcelmediaautoplay.cpp
+ * @brief timer to automatically play media in a parcel
+ *
+ * $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2010, 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
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+
+#include "llviewerprecompiledheaders.h"
+
+#include "llviewerparcelmediaautoplay.h"
+
+#include "llparcel.h"
+#include "llviewercontrol.h"
+#include "llviewermedia.h"
+#include "llviewerparcelaskplay.h"
+#include "llviewerparcelmedia.h"
+#include "llviewerparcelmgr.h"
+#include "llviewerregion.h"
+#include "llviewertexturelist.h" // for texture stats
+#include "message.h"
+#include "llagent.h"
+#include "llmimetypes.h"
+
+const F32 AUTOPLAY_TIME = 5; // how many seconds before we autoplay
+const F32 AUTOPLAY_SIZE = 24*24; // how big the texture must be (pixel area) before we autoplay
+const F32 AUTOPLAY_SPEED = 0.1f; // how slow should the agent be moving to autoplay
+
+LLViewerParcelMediaAutoPlay::LLViewerParcelMediaAutoPlay() :
+ LLEventTimer(1),
+
+ mLastParcelID(-1),
+ mPlayed(false),
+ mTimeInParcel(0)
+{
+}
+
+// static
+void LLViewerParcelMediaAutoPlay::playStarted()
+{
+ LLSingleton<LLViewerParcelMediaAutoPlay>::getInstance()->mPlayed = true;
+}
+
+bool LLViewerParcelMediaAutoPlay::tick()
+{
+ LLParcel *this_parcel = NULL;
+ LLViewerRegion *this_region = NULL;
+ std::string this_media_url;
+ std::string this_media_type;
+ LLUUID this_media_texture_id;
+ S32 this_parcel_id = 0;
+ LLUUID this_region_id;
+
+ this_region = gAgent.getRegion();
+
+ if (this_region)
+ {
+ this_region_id = this_region->getRegionID();
+ }
+
+ this_parcel = LLViewerParcelMgr::getInstance()->getAgentParcel();
+
+ if (this_parcel)
+ {
+ this_media_url = this_parcel->getMediaURL();
+
+ this_media_type = this_parcel->getMediaType();
+
+ this_media_texture_id = this_parcel->getMediaID();
+
+ this_parcel_id = this_parcel->getLocalID();
+ }
+
+ if (this_parcel_id != mLastParcelID ||
+ this_region_id != mLastRegionID)
+ {
+ // we've entered a new parcel
+ mPlayed = false; // we haven't autoplayed yet
+ mTimeInParcel = 0; // reset our timer
+ mLastParcelID = this_parcel_id;
+ mLastRegionID = this_region_id;
+ }
+
+ mTimeInParcel += mPeriod; // increase mTimeInParcel by the amount of time between ticks
+
+ if ((!mPlayed) && // if we've never played
+ (mTimeInParcel > AUTOPLAY_TIME) && // and if we've been here for so many seconds
+ (!this_media_url.empty()) && // and if the parcel has media
+ (stricmp(this_media_type.c_str(), LLMIMETypes::getDefaultMimeType().c_str()) != 0) &&
+ (!LLViewerParcelMedia::getInstance()->hasParcelMedia())) // and if the media is not already playing
+ {
+ if (this_media_texture_id.notNull()) // and if the media texture is good
+ {
+ LLViewerMediaTexture *image = LLViewerTextureManager::getMediaTexture(this_media_texture_id, false) ;
+
+ F32 image_size = 0;
+
+ if (image)
+ {
+ image_size = image->getMaxVirtualSize() ;
+ }
+
+ if (gAgent.getVelocity().magVec() < AUTOPLAY_SPEED) // and if the agent is stopped (slow enough)
+ {
+ if (image_size > AUTOPLAY_SIZE) // and if the target texture is big enough on screen
+ {
+ if (this_parcel)
+ {
+ static LLCachedControl<S32> autoplay_mode(gSavedSettings, "ParcelMediaAutoPlayEnable");
+
+ switch (autoplay_mode())
+ {
+ case 0:
+ // Disabled
+ break;
+ case 1:
+ // Play, default value for ParcelMediaAutoPlayEnable
+ LLViewerParcelMedia::getInstance()->play(this_parcel);
+ break;
+ case 2:
+ default:
+ {
+ // Ask
+ LLViewerParcelAskPlay::getInstance()->askToPlay(this_region->getRegionID(),
+ this_parcel->getLocalID(),
+ this_parcel->getMediaURL(),
+ onStartMediaResponse);
+ break;
+ }
+ }
+ }
+
+ mPlayed = true;
+ }
+ }
+ }
+ }
+
+
+ return false; // continue ticking forever please.
+}
+
+//static
+void LLViewerParcelMediaAutoPlay::onStartMediaResponse(const LLUUID ®ion_id, const S32 &parcel_id, const std::string &url, const bool &play)
+{
+ if (play)
+ {
+ LLParcel *parcel = LLViewerParcelMgr::getInstance()->getAgentParcel();
+
+ // make sure we are still there
+ if (parcel->getLocalID() == parcel_id && gAgent.getRegion()->getRegionID() == region_id)
+ {
+ LLViewerParcelMedia::getInstance()->play(parcel);
+ }
+ }
+}
+
|