diff options
Diffstat (limited to '')
-rw-r--r-- | linden/indra/llmedia/llmediaimplgstreamer.cpp | 46 |
1 files changed, 33 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 |