BleImage BleWindowsCaptureSource::getImage() { BleAutoLocker(m_modifyMutex); // BleImage be; // be = m_image; return m_image.clone(); }
void BleImageCaptureThread::fini() { BleAutoLocker(m_mutex); while (!m_queue.isEmpty()) { BleImage *image = m_queue.dequeue(); BleFree(image); } }
QQueue<BleImage *> BleImageProcessThread::getQueue() { BleAutoLocker(m_modifyOutputMutex); QQueue<BleImage *> queue = m_outputQueue; m_outputQueue.clear(); return queue; }
int BleRtmpSendThread::service(BleRtmpMuxer & muxer) { int ret = BLE_SUCESS; if ((ret = sendVideoSh(muxer)) != BLE_SUCESS) { return ret; } if ((ret = sendAudioSh(muxer)) != BLE_SUCESS) { return ret; } while (!m_stop) { QQueue<BleAVPacket *> pkts = BleAVQueue::instance()->dequeue(); if (pkts.isEmpty()) { msleep(50); continue; } BleAutoLocker(m_mutex); while (!pkts.empty()) { BleAVPacket *pkt = pkts.dequeue(); BleAutoFree(BleAVPacket, pkt); MStream &data = pkt->data; if (pkt->pktType == Packet_Type_Video) { if (muxer.addH264(data, pkt->dts) != TRUE ) { ret = BLE_RTMPSEND_ERROR; break; } m_videoKbps += (data.size() + 11); m_fps += 1; } else if (pkt->pktType == Packet_Type_Audio) { if (muxer.addAAC(data, pkt->dts) != TRUE ) { ret = BLE_RTMPSEND_ERROR; break; } m_audioKbps += (data.size() + 11); } m_sendDataCount += (data.size() + 11); } // if send failed, then pkts may has some pkt // we should delete it. for (int i = 0; i < pkts.size(); ++i) { BleAVPacket *pkt = pkts.at(i); BleFree(pkt); } } return ret; }
QQueue<BleImage *> BleImageCaptureThread::getQueue() { BleAutoLocker(m_mutex); QQueue<BleImage *> ret = m_queue; m_queue.clear(); return ret; }
QImage BleWindowsCaptureSource::getImage() { BleAutoLocker(m_modifyMutex); return m_image; }
void BleImageProcessThread::updateSources(QList<SourcePair> &sources) { BleAutoLocker(m_updateMutex); m_sources = sources; }
BleImage BleFileSource::getImage() { BleAutoLocker(m_modifyMutex); return m_image.clone(); }
QImage BleCameraSource::getImage() { BleAutoLocker(m_modifyMutex); return m_image.rgbSwapped(); }