10

편집 :안드로이드 MediaCodec 인코더 - 삼성 장치에 대한 이상한 결과

이 문제는이 장치가 16 차원의 배수를 필요가 없다 것 같다 ...하지만 32 것은 여러이고, 난 아직 아무 생각하는 방법이 없습니다 문제가되는 장치로 정량화 할 수 있습니다. 이것은 qcom (Android 4.x에서는 문제가되는 것으로 보았지만 Android 5.1.1입니다)을 사용하는 것으로 보입니다.


나는 안드로이드 애플 리케이션에서 비디오를 인코딩하고있어. 저는 Android MediaCodec을 사용하여 각 프레임의 RGB를 YUV로 변환하고 픽셀을 전달합니다.

내가 사용하는 코드는 잠시 동안 사용되었으며 모든 기기에서 작동합니다.

사용자가 나에게 MP4가 이상하게 나오고 있다는 버그 보고서를 보냈습니다. 기기는 삼성 T337A (갤럭시 탭 4)입니다. 여기

은 MP4 수출의 모양 무엇 :

enter image description here

주 - 홀수 어떤 이유로, 모든 해상도에서 발생하지 않습니다. 768x432 및 1280x720에서 발생하는 것으로 확인되었지만 예를 들어 640x352에서는 발생하지 않습니다 (내 앱은 모든 해상도가 기본적으로 16으로 나눌 수 있는지 확인합니다). (동일한 평면 반 YUV 포맷을 사용)를 넥서스 5X 모든 해상도의 출력 작업에

.

이 장치에는 뭔가가 있습니다. 다른 장치에 대해서는 잘 모릅니다.


I 모든 출력에서 ​​살펴본 정상 및 (100 %의 시간을 작동) I은 위에서 언급 넥서스 5X 동일 보인다.

MediaCodecInfo는 OMX.qcom.video.encoder.avc이며 사용되는 색상 형식은 2135033992 (즉 COLOR_FormatYUV420Flexible)입니다. 그래서 근본적으로, 이상한 아무것도.

코드가 약간 확장되어 있으므로 필요한 경우 게시하겠습니다.하지만이 문제가 발생하는 일반적인 이유를 찾고 있습니다. 나는 더 일반적인 것이지만 다른 장치의 광대 한 배열에 대해 동일한 코드가 작동한다는 것을 이해할 것입니다. 그래서 펑키가 진행되고 있습니다 ...

답변

2

올바른 스트라이드와 버퍼 오프셋 값을 사용해야합니다.

+0

음,'Image' 객체에서'Planes []'을 렌더링하여'inputImage.getPlanes()'를 렌더링 한 다음, y, u, v 평면 각각을 잡아냅니다. 그런 다음 1 또는 2 (평면 또는 반원형) 인 u 평면 '평면 [1] .getPixelStride'에서 보폭을 잡고 모든 유형의 장치에 대해 올바르게 계산되고 정확하게 작동합니다. 이 사람은 2의 보폭을 가졌지 만 다른 사람들처럼 잘 작동하지 않습니까? ** 버퍼 오프셋 값 **에 의해 당신은 무엇을 의미합니까? ** 만약 당신이 정교하지 않습니까? 고마워, 고마워! – FTLRalph

+0

이 장치는 16 차원의 힘을 필요로하지 않고 32의 힘을 필요로하는 것으로 보입니다. 문제는 무엇이 문제가되는 장치로 정량화하는지 결정할 방법이 아직 없습니다. 이것은 qcom (Android 4.x에서는 문제가되는 것으로 보았지만 Android 5.1.1입니다)을 사용하는 것으로 보입니다. – FTLRalph