//----------------------------------------------------------------------------
// JPEGライブラリヘッダー
// ユーザー参照用
//	Copyright (C) 2009,2011 by AIG-Soft

#ifndef	__AIG_JPEG__
#define	__AIG_JPEG__	1

//----------------------------------------------------------------------------
// １ブロックとしての処理単位ドット数
// JWX*JWYドットのブロックを１つとして処理していく
// 全て８で変更不可
#define	JWX	8	// ドット単位時
#define	JWY	8
#define	JWU	8	// 周波数単位時
#define	JWV	8

//----------------------------------------------------------------------------
// ＪＰＥＧマーカー(0xff??)

#define	JPGMAKHED	0xff	// JPEGのマーカーは0xff??である(格納は68形式)
typedef enum {
//	 TEM	=0xff01
	 SOF0	=0xffc0		// 基本DCTフレームヘッダー
	,SOF1	,SOF2	,SOF3
	,DHT	=0xffc4		// ハフマンテーブル定義
	,SOF5	,SOF6	,SOF7
	,JPG				// JPEG拡張のためのリザーブ
	,SOF9	,SOF10	,SOF11
	,DAC	=0xffcc		// 算術符号化条件付け定義
	,SOF13	,SOF14	,SOF15
	,RST0	=0xffd0		// ↓リスタートマーカー
	,RST1	,RST2	,RST3	,RST4	,RST5	,RST6	,RST7
						// ↑リスタートマーカー
	,SOI	=0xffd8		// 画像開始
	,EOI	=0xffd9		// 画像終了
	,SOS	=0xffda		// スキャンヘッダー
	,DQT	=0xffdb		// 量子化テーブル定義
	,DNL	=0xffdc		// ライン数定義
	,DRI	=0xffdd		// リスタートインターバル定義
	,DHP	=0xffde
	,EXP	=0xffdf
	,APP0	=0xffe0		// アプリケーションセグメント(JFIF/AVI-MotionJPEG)
	,APP1	=0xffe1		// Exif情報/QuickTime Motion-JPEG A情報
	,APP2				// FlashPix拡張情報（未使用）
	,APP3	,APP4	,APP5
	,APP6	,APP7	,APP8	,APP9	,APP10
	,APP11	,APP12	,APP13	,APP14	,APP15
	,JPG0	=0xfff0
	,JPG1	,JPG2	,JPG3	,JPG4	,JPG5
	,JPG6	,JPG7	,JPG8	,JPG9	,JPG10
	,JPG11	,JPG12	,JPG13
	,COM	=0xfffe		// コメント
} JPEGMAKER;

/* 全データの格納順:特にAPPxの順は重要；テーブル内のY/UV/DC/AC登場順は可変
	SOI
	APP0	JFIF/AVI-MotionJPEG
	APP1	Exif/Motion-JPEG A
	(COM)	コメント（ある時のみ）
	DQT		Y  量子化テーブル
			UV 量子化テーブル		白黒時はなし
	DHT		Y  DCハフマンテーブル
			UV DCハフマンテーブル	白黒時はなし
			Y  ACハフマンテーブル
			UV ACハフマンテーブル	白黒時はなし
	SOF0	フレームヘッダー		白黒時は変化
	SOS		スキャンヘッダー		白黒時は変化（サイズも）
	スキャンデータ＝JPEG圧縮画像データ
	EOI
*/
//----------------------------------------------------------------------------
// 基本構造(サンプル)
// 数値は全て68形式

/* アプリケーションデータセグメント(AVI時は全く違う構造になるので注意)
static const unchar app0[]={
	 'J','F','I','F',0	// 識別子
	,1,2		// バージョン v1.02フォーマット
	,0			// 密度単位 0=なし
	,0,0		// 横密度
	,0,0		// 縦密度
	,0			// サムネイル横ドット数 0=なし
	,0			// サムネイル縦ドット数 0=なし
};
*/

/* フレームヘッダー(SOF0)
static unchar frame[] = {
	 8			// サンプル精度:8bit固定
	,0,0		// line数＝yドット数；変化
	,0,0		// １ライン数当たりのサンプル数＝xドット数；変化
	,3			// 成分数:YUV=3 / 白黒モード時は1
//	,1,0x22,0	// 4:1:1時～Yの識別子は1,サンプリングファクタは水平2,垂直2,量子化テーブルは0を使用←WTの出力フォーマット
	,1,0x21,0	// 4:2:2時～									   2,    1						　←デジカメが要求するフォーマット
	,2,0x11,1	// Uの識別子は2,サンプリングファクタは水平1,垂直1,量子化テーブルは1を使用
	,3,0x11,2	// Vの識別子は3,サンプリングファクタは水平1,垂直1,量子化テーブルは2を使用
				// 但し、U/VＤで量子化テーブルを共通利用する時は量子化テーブル=1とする
};
*/
// フレームヘッダー内要素位置
#define	SOF0_GWY		1
#define	SOF0_GWX		3
#define	SOF0_ID_Y		6
#define	SOF0_SAMLING_Y	(SOF0_ID_Y+1)
#define	SOF0_ID_U		(SOF0_ID_Y+3)
#define	SOF0_SAMLING_U	(SOF0_ID_U+1)
#define	SOF0_ID_V		(SOF0_ID_U+3)
#define	SOF0_SAMLING_V	(SOF0_ID_V+1)

/* スキャンヘッダー
static unchar scanC[]={	// フルカラー用
	 3			// 成分数(Y/U/V)
	,1,0x00		// YのハフマンテーブルはDCは0,ACは0
	,2,0x11		// UのハフマンテーブルはDCは1,ACは1（白黒時はなし）
	,3,0x11		// VのハフマンテーブルはDCは1,ACは1（白黒時はなし）
	,0			// 基本DCTでは未使用（固定値）
	,63			// 基本DCTでは未使用（固定値）
	,0			// 基本DCTでは未使用（固定値）
};
*/
// スキャンヘッダー内要素位置
#define	SOS_ID_Y	1
#define	SOS_ID_U	(SOS_ID_Y+2)
#define	SOS_ID_V	(SOS_ID_U+2)

//----------------------------------------------------------------------------

#endif

//----------------------------------------------------------------------------
