diff --git a/src/host.cpp b/src/host.cpp index 5a2316100..0bf3a1f0d 100644 --- a/src/host.cpp +++ b/src/host.cpp @@ -107,7 +107,7 @@ using namespace std; unsigned int audio_capture_channels = 0; unsigned int audio_capture_bps = 0; unsigned int audio_capture_sample_rate = 0; - +bool incompatible_features = false; unsigned int cuda_devices[MAX_CUDA_DEVICES] = { 0 }; unsigned int cuda_devices_count = 1; @@ -426,6 +426,10 @@ struct init_data *common_preinit(int argc, char *argv[]) load_libgcc(); + if (get_commandline_param("incompatible") != nullptr) { + incompatible_features = true; + } + return new init_data{init}; } @@ -1065,6 +1069,8 @@ ADD_TO_PARAM("debug-dump", "* debug-dump=[=][,[=]\n" " Dumps specified buffer for debugging, n-th buffer may be selected, name is .dump.\n" " Avaiable modules: lavd-uncompressed\n"); #endif +ADD_TO_PARAM("incompatible", "* incompatible\n" + " Features that may possibly not be compatible with at least older or even any other UG version.\n"); ADD_TO_PARAM("low-latency-audio", "* low-latency-audio[=ultra]\n" " Try to reduce audio latency at the expense of worse reliability\n" " Add ultra for even more aggressive setting.\n"); diff --git a/src/host.h b/src/host.h index 3d777a0d5..f6c86820e 100644 --- a/src/host.h +++ b/src/host.h @@ -109,6 +109,7 @@ extern void *mainloop_udata; extern int glfw_init_count; extern char pixfmt_conv_pref[]; // defined in video_codec.c extern char *sage_network_device; +extern bool incompatible_features; // Both of following varables are non-negative. It indicates amount of milliseconds that // audio or video should be delayed. This shall be used for AV sync control. For diff --git a/src/transmit.cpp b/src/transmit.cpp index 3f29fdbe9..938f756b9 100644 --- a/src/transmit.cpp +++ b/src/transmit.cpp @@ -389,9 +389,9 @@ tx_send(struct tx *tx, struct video_frame *frame, struct rtp *rtp_session) fec_check_messages(tx); uint32_t ts = - (frame->flags & TIMESTAMP_VALID) == 0 - ? get_local_mediatime() - : get_local_mediatime_offset() + frame->timestamp; + incompatible_features && (frame->flags & TIMESTAMP_VALID) != 0 + ? get_local_mediatime_offset() + frame->timestamp + : get_local_mediatime(); if(frame->fragment && tx->last_frame_fragment_id == frame->frame_fragment_id) { ts = tx->last_ts; @@ -774,9 +774,9 @@ void audio_tx_send(struct tx* tx, struct rtp *rtp_session, const audio_frame2 * fec_check_messages(tx); const uint32_t timestamp = - buffer->get_timestamp() == -1 - ? get_local_mediatime() - : get_local_mediatime_offset() + buffer->get_timestamp(); + incompatible_features && buffer->get_timestamp() != -1 + ? get_local_mediatime_offset() + buffer->get_timestamp() + : get_local_mediatime(); for (int channel = 0; channel < buffer->get_channel_count(); ++channel) {