2016-07-05 20:44:02 +03:00
/*
This file is part of Telegram Desktop ,
the official desktop version of Telegram messaging app , see https : //telegram.org
Telegram Desktop is free software : you can redistribute it and / or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation , either version 3 of the License , or
( at your option ) any later version .
It is distributed in the hope that it will be useful ,
but WITHOUT ANY WARRANTY ; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
GNU General Public License for more details .
In addition , as a special exception , the copyright holders give permission
to link the code of portions of this program with the OpenSSL library .
Full license : https : //github.com/telegramdesktop/tdesktop/blob/master/LICENSE
2017-01-11 22:31:31 +04:00
Copyright ( c ) 2014 - 2017 John Preston , https : //desktop.telegram.org
2016-07-05 20:44:02 +03:00
*/
# include "media/media_audio_loader.h"
AudioPlayerLoader : : AudioPlayerLoader ( const FileLocation & file , const QByteArray & data )
: file ( file )
, data ( data ) {
}
AudioPlayerLoader : : ~ AudioPlayerLoader ( ) {
if ( access ) {
file . accessDisable ( ) ;
access = false ;
}
}
bool AudioPlayerLoader : : check ( const FileLocation & file , const QByteArray & data ) {
return this - > file = = file & & this - > data . size ( ) = = data . size ( ) ;
}
void AudioPlayerLoader : : saveDecodedSamples ( QByteArray * samples , int64 * samplesCount ) {
t_assert ( _savedSamplesCount = = 0 ) ;
t_assert ( _savedSamples . isEmpty ( ) ) ;
t_assert ( ! _holdsSavedSamples ) ;
samples - > swap ( _savedSamples ) ;
std : : swap ( * samplesCount , _savedSamplesCount ) ;
_holdsSavedSamples = true ;
}
void AudioPlayerLoader : : takeSavedDecodedSamples ( QByteArray * samples , int64 * samplesCount ) {
t_assert ( * samplesCount = = 0 ) ;
t_assert ( samples - > isEmpty ( ) ) ;
t_assert ( _holdsSavedSamples ) ;
samples - > swap ( _savedSamples ) ;
std : : swap ( * samplesCount , _savedSamplesCount ) ;
_holdsSavedSamples = false ;
}
bool AudioPlayerLoader : : holdsSavedDecodedSamples ( ) const {
return _holdsSavedSamples ;
}
bool AudioPlayerLoader : : openFile ( ) {
if ( data . isEmpty ( ) ) {
if ( f . isOpen ( ) ) f . close ( ) ;
if ( ! access ) {
if ( ! file . accessEnable ( ) ) {
LOG ( ( " Audio Error: could not open file access '%1', data size '%2', error %3, %4 " ) . arg ( file . name ( ) ) . arg ( data . size ( ) ) . arg ( f . error ( ) ) . arg ( f . errorString ( ) ) ) ;
return false ;
}
access = true ;
}
f . setFileName ( file . name ( ) ) ;
if ( ! f . open ( QIODevice : : ReadOnly ) ) {
LOG ( ( " Audio Error: could not open file '%1', data size '%2', error %3, %4 " ) . arg ( file . name ( ) ) . arg ( data . size ( ) ) . arg ( f . error ( ) ) . arg ( f . errorString ( ) ) ) ;
return false ;
}
}
dataPos = 0 ;
return true ;
}