2010-02-05 2 views
1

나는 웹캠 캡처 응용 프로그램을 가지고 있으며 내 WPF UI에서 비디오 미리보기를 구현하려고합니다. 캡처는 C++ DLL에서 발생합니다. 현재 솔루션이 있지만 너무 만족스럽지 않습니다. 주요 목표는 UI에서의 비디오 미리보기가 비디오 프레임을 압축하여 디스크에 기록해야하기 때문에 C++ DLL에 많은 영향을 미치지 않는 것입니다. 압축은 CPU를 많이 사용하기 때문에 모든 프레임을 표시 할 수 없습니다.C에서 비디오 미리보기

나의 현재 비디오 미리보기 솔루션입니다 : 이미지 컨트롤 내 창에 사용되며, 소스 속성이 데이터 바인더 제본 BitmapSource는이다

  • 라는 VideoPreviewSource

  • 나는 시스템을 설정 .Threading.TimerCallback 내 미리보기를 업데이트 할 수 있습니다. 타이머 콜백 함수는 UpdatePreview()를 호출하는 UI (this.Dispatcher.BeginInvoke 사용)를 업데이트 할 수있는 스레드로 전달됩니다.

  • UpdatePreview()는 C++ DLL에 비디오 프레임을 요청합니다. DLL을 호출하면 이미지의 원시 데이터가 byte [] _rawImageData로 저장되며,이 데이터는 윈도우의 생성자에서 한 번 할당됩니다.

  • UpdatePreview()는 다음과 같이 VideoPreviewSource를 설정합니다. BitmapSource.Create (width, height, 96, 96, pf, null, _rawImageData, width * 4); 마지막으로 OnPropertyChanged ("VideoPreviewSource")가 호출되었습니다.

타이머를 자주 만들면 가비지 수집이 덜 자주 호출되고 기본적으로 메모리 누수처럼 보입니다.

비디오 미리보기에 더 좋은 방법이 있습니까?

+0

C++ DLL에서 제공하는 데이터를 릴리스해야합니까? –

답변

0

InteropBitmapRenderer 나는 당신을 도울 것입니다. 비록 내가 그것을 어려운 하드 코딩 된 RGBA (32 비트). WPF 3.51 이전 버전이 24 비트에서 문제가 있다고 생각하여 RGB24와 어떻게 작동하는지 잘 모르겠습니다.

웹캠이 DirectShow를 지원하는 경우 내 WPF MediaKit을 사용하고 VideCaptureElement를 사용하여 웹캠을 표시 할 수 있습니다.

관련 문제