std::future<bool> send(core::const_frame frame) override { CASPAR_VERIFY(format_desc_.height * format_desc_.width * 4 == frame.image_data(0).size()); graph_->set_value("tick-time", tick_timer_.elapsed() * format_desc_.fps * 0.5); tick_timer_.restart(); caspar::timer frame_timer; { auto audio_buffer = core::audio_32_to_16(frame.audio_data()); airsend::add_audio(air_send_.get(), audio_buffer.data(), static_cast<int>(audio_buffer.size()) / format_desc_.audio_channels); } { connected_ = airsend::add_frame_bgra(air_send_.get(), frame.image_data(0).begin()); } graph_->set_text(print()); graph_->set_value("frame-time", frame_timer.elapsed() * format_desc_.fps * 0.5); return make_ready_future(true); }
newtek_ivga_consumer() { if (!airsend::is_available()) { CASPAR_THROW_EXCEPTION(not_supported() << msg_info(airsend::dll_name() + L" not available")); } graph_->set_text(print()); graph_->set_color("frame-time", diagnostics::color(0.5f, 1.0f, 0.2f)); graph_->set_color("tick-time", diagnostics::color(0.0f, 0.6f, 0.9f)); graph_->set_color("dropped-frame", diagnostics::color(0.3f, 0.6f, 0.3f)); diagnostics::register_graph(graph_); }
route_producer(std::shared_ptr<route> route, int buffer) : route_(route) , connection_(route_->signal.connect([this](const core::draw_frame& frame) { if (!buffer_.try_push(frame)) { graph_->set_tag(diagnostics::tag_severity::WARNING, "dropped-frame"); } graph_->set_value("produce-time", produce_timer_.elapsed() * route_->format_desc.fps * 0.5); produce_timer_.restart(); })) { buffer_.set_capacity(buffer > 0 ? buffer : route->format_desc.field_count); graph_->set_color("late-frame", diagnostics::color(0.6f, 0.3f, 0.3f)); graph_->set_color("produce-time", caspar::diagnostics::color(0.0f, 1.0f, 0.0f)); graph_->set_color("consume-time", caspar::diagnostics::color(1.0f, 0.4f, 0.0f, 0.8f)); graph_->set_color("dropped-frame", diagnostics::color(0.3f, 0.6f, 0.3f)); graph_->set_text(print()); diagnostics::register_graph(graph_); CASPAR_LOG(debug) << print() << L" Initialized"; }