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 입니다. 그럼 수고하세요

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.