AkCaps VideoStream::caps() const { AkVideoCaps caps; caps.isValid() = true; caps.format() = AkVideoCaps::Format_rgb24; caps.bpp() = AkVideoCaps::bitsPerPixel(caps.format()); caps.width() = this->codecContext()->width; caps.height() = this->codecContext()->height; caps.fps() = this->fps(); return caps.toCaps(); }
void DesktopCaptureElement::readFrame() { QScreen *screen = QGuiApplication::screens()[this->m_curScreenNumber]; AkFrac fps(30000, 1001); AkVideoCaps caps; caps.isValid() = true; caps.format() = AkVideoCaps::Format_rgb24; caps.bpp() = AkVideoCaps::bitsPerPixel(caps.format()); caps.width() = screen->size().width(); caps.height() = screen->size().height(); caps.fps() = fps; QPixmap frame = screen->grabWindow(QApplication::desktop()->winId()); QImage frameImg= frame.toImage().convertToFormat(QImage::Format_RGB888); AkPacket packet = AkUtils::imageToPacket(frameImg, caps.toCaps()); if (!packet) return; qint64 pts = qint64(QTime::currentTime().msecsSinceStartOfDay() * fps.value() / 1e3); packet.setPts(pts); packet.setTimeBase(fps.invert()); packet.setIndex(0); packet.setId(this->m_id); if (!this->m_threadedRead) { emit this->oStream(packet); return; } if (!this->m_threadStatus.isRunning()) { this->m_curPacket = packet; this->m_threadStatus = QtConcurrent::run(&this->m_threadPool, this->sendPacket, this, this->m_curPacket); } }
AkCaps DesktopCaptureElement::caps(int stream) const { if (this->m_curScreenNumber < 0 || stream != 0) return AkCaps(); QScreen *screen = QGuiApplication::screens()[this->m_curScreenNumber]; if (!screen) return QString(); AkVideoCaps caps; caps.isValid() = true; caps.format() = AkVideoCaps::Format_rgb24; caps.bpp() = AkVideoCaps::bitsPerPixel(caps.format()); caps.width() = screen->size().width(); caps.height() = screen->size().height(); caps.fps() = this->m_fps; return caps.toCaps(); }