프로그램 사용/coLinux2009. 5. 22. 00:20
포터블 우분투는 colinux 기반으로
정말 간편하게 사용할 수 있는 프로그램이다

pubuntu@pubuntu:/bin$ file ls
ls: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.6.8, dynamically linked (uses shared libs), stripped

pubuntu@pubuntu:~/src$ gcc test.c
test.c: In function ‘main’:
test.c:2: warning: return type of ‘main’ is not ‘int’
/usr/bin/ld: crt1.o: No such file: No such file or directory
collect2: ld returned 1 exit status

우분투 특성상 gcc가 제대로 안되서(crt1.o 도 없어서 컴파일 에러 ㅠ.ㅠ)
그냥 /bin/ls의 포맷을 살펴 보았더니 ELF x86이다.

이 말은 별다른 컴파일 과정없이 , VMWare등의 가상PC 없이도
윈도우와 리눅스를 병행해서 사용이 가능하다는 것이다.
네트워크 문제인지 모르겠지만.. 네트워크 사용시 CPU 점유율이 극도로 올라가는 문제 발생..



주의사항
1. 실행시에는  portable_ubuntu.bat 대신 run_portable_ubuntu.bat 을 이용하여 실행하도록!
   (Xming 구동이라던가 여러가지 에서 차이가 있다)
2. 설치이후 키보드를 Korean / 101키 호환으로 해주지 않으면 - + 등의 특수키가 제대로 먹지 않을수도 있다.
3. vi에서 방향키가 안먹는다.. OTL
4. 되도록이면... 암호를 바꾸자. 기본 암호는 123456 이다.
5. USB에 담고 싶으면 2GB 이상의 USB가 필요하다. 아래 다운로드는 400MB 정도이지만 압축풀면 1.8기가이다

