Skip to content

Commit 9188e54

Browse files
authored
fix: Fix crash on Android pixel4a with vulkan (#874)
* fix crash on android pixel4a with vulkan * fix bug * fix code format * fix unittest error * fix crash of H.264 hw codec * [skip ci] Update plugins
1 parent 7481842 commit 9188e54

File tree

12 files changed

+20
-18
lines changed

12 files changed

+20
-18
lines changed

Plugin~/WebRTCPlugin/Codec/NvCodec/NvEncoderImpl.cpp

+6-1
Original file line numberDiff line numberDiff line change
@@ -396,7 +396,12 @@ namespace webrtc
396396
if (!m_encodedCompleteCallback)
397397
return WEBRTC_VIDEO_CODEC_UNINITIALIZED;
398398

399-
auto videoFrameBuffer = static_cast<ScalableBufferInterface*>(frame.video_frame_buffer().get());
399+
auto frameBuffer = frame.video_frame_buffer();
400+
if (frameBuffer->type() != VideoFrameBuffer::Type::kNative || frameBuffer->width() != m_codec.width ||
401+
frameBuffer->height() != m_codec.height)
402+
return WEBRTC_VIDEO_CODEC_ERR_PARAMETER;
403+
404+
auto videoFrameBuffer = static_cast<ScalableBufferInterface*>(frameBuffer.get());
400405
rtc::scoped_refptr<VideoFrame> video_frame = videoFrameBuffer->scaled()
401406
? static_cast<VideoFrameAdapter::ScaledBuffer*>(videoFrameBuffer)->GetVideoFrame()
402407
: static_cast<VideoFrameAdapter*>(videoFrameBuffer)->GetVideoFrame();

Plugin~/WebRTCPlugin/GpuMemoryBuffer.cpp

+4-1
Original file line numberDiff line numberDiff line change
@@ -41,16 +41,19 @@ namespace webrtc
4141

4242
GpuMemoryBufferFromUnity::~GpuMemoryBufferFromUnity() { }
4343

44-
void GpuMemoryBufferFromUnity::ResetSync()
44+
bool GpuMemoryBufferFromUnity::ResetSync()
4545
{
4646
if (!device_->ResetSync(texture_.get()))
4747
{
4848
RTC_LOG(LS_INFO) << "ResetSync failed.";
49+
return false;
4950
}
5051
if (!device_->ResetSync(textureCpuRead_.get()))
5152
{
5253
RTC_LOG(LS_INFO) << "ResetSync failed.";
54+
return false;
5355
}
56+
return true;
5457
}
5558

5659
void GpuMemoryBufferFromUnity::CopyBuffer(NativeTexPtr ptr)

Plugin~/WebRTCPlugin/GpuMemoryBuffer.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ namespace webrtc
5050
GpuMemoryBufferFromUnity(const GpuMemoryBufferFromUnity&) = delete;
5151
GpuMemoryBufferFromUnity& operator=(const GpuMemoryBufferFromUnity&) = delete;
5252

53-
void ResetSync();
53+
bool ResetSync();
5454
void CopyBuffer(NativeTexPtr ptr);
5555
UnityRenderingExtTextureFormat GetFormat() const override;
5656
Size GetSize() const override;

Plugin~/WebRTCPlugin/GpuMemoryBufferPool.cpp

+6-2
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,13 @@ namespace webrtc
3838
FrameResources* resources = it->get();
3939
if (!resources->IsUsed() && AreFrameResourcesCompatible(resources, size, format))
4040
{
41-
resources->MarkUsed(clock_->CurrentTime());
4241
GpuMemoryBufferFromUnity* buffer = static_cast<GpuMemoryBufferFromUnity*>(resources->buffer_.get());
43-
buffer->ResetSync();
42+
if (!buffer->ResetSync())
43+
{
44+
RTC_LOG(LS_INFO) << "It has not signaled yet";
45+
continue;
46+
}
47+
resources->MarkUsed(clock_->CurrentTime());
4448
buffer->CopyBuffer(ptr);
4549
return resources->buffer_;
4650
}

0 commit comments

Comments
 (0)