DirectShow DSPACK 컴포넌트 스위트를 사용하는 Delphi 6 애플리케이션이 있습니다. 필터 그래프의 이미지를 렌더링하는 TVideoWindow 구성 요소가 있습니다. TVideoWindow 구성 요소는 페이지 구성 요소의 탭에 있습니다. 필터 그래프를 실행할 때 탭이 보이면 비디오가 잘 보입니다. 또한 다른 탭으로 전환하여 다시 돌아올 수 있으며 동영상은 여전히 괜찮습니다. 그러나 탭이 표시되지 않은 상태에서 필터 그래프를 실행하면 해당 탭으로 전환 할 때 비디오 창 영역이 검정색입니다. 다른 탭으로 전환하고 다시 시도하여 호스트 양식을 최소화하고 복원했습니다. 이것이 창/컴포넌트 핸들링 라이프 사이클 문제인 지 궁금합니다. 이 문제를 어떻게 해결할 수 있습니까?호스트 탭이 보이지 않을 때 그래프가 시작되면 DirectShow 렌더 윈도우가 검은 색으로 보임 (TVideoWindow)
3
A
답변
2
이후에 표시되는 숨겨진 패널에 EVR을 설정하는 것과 같이 COM 개체를 직접 사용할 때이 문제가 발생하지 않습니다. TVideoWindow를 없애고 VMR9 및 EVR과 같은 렌더링을 직접 사용하면 시간이 더 많이 걸릴 것이라고 생각합니다. 당신은
FDisplayControl: IMFVideoDisplayControl;
FEVR: IBaseFilter;
R: TNormalizedRect;
R: TRect;
hr := Succeeded(CoCreateInstance(CLSID_EnhancedVideoRenderer, nil, CLSCTX_INPROC, IID_IBaseFilter, FEVR));
if (hr <> S_OK) then
begin
showmessage(GetErrorString(hr) + ' (Could not create the enhanced video renderer : ' + inttohex(hr,8) + ')');
Exit;
end;
(FilterGraph as IFilterGraph2).AddFilter().AddFilter(FEVR, PWideChar(WideString('EVR')));
(FEVR as IMFGetService).GetService(MR_VIDEO_RENDER_SERVICE, IID_IMFVideoDisplayControl, FDisplayControl);
FDisplayControl.SetVideoWindow(Panel.Handle);
NR.Left := 0;
NR.Top := 0;
NR.Right := 1;
NR.Bottom := 1;
R := ClientRect;
FDisplayControl.SetVideoPosition(@nr, @r);
FDisplayControl.SetAspectRatioMode(MFVideoARMode_None);
주의 라인을 따라이, 뭔가를 DSPack을 제거 할 필요가 없습니다 : 위의 나도이 문제가 있었다 EVR.pas
+0
나는 그 기술을 시험해보고 나중에 결과를 게시 할 것이다. –
관련 문제
- 1. OpenGL ES 2.0 텍스처가 검은 색으로 보임
- 2. Android OpenGL ES 2.0 질감이 완전히 검은 색으로 보임
- 3. DirectShow 그래프 정리 - DirectShow 그래프가 중지되지 않습니다.
- 4. 안드로이드 // 대화 상자가 보이지 않습니다. intent.createChooser가 검은 색 화면을 보임
- 5. 검은 색으로 채워진 얼룩
- 6. Chrome 탭이 표시되지 않을 때 setInterval '스택'
- 7. 이미지는 검은 색으로 표시 - CSS
- 8. 윈도우에 컬링 윈도우가 보이지 않는다.
- 9. 서로 위에 윈도우가 보이지 않게하기
- 10. C++ Allegro - 비트 맵이 검은 색으로 변합니다.
- 11. 플렉스 웹 응용 프로그램 : 윈도우가 보이지 않을 때 프레임 속도 저하 방지
- 12. GLSurfaceView가 Honeycomb에서 검은 색으로 표시되며 ICS에서 작동합니다
- 13. jQuery에서 img resize 이벤트를 발생시키는 방법은 윈도우가 열리지 않을 때 윈도우가 열릴 때
- 14. 보이지 않을 때 UITableView의 셀이 해제됩니다.
- 15. QWidget :: mapToGlobal() 위젯이 보이지 않을 때
- 16. 플래시 구성 요소가 보이지 않을 때 결정
- 17. 페이지가 보이지 않을 때 알림 표시
- 18. 메시가 보이지 않을 때 메쉬 불투명도 문제
- 19. 보이지 않을 때 VideoView가 시작되지 않습니다.
- 20. 개체/효과가 Silverlight에서 보이지 않을 때 렌더링합니까?
- 21. 방법 : UITextView가 보이지 않을 때 키보드 숨기기?
- 22. GUI의 일부가 검은 색으로 변합니다. 크기 조정시
- 23. Safari 이미지 배경이 검은 색으로 표시됩니다.
- 24. CCLiquid가 내 화면을 검은 색으로 렌더링합니다.
- 25. 비트 맵을 저장할 때 배경이 검은 색으로 변함 - C#
- 26. QML을 사용할 때 내 backround 이미지가 검은 색으로 보입니다.
- 27. 로드시 페이드 인 할 때 RibbonWindow가 검은 색으로 표시됩니다.
- 28. OpenGL ES 2.0 텍스처가 검은 색으로 표시됩니다.
- 29. 끌면 스텁의 목록보기가 검은 색으로 변합니다.
- 30. Android : 슬라이드 광고가 삽입 광고 사이에 검은 색으로 뒤덮입니다.
이 필요합니다. 불행히도 고정하지 마십시오 – Simon
호스팅 창이 표시 될 때까지 시작 연기 (실제로, VMR/EVR 초기화)는 어떻게됩니까? –
@RomanR. - 그렇게하는 코드를 추가했습니다. 다소 효과가 있지만 방탄이 아닙니다. 이 게시물의 정보를 사용하여 창이 표시되는지 확인했습니다. http://stackoverflow.com/questions/646527/how-can-i-tell-if-a-delphi-control-is-currently-visible. 도움이 되긴하지만 때로는 "검은 창"을 얻습니다. 아직 코드를 수정 중입니다. –