src/3rdparty/phonon/qt7/quicktimestreamreader.mm
changeset 0 1918ee327afb
equal deleted inserted replaced
-1:000000000000 0:1918ee327afb
       
     1 /*  This file is part of the KDE project.
       
     2 
       
     3     Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
       
     4 
       
     5     This library is free software: you can redistribute it and/or modify
       
     6     it under the terms of the GNU Lesser General Public License as published by
       
     7     the Free Software Foundation, either version 2.1 or 3 of the License.
       
     8 
       
     9     This library is distributed in the hope that it will be useful,
       
    10     but WITHOUT ANY WARRANTY; without even the implied warranty of
       
    11     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
       
    12     GNU Lesser General Public License for more details.
       
    13 
       
    14     You should have received a copy of the GNU Lesser General Public License
       
    15     along with this library.  If not, see <http://www.gnu.org/licenses/>.
       
    16 */
       
    17 
       
    18 #include "backendheader.h"
       
    19 #include "quicktimestreamreader.h"
       
    20 
       
    21 QT_BEGIN_NAMESPACE
       
    22 
       
    23 namespace Phonon
       
    24 {
       
    25 namespace QT7
       
    26 {
       
    27 
       
    28 QuickTimeStreamReader::QuickTimeStreamReader(const Phonon::MediaSource &source)
       
    29 {
       
    30     connectToSource(source);
       
    31 }
       
    32 
       
    33 QuickTimeStreamReader::~QuickTimeStreamReader()
       
    34 {
       
    35 }
       
    36 
       
    37 bool QuickTimeStreamReader::readAllData()
       
    38 {
       
    39     int oldSize = m_buffer.size();
       
    40     while (m_buffer.size() < m_size){
       
    41         needData();
       
    42         if (oldSize == currentBufferSize())
       
    43             BACKEND_ASSERT3(oldSize != currentBufferSize(),
       
    44                 "Could not create new movie from IO stream. Not enough free memory to preload the whole movie.",
       
    45                 FATAL_ERROR, false)
       
    46         oldSize = m_buffer.size();
       
    47     }
       
    48     return true;
       
    49 }
       
    50 
       
    51 QByteArray *QuickTimeStreamReader::pointerToData()
       
    52 {
       
    53     return &m_buffer;
       
    54 }
       
    55 
       
    56 int QuickTimeStreamReader::readData(long offset, long size, void *data)
       
    57 {
       
    58 //    QReadLocker readLocker(&m_lock);
       
    59     if (streamSize() != 1 && offset + size > streamSize()){
       
    60         size = streamSize() - offset;
       
    61     }
       
    62 
       
    63     if (currentPos() - currentBufferSize() != offset)
       
    64         setCurrentPos(offset);
       
    65 
       
    66     int oldSize = currentBufferSize();
       
    67     while (currentBufferSize() < int(size)) {
       
    68         needData();
       
    69         if (oldSize == currentBufferSize())
       
    70             break;
       
    71         oldSize = currentBufferSize();
       
    72     }
       
    73     
       
    74     int bytesRead = qMin(currentBufferSize(), int(size));
       
    75 //    QWriteLocker writeLocker(&m_lock);
       
    76     qMemCopy(data, m_buffer.data(), bytesRead);
       
    77     m_buffer = m_buffer.mid(bytesRead);
       
    78 
       
    79     return bytesRead;
       
    80 }
       
    81     
       
    82 void QuickTimeStreamReader::writeData(const QByteArray &data)
       
    83 {
       
    84     QWriteLocker locker(&m_lock);
       
    85     m_pos += data.size();
       
    86     m_buffer += data;
       
    87 }
       
    88 
       
    89 void QuickTimeStreamReader::endOfData()
       
    90 {
       
    91 }
       
    92 
       
    93 void QuickTimeStreamReader::setStreamSize(qint64 newSize)
       
    94 {
       
    95     m_size = newSize;
       
    96 }
       
    97 
       
    98 qint64 QuickTimeStreamReader::streamSize() const
       
    99 {
       
   100     return m_size;
       
   101 }
       
   102 
       
   103 void QuickTimeStreamReader::setStreamSeekable(bool s)
       
   104 {
       
   105     m_seekable = s;
       
   106 }
       
   107 
       
   108 bool QuickTimeStreamReader::streamSeekable() const
       
   109 {
       
   110     return m_seekable;
       
   111 }
       
   112 
       
   113 void QuickTimeStreamReader::setCurrentPos(qint64 pos)
       
   114 {
       
   115     QWriteLocker locker(&m_lock);
       
   116     m_pos = pos;
       
   117     seekStream(pos);
       
   118     m_buffer.clear();
       
   119 }
       
   120 
       
   121 qint64 QuickTimeStreamReader::currentPos() const
       
   122 {
       
   123     return m_pos;
       
   124 }
       
   125 
       
   126 int QuickTimeStreamReader::currentBufferSize() const
       
   127 {
       
   128     QReadLocker locker(&m_lock);
       
   129     return m_buffer.size();
       
   130 }
       
   131 
       
   132 }} //namespace Phonon::QT7
       
   133 
       
   134 QT_END_NAMESPACE
       
   135 
       
   136 #include "moc_quicktimestreamreader.cpp"
       
   137