資源簡介
Qt和FFmpeg的視頻播放器
代碼片段和文件信息
#include?“audioplaythread.h“
#include?
#include?
const?int?BufferSize?=?44100?*?10000;
int?iCurrentRead?=?0;
int?iCurrentWrite?=?0;
char?buffer[BufferSize];
QSemaphore?freeBytes(BufferSize);
QSemaphore?usedBytes;
AudioPlayThread::AudioPlayThread(Qobject?*parent):
????QThread?(parent)
????m_audioOutput(nullptr)
????m_audioOutDevice(nullptr)
????m_buf(nullptr)
????m_index(0)
{
????initializeAudio(QAudioDeviceInfo::defaultOutputDevice());
}
void?AudioPlayThread::updateAudioData(QByteArray?audio)
{
????int?out_buffer_size?=?audio.size();
????if(freeBytes.tryAcquire(out_buffer_size)){
????????memcpy(buffer?+?iCurrentWrite?audio.constData()?out_buffer_size);
????????iCurrentWrite?+=?out_buffer_size;
????????iCurrentWrite?=?iCurrentWrite?%?BufferSize;
????????usedBytes.release(out_buffer_size);
????}
}
void?AudioPlayThread::run()
{
????while?(1)?{
#if?0
????????QByteArray?buffer(32768?0);
????????int?chunks?=?m_audioOutput->bytesFree()?/?m_audioOutput->periodSize();
????????while?(chunks)?{
???????????const?qint64?len?=?m_generator->read(buffer.data()?m_audioOutput->periodSize());
???????????if?(len)
???????????????io->write(buffer.data()?len);
???????????if?(len?!=?m_audioOutput->periodSize())
???????????????break;
???????????--chunks;
????????}
#endif
????????int?chunks?=?m_audioOutput->bytesFree()?/?m_audioOutput->periodSize();
????????while?(chunks)?{
????????????int?len?=?m_audioOutput->periodSize();
????????????if(usedBytes.tryAcquire(len)){
????????????????m_audioOutDevice->write(buffer?+?iCurrentRead?len);
????????????????iCurrentRead?+=?len;
????????????????iCurrentRead?=?iCurrentRead?%?BufferSize;
????????????????freeBytes.release();
????????????}
???????????--chunks;
????????}
????}
}
void?AudioPlayThread::initializeAudio(const?QAudioDeviceInfo?&deviceInfo)
{
????if(m_audioOutput){
????????m_audioOutput->stop();
????????delete??m_audioOutput;
????????m_audioOutput?=?nullptr;
????}
????if(m_audioOutDevice){
????????m_audioOutDevice->close();
????????delete??m_audioOutDevice;
????????m_audioOutDevice?=?nullptr;
????}
????QAudioFormat?format;
????format.setSampleRate(44100);
????format.setChannelCount(2);
????format.setSampleSize(16);
????format.setCodec(“audio/pcm“);
????format.setByteOrder(QAudioFormat::LittleEndian);
????format.setSampleType(QAudioFormat::SignedInt);
????if?(!deviceInfo.isFormatSupported(format))?{
????????qWarning()?<“Default?format?not?supported?-?trying?to?use?nearest“;
????????format?=?deviceInfo.nearestFormat(format);
????}
????m_audioOutput?=?new?QAudioOutput(deviceInfo?format);
????m_audioOutDevice?=?m_audioOutput->start();
//????m_pcmStream?=?new?PcmStream();
//????m_pcmStream->start();
????int?bf?=?m_audioOutput->bytesFree();
????if(!m_buf){
????????m_buf?=?new?char[bf?*?2000];
????}
????memset(m_buf?0?bf?*?2000);
????m_index?=?0;
}
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件????????270??2019-08-27?21:43??LocalPla
?????文件????????746??2021-01-06?17:14??LocalPla
?????文件???????2880??2019-08-27?21:43??LocalPla
?????文件????????534??2019-08-27?21:43??LocalPla
?????文件?????510864??2021-01-06?17:14??LocalPla
?????文件??????10248??2021-01-26?16:50??LocalPla
?????文件???????1025??2021-01-11?11:17??LocalPla
?????文件?????640424??2021-01-08?18:19??LocalPla
?????文件???????3629??2021-01-12?18:23??LocalPla
?????文件???????1391??2021-01-12?16:50??LocalPla
?????文件????????854??2021-01-08?17:04??LocalPla
?????文件????????380??2019-08-27?21:43??LocalPla
?????文件?????534152??2021-01-08?18:18??LocalPla
?????文件???????2571??2021-01-12?16:53??LocalPla
?????文件???????1106??2021-01-12?16:48??LocalPla
?????文件????????637??2021-01-08?16:56??LocalPla
?????文件????????332??2019-08-27?21:43??LocalPla
?????文件?????824600??2021-01-08?16:56??LocalPla
?????文件??????35149??2019-08-27?21:43??LocalPla
?????文件????????360??2021-01-26?16:50??LocalPla
?????文件?????814296??2021-01-08?18:18??LocalPla
?????文件???????1682??2019-08-27?21:43??LocalPla
?????文件????????463??2019-08-27?21:43??LocalPla
?????文件?????877872??2021-01-06?17:14??LocalPla
?????文件???????1973??2019-08-27?21:43??LocalPla
?????文件??????35986??2021-01-06?17:14??LocalPla
?????文件???????4817??2021-01-08?18:18??LocalPla
?????文件?????578704??2021-01-08?18:18??LocalPla
?????文件???????2565??2021-01-08?18:18??LocalPla
?????文件?????688552??2021-01-08?18:18??LocalPla
............此處省略14個文件信息
- 上一篇:linux 0.11內(nèi)核代碼
- 下一篇:QT 動態(tài)曲線
評論
共有 條評論