ffmpeg 스트리밍 클라이언트 rgb -> yuv 변환 코드 shader를 이용하도록 수정.

win32 데스크탑용 ffmpeg 영상 플레이 코드를 왕창 고쳤다.

원래 클라우드 게이밍에서 스트리밍 클라이언트로 사용하려고 만든건데 파일도 디코딩할 수 있다.

이 코드를 기반으로 Windows 10 UWP 동영상 앱을 취미로 만들고(만들다 말다..생각나면 조금씩 고치고) 있다.

근데 윈폰에서 ffmpeg로 h264디코딩을 해보면 지랄같이 느리다.

안그래도 느린데 ffmpeg의 sws…()함수를 이용해서 yuv->rgb변환을 하면 더 느리다.

그래서 이 부분만이라도 성능을 개선해볼까 해서 쉐이더를 이용하도록 코드를 고쳤다.

겸사겸사 D2D로 렌더링 하던것을 D3D기반으로 렌더링 할 수 있도록 D3D 이미지 렌더링 프레임웍을 만들어서 적용했다. 이건 UWP에서도 사용가능하다.

테크닉은 별거 없고 그냥 노가다 코딩이었다.

y(휘도)정보는 각 픽셀별로 갖고 있지만 u,v정보는 4픽셀이 하나를 공유하는 식이라 텍스쳐를 3개 만들어하나 생각했는데 전혀 그럴 필요가 없었다. rgb에 그냥 yuv로 맵핑해서 넣어놨음. 텍스쳐에 값을 써넣을때 4픽셀이 같은 데이타를 갖도로 하면 그만이니까.

잘 작동하는데 PC에선 특별히 빨라진건 모르겠다. 안그래도 워낙 빨라서…

나중에 Windows 10 UWP코드에 적용해봐야지.


답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

%s에 연결하는 중