void UserVideoWidget::slotNewVideoFrame(int userid, int /*stream_id*/)
{
    Q_ASSERT(userid & VIDEOTYPE_MASK);

    if(m_userid != userid)
        return;

    m_novideo_count = 0;

#ifndef USE_TT_PAINT
    bool modified = false;
    //drain frames (we don't want any queued frames)
    while(true)
    {
#if USE_VIDEO_SHAREDMEM_ZEROCOPY
        //Zero-Copy (shared mem).
        //Use memory allocated by TeamTalk DLL as raw input to QImage

        VideoFrame* vid_frame = acquireVideo();
        if(vid_frame)
        {
            releaseVideo(m_video_frame);
            m_video_frame = vid_frame;
            m_image = QImage(static_cast<uchar*>(m_video_frame->frameBuffer),
                             m_video_frame->nWidth, m_video_frame->nHeight,
                             QImage::Format_RGB32);
            if(m_mirrored)
                m_image = m_image.mirrored(true, true);
        }
        else break;
#else
        if(m_video_frame)
            releaseVideo(m_video_frame);
        m_video_frame = NULL;

        VideoFrame* vid_frame = acquireVideo();
        if(vid_frame)
        {
            m_image = QImage(vid_frame->nWidth, vid_frame->nHeight,
                             QImage::Format_RGB32);
            Q_ASSERT(vid_frame->nFrameBufferSize == m_image.byteCount());
            memcpy(m_image.bits(), vid_frame->frameBuffer,
                   vid_frame->nFrameBufferSize);
            releaseVideo(vid_frame);
            if(m_mirrored)
                m_image = m_image.mirrored(true, true);
        }
        else break;
#endif
        modified = true;
    }

    if(modified)
        update();
#else
    Q_UNUSED(frame_count);
    update();
#endif
}
void UserVideoWidget::runTTPaint(QPainter& painter)
{
    HDC hdc = painter.paintEngine()->getDC();
    QPoint p0 = this->mapTo(nativeParentWidget(), QPoint(0,0));
    //drain frames (we don't want any queued frames)

    VideoFrame* vid_frame = NULL;
    while(vid_frame = acquireVideo())
    {
        releaseVideo(m_video_frame);
        m_video_frame = vid_frame;
    }
    if(m_video_frame)
        TT_PaintVideoFrame(hdc, p0.x(), p0.y(), width(), height(), m_video_frame);
    painter.paintEngine()->releaseDC(hdc);
}
Beispiel #3
0
int showMsg(u8* msg) {
	if (!allowDirectScreenAccess) {
		return;
	}
	acquireVideo();


	while(1) {
		blank(0, 0, 320, 240);
		print(msg, 10, 10, 255, 0, 0);
		print("Press [B] to close.", 10, 220, 0, 0, 255);
		updateScreen();
		u32 key = waitKey();
		if (key == BUTTON_B) {
			break;
		}
	}
	releaseVideo();
	return 0;
}
UserVideoWidget::UserVideoWidget(QWidget * parent, int userid,
                                 int border_width)
  : UserImageWidget(parent, userid, true, border_width)
  , m_novideo_count(0)
  , m_showvidtext(false)
{
    Q_ASSERT(userid & VIDEOTYPE_MASK);

    slotUpdateVideoTextBox();
    startTimer(1000);

    User user;
    TT_GetUser(ttInst, m_userid & VIDEOTYPE_USERMASK, &user);

    if(userid & VIDEOTYPE_CAPTURE)
    {
        if((userid & VIDEOTYPE_USERMASK) == 0)
            m_textmsg = tr("Waiting for local video");
        else
            m_textmsg = tr("Waiting for video from %1").arg(getDisplayName(user));
    }

    if(userid & VIDEOTYPE_MEDIAFILE)
        m_textmsg = tr("Waiting for media file from %1").arg(getDisplayName(user));

    m_video_frame = acquireVideo();

#if !defined(USE_TT_PAINT) && !USE_VIDEO_SHAREDMEM_ZEROCOPY
    if(m_video_frame)
    {
        m_image = QImage(m_video_frame->nWidth, m_video_frame->nHeight,
                         QImage::Format_RGB32);
        if(m_mirrored)
            m_image = m_image.mirrored(true, true);
    }
#endif
}