diff --git a/src/single_window/render.cpp b/src/single_window/render.cpp index 69444b9..e079d64 100644 --- a/src/single_window/render.cpp +++ b/src/single_window/render.cpp @@ -217,6 +217,40 @@ int Render::Run() { screen_width_ = DM.w; screen_height_ = DM.h; + // Audio + SDL_AudioSpec want_in, have_in, want_out, have_out; + SDL_zero(want_in); + want_in.freq = 48000; + want_in.format = AUDIO_S16LSB; + want_in.channels = 1; + want_in.samples = 480; + want_in.callback = SdlCaptureAudioIn; + want_in.userdata = this; + + input_dev_ = SDL_OpenAudioDevice(NULL, 1, &want_in, &have_in, 0); + if (input_dev_ == 0) { + SDL_Log("Failed to open input: %s", SDL_GetError()); + // return 1; + } + + SDL_zero(want_out); + want_out.freq = 48000; + want_out.format = AUDIO_S16LSB; + want_out.channels = 1; + // want_out.silence = 0; + want_out.samples = 480; + want_out.callback = SdlCaptureAudioOut; + want_out.userdata = this; + + output_dev_ = SDL_OpenAudioDevice(NULL, 0, &want_out, &have_out, 0); + if (output_dev_ == 0) { + SDL_Log("Failed to open input: %s", SDL_GetError()); + // return 1; + } + + SDL_PauseAudioDevice(input_dev_, 0); + SDL_PauseAudioDevice(output_dev_, 0); + // Setup Dear ImGui context IMGUI_CHECKVERSION(); ImGui::CreateContext(); diff --git a/src/single_window/render.h b/src/single_window/render.h index 924c9b7..870b3bc 100644 --- a/src/single_window/render.h +++ b/src/single_window/render.h @@ -61,8 +61,9 @@ class Render { private: int ProcessMouseKeyEven(SDL_Event &ev); - void SdlCaptureAudioIn(void *userdata, Uint8 *stream, int len); - void SdlCaptureAudioOut(void *userdata, Uint8 *stream, int len); + + static void SdlCaptureAudioIn(void *userdata, Uint8 *stream, int len); + static void SdlCaptureAudioOut(void *userdata, Uint8 *stream, int len); private: int SaveSettingsIntoCacheFile(); diff --git a/src/single_window/render_callback_func.cpp b/src/single_window/render_callback_func.cpp index 7b45cca..d3070a0 100644 --- a/src/single_window/render_callback_func.cpp +++ b/src/single_window/render_callback_func.cpp @@ -78,34 +78,40 @@ int Render::ProcessMouseKeyEven(SDL_Event &ev) { } void Render::SdlCaptureAudioIn(void *userdata, Uint8 *stream, int len) { - if (1) { - if ("Connected" == connection_status_str_) { - SendData(peer_, DATA_TYPE::AUDIO, (const char *)stream, len); - } - } else { - memcpy(audio_buffer_, stream, len); - audio_len_ = len; - SDL_Delay(10); - audio_buffer_fresh_ = true; - } + // Render *render = (Render *)userdata; + // if (1) { + // if ("Connected" == render->connection_status_str_) { + // SendData(render->peer_, DATA_TYPE::AUDIO, (const char *)stream, len); + // } + // } else { + // memcpy(render->audio_buffer_, stream, len); + // render->audio_len_ = len; + // SDL_Delay(10); + // render->audio_buffer_fresh_ = true; + // } } void Render::SdlCaptureAudioOut(void *userdata, Uint8 *stream, int len) { - if (!audio_buffer_fresh_) { - return; + Render *render = (Render *)userdata; + if ("Connected" == render->connection_status_str_) { + SendData(render->peer_, DATA_TYPE::AUDIO, (const char *)stream, len); } - SDL_memset(stream, 0, len); + // if (!render->audio_buffer_fresh_) { + // return; + // } - if (audio_len_ == 0) { - return; - } else { - } + // SDL_memset(stream, 0, len); - len = (len > audio_len_ ? audio_len_ : len); - SDL_MixAudioFormat(stream, audio_buffer_, AUDIO_S16LSB, len, - SDL_MIX_MAXVOLUME); - audio_buffer_fresh_ = false; + // if (render->audio_len_ == 0) { + // return; + // } else { + // } + + // len = (len > render->audio_len_ ? render->audio_len_ : len); + // SDL_MixAudioFormat(stream, render->audio_buffer_, AUDIO_S16LSB, len, + // SDL_MIX_MAXVOLUME); + // render->audio_buffer_fresh_ = false; } void Render::OnReceiveVideoBufferCb(const char *data, size_t size, diff --git a/xmake.lua b/xmake.lua index 626bd56..6a22e1c 100644 --- a/xmake.lua +++ b/xmake.lua @@ -129,7 +129,7 @@ target("remote_desk") set_kind("binary") add_deps("rd_log", "common", "single_window") if is_os("windows") then - add_files("icon/app_icon.ico") + add_files("icon/app.rc") elseif is_os("macosx") then add_packages("ffmpeg") elseif is_os("linux") then