diff --git a/src/queue/share_queue_write.cpp b/src/queue/share_queue_write.cpp index a6cff82..2c6cd00 100644 --- a/src/queue/share_queue_write.cpp +++ b/src/queue/share_queue_write.cpp @@ -140,6 +140,9 @@ bool shared_queue_push_audio(share_queue* q, uint32_t size, int offset = q->header->header_size + (q->header->element_size) * q->index; + q->header->write_index = q->index; + q->header->last_ts = video_ts; + uint8_t* buff = (uint8_t*)q->header + offset; frame_header* head = (frame_header*)buff; uint8_t* data = (uint8_t*)buff + q->header->element_header_size; @@ -147,8 +150,6 @@ bool shared_queue_push_audio(share_queue* q, uint32_t size, head->linesize[0] = size; head->timestamp = timestamp; - q->header->last_ts = video_ts; - q->header->write_index = q->index; q->index++; if (q->index >= q->header->queue_length) { diff --git a/src/virtual-output/virtual_output.cpp b/src/virtual-output/virtual_output.cpp index 99a3017..f2c960b 100644 --- a/src/virtual-output/virtual_output.cpp +++ b/src/virtual-output/virtual_output.cpp @@ -114,7 +114,7 @@ static bool virtual_output_start(void *data) output_running = true; shared_queue_set_delay(&out_data->video_queue, out_data->delay); shared_queue_set_delay(&out_data->audio_queue, out_data->delay); - start = obs_output_begin_data_capture(out_data->output, 0); + if (audio_running) { struct audio_convert_info conv = {}; @@ -124,6 +124,8 @@ static bool virtual_output_start(void *data) obs_output_set_audio_conversion(out_data->output, &conv); } + start = obs_output_begin_data_capture(out_data->output, 0); + blog(LOG_INFO, "starting virtual-output on VirtualCam'%d'", out_data->video_mode + 1); diff --git a/src/virtual-source/virtual-audio.cpp b/src/virtual-source/virtual-audio.cpp index e647cfc..7a0a1f4 100644 --- a/src/virtual-source/virtual-audio.cpp +++ b/src/virtual-source/virtual-audio.cpp @@ -90,14 +90,12 @@ HRESULT CVAudioStream::FillBuffer(IMediaSample *pms) uint64_t timestamp = 0; REFERENCE_TIME start_time = 0; REFERENCE_TIME end_time = 0; - long a = 0; hr = pms->GetPointer((BYTE**)&dst); if (system_start_time <= 0) { system_start_time = get_current_time(); - a = pms->GetActualDataLength(); } else current_time = get_current_time(system_start_time); @@ -108,6 +106,9 @@ HRESULT CVAudioStream::FillBuffer(IMediaSample *pms) if (sync_timeout <= 0) { SetTimeout(); } + else if(current_time < prev_end_ts) + { + } else if (current_time - prev_end_ts > sync_timeout) { if (queue.header) share_queue_init_index(&queue);