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