- audio_graph_.reset(
- avfilter_graph_alloc(),
- [](AVFilterGraph* p)
- {
- avfilter_graph_free(&p);
- });
-
- audio_graph_->nb_threads = boost::thread::hardware_concurrency()/2;
- audio_graph_->thread_type = AVFILTER_THREAD_SLICE;
-
- const auto asrc_options = (boost::format("sample_rate=%1%:sample_fmt=%2%:channels=%3%:time_base=%4%/%5%:channel_layout=%6%")
- % in_video_format_.audio_sample_rate
- % av_get_sample_fmt_name(AV_SAMPLE_FMT_S32)
- % in_channel_layout_.num_channels
- % 1 % in_video_format_.audio_sample_rate
- % boost::io::group(
- std::hex,
- std::showbase,
- av_get_default_channel_layout(in_channel_layout_.num_channels))).str();
-
- AVFilterContext* filt_asrc = nullptr;
- FF(avfilter_graph_create_filter(
- &filt_asrc,
- avfilter_get_by_name("abuffer"),
- "ffmpeg_consumer_abuffer",
- asrc_options.c_str(),
- nullptr,
- audio_graph_.get()));