本文整理汇总了C++中AddonPtr::GetSetting方法的典型用法代码示例。如果您正苦于以下问题:C++ AddonPtr::GetSetting方法的具体用法?C++ AddonPtr::GetSetting怎么用?C++ AddonPtr::GetSetting使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类AddonPtr
的用法示例。
在下文中一共展示了AddonPtr::GetSetting方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: Init
bool CEncoderFFmpeg::Init(audioenc_callbacks &callbacks)
{
if (!callbacks.opaque || !callbacks.write || !callbacks.seek)
return false;
m_callbacks = callbacks;
std::string filename = URIUtils::GetFileName(m_strFile);
if(avformat_alloc_output_context2(&m_Format,NULL,NULL,filename.c_str()))
{
CLog::Log(LOGERROR, "CEncoderFFmpeg::Init - Unable to guess the output format for the file %s", filename.c_str());
return false;
}
AVCodec *codec;
codec = avcodec_find_encoder(m_Format->oformat->audio_codec);
if (!codec)
{
CLog::Log(LOGERROR, "CEncoderFFmpeg::Init - Unable to find a suitable FFmpeg encoder");
return false;
}
m_Format->pb = avio_alloc_context(m_BCBuffer, sizeof(m_BCBuffer), AVIO_FLAG_WRITE, this, NULL, avio_write_callback, avio_seek_callback);
if (!m_Format->pb)
{
av_freep(&m_Format);
CLog::Log(LOGERROR, "CEncoderFFmpeg::Init - Failed to allocate ByteIOContext");
return false;
}
AddonPtr addon;
CAddonMgr::Get().GetAddon(CSettings::Get().GetString("audiocds.encoder"), addon);
if (addon)
{
m_Format->bit_rate = (128+32*strtol(addon->GetSetting("bitrate").c_str(), NULL, 10))*1000;
}
/* add a stream to it */
m_Stream = avformat_new_stream(m_Format, codec);
if (!m_Stream)
{
av_freep(&m_Format->pb);
av_freep(&m_Format);
CLog::Log(LOGERROR, "CEncoderFFmpeg::Init - Failed to allocate AVStream context");
return false;
}
/* set the stream's parameters */
m_CodecCtx = m_Stream->codec;
m_CodecCtx->codec_id = codec->id;
m_CodecCtx->codec_type = AVMEDIA_TYPE_AUDIO;
m_CodecCtx->bit_rate = m_Format->bit_rate;
m_CodecCtx->sample_rate = m_iInSampleRate;
m_CodecCtx->channels = m_iInChannels;
m_CodecCtx->channel_layout = av_get_default_channel_layout(m_iInChannels);
m_CodecCtx->time_base.num = 1;
m_CodecCtx->time_base.den = m_iInSampleRate;
/* Allow experimental encoders (like FFmpeg builtin AAC encoder) */
m_CodecCtx->strict_std_compliance = FF_COMPLIANCE_EXPERIMENTAL;
if(m_Format->oformat->flags & AVFMT_GLOBALHEADER)
{
m_CodecCtx->flags |= CODEC_FLAG_GLOBAL_HEADER;
m_Format->flags |= CODEC_FLAG_GLOBAL_HEADER;
}
switch(m_iInBitsPerSample)
{
case 8: m_InFormat = AV_SAMPLE_FMT_U8 ; break;
case 16: m_InFormat = AV_SAMPLE_FMT_S16; break;
case 32: m_InFormat = AV_SAMPLE_FMT_S32; break;
default:
av_freep(&m_Stream);
av_freep(&m_Format->pb);
av_freep(&m_Format);
return false;
}
m_OutFormat = codec->sample_fmts[0];
m_CodecCtx->sample_fmt = m_OutFormat;
m_NeedConversion = (m_OutFormat != m_InFormat);
if (m_OutFormat <= AV_SAMPLE_FMT_NONE || avcodec_open2(m_CodecCtx, codec, NULL))
{
CLog::Log(LOGERROR, "CEncoderFFmpeg::Init - Failed to open the codec %s", codec->long_name ? codec->long_name : codec->name);
av_freep(&m_Stream);
av_freep(&m_Format->pb);
av_freep(&m_Format);
return false;
}
/* calculate how many bytes we need per frame */
m_NeededFrames = m_CodecCtx->frame_size;
m_NeededBytes = av_samples_get_buffer_size(NULL, m_iInChannels, m_NeededFrames, m_InFormat, 0);
m_Buffer = (uint8_t*)av_malloc(m_NeededBytes);
m_BufferSize = 0;
m_BufferFrame = av_frame_alloc();
//.........这里部分代码省略.........