introduce new iStreamedService interface (e.g. controlling buffer for streaming media)
[vuplus_dvbapp] / lib / service / servicemp3.cpp
index fd3587a..2ddfe92 100644 (file)
@@ -196,6 +196,7 @@ eServiceMP3::eServiceMP3(const char *filename, const char *title): m_filename(fi
        m_currentSubtitleStream = 0;
        m_subtitle_widget = 0;
        m_currentTrickRatio = 0;
+       m_buffer_size = 1*1024*1024;
        CONNECT(m_seekTimeout->timeout, eServiceMP3::seekTimeoutCB);
        CONNECT(m_subtitle_sync_timer->timeout, eServiceMP3::pushSubtitles);
        CONNECT(m_pump.recv_msg, eServiceMP3::gstPoll);
@@ -332,6 +333,7 @@ eServiceMP3::eServiceMP3(const char *filename, const char *title): m_filename(fi
        }
 
        gst_element_set_state (m_gst_playbin, GST_STATE_PLAYING);
+       setBufferSize(m_buffer_size);
 }
 
 eServiceMP3::~eServiceMP3()
@@ -1214,6 +1216,14 @@ eDebug("AUDIO STRUCT=%s", g_type);
                                        g_free(eventname);
                                }
                        }
+                       break;
+               }
+               case GST_MESSAGE_BUFFERING:
+               {
+                       GstBufferingMode mode;
+                       gst_message_parse_buffering(msg, &(m_bufferInfo.bufferPercent));
+                       gst_message_parse_buffering_stats(msg, &mode, &(m_bufferInfo.avgInRate), &(m_bufferInfo.avgOutRate), &(m_bufferInfo.bufferingLeft));
+                       m_event((iPlayableService*)this, evBuffering);
                }
                default:
                        break;
@@ -1401,6 +1411,7 @@ RESULT eServiceMP3::disableSubtitles(eWidget *parent)
 
 PyObject *eServiceMP3::getCachedSubtitle()
 {
+//     eDebug("eServiceMP3::getCachedSubtitle");
        Py_RETURN_NONE;
 }
 
@@ -1429,6 +1440,31 @@ PyObject *eServiceMP3::getSubtitleList()
        return l;
 }
 
+RESULT eServiceMP3::streamed(ePtr<iStreamedService> &ptr)
+{
+       ptr = this;
+       return 0;
+}
+
+PyObject *eServiceMP3::getBufferCharge()
+{
+       ePyObject tuple = PyTuple_New(5);
+       PyTuple_SET_ITEM(tuple, 0, PyInt_FromLong(m_bufferInfo.bufferPercent));
+       PyTuple_SET_ITEM(tuple, 1, PyInt_FromLong(m_bufferInfo.avgInRate));
+       PyTuple_SET_ITEM(tuple, 2, PyInt_FromLong(m_bufferInfo.avgOutRate));
+       PyTuple_SET_ITEM(tuple, 3, PyInt_FromLong(m_bufferInfo.bufferingLeft));
+       PyTuple_SET_ITEM(tuple, 4, PyInt_FromLong(m_buffer_size));
+       return tuple;
+}
+
+int eServiceMP3::setBufferSize(int size)
+{
+       m_buffer_size = size;
+       g_object_set (G_OBJECT (m_gst_playbin), "buffer-size", m_buffer_size, NULL);
+       return 0;
+}
+
+
 #else
 #warning gstreamer not available, not building media player
 #endif