IJG jpeg lib의 사용과 mmap

masician의 이미지

IJG(independent jpeg group)의 jpeg library를 사용하고 있습니다. 이 라이브러리는 raw 이미지를 jpeg으로 압축할 때 출력을 FILE* 타입으로 하고 있습니다.

- IJG : http://www.ijg.org/

	/* file create/open, note to "wb" */
	jpg_fp = fopen("tempw.jpg", "wb");
	if (!jpg_fp) {
		perror("fopen");
		return;
	}
	jpeg_create_compress(&cinfo);
	jpeg_stdio_dest(&cinfo, jpg_fp);

문제점) 저는 1초에 수 십번 정도 webcam으로 들어오는 영상을 jpeg 압축을 수행하고, 그 결과를 TCP를 통해 호스트에 보낼 생각인데, 파일 형태로 read/write 하는경우 그 효율이 좋지 않을 것 같습니다.

나름대로 해결책으로 생각한 것은 mmap을 사용하여 메모리의 일부를 파일처럼 사용하는 것입니다. 그러나 mmap은 FILE* 형태의 파일 핸들을 사용하는 것이 아니라 int 형태의 file descriptor를 사용하기때문에 어떻게 해결해야할지 모르겠네요.

바라미의 이미지

으음.. 프로그래밍에 대해선 모르지만.

실시간으로 데이터를 내보내기 위해선 UDP 를 써야 하지 않을까요?
말씀하신 작업같으면 거의 스트리밍수준인데.
TCP 로는 느리지 않을까 생각하는데요...

nohmad의 이미지

fopen(3)으로 연 것은 fileno(3)를 통해 정수값인 파일기술자로 변경할 수 있습니다. 반대의 경우, 즉 open(2)으로 연 것은 fdopen(3)으로 다시 열어서 FILE * 타입을 만들어줄 수도 있습니다.

그리고 위에 분도 말씀하셨지만, 실시간 영상이라면, TCP보단 UDP를 쓰는 것이 낫겠습니다.

masician의 이미지

nohmad wrote:
fopen(3)으로 연 것은 fileno(3)를 통해 정수값인 파일기술자로 변경할 수 있습니다. 반대의 경우, 즉 open(2)으로 연 것은 fdopen(3)으로 다시 열어서 FILE * 타입을 만들어줄 수도 있습니다.

그리고 위에 분도 말씀하셨지만, 실시간 영상이라면, TCP보단 UDP를 쓰는 것이 낫겠습니다.

감사합니다^^

원래 UDP를 사용하여 구현하려고 하였는데, 압축된 영상이 쪼개져서 전송되게 되게 되는데 수신부에서 올바르게 처리하기 위해서는 UDP로는 해야할 것(쪼개진 내용이 순서대로 들어오지 않기 때문에^^)이 너무 많아서 TCP로 구현하였습니다. 현재는 그럭저럭 퍼포먼스가 나오지만 결코 좋은 방법은 아닌 것 같네요. 혹시 유사한 경험이 있으신 분들의 조언이 필요할 것 같습니다.

mr.lee의 이미지

wavelet 에 대해서 한번 찾아보시면 도움이 되실지 모르겠습니다.

lbh1520의 이미지

저도 님하고 똑같은 프로그램을 구현하려고 라이브러리를 쓰고 있는데
라이브러리를 인클루드 시키면 찾지 못합니다.

라이브러리 파일과 인클루드 시키는 방법좀 알려주세요

개발환경은 visual studio 2005 입니다. 제 메일은 skypraza@paran.com 입니다. 그럼 수고하세요