Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

macOS 版がビルドは成功するが動作させようとするとセグメンテーションフォルトする問題の修正 #90

Merged
merged 2 commits into from
Aug 8, 2019

Conversation

hakobera
Copy link
Collaborator

@hakobera hakobera commented Aug 7, 2019

#89 で未解決となっている問題の1つを修正する PR です。

MacCapturer を利用する場合、
frame.video_frame_buffer()->type() == webrtc::VideoFrameBuffer::Type::kNative
を返しますが、内部では NativeBuffer を使っていないので、dynamic_cast が失敗し、nullptr を返します。これによって Segmentation fault: 11 (EXC_BAD_ACCESS (code=1, address=0x10) 要するに NullPointer 例外) が発生しています。

V4L2VideoCapture を使う場合でも、captureVideoType が
webrtc::VideoType::kMJPEG か webrtc::VideoType::kI420 ではないケースで
同様の問題が発生する可能性があるため、ScalableTrackSource#useNativeBuffer() を
追加して、dynamic_cast 前に条件チェックをするようにしました。

単純に、dynamic_cast の戻り値が nullptr であるかをチェックするでも動くのですが、こちらの方がコード的に意味が通るかと思い、そうしました。

ARC 対応はおまけです。
残念ながら、この PR では #77 は修正できていません。

MacCapturer を利用する場合、
frame.video_frame_buffer()->type() == webrtc::VideoFrameBuffer::Type::kNative
を返すが、NativeBuffer を使っていないので、dynamic_cast が nullptr を返し、
これによって segmentation fault 11 が発生している。

V4L2VideoCapture を使う場合でも、captureVideoType が
webrtc::VideoType::kMJPEG か webrtc::VideoType::kI420 ではないケースで
同様の問題が発生する可能性があるため、ScalableTrackSource#useNativeBuffer() を
追加して、dynamic_cast 前に条件チェックをするようにした。
@hakobera hakobera changed the title macOS で接続時に Segmentation fault: 11 で落ちる問題の修正 macOS 版がビルドは成功するが動作させようとするとセグメンテーションフォルトする問題の修正 Aug 7, 2019
@@ -56,7 +56,7 @@ void ScalableVideoTrackSource::OnCapturedFrame(const webrtc::VideoFrame& frame)
return;
}

if (frame.video_frame_buffer()->type() == webrtc::VideoFrameBuffer::Type::kNative)
if (useNativeBuffer() && frame.video_frame_buffer()->type() == webrtc::VideoFrameBuffer::Type::kNative)
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

frame.video_frame_buffer()->type() == webrtc::VideoFrameBuffer::Type::kNative の判定はなくても動作は変わらないとは思いますが、念のため残しています。

@voluntas voluntas requested review from tnoho, kdxu and melpon August 8, 2019 01:22
@voluntas voluntas self-assigned this Aug 8, 2019
@voluntas voluntas added the バグ label Aug 8, 2019
@voluntas
Copy link
Member

voluntas commented Aug 8, 2019

@hakobera macOS でセグフォしないことを確認しました。素晴らしい Pull-Request ありがとうございます。

@voluntas voluntas merged commit 31bf2d6 into shiguredo:develop Aug 8, 2019
@voluntas voluntas mentioned this pull request Aug 8, 2019
28 tasks
nkkn1446 pushed a commit to nkkn1446/momo that referenced this pull request Oct 21, 2022
macOS 版がビルドは成功するが動作させようとするとセグメンテーションフォルトする問題の修正
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants