コード例 #1
0
void MediaDownload::requestReady(unsigned fileSize)
{
    /* This may happen multiple times, with new requests, and the file size
     * may change as a result (for active events) */

    QMutexLocker l(&m_bufferLock);

    bool emitSizeChanged = false;
    if (fileSize > m_fileSize)
    {
        m_fileSize = fileSize;
        emitSizeChanged = true;

        Q_ASSERT(m_bufferFile.isOpen());
        if (!m_bufferFile.resize(m_fileSize))
        {
            sendError(QLatin1String("Buffer resize failed: ") + m_bufferFile.errorString());
            return;
        }
    }

    l.unlock();

    if (emitSizeChanged)
        emit fileSizeChanged(fileSize);
}
コード例 #2
0
ファイル: transfer.cpp プロジェクト: TC01/quassel
void Transfer::setFileSize(quint64 fileSize)
{
    if (_fileSize != fileSize) {
        _fileSize = fileSize;
        SYNC(ARG(fileSize));
        emit fileSizeChanged(fileSize);
    }
}
コード例 #3
0
bool VideoHttpBuffer::startBuffering()
{
    Q_ASSERT(!media);

    media = bcApp->mediaDownloadManager()->acquireMediaDownload(m_url);
    connect(media, SIGNAL(fileSizeChanged(uint)), SLOT(fileSizeChanged(uint)), Qt::DirectConnection);
    connect(media, SIGNAL(finished()), SIGNAL(bufferingFinished()));
    connect(media, SIGNAL(stopped()), SIGNAL(bufferingStopped()));
    connect(media, SIGNAL(error(QString)), SLOT(sendStreamError(QString)));

    media->start();

    qDebug("VideoHttpBuffer: started");
    emit bufferingStarted();

    return true;
}
コード例 #4
0
void MediaDownload::incomingData(const QByteArray &data, unsigned position)
{
    QMutexLocker l(&m_bufferLock);
    bool emitFileSize = false;

    if (position+data.size() > m_fileSize)
    {
        qDebug() << "MediaDownload: file size is less than write position, adjusting size";
        m_fileSize = position + data.size();
        if (!m_bufferFile.resize(m_fileSize))
        {
            sendError(QLatin1String("Buffering failed: ") + m_bufferFile.errorString());
            return;
        }
        emitFileSize = true;
    }

    Q_ASSERT(m_bufferFile.size() == m_fileSize);

    if (!m_bufferFile.seek(position))
    {
        sendError(QLatin1String("Buffer write failed: ") + m_bufferFile.errorString());
        return;
    }

    qint64 re = m_bufferFile.write(data);
    if (re < 0)
    {
        sendError(QLatin1String("Buffer write failed: ") + m_bufferFile.errorString());
        return;
    }

    if (!m_bufferFile.flush())
        qDebug() << "MediaDownload: Buffer flush after write failed (non-critical):" << m_bufferFile.errorString();

    Q_ASSERT(re == data.size());

    m_bufferRanges.insert(Range::fromStartSize(position, re));

    if (m_writePos == position)
        m_writePos += re;

    m_downloadedSize += re;

    l.unlock();

    if (emitFileSize)
        emit fileSizeChanged(m_fileSize);

    m_bufferWait.wakeAll();
}