도와주세요!!
글 수 15,339
2008.12.11 12:44:47 (*.100.85.10)
7646
동영상을 코덱을 사용해서 인코딩하고 있습니다. 인코딩 중에 동영상을 화면에 표시하면서 인코딩을 하는데
인코딩하는 데이터를 별도의 파일로 생성해서 저장을 해야 합니다.
데이터를 저장하기 위해서 wrtie 함수를 사용했는데 자꾸 문제를 야기 시키네요.
블럭킹이 발생해서 인지 write를 하면서 시스템이 죽는 현상이 계속 나타납니다.
write대신 mmap를 사용해서 시도를 해봤는데
새로운 파일을 생성해서 스트리밍 데이터를 계속 저장하기에는 적합치 않은 것 같네요.
mmap를 사용하면서 발생되는 문제는 2가지 입니다.
1) 새로운 파일을 생성하면 사이즈는 처음에 0byte입니다,
mmap을 이용해서 file에 해당 내용을 memcpy등을 이용해서 기록하려고 하면 애당초 파일 사이즈가 0이기 때문에
처리를 못합니다.
2) 1)항 문제 때문에 기 작성된 스트리밍 파일을 이용해서 테스트를 해봤습니다.
이 경우에는 offset을 계속 변경하면서 처리를 해줘야 하는데 이게 마땅치 않네요.
여하튼 1)항 문제가 근본적으로 해결되지 않기에 다른 방법이 필요한데
write함수를 대체할 다른 방법이 없을까요?
인코딩하는 데이터를 별도의 파일로 생성해서 저장을 해야 합니다.
데이터를 저장하기 위해서 wrtie 함수를 사용했는데 자꾸 문제를 야기 시키네요.
블럭킹이 발생해서 인지 write를 하면서 시스템이 죽는 현상이 계속 나타납니다.
write대신 mmap를 사용해서 시도를 해봤는데
새로운 파일을 생성해서 스트리밍 데이터를 계속 저장하기에는 적합치 않은 것 같네요.
mmap를 사용하면서 발생되는 문제는 2가지 입니다.
1) 새로운 파일을 생성하면 사이즈는 처음에 0byte입니다,
mmap을 이용해서 file에 해당 내용을 memcpy등을 이용해서 기록하려고 하면 애당초 파일 사이즈가 0이기 때문에
처리를 못합니다.
2) 1)항 문제 때문에 기 작성된 스트리밍 파일을 이용해서 테스트를 해봤습니다.
이 경우에는 offset을 계속 변경하면서 처리를 해줘야 하는데 이게 마땅치 않네요.
여하튼 1)항 문제가 근본적으로 해결되지 않기에 다른 방법이 필요한데
write함수를 대체할 다른 방법이 없을까요?
크게 2가지 문제점이 있을것 같네요
* 인코딩되는 쪽에서 CPU 부하를 많이 소모한다. (인터럽트 루틴에서 머무는 시간이 길기 때문이다.)
* 저장하는 매체의 속도가 너무 느리다.
위의 문제들을 해결하기위해 GPIO 와 스코프를 사용하여 점유시간등을 확인하세요
문제 해결을 위해서 많은 노력이 필요할 것 같습니다.
속도문제일 경우 인코딩 디비아스드라이버 루틴에서 mmap 를 이용하여 어플쪽에 데이타를 주는 방법을 고려해야 합니다.
또한 인코딩 칩으로부터 데이타를 받아올때 DMA 사용도 고려합니다.
파일에 저장시 mmap 를 사용할 이유는 없습니다.