[ 증상 ]
회사에서 영상 렌더링을 위한 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 구간에서는 이 멤버 변수에 접근해서 그려주면 끝이다.
이렇게 수정한 결과, 영상 렌더링 시 껌벅거리는 현상이 사라졌다.
반응형
'Development Experience > Video Streaming' 카테고리의 다른 글
영상 frame 관리 (0) | 2020.12.15 |
---|---|
영상 Delay 이슈 (0) | 2020.08.26 |
MSDN WIC 의 Pixel Format 정리 (0) | 2020.04.22 |