diff options
author | McCabe Maxsted | 2009-06-15 03:00:48 -0700 |
---|---|---|
committer | McCabe Maxsted | 2009-06-15 03:03:59 -0700 |
commit | 96741727e0d1dbb743fe9dcfff68d52b12617136 (patch) | |
tree | ddfcd81551f3a907875b9dd5cd6f7a0cc2a19b8f /linden | |
parent | Online/Offline notifications now always show in IM windows (diff) | |
download | meta-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.h | 2 | ||||
-rw-r--r-- | linden/indra/llmedia/llmediaimplgstreamer.cpp | 46 | ||||
-rw-r--r-- | linden/indra/llmedia/llmediaimplgstreamer.h | 1 | ||||
-rw-r--r-- | linden/indra/llmedia/llmediaobserver.h | 1 | ||||
-rw-r--r-- | linden/indra/newview/app_settings/settings.xml | 11 | ||||
-rw-r--r-- | linden/indra/newview/lloverlaybar.cpp | 49 | ||||
-rw-r--r-- | linden/indra/newview/skins/default/xui/en-us/panel_preferences_audio.xml | 6 |
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; } | ||
185 | public: | 187 | public: |
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 | ||
73 | extern S32 MENU_BAR_HEIGHT; | 74 | extern S32 MENU_BAR_HEIGHT; |
74 | 75 | ||
76 | |||
77 | class LLTitleObserver | ||
78 | : public LLMediaObserver | ||
79 | { | ||
80 | public: | ||
81 | void init(std::string url); | ||
82 | /*virtual*/ void onMediaTitleChange(const EventType& event_in); | ||
83 | private: | ||
84 | LLMediaBase* mMediaSource; | ||
85 | }; | ||
86 | |||
87 | static LLTitleObserver sTitleObserver; | ||
88 | |||
89 | static LLRegisterWidget<LLMediaRemoteCtrl> r("media_remote"); | ||
90 | |||
91 | void 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 | ||
108 | void 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)" |