iOS6에서는 OpenGL을 사용하여 AVFoundation 비디오 프레임에서 일부 렌더링을 수행합니다. CVPixelBufferLockBaseAddress와 CVPixelBufferUnlockBaseAddress를 사용하는 많은 예제 코드를 보았습니다.하지만 정확하게 잠금 및 잠금 해제를 수행 할 때 또는 내가 왜 그렇게하는지 명확하지 않습니다. CPU가 메모리를 수정할 때 주소를 잠글까요? 아니면 GPU가 읽고있을 때 잠글 수 있습니까? 잠금을 해제해야하는시기는 언제입니까? 내가 왜 자물쇠를 풀고 싶었 을까? 나는 this Stack Overflow answer을 보았지만 내 질문에는 완전히 대답하지 않습니다.언제 CVPixelBufferLockBaseAddress 및 CVPixelBufferUnlockBaseAddress를 호출해야합니까?
1
A
답변
3
필요할 때마다 잠금을 설정하고 완료되면 더 이상 잠금을 해제하지 않아야합니다. 이렇게하면 버퍼가 겹쳐 쓰여지지 않아 일관성없는 상태가 될 수 있습니다.
펌웨어 전문가가이 설명을 들었습니다. 일반적으로 비디오 출력을 처리 할 때 포인터가있는 간접적 인 참조가 많다는 것을 명심해야합니다. "이봐, 내 꺼야, 어딘가에 다음 프레임을 가리 킵니다. "
버퍼가 더 이상 필요하지 않을 때 응용 프로그램을 기반으로 말할 수는 없지만 알아낼 수 있어야합니다. 버퍼 데이터를 다른 곳으로 복사 한 경우 (예 : 새 객체를 만드는 경우) 잠금을 해제 할 수 있습니다.
희망이 도움이됩니다.
2
CPU의 픽셀 버퍼에 액세스하려는 경우에만이 함수를 호출해야합니다. GPU의 경우 그러지 마십시오! Apple 의사는 매우 명확합니다. 여기
공식 사과 문서의 정보입니다 :당신은 CPU와 픽셀 데이터를 액세스하기 전에 CVPixelBufferLockBaseAddress 함수를 호출하고, 이후에 CVPixelBufferUnlockBaseAddress 함수를 호출해야합니다. 버퍼를 잠글 때 lockFlags 매개 변수에 kCVPixelBufferLock_ReadOnly 값을 포함 시키면 버퍼를 잠금 해제 할 때 kCVPixelBufferLock_ReadOnly 값도 포함시켜야합니다.
는 GPU으로 화소 데이터에 액세스 중요
는 로크가 필요하지 않고 성능을 손상시킬 수있다.
관련 문제
- 1. 언제 rawurlencode 및 rawurldecode를 호출해야합니까?
- 2. 언제 glGetError를 호출해야합니까?
- 3. Transaction.delistResource()를 언제 호출해야합니까?
- 4. 언제 MessageQueue.EndReceive()를 호출해야합니까?
- 5. 언제 java.sql.Connection.rollback()을 호출해야합니까?
- 6. 언제 super.onResume()을 호출해야합니까?
- 7. 언제 __method__를 직접 호출해야합니까?
- 8. 언제 glDeleteBuffers()를 호출해야합니까?
- 9. VB.NET에서 언제 RemoveHandler를 호출해야합니까?
- 10. 언제 Naming.unbind()를 호출해야합니까?
- 11. 언제 SharedPreferencesBackupHelper()/BackupAgent를 호출해야합니까?
- 12. WPF : 언제 Dispatcher.BeginInvoke를 호출해야합니까?
- 13. WebGL - gl.Flush를 언제 호출해야합니까?
- 14. 언제 RemoveStickyEvent (...)를 호출해야합니까?
- 15. super.onActivityResult를 언제 호출해야합니까?
- 16. ViewModel.LoadData를 언제 호출해야합니까?
- 17. 언제 XInitThreads를 호출해야합니까?
- 18. 언제 glVertexAttribPointer를 호출해야합니까?
- 19. 조각의 onActivityCreated를 언제 호출해야합니까?
- 20. 언제 git_remote_update_tips를 호출해야합니까?
- 21. 언제 setContentAspectRatio를 호출해야합니까?
- 22. 언제 mixpanel.people.identify를 호출해야합니까?
- 23. UpdateLayeredWindow를 언제 호출해야합니까?
- 24. 왜/언제 super.ViewDidLoad를 호출해야합니까?
- 25. Python 프로젝트에서 logging.basicConfig를 언제 호출해야합니까?
- 26. glEnable (GL_FRAMEBUFFER_SRGB)을 언제 호출해야합니까?
- 27. 언제 SQLAlchemy에서 flush()를 호출해야합니까?
- 28. 언제 NSStream에서 NSXMLParser.parse()를 호출해야합니까?
- 29. CasperJS에서 언제 test.done()을 호출해야합니까?
- 30. DurandalJS에서 언제 jQueryUI 장식 함수를 호출해야합니까?
그건 내가 내에서 귀하의 질문에 연결된 비슷한 질문 및 나의 대답 http://stackoverflow.com/questions/6468535/cvpixelbufferlockbaseaddress-why-capture-still-image-using-avfoundation – Andrea
봐. 내가 말했듯이, 그것은 내 질문에 완전히 대답하지 않습니다. 그러나 아마도 당신은 약간의 통찰력을 가지고있을 것입니다. 잠글 때가 언제입니까? 잠금을 해제해야하는시기는 언제입니까? 왜 잠금을 해제해야합니까? 자물쇠는 무엇을 방해합니까? – GingerBreadMane