JtvLiveUiTabParams::JtvLiveUiTabParams(JtvLiveChannel *live_channel, QWidget *parent) :
    QWidget(parent)
{
    p_live_channel = live_channel;

    lne_rtmp = new QLineEdit;
    lab_rtmp = new QLabel("RTMP (-r)");
    lab_rtmp->setBuddy(lne_rtmp);

    lne_swf = new QLineEdit;
    lab_swf = new QLabel("SWF (-s)");
    lab_swf->setBuddy(lne_swf);

    lne_swf_vfy = new QLineEdit;
    lab_swf_vfy = new QLabel("SWF verif (-W)");
    lab_swf_vfy->setBuddy(lne_swf_vfy);

    lne_web = new QLineEdit;
    lab_web = new QLabel("Web page (-p)");
    lab_web->setBuddy(lne_web);

    lne_usher_token = new QLineEdit;
    lab_usher_token = new QLabel("UsherToken (-j)");
    lab_usher_token->setBuddy(lne_usher_token);

    fra_separator = new QFrame;
    fra_separator->setFrameShape(QFrame::HLine);
    fra_separator->setFrameShadow(QFrame::Sunken);

    lab_cli = new QLabel("Command line input firendly :");
    pte_cli = new QPlainTextEdit;
    pte_cli->setReadOnly(true);

    //Layout
    layout = new QGridLayout;
    layout->addWidget(lab_rtmp, 0, 0);
    layout->addWidget(lne_rtmp, 0, 1);
    layout->addWidget(lab_swf, 1, 0);
    layout->addWidget(lne_swf, 1, 1);
    layout->addWidget(lab_swf_vfy, 2, 0);
    layout->addWidget(lne_swf_vfy, 2, 1);
    layout->addWidget(lab_web, 3, 0);
    layout->addWidget(lne_web, 3, 1);
    layout->addWidget(lab_usher_token, 4, 0);
    layout->addWidget(lne_usher_token, 4, 1);
    layout->addWidget(fra_separator, 5, 0, 1, 2);
    layout->addWidget(lab_cli, 6, 0, 1, 2);
    layout->addWidget(pte_cli, 7, 0, 1, 2);

    setLayout(layout);

    connect(lne_rtmp, SIGNAL(textEdited(const QString &)), p_live_channel, SLOT(setStreamRtmp(const QString &)));
    connect(lne_swf, SIGNAL(textEdited(const QString &)), p_live_channel, SLOT(setStreamSwf(const QString &)));
    connect(lne_swf_vfy, SIGNAL(textEdited(const QString &)), p_live_channel, SLOT(setStreamSwfVfy(const QString &)));
    connect(lne_web, SIGNAL(textEdited(const QString &)), p_live_channel, SLOT(setStreamWeb(const QString &)));
    connect(lne_usher_token, SIGNAL(textEdited(const QString &)), p_live_channel, SLOT(setStreamUsherToken(const QString &)));
    connect(p_live_channel, SIGNAL(streamChanged()), this, SLOT(setParams()));
    connect(p_live_channel, SIGNAL(paramsChanged()), this, SLOT(updateCli()));
}
void WatcherStreamListDialog::selectStream(QTreeWidgetItem *item, int /* column */)
{
    TRACE_ENTER();
    unsigned long uid = item->text(0).toULong();
    LOG_DEBUG("Switching to stream uid " << uid);
    emit streamChanged(uid);
    hide();
    TRACE_EXIT();
}
void WatcherStreamListDialog::selectStream()
{
    TRACE_ENTER();
    QTreeWidgetItem *item = treeWidget->currentItem();
    if (item) {
	unsigned long uid = item->text(0).toULong();
	LOG_DEBUG("Switching to stream uid " << uid);
	emit streamChanged(uid);
    }
    hide();
    TRACE_EXIT();
}
InbandTextTrackPrivateGStreamer::InbandTextTrackPrivateGStreamer(gint index, GRefPtr<GstPad> pad)
    : InbandTextTrackPrivate(WebVTT)
    , m_index(index)
    , m_pad(pad)
    , m_sampleTimerHandler(0)
    , m_streamTimerHandler(0)
    , m_tagTimerHandler(0)
{
    ASSERT(m_pad);
    m_eventProbe = gst_pad_add_probe(m_pad.get(), GST_PAD_PROBE_TYPE_EVENT_DOWNSTREAM,
        reinterpret_cast<GstPadProbeCallback>(textTrackPrivateEventCallback), this, 0);

    /* We want to check these in case we got events before the track was created */
    streamChanged();
    tagsChanged();
}
void TrackedStream::setVideoSource(const VideoSourcePtr &videoSource)
{
	if(mVideoSource)
	{
		disconnect(mVideoSource.get(), &VideoSource::newFrame, this, &TrackedStream::newFrame);
		disconnect(mVideoSource.get(), &VideoSource::streaming, this, &TrackedStream::streaming);
	}

	mVideoSource = videoSource;
	emit streamChanged(this->getUid());
	emit newVideoSource(mVideoSource);

	if(mVideoSource)
	{
		connect(mVideoSource.get(), &VideoSource::newFrame, this, &TrackedStream::newFrameSlot);
		connect(mVideoSource.get(), &VideoSource::streaming, this, &TrackedStream::streaming);
	}
}