미디어 작업을 위해 안드로이드 전화에서 libstagefright.so
을 사용하고 싶습니다. 나는 this 페이지에서 주어진 예제를 탐구했다. 나는 같은 것을 구현하려고 노력 해왔다. 여러 OMXCodec
인스턴스에 대해이 구현을 테스트하는 동안 출력 버퍼가 서로 충돌합니다.무대 장치를 사용하여 OMXCodec의 여러 인스턴스를 만들 수 있습니까
이클립스에서 안드로이드 프로젝트를 개발했으며 JNI에서 libstagefright
을 연결했습니다. 나는 두 클래스 인 CustomDataSource
(MediaSource
을 파생)과 CustomOmxDecoder
을 추가했습니다. CustomDataSource
클래스는 모든 가상 메서드 MediaSource
을 구현합니다. CustomOmxDecoder
클래스에는 OMXCodec::Create
메서드가 호출됩니다. 그런 다음 CustomOmxDecoder
의 개별 인스턴스가있는 두 개의 스레드를 만들었습니다. 이 인스턴스를 사용하여 이라는 메쏘드를 호출하는데, 그 중 메인은 videoDecoder->read()
메쏘드입니다. 이것은 내 설치 방법입니다.
지금, 위의 설정으로 앱을 실행할 때. OMXCodec
두 원본의 프레임을 디코딩하지만 표면에 렌더링 할 때 출력이 충돌하는 것을 보여줍니다. 그것은 두 소스의 디코딩 된 버퍼가 어떻게 든 내부적으로 메쉬 처리 된 것처럼 보입니다. 나는 동시에 두 개의 h264 디코더를 만들고있다. 여기서 문제가 될 수있는 것은 무엇입니까? MediaBufferGroup
과 관련이 있습니까? 나는 CustomDataSource
에 버퍼를 획득하고 videoDecoder->read()
호출을 호출 한 후 CustomOmxDecoder
의 ProcessNextFrame
에 버퍼를 릴리스합니다.
어떤 제안이 좋을 것입니다. 감사합니다. .
'allocateOutputBuffersfromNativeWindow'를 사용한다면, 디코더 생성에 전달 된'nativeWindow' 또는'surface'를 체크 할 필요가 있습니다. 귀하의 의견에서, 나는 당신이 잘못된 이미지를 보았을 수도 있기 때문에 양쪽 모두 동일한 '표면'을 디코더의 인스턴스에 전달하고 있다고 느낍니다. 당신의 논리가 디코더의 한 인스턴스에서만 잘 작동 하는지를 확인할 수 있습니까? – Ganesh
실제로 omxcodec 인스턴스를 만드는 동안 매개 변수로 서피스를 전달하지 않습니다. 표면 주소를 확인 했어. 그들은 다르다. 심지어 하나의 더 많은 테스트를 해봤는데, 디코드 디스플레이 메서드에서 customomxdecoder 클래스의 조건을 추가했습니다. 하나의 디코딩 된 버퍼가 주어진 표면에 렌더링되고 스레드 2에 대해 프레임이 디코딩되지만 표면은 검정색 만 렌더링합니다. . 이 경우에도 그림은 첫 번째 표면에서 충돌을 가져오고 두 번째 표면은 검은 색으로 표시됩니다. – sam18
당신은 자동 잠금/뮤텍스 사이에서 비디오 소스 -> 읽기 (& 버퍼, & 옵션) 방법을 다룰 필요가 있다고 생각합니까? – sam18