aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/linden/indra/llmedia
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/indra/llmedia
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/indra/llmedia')
-rw-r--r--linden/indra/llmedia/llmediaimplgstreamer.cpp46
-rw-r--r--linden/indra/llmedia/llmediaimplgstreamer.h1
-rw-r--r--linden/indra/llmedia/llmediaobserver.h1
3 files changed, 35 insertions, 13 deletions
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 ) { }