diff --git a/include/uvgrtp/media_stream.hh b/include/uvgrtp/media_stream.hh index 4721a0a..2541b87 100644 --- a/include/uvgrtp/media_stream.hh +++ b/include/uvgrtp/media_stream.hh @@ -326,6 +326,18 @@ namespace uvgrtp { */ rtp_error_t configure_ctx(int rcc_flag, ssize_t value); + /** + * \brief Get the values for set configuration flags, see ::RTP_CTX_CONFIGURATION_FLAGS for more details + * + * \return Value of the configuration flag + * + * \retval int value on success + * \retval -1 if the provided configuration flag does not exist + * \retval -2 on error + * \retval -3 not implemented + */ + int get_configuration_value(int rcc_flag); + /// \cond DO_NOT_DOCUMENT /* Get unique key of the media stream diff --git a/src/media_stream.cc b/src/media_stream.cc index ec8a0ab..a630759 100644 --- a/src/media_stream.cc +++ b/src/media_stream.cc @@ -856,6 +856,60 @@ rtp_error_t uvgrtp::media_stream::configure_ctx(int rcc_flag, ssize_t value) return ret; } +int uvgrtp::media_stream::get_configuration_value(int rcc_flag) +{ + int ret = -2; + + if (rcc_flag == RCC_SSRC) { + return ssrc_.get()->load(); + } + else if (rcc_flag == RCC_REMOTE_SSRC) { + return remote_ssrc_.get()->load(); + } + + if (!initialized_) { + UVG_LOG_ERROR("RTP context has not been initialized fully, cannot continue!"); + return RTP_NOT_INITIALIZED; + } + + switch (rcc_flag) { + case RCC_UDP_SND_BUF_SIZE: { + return -3; + } + case RCC_UDP_RCV_BUF_SIZE: { + return -3; + } + case RCC_RING_BUFFER_SIZE: { + return -3; + } + case RCC_PKT_MAX_DELAY: { + return -3; + } + case RCC_DYN_PAYLOAD_TYPE: { + return -3; + } + case RCC_CLOCK_RATE: { + return -3; + } + case RCC_MTU_SIZE: { + return -3; + } + case RCC_FPS_NUMERATOR: { + return fps_numerator_; + } + case RCC_FPS_DENOMINATOR: { + return fps_denominator_; + } + case RCC_SESSION_BANDWIDTH: { + return bandwidth_; + } + default: + return -1; + } + + return ret; +} + uint32_t uvgrtp::media_stream::get_key() const { return key_;