/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.apache.sanselan.formats.jpeg;

public interface JpegConstants
{

	public static final byte JFIF0_SIGNATURE[] = new byte[]{
			0x4a, // J
			0x46, // F
			0x49, // I
			0x46, // F
			0x0, //  
	};
	public static final byte JFIF0_SIGNATURE_ALTERNATIVE[] = new byte[]{
			0x4a, // J
			0x46, // F
			0x49, // I
			0x46, // F
			0x20, //  
	};

	public static final byte ExifIdentifierCode[] = {
			0xff & 'E', 0xff & 'x', 0xff & 'i', 0xff & 'f',
	};

	public static final byte SOI[] = new byte[]{
			(byte) 0xff, (byte) 0xd8
	};
	public static final byte EOI[] = new byte[]{
			(byte) 0xff, (byte) 0xd9
	};
	public static final int SOS_Marker = (0xff00) | (0xda);

	public static final int JPEG_APP0 = 0xE0;
	//	public static final  int JPEG_APP1 = JPEG_APP0 + 1;
	//	public static final  int JPEG_APP1_Marker = (0xff00) | JPEG_APP1;
	public static final int JPEG_APP0_Marker = (0xff00) | (JPEG_APP0);
	public static final int JPEG_APP1_Marker = (0xff00) | (JPEG_APP0 + 1);
	//	public static final  int JPEG_APP2 = ;
	public static final int JPEG_APP2_Marker = (0xff00) | (JPEG_APP0 + 2);
	public static final int JPEG_APP13_Marker = (0xff00) | (JPEG_APP0 + 13);
	public static final int JPEG_APP14_Marker = (0xff00) | (JPEG_APP0 + 14);
	public static final int JPEG_APP15_Marker = (0xff00) | (JPEG_APP0 + 15);

	public static final int JFIFMarker = 0xFFE0;
	public static final int SOF0Marker = 0xFFc0;
	public static final int SOF1Marker = 0xFFc0 + 0x1;
	public static final int SOF2Marker = 0xFFc0 + 0x2;
	public static final int SOF3Marker = 0xFFc0 + 0x3;
	public static final int SOF4Marker = 0xFFc0 + 0x4;
	public static final int SOF5Marker = 0xFFc0 + 0x5;
	public static final int SOF6Marker = 0xFFc0 + 0x6;
	public static final int SOF7Marker = 0xFFc0 + 0x7;
	public static final int SOF8Marker = 0xFFc0 + 0x8;
	public static final int SOF9Marker = 0xFFc0 + 0x9;
	public static final int SOF10Marker = 0xFFc0 + 0xa;
	public static final int SOF11Marker = 0xFFc0 + 0xb;
	public static final int SOF12Marker = 0xFFc0 + 0xc;
	public static final int SOF13Marker = 0xFFc0 + 0xd;
	public static final int SOF14Marker = 0xFFc0 + 0xe;
	public static final int SOF15Marker = 0xFFc0 + 0xf;

	public static final int MARKERS[] = {
			SOS_Marker, JPEG_APP0, JPEG_APP0_Marker, JPEG_APP1_Marker,
			JPEG_APP2_Marker, JPEG_APP13_Marker, JPEG_APP14_Marker,
			JPEG_APP15_Marker, JFIFMarker, SOF0Marker, SOF1Marker, SOF2Marker,
			SOF3Marker, SOF4Marker, SOF5Marker, SOF6Marker, SOF7Marker,
			SOF8Marker, SOF9Marker, SOF10Marker, SOF11Marker, SOF12Marker,
			SOF13Marker, SOF14Marker, SOF15Marker,
	};

	public static final byte icc_profile_label[] = {
			0x49, 0x43, 0x43, 0x5F, 0x50, 0x52, 0x4F, 0x46, 0x49, 0x4C, 0x45,
			0x0
	};

	//	public static final byte PhotoshopIdentificationString[] = "Photoshop 3.0"
	//		.getBytes();
	public static final byte PhotoshopIdentificationString[] = {
			0xff & 'P', 0xff & 'h', 0xff & 'o', 0xff & 't', 0xff & 'o',
			0xff & 's', 0xff & 'h', 0xff & 'o', 0xff & 'p', 0xff & ' ',
			0xff & '3', 0xff & '.', 0xff & '0', 0,
	};
	public static final byte CONST_8BIM[] = {
			0xff & '8', 0xff & 'B', 0xff & 'I', 0xff & 'M',
	};

	public static final byte IPTCPrefix[] = {
			0x1C, 0x02,
	};

