diff --git a/src/single_window/render.cpp b/src/single_window/render.cpp index 4764810..1f7e213 100644 --- a/src/single_window/render.cpp +++ b/src/single_window/render.cpp @@ -999,12 +999,10 @@ void Render::ProcessSdlEvent() { DestroyStreamWindowContext(); for (auto& [host_name, props] : client_properties_) { - if (props->dst_buffer_) { - thumbnail_->SaveToThumbnail( - (char*)props->dst_buffer_, props->video_width_, - props->video_height_, host_name, props->remote_host_name_, - props->remember_password_ ? props->remote_password_ : ""); - } + thumbnail_->SaveToThumbnail( + (char*)props->dst_buffer_, props->video_width_, + props->video_height_, host_name, props->remote_host_name_, + props->remember_password_ ? props->remote_password_ : ""); if (props->peer_) { std::string client_id = (host_name == client_id_) diff --git a/src/single_window/thumbnail.cpp b/src/single_window/thumbnail.cpp index a2db5e5..6fccbd9 100644 --- a/src/single_window/thumbnail.cpp +++ b/src/single_window/thumbnail.cpp @@ -143,23 +143,31 @@ int Thumbnail::SaveToThumbnail(const char* yuv420p, int width, int height, if (yuv420p) { ScaleYUV420pToABGR((char*)yuv420p, width, height, thumbnail_width_, thumbnail_height_, rgba_buffer_); - - std::string image_name; - if (password.empty()) { - return 0; - } else { - // delete the file which has no password in its name - std::string filename_without_password = remote_id + "N" + host_name; - DeleteThumbnail(filename_without_password); - - image_name = remote_id + 'Y' + password + host_name; + } else { + // If yuv420p is null, fill the buffer with black pixels + memset(rgba_buffer_, 0x00, thumbnail_width_ * thumbnail_height_ * 4); + for (int i = 0; i < thumbnail_width_ * thumbnail_height_; ++i) { + // Set alpha channel to opaque + rgba_buffer_[i * 4 + 3] = 0xFF; } - - std::string ciphertext = AES_encrypt(image_name, aes128_key_, aes128_iv_); - std::string file_path = image_path_ + ciphertext; - stbi_write_png(file_path.data(), thumbnail_width_, thumbnail_height_, 4, - rgba_buffer_, thumbnail_width_ * 4); } + + std::string image_name; + if (password.empty()) { + return 0; + } else { + // delete the file which has no password in its name + std::string filename_without_password = remote_id + "N" + host_name; + DeleteThumbnail(filename_without_password); + + image_name = remote_id + 'Y' + password + host_name; + } + + std::string ciphertext = AES_encrypt(image_name, aes128_key_, aes128_iv_); + std::string file_path = image_path_ + ciphertext; + stbi_write_png(file_path.data(), thumbnail_width_, thumbnail_height_, 4, + rgba_buffer_, thumbnail_width_ * 4); + return 0; }