1 /*
2 	NITENDO�Ќ���JPEG�w�b�_�t�@�C��
3 */
4 #ifdef __cplusplus
5 extern "C" {
6 #endif
7 
8 /*
9 	���摜�Əo�̓T�C�Y����掿�t�@�N�^�[���擾/�G���R�[�h�p�֐�
10 	<����>
11 	void *pWorkArea				[in] ���[�N�G���A�̐擪
12 	void *pTex					[in] �e�N�X�`���f�[�^�̐擪�A�h���X
13 	u16 srcWidth				[in] ���摜�̕�
14 	u16 srcHeight				[in] ���摜�̍���
15 	GXTexFmt texFormat			[in] �e�N�X�`���t�H�[�}�b�g
16 	u32 TargetSize				[in] �v���o�̓T�C�Y
17 	u32 *poutputSize			[out] ���ۂ̏o�̓T�C�Y
18 	u32 *pQFactor				[out] �掿�t�@�N�^�[
19 	<�߂�l>
20 	0�Ȃ琳��I���A���Ȃ�G���[�R�[�h
21 */
22 s32 TMCCJPEGEncGetQFactor(
23 	void *pWorkArea,
24     void *pTex,
25     u16 srcWidth,
26     u16 srcHeight,
27     GXTexFmt texFormat,
28 	u32 TargetSize,
29     u32 *poutputSize,
30     u32 *pQFactor
31 );
32 
33 /*
34 	���摜�Ɖ掿�t�@�N�^�[����o�̓T�C�Y���擾/�G���R�[�h�p�֐�
35 	<����>
36 	void *pWorkArea				[in] ���[�N�G���A�̐擪
37 	void *pTex					[in] �e�N�X�`���f�[�^�̐擪�A�h���X
38 	u16 srcWidth				[in] ���摜�̕�
39 	u16 srcHeight				[in] ���摜�̍���
40 	GXTexFmt texFormat			[in] �e�N�X�`���t�H�[�}�b�g
41 	u32 *poutputSize			[out] ���ۂ̏o�̓T�C�Y
42 	u32 QFactor					[in] �掿�t�@�N�^�[
43 	<�߂�l>
44 	0�Ȃ琳��I���A���Ȃ�G���[�R�[�h
45 */
46 s32 TMCCJPEGEncGetOutputSize(
47 	void *pWorkArea,
48     void *pTex,
49     u16 srcWidth,
50     u16 srcHeight,
51     GXTexFmt texFormat,
52     u32 *poutputSize,
53     u32 QFactor
54 );
55 
56 /*
57 	�G���R�[�_/�G���R�[�h�p�֐�
58 	<����>
59 	void *pWorkArea			[in] ���[�N�G���A�̐擪
60 	void *pTex				[in] �e�N�X�`���f�[�^�̐擪�A�h���X
61 	u16 srcWidth			[in] ���摜�̕�
62 	u16 srcHeight			[in] ���摜�̍���
63 	GXTexFmt texFormat		[in] �e�N�X�`���t�H�[�}�b�g
64 	u32 QFactor				[in] �掿�t�@�N�^�[
65 	void *pJpegBuffer		[out] �o�̓o�b�t�@
66 	u32 jpegBufferSize		[in] �o�̓o�b�t�@�T�C�Y
67 	u32 *poutputSize		[out] ���ۂ̏o�̓T�C�Y
68 	<�߂�l>
69 	0�Ȃ琳��I���A���Ȃ�G���[�R�[�h
70 */
71 s32 TMCCJPEGEncEncode(
72 	void *pWorkArea,
73 	void *pTex,
74     u16 srcWidth,
75     u16 srcHeight,
76     GXTexFmt texFormat,
77     u32 QFactor,
78     void *pJpegBuffer,
79     u32 jpegBufferSize,
80 	u32 *poutputSize
81 );
82 
83 /*
84 	EXIF�^�O1(���C���C���[�W�p)/�f�R�[�h�p�\����
85 */
86 typedef struct {
87 	s8 *ImageDescription; 					/* �摜�^�C�g��(ASCII) */
88 	s8 *Make; 								/* �摜���͋@��̃��[�J�[��(ASCII) */
89 	s8 *Model; 								/* �摜���͋@��̃��f����(ASCII) */
90 	u16 Orientation;						/* �摜����(�����Ȃ�16�r�b�g����) */
91 	u32 XResolution[2];						/* �摜�̕��̉��x(�����Ȃ�32�r�b�g����,[0]/[1]) */
92 	u32 YResolution[2];						/* �摜�̍����̉��x(�����Ȃ�32�r�b�g����,[0]/[1]) */
93 	u16 ResolutionUnit; 					/* �摜�̕��ƍ����̉��x�̒P��(�����Ȃ�16�r�b�g����) */
94 	u16 TransferFunction[3][256];			/* �Đ��K���J�[�u����(�����Ȃ�16�r�b�g���� 3*256) */
95 	s8 DateTime[20]; 						/* �t�@�C���ύX����(ASCII"YYYY:MM:DD HH:MM:SS") */
96 	u16 YCbCrPositioning; 					/* YCC�̉�f�\��<Y��C�̈ʒu>(�����Ȃ�16�r�b�g����) */
97 	u32 ExifIFDPointer; 					/* Exif�^�O */
98 	s8 ExifVersion[4]; 						/* Exif�o�[�W����(ASCII,NULL�����Ȃ�) */
99 	u8 ComponentsConfiguration[4];			/* �e�R���|�[�l���g�̈Ӗ�(�����Ȃ�8�r�b�g����) */
100 	s8 FlashPixVersion[4]; 					/* �Ή��t���b�V���s�b�N�X�o�[�W����(ASCII,NULL�����Ȃ�) */
101 	u16 ColorSpace; 						/* �F��ԏ��(�����Ȃ�16�r�b�g����) */
102 	u32 PixelXDimension; 					/* �����摜��(�����Ȃ�32(16)�r�b�g����) */
103 	u32 PixelYDimension; 					/* �����摜����(�����Ȃ�32(16)�r�b�g����) */
104 } TMCCJPEGExifIFD0Info;
105 
106 /*
107 	EXIF�^�O1(�T���l�C���C���[�W�p)/�f�R�[�h�p�\����
108 */
109 typedef struct{
110 	u16 Compression;						/* ���k�̎��(�����Ȃ�16�r�b�g����) */
111 	u32 XResolution[2];						/* �摜�̕��̉��x(�����Ȃ�32�r�b�g����,[0]/[1]) */
112 	u32 YResolution[2];						/* �摜�̍����̉��x(�����Ȃ�32�r�b�g����,[0]/[1]) */
113 	u16 ResolutionUnit;						/* �摜�̕��ƍ����̉��x�̒P��(�����Ȃ�16�r�b�g����) */
114 	u32 JPEGInterchangeFormat;				/* JPEG��SOI�ւ̃I�t�Z�b�g(�����Ȃ�32�r�b�g����) */
115 	u32 JPEGInterchangeFormatLength;		/* JPEG�f�[�^�̃o�C�g��(�����Ȃ�32�r�b�g����) */
116 } TMCCJPEGExifIFD1Info;
117 
118 /*
119 	EXIF�^�O�p�����[�^/�f�R�[�h�p�\����
120 */
121 typedef struct {
122 	TMCCJPEGExifIFD0Info	image;			/*���C���C���[�W�pTAG�f�[�^*/
123 	TMCCJPEGExifIFD1Info	thumb;			/*�T���l�C���C���[�W�pTAG�f�[�^*/
124 } TMCCJPEGExifInfo;
125 
126 /*
127 	EXIF�f�[�^�擾/�f�R�[�h�p�֐�
128 	<����>
129 	void *pWorkArea				[in] ���[�N�G���A�̐擪�A�h���X
130 	void *pJpegStream			[in] JPEG�f�[�^�̐擪�A�h���X
131 	u32 jpegStreamSize			[in] JPEG�f�[�^�̃T�C�Y
132 	TMCCJPEGExifInfo *exifInfo	[out] Exif���
133 	<�߂�l>
134 	0�Ȃ琳��I���A���Ȃ�G���[�R�[�h
135 */
136 
137 s32 TMCCJPEGDecGetExif(
138 	void *pWorkArea,
139     void *pJpegStream,
140     u32 jpegStreamSize,
141     TMCCJPEGExifInfo *exifInfo
142 );
143 
144 
145 /*
146 	�����摜�T�C�Y���/�f�R�[�h�p�\����
147 */
148 typedef struct {
149     u16 width;         /* �����摜�̕� */
150     u16 height;        /* �����摜�̍��� */
151     u32 texBufferSize; /* �e�N�X�`���̏o�̓T�C�Y */
152 } TMCCJPEGJpegSize;
153 
154 /*
155 	�摜�T�C�Y�擾/�f�R�[�h�p�֐�
156 	<����>
157 	void *pWorkArea				[in] ���[�N�G���A�̐擪�A�h���X
158 	void *pJpegStream			[in] JPEG�f�[�^�̐擪�A�h���X
159 	u32 jpegStreamSize			[in] JPEG�f�[�^�̃T�C�Y
160 	GXTexFmt texFormat			[in] �e�N�X�`���t�H�[�}�b�g
161 	s32 resolution				[in] ���x�k���p�����[�^
162 	u8 thumbnail				[in] �T���l�C���f�[�^��L�����邩���Ȃ�
163 	TMCCJPEGJpegSize *jpegSize	[out] �摜�T�C�Y���\���̃|�C���^
164 	<�߂�l>
165 	0�Ȃ琳��I���A���Ȃ�G���[�R�[�h
166 */
167 s32 TMCCJPEGDecGetSize(
168 	void *pWorkArea,
169 	void *pJpegStream,
170     u32 jpegStreamSize,
171     GXTexFmt texFormat,
172     s32 resolution,
173     u8 thumbnail,
174     TMCCJPEGJpegSize *jpegSize
175 );
176 
177 /*
178 	�摜�T�C�Y�擾/�f�R�[�h�p�֐�
179 	<����>
180 	void *pWorkArea				[in] ���[�N�G���A�̐擪�A�h���X
181 	void *pJpegStream			[in] JPEG�f�[�^�̐擪�A�h���X
182 	u32 jpegStreamSize			[in] JPEG�f�[�^�̃T�C�Y
183 	GXTexFmt texFormat			[in] �e�N�X�`���t�H�[�}�b�g
184 	s32 resolution				[in] ���x�k���p�����[�^
185 	u16 srcX,              		[in] �L���̈�̍���x���W
186 	u16 srcY,              		[in] �L���̈�̍���y���W
187 	u16 srcWidth,          		[in] �L���̈�̕�
188 	u16 srcHeight         		[in] �L���̈�̍���
189 	TMCCJPEGJpegSize *jpegSize	[out] �摜�T�C�Y���\���̃|�C���^
190 	<�߂�l>
191 	0�Ȃ琳��I���A���Ȃ�G���[�R�[�h
192 */
193 s32 TMCCJPEGDecGetSizeEx(
194 	void *pWorkArea,
195     void *pJpegStream,
196     u32 jpegStreamSize,
197     GXTexFmt texFormat,
198     s32 resolution,
199     u16 srcX,
200     u16 srcY,
201     u16 srcWidth,
202     u16 srcHeight,
203     TMCCJPEGJpegSize *jpegSize
204 );
205 
206 /*
207 	�f�R�[�_/�f�R�[�h�p�֐�
208 	<����>
209 	void *pWorkArea				[in] ���[�N�G���A�̐擪�A�h���X
210 	void *pJpegStream			[in] JPEG�f�[�^�̐擪�A�h���X
211 	u32 jpegStreamSize			[in] JPEG�f�[�^�̃T�C�Y
212 	void *pTexBuffer			[out]�e�N�X�`���o�b�t�@�̐擪�A�h���X
213 	u32 texBufferSize			[in] �e�N�X�`���o�b�t�@�̃T�C�Y
214 	GXTexFmt texFormat			[in] �e�N�X�`���t�H�[�}�b�g
215 	s32 resolution				[in] ���x�k���p�����[�^
216 	u8 thumbnail				[in] �T���l�C����L�����邩���Ȃ�
217 	<�߂�l>
218 	0�Ȃ琳��I���A���Ȃ�G���[�R�[�h
219 */
220 s32 TMCCJPEGDecDecode(
221 	void *pWorkArea,
222     void *pJpegStream,
223     u32 jpegStreamSize,
224     void *pTexBuffer,
225     u32 texBufferSize,
226     GXTexFmt texFormat,
227     s32 resolution,
228     u8 thumbnail
229 );
230 
231 /*
232 	�f�R�[�_/�f�R�[�h�p�֐�
233 	<����>
234 	void *pWorkArea				[in] ���[�N�G���A�̐擪�A�h���X
235 	void *pJpegStream			[in] JPEG�f�[�^�̐擪�A�h���X
236 	u32 jpegStreamSize			[in] JPEG�f�[�^�̃T�C�Y
237 	void *pTexBuffer			[out]�e�N�X�`���o�b�t�@�̐擪�A�h���X
238 	u32 texBufferSize			[in] �e�N�X�`���o�b�t�@�̃T�C�Y
239 	GXTexFmt texFormat			[in] �e�N�X�`���t�H�[�}�b�g
240 	s32 resolution				[in] ���x�k���p�����[�^
241 	u16 srcX,              		[in] �L���̈�̍���x���W
242 	u16 srcY,              		[in] �L���̈�̍���y���W
243 	u16 srcWidth,          		[in] �L���̈�̕�
244 	u16 srcHeight         		[in] �L���̈�̍���
245 	<�߂�l>
246 	0�Ȃ琳��I���A���Ȃ�G���[�R�[�h
247 */
248 s32 TMCCJPEGDecDecodeEx(
249 	void *pWorkArea,
250     void *pJpegStream,
251     u32 jpegStreamSize,
252     void *pTexBuffer,
253     u32 texBufferSize,
254     GXTexFmt texFormat,
255     s32 resolution,
256     u16 srcX,
257     u16 srcY,
258     u16 srcWidth,
259     u16 srcHeight
260 );
261 
262 /*!
263 	�{���C�u�����̃o�[�W���������擾����
264 	<����>
265 	�Ȃ�
266 	<�߂�l>
267 	�o�[�W�������
268 */
269 u32 TMCCJPEGGetVer( void );
270 
271 /*
272 	�G���[�R�[�h
273 */
274 #define		TMCC_JPEG_OK       				 0x00  		/* ����I�� */
275 #define		TMCC_JPEG_OPT_ERR				-0x01		/* ���[�U�[�I�v�V�����G���[ */
276 #define		TMCC_JPEG_NG       				-0x02  		/* �ُ�I�� */
277 #define		TMCC_JPEG_ENC_BUF_OVER			-0x03		/* Encoder���̏o�̓T�C�Y���� */
278 #define		TMCC_JPEG_TEXT_ERR				-0x04  		/* �e�N�X�`���[�t�H�[�}�b�g�G���[ */
279 #define		TMCC_JPEG_ERR_SOF  				-0x10		/* SOF �}�[�J�G���[ */
280 #define		TMCC_JPEG_ERR_SOI  				-0x20		/* SOI �}�[�J�G���[ */
281 #define		TMCC_JPEG_ERR_EOI  				-0x21		/* EOI �}�[�J�G���[ */
282 #define		TMCC_JPEG_ERR_SOS  				-0x22		/* SOS �}�[�J�G���[ */
283 #define		TMCC_JPEG_ERR_RSTm 				-0x23		/* RSTm�}�[�J�G���[ */
284 #define		TMCC_JPEG_ERR_NOMC 				-0x2f		/* �Ή��s�ƒ}�[�J�o�� */
285 #define		TMCC_JPEG_ERR_DHT  				-0x40		/* DHT �G���[ */
286 #define		TMCC_JPEG_ERR_DQT  				-0x41		/* DQT �G���[ */
287 #define		TMCC_JPEG_ERR_DRI  				-0x42		/* DRI �G���[ */
288 #define		TMCC_JPEG_ERR_DNL  				-0x43		/* DNL �G���[ */
289 #define		TMCC_JPEG_ERR_COM  				-0x44		/* COM �G���[ */
290 #define		TMCC_JPEG_ERR_APPn 				-0x45		/* APP0�`F �G���[ */
291 #define		TMCC_JPEG_ERR_FHEADER  			-0x50		/* SOF �w�b�_�G���[ */
292 #define		TMCC_JPEG_ERR_SHEADER  			-0x51		/* SOS �w�b�_�G���[ */
293 #define		TMCC_JPEG_ERR_BITSTREAM			-0x64		/* JPEG�X�g���[���G���[ */
294 #define		TMCC_JPEG_ERR_FORMAT   			-0x70		/* JPEG���Ή��t�H�[�}�b�g�G���[ */
295 #define		TMCC_JPEG_ERR_EXIF_BUFFER		-0x91		/* EXIF�o�b�t�@�G���[ */
296 #define		TMCC_JPEG_ERR_BUFFER   			-0x90		/* JPEG�o�b�t�@�G���[ */
297 #define		TMCC_JPEG_ERR_NO_THUMBNAIL		-0xA0		/* �X�g���[������Thumbnail�����݂��Ȃ� */
298 #define		TMCC_JPEG_ERR_EXIF_FORMAT		-0xA1		/* EXIF�̍\���̌�� */
299 #define		TMCC_JPEG_RET_ERR_USRFUNC		-0xF0		/* ���[�U��`�֐��G���[ */
300 #define		TMCC_JPEG_ERR_JPEG_COPY_BUFFER	-0xF1		/* �f�[�^�R�s�[���̃G���[ */
301 
302 /*
303 	���̑��}�N���萔
304 */
305 #define		TMCC_JPEG_WORKAREA_SIZE					0x1C00			/* 7k Byte */
306 #define		TMCC_JPEG_JPEGBUFFER_MINIMAM_SIZE		0x25F			/* JPEG�w�b�_�{�}�[�J�̃T�C�Y */
307 #define		TMCC_JPEG_VERSION_NO					0x00010900		/* �o�[�W�������	*/
308 
309 #ifdef  __cplusplus
310 }
311 #endif
312