1 /*---------------------------------------------------------------------------* 2 Project: Horizon 3 File: jpeg_MpTypes.h 4 5 Copyright (C)2009-2010 Nintendo Co., Ltd. All rights reserved. 6 7 These coded instructions, statements, and computer programs contain 8 proprietary information of Nintendo of America Inc. and/or Nintendo 9 Company Ltd., and are protected by Federal copyright law. They may 10 not be disclosed to third parties or copied or duplicated in any form, 11 in whole or in part, without the prior written consent of Nintendo. 12 13 $Rev: 28941 $ 14 *---------------------------------------------------------------------------*/ 15 16 #ifndef NN_JPEG_JPEGMPTYPES_H_ 17 #define NN_JPEG_JPEGMPTYPES_H_ 18 19 #include <nn/types.h> 20 #include <nn/assert.h> 21 22 #ifdef __cplusplus 23 24 namespace nn { 25 namespace jpeg { 26 namespace CTR { 27 28 const size_t DATE_TIME_SIZE = 20; //!< 日時情報を格納するバッファのバイト数です。フォーマットは「YYYY:MM:DD HH:MM:DD」+0x00 の 20 文字になります。 29 const size_t IMAGE_UID_SIZE = 33; //!< JPEGの画像ユニークIDのバイト数です。MPフォーマットの個別画像ユニークIDリストの、1要素のバイト数でもあります。 30 31 const size_t MPF_VERSION_SIZE = 4; //!< MPフォーマットバージョンのバイト数です。 32 const size_t MP_ENTRY_SIZE = 16; //!< MPフォーマットのMPエントリの、1要素のバイト数です。@ref MpEntry 構造体のバイト数ではありません。 33 34 const size_t GPS_VERSION_ID_SIZE = 4; //!< GPSタグバージョンのバイト数です。 35 const size_t GPS_REF_SIZE = 2; 36 const size_t GPS_DATE_STAMP_SIZE = 11; //!< GPS日付のバイト数です。 37 38 const u32 NUM_GPS_LATITUDE_RATIONALS = 3; 39 const u32 NUM_GPS_LONGITUDE_RATIONALS = 3; 40 const u32 NUM_GPS_TIME_STAMP_RATIONALS = 3; 41 42 const u32 NUM_RATIONAL_WORDS = 2; 43 const u32 NUM_SRATIONAL_WORDS = 2; 44 45 const u32 MIN_DECODER_SHRINK_LEVEL = 1; //!< 縮小デコード時の縮小レベルに指定できる最小値です。 46 const u32 MAX_DECODER_SHRINK_LEVEL = 4; //!< 縮小デコード時の縮小レベルに指定できる最大値です。 47 48 const size_t TWL_PHOTO_MAKER_NOTE_SIZE = 8; //!< 「ニンテンドーDSiカメラ」用メーカーノートのバイト数です。 49 50 const u32 MAX_DECODER_OUTPUT_BUFFER_WIDTH = 65536; //!< デコード時の出力画像バッファ横幅に指定できる最大値(pixel)です。 51 const u32 MAX_ENCODER_INPUT_BUFFER_WIDTH = 65536; //!< エンコード時の入力画像バッファ横幅に指定できる最大値(pixel)です。 52 53 /*! 54 @brief エンコード時の出力形式を示す列挙体です。 55 */ 56 enum PixelSampling 57 { 58 PIXEL_SAMPLING_YUV444 = 1, //!< YUV444 形式 59 PIXEL_SAMPLING_YUV420 = 2, //!< YUV420 形式 60 PIXEL_SAMPLING_YUV422 = 3, //!< YUV422 形式 61 62 NUM_PIXEL_SAMPLINGS // これはAPI引数として指定できません。 63 }; 64 65 const PixelSampling DEFAULT_THUMBNAIL_PIXEL_SAMPLING = PIXEL_SAMPLING_YUV422; //!< デフォルトのサムネイル出力形式です。 66 67 const u32 DEFAULT_THUMBNAIL_WIDTH = 160; //!< デフォルトのサムネイル画像横幅(pixel)です。 68 const u32 DEFAULT_THUMBNAIL_HEIGHT = 120; //!< デフォルトのサムネイル画像縦幅(pixel)です。 69 70 /*! 71 @brief ピクセルフォーマットを示す列挙体です。 72 73 エンコーダ入力、デコーダ出力共に対応しています。 74 75 */ 76 enum PixelFormat 77 { 78 PIXEL_FORMAT_YUYV8 = 0, //!< カメラデバイスがキャプチャした画像のピクセルフォーマットです。4バイト(2ピクセル)一組で、先頭バイトからの並び順は Y成分(左側)、U成分、Y成分(右側)、V成分です。 79 PIXEL_FORMAT_CTR_RGB565 = 1, //!< GPUテクスチャフォーマット GL_RGB, GL_UNSIGNED_SHORT_5_6_5 に相当するものです。画像の左上ピクセルがメモリの先頭に配置されています。このフォーマットの画像は、グラフィックスライブラリがPICAネイティブフォーマットへ変換する際、Vフリップされます。また変換処理に伴い、グラフィックスライブラリのCPU処理時間が増えます。 80 PIXEL_FORMAT_CTR_RGB565_BLOCK8 = 2, //!< GPUテクスチャフォーマット GL_RGB_NATIVE_DMP, GL_UNSIGNED_SHORT_5_6_5 に相当するものです。デコード関数の出力バッファを直接GPUから参照する場合、128バイトアラインメントにしてください。本ライブラリでは4バイトアラインメントのチェックのみ行います。 81 PIXEL_FORMAT_RGB8 = 3, //!< GPUテクスチャフォーマット GL_RGB, GL_UNSIGNED_BYTE に相当するものです。PIXEL_FORMAT_CTR_RGB565と同様に、画像の左上ピクセルがメモリの先頭です。 82 PIXEL_FORMAT_CTR_RGB8_BLOCK8 = 4, //!< GPUテクスチャフォーマット GL_RGB_NATIVE_DMP, GL_UNSIGNED_BYTE に相当するものです。アラインメントについてはPIXEL_FORMAT_CTR_RGB565_BLOCK8と同じです。 83 PIXEL_FORMAT_RGBA8 = 5, //!< GPUテクスチャフォーマット GL_RGBA, GL_UNSIGNED_BYTE に相当するものです。アルファ成分はエンコーダ入力時には無視され、デコーダ出力時には0xFFになります。PIXEL_FORMAT_CTR_RGB565と同様に、画像の左上ピクセルがメモリの先頭です。 84 PIXEL_FORMAT_CTR_RGBA8_BLOCK8 = 6, //!< GPUテクスチャフォーマット GL_RGBA_NATIVE_DMP, GL_UNSIGNED_BYTE に相当するものです。アラインメントについてはPIXEL_FORMAT_CTR_RGB565_BLOCK8と同じです。 85 PIXEL_FORMAT_BGR8 = 7, //!< LCDディスプレイバッファフォーマット GL_RGB8_OES に相当するものです。色成分の並び順が PIXEL_FORMAT_RGB8 の逆になっています。 86 PIXEL_FORMAT_ABGR8 = 8, //!< LCDディスプレイバッファフォーマット GL_RGBA8_OES に相当するものです。色成分の並び順が PIXEL_FORMAT_RGBA8 の逆になっています。アルファ成分の扱いは PIXEL_FORMAT_RGBA8 と同じです。 87 88 NUM_PIXEL_FORMATS // これはAPI引数として指定できません。 89 }; 90 91 /*! 92 @brief MP種別情報に含まれるフラグです。 93 */ 94 enum MpTypeFlag 95 { 96 MP_TYPE_FLAG_DEPENDENT_IMAGE_PARENT = 0x80000000, //!< 従属親画像です。従属画像 (dependent image) を持ちます。 97 MP_TYPE_FLAG_DEPENDENT_IMAGE_CHILD = 0x40000000, //!< 従属子画像です。他の個別画像の従属画像です。 98 MP_TYPE_FLAG_REPRESENTATIVE_IMAGE = 0x20000000 //!< 代表画像 (representative image)。 99 }; 100 101 /*! 102 @brief MP種別情報に含まれるデータ形式です。 103 */ 104 enum MpTypeDataFormat 105 { 106 MP_TYPE_DATA_FORMAT_JPEG = 0x00000000, //!< データ形式はJPEGです。 107 108 MP_TYPE_DATA_FORMAT_MASK = 0x07000000 //!< データ形式のビットマスクです。 109 }; 110 111 /*! 112 @brief MP種別情報に含まれる種別コードです。 113 */ 114 enum MpTypeCode 115 { 116 MP_TYPE_CODE_BASELINE_MP_PRIMARY_IMAGE = 0x030000, //!< Baseline MP 主画像 (primary image)。 117 118 MP_TYPE_CODE_LARGE_THUMBNAIL_IMAGE_CLASS_1 = 0x010001, //!< モニタ表示用画像 (large thumbnail image)、クラス1 (VGA相当)。 119 MP_TYPE_CODE_LARGE_THUMBNAIL_IMAGE_CLASS_2 = 0x010002, //!< モニタ表示用画像 (large thumbnail image)、クラス2 (Full HD相当)。 120 121 MP_TYPE_CODE_MULTI_VIEW_PANORAMA_IMAGE = 0x020001, //!< マルチビュー (multi-view)、パノラマ画像 (panorama image)。 122 MP_TYPE_CODE_MULTI_VIEW_DISPARITY_IMAGE = 0x020002, //!< マルチビュー (multi-view)、立体視用画像 (disparity image)。 123 MP_TYPE_CODE_MULTI_VIEW_MULTI_ANGLE_IMAGE = 0x020003, //!< マルチビュー (multi-view)、マルチアングル画像 (multi-angle image)。 124 125 MP_TYPE_CODE_UNDEFINED = 0x000000, //!< 未定義種別。 126 127 MP_TYPE_CODE_MASK = 0xffffff //!< 種別コードのビットマスクです。 128 }; 129 130 131 /*! 132 @brief MPフォーマットで格納されたデータに含まれる、MPインデックスIFDを、 133 ライブラリで処理しやすい形式で保持する構造体です。 134 135 初期化(情報取得)は @ref JpegMpDecoder::GetMpIndex で行います。 136 137 取得した情報は @ref JpegMpDecoder::GetMpEntry や @ref JpegMpDecoder::GetMpAttribute 等で参照されます。 138 */ 139 struct MpIndex 140 { 141 const u8* src; 142 size_t srcSize; 143 size_t mpEntrySize; 144 size_t imageUidListSize; 145 size_t offsetToMpEntry; 146 size_t offsetToImageUidList; 147 size_t offsetToMpIndexIfd; 148 size_t offsetToBase; 149 150 bool isLittleEndian; 151 bool isMpfVersionValid; 152 bool isNumberOfImagesValid; 153 bool isTotalFramesValid; 154 155 u8 mpfVersion[MPF_VERSION_SIZE]; 156 u32 numberOfImages; 157 u32 totalFrames; 158 }; 159 160 /*! 161 @brief MPフォーマットで格納されたデータに含まれる、MPエントリを、 162 ライブラリで処理しやすい形式で保持する構造体です。 163 164 初期化(情報取得)は @ref JpegMpDecoder::GetMpEntry で行います。 165 */ 166 struct MpEntry 167 { 168 u32 type; //!< 個別画像種別管理情報。 169 size_t imageDataSize; //!< 個別画像サイズ(バイト数)。 170 size_t offsetToImageData; //!< 個別画像データオフセット。先頭画像データからのものであり、MPフォーマットの「オフセットアドレスの基点」を処理済みです。 171 u16 dependentImage1EntryNum; //!< 従属画像1エントリ番号。 172 u16 dependentImage2EntryNum; //!< 従属画像2エントリ番号。 173 const u8* pFirstImageData; //!< 先頭画像データへのポインタ。 174 }; 175 176 177 /*! 178 @brief MP個別情報IFDおよびGPS IFDのメンバに使われる、RATIONAL (符号無し有理数)のデータ型です。 179 180 value[0]が分子、value[1]が分母です。 181 */ 182 struct Rational 183 { 184 u32 value[NUM_RATIONAL_WORDS]; 185 }; 186 187 /*! 188 @brief MP個別情報IFDおよびGPS IFDのメンバに使われる、SRATIONAL (符号付き有理数)のデータ型です。 189 190 value[0]が分子、value[1]が分母です。 191 */ 192 struct Srational 193 { 194 s32 value[NUM_SRATIONAL_WORDS]; 195 }; 196 197 198 /*! 199 @brief MPフォーマットで格納されたデータに含まれる、MP個別情報IFDを、 200 ライブラリで処理しやすい形式で保持する構造体です。 201 202 初期化(情報取得)は @ref JpegMpDecoder::GetMpAttribute で行います。 203 */ 204 struct MpAttribute 205 { 206 bool isMpfVersionValid; //!< MPフォーマットバージョンが有効かどうか。 207 bool isMpIndividualNumValid; //!< 個別画像番号が有効かどうか。 208 bool isPanOrientationValid; //!< パノラマ画像配置が有効かどうか。 209 bool isPanOverlapHValid; //!< 水平オーバーラップが有効かどうか。 210 211 bool isPanOverlapVValid; //!< 垂直オーバーラップが有効かどうか。 212 bool isBaseViewpointNumValid; //!< 基準視点番号が有効かどうか。 213 bool isConvergenceAngleValid; //!< 輻輳角が有効かどうか。 214 bool isBaselineLengthValid; //!< 基線長が有効かどうか。 215 216 bool isVerticalDivergenceValid; //!< 水平からのずれが有効かどうか。 217 bool isAxisDistanceXValid; //!< 水平軸方向の距離(X)が有効かどうか。 218 bool isAxisDistanceYValid; //!< 水平軸方向の距離(Y)が有効かどうか。 219 bool isAxisDistanceZValid; //!< 水平軸方向の距離(Z)が有効かどうか。 220 221 bool isYawAngleValid; //!< ヨー角が有効かどうか。 222 bool isPitchAngleValid; //!< ピッチ角が有効かどうか。 223 bool isRollAngleValid; //!< ロール角が有効かどうか。 224 u8 reserved[1]; //!< 予約(無視されます)。 225 226 u8 mpfVersion[MPF_VERSION_SIZE]; //!< MPフォーマットバージョン。 227 u32 mpIndividualNum; //!< 個別画像番号。 228 u32 panOrientation; //!< パノラマ画像配置。 229 Rational panOverlapH; //!< 水平オーバーラップ。 230 Rational panOverlapV; //!< 垂直オーバーラップ。 231 u32 baseViewpointNum; //!< 基準視点番号。 232 Srational convergenceAngle; //!< 輻輳角。 233 Rational baselineLength; //!< 基線長。 234 Srational verticalDivergence; //!< 水平からのずれ。 235 Srational axisDistanceX; //!< 水平軸方向の距離(X)。 236 Srational axisDistanceY; //!< 水平軸方向の距離(Y)。 237 Srational axisDistanceZ; //!< 水平軸方向の距離(Z)。 238 Srational yawAngle; //!< ヨー角。 239 Srational pitchAngle; //!< ピッチ角。 240 Srational rollAngle; //!< ロール角。 241 }; 242 243 /*! 244 @brief JPEGデータを再構成するための領域情報(ポインタとバイト数)を保持する構造体です。 245 246 @ref JpegMpEncoder::StartMpEncoderFirst 、@ref JpegMpEncoder::StartMpEncoderNext あるいは @ref JpegMpEncoder::StartMpEncoderLR 247 によるエンコード結果から領域情報を取得する場合、@ref JpegMpEncoder::GetMpRegionsToBuildJpegData を使ってください。 248 249 MPフォーマットで格納された個別画像データから領域情報を取得する場合、@ref JpegMpDecoder::GetMpRegionsToBuildJpegData を使ってください。 250 */ 251 struct MpRegionsToBuildJpegData 252 { 253 const u8* pSrc1; //!< 前半領域へのポインタ。 254 size_t size1; //!< 前半領域のバイト数。 255 const u8* pSrc2; //!< 後半領域へのポインタ。 256 size_t size2; //!< 後半領域のバイト数。 257 }; 258 259 /*! 260 @brief GPS IFDを、ライブラリで処理しやすい形式で保持する構造体です。 261 262 デコード後(Exif情報抽出後)の情報取得には @ref JpegMpDecoder::GetLastGpsData を使ってください。<BR> 263 エンコード前の情報登録には、最初に @ref JpegMpEncoder::InitializeGpsData で初期化し、@ref JpegMpEncoder::SetGpsLatitude 等でデータを登録してください。最後に @ref JpegMpEncoder::SetGpsData で登録内容を確定してください。 264 */ 265 struct GpsData 266 { 267 bool isVersionIdValid; //!< versionIdが有効かどうか。 268 bool isLatitudeValid; //!< latitudeが有効かどうか。 269 bool isLongitudeValid; //!< longitudeが有効かどうか。 270 bool isAltitudeRefValid; //!< altitudeRefが有効かどうか。 271 272 bool isAltitudeValid; //!< altitudeが有効かどうか。 273 bool isTimeStampValid; //!< timeStampが有効かどうか。 274 bool isDopValid; //!< dopが有効かどうか。 275 bool isSpeedValid; //!< speedが有効かどうか。 276 277 bool isTrackValid; //!< trackが有効かどうか。 278 bool isImgDirectionValid; //!< imgDirectionが有効かどうか。 279 bool isDestLatitudeValid; //!< destLatitudeが有効かどうか。 280 bool isDestLongitudeValid; //!< destLongitudeが有効かどうか。 281 282 bool isDestBearingValid; //!< destBearingが有効かどうか。 283 bool isDestDistanceValid; //!< destDistanceが有効かどうか。 284 bool isDifferentialValid; //!< differentialが有効かどうか。 285 286 u8 altitudeRef; //!< 高度の基準。 287 288 u8 versionId[GPS_VERSION_ID_SIZE]; //!< GPSタグのバージョン。 289 290 char latitudeRef[GPS_REF_SIZE]; //!< 北緯(N) or 南緯(S)。[0]が0でなければ有効。[1]は常に0。 291 char longitudeRef[GPS_REF_SIZE]; //!< 東経(E) or 西経(W)。[0]が0でなければ有効。[1]は常に0。 292 293 char status[GPS_REF_SIZE]; //!< GPS受信機の状態。[0]が0でなければ有効。[1]は常に0。 294 char measureMode[GPS_REF_SIZE]; //!< GPSの測位方法。[0]が0でなければ有効。[1]は常に0。 295 296 char speedRef[GPS_REF_SIZE]; //!< 速度の単位。[0]が0でなければ有効。[1]は常に0。 297 char trackRef[GPS_REF_SIZE]; //!< 進行方向の単位。[0]が0でなければ有効。[1]は常に0。 298 299 char imgDirectionRef[GPS_REF_SIZE]; //!< 撮影した画像の方向の単位。[0]が0でなければ有効。[1]は常に0。 300 char destLatitudeRef[GPS_REF_SIZE]; //!< 目的地の北緯(N) or 南緯(S)。[0]が0でなければ有効。[1]は常に0。 301 302 char destLongitudeRef[GPS_REF_SIZE]; //!< 目的地の東経(E) or 西経(W)。[0]が0でなければ有効。[1]は常に0。 303 char destBearingRef[GPS_REF_SIZE]; //!< 目的地の方角の単位。[0]が0でなければ有効。[1]は常に0。 304 305 char destDistanceRef[GPS_REF_SIZE]; //!< 目的地までの距離の単位。[0]が0でなければ有効。[1]は常に0。 306 u16 differential; //!< GPS補正測位。 307 308 Rational latitude[NUM_GPS_LATITUDE_RATIONALS]; //!< 緯度(数値)。 309 Rational longitude[NUM_GPS_LONGITUDE_RATIONALS]; //!< 経度(数値)。 310 Rational altitude; //!< 高度(数値)。 311 Rational timeStamp[NUM_GPS_TIME_STAMP_RATIONALS]; //!< GPS時間(原子時計の時間)。 312 const char* pSatellites; //!< 測位に使った衛星信号。NULLでなければ有効。 313 Rational dop; //!< 測位の信頼性。 314 Rational speed; //!< 速度(数値)。 315 Rational track; //!< 進行方向(数値)。 316 Rational imgDirection; //!< 撮影した画像の方向(数値)。 317 const char* pMapDatum; //!< 測位に用いた地図データ。NULLでなければ有効。 318 Rational destLatitude[NUM_GPS_LATITUDE_RATIONALS]; //!< 目的地の緯度(数値)。 319 Rational destLongitude[NUM_GPS_LONGITUDE_RATIONALS]; //!< 目的地の経度(数値)。 320 Rational destBearing; //!< 目的の方角(数値)。 321 Rational destDistance; //!< 目的地までの距離(数値)。 322 const u8* pProcessingMethod; //!< 測位方式の名称。NULLでなければ有効。 323 size_t processingMethodSize; //!< pProcessingMethodのデータバイト数。0でなければ有効。 324 const u8* pAreaInformation; //!< 測位地点の名称。NULLでなければ有効。 325 size_t areaInformationSize; //!< pAreaInformationのデータバイト数。0でなければ有効。 326 const char* pDateStamp; //!< GPS日付。NULLでなければ有効。 327 }; 328 329 /*! 330 @brief 直前に行ったエンコードの失敗原因です。 331 332 @ref JpegMpEncoder::GetLastError の返り値です。 333 */ 334 enum EncoderErrorCode 335 { 336 JPEG_ENCODER_ERROR_NONE = 0, //!< エラーはありません。 337 JPEG_ENCODER_ERROR_NOT_INITIALIZED = -1, //!< エンコーダオブジェクトが未初期化です。 338 JPEG_ENCODER_ERROR_INVALID_ARGUMENT = -2, //!< 引数が不正です。 339 JPEG_ENCODER_ERROR_SRC_ALIGNMENT = -3, //!< 画像データバッファ(src)のアラインメントが不正です。 340 JPEG_ENCODER_ERROR_APP1 = -4, //!< APP1セグメントのデータバイト数が0xFFFFバイトを超えたため、エンコードに失敗しました。サムネイルやメーカーノート等を削減してください。 341 JPEG_ENCODER_ERROR_APP2_MP = -5, //!< APP2セグメントのデータバイト数が0xFFFFバイトを超えたため、エンコードに失敗しました。MPフォーマットの格納画像数を削減してください。 342 JPEG_ENCODER_ERROR_INVALID_MP_NUM_IMAGES = -6, //!< MPフォーマットの画像枚数の指定が不正です。 343 JPEG_ENCODER_ERROR_INVALID_MP_TYPE_CODE = -7, //!< MPフォーマットのMP種別の指定が不正です。 344 JPEG_ENCODER_ERROR_INVALID_MP_SEQUENCE = -8, //!< MPフォーマットのエンコード順序が不正です。先頭画像をエンコードしていないのに後続画像をエンコードしようとしたか、指定枚数以上エンコードしようとしました。 345 JPEG_ENCODER_ERROR_INSUFFICIENT_OUTPUT_BUFFER = -9, //!< エンコード結果バッファのバイト数が不足しています。 346 347 JPEG_ENCODER_ERROR_INTERNAL = -127 //!< このエラーが発生した場合、ライブラリの実装に問題があります。 348 }; 349 350 /*! 351 @brief 直前に行ったデコード等の失敗原因です。 352 353 @ref JpegMpDecoder::GetLastError の返り値です。 354 */ 355 enum DecoderErrorCode 356 { 357 JPEG_DECODER_ERROR_NONE = 0, //!< エラーはありません。 358 JPEG_DECODER_ERROR_NOT_INITIALIZED = -1, //!< デコーダオブジェクトが未初期化です。 359 JPEG_DECODER_ERROR_INVALID_ARGUMENT = -2, //!< 引数が不正です。 360 JPEG_DECODER_ERROR_DST_ALIGNMENT = -3, //!< デコード関数の出力バッファ(dst)のアラインメントが不正です。 361 JPEG_DECODER_ERROR_DST_BUFFER_SIZE = -4, //!< デコード関数の出力バッファのバイト数が不足しています。 362 363 JPEG_DECODER_ERROR_STOPPED = -10, //!< アプリケーションからの要求により、デコード処理を中止しました。 364 365 JPEG_DECODER_ERROR_WIDTH_HEIGHT = -20, //!< 画像の幅か高さが、0あるいは最大値を超えています。 366 JPEG_DECODER_ERROR_WIDTH_HEIGHT_DIFFERENT = -21, //!< 画像の幅か高さが、指定値と一致していません。あるいは、2枚の画像サイズが一致していません。 367 368 JPEG_DECODER_ERROR_EXIF = -30, //!< Exif情報を処理できませんでした。 369 JPEG_DECODER_ERROR_THUMBNAIL = -31, //!< サムネイルが見つからなかったか、サムネイルをデコードできませんでした。非圧縮サムネイルや、Exif以外のサムネイルはデコードできません。 370 371 JPEG_DECODER_ERROR_MP = -32, //!< MPフォーマット付属情報(MPインデックスIFDあるいはMP個別情報IFD)を処理できませんでした。 372 JPEG_DECODER_ERROR_MP_NOT_FOUND = -33, //!< MPフォーマット付属情報が見つかりませんでした。 373 374 JPEG_DECODER_ERROR_MARKER_COMBINATION = -50, //!< データ(マーカ)を処理できませんでした。マーカの組み合わせが不正です。例えば、SOFマーカに対応するSOSマーカが見つかりませんでした。 375 376 JPEG_DECODER_ERROR_SOI = -60, //!< データ(SOIマーカ)を処理できませんでした。 377 JPEG_DECODER_ERROR_SOF = -61, //!< データ(SOFマーカ)を処理できませんでした。 378 JPEG_DECODER_ERROR_SOF_BLOCK_ID = -62, //!< データ(SOFマーカ)を処理できませんでした。 379 JPEG_DECODER_ERROR_DHT = -63, //!< データ(DHTマーカ)を処理できませんでした。 380 JPEG_DECODER_ERROR_SOS = -64, //!< データ(SOSマーカ)を処理できませんでした。 381 JPEG_DECODER_ERROR_DQT = -65, //!< データ(DQTマーカ)を処理できませんでした。 382 JPEG_DECODER_ERROR_DRI = -66, //!< データ(DRIマーカ)を処理できませんでした。 383 JPEG_DECODER_ERROR_SOS_NOT_FOUND = -67, //!< SOSマーカが見つかりませんでした。 384 JPEG_DECODER_ERROR_SOF_NOT_FOUND = -68, //!< SOFマーカが見つかりませんでした。 385 JPEG_DECODER_ERROR_DQT_NOT_FOUND = -69, //!< DQTマーカが見つかりませんでした。 386 JPEG_DECODER_ERROR_DHT_NOT_FOUND = -70, //!< DHTマーカが見つかりませんでした。 387 388 JPEG_DECODER_ERROR_UNDERRUN_0 = -90, //!< データを処理できませんでした。 389 JPEG_DECODER_ERROR_UNDERRUN_1 = -91, //!< データを処理できませんでした。 390 JPEG_DECODER_ERROR_UNDERRUN_2 = -92, //!< データを処理できませんでした。 391 JPEG_DECODER_ERROR_UNDERRUN_3 = -93, //!< データを処理できませんでした。 392 JPEG_DECODER_ERROR_UNDERRUN_4 = -94, //!< データを処理できませんでした。 393 JPEG_DECODER_ERROR_UNDERRUN_5 = -95, //!< データを処理できませんでした。 394 JPEG_DECODER_ERROR_UNDERRUN_6 = -96, //!< データを処理できませんでした。 395 396 JPEG_DECODER_ERROR_RANGE_0 = -110, //!< データを処理できませんでした。 397 JPEG_DECODER_ERROR_RANGE_1 = -111, //!< データを処理できませんでした。 398 JPEG_DECODER_ERROR_RANGE_2 = -112, //!< データを処理できませんでした。 399 JPEG_DECODER_ERROR_RANGE_3 = -113, //!< データを処理できませんでした。 400 JPEG_DECODER_ERROR_RANGE_4 = -114, //!< データを処理できませんでした。 401 JPEG_DECODER_ERROR_RANGE_5 = -115, //!< データを処理できませんでした。 402 403 JPEG_DECODER_ERROR_HLB_0 = -120, //!< データを処理できませんでした。 404 405 JPEG_DECODER_ERROR_INTERNAL = -127 //!< このエラーが発生した場合、ライブラリの実装に問題があります。 406 }; 407 408 /*! 409 @brief エンコード時のオプションです。 410 411 デフォルト値は @ref JPEG_ENCODER_OPTION_NONE (0) です。 412 413 @ref JpegMpEncoder::SetOption で、これらの定数をビット論理和した値を指定できます。 414 415 <UL> 416 <LI> @ref JPEG_ENCODER_OPTION_NONE<BR> 417 値は0であり、単独で指定するとオプションをクリアできます。 418 419 <LI> @ref JPEG_ENCODER_OPTION_OMIT_APP1<BR> 420 サムネイルを付加しない場合、APP1を記録しません(サムネイルを付加する場合、オプション指定にかかわらずAPP1を記録します)。 421 422 <LI> @ref JPEG_ENCODER_OPTION_OMIT_DHT<BR> 423 DHT (ハフマンテーブル)を記録しません。<BR> 424 DHTを記録しないJPEGデータをデコードする場合、@ref JpegMpDecoder::SetOption で @ref JPEG_DECODER_OPTION_ENABLE_DEFAULT_DHT を指定する必要があります。<BR> 425 また、@ref JpegMpDecoder クラス以外のJPEGデコーダではデコードできない可能性があります。 426 </UL> 427 428 @ref JpegMpEncoder::GetOption の返り値は、これらの定数のビット論理和です。 429 */ 430 enum EncoderOption 431 { 432 JPEG_ENCODER_OPTION_NONE = 0, 433 JPEG_ENCODER_OPTION_OMIT_APP1 = 0x80000000, 434 JPEG_ENCODER_OPTION_OMIT_DHT = 0x40000000 435 }; 436 437 /*! 438 @brief デコード時のオプションです。 439 440 デフォルト値は @ref JPEG_DECODER_OPTION_NONE (0) です。 441 442 @ref JpegMpDecoder::SetOption で、これらの定数をビット論理和した値を指定できます。<BR> 443 444 <UL> 445 <LI> @ref JPEG_DECODER_OPTION_NONE<BR> 446 値は0であり、単独で指定するとオプションをクリアできます。 447 448 <LI> @ref JPEG_DECODER_OPTION_ENABLE_DEFAULT_DHT<BR> 449 JPEGデータ中にDHT (ハフマンテーブル)が見つからなかった場合、ライブラリ内蔵の標準ハフマンテーブルを使います。 450 デコード関数のデフォルト動作では、エラーになります (@ref JpegMpDecoder::GetLastError が返すエラーコードは、他のエラーが発生していなければ @ref JPEG_DECODER_ERROR_DHT_NOT_FOUND です)。<BR> 451 @ref JpegMpEncoder クラスでDHTを記録しないでエンコードしたJPEGデータに対しては、このオプション指定が必要です。 452 453 <LI> @ref JPEG_DECODER_OPTION_MATCH_WIDTH_HEIGHT<BR> 454 画像サイズが指定値と一致している場合のみデコードを行い、そうでなければエラーになります (@ref JpegMpDecoder::GetLastError が返すエラーコードは、他のエラーが発生していなければ @ref JPEG_DECODER_ERROR_WIDTH_HEIGHT_DIFFERENT です)。<BR> 455 デコード関数のデフォルト動作では、指定値以内であればデコードを行います。 456 </UL> 457 458 @ref JpegMpDecoder::GetOption の返り値は、これらの定数のビット論理和です。 459 */ 460 enum DecoderOption 461 { 462 JPEG_DECODER_OPTION_NONE = 0, 463 JPEG_DECODER_OPTION_ENABLE_DEFAULT_DHT = 0x00000001, 464 JPEG_DECODER_OPTION_MATCH_WIDTH_HEIGHT = 0x00000002 465 }; 466 467 namespace detail { 468 const size_t TWL_PRIVATE_DATA_SIZE = 28; 469 const size_t MAX_TWL_PHOTO_DATA_SIZE = (200 * 1024 - 1); 470 471 enum 472 { 473 MAKER_NOTE_INDEX_USER = 0, 474 MAKER_NOTE_INDEX_SYS_1, 475 MAKER_NOTE_INDEX_SYS_2, 476 MAKER_NOTE_INDEX_SYS_3, 477 478 NUM_MAKER_NOTES // これはインデックスとして指定できません。 479 }; 480 481 struct JpegMpEncoderTemporarySettingObj 482 { 483 u16 dependentImage1EntryNum; 484 u16 dependentImage2EntryNum; 485 u16 orientation; 486 bool isOrientationSet; 487 bool padding[1]; 488 u32 thumbnailWidth; 489 u32 thumbnailHeight; 490 u32 inputBufferWidth; 491 u32 option; 492 struct 493 { 494 const u8* pData; 495 size_t size; 496 } makerNotes[NUM_MAKER_NOTES]; 497 const u8* pTwlPhotoMakerNoteData; 498 const char* pSoftware; 499 const GpsData* pGpsData; 500 char dateTimeBuffer[DATE_TIME_SIZE]; 501 char imageUidBuffer[IMAGE_UID_SIZE]; 502 bool isImageUidSet; 503 bool isDateTimeSet; 504 PixelSampling thumbnailSampling; 505 506 bool isDependentParent; 507 bool isDependentChild; 508 bool isRepresentativeSet; 509 bool isRepresentative; 510 MpAttribute mpAttribute; 511 }; 512 513 struct JpegMpDecoderTemporarySettingObj 514 { 515 u32 outputBufferWidth; 516 u32 option; 517 }; 518 } 519 520 } // namespace CTR { 521 } // namespace jpeg { 522 } // namespace nn { 523 524 #endif // __cplusplus 525 526 #endif // NN_JPEG_JPEGMPTYPES_H_ 527