CVF 실영상 고도화 — 트릿트리 광좌표 v3
개요
CVF(크라우니 비디오, 포트 9877)의 27×27 모자이크 한계를 제거. 씨앗 좌표를 3트릿(0~26) → 8트릿(±3280) 광좌표로 확장하고, CIF v3 트릿트리(재귀 3×3 분할) 공간 인코딩을 차용해 실프레임을 충실히 인코딩/재생.
무엇을 했는지
- lib/cvf-codec.js 신규: intToTrits/tritsToInt, colorTrits/pix9ToRGB(9트릿), encodeSeedWide/decodeSeedWide(광좌표), tritTreeEncode(재귀3×3), computeDeltaWide(P프레임), renderSeedsToPixels(절대사각형 페인트), psnr, parsePPMBuffer(P3/P6), encodeVideo/decodeVideo, synthFrames.
- lib/cvf-encoder.js 재작성: 코덱 사용, v3 헤더(coordWidth:8), PPM 디렉토리 + ffmpeg MP4→PPM 경로(--mp4 --scale).
- server.js CVFDecoder 재작성: 버전/좌표폭 감지, 광좌표 절대사각형 렌더(I/P/Motion 마커=FUUU/PUUU/MUUU), 레거시 27트릿 모자이크 폴백. parseCVFMeta 텍스트헤더 우선(잘못된 42바이트 바이너리헤더 가정 제거), 한/영 키 모두 지원. renderFrame(frame,w,h,prev,meta) 시그니처 + 호출부 갱신.
- /api/encode-test 라우트: 합성프레임→encodeVideo→디코드→PSNR 자가검증(save= 파일저장).
검증
- 합성 9프레임 160×120: I프레임 PSNR 34.51dB, 9/9 재생.
- HTTP /api/encode-test 160×120/640×360/1280×720(HD): 모두 ok=true, I0 33~34.5dB ≥30dB, 프레임수 일치.
- 실 MP4(ffmpeg 추출 11프레임)→CVF→서버디코더: 11/11 렌더.
- 인코더 출력 == 서버 CVFDecoder 포맷 1:1 일치(헤드리스 검증).
- npm test 57/57 통과(회귀 없음). node -c 전체 통과. 레거시 2019_USA_v2.cvf 메타 호환.
관련 파일
- /Users/ef/crowny-video/lib/cvf-codec.js (신규)
- /Users/ef/crowny-video/lib/cvf-encoder.js (재작성)
- /Users/ef/crowny-video/server.js (CVFDecoder, parseCVFMeta, /api/encode-test, 플레이어 호출부)
잔여 이슈
- Motion(MUUU) 프레임 인코딩 미생성(현재 I/P만). 평행이동 전용 모션벡터 인코더는 후속.
- 한선씨 동반 파일(.한선) 변환 필요(헌법: JS 작성 즉시 .한선 동반).