	public static final IptcType IPTC_TYPE_RecordVersion = new IptcType(0,
			"RecordVersion");
	public static final IptcType IPTC_TYPE_ObjectTypeReference = new IptcType(
			3, "ObjectTypeReference");
	public static final IptcType IPTC_TYPE_ObjectAttributeReference = new IptcType(
			4, "ObjectAttributeReference");
	public static final IptcType IPTC_TYPE_ObjectName = new IptcType(5,
			"ObjectName");
	public static final IptcType IPTC_TYPE_EditStatus = new IptcType(7,
			"EditStatus");
	public static final IptcType IPTC_TYPE_EditorialUpdate = new IptcType(8,
			"EditorialUpdate");
	public static final IptcType IPTC_TYPE_Urgency = new IptcType(10, "Urgency");
	public static final IptcType IPTC_TYPE_SubjectReference = new IptcType(12,
			"SubjectReference");
	public static final IptcType IPTC_TYPE_Category = new IptcType(15,
			"Category");
	public static final IptcType IPTC_TYPE_SupplementalCategory = new IptcType(
			20, "SupplementalCategory");
	public static final IptcType IPTC_TYPE_FixtureIdentifier = new IptcType(22,
			"FixtureIdentifier");
	public static final IptcType IPTC_TYPE_Keywords = new IptcType(25,
			"Keywords");
	public static final IptcType IPTC_TYPE_ContentLocationCode = new IptcType(
			26, "ContentLocationCode");
	public static final IptcType IPTC_TYPE_ContentLocationName = new IptcType(
			27, "ContentLocationName");
	public static final IptcType IPTC_TYPE_ReleaseDate = new IptcType(30,
			"ReleaseDate");
	public static final IptcType IPTC_TYPE_ReleaseTime = new IptcType(35,
			"ReleaseTime");
	public static final IptcType IPTC_TYPE_ExpirationDate = new IptcType(37,
			"ExpirationDate");
	public static final IptcType IPTC_TYPE_ExpirationTime = new IptcType(38,
			"ExpirationTime");
	public static final IptcType IPTC_TYPE_SpecialInstructions = new IptcType(
			40, "SpecialInstructions");
	public static final IptcType IPTC_TYPE_ActionAdvised = new IptcType(42,
			"ActionAdvised");
	public static final IptcType IPTC_TYPE_ReferenceService = new IptcType(45,
			"ReferenceService");
	public static final IptcType IPTC_TYPE_ReferenceDate = new IptcType(47,
			"ReferenceDate");
	public static final IptcType IPTC_TYPE_ReferenceNumber = new IptcType(50,
			"ReferenceNumber");
	public static final IptcType IPTC_TYPE_DateCreated = new IptcType(55,
			"DateCreated");
	public static final IptcType IPTC_TYPE_TimeCreated = new IptcType(60,
			"TimeCreated");
	public static final IptcType IPTC_TYPE_DigitalCreationDate = new IptcType(
			62, "DigitalCreationDate");
	public static final IptcType IPTC_TYPE_DigitalCreationTime = new IptcType(
			63, "DigitalCreationTime");
	public static final IptcType IPTC_TYPE_OriginatingProgram = new IptcType(
			65, "OriginatingProgram");
	public static final IptcType IPTC_TYPE_ProgramVersion = new IptcType(70,
			"ProgramVersion");
	public static final IptcType IPTC_TYPE_ObjectCycle = new IptcType(75,
			"ObjectCycle");
	public static final IptcType IPTC_TYPE_Byline = new IptcType(80, "By-line");
	public static final IptcType IPTC_TYPE_BylineTitle = new IptcType(85,
			"By-lineTitle");
	public static final IptcType IPTC_TYPE_City = new IptcType(90, "City");
	public static final IptcType IPTC_TYPE_Sublocation = new IptcType(92,
			"Sublocation");
	public static final IptcType IPTC_TYPE_Province_State = new IptcType(95,
			"Province/State");
	public static final IptcType IPTC_TYPE_Country_PrimaryLocationCode = new IptcType(
			100, "Country/PrimaryLocationCode");
	public static final IptcType IPTC_TYPE_Country_PrimaryLocationName = new IptcType(
			101, "Country/PrimaryLocationName");
	public static final IptcType IPTC_TYPE_OriginalTransmission_Reference = new IptcType(
			103, "OriginalTransmission,Reference");
	public static final IptcType IPTC_TYPE_Headline = new IptcType(105,
			"Headline");
	public static final IptcType IPTC_TYPE_Credit = new IptcType(110, "Credit");
	public static final IptcType IPTC_TYPE_Source = new IptcType(115, "Source");
	public static final IptcType IPTC_TYPE_CopyrightNotice = new IptcType(116,
			"CopyrightNotice");
	public static final IptcType IPTC_TYPE_Contact = new IptcType(118,
			"Contact");
	public static final IptcType IPTC_TYPE_Caption_Abstract = new IptcType(120,
			"Caption/Abstract");
	public static final IptcType IPTC_TYPE_Writer_Editor = new IptcType(122,
			"Writer/Editor");
	public static final IptcType IPTC_TYPE_RasterizedCaption = new IptcType(
			125, "RasterizedCaption");
	public static final IptcType IPTC_TYPE_ImageType = new IptcType(130,
			"ImageType");
	public static final IptcType IPTC_TYPE_ImageOrientation = new IptcType(131,
			"ImageOrientation");
	public static final IptcType IPTC_TYPE_LanguageIdentifier = new IptcType(
			135, "LanguageIdentifier");
	public static final IptcType IPTC_TYPE_AudioType = new IptcType(150,
			"AudioType");
	public static final IptcType IPTC_TYPE_AudioSamplingRate = new IptcType(
			151, "AudioSamplingRate");
	public static final IptcType IPTC_TYPE_AudioSamplingResolution = new IptcType(
			152, "AudioSamplingResolution");
	public static final IptcType IPTC_TYPE_AudioDuration = new IptcType(153,
			"AudioDuration");
	public static final IptcType IPTC_TYPE_AudioOutcue = new IptcType(154,
			"AudioOutcue");
	public static final IptcType IPTC_TYPE_ObjectDataPreview_FileFormat = new IptcType(
			200, "ObjectDataPreview,FileFormat");
	public static final IptcType IPTC_TYPE_ObjectDataPreview_FileFormatVersion = new IptcType(
			201, "ObjectDataPreview,FileFormatVersion");
	public static final IptcType IPTC_TYPE_ObjectDataPreviewData = new IptcType(
			202, "ObjectDataPreviewData");
	//--
	public static final IptcType IPTC_TYPE_Unknown = new IptcType(-1, "Unknown");

