Hi here,
I'm looking for a way to render subtitle file with video playback in 
qt-mobility. I found that qt-mobility is lack of subtitle/APIs support.
Qt-mobility is using gstream playbin as the back-end of media player, but the 
subtitle functions haven't been enabled.
I made a simple patch to enable gstreamer plug-in to find and render the 
subtitle file which has same name as the media file automatically.

------------------------------------------------------------------------------------------------------------------------------------------------------------------

diff --git 
a/plugins/multimedia/gstreamer/mediaplayer/qgstreamerplayercontrol.cpp 
b/plugins/multimedia/gstreamer/mediaplayer/qgstreamerplayercontrol.cpp
index 58ba160..7510be6 100644
--- a/plugins/multimedia/gstreamer/mediaplayer/qgstreamerplayercontrol.cpp
+++ b/plugins/multimedia/gstreamer/mediaplayer/qgstreamerplayercontrol.cpp
@@ -286,7 +286,7 @@ void QGstreamerPlayerControl::setMedia(const QMediaContent 
&content, QIODevice *
     m_seekToStartPending = false;

     QUrl url;
-
+
     if (m_stream) {
         if (m_stream->isReadable() && openFifo()) {
             url = QUrl(QString(QLatin1String("fd://%1")).arg(m_fifoFd[0]));
@@ -296,7 +296,7 @@ void QGstreamerPlayerControl::setMedia(const QMediaContent 
&content, QIODevice *
     }

     m_session->load(url);
-
+
     if (m_fifoFd[1] >= 0) {
         m_fifoCanWrite = true;

@@ -304,6 +304,20 @@ void QGstreamerPlayerControl::setMedia(const QMediaContent 
&content, QIODevice *
     }

     if (!url.isEmpty()) {
+        QString subtitle_file = ".srt";
+        QFileInfo fi(url.toLocalFile ());
+       subtitle_file.prepend(fi.baseName());
+        subtitle_file.prepend("/");
+        subtitle_file.prepend(fi.absolutePath());
+
+        QFile file(subtitle_file);
+        if (file.exists()) {
+            subtitle_file.prepend("file://");
+            m_session->set_sub_encoding("UTF");
+            m_session->set_sub_font_desc("san bold 20");
+            m_session->load_subtitle(QUrl(subtitle_file));
+       }
+
         if (m_mediaStatus != QMediaPlayer::LoadingMedia)
             emit mediaStatusChanged(m_mediaStatus = 
QMediaPlayer::LoadingMedia);
         m_session->pause();
diff --git 
a/plugins/multimedia/gstreamer/mediaplayer/qgstreamerplayersession.cpp 
b/plugins/multimedia/gstreamer/mediaplayer/qgstreamerplayersession.cpp
index 942a8ba..5c6aa77 100644
--- a/plugins/multimedia/gstreamer/mediaplayer/qgstreamerplayersession.cpp
+++ b/plugins/multimedia/gstreamer/mediaplayer/qgstreamerplayersession.cpp
@@ -151,6 +151,26 @@ void QGstreamerPlayerSession::load(const QUrl &url)
     }
 }

+
+void QGstreamerPlayerSession::load_subtitle(const QUrl &url)
+{
+    m_url = url;
+
+    if (m_playbin)
+        g_object_set(G_OBJECT(m_playbin), "suburi", 
m_url.toEncoded().constData(), NULL);
+}
+
+
+void QGstreamerPlayerSession::set_sub_encoding(const QString &encoding_String) 
{
+   if (m_playbin)
+       g_object_set(G_OBJECT(m_playbin), "subtitle-encoding", 
encoding_String.toLatin1().constData(), NULL);
+ }
+
+void QGstreamerPlayerSession::set_sub_font_desc(const QString 
&font_desc_String) {
+   if (m_playbin)
+       g_object_set(G_OBJECT(m_playbin), "subtitle-font-desc", 
font_desc_String.toLatin1().constData(), NULL);
+}
+
 qint64 QGstreamerPlayerSession::duration() const
 {
     return m_duration;
diff --git a/plugins/multimedia/gstreamer/mediaplayer/qgstreamerplayersession.h 
b/plugins/multimedia/gstreamer/mediaplayer/qgstreamerplayersession.h
index 17f17bd..9550f38 100644
--- a/plugins/multimedia/gstreamer/mediaplayer/qgstreamerplayersession.h
+++ b/plugins/multimedia/gstreamer/mediaplayer/qgstreamerplayersession.h
@@ -102,6 +102,9 @@ public:

 public slots:
     void load(const QUrl &url);
+    void load_subtitle(const QUrl &url);
+   void set_sub_encoding(const QString &encoding_String);
+   void set_sub_font_desc(const QString &font_desc_String);

     bool play();
     bool pause();

------------------------------------------------------------------------------------------------------------------------------------------------------------------

I think the right way is to let QMediaplayer support subtitle APIs like, 
set_subtitle(), set_subtitle_encoding() and set_subtitle_font(), the 
application could have fully control of subtitle.
Any suggestion?
Jacob
_______________________________________________
Qt-mobility-feedback mailing list
[email protected]
http://lists.trolltech.com/mailman/listinfo/qt-mobility-feedback

Reply via email to