#include "stdafx.h"
#include "../SearchBase.h"
#include "JpgSearch.h"

CJpgSearch::CJpgSearch()
{
	InitHed("\xFF\xD8\xFF\xE0**JFIF", 10);
	InitFot("\xFF\xD9", 2);
}

void CJpgSearch::Mount(CArcFile* pclArc)
{
	SFileInfo infFile;

	// 開始アドレス取得
	infFile.start = pclArc->GetArcPointer();

	// FFD8をスキップ
	pclArc->Seek(2, FILE_CURRENT);

	// JPEGイメージデータを検索
	while (1) {
		// マーカー取得
		BYTE marker[2];
		if (pclArc->Read(marker, 2) == 0)
			return;
		// JPEGイメージデータになったらループを抜ける
		if (memcmp(marker, "\xFF\xDA", 2) == 0)
			break;

		// データ領域のサイズ取得
		WORD length;
		if (pclArc->Read(&length, 2) == 0)
			return;
		pclArc->ConvEndian(&length);

		// 次のデータ領域まで進める
		pclArc->Seek(length - 2, FILE_CURRENT);
	}

	// プログレスバーを進める
	pclArc->GetProg()->UpdatePercent(pclArc->GetArcPointer() - infFile.start);

	// フッタ検索
	if (SearchFot(pclArc) == FALSE)
		return;

	// 終了アドレス取得
	infFile.end = pclArc->GetArcPointer();

	// ファイルサイズ取得
	infFile.sizeOrg = infFile.end - infFile.start;
	infFile.sizeCmp = infFile.sizeOrg;

	pclArc->AddFileInfo(infFile, GetCtFile(), _T(".jpg"));

}