2016-07-05 17:44:02 +00: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 18:31:31 +00:00
Copyright ( c ) 2014 - 2017 John Preston , https : //desktop.telegram.org
2016-07-05 17:44:02 +00:00
*/
# include "media/media_audio_loader.h"
2017-05-03 11:36:39 +00:00
AudioPlayerLoader : : AudioPlayerLoader ( const FileLocation & file , const QByteArray & data , base : : byte_vector & & bytes )
: _file ( file )
, _data ( data )
, _bytes ( std : : move ( bytes ) ) {
2016-07-05 17:44:02 +00:00
}
AudioPlayerLoader : : ~ AudioPlayerLoader ( ) {
2017-05-03 11:36:39 +00:00
if ( _access ) {
_file . accessDisable ( ) ;
_access = false ;
2016-07-05 17:44:02 +00:00
}
}
bool AudioPlayerLoader : : check ( const FileLocation & file , const QByteArray & data ) {
2017-05-03 11:36:39 +00:00
return this - > _file = = file & & this - > _data . size ( ) = = data . size ( ) ;
2016-07-05 17:44:02 +00:00
}
void AudioPlayerLoader : : saveDecodedSamples ( QByteArray * samples , int64 * samplesCount ) {
2017-08-17 09:06:26 +00:00
Assert ( _savedSamplesCount = = 0 ) ;
Assert ( _savedSamples . isEmpty ( ) ) ;
Assert ( ! _holdsSavedSamples ) ;
2016-07-05 17:44:02 +00:00
samples - > swap ( _savedSamples ) ;
std : : swap ( * samplesCount , _savedSamplesCount ) ;
_holdsSavedSamples = true ;
}
void AudioPlayerLoader : : takeSavedDecodedSamples ( QByteArray * samples , int64 * samplesCount ) {
2017-08-17 09:06:26 +00:00
Assert ( * samplesCount = = 0 ) ;
Assert ( samples - > isEmpty ( ) ) ;
Assert ( _holdsSavedSamples ) ;
2016-07-05 17:44:02 +00:00
samples - > swap ( _savedSamples ) ;
std : : swap ( * samplesCount , _savedSamplesCount ) ;
_holdsSavedSamples = false ;
}
bool AudioPlayerLoader : : holdsSavedDecodedSamples ( ) const {
return _holdsSavedSamples ;
}
bool AudioPlayerLoader : : openFile ( ) {
2017-05-03 11:36:39 +00:00
if ( _data . isEmpty ( ) & & _bytes . empty ( ) ) {
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 ( ) ) ) ;
2016-07-05 17:44:02 +00:00
return false ;
}
2017-05-03 11:36:39 +00:00
_access = true ;
2016-07-05 17:44:02 +00:00
}
2017-05-03 11:36:39 +00:00
_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 ( ) ) ) ;
2016-07-05 17:44:02 +00:00
return false ;
}
}
2017-05-03 11:36:39 +00:00
_dataPos = 0 ;
2016-07-05 17:44:02 +00:00
return true ;
}