2016-12-06 2 views
0

YUY2 형식의 이미지 스트림이 있습니다. 이 이미지들을 QQuickItem에 그려야합니다. Qt Quick 2에서 사용할 수 있습니다.QQuickItem을 빨리 다시 칠하는 방법은 무엇입니까?

C++로 작성된 QML 객체를 가장 빨리 다시 그리는 방법은 무엇입니까? 비디오 렌더링에 사용되는 개체가 있습니까? 내가 QQuickPaintedItem을 상속하는 클래스를 만드는 시도 무엇


. YUY2 이미지를 RGBA8888 형식으로 변환 한 다음 QImage을 사용하여로드 한 다음 QPainter을 사용하여 그립니다. QQuickPaintedItem이 큰 경우 (예 : 1000x1000보다 큰 경우) 효율이 떨어지는 것으로 나타났습니다. 훨씬 빠른 방법은 QImageQPixmap으로 변환 한 다음 QPainter을 사용하여 페인트하는 것입니다. 지금은 다소 좋지만 어쩌면 더 빠른 방법일까요? 예를 들어 이미지 변환은 프로세스가 너무 느려 보인다.

+3

'QQuickPaintedItem'을 사용하면 성능이 향상되지 않습니다. 커스텀 지오메트리와 간단한 쉐이더로 항목을 구현하여 원하는 텍스처로 쿼드를 채울 수 있습니다. 그런 다음 항목에 새 텍스처를 입력하십시오. 디스플레이와 스케일링은 매우 빠릅니다. 이미 그 예가있을 수 있습니다. 또한'QQuickFramebufferObject'를 사용하여 렌더링 하위 객체의 텍스처를 업데이트 할 수 있습니다. –

+0

@KubaOber 도움을 주셔서 감사합니다. 원한다면 의견을 답변으로 게시하고 동의 할 것입니다. –

답변

0

나는 QQuickItem을 정의 된 updatePaintNode 함수 (Kuba Ober's 코멘트의 첫 번째 아이디어)와 함께 사용하여 작업하도록했습니다.

This example 많은 도움이되었습니다. 그것에서 NoisyNode 클래스 렌더링 배경 (정적 이미지) 및 Graph 그것을 사용하고 있습니다. 나는이 두 클래스를 내 프로젝트에 적용하여 내 필요에 맞게 조정했습니다. 나는 1080x1920 픽셀, 30fps를 표시하는데 문제가 없었다. 비디오를 표시하는 것을 이해함에 따라 YUV를 RGB로 변환해야하므로 곧바로이 작업을 수행하고 RGBA 픽셀 배열로 작업했습니다.

관련 문제