aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/linden/indra/llmedia/llmediaimplgstreamer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'linden/indra/llmedia/llmediaimplgstreamer.cpp')
-rw-r--r--linden/indra/llmedia/llmediaimplgstreamer.cpp39
1 files changed, 26 insertions, 13 deletions
diff --git a/linden/indra/llmedia/llmediaimplgstreamer.cpp b/linden/indra/llmedia/llmediaimplgstreamer.cpp
index d1bab29..a9e0004 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,28 @@ 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
530 gboolean hazArtist = gst_tag_list_get_string(tag_list, 533 if ( gst_tag_list_get_string(new_tags, GST_TAG_TITLE, &title) )
531 GST_TAG_ARTIST, &artist); 534 {
532 if(hazTitle) 535 LL_INFOS("MediaInfo") << "Title: " << title << LL_ENDL;
533 LL_INFOS("MediaInfo") << "Title: " << title << LL_ENDL; 536 std::string newtitle(title);
534 if(hazArtist) 537 gst_tag_list_free(new_tags);
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
536 break; 549 break;
537 } 550 }
538 case GST_MESSAGE_EOS: 551 case GST_MESSAGE_EOS:
@@ -551,10 +564,10 @@ gboolean LLMediaImplGStreamer::bus_callback(GstBus *bus, GstMessage *message, gp
551 impl->addCommand(LLMediaBase::COMMAND_STOP); 564 impl->addCommand(LLMediaBase::COMMAND_STOP);
552 } 565 }
553 break; 566 break;
567 }
554 default: 568 default:
555 /* unhandled message */ 569 /* unhandled message */
556 break; 570 break;
557 }
558 } 571 }
559 /* we want to be notified again the next time there is a message 572 /* 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 573 * on the bus, so return true (false means we want to stop watching