整理代码
This commit is contained in:
commit
c7b4e178ec
364 changed files with 59691 additions and 0 deletions
128
video/fdk/AudioEncoder.cpp
Normal file
128
video/fdk/AudioEncoder.cpp
Normal file
|
|
@ -0,0 +1,128 @@
|
|||
/*
|
||||
*******************************************************************************
|
||||
* INCLUDE
|
||||
*******************************************************************************
|
||||
*/
|
||||
#include "AudioEncoder.h"
|
||||
#include "Logger.h"
|
||||
#include "../core/System.h"
|
||||
#include "fdk-aac/FDK_audio.h"
|
||||
|
||||
namespace Video
|
||||
{
|
||||
namespace Fdk
|
||||
{
|
||||
/*
|
||||
*******************************************************************************
|
||||
* CLASS DEFINE
|
||||
*******************************************************************************
|
||||
*/
|
||||
AudioEncoder::AudioEncoder(Core::CodecID codecID)
|
||||
: Core::AudioEncoder(Poco::format("Fdk::AudioEncoder(%s)", Core::codecIDToString(codecID)), codecID),
|
||||
_pEncoder(nullptr)
|
||||
{
|
||||
}
|
||||
|
||||
AudioEncoder::~AudioEncoder()
|
||||
{
|
||||
}
|
||||
|
||||
void AudioEncoder::initialize()
|
||||
{
|
||||
setSampleFormat(Core::SampleFormat::S16);
|
||||
|
||||
int channels = Core::channelLayoutChannels(getChannelLayout());
|
||||
int samplerate = getSampleRate();
|
||||
|
||||
if (aacEncOpen(&_pEncoder, 0, channels) != AACENC_OK)
|
||||
{
|
||||
logger().error("Unable to open _pEncoder");
|
||||
return;
|
||||
}
|
||||
|
||||
if (aacEncoder_SetParam(_pEncoder, AACENC_CHANNELMODE, (channels == 1) ? MODE_1 : MODE_2) != AACENC_OK)
|
||||
{
|
||||
logger().error("Unable to set the channel mode");
|
||||
return;
|
||||
}
|
||||
|
||||
if (aacEncoder_SetParam(_pEncoder, AACENC_AOT, 2) != AACENC_OK)
|
||||
{
|
||||
logger().error("Unable to set the AOT");
|
||||
return;
|
||||
}
|
||||
|
||||
if (aacEncoder_SetParam(_pEncoder, AACENC_SAMPLERATE, samplerate) != AACENC_OK)
|
||||
{
|
||||
logger().error("Unable to set the SAMPLERATE");
|
||||
return;
|
||||
}
|
||||
|
||||
if (aacEncoder_SetParam(_pEncoder, AACENC_BITRATE, getBitrate()) != AACENC_OK)
|
||||
{
|
||||
logger().error("Unable to set the BITRATE");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
void AudioEncoder::deinitialize()
|
||||
{
|
||||
if (_pEncoder)
|
||||
{
|
||||
aacEncClose(&_pEncoder);
|
||||
_pEncoder = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
Core::Packet::Ptr AudioEncoder::encode()
|
||||
{
|
||||
if (!_pEncoder)
|
||||
return nullptr;
|
||||
|
||||
auto pIn = readFrame();
|
||||
|
||||
AACENC_BufDesc inBuf = {0}, outBuf = {0};
|
||||
AACENC_InArgs inArgs = {0};
|
||||
AACENC_OutArgs outArgs = {0};
|
||||
uint8_t* pBuffer = new uint8_t[2048];
|
||||
|
||||
int inIdentifier = IN_AUDIO_DATA;
|
||||
int inSize = pIn->length;
|
||||
int inElemSize = 2;
|
||||
int outIdentifier = OUT_BITSTREAM_DATA;
|
||||
int outEemSize = 1;
|
||||
int outSize = 2048;
|
||||
|
||||
inBuf.numBufs = 1;
|
||||
uint8_t* data = pIn->data[0].get();
|
||||
inBuf.bufs = (void**)&data;
|
||||
inBuf.bufferIdentifiers = &inIdentifier;
|
||||
inBuf.bufSizes = &inSize;
|
||||
inBuf.bufElSizes = &inElemSize;
|
||||
|
||||
outBuf.numBufs = 1;
|
||||
outBuf.bufs = (void**)&pBuffer;
|
||||
outBuf.bufferIdentifiers = &outIdentifier;
|
||||
outBuf.bufSizes = &outSize;
|
||||
outBuf.bufElSizes = &outEemSize;
|
||||
|
||||
inArgs.numInSamples = pIn->length / inElemSize;
|
||||
|
||||
inArgs.numAncBytes = 0;
|
||||
|
||||
if (AACENC_OK != aacEncEncode(_pEncoder, &inBuf, &outBuf, &inArgs, &outArgs))
|
||||
{
|
||||
delete[] pBuffer;
|
||||
return nullptr;
|
||||
}
|
||||
else
|
||||
return new Core::Packet(serialCodeManager().code(), 0, pBuffer, outArgs.numOutBytes, pIn->timestampEncode,
|
||||
pIn->timestampEncode);
|
||||
}
|
||||
|
||||
void AudioEncoder::onConfigChanged(ParameterNames& names)
|
||||
{
|
||||
Core::AudioEncoder::onConfigChanged(names);
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue