관리 메뉴

KorSA

Bitmap Create / Draw 시 lock을 걸 때 본문

Development Experience/Video Streaming

Bitmap Create / Draw 시 lock을 걸 때

Praiv. 2020. 8. 26. 18:17
320x100

[ 증상 ]

회사에서 영상 렌더링을 위한 Bitmap Create / Draw 코드를 고칠 일이 있었다.

Bitmap Create 하는 구간과 Bitmap Draw 하는 구간을 하나의 mutex로 locking하였다.

이상없이 잘 되나 했더니 화면이 자꾸 껌벅껌벅 거리는 것이었다.

 

[ 원인 ]

이유는 Bitmap Create가 시간을 많이 잡아먹어서 Draw가 제대로 수행되지 않았던 거였다.

Bitmap Create 하면서 lock을 계속 잡고 있기 때문에,

같은 mutex를 사용하는 Bitmap Draw영역은 lock 구간에 들어가지 못하고 기다린다.

 

[ 조치 ]

lock을 걸 때에는 최대한 lock 구간 내부에서 빨리 빠져나와야 한다.

 

그래서 Bitmap Create 하는 부분을 locking 범위에서 제외시켰다.

대신, 새로 생성한 Bitmap을 가리키는 포인터를 멤버 변수에 할당하는 그 코드에 locking을 걸어주었다.

 

주소값만 복사되기 때문에 Bitmap Create 과정을 전부 기다려야하는 기존 방식보다 훨씬 빨리 lock 구간을 빠져나왔다.

그리고 Bitmap Draw 구간에서는 이 멤버 변수에 접근해서 그려주면 끝이다.

 

이렇게 수정한 결과, 영상 렌더링 시 껌벅거리는 현상이 사라졌다.

728x90
728x90

'Development Experience > Video Streaming' 카테고리의 다른 글

영상 frame 관리  (0) 2020.12.15
영상 Delay 이슈  (0) 2020.08.26
MSDN WIC 의 Pixel Format 정리  (0) 2020.04.22
Comments