2013-08-29 11 views
2

사람들이 AVAssetReader 또는 AVPlayerItemVideoOutput을 사용하여 비디오 프레임에서 비디오 픽셀을 원시 픽셀 데이터로 가져 오는 방법을 설명하는 게시물을 많이 읽었습니다. OpenGL 텍스처에 업로드하십시오. 그러나 이것은 픽셀 데이터의 불필요한 사본을 생성 할뿐만 아니라 (그래픽 카드와 대비되는) CPU로 비디오 프레임을 디코딩하는 불필요한 단계를 생성하는 것으로 보입니다.AVFoundation on OSX : 픽셀 데이터에 대한 액세스가 필요없는 비디오에서 OpenGL 텍스처

AVFoundation이 비디오 재생 프로세스의 모든 측면을 소유하게하는 방법이 있습니까?하지만 어떻게 든 OpenGL에서 만든 OpenGL 텍스처 ID에 대한 액세스를 제공하며 필요에 따라 OpenGL 컨텍스트에 그려 넣을 수 있습니까? 아무도 이런 걸 보지 못했습니까? 즉

이 의사 코드 같은 :

초기화 :

  • 열린 영화 파일, OpenGL은 컨텍스트를 제공하는 단계;
  • get opengl texture id;

모든 OpenGL은 루프 :

  • 무승부 텍스처 ID;

답변

0

당신이 OS X에 Video Decode Acceleration Framework를 사용한다면, 그것은 당신에게 줄 것이다 CVImageBufferRef 당신은 "디스플레이"당신은 OpenGL 소프트웨어의 기본 텍스처 손잡이로 사용에 CVOpenGLTextureGetName (...)를 호출 할 수 있습니다 프레임을 디코딩 할 때.

물론 이것은 질문보다 낮은 수준이지만 특정 비디오 형식에서는 가능합니다. 이것은 제가 개인적인 경험을 가진 유일한 기술입니다. 그러나 나는 QTMovie도 훨씬 더 높은 수준에서 유사한 기능을 가지고 있으며, 찾고있는 기능의 모든 범위를 제공 할 것으로 생각합니다.

AVFoundation에 대한 의견을 말씀 드리고 싶지만 10.6 이후 OS X에서 개발 작업을하지 않았습니다. 나는 그 과정이 비슷해야한다고 상상한다. CoreVideo 위에 겹쳐 져야한다.

+0

내가 말하는 QTMovie 기능을 찾지 못하는 것 같습니다. 내 응용 프로그램은 64 비트에서 실행해야하므로 아마도 32 비트에서만 작동합니다. 더 자세한 정보가 있습니까? – MusicMan3001

+0

@ MusicMan3001 : 이것을 확인하십시오 http://www.cimgf.com/2008/09/10/core-animation-tutorial-rendering-quicktime-movies-in-a-caopengllayer/ 나는 그것이 필요한 모든 것을 설명해 줄 것이라고 생각합니다. 알고있다. –

+0

감사합니다 Andon, 저는 실제로 그 페이지를 보았습니다.하지만이 API는 더 이상 사용되지 않지만 64 비트에서는 작동하지 않는 API를 설명한다고 생각합니다. 누구든지 확인할 수 있습니까? – MusicMan3001