AudioTrackPrivateGStreamer.cpp [plain text]
#include "config.h"
#if ENABLE(VIDEO) && USE(GSTREAMER) && ENABLE(VIDEO_TRACK)
#include "AudioTrackPrivateGStreamer.h"
#include "MediaPlayerPrivateGStreamer.h"
#include <glib-object.h>
namespace WebCore {
AudioTrackPrivateGStreamer::AudioTrackPrivateGStreamer(WeakPtr<MediaPlayerPrivateGStreamer> player, gint index, GRefPtr<GstPad> pad)
: TrackPrivateBaseGStreamer(this, index, pad)
, m_player(player)
{
m_id = "A" + String::number(index);
notifyTrackOfActiveChanged();
}
#if GST_CHECK_VERSION(1, 10, 0)
AudioTrackPrivateGStreamer::AudioTrackPrivateGStreamer(WeakPtr<MediaPlayerPrivateGStreamer> player, gint index, GRefPtr<GstStream> stream)
: TrackPrivateBaseGStreamer(this, index, stream)
, m_player(player)
{
gint kind;
auto tags = gst_stream_get_tags(m_stream.get());
if (gst_tag_list_get_int(tags, "webkit-media-stream-kind", &kind) && kind == static_cast<int>(VideoTrackPrivate::Kind::Main)) {
GstStreamFlags streamFlags = gst_stream_get_stream_flags(stream.get());
gst_stream_set_stream_flags(stream.get(), static_cast<GstStreamFlags>(streamFlags | GST_STREAM_FLAG_SELECT));
}
m_id = gst_stream_get_stream_id(stream.get());
if (gst_stream_get_stream_flags(stream.get()) & GST_STREAM_FLAG_SELECT)
markAsActive();
notifyTrackOfActiveChanged();
}
AudioTrackPrivate::Kind AudioTrackPrivateGStreamer::kind() const
{
if (m_stream.get() && gst_stream_get_stream_flags(m_stream.get()) & GST_STREAM_FLAG_SELECT)
return AudioTrackPrivate::Kind::Main;
return AudioTrackPrivate::kind();
}
#endif
void AudioTrackPrivateGStreamer::disconnect()
{
m_player = nullptr;
TrackPrivateBaseGStreamer::disconnect();
}
void AudioTrackPrivateGStreamer::markAsActive()
{
AudioTrackPrivate::setEnabled(true);
}
void AudioTrackPrivateGStreamer::setEnabled(bool enabled)
{
if (enabled == this->enabled())
return;
AudioTrackPrivate::setEnabled(enabled);
if (enabled && m_player)
m_player->enableTrack(TrackPrivateBaseGStreamer::TrackType::Audio, m_index);
}
}
#endif // ENABLE(VIDEO) && USE(GSTREAMER) && ENABLE(VIDEO_TRACK)