整理代码
This commit is contained in:
commit
c7b4e178ec
364 changed files with 59691 additions and 0 deletions
83
video/core/AudioAdaptablePipe.cpp
Normal file
83
video/core/AudioAdaptablePipe.cpp
Normal file
|
|
@ -0,0 +1,83 @@
|
|||
/*
|
||||
*******************************************************************************
|
||||
* INCLUDE
|
||||
*******************************************************************************
|
||||
*/
|
||||
#include "AudioAdaptablePipe.h"
|
||||
|
||||
namespace Video
|
||||
{
|
||||
namespace Core
|
||||
{
|
||||
/*
|
||||
*******************************************************************************
|
||||
* CLASS DEFINE
|
||||
*******************************************************************************
|
||||
*/
|
||||
void AudioAdaptablePipe::onLink(Core::Component::Ptr pPrevious)
|
||||
{
|
||||
if (!frameQueues().empty() && frameQueues().firstComponent() != pPrevious)
|
||||
throw Poco::LogicException(name() + ": Support only one previous component, conflict with: " +
|
||||
pPrevious->name() + ", Current: " + frameQueues().firstComponent()->name());
|
||||
|
||||
frameQueues().add(pPrevious, name(), MediaType::AUDIO);
|
||||
}
|
||||
|
||||
void AudioAdaptablePipe::onUnlink(Core::Component::Ptr pPrevious)
|
||||
{
|
||||
frameQueues().remove(pPrevious);
|
||||
}
|
||||
|
||||
Frame::Ptr AudioAdaptablePipe::readFrame(uint32_t timeout)
|
||||
{
|
||||
if (previousComponents().size() == 0)
|
||||
throw Poco::NotFoundException(name() + ": No previous components");
|
||||
|
||||
auto pFrameQueue = frameQueues().first();
|
||||
while (true)
|
||||
{
|
||||
Frame::Ptr pFrame = nullptr;
|
||||
if (!_pFrameAdapter.isNull())
|
||||
{
|
||||
pFrame = _pFrameAdapter->get();
|
||||
if (!pFrame.isNull())
|
||||
return pFrame;
|
||||
}
|
||||
|
||||
pFrame = pFrameQueue->dequeue(timeout);
|
||||
if (serialCodeWatcher().isChanged(pFrame->code, true))
|
||||
{
|
||||
auto pPrevious = previousComponents().first().cast<AudioComponent>();
|
||||
|
||||
auto inLayout = pPrevious->getChannelLayout();
|
||||
auto inFormat = pPrevious->getSampleFormat();
|
||||
auto inRate = pPrevious->getSampleRate();
|
||||
auto outLayout = getChannelLayout();
|
||||
auto outFormat = getSampleFormat();
|
||||
auto outRate = getSampleRate();
|
||||
|
||||
if (inLayout != outLayout || inFormat != outFormat || inRate != outRate)
|
||||
_pResample = AudioResample::create(inLayout, inFormat, inRate, outLayout, outFormat, outRate);
|
||||
else
|
||||
_pResample.reset();
|
||||
|
||||
if (inRate != outRate || pPrevious->getFrameSize() != getFrameSize())
|
||||
_pFrameAdapter = new AudioFrameAdapter(outLayout, outFormat, getFrameSize(), outRate);
|
||||
else
|
||||
_pFrameAdapter.reset();
|
||||
}
|
||||
|
||||
if (_pFrameAdapter.isNull() && _pResample.isNull())
|
||||
return pFrame;
|
||||
|
||||
if (!_pResample.isNull())
|
||||
pFrame = _pResample->process(pFrame);
|
||||
|
||||
if (!_pFrameAdapter.isNull())
|
||||
_pFrameAdapter->put(pFrame);
|
||||
else
|
||||
return pFrame;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue