QXAMediaStreamsControl::QXAMediaStreamsControl(QXAPlaySession *session, QObject *parent) :QMediaStreamsControl(parent), mSession(session) { QT_TRACE_FUNCTION_ENTRY; connect(mSession, SIGNAL(activeStreamsChanged()), this, SIGNAL(activeStreamsChanged())); connect(mSession, SIGNAL(streamsChanged()), this, SIGNAL(streamsChanged())); QT_TRACE_FUNCTION_EXIT; }
void StreamsMenuWrapper::storeMenu(QMenu* menu) { mMenu = menu; //can't be done in the constructor connect (SettingsManager::getSettingsManager(), SIGNAL(streamsChanged()), this, SLOT(rebuildMenu())); rebuildMenu(); }
void SettingsManager::replaceAudioStreams(const std::vector<std::pair<QString, QUrl>>& streams) { mAudioStreams = streams; mSettings.remove("Streams"); mSettings.beginGroup("Streams"); int i = 0; for (auto it(mAudioStreams.begin()); it != mAudioStreams.end(); ++it) { mSettings.setValue(QString(i), it->first); ++i; mSettings.setValue(QString(i), it->second); ++i; } mSettings.endGroup(); emit streamsChanged(); }
void QGstreamerPlayerSession::load(const QNetworkRequest &request) { m_request = request; if (m_playbin) { m_tags.clear(); emit tagsChanged(); g_object_set(G_OBJECT(m_playbin), "uri", m_request.url().toEncoded().constData(), NULL); if (!m_streamTypes.isEmpty()) { m_streamProperties.clear(); m_streamTypes.clear(); emit streamsChanged(); } } }
void QGstreamerPlayerSession::getStreamsInfo() { GstFormat format = GST_FORMAT_TIME; gint64 duration = 0; if (gst_element_query_duration(m_playbin, &format, &duration)) { int newDuration = duration / 1000000; if (m_duration != newDuration) { m_duration = newDuration; emit durationChanged(m_duration); } } //check if video is available: bool haveAudio = false; bool haveVideo = false; m_streamProperties.clear(); m_streamTypes.clear(); if (m_usePlaybin2) { gint audioStreamsCount = 0; gint videoStreamsCount = 0; gint textStreamsCount = 0; g_object_get(G_OBJECT(m_playbin), "n-audio", &audioStreamsCount, NULL); g_object_get(G_OBJECT(m_playbin), "n-video", &videoStreamsCount, NULL); g_object_get(G_OBJECT(m_playbin), "n-text", &textStreamsCount, NULL); haveAudio = audioStreamsCount > 0; haveVideo = videoStreamsCount > 0; m_playbin2StreamOffset[QMediaStreamsControl::AudioStream] = 0; m_playbin2StreamOffset[QMediaStreamsControl::VideoStream] = audioStreamsCount; m_playbin2StreamOffset[QMediaStreamsControl::SubPictureStream] = audioStreamsCount+videoStreamsCount; for (int i=0; i<audioStreamsCount; i++) m_streamTypes.append(QMediaStreamsControl::AudioStream); for (int i=0; i<videoStreamsCount; i++) m_streamTypes.append(QMediaStreamsControl::VideoStream); for (int i=0; i<textStreamsCount; i++) m_streamTypes.append(QMediaStreamsControl::SubPictureStream); for (int i=0; i<m_streamTypes.count(); i++) { QMediaStreamsControl::StreamType streamType = m_streamTypes[i]; QMap<QtMultimediaKit::MetaData, QVariant> streamProperties; int streamIndex = i - m_playbin2StreamOffset[streamType]; GstTagList *tags = 0; switch (streamType) { case QMediaStreamsControl::AudioStream: g_signal_emit_by_name(G_OBJECT(m_playbin), "get-audio-tags", streamIndex, &tags); break; case QMediaStreamsControl::VideoStream: g_signal_emit_by_name(G_OBJECT(m_playbin), "get-video-tags", streamIndex, &tags); break; case QMediaStreamsControl::SubPictureStream: g_signal_emit_by_name(G_OBJECT(m_playbin), "get-text-tags", streamIndex, &tags); break; default: break; } if (tags && gst_is_tag_list(tags)) { gchar *languageCode = 0; if (gst_tag_list_get_string(tags, GST_TAG_LANGUAGE_CODE, &languageCode)) streamProperties[QtMultimediaKit::Language] = QString::fromUtf8(languageCode); //qDebug() << "language for setream" << i << QString::fromUtf8(languageCode); g_free (languageCode); } 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* streamInfo; g_object_get(G_OBJECT(m_playbin), "stream-info", &streamInfo, NULL); for (; streamInfo != 0; streamInfo = g_list_next(streamInfo)) { gint type; gchar *languageCode = 0; GObject* obj = G_OBJECT(streamInfo->data); g_object_get(obj, "type", &type, NULL); g_object_get(obj, "language-code", &languageCode, NULL); if (type == GST_STREAM_TYPE_VIDEO) haveVideo = true; 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; default: streamType = QMediaStreamsControl::UnknownStream; break; } QMap<QtMultimediaKit::MetaData, QVariant> streamProperties; streamProperties[QtMultimediaKit::Language] = QString::fromUtf8(languageCode); m_streamProperties.append(streamProperties); m_streamTypes.append(streamType); } } if (haveAudio != m_audioAvailable) { m_audioAvailable = haveAudio; emit audioAvailableChanged(m_audioAvailable); } if (haveVideo != m_videoAvailable) { m_videoAvailable = haveVideo; emit videoAvailableChanged(m_videoAvailable); } emit streamsChanged(); }
QGstreamerStreamsControl::QGstreamerStreamsControl(QGstreamerPlayerSession *session, QObject *parent) :QMediaStreamsControl(parent), m_session(session) { connect(m_session, SIGNAL(streamsChanged()), SIGNAL(streamsChanged())); }