-
v0.4.9 — real stutter fix + delete-crash defense
StableSome checks failedbuild / build (push) Has been cancelledreleased this
2026-05-15 22:32:32 +09:00 | 22 commits to main since this release0.4.7/0.4.8 의 끊김 근본 원인 수정 + 삭제 시 잠재적 텍스처 release 누락 방어 패치.
끊김 (root cause):
- 0.4.7 에서 GPU 텍스처 업로드는 memcpy 로 바꿨는데, 디코드 쪽 toRgba() 가 여전히 BufferedImage.getRGB() + 픽셀별 ARGB→RGBA 루프(1080p 기준 200만회)를 돌고 있었습니다. 한 프레임당 20-50ms.
- 이게 실시간 24fps(~42ms/프레임) 보다 느려지면 오디오 버퍼가 비고 → 백프레셔 사라짐 → 디코더가 풀스피드로 catch-up 프레임을 1슬롯 AtomicReference 에 덮어쓰기(0.5초 버퍼 분량의 12프레임 중 11개 드롭) → 다시 오디오 버퍼 차면 ~0.5초 블록. 사용자 분이 말씀하신 '한번 로딩, 다음 로딩 전까지 끊김' 패턴과 정확히 일치.
- v0.4.9 에서는 FFmpegFrameGrabber.setPixelFormat(AV_PIX_FMT_RGBA=26) 으로 swscale 한테 RGBA 변환을 강제. frame.image[0] 이 바로 ByteBuffer (RGBA 바이트) 라서 fresh direct buffer 로 copy 만 하면 끝. 컬러스페이스 변환은 swscale 의 네이티브 SIMD 에서 <1ms 에 끝나므로 디코더가 안정적으로 real-time 페이스 유지.
- BufferedImage / Java2DFrameConverter 코드 경로 전부 제거.
삭제 시 크래시 방어:
- Entry.close() 가 texture.close() 만 부르고 TextureManager 등록은 안 풀어줬습니다. RenderType 이 Identifier 기준으로 캐싱되므로, 삭제 직후 캐시된 RenderType 이 죽은 GL 핸들을 bind 시키면 렌더 쓰레드 크래시 가능.
- mc.getTextureManager().release(id) 를 close 시 호출하도록 추가.
- 사용자 분이 보고하신 크래시 (crash-reports/ 폴더가 없다고 하셔서 정확한 트레이스는 아직 못 봤지만) 의 가장 유력한 후보. latest.log 의 끝부분(200줄) 받으면 확정 가능.
업그레이드: video_player--0.4.9.jar 하나만 mods 폴더에 (0.4.8 jar 는 삭제). JavaCV 별도 설치는 0.4.8 부터 불필요한 것 그대로 유지.
Downloads