- std::vector<int16_t, tbb::cache_aligned_allocator<int16_t>> buffer_;\r
-public:\r
- explicit implementation(input& input, const core::video_format_desc& format_desc) \r
- : input_(input)\r
- , codec_context_(*input_.get_audio_codec_context())\r
- , format_desc_(format_desc) \r
- , frame_number_(0)\r
- , wait_for_eof_(false)\r
- , buffer_(4*format_desc_.audio_sample_rate*2+FF_INPUT_BUFFER_PADDING_SIZE/2, 0)\r
- {\r
- if(codec_context_.sample_rate != static_cast<int>(format_desc_.audio_sample_rate) || \r
- codec_context_.channels != static_cast<int>(format_desc_.audio_channels))\r
- { \r
- BOOST_THROW_EXCEPTION(\r
- file_read_error() <<\r
- msg_info("Invalid sample-rate or number of channels.") <<\r
- arg_value_info(boost::lexical_cast<std::string>(codec_context_.sample_rate)) << \r
- arg_name_info("codec_context"));\r
- }\r
- }\r
- \r
- std::deque<std::pair<int, std::vector<short>>> receive()\r
- {\r
- std::deque<std::pair<int, std::vector<short>>> result;\r
- \r
- std::shared_ptr<AVPacket> pkt;\r
- for(int n = 0; n < 32 && result.empty() && input_.try_pop_audio_packet(pkt); ++n) \r
- result = decode(pkt);\r