	public static final IptcType IPTC_TYPES[] = {
			IPTC_TYPE_RecordVersion, IPTC_TYPE_ObjectTypeReference,
			IPTC_TYPE_ObjectAttributeReference, IPTC_TYPE_ObjectName,
			IPTC_TYPE_EditStatus, IPTC_TYPE_EditorialUpdate, IPTC_TYPE_Urgency,
			IPTC_TYPE_SubjectReference, IPTC_TYPE_Category,
			IPTC_TYPE_SupplementalCategory, IPTC_TYPE_FixtureIdentifier,
			IPTC_TYPE_Keywords, IPTC_TYPE_ContentLocationCode,
			IPTC_TYPE_ContentLocationName, IPTC_TYPE_ReleaseDate,
			IPTC_TYPE_ReleaseTime, IPTC_TYPE_ExpirationDate,
			IPTC_TYPE_ExpirationTime, IPTC_TYPE_SpecialInstructions,
			IPTC_TYPE_ActionAdvised, IPTC_TYPE_ReferenceService,
			IPTC_TYPE_ReferenceDate, IPTC_TYPE_ReferenceNumber,
			IPTC_TYPE_DateCreated, IPTC_TYPE_TimeCreated,
			IPTC_TYPE_DigitalCreationDate, IPTC_TYPE_DigitalCreationTime,
			IPTC_TYPE_OriginatingProgram, IPTC_TYPE_ProgramVersion,
			IPTC_TYPE_ObjectCycle, IPTC_TYPE_Byline, IPTC_TYPE_BylineTitle,
			IPTC_TYPE_City, IPTC_TYPE_Sublocation, IPTC_TYPE_Province_State,
			IPTC_TYPE_Country_PrimaryLocationCode,
			IPTC_TYPE_Country_PrimaryLocationName,
			IPTC_TYPE_OriginalTransmission_Reference, IPTC_TYPE_Headline,
			IPTC_TYPE_Credit, IPTC_TYPE_Source, IPTC_TYPE_CopyrightNotice,
			IPTC_TYPE_Contact, IPTC_TYPE_Caption_Abstract,
			IPTC_TYPE_Writer_Editor, IPTC_TYPE_RasterizedCaption,
			IPTC_TYPE_ImageType, IPTC_TYPE_ImageOrientation,
			IPTC_TYPE_LanguageIdentifier, IPTC_TYPE_AudioType,
			IPTC_TYPE_AudioSamplingRate, IPTC_TYPE_AudioSamplingResolution,
			IPTC_TYPE_AudioDuration, IPTC_TYPE_AudioOutcue,
			IPTC_TYPE_ObjectDataPreview_FileFormat,
			IPTC_TYPE_ObjectDataPreview_FileFormatVersion,
			IPTC_TYPE_ObjectDataPreviewData,
	};
}