diff --git a/BuildScripts~/build_libwebrtc_android.sh b/BuildScripts~/build_libwebrtc_android.sh index 61843f663a..8e30af6880 100755 --- a/BuildScripts~/build_libwebrtc_android.sh +++ b/BuildScripts~/build_libwebrtc_android.sh @@ -48,6 +48,11 @@ patch -N "src/build/android/gyp/turbine.py" < "$COMMAND_DIR/patches/downgradeJDK # Fix SetRawImagePlanes() in LibvpxVp8Encoder patch -N "src/modules/video_coding/codecs/vp8/libvpx_vp8_encoder.cc" < "$COMMAND_DIR/patches/libvpx_vp8_encoder.patch" +patch -N "src/modules/video_coding/codecs/vp9/libvpx_vp9_encoder.cc" < "$COMMAND_DIR/patches/libvpx_vp9_encoder.patch" + +patch -N "src/modules/video_coding/codecs/av1/libaom_av1_encoder.cc" < "$COMMAND_DIR/patches/libaom_av1_encoder.patch" + + pushd src # Fix AdaptedVideoTrackSource::video_adapter() patch -p1 < "$COMMAND_DIR/patches/fix_adaptedvideotracksource.patch" diff --git a/BuildScripts~/build_libwebrtc_ios.sh b/BuildScripts~/build_libwebrtc_ios.sh index 84ef9c0703..dbaeba3d1c 100755 --- a/BuildScripts~/build_libwebrtc_ios.sh +++ b/BuildScripts~/build_libwebrtc_ios.sh @@ -36,6 +36,10 @@ patch -N "src/sdk/BUILD.gn" < "$COMMAND_DIR/patches/add_objc_deps.patch" # Fix SetRawImagePlanes() in LibvpxVp8Encoder patch -N "src/modules/video_coding/codecs/vp8/libvpx_vp8_encoder.cc" < "$COMMAND_DIR/patches/libvpx_vp8_encoder.patch" +patch -N "src/modules/video_coding/codecs/vp9/libvpx_vp9_encoder.cc" < "$COMMAND_DIR/patches/libvpx_vp9_encoder.patch" + +patch -N "src/modules/video_coding/codecs/av1/libaom_av1_encoder.cc" < "$COMMAND_DIR/patches/libaom_av1_encoder.patch" + # use included python export PATH="$(pwd)/depot_tools/bootstrap-3.8.0.chromium.8_bin/python/bin:$PATH" diff --git a/BuildScripts~/build_libwebrtc_linux.sh b/BuildScripts~/build_libwebrtc_linux.sh index 2239939744..60b9461a17 100755 --- a/BuildScripts~/build_libwebrtc_linux.sh +++ b/BuildScripts~/build_libwebrtc_linux.sh @@ -29,6 +29,10 @@ patch -N "src/BUILD.gn" < "$COMMAND_DIR/patches/add_jsoncpp.patch" # Fix SetRawImagePlanes() in LibvpxVp8Encoder patch -N "src/modules/video_coding/codecs/vp8/libvpx_vp8_encoder.cc" < "$COMMAND_DIR/patches/libvpx_vp8_encoder.patch" +patch -N "src/modules/video_coding/codecs/vp9/libvpx_vp9_encoder.cc" < "$COMMAND_DIR/patches/libvpx_vp9_encoder.patch" + +patch -N "src/modules/video_coding/codecs/av1/libaom_av1_encoder.cc" < "$COMMAND_DIR/patches/libaom_av1_encoder.patch" + mkdir -p "$ARTIFACTS_DIR/lib" for target_cpu in "x64" diff --git a/BuildScripts~/build_libwebrtc_macos.sh b/BuildScripts~/build_libwebrtc_macos.sh index 25bd429390..2f781af3a2 100755 --- a/BuildScripts~/build_libwebrtc_macos.sh +++ b/BuildScripts~/build_libwebrtc_macos.sh @@ -36,6 +36,10 @@ patch -N "src/sdk/BUILD.gn" < "$COMMAND_DIR/patches/add_objc_deps.patch" # Fix SetRawImagePlanes() in LibvpxVp8Encoder patch -N "src/modules/video_coding/codecs/vp8/libvpx_vp8_encoder.cc" < "$COMMAND_DIR/patches/libvpx_vp8_encoder.patch" +patch -N "src/modules/video_coding/codecs/vp9/libvpx_vp9_encoder.cc" < "$COMMAND_DIR/patches/libvpx_vp9_encoder.patch" + +patch -N "src/modules/video_coding/codecs/av1/libaom_av1_encoder.cc" < "$COMMAND_DIR/patches/libaom_av1_encoder.patch" + mkdir -p "$ARTIFACTS_DIR/lib" for is_debug in "true" "false" diff --git a/BuildScripts~/build_libwebrtc_win.cmd b/BuildScripts~/build_libwebrtc_win.cmd index 34dd7b7b78..c84ddde521 100644 --- a/BuildScripts~/build_libwebrtc_win.cmd +++ b/BuildScripts~/build_libwebrtc_win.cmd @@ -39,6 +39,10 @@ patch -N "src\api\task_queue\task_queue_base.h" < "%COMMAND_DIR%\patches\fix_tas rem fix SetRawImagePlanes() in LibvpxVp8Encoder patch -N "src\modules\video_coding\codecs\vp8\libvpx_vp8_encoder.cc" < "%COMMAND_DIR%\patches\libvpx_vp8_encoder.patch" +patch -N "src\modules\video_coding\codecs\vp9\libvpx_vp9_encoder.cc" < "%COMMAND_DIR%\patches\libvpx_vp9_encoder.patch" + +patch -N "src\modules\video_coding\codecs\av1\libaom_av1_encoder.cc" < "%COMMAND_DIR%\patches\libaom_av1_encoder.patch" + mkdir "%ARTIFACTS_DIR%\lib" setlocal enabledelayedexpansion diff --git a/BuildScripts~/patches/libaom_av1_encoder.patch b/BuildScripts~/patches/libaom_av1_encoder.patch new file mode 100644 index 0000000000..15f8c29444 --- /dev/null +++ b/BuildScripts~/patches/libaom_av1_encoder.patch @@ -0,0 +1,15 @@ +diff --git a/modules/video_coding/codecs/av1/libaom_av1_encoder.cc b/modules/video_coding/codecs/av1/libaom_av1_encoder.cc +index 28a8e5f846..817826d248 100644 +--- a/modules/video_coding/codecs/av1/libaom_av1_encoder.cc ++++ b/modules/video_coding/codecs/av1/libaom_av1_encoder.cc +@@ -603,7 +603,9 @@ int32_t LibaomAv1Encoder::Encode( + // Set frame_for_encode_ data pointers and strides. + MaybeRewrapImgWithFormat(AOM_IMG_FMT_I420); + auto i420_buffer = mapped_buffer->GetI420(); +- RTC_DCHECK(i420_buffer); ++ if (!i420_buffer) { ++ return WEBRTC_VIDEO_CODEC_ENCODER_FAILURE; ++ } + frame_for_encode_->planes[AOM_PLANE_Y] = + const_cast(i420_buffer->DataY()); + frame_for_encode_->planes[AOM_PLANE_U] = diff --git a/BuildScripts~/patches/libvpx_vp9_encoder.patch b/BuildScripts~/patches/libvpx_vp9_encoder.patch new file mode 100644 index 0000000000..bb6a5d0ebf --- /dev/null +++ b/BuildScripts~/patches/libvpx_vp9_encoder.patch @@ -0,0 +1,15 @@ +diff --git a/modules/video_coding/codecs/vp9/libvpx_vp9_encoder.cc b/modules/video_coding/codecs/vp9/libvpx_vp9_encoder.cc +index e460625aea..4194e550df 100644 +--- a/modules/video_coding/codecs/vp9/libvpx_vp9_encoder.cc ++++ b/modules/video_coding/codecs/vp9/libvpx_vp9_encoder.cc +@@ -2090,7 +2090,9 @@ rtc::scoped_refptr LibvpxVp9Encoder::PrepareBufferForProfile0( + case VideoFrameBuffer::Type::kI420A: { + MaybeRewrapRawWithFormat(VPX_IMG_FMT_I420); + const I420BufferInterface* i420_buffer = mapped_buffer->GetI420(); +- RTC_DCHECK(i420_buffer); ++ if(!i420_buffer) { ++ return {}; ++ } + raw_->planes[VPX_PLANE_Y] = const_cast(i420_buffer->DataY()); + raw_->planes[VPX_PLANE_U] = const_cast(i420_buffer->DataU()); + raw_->planes[VPX_PLANE_V] = const_cast(i420_buffer->DataV()); diff --git a/Plugin~/WebRTCPlugin/GpuMemoryBuffer.cpp b/Plugin~/WebRTCPlugin/GpuMemoryBuffer.cpp index 05496264b7..514e462efe 100644 --- a/Plugin~/WebRTCPlugin/GpuMemoryBuffer.cpp +++ b/Plugin~/WebRTCPlugin/GpuMemoryBuffer.cpp @@ -65,8 +65,10 @@ namespace webrtc { // One texture cannot map CUDA memory and CPU memory simultaneously. // Believe there is still room for improvement. +#if CUDA_PLATFORM if (!device_->CopyResourceFromNativeV(texture_.get(), ptr)) return false; +#endif if (!device_->CopyResourceFromNativeV(textureCpuRead_.get(), ptr)) return false; return true; diff --git a/Plugin~/WebRTCPlugin/GraphicsDevice/Vulkan/VulkanGraphicsDevice.cpp b/Plugin~/WebRTCPlugin/GraphicsDevice/Vulkan/VulkanGraphicsDevice.cpp index db8dc79c6b..8333071110 100644 --- a/Plugin~/WebRTCPlugin/GraphicsDevice/Vulkan/VulkanGraphicsDevice.cpp +++ b/Plugin~/WebRTCPlugin/GraphicsDevice/Vulkan/VulkanGraphicsDevice.cpp @@ -1,5 +1,6 @@ #include "pch.h" +#include #include #include "GraphicsDevice/GraphicsUtility.h" @@ -107,6 +108,7 @@ namespace webrtc kUnityVulkanResourceAccess_PipelineBarrier, unityVulkanImage.get())) { + RTC_LOG(LS_ERROR) << "UnityGraphicsVulkan::AccessTexture failed."; return nullptr; } return unityVulkanImage; @@ -463,6 +465,12 @@ namespace webrtc m_LastStateCond.wait_until(lock, std::chrono::system_clock::now() + m_syncTimeout, [vulkanTexture, this] { return vulkanTexture->currentFrameNumber <= m_LastState.safeFrameNumber; }); + if (!ret) + { + RTC_LOG(LS_ERROR) << "WaitSync timeout. " + << "texture: " << texture << "currentFrameNumber: " << vulkanTexture->currentFrameNumber + << ", safeFrameNumber: " << m_LastState.safeFrameNumber; + } return ret; }