[발견 : http://www.choboweb.com/900]
[다운로드 : http://portableubuntu.sourceforge.net/index.php?section=download]
Posted by 구차니
프로그램 사용/libjpeg2009. 5. 21. 10:47
JPEG parameter struct mismatch: library thinks size is 520, caller expects 464

라이브러리를 겨우겨우 컴파일 해서 돌려봐야지~ 룬루랄라 하고 돌렸더니
저따구 에러가 발생을 한다.. 닝기리

아무튼 해결 방법은
typedef 로 묶인 기본 타입들에 대한 정의를 수정해 주면 된다는 것이다.

일단 가장 큰 차이는 boolean의 크기가 다르다는 것이고,
나머지 타입들은 시스템에 따라 미묘하게 다를수 있으니 현재 사용하는 시스템의 타입으로 변경해주면 된다.


/* These typedefs are used for various table entries and so forth.
 * They must be at least as wide as specified; but making them too big
 * won't cost a huge amount of memory, so we don't provide special
 * extraction code like we did for JSAMPLE.  (In other words, these
 * typedefs live at a different point on the speed/space tradeoff curve.)
 */

/* UINT8 must hold at least the values 0..255. */

#ifdef HAVE_UNSIGNED_CHAR
typedef unsigned char UINT8;
#else /* not HAVE_UNSIGNED_CHAR */
#ifdef CHAR_IS_UNSIGNED
typedef char UINT8;
#else /* not CHAR_IS_UNSIGNED */
typedef short UINT8;
#endif /* CHAR_IS_UNSIGNED */
#endif /* HAVE_UNSIGNED_CHAR */

/* UINT16 must hold at least the values 0..65535. */

#ifdef HAVE_UNSIGNED_SHORT
typedef unsigned short UINT16;
#else /* not HAVE_UNSIGNED_SHORT */
typedef unsigned int UINT16;
#endif /* HAVE_UNSIGNED_SHORT */

/* INT16 must hold at least the values -32768..32767. */

#ifndef XMD_H			/* X11/xmd.h correctly defines INT16 */
typedef short INT16;
#endif

/* INT32 must hold at least signed 32-bit values. */

#ifndef XMD_H			/* X11/xmd.h correctly defines INT32 */
typedef long INT32;
#endif

/*
 * On a few systems, type boolean and/or its values FALSE, TRUE may appear
 * in standard header files.  Or you may have conflicts with application-
 * specific header files that you want to include together with these files.
 * Defining HAVE_BOOLEAN before including jpeglib.h should make it work.
 */

#ifndef HAVE_BOOLEAN
typedef int boolean;
#endif

Posted by 구차니
프로그램 사용/libjpeg2009. 5. 20. 21:49
상당히 끙끙대게 하던 녀석인데.. 겨우겨우 해결이 되었다..
해결 방법은 의외로 간단하다.(안해보고 고생 안했으면 말을 하지마세요?!)

1. ./configure --prefix=$(TARGET_ROOT_FS)/usr CC=$(CROSS)-gcc

2. vi Makefile
 38 # If using GNU libtool, LIBTOOL references it; if not, LIBTOOL is empty.^M
 39 LIBTOOL = ./libtool^M
※ libtool은 쉘스크립트로 내용을 수정해야 하므로, 편의상 jpeg-6b 디렉토리에 복사를 하였다.

3. vi libtool
262 # The linker used to build libraries.
263 LD=$(CROSS)-ld
264 #LD="/usr/bin/ld"
※ libtool은 쉘스크립트로 내용을 수정해야 하므로, 복사본을 사용하도록 한다.



make install 시에는
$(TARGET_ROOT_FS)/usr/bin 이 존재하지 않으면 에러가 발생하므로 미리 확인하거나
cjpeg / djpeg / jpegtran / rdjpegcom / wrjpegcom 이 필요 없다면 무시해도 된다.

[링크 : http://metastatic.org/text/libtool.html]
Posted by 구차니
SSH로 서버에 접속 후,
서버에서 로컬의 다른 서버로  SSH 접속을 하는데 아래와 같은 경우를 만났다.

[userid@hostname ~]$ ssh localserver_ip
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that the RSA host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00.
Please contact your system administrator.
Add correct host key in /home/userid/.ssh/known_hosts to get rid of this message.
Offending key in /home/userid/.ssh/known_hosts:1
RSA host key for 192.168.10.10 has changed and you have requested strict checking.
Host key verification failed.

해결방법은, 그냥 저 파일을 지우면 된다.
(아마.. 지금까지 접속했던 서버들에 대한 RSA 키도 전부 삭제 되므로, 다음번 접속시 전부 키를 받을 거냐고 물어볼 듯 하다)
Posted by 구차니
포터블 우분투를 실행하면 Xming을 구동하여 사용하는데 옵션이 특이해서
도움말을 찾아보게 되었다.

portable_ubuntu.conf 파일의 내용
kernel=vmlinux
cobd0=images\rootfs.img
cobd3="D:\Documents and Settings\czw5hv\Application Data\Windux\images\root.img"
cofs0=config
cofs1=c:\ #Para tener acceso a la unidad C:
#cofs1=otra_unidad:\ #Si se necesita tener acceso a otras unidades?ej: d:\
#scsi0=cdrom,\Device\Cdrom0 # Para tener acceso al CDROM de la PC
root=/dev/cobd0
ro
initrd=initrd.gz
mem=256
eth0=slirp,00:ff:75:39:D3:C1,tcp:22:22
exec0="Xming\Xming.exe :0 -notrayicon +bs -wm -auth Xauthority -clipboard -multiwindow -dpi 100"
exec1=pulseaudio-0.9.6\pulseaudio.exe # Ejecuta al servidor Pulse Audio para Windows


+bs                    enable any backing store support
-wm                    WhenMapped default backing-store

위의 옵션들에 backing store라는 내용이 들어간다.
이곳저것 검색을 해봐도 딱히 시원한 대답은 없었지만, 검색 내용중 윈도우 내용이 복구 안될 경우
backing store를 X11에 설정한다는 내용이 발견되었다. 아마 clipping 영역 복구가 제대로 되지 않을 때,
강제로 복구 하도록 하는 옵션인거 같기도 하고.. 용어 내용만 봤을 경우 일종의 캐시 구조인거 같기도하고..

(고속일 수록 가격이 비싸고, 저속일수록 가격이 싸다. 단위용량당 가격적인 면에서
레지스터 > 캐쉬 > 메모리(DRAM) > HDD > ODD > TAPE 등의 순서를 피라미드식으로 이루게 되는데
memory hierarchy 라고 한다.)

Unfortunately some XFree86 drivers are buggy, and when you render an accelerated primitive which overlaps an area which is not visible to the user, the driver fails to update the backing store (it only draws the clipped primitive using accelarated functions and does not complete the job by calling the software renderer to update the backing store.)
[출처 : http://www.ibiblio.org/ggicore/documentation/libggi/current/display-x.7.html]


Posted by 구차니
프로그램 사용/libjpeg2009. 5. 19. 00:40
/*
 * Ordering of RGB data in scanlines passed to or from the application.
 * If your application wants to deal with data in the order B,G,R, just
 * change these macros.  You can also deal with formats such as R,G,B,X
 * (one extra byte per pixel) by changing RGB_PIXELSIZE.  Note that changing
 * the offsets will also change the order in which colormap data is organized.
 * RESTRICTIONS:
 * 1. The sample applications cjpeg,djpeg do NOT support modified RGB formats.
 * 2. These macros only affect RGB<=>YCbCr color conversion, so they are not
 *    useful if you are using JPEG color spaces other than YCbCr or grayscale.
 * 3. The color quantizer modules will not behave desirably if RGB_PIXELSIZE
 *    is not 3 (they don't understand about dummy color components!).  So you
 *    can't use color quantization if you change that value.
 */
#define RGB_RED		0	/* Offset of Red in an RGB scanline element */
#define RGB_GREEN	1	/* Offset of Green */
#define RGB_BLUE	2	/* Offset of Blue */
#define RGB_PIXELSIZE	3	/* JSAMPLEs per RGB scanline element */

libjpeg를 일반적인 표준 Bitmap 파일에 적용하기 위해서는 (혹은 Blit 함수에)
RGBQUADRGBTRIPLE과 동일한 구조로 나오는 것이 좋다.

typedef struct tagRGBQUAD { 
  BYTE rgbBlue;
  BYTE rgbGreen;
  BYTE rgbRed;
  BYTE rgbReserved;
} RGBQUAD;

typedef struct tagRGBTRIPLE { 
  BYTE rgbtBlue; 
  BYTE rgbtGreen; 
  BYTE rgbtRed;
} RGBTRIPLE;

이런 이유로 설정값을 바꾸지 않고 그냥 libjpeg를 사용하게 되면,
변환후에 RGB를 일일이 순서를 바꾸어 주어야 한다.

제약사항으로는
sample application인 djpeg cjpeg 는 적용이 되지 않고(어짜피 BGR로 표준 bitmap 포맷으로 나온다..)
YCbCr(YUV) <-> RGB 변환에만 적용이 된다는 것(JPEG가 YUV 아닌게 있던가?)
color quantizer는 RGBTIPLE(24bit)만 적용되지 RGBQUAD(32bit)는 적용되지 않는다.

솔찍히 먼소리인지 모르겠고.. 실질적으로 YUV->RGB 변환만 한다면 무시해도 될 듯하다.
Posted by 구차니
프로그램 사용/libjpeg2009. 5. 18. 18:22
libtool: link: unable to infer tagged configuration
libtool: link: specify a tag with `--tag'

라는 에러가 날경우에는, make 파일에서
libtools를 찾은후 --tag=CXX 를 넣어 주면 된다.

vi jpeg-6b/Makefile
142 .c.lo:^M
143         $(LIBTOOL) --tag=CXX --mode=compile $(CC) $(CFLAGS) -c $(srcdir)/$*.c^M

[링크 : http://www.geodynamics.org/roundup/issues/issue40]



위의 방법은 제대로 된 해결 방법이 아니다.
./configure --prefix 를 하면 위의 설정을 하지 않아도 제대로 작동한다.

2009/05/20 - [프로그램 사용/libjpeg] - libjpeg 크로스컴파일 하기 - libjpeg cross-compile using libtool

Posted by 구차니
프로그램 사용/libjpeg2009. 5. 18. 17:29
unsigned int scale_num, scale_denom
    scale_num/scale_denom 의 분수비로 영상 비율을 조절합니다.
    기본값은 1/1 혹은 조절하지 않음입니다.
    현재, 지원되는 조정 비율은 1/1, 1/2, 1/4, 1/8 입니다.
    (라이브러리 설계는 무제한의 비율이 가능하도록 되어있지만,
    빠른시일내로 적용되기는 힘들것으로 보입니다.)
    작은 조절 비율은 적은 수의 픽셀 연산과 단순화된 IDCT 방법을
    사용 할 수 있기 때문에, 매우 빠른 속도의 변환을 합니다

(scale_num은 분자, scale_denom은 분모입니다.
만약에 1/4로 하려고 한다면 scale_num = 1; scale_denom = 4; 로 하면 될 듯 합니다
- 확인요망)



6. while (scan lines remain to be read)
    jpeg_read_scanlines(...);

jpeg_read_scanlines()을 한번 혹은 여러번 호출함으로서 압축해제 된 영상정보를 읽을 수 있습니다.
각각의 호출시에, 읽을 최대 scanline을 넘겨줍니다
(예를들어, working buffer의 높이); jpeg_read_scanlines() 은
많은 줄들의 값을 돌려줄 것 입니다. 돌려준 값은 실제로 읽은 줄의 갯수입니다.
돌려받은 영상정보의 형태(format)는 위의 "Data formats"에 기술되어 있습니다.
흑백과 색상이 있는 JPEG는 서로 다른 데이터 형태라는 것을 잊지마십시오!

영상정보는 상-하 순서로 주어집니다. 만약에 하-상 순서로 영상정보를 저장해야 한다면,
효과적으로 JPEG 라이브러리의 가상 배열 방식을 사용하여 뒤집을 수 있습니다.
예제 프로그램인 djpeg에서 이러한 사용예를 찾으실 수 있습니다.



Data formats

픽셀들은 scanline 단위로 왼쪽에서 오른쪽 방향으로 저장됩니다
각각의 픽셀을 위한 값들은 열단위로 나란히 있습니다;
24-bit RGB 를 예를 들자면, R,G,B,R,G,B,R,G,B 순서로 되어있습니다.  각각의 scanline은
JSAMPLE 데이터 형의 배열로 되어있습니다 --- jmorecfg.h를 수정하지 않았다면,
일반적으로 "unsigned char" 입니다.  (또한 jmorecfg.h를 수정함으로서
RGB 픽셀의 순서를 B,G,R 순서로 변경할수도 있습니다. 하지만 수정전에 제약사항을
먼저 읽어 보시기 바랍니다.)


Posted by 구차니
프로그램 사용/libjpeg2009. 5. 18. 00:54
int w = cinfo.image_width;
int h = cinfo.image_height;
int d = cinfo.jpeg_color_space;
int out_h = cinfo.output_height;

printf("width:%d height:%d depth:%d out_height:%d\n", w, h ,d, out_h);

unsigned char *data = new unsigned char[w * h * d];
while (cinfo.output_scanline < cinfo.output_height)
{
	jpeg_read_scanlines(&cinfo, &data, 1);
	data += d * cinfo.output_width;
}

jpeg_read_header() 한뒤
jpeg_read_scanline()까지는 알았지만, 문서를 대충 읽다 보니..
도무니 어떻게 메모리를 할당해야 할지 감이 안 잡혔는데..
이 문서를 보니 어떻게 하면 될꺼 같다라는 감이 조금은 온다..
내일 해보고 결과를 적도록 해야겠다.
위에서 대로 전체 할당하고 jpeg_read_scanlines로 읽어 오니 잘된다!

[링크 : http://www.korone.net/bbs/board.php?bo_table=etc_misc&wr_id=168]
Posted by 구차니
프로그램 사용/libjpeg2009. 5. 15. 20:40
Subject: [21] What if I need more than 8-bit precision?

Baseline JPEG stores images with 8 bits per color sample, in other words

24 bits per pixel for RGB images
,
8 bits/pixel for grayscale,
32 bits/pixel for CMYK, etc.

There is an extension that stores 12 bits/sample for applications that need higher accuracy.
Medical images, for example, are often 12-bit grayscale.  The 12-bit extension is not very widely supported,
however.  One package that does support it is the free IJG source code (see part 2, item 15).

For lossless JPEG, the standard permits any data precision between 2 and 16 bits per sample,
but high-precision lossless JPEG is even less widely supported than high-precision lossy JPEG.
The Stanford PVRG codec (see part 2, item 15) reportedly supports up to 16 bits/sample for lossless JPEG.

[링크 : http://www.faqs.org/faqs/jpeg-faq/part1/]




struct jpeg_decompress_struct {
  JDIMENSION image_width;    /* nominal image width (from SOF marker) */
  JDIMENSION image_height;    /* nominal image height */
  int num_components;        /* # of color components in JPEG image */
  J_COLOR_SPACE out_color_space; /* colorspace for output */
  UINT16 X_density;        /* Horizontal pixel density */
  UINT16 Y_density;        /* Vertical pixel density */
};

typedef enum {
    JCS_UNKNOWN,        /* error/unspecified */
    JCS_GRAYSCALE,        /* monochrome */
    JCS_RGB,        /* red/green/blue */
    JCS_YCbCr,        /* Y/Cb/Cr (also known as YUV) */
    JCS_CMYK,        /* C/M/Y/K */
    JCS_YCCK        /* Y/Cb/Cr/K */
} J_COLOR_SPACE;

순서는 조금 뒤바뀌지만, 윈도우에서 출력되는 데이터는 위의 6개로 거의 표기가 가능하다.
Posted by 구차니