2017-02-10 1 views
0

이전 게시물에서 설명한 것처럼 무인 항공기에서 무인 항공기 뷰를 실시간으로 시각화하도록 작업하고 있습니다. 상대 SDK가있는 DJI Phantom 3 Professional에서), AR 부분에 대해 Wikitude 프레임 워크를 사용합니다. Alex's response 덕분에 dji's Video Stream Decoding과 (과) 함께 Wikitude Input Plugin을 구현했습니다.DJI 카메라에서 NV21 데이터를 검색하는 방법 Phantom 3 Professional 무인 장치

몇 가지 문제가 있습니다. 우선, "DJI의 비디오 스트림 디코딩"데모는 비디오 프레임 구문 분석에 FFmpeg를 사용하고 하드웨어 디코딩을 위해 MediaCodec을 사용합니다. 따라서 비디오 프레임을 파싱하고 DJI 카메라의 원시 비디오 스트림 데이터를 디코딩하여 YUV 데이터를 출력하는 것이 좋습니다. Wikitude Input Plugin에 맞춤형 카메라를 제공하기 위해 NV21 표준을 준수하도록 구성된 YUV 420 형식이 필요하기 때문에 "dij sdk에서 원시 비디오 데이터를 가져 와서 Wikitude SDK에 전달"하는 것이 좋습니다. MediaCodec의 YUV 데이터 출력을 전달하십시오.

이 점에 관해서는 MediaCodec 출력에서 ​​bytebuffers를 검색하려고 시도했습니다.이 작업은 콜백을 호출하여 외부 수신기로 전달하는 효과가있는 configure() 메서드에 Surface 매개 변수를 null로 설정하여 가능합니다.),하지만 난 시각화에서 색상에 대한 몇 가지 문제가 인코딩 된 비디오 색상이 맞지 않아 (파란색과 빨간색이 반대로 보이는 것, 그리고 카메라가 움직일 때 너무 많은 소음이 있기 때문에) .. codec.releaseOutputBuffer (outIndex, true) 명령 다음에 Surface not null을 전달하십시오. MediaCodec은 프레임을 렌더링하고 비디오 스트림을 올바르게 표시하지만 Wikitude Plugin에 비디오 스트림을 전달해야하므로 서피스를 null로 설정해야합니다.

다른 MediaFormat.KEY_COLOR_FORMAT을 설정하려했지만 제대로 작동하지 않았습니다. 이 점을 어떻게 해결할 수 있습니까?

답변

0

MediaCodec을 사용하여 바이트 버퍼로 디코딩 할 때 버퍼에서 사용할 색상 포맷을 결정할 수 없습니다. 디코더가 결정하고 처리해야합니다. 각 디코더는 다른 형식을 사용할 수 있습니다. 그 중 일부는 COLOR_FormatYUV420Planar (I420에 해당) 또는 COLOR_FormatYUV420SemiPlanar (NV12 - NV21에 해당하지 않음)과 같은 표준 형식 일 수 있으며 다른 일부는 완전히 독점적 인 형식을 사용할 수 있습니다.

디코더가 반환 할 수있는 형식에 대한 예제는 https://android.googlesource.com/platform/cts/+/jb-mr2-release/tests/tests/media/src/android/media/cts/EncodeDecodeTest.java#401이고 지원자는 https://android.googlesource.com/platform/cts/+/jb-mr2-release/tests/tests/media/src/android/media/cts/EncodeDecodeTest.java#963이며 디코더가 개인 형식을 반환하는 것이 좋습니다.

예를 들면 다음과 같습니다. http://git.videolan.org/?p=vlc.git;a=blob;f=modules/codec/omxil/qcom.c;h=301e9150ae66075ca264e83566504802ed57578c;hb=bdc690e9c0e2516c00a6d3733a77a87a25d9b6e3은 일반적인 독점적 인 색상 형식을 해석하는 방법에 대한 예제입니다.

관련 문제