GStreamer player session: remove code for old playbin.

We only support 'playbin2'.

Change-Id: Ibe35f71377862cb83742c2f9b606c5e2fdd5199d
Reviewed-by: Dmytro Poplavskiy <dmytro.poplavskiy@nokia.com>
This commit is contained in:
Lev Zelenskiy
2012-05-11 15:42:04 +10:00
committed by Qt by Nokia
parent db9a6de400
commit 8ce488249e
2 changed files with 49 additions and 147 deletions

View File

@@ -60,10 +60,6 @@
#include <QtCore/qdir.h>
#include <QtCore/qstandardpaths.h>
#if defined(Q_WS_MAEMO_6) || (GST_VERSION_MICRO > 20)
#define USE_PLAYBIN2
#endif
//#define DEBUG_PLAYBIN
//#define DEBUG_VO_BIN_DUMP
@@ -87,7 +83,6 @@ QGstreamerPlayerSession::QGstreamerPlayerSession(QObject *parent)
m_pendingState(QMediaPlayer::StoppedState),
m_busHelper(0),
m_playbin(0),
m_usePlaybin2(false),
m_usingColorspaceElement(false),
m_videoSink(0),
m_pendingVideoSink(0),
@@ -120,13 +115,9 @@ QGstreamerPlayerSession::QGstreamerPlayerSession(QObject *parent)
gboolean result = gst_type_find_register(0, "playlist", GST_RANK_MARGINAL, playlistTypeFindFunction, 0, 0, this, 0);
Q_ASSERT(result == TRUE);
#ifdef USE_PLAYBIN2
m_playbin = gst_element_factory_make("playbin2", NULL);
#endif
if (m_playbin) {
m_usePlaybin2 = true;
//GST_PLAY_FLAG_NATIVE_VIDEO omits configuration of ffmpegcolorspace and videoscale,
//since those elements are included in the video output bin when necessary.
#ifdef Q_WS_MAEMO_6
@@ -144,9 +135,6 @@ QGstreamerPlayerSession::QGstreamerPlayerSession(QObject *parent)
g_object_set(G_OBJECT(m_playbin), "audio-sink", m_audioSink, NULL);
addAudioBufferProbe();
}
} else {
m_usePlaybin2 = false;
m_playbin = gst_element_factory_make("playbin", NULL);
}
m_videoOutputBin = gst_bin_new("video-output-bin");
@@ -186,7 +174,6 @@ QGstreamerPlayerSession::QGstreamerPlayerSession(QObject *parent)
g_object_set(G_OBJECT(m_playbin), "mute", FALSE, NULL);
g_signal_connect(G_OBJECT(m_playbin), "notify::volume", G_CALLBACK(handleVolumeChange), this);
if (m_usePlaybin2)
g_signal_connect(G_OBJECT(m_playbin), "notify::mute", G_CALLBACK(handleMutedChange), this);
g_signal_connect(G_OBJECT(m_playbin), "video-changed", G_CALLBACK(handleStreamsChange), this);
@@ -386,7 +373,7 @@ int QGstreamerPlayerSession::activeStream(QMediaStreamsControl::StreamType strea
}
}
if (m_usePlaybin2 && streamNumber >= 0)
if (streamNumber >= 0)
streamNumber += m_playbin2StreamOffset.value(streamType,0);
return streamNumber;
@@ -398,7 +385,7 @@ void QGstreamerPlayerSession::setActiveStream(QMediaStreamsControl::StreamType s
qDebug() << Q_FUNC_INFO << streamType << streamNumber;
#endif
if (m_usePlaybin2 && streamNumber >= 0)
if (streamNumber >= 0)
streamNumber -= m_playbin2StreamOffset.value(streamType,0);
if (m_playbin) {
@@ -911,8 +898,6 @@ void QGstreamerPlayerSession::setVolume(int volume)
if (m_playbin) {
//playbin2 allows to set volume and muted independently,
//with playbin1 it's necessary to keep volume at 0 while muted
if (!m_muted || m_usePlaybin2)
g_object_set(G_OBJECT(m_playbin), "volume", m_volume/100.0, NULL);
}
@@ -928,11 +913,7 @@ void QGstreamerPlayerSession::setMuted(bool muted)
if (m_muted != muted) {
m_muted = muted;
if (m_usePlaybin2)
g_object_set(G_OBJECT(m_playbin), "mute", m_muted ? TRUE : FALSE, NULL);
else
g_object_set(G_OBJECT(m_playbin), "volume", (m_muted ? 0 : m_volume/100.0), NULL);
emit mutedStateChanged(m_muted);
}
}
@@ -1199,7 +1180,7 @@ bool QGstreamerPlayerSession::processBusMessage(const QGstreamerMessage &message
&& (err->code == GST_STREAM_ERROR_DECRYPT || err->code == GST_STREAM_ERROR_DECRYPT_NOKEY)) {
processInvalidMedia(QMediaPlayer::AccessDeniedError, QString::fromUtf8(err->message));
} else {
handlePlaybin2 = m_usePlaybin2;
handlePlaybin2 = true;
}
if (!handlePlaybin2)
qWarning() << "Error:" << QString::fromUtf8(err->message);
@@ -1214,7 +1195,7 @@ bool QGstreamerPlayerSession::processBusMessage(const QGstreamerMessage &message
processInvalidMedia(m_everPlayed ? QMediaPlayer::NetworkError : QMediaPlayer::ResourceError,
tr("UDP source timeout"));
} else {
handlePlaybin2 = m_usePlaybin2;
handlePlaybin2 = true;
}
if (handlePlaybin2) {
@@ -1271,7 +1252,6 @@ void QGstreamerPlayerSession::getStreamsInfo()
m_streamTypes.clear();
m_playbin2StreamOffset.clear();
if (m_usePlaybin2) {
gint audioStreamsCount = 0;
gint videoStreamsCount = 0;
gint textStreamsCount = 0;
@@ -1329,68 +1309,6 @@ void QGstreamerPlayerSession::getStreamsInfo()
m_streamProperties.append(streamProperties);
}
} else { // PlayBin 1
enum {
GST_STREAM_TYPE_UNKNOWN,
GST_STREAM_TYPE_AUDIO,
GST_STREAM_TYPE_VIDEO,
GST_STREAM_TYPE_TEXT,
GST_STREAM_TYPE_SUBPICTURE,
GST_STREAM_TYPE_ELEMENT
};
GList* streamInfoList;
g_object_get(G_OBJECT(m_playbin), "stream-info", &streamInfoList, NULL);
for (; streamInfoList != 0; streamInfoList = g_list_next(streamInfoList)) {
gint type;
gchar *languageCode = 0;
GObject* streamInfo = G_OBJECT(streamInfoList->data);
g_object_get(streamInfo, "type", &type, NULL);
g_object_get(streamInfo, "language-code", &languageCode, NULL);
QMediaStreamsControl::StreamType streamType = QMediaStreamsControl::UnknownStream;
switch (type) {
case GST_STREAM_TYPE_VIDEO:
streamType = QMediaStreamsControl::VideoStream;
haveVideo = true;
break;
case GST_STREAM_TYPE_AUDIO:
streamType = QMediaStreamsControl::AudioStream;
haveAudio = true;
break;
case GST_STREAM_TYPE_SUBPICTURE:
streamType = QMediaStreamsControl::SubPictureStream;
break;
case GST_STREAM_TYPE_UNKNOWN: {
GstCaps *caps = 0;
g_object_get(streamInfo, "caps", &caps, NULL);
const GstStructure *structure = gst_caps_get_structure(caps, 0);
const gchar *media_type = gst_structure_get_name(structure);
emit error(int(QMediaPlayer::FormatError), QString::fromLatin1("Cannot play stream of type: %1").arg(QString::fromUtf8(media_type)));
#ifdef DEBUG_PLAYBIN
qDebug() << "Encountered unknown stream type";
#endif
gst_caps_unref(caps);
streamType = QMediaStreamsControl::UnknownStream;
break;
}
default:
streamType = QMediaStreamsControl::UnknownStream;
break;
}
QMap<QString, QVariant> streamProperties;
streamProperties[QtMultimedia::MetaData::Language] = QString::fromUtf8(languageCode);
m_streamProperties.append(streamProperties);
m_streamTypes.append(streamType);
}
}
bool emitAudioChanged = (haveAudio != m_audioAvailable);
bool emitVideoChanged = (haveVideo != m_videoAvailable);
@@ -1600,21 +1518,6 @@ void QGstreamerPlayerSession::updateVolume()
double volume = 1.0;
g_object_get(m_playbin, "volume", &volume, NULL);
//special case for playbin1 volume changes in muted state
//playbin1 has no separate muted state,
//it's emulated with volume value saved and set to 0
//this change should not be reported to user
if (!m_usePlaybin2 && m_muted) {
if (volume > 0.001) {
//volume is changed, player in not muted any more
m_muted = false;
emit mutedStateChanged(m_muted = false);
} else {
//don't emit volume changed to 0 when player is muted
return;
}
}
if (m_volume != int(volume*100 + 0.5)) {
m_volume = int(volume*100 + 0.5);
#ifdef DEBUG_PLAYBIN

View File

@@ -199,7 +199,6 @@ private:
QMediaPlayer::State m_pendingState;
QGstreamerBusHelper* m_busHelper;
GstElement* m_playbin;
bool m_usePlaybin2;
GstElement* m_videoOutputBin;
GstElement* m_videoIdentity;