} // namespace
Mixer::Mixer(const QSurfaceFormat &format)
- : mixer_surface(create_surface(format)),
+ : httpd("test.ts", WIDTH, HEIGHT),
+ mixer_surface(create_surface(format)),
h264_encoder_surface(create_surface(format))
{
httpd.start(9095);
display_chain->set_dither_bits(0); // Don't bother.
display_chain->finalize();
- h264_encoder.reset(new H264Encoder(h264_encoder_surface, WIDTH, HEIGHT, "test.ts", &httpd));
+ h264_encoder.reset(new H264Encoder(h264_encoder_surface, WIDTH, HEIGHT, &httpd));
for (int card_index = 0; card_index < NUM_CARDS; ++card_index) {
printf("Configuring card %d...\n", card_index);
" gl_FragColor = texture2D(cbcr_tex, tc0); \n"
"} \n";
cbcr_program_num = resource_pool->compile_glsl_program(cbcr_vert_shader, cbcr_frag_shader);
+
+ r128_state = ebur128_init(2, 48000, EBUR128_MODE_SAMPLE_PEAK | EBUR128_MODE_M | EBUR128_MODE_S | EBUR128_MODE_I | EBUR128_MODE_LRA);
}
Mixer::~Mixer()
}
cards[card_index].usb->stop_dequeue_thread();
}
+
+ ebur128_destroy(&r128_state);
}
namespace {
}
}
if (card_index == 0) {
+ ebur128_add_frames_float(r128_state, samples_out.data(), samples_out.size() / 2);
h264_encoder->add_audio(pts_int, move(samples_out));
}
}
}
}
+ if (audio_level_callback != nullptr) {
+ double loudness_s;
+ ebur128_loudness_shortterm(r128_state, &loudness_s);
+ audio_level_callback(loudness_s);
+ }
+
// If the first card is reporting a corrupted or otherwise dropped frame,
// just increase the pts (skipping over this frame) and don't try to compute anything new.
if (card_copy[0].new_frame->len == 0) {