#include <common/utility/timer.h>\r
\r
#include <core/consumer/frame_consumer.h>\r
+#include <core/mixer/audio/audio_util.h>\r
\r
#include <tbb/concurrent_queue.h>\r
\r
\r
void schedule_next_video(const safe_ptr<core::read_frame>& frame)\r
{\r
- static std::vector<int32_t> silence(MAX_HANC_BUFFER_SIZE, 0);\r
+ static std::vector<int8_t> silence(MAX_HANC_BUFFER_SIZE, 0);\r
\r
executor_.begin_invoke([=]\r
{\r
\r
if(embedded_audio_)\r
{ \r
- auto frame_audio_data = frame->audio_data().empty() ? silence.data() : const_cast<int32_t*>(frame->audio_data().begin());\r
- \r
- std::vector<int16_t> frame_audio_data16(audio_samples);\r
- for(size_t n = 0; n < frame_audio_data16.size(); ++n) \r
- frame_audio_data16[n] = (frame_audio_data[n] >> 16) & 0xffff; \r
+ auto frame_audio = core::audio_32_to_24(frame->audio_data());\r
+ auto frame_audio_data = frame_audio.size() != audio_samples ? silence.data() : frame_audio.data(); \r
\r
- encode_hanc(reinterpret_cast<BLUE_UINT32*>(reserved_frames_.front()->hanc_data()), frame_audio_data16.data(), audio_samples, audio_nchannels);\r
+ encode_hanc(reinterpret_cast<BLUE_UINT32*>(reserved_frames_.front()->hanc_data()), frame_audio_data, audio_samples, audio_nchannels);\r
\r
blue_->system_buffer_write_async(const_cast<uint8_t*>(reserved_frames_.front()->image_data()), \r
reserved_frames_.front()->image_size(), \r
\r
void encode_hanc(BLUE_UINT32* hanc_data, void* audio_data, size_t audio_samples, size_t audio_nchannels)\r
{ \r
- const auto sample_type = AUDIO_CHANNEL_16BIT | AUDIO_CHANNEL_LITTLEENDIAN;\r
+ const auto sample_type = AUDIO_CHANNEL_24BIT | AUDIO_CHANNEL_LITTLEENDIAN;\r
const auto emb_audio_flag = blue_emb_audio_enable | blue_emb_audio_group1_enable;\r
\r
hanc_stream_info_struct hanc_stream_info;\r