aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/linden
diff options
context:
space:
mode:
authorMcCabe Maxsted2009-06-15 03:00:48 -0700
committerMcCabe Maxsted2009-06-15 03:03:59 -0700
commit96741727e0d1dbb743fe9dcfff68d52b12617136 (patch)
treeddfcd81551f3a907875b9dd5cd6f7a0cc2a19b8f /linden
parentOnline/Offline notifications now always show in IM windows (diff)
downloadmeta-impy-96741727e0d1dbb743fe9dcfff68d52b12617136.zip
meta-impy-96741727e0d1dbb743fe9dcfff68d52b12617136.tar.gz
meta-impy-96741727e0d1dbb743fe9dcfff68d52b12617136.tar.bz2
meta-impy-96741727e0d1dbb743fe9dcfff68d52b12617136.tar.xz
Applied Dale Glass' patch for VWR-12655: Add support for displaying the title of the song
Diffstat (limited to 'linden')
-rw-r--r--linden/indra/llaudio/audioengine.h2
-rw-r--r--linden/indra/llmedia/llmediaimplgstreamer.cpp46
-rw-r--r--linden/indra/llmedia/llmediaimplgstreamer.h1
-rw-r--r--linden/indra/llmedia/llmediaobserver.h1
-rw-r--r--linden/indra/newview/app_settings/settings.xml11
-rw-r--r--linden/indra/newview/lloverlaybar.cpp49
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/panel_preferences_audio.xml6
7 files changed, 102 insertions, 14 deletions
diff --git a/linden/indra/llaudio/audioengine.h b/linden/indra/llaudio/audioengine.h
index d289ba5..579f58f 100644
--- a/linden/indra/llaudio/audioengine.h
+++ b/linden/indra/llaudio/audioengine.h
@@ -182,6 +182,8 @@ public:
182 static void assetCallback(LLVFS *vfs, const LLUUID &uuid, LLAssetType::EType type, void *user_data, S32 result_code, LLExtStat ext_status); 182 static void assetCallback(LLVFS *vfs, const LLUUID &uuid, LLAssetType::EType type, void *user_data, S32 result_code, LLExtStat ext_status);
183 183
184 friend class LLPipeline; // For debugging 184 friend class LLPipeline; // For debugging
185
186 LLMediaBase * getStreamMedia() { return mInternetStreamMedia; }
185public: 187public:
186 F32 mMaxWindGain; // Hack. Public to set before fade in? 188 F32 mMaxWindGain; // Hack. Public to set before fade in?
187 189
diff --git a/linden/indra/llmedia/llmediaimplgstreamer.cpp b/linden/indra/llmedia/llmediaimplgstreamer.cpp
index d1bab29..c0c2070 100644
--- a/linden/indra/llmedia/llmediaimplgstreamer.cpp
+++ b/linden/indra/llmedia/llmediaimplgstreamer.cpp
@@ -89,6 +89,7 @@ LLMediaImplGStreamer () :
89 mPump ( NULL ), 89 mPump ( NULL ),
90 mPlaybin ( NULL ), 90 mPlaybin ( NULL ),
91 mVideoSink ( NULL ), 91 mVideoSink ( NULL ),
92 mLastTitle ( "" ),
92 mState( GST_STATE_NULL ), 93 mState( GST_STATE_NULL ),
93 mPlayThread ( NULL ) 94 mPlayThread ( NULL )
94{ 95{
@@ -470,6 +471,8 @@ gboolean LLMediaImplGStreamer::bus_callback(GstBus *bus, GstMessage *message, gp
470 case GST_STATE_PAUSED: 471 case GST_STATE_PAUSED:
471 break; 472 break;
472 case GST_STATE_PLAYING: 473 case GST_STATE_PLAYING:
474 impl->mLastTitle = "";
475
473 LLMediaEvent event( impl, 100 ); 476 LLMediaEvent event( impl, 100 );
474 impl->getEventEmitter().update( &LLMediaObserver::onUpdateProgress, event ); 477 impl->getEventEmitter().update( &LLMediaObserver::onUpdateProgress, event );
475 // emit an event to say that a media source was loaded 478 // emit an event to say that a media source was loaded
@@ -521,18 +524,35 @@ gboolean LLMediaImplGStreamer::bus_callback(GstBus *bus, GstMessage *message, gp
521 } 524 }
522 case GST_MESSAGE_TAG: 525 case GST_MESSAGE_TAG:
523 { 526 {
524 GstTagList *tag_list; 527 GstTagList *new_tags;
525 gchar *title; 528
526 gchar *artist; 529 gst_message_parse_tag( message, &new_tags );
527 gst_message_parse_tag(message, &tag_list); 530
528 gboolean hazTitle = gst_tag_list_get_string(tag_list, 531 gchar *title;
529 GST_TAG_TITLE, &title); 532 gchar *artist;
530 gboolean hazArtist = gst_tag_list_get_string(tag_list, 533
531 GST_TAG_ARTIST, &artist); 534 if ( gst_tag_list_get_string(new_tags, GST_TAG_TITLE, &title) )
532 if(hazTitle) 535 {
533 LL_INFOS("MediaInfo") << "Title: " << title << LL_ENDL; 536 LL_INFOS("MediaInfo") << "Title: " << title << LL_ENDL;
534 if(hazArtist) 537 std::string newtitle(title);
535 LL_INFOS("MediaInfo") << "Artist: " << artist << LL_ENDL; 538
539 if ( newtitle != impl->mLastTitle && newtitle != "" )
540 {
541 impl->mLastTitle = newtitle;
542 LLMediaEvent event( impl, impl->mLastTitle );
543 impl->getEventEmitter().update( &LLMediaObserver::onMediaTitleChange, event );
544 }
545
546 g_free(title);
547 }
548
549 if (gst_tag_list_get_string(new_tags, GST_TAG_ARTIST, &artist))
550 {
551 LL_INFOS("MediaInfo") << "Artist: " << artist << LL_ENDL;
552 g_free(artist);
553 }
554
555 gst_tag_list_free(new_tags);
536 break; 556 break;
537 } 557 }
538 case GST_MESSAGE_EOS: 558 case GST_MESSAGE_EOS:
@@ -551,10 +571,10 @@ gboolean LLMediaImplGStreamer::bus_callback(GstBus *bus, GstMessage *message, gp
551 impl->addCommand(LLMediaBase::COMMAND_STOP); 571 impl->addCommand(LLMediaBase::COMMAND_STOP);
552 } 572 }
553 break; 573 break;
574 }
554 default: 575 default:
555 /* unhandled message */ 576 /* unhandled message */
556 break; 577 break;
557 }
558 } 578 }
559 /* we want to be notified again the next time there is a message 579 /* we want to be notified again the next time there is a message
560 * on the bus, so return true (false means we want to stop watching 580 * on the bus, so return true (false means we want to stop watching
diff --git a/linden/indra/llmedia/llmediaimplgstreamer.h b/linden/indra/llmedia/llmediaimplgstreamer.h
index baefdaf..51a8c37 100644
--- a/linden/indra/llmedia/llmediaimplgstreamer.h
+++ b/linden/indra/llmedia/llmediaimplgstreamer.h
@@ -127,6 +127,7 @@ class LLMediaImplGStreamer:
127 GMainLoop *mPump; // event pump for this media 127 GMainLoop *mPump; // event pump for this media
128 GstElement *mPlaybin; 128 GstElement *mPlaybin;
129 GstSLVideo *mVideoSink; 129 GstSLVideo *mVideoSink;
130 std::string mLastTitle;
130 GstState mState; 131 GstState mState;
131 GstState getState() const { return mState; } 132 GstState getState() const { return mState; }
132 133
diff --git a/linden/indra/llmedia/llmediaobserver.h b/linden/indra/llmedia/llmediaobserver.h
index e6da4f6..97fed5f 100644
--- a/linden/indra/llmedia/llmediaobserver.h
+++ b/linden/indra/llmedia/llmediaobserver.h
@@ -102,6 +102,7 @@ class LLMediaObserver
102 virtual void onMediaSizeChange( const EventType& event_in ) { } 102 virtual void onMediaSizeChange( const EventType& event_in ) { }
103 virtual void onMediaContentsChange( const EventType& event_in ) { } 103 virtual void onMediaContentsChange( const EventType& event_in ) { }
104 virtual void onMediaStatusTextChange( const EventType& event_in ) { } 104 virtual void onMediaStatusTextChange( const EventType& event_in ) { }
105 virtual void onMediaTitleChange( const EventType &event_in ) { }
105 virtual void onNavigateBegin( const EventType& event_in ) { } 106 virtual void onNavigateBegin( const EventType& event_in ) { }
106 virtual void onNavigateComplete( const EventType& event_in ) { } 107 virtual void onNavigateComplete( const EventType& event_in ) { }
107 virtual void onUpdateProgress( const EventType& event_in ) { } 108 virtual void onUpdateProgress( const EventType& event_in ) { }
diff --git a/linden/indra/newview/app_settings/settings.xml b/linden/indra/newview/app_settings/settings.xml
index 5c76185..7ab215a 100644
--- a/linden/indra/newview/app_settings/settings.xml
+++ b/linden/indra/newview/app_settings/settings.xml
@@ -7337,6 +7337,17 @@
7337 <key>Value</key> 7337 <key>Value</key>
7338 <integer>0</integer> 7338 <integer>0</integer>
7339 </map> 7339 </map>
7340 <key>ShowStreamTitle</key>
7341 <map>
7342 <key>Comment</key>
7343 <string>Show the title of the song playing on the parcel's stream</string>
7344 <key>Persist</key>
7345 <integer>1</integer>
7346 <key>Type</key>
7347 <string>Boolean</string>
7348 <key>Value</key>
7349 <integer>1</integer>
7350 </map>
7340 <key>ShowTangentBasis</key> 7351 <key>ShowTangentBasis</key>
7341 <map> 7352 <map>
7342 <key>Comment</key> 7353 <key>Comment</key>
diff --git a/linden/indra/newview/lloverlaybar.cpp b/linden/indra/newview/lloverlaybar.cpp
index 91a7375..e1aeeca 100644
--- a/linden/indra/newview/lloverlaybar.cpp
+++ b/linden/indra/newview/lloverlaybar.cpp
@@ -41,6 +41,7 @@
41#include "llagent.h" 41#include "llagent.h"
42#include "llbutton.h" 42#include "llbutton.h"
43#include "llchatbar.h" 43#include "llchatbar.h"
44#include "llfloaterchat.h"
44#include "llfocusmgr.h" 45#include "llfocusmgr.h"
45#include "llimview.h" 46#include "llimview.h"
46#include "llmediaremotectrl.h" 47#include "llmediaremotectrl.h"
@@ -72,6 +73,53 @@ LLOverlayBar *gOverlayBar = NULL;
72 73
73extern S32 MENU_BAR_HEIGHT; 74extern S32 MENU_BAR_HEIGHT;
74 75
76
77class LLTitleObserver
78 : public LLMediaObserver
79{
80public:
81 void init(std::string url);
82 /*virtual*/ void onMediaTitleChange(const EventType& event_in);
83private:
84 LLMediaBase* mMediaSource;
85};
86
87static LLTitleObserver sTitleObserver;
88
89static LLRegisterWidget<LLMediaRemoteCtrl> r("media_remote");
90
91void LLTitleObserver::init(std::string url)
92{
93
94 if (!gAudiop)
95 {
96 return;
97 }
98
99 mMediaSource = gAudiop->getStreamMedia(); // LLViewerMedia::getSource();
100
101 if ( mMediaSource )
102 {
103 mMediaSource->addObserver(this);
104 }
105}
106
107//virtual
108void LLTitleObserver::onMediaTitleChange(const EventType& event_in)
109{
110 if ( !gSavedSettings.getBOOL("ShowStreamTitle") )
111 {
112 return;
113 }
114
115 LLChat chat;
116 //TODO: set this in XUI
117 std::string playing_msg = "Playing: " + event_in.getStringValue();
118 chat.mText = playing_msg;
119 LLFloaterChat::addChat(chat, FALSE, FALSE);
120}
121
122
75// 123//
76// Functions 124// Functions
77// 125//
@@ -406,6 +454,7 @@ void LLOverlayBar::toggleMusicPlay(void*)
406 // if ( gAudiop->isInternetStreamPlaying() == 0 ) 454 // if ( gAudiop->isInternetStreamPlaying() == 0 )
407 { 455 {
408 gAudiop->startInternetStream(parcel->getMusicURL()); 456 gAudiop->startInternetStream(parcel->getMusicURL());
457 sTitleObserver.init(parcel->getMusicURL());
409 } 458 }
410 } 459 }
411 } 460 }
diff --git a/linden/indra/newview/skins/default/xui/en-us/panel_preferences_audio.xml b/linden/indra/newview/skins/default/xui/en-us/panel_preferences_audio.xml
index 92978ab..c960d36 100644
--- a/linden/indra/newview/skins/default/xui/en-us/panel_preferences_audio.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/panel_preferences_audio.xml
@@ -15,7 +15,7 @@
15 Streaming Preferences: 15 Streaming Preferences:
16 </text> 16 </text>
17 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 17 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
18 bottom="-280" drop_shadow_visible="true" enabled="true" follows="left|top" 18 bottom="-300" drop_shadow_visible="true" enabled="true" follows="left|top"
19 font="SansSerifSmall" h_pad="0" halign="left" height="12" left="10" 19 font="SansSerifSmall" h_pad="0" halign="left" height="12" left="10"
20 mouse_opaque="true" name="audio_prefs_text" v_pad="0" width="128"> 20 mouse_opaque="true" name="audio_prefs_text" v_pad="0" width="128">
21 Audio Preferences: 21 Audio Preferences:
@@ -28,6 +28,10 @@
28 label="Play Streaming Music When Available (uses more bandwidth)" 28 label="Play Streaming Music When Available (uses more bandwidth)"
29 left="142" mouse_opaque="true" name="streaming_music" radio_style="false" 29 left="142" mouse_opaque="true" name="streaming_music" radio_style="false"
30 width="339" /> 30 width="339" />
31 <check_box bottom_delta="-20" control_name="ShowStreamTitle" enabled="true"
32 follows="left|top" font="SansSerifSmall" height="16" initial_value="true"
33 label="Show stream info in chat" left="162" mouse_opaque="true"
34 name="show_stream_title" radio_style="false" width="338" />
31 <check_box bottom_delta="-20" control_name="AudioStreamingVideo" enabled="true" 35 <check_box bottom_delta="-20" control_name="AudioStreamingVideo" enabled="true"
32 follows="left|top" font="SansSerifSmall" height="16" initial_value="true" 36 follows="left|top" font="SansSerifSmall" height="16" initial_value="true"
33 label="Play Streaming Media When Available (uses more bandwidth)" 37 label="Play Streaming Media When Available (uses more bandwidth)"