webcam 어플리케이션인 spcaview프로그램에서
이상한 부분이 있어서 물어볼려고 합니다.
struct video_mbuf videombuf;
memset(&videombuf, 0, sizeof(videombuf));
여기서 printf문으로 sizeof(videombuf)를 찍어봤더니
136이 나왔습니다.
videombuf.size = 614416;
unsigned char *pFramebuffer;
pFramebuffer = (unsigned char *) mmap (0,
videombuf.size,
PROT_READ | PROT_WRITE,
MAP_SHARED, fd, 0);
-------------------------------------------------------------------
여기까지가 웹캠에서 데이터를 읽어오는 부분을 셋팅한거 같습니다.
frame_size=240x320=76800;
tmp = (unsigned char*)malloc (frame_size);
memset(tmp, 0x00, frame_size);
memcpy (tmp,
pFramebuffer +videombuf.offsets[vmmap.frame],
frame_size);
--------------------------------------------------------------------
여기가 웹캠 데이터를 tmp에 저장하는 부분인 것 같습니다.
그리고 최종으로 나중에 refresh_screen함수를 호출합니다.
SDL_Surface *pscreen;
p=pscreen->pixels;
image_width=320;
image_height=240;
owidth=320;
oheight=240;
image_width*image_height*bpp=320x240x3;
refresh_screen ( tmp,
p,
format,
image_width,
image_height,
owidth,
oheight,
image_width*image_height*bpp,
autobright);
프로그램을 실행할때 memset,mmap,memcpy를 사용하지않고
직접적으로 read함수를 호출해서 사용하면 이미지와 영상은 저장됩니다.
제가 size값을 이리 저리 바꾸어도 않되는데요..
혹시 감이 가시는 부분이 있나요?
답변 부탁드립니다.
수고하세요...
실제 video buf의 데이터 영역을 읽어야 합니다.
structure로 읽으면 해당 영역을 접근 못하게 될 듯 한데요.
즉, 136 bytes mmap()되어 버려서, 실제 데이터에는 접근을 못할 듯 보여집니다....
코드 내용을 잘 모르니...허접한 답변만.....쩝...