| 387 | void GStreamerStream::request_restart() { m_request_restart = true; } |
| 388 | |
| 389 | void GStreamerStream::handle_change_bitrate_request( |
| 390 | openhd::LinkActionHandler::LinkBitrateInformation lb) { |
| 391 | // m_console->debug("handle_change_bitrate_request prev: {} new:{}", |
| 392 | // kbits_per_second_to_string(m_curr_dynamic_bitrate_kbits), |
| 393 | // kbits_per_second_to_string(lb.recommended_encoder_bitrate_kbits)); |
| 394 | // We do some safety checks first - the link might recommend too much / too |
| 395 | // little |
| 396 | auto bitrate_for_encoder_kbits = lb.recommended_encoder_bitrate_kbits; |
| 397 | static auto MIN_BITRATE_KBITS = 1 * 1000; |
| 398 | // RPi cannot do less than 2MBit/s |
| 399 | if (OHDPlatform::instance().is_rpi()) { |
| 400 | MIN_BITRATE_KBITS = 2 * 1000; |
| 401 | } |
| 402 | if (bitrate_for_encoder_kbits < MIN_BITRATE_KBITS) { |
| 403 | // m_console->debug("Cam cannot do <{}", |
| 404 | // kbits_per_second_to_string(MIN_BITRATE_KBITS)); |
| 405 | bitrate_for_encoder_kbits = MIN_BITRATE_KBITS; |
| 406 | } |
| 407 | // The gst thread is responsible for changing the bitrate - it will be applied |
| 408 | // (as long as the cam is not bugged or the OS is overloaded) after a max |
| 409 | // delay of 40ms |
| 410 | m_curr_dynamic_bitrate_kbits = bitrate_for_encoder_kbits; |
| 411 | if (m_camera_holder->get_settings().h26x_bitrate_kbits != |
| 412 | bitrate_for_encoder_kbits) { |
| 413 | m_camera_holder->unsafe_get_settings().h26x_bitrate_kbits = |
| 414 | bitrate_for_encoder_kbits; |
| 415 | m_camera_holder->persist(false); |
| 416 | } |
| 417 | } |
| 418 | |
| 419 | void GStreamerStream::handle_update_arming_state(bool armed) { |
| 420 | m_console->debug("handle_update_arming_state: {}", armed); |