2023년 8월 9일 수요일

MMC/SD Drive V4 제작 #20 - 동영상 플레이어 대공사

현재 MMC/SD V3,V4에서 사용되는 스크린2 동영상(MV) 플레이어가 나온지 벌써 5년이 되었네요.

기존 코드는 구조적으로 개선하는 것이 힘들어서, PAC-V LED 비주얼라이저 처리만 겨우 추가한 상태로 오랫동안 쓰였는데요.

이번 여름 방학을 맞아, 코드를 갈아엎었습니다.


새로 만들면서 SD카드 몇 종류를 테스트해보니, 나중에 나온 SD가 커맨드 응답이 빠르네요.

아래는 주로 쓰던 microSD 3종류입니다.

왼쪽은 V3에 번들 된 SanDisk 8GB, 중앙은 V4에 번들 된 SanDisk 16GB,

오른쪽은 제가 요즘 쓰고 있는 삼성 EVO 32GB입니다.



참고로, EVO 32GB는 원래 UHS(UHS-I)를 지원합니다만...

MMC/SD에서는 3.3V SPI(1BIT)로 구동중이라서, 전송속도는 SanDisk Class4와 똑같습니다.

하지만 메모리 R/W를 위한 커맨드 응답 속도는 EVO가 가장 빠르고, SanDisk Class4가 가장 느립니다.


제가 처음 스크린2 MV 플레이어를 제작할 때에는, V3에 8GB 메모리의 동작에서 맞춰서 겨우 구동되도록 구현했었는데요.

근데 이젠 SD의 커맨드 응답이 빨라지민, 코드를 잘 만들면... 동영상 재생 타이밍을 정확하게 맞출 수 있을 것 같더라구요.

뭔가 알 수 없는 느낌적인 확신(?) ㅋ


사실 기존 MV 플레이어에서 음질이 왔다갔다하는 이유가...

이 커맨드 응답속도 문제에 PAC-V용 비주얼라이저 데이터 처리를 추가되면서 발생한 CPU 부하때문입니다.

하지만 이 코드를 더 개선할 방법이 없었어요. 당시 SD카드에서는 이미 한계라서요 ㅎ.ㅎ


이번 리뉴얼 되는 MV 플레이어의 1차 구현 목표는

- SanDisk class10과 삼성 EVO 등의 빠른 SD 용으로 더 정확한 타이밍을 구현

- 느린 SanDisk class4에서도 약간의 음질 저하만으로 타이밍 맞춤

입니다.


그리고 2차 구현 목표는 

- LED 비주얼라이저의 리프레쉬 올리기 (기존 12fps -> 24fps)

- 되감기, 역재생 구현

- 무한 루프 구현

입니다.



1차 구현을 해보니, 예상했던대로 싱크 타이밍은 좀 더 정확히 맞춰지니까 음질은 상당히 좋아졌습니다.

하지만 PAC-V LED 처리를 넣을 코드 공간이 안나오네요ㅋㅋ


머리를 쥐어뜯으면서 고민해보니,

VRAM 전송 루프를 더 크게(클럭을 더 쓰게) 만들면?

메인 루프의 idle time은 줄어들지만, VRAM 전송 시 PAC-V LED 컨트롤 함께 넣어버릴 수 있더라구요.

예전 코드에서는 비디오+오디오 따로 PAC-V LED 따로 처리했는데, 지금은 몽땅 한 루프에서 처리합니다.

대신 코드 여유가 줄어서, PAC-V 처리 옵션을 넣지는 못했네요. 그러니까 LED 출력코드가 '항상' 동작하게 됩니다.

물론 PAC-V가 없어도 아무일도 생기지 않습니다만... 다른분이 I/O 주소가 겹치는 기기를 만들게 된다면 문제가 될 수는 있겠네요 ㅎ.ㅎ


이제 남은 2차 목표는 되감기, 역재생, 무한 루프 처리입니다.

영상 재생 중 ESC 키는 무조건 해야하니까, 코드 양을 많이 늘리지 않고 추가적인 키 처리를 해야한다면...?

ESC 키와 같은 ROW의 키들을 활용해야겠죠? (사실 커서키를 쓰고 싶었는데...ㅋ)

ROW 7에는 RETURN, SELECT, BS, STOP, TAB, ESC, F5, F4가 들어있습니다.

여기서 MSB쪽의 RETURN, SELECT, BS를 사용합니다.

RETURN -> 빨리감기 (이건 기존 코드에서도 있었죠?)

SELECT -> 역재생

BS     -> 되감기

로 동작합니다.


열심히 짱구를 굴려서 구현이 되었네요. 

이제 남은 Z80 CLK이 별로 없으니, 무한루프 기능 포기입니다. ㅎ.ㅎ

.

.

.

라고 생각하면서 코드를 며칠 놔뒀더니... 또 아이디어가 떠올랐어요.

CAPS LED를 변수처럼 사용하면서 키가 연속입력이 되지않도록 구현하는데, 딱 마지막 여분의 CLK으로 구현이 되네요.

CAPS 키는 ROW 6에 있어서, PPI 컨트롤이 추가되는 것도 큰 짐이었는데요. 역시 궁지에 몰리니 두뇌 풀가동이...ㅎ.ㅎㅋ



어쨌든 계획했던 기능은 모두 구현이 되었습니다.

- 빠른 SD에서 좀 더 정확한 타이밍 (음질 저하 최소화)

- 두배 리프레쉬 되는 PAC-V LED 비주얼라이저

- RETURN키로 빨리감기 (8배속)

- BS키로 되감기 (8배속)

- SELECT키로 역재생

- CAPS ON 상태로 무한루프



실제 동작 모습은 아래 영상으로 확인하시죠~





개선된 기능은 좀 더 테스트 후, 다음번 MMC/SD Tool에서 릴리스 될 예정입니다~


댓글 없음:

댓글 쓰기