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); }
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 }