안드로이드 개발 질문/답변
(글 수 45,052)
현제 ffmpeg빌드후 진행중에있는데
libstageFright안에서 각자 포맷이정해진후 포맷에따라서 칼라포맷을 지정해서 내보내주는데 특별한 포맷들이 따로 변환이 안되는듯해서 미리해보신분들이 계시다면 좀알려주셨으면해서 질문올립니다.
문제있는 포맷은
0x7FA30C01 OMX_QCOM_FormatYVU420PackedSemiPlanar32m4ka
0x7FA30C03 OMX_QCOM_FormatYVU420PackedSemiPlanarTile64x32m4ka
우선 이두포맷이 안나오네요 libstageFringht 안에서 무조건 해당포맷이아니면 Yuv_420p 로 변경되어서 나오는데 이를 변환해서 기기상에 뿌리면 화면에서 Y 데이터는 정상인거같지만 Uv 색상 정보가 이상하게 나옵니다 혹시 먼저해보신분들 답변 감사하겠습니다.




단말에 따라 디코딩되어 나오는 칼라포멧이 다르기 때문에 정확히 말씀드리기 어렵습니다.
단지 YUV420P로 나오고 화면이 파악이 가능할 정도라면,
아마 칼라 컨버젼시 사용한 이미지 사이즈가 미묘하게 달라서 일 겁니다.
영상 헤더를 통해 구한 사이즈와 align이나 crop 정보로 인해 디코딩된 이미지 사이즈가 다를 수 있습니다.
이 경우 영상 헤더에 기록된 사이즈를 기준으로
칼라컨버젼을 하면, 앞부분인 Y부분을 잘 나와도 뒤 부분은 미묘하게 깨지게 됩니다.
decode_thread를 보시면, kKeyWidth 같은 것으로
디코딩된 사이즈 정보를 구하고, align보정을 하는 코드 같은게 있습니다.,
이 부분에서 사용하는 사이즈 정보를 수정하셔야 할 겁니다.
단말에 따라 사용할 사이즈 정보가 MetaData에 kKeyWidth 같은게 아닌
다른 키 값에 설정되어 있는 값을 사용해야 하는 경우가 있었으며,
최악의 경우 이 값을 별도 보정 코드로 한번 더 보정해야 하는 경우도 있었습니다..
(키 값은 재조사 추가하는 부분이 있을 수 있으니 각 제조사 수정사항이 merge된
custom rom git에 올라가 있는 헤더를 참조하시는 것을 권장합니다.)
제조사의 지원을 받을 수 있음, 문의 해 보시길 권장하며,
그게 어렵다면 사이즈 값을 변경해가면서 잘 나오게 하는 값을 구하여 그 값이 구해지는
공식을 정립하셔야 할 겁니다. 당연히 엄청난 노가다와 상당힌 운이 필요합니다.-ㅇ-;;