아무거나 적당히 운영되는 이상한 블로그

이상한 파일 분석기 본문

잡담

이상한 파일 분석기

저세상 음향연구소 2020. 8. 9. 22:54

어느 기기에서 사용되는 파일인데, 사진 파일로 보입니다. 일단 HxD로 열어봅시다.

YCbYCr 이라는 걸로 봐서는 YUV계통의 사진 파일임을 알 수 있습니다. 잘 보면 Y가 2번 나옵니다. 이건 4:2:2 타입의 YUV임을 알 수 있습니다. 그런데 왜 이걸 그렇게 만든거지? 

아무튼 0A~0D값으로 가로 세로값을 알아내고 파일을 RAW로 개조하고 RawViewer로 찔러보니 해당 파일은 YVYU 타입임을 알 수 있습니다.

그러면 한번 자동으로 변환하는 프로그램을 만들어봅시다. 그런데 문제는 YVYU to RGB의 외부 모듈이 없어서 그냥 대충 만들어야 했습니다.

일단 YVYU에서 순서가 다른 YUY2 to RGB를 http://minnimok.egloos.com/5161623 에서 찾아서 구현을 해둡니다.

y1변환=int(binascii.hexlify(사진y1).decode('ascii'), base=16)
v변환=int(binascii.hexlify(사진v).decode('ascii'), base=16)
y2변환=int(binascii.hexlify(사진y2).decode('ascii'), base=16)
u변환=int(binascii.hexlify(사진u).decode('ascii'), base=16)
b1값=round(65536*(1.164*(y1변환-16)+2.018*(u변환-128))/65536)
g1값=round(65536*(1.164*(y1변환-16)-0.813*(v변환-128)-0.391*(u변환-128))/65536)
r1값=round(65536*(1.164*(y1변환-16)+1.596*(v변환-128))/65536)
b2값=round((76284*(y2변환-16)+132252*(u변환-128))>>16)
g2값=round((76284*(y2변환-16)-53281*(v변환-128)-25625*(u변환-128))>>16)
r2값=round((76284*(y2변환-16)+104595*(v변환-128))>>16)  
...
rawData = rawData + r1바이트 + g1바이트 + b1바이트 + r2바이트 + g2바이트 + b2바이트

구현한건 좋았는데 속도가 너무 느립니다. 파이썬이라서 그런가...

